<?xml version="1.0" encoding="UTF-8"?>
<records type="array">
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>@Chitostyle B-)  ~O-O~</content>
    <created-at type="datetime">2010-03-02T15:53:47-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">10</feed-id>
    <format nil="true"></format>
    <header>Tweet: @Chitostyle B-) ~O-O~</header>
    <id type="integer">1913</id>
    <lang nil="true"></lang>
    <permalink>http://twitter.com/joem/statuses/9893063336</permalink>
    <updated-at type="datetime">2010-03-02T16:00:36-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>I seem to be unable to keep my appointments lately.  Maybe I should outsource me.</content>
    <created-at type="datetime">2010-03-02T15:28:05-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">10</feed-id>
    <format nil="true"></format>
    <header>Tweet: I seem to be unable...</header>
    <id type="integer">1914</id>
    <lang nil="true"></lang>
    <permalink>http://twitter.com/joem/statuses/9892082883</permalink>
    <updated-at type="datetime">2010-03-02T16:00:37-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>&lt;img src=&quot;http://craphound.com/images/18357_277482507276_277479937276_3208658_3122349_s.jpg&quot; align=&quot;right&quot;&gt;
Carl sez, &quot;A petition to make Hella- the official SI prefix for 10^27, for measuring things bigger than Yotta- (the prefix for (US) billion trillion).

For instance: 'the sun (mass of 2.2 hellatons) would release energy at 0.3 hellawatts.'

It would also come in handy for eventually measuring Internet traffic and US national debt.&quot;

&lt;p&gt;
&lt;a href=&quot;http://www.facebook.com/pages/The-Official-Petition-to-Establish-Hella-as-the-SI-Prefix-for-1027/277479937276?v=info&quot;&gt;The Official Petition to Establish &quot;Hella-&quot; as the SI Prefix for 10^27
&lt;/a&gt;
&lt;p&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/SI_prefix&quot;&gt;List of SI prefixes&lt;/a&gt;
&lt;p&gt;
(&lt;i&gt;Thanks, Carl!&lt;/i&gt;)
&lt;div&gt;
&lt;em&gt;Previously:&lt;/em&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.boingboing.net/2010/02/27/punk-math-philosophy.html#previouspost&quot;&gt;Punk math philosophy and podcast &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boingboing.net/2009/09/07/the-math-book-from-p.html#previouspost&quot;&gt;The Math Book: From Pythagoras to the 57th Dimension, 250 ...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boingboing.net/2010/02/01/math-for-adults-the.html#previouspost&quot;&gt;Math for adults: the subtle wonder of numbers and Sesame Street ...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boingboing.net/2009/12/07/mobius-bagel-interlo.html#previouspost&quot;&gt;M&#246;bius Bagel: interlocking, endless, doughy rings of math &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boingboing.net/2010/01/18/3d-printed-math-and.html#previouspost&quot;&gt;3D-printed math and science sculptures &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boingboing.net/2009/03/03/march-is-math-holida.html#previouspost&quot;&gt;March is math holiday month, today is square root day!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boingboing.net/2009/08/15/zombie-apocalpyse-th.html#previouspost&quot;&gt;Zombie apocalpyse: the math geek edition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boingboing.net/2009/08/15/zombie-apocalpyse-th.html#previouspost&quot;&gt;Zombie apocalpyse: the math geek edition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;


&lt;br style=&quot;clear:both&quot;&gt;
&lt;br style=&quot;clear:both&quot;&gt;
&lt;a href=&quot;http://ads.pheedo.com/click.phdo?s=325bb88ddad984143ee6875f5a925035&amp;amp;p=1&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;border:0&quot; border=&quot;0&quot; src=&quot;http://ads.pheedo.com/img.phdo?s=325bb88ddad984143ee6875f5a925035&amp;amp;p=1&quot;&gt;&lt;/a&gt;
&lt;img alt=&quot;&quot; height=&quot;0&quot; width=&quot;0&quot; border=&quot;0&quot; src=&quot;http://a.rfihub.com/eus.gif?eui=2226&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/boingboing/iBag/~4/YvRE8nv0XOs&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content>
    <created-at type="datetime">2010-03-02T06:36:26-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">9</feed-id>
    <format>HTML</format>
    <header>Petition to make &quot;Hella&quot; the prefix for 1,000,000,000,000,000,000,000,000,000</header>
    <id type="integer">1912</id>
    <lang nil="true"></lang>
    <permalink>http://feedproxy.google.com/~r/boingboing/iBag/~3/YvRE8nv0XOs/petition-to-make-hel.html</permalink>
    <updated-at type="datetime">2010-03-02T11:00:33-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>&lt;blockquote&gt;Shared by  Joseph 
&lt;br&gt;
Epically strange.&lt;/blockquote&gt;
&lt;embed src=&quot;http://www.youtube.com/v/oavMtUWDBTM&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x5d1719&amp;amp;color2=0xcd311b&quot; allowScriptAccess=&quot;never&quot; allowFullScreen=&quot;true&quot; width=&quot;640&quot; height=&quot;505&quot; wmode=&quot;transparent&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;
&lt;br&gt;&lt;p&gt;Nothing I can say here will make this any better. &lt;em&gt;(Thanks Jim and Steve!)&lt;/em&gt;
&lt;br style=&quot;clear:both&quot;&gt;
&lt;br style=&quot;clear:both&quot;&gt;
&lt;a href=&quot;http://ads.pheedo.com/click.phdo?s=e7e4eb97f4565215326db6202105f400&amp;amp;p=1&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;border:0&quot; border=&quot;0&quot; src=&quot;http://ads.pheedo.com/img.phdo?s=e7e4eb97f4565215326db6202105f400&amp;amp;p=1&quot;&gt;&lt;/a&gt;
&lt;img alt=&quot;&quot; height=&quot;0&quot; width=&quot;0&quot; border=&quot;0&quot; src=&quot;http://a.rfihub.com/eus.gif?eui=2226&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/boingboing/iBag/~4/6IH6yPOR8IQ&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/p&gt;
</content>
    <created-at type="datetime">2010-03-02T05:59:50-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">9</feed-id>
    <format>HTML</format>
    <header>&#1071; &#1086;&#1095;&#1077;&#1085;&#1100; &#1088;&#1072;&#1076;, &#1074;&#1077;&#1076;&#1100; &#1103;, &#1085;&#1072;&#1082;&#1086;&#1085;&#1077;&#1094;, &#1074;&#1086;&#1079;&#1074;&#1088;&#1072;&#1097;&#1072;&#1102;&#1089;&#1100; &#1076;&#1086;&#1084;&#1086;&#1081;</header>
    <id type="integer">1911</id>
    <lang nil="true"></lang>
    <permalink>http://feedproxy.google.com/~r/boingboing/iBag/~3/6IH6yPOR8IQ/post-5.html</permalink>
    <updated-at type="datetime">2010-03-02T01:00:29-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>&lt;blockquote&gt;Shared by  sconover 
&lt;br&gt;
This is exactly what we do on Remix.  I won't go back (for a serious prod app).&lt;/blockquote&gt;
&lt;p&gt;One of the goals that my colleagues and I urge on our clients is
  that of a completely automated deployment process. Automating your
  deployment helps reduce the frictions and delays that crop up in
  between getting the software &quot;done&quot; and getting it to realize its
  value. Dave Farley and Jez Humble are finishing up a book on this topic
  - &lt;a href=&quot;http://continuousdelivery.com/&quot;&gt;Continuous
  Delivery&lt;/a&gt;. It builds upon many of the ideas that are commonly
  associated with &lt;a href=&quot;http://martinfowler.com/articles/continuousIntegration.html&quot;&gt;Continuous
  Integration&lt;/a&gt;, driving more towards this ability to rapidly put
  software into production and get it doing something. Their section
  on blue-green deployment caught my eye as one of those techniques
  that's underused, so I thought I'd give a brief overview of it here.&lt;/p&gt;&lt;img src=&quot;http://martinfowler.com/bliki/images/blueGreenDeployment/blue_green_deployments.png&quot;&gt;&lt;p&gt;One of the challenges with automating deployment is the cut-over
  itself, taking software from the final stage of testing to live
  production. You usually need to do this quickly in order to minimize
  downtime. The blue-green deployment approach does this by ensuring
  you have two production environments, as identical as possible. At
  any time one them, let's say blue for the example, is live. As you
  prepare a new release of your software you do your final stage of
  testing in green environment. Once the software is working in the
  green environment, you switch the router so that all incoming
  requests go to the green environment - the blue one is now idle.&lt;/p&gt;&lt;p&gt;Blue-green deployment also gives you a rapid way to rollback if
  anything goes wrong you switch the router back to your blue
  environment. There's still the issue of dealing with missed
  transactions while the green environment was live, but depending on
  your design you may be able to feed transactions to both
  environments in such a way as to keep the blue environment as a
  backup when the green is live. Or you may be able to put the application
  in read-only mode before cut-over, run it for a while in read-only
  mode, and then switch it to read-write mode. That may be enough to
  flush out many outstanding issues.&lt;/p&gt;&lt;p&gt;The two environments need to be different but as identical as
  possible. In some situations they can be different pieces of
  hardware, or they can be different virtual machines running on the
  same (or different) hardware. They can also be a single operating
  environment partitioned into separate zones with separate IP
  addresses for the two slices.&lt;/p&gt;&lt;p&gt;An advantage of this approach is that it's the same basic
  mechanism as you need to get a hot-standby working. Hence this
  allows you to test your disaster-recovery procedure on every
  release. (I hope that you release more frequently than you have a
  disaster.)&lt;/p&gt;&lt;p&gt;The fundamental idea is to have two easily switchable
  environments to switch between, there are plenty of ways to vary the
  details. One project did the switch by bouncing the web server
  rather than working on the router. Another variation would be to use
  the same database, making the blue-green switches for web and domain
  layers.&lt;/p&gt;&lt;p&gt;This technique has been &quot;out there&quot; for ages, but I don't see it
  used as often as it should be. Some foggy combination of &lt;a href=&quot;http://dannorth.net/&quot;&gt;Dan North&lt;/a&gt; and Jez Humble came up with the
  name.&lt;/p&gt;
</content>
    <created-at type="datetime">2010-03-02T05:49:47-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">9</feed-id>
    <format>HTML</format>
    <header>Bliki: BlueGreenDeployment</header>
    <id type="integer">1908</id>
    <lang nil="true"></lang>
    <permalink>http://martinfowler.com/bliki/BlueGreenDeployment.html</permalink>
    <updated-at type="datetime">2010-03-02T00:00:30-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>&lt;blockquote&gt;Shared by  sconover 
&lt;br&gt;
&quot;Not to mention that relational or not, they often times perform just as well as any other single instance key-value store when faced with large datasets&quot;&lt;br&gt;&lt;br&gt;A must-read if you're intrigued by the NoSQL stuff.&lt;/blockquote&gt;
&lt;p&gt;&lt;img align=&quot;left&quot; src=&quot;http://www.igvita.com/posts/10/cambrian-db.png&quot; style=&quot;margin-right:1em&quot;&gt;Amidst the cambrian explosion of alternative database engines (aka, NoSQL) it is almost too easy to lose sight of the fact that the more established solutions, such as relational databases, still have a lot to offer: stable and proven code base, drivers and tools for every conceivable language, and more features than any DBA cares to learn about. Not to mention that relational or not, they often times perform just as well as any other single instance key-value store when faced with large datasets - hence the reason why &lt;a href=&quot;http://riak.basho.com/&quot;&gt;Riak&lt;/a&gt;, &lt;a href=&quot;http://project-voldemort.com/&quot;&gt;Voldemort&lt;/a&gt; and others use InnoDB as their data stores.  Granted, the &#8220;feature bloat&#8221; is also the reason why a rewrite can be a good idea, but it also feels like this gray zone is too often overlooked in the NoSQL community - just because you are &#8220;NoSQL&#8221; does not mean you have to throw away years of work put into relational databases.&lt;/p&gt;
&lt;p&gt;Setting aside the fact that we are yet to define what &#8220;NoSQL&#8221; actually is, some of the attributes that we commonly glob under this label are: document based, schema-free, distributed and &#8220;scalable&#8221;. The fact that being distributed and being scalable are not one and the same is a subject for another post, instead let&#8217;s take a closer look at what schema-free and document-based actually means. In fact, let me jump ahead: I am genuinely surprised that we are yet to see a schema-free engine built on top of MySQL. I know, I know, but suspend you disbelief for a second, because it is not as outrageous as it sounds.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Document Based: a Double Edged Sword&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Database_normalization#Objectives_of_normalization&quot;&gt;original reason&lt;/a&gt; for and the benefit of the relational model is that by constraining the data schema (read, eliminating structural complexity of the data, or decomposing it into relations), you actually gain power and flexibility in the types of queries you can execute against your database. Said another way, normalized data design allows us to have a &lt;a href=&quot;http://en.wikipedia.org/wiki/Sql&quot;&gt;general-purpose query language&lt;/a&gt;, which allows for queries whose parameters we do not even know at design time, whereas denormalized designs do not. What we loose in flexibility of our data structures, we gain in our ability to interact with the data. Hence, in theory, if you have no way to anticipate the types of queries in the future, a relation model is your best bet. Lose some, win some, chose your poison.&lt;/p&gt;
&lt;p&gt;&lt;img align=&quot;left&quot; src=&quot;http://www.igvita.com/posts/10/nested-data.png&quot; style=&quot;margin-right:1em&quot;&gt;At the same time, we all know that &#8220;no join is faster than no join&#8221;. The inherent disadvantage of decomposing your data is the required assembly. If you are looking for &#8220;speed&#8221; or &#8220;scalability&#8221;, then denormalizing your data is usually the first step. The disadvantage? Now you have introduced a number of potential anomalies into your data: updates, inserts, and deletes can cause data inconsistencies unless you keep careful accounting of all duplication. One-to-One, and One-to-Many relations are usually easy to manage, but Many-to-Many in denormalized schemas are nothing but a recipe for disaster. That is, if you care about &lt;a href=&quot;http://en.wikipedia.org/wiki/ACID#Consistency&quot;&gt;consistency&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, since you lose the power of a general purpose query language (SQL), you are now at a mercy of the DSL provided by your new database. Mongo, Couch and many others had to introduce their own query language constructs alongside &quot;map-reduce&quot; functionality to address the problem of querying arbitrarily deep records. Now, I am a fan of both, but frankly, none I have worked with so far are as clean, or as easy to understand as SQL (&lt;a href=&quot;http://rickosborne.org/download/SQL-to-MongoDB.pdf&quot;&gt;case in point&lt;/a&gt;) - with the downside of making me learn yet another query language.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Schema-free != Document Based&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Document based and schema-free are often used interchangeably, but there is an important difference: schema-free does not necessarily imply nested data structures. Likewise, just because MySQL is &#8220;relational&#8221; does not mean that it must be fixed to a predefined schema - at create time, maybe, but not at runtime. Intersect the two statements, and it means that there is absolutely no reason why we cannot have a schema-free engine in MySQL:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;javascript:void(0);&quot;&gt; &lt;b&gt;&amp;gt; schema-free.sql&lt;/b&gt;&lt;/a&gt;
&lt;/p&gt;&lt;div style=&quot;background:white&quot;&gt;
&lt;pre&gt;mysql&amp;gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;USE&lt;/span&gt; noschema;
mysql&amp;gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;TABLE&lt;/span&gt; widgets;  &lt;span style=&quot;color:#808080;font-style:italic&quot;&gt;/* look ma, no schema! */&lt;/span&gt;
mysql&amp;gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;INSERT&lt;/span&gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;INTO&lt;/span&gt; widgets &lt;span style=&quot;color:#66cc66&quot;&gt;(&lt;/span&gt;id, name&lt;span style=&quot;color:#66cc66&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;VALUES&lt;/span&gt;&lt;span style=&quot;color:#66cc66&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#ff0000&quot;&gt;&quot;a&quot;&lt;/span&gt;, &lt;span style=&quot;color:#ff0000&quot;&gt;&quot;apple&quot;&lt;/span&gt;&lt;span style=&quot;color:#66cc66&quot;&gt;)&lt;/span&gt;;
mysql&amp;gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;INSERT&lt;/span&gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;INTO&lt;/span&gt; widgets &lt;span style=&quot;color:#66cc66&quot;&gt;(&lt;/span&gt;id, name, type&lt;span style=&quot;color:#66cc66&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;VALUES&lt;/span&gt;&lt;span style=&quot;color:#66cc66&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#ff0000&quot;&gt;&quot;b&quot;&lt;/span&gt;, &lt;span style=&quot;color:#ff0000&quot;&gt;&quot;blackberry&quot;&lt;/span&gt;, &lt;span style=&quot;color:#ff0000&quot;&gt;&quot;phone&quot;&lt;/span&gt;&lt;span style=&quot;color:#66cc66&quot;&gt;)&lt;/span&gt;;
&#160;
mysql&amp;gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;SELECT&lt;/span&gt; * &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;FROM&lt;/span&gt; widgets &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;WHERE&lt;/span&gt; id = &lt;span style=&quot;color:#ff0000&quot;&gt;&quot;a&quot;&lt;/span&gt;;
+&lt;span style=&quot;color:#808080;font-style:italic&quot;&gt;---------+---------------+&lt;/span&gt;
| id      | name          |
+&lt;span style=&quot;color:#808080;font-style:italic&quot;&gt;---------+---------------+&lt;/span&gt;
| a       | apple         |
+&lt;span style=&quot;color:#808080;font-style:italic&quot;&gt;---------+---------------+&lt;/span&gt;
&#160;
mysql&amp;gt; &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;SELECT&lt;/span&gt; * &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;FROM&lt;/span&gt; widgets;
+&lt;span style=&quot;color:#808080;font-style:italic&quot;&gt;---------+---------------+--------+&lt;/span&gt;
| id      | name          | type   |
+&lt;span style=&quot;color:#808080;font-style:italic&quot;&gt;---------+---------------+--------+&lt;/span&gt;
| a       | apple         | &lt;span style=&quot;color:#993333;font-weight:bold&quot;&gt;NULL&lt;/span&gt;   |
| b       | blackberry    | phone  |
+&lt;span style=&quot;color:#808080;font-style:italic&quot;&gt;---------+---------------+--------+&lt;/span&gt;
&#160;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;As long as we avoid nested data structures, then there is no reason why we should be limited by the columns defined in our tables because we can compose and decompose any relation at runtime. Not only would this mean no migrations or need to store null values, but you could also keep all the tools, drivers, and the SQL query language while adding the full flexibility of being schema-free. &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Schema-free DB on top of MySQL&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Not able to find any project that would give me this behavior, I ended up prototyping it myself over the weekend, and believe it or not, it works just fine. In fact, the output above is from a real console session with MySQL. All it took is an &lt;a href=&quot;http://github.com/igrigorik/em-proxy&quot;&gt;em-proxy server&lt;/a&gt; with a little low-level protocol and query rewriting, and all of the sudden, my MySQL forgot that it requires a schema. Take it for a test-drive yourself (you will need Ruby 1.9):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
git clone git://github.com/igrigorik/em-proxy.git &amp;amp;&amp;amp; cd em-proxy&lt;br&gt;
ruby examples/schemaless-mysql/mysql_interceptor.rb&lt;br&gt;
&lt;strong&gt;mysql -h localhost -P 3307 --protocol=tcp&lt;/strong&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;javascript:void(0);&quot;&gt; &lt;b&gt;&amp;gt; schema-free-mysql.rb&lt;/b&gt;&lt;/a&gt;
&lt;/p&gt;&lt;div style=&quot;background:white&quot;&gt;
&lt;pre&gt;&lt;span style=&quot;color:#008000;font-style:italic&quot;&gt;# snip ... &lt;/span&gt;
&lt;span style=&quot;color:#008000;font-style:italic&quot;&gt;# build the select statements, hide the tables behind each attribute&lt;/span&gt;
join = &lt;span style=&quot;color:#996600&quot;&gt;&quot;select #{table}.id as id &quot;&lt;/span&gt;
tables.&lt;span style=&quot;color:#9900CC&quot;&gt;each&lt;/span&gt; &lt;span style=&quot;color:#9966CC;font-weight:bold&quot;&gt;do&lt;/span&gt; |column|
  join += &lt;span style=&quot;color:#996600&quot;&gt;&quot; , #{table}_#{column}.value as #{column} &quot;&lt;/span&gt;
&lt;span style=&quot;color:#9966CC;font-weight:bold&quot;&gt;end&lt;/span&gt;
&#160;
&lt;span style=&quot;color:#008000;font-style:italic&quot;&gt;# add the joins to stich it all together&lt;/span&gt;
join += &lt;span style=&quot;color:#996600&quot;&gt;&quot; FROM #{table} &quot;&lt;/span&gt;
tables.&lt;span style=&quot;color:#9900CC&quot;&gt;each&lt;/span&gt; &lt;span style=&quot;color:#9966CC;font-weight:bold&quot;&gt;do&lt;/span&gt; |column|
  join += &lt;span style=&quot;color:#996600&quot;&gt;&quot; LEFT OUTER JOIN #{table}_#{column} ON #{table}_#{column}.id = #{table}.id &quot;&lt;/span&gt;
&lt;span style=&quot;color:#9966CC;font-weight:bold&quot;&gt;end&lt;/span&gt;
&#160;
join += &lt;span style=&quot;color:#996600&quot;&gt;&quot; WHERE #{table}.id = '#{key}' &quot;&lt;/span&gt; &lt;span style=&quot;color:#9966CC;font-weight:bold&quot;&gt;if&lt;/span&gt; key
&#160;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;div&gt;
							&lt;a href=&quot;http://www.igvita.com/download.php?file=http://www.github.com/igrigorik/em-proxy/blob/master/examples/schemaless-mysql/mysql_interceptor.rb&quot;&gt;&lt;img alt=&quot;Download&quot; src=&quot;http://www.igvita.com/wp-content/plugins/dBeautifier/icons/downloads.png&quot;&gt;&lt;/a&gt;
							&lt;h4&gt;
								&lt;a href=&quot;http://www.igvita.com/download.php?file=http://www.github.com/igrigorik/em-proxy/blob/master/examples/schemaless-mysql/mysql_interceptor.rb&quot;&gt;mysql_interceptor.rb (MySQL Proxy in Ruby)&lt;/a&gt;
							&lt;/h4&gt;&lt;p&gt;Downloads: 4 File Size: 0.0 KB &lt;/p&gt;
						&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Of course, this is nothing but a cute code example nor does it even cover all the different use cases, but let us look at the feature set: driver support for every language (you can point Rails + ActiveRecord, JDBC, etc.  at it out the box, no problem), tool support (GUI and command line), replication that works, basically impossible to corrupt, transactions, and so on. Not bad for half a day of hacking with a simple data model in the background:&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;http://www.igvita.com/posts/10/attr-join.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;Instead of defining columns on a table, each attribute has its own table (new tables are created on the fly), which means that we can add and remove attributes at will. In turn, performing a select simply means joining all of the tables on that individual key. To the client this is completely transparent, and while the proxy server does the actual work, this functionality could be easily extracted into a proper MySQL engine - I&#8217;m just surprised that no one has done so already. For a closer look, &lt;a href=&quot;http://github.com/igrigorik/em-proxy/blob/master/examples/schemaless-mysql/mysql_interceptor.rb&quot;&gt;check out the proxy code itself&lt;/a&gt;, there are plenty of comments, which explain how it is all pieced together.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;The gray zone of SQL vs NoSQL&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;So what is the point of all this? Well, I hope someone actually writes such an engine, because I believe there is a market for it. There is a lot to be said for a drop in, SQL compatible, schema-free engine, and unlike what the NoSQL propaganda may say, there is absolutely no reason why we can&#8217;t have many of the benefits of &#8220;NoSQL&#8221; within MySQL itself. There is no one clear winner for a database engine or model, so put some thought into your decision up front. Just because Mongo, TC, or Couch are 'document-oriented' or 'schema-free' does not mean they are necessarily better for your application. In the meantime, don't get me wrong, I am still rooting for all the NoSQL projects, as well as have high expectations for Drizzle - they are all doing fantastic work.&lt;/p&gt;
&lt;div&gt;
&lt;a href=&quot;http://feeds.igvita.com/~ff/igvita?a=syizv-mDxYU:knXSu-0VRkI:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/igvita?d=yIl2AUoC8zA&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.igvita.com/~ff/igvita?a=syizv-mDxYU:knXSu-0VRkI:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/igvita?i=syizv-mDxYU:knXSu-0VRkI:D7DqB2pKExk&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.igvita.com/~ff/igvita?a=syizv-mDxYU:knXSu-0VRkI:F7zBnMyn0Lo&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/igvita?i=syizv-mDxYU:knXSu-0VRkI:F7zBnMyn0Lo&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.igvita.com/~ff/igvita?a=syizv-mDxYU:knXSu-0VRkI:V_sGLiPBpWU&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/igvita?i=syizv-mDxYU:knXSu-0VRkI:V_sGLiPBpWU&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.igvita.com/~ff/igvita?a=syizv-mDxYU:knXSu-0VRkI:gIN9vFwOqvQ&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/igvita?i=syizv-mDxYU:knXSu-0VRkI:gIN9vFwOqvQ&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/igvita/~4/syizv-mDxYU&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
</content>
    <created-at type="datetime">2010-03-02T05:42:21-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">9</feed-id>
    <format>HTML</format>
    <header>Schema-Free MySQL vs NoSQL</header>
    <id type="integer">1909</id>
    <lang nil="true"></lang>
    <permalink>http://feeds.igvita.com/~r/igvita/~3/syizv-mDxYU/</permalink>
    <updated-at type="datetime">2010-03-02T00:00:30-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>@rdy 3 loads done.</content>
    <created-at type="datetime">2010-03-01T23:22:56-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">10</feed-id>
    <format nil="true"></format>
    <header>Tweet: @rdy 3 loads done.</header>
    <id type="integer">1910</id>
    <lang nil="true"></lang>
    <permalink>http://twitter.com/joem/statuses/9861456477</permalink>
    <updated-at type="datetime">2010-03-02T00:00:32-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>@sandofsky and now this no-meat thing? Why don't you just move to Berkley and get it over with.</content>
    <created-at type="datetime">2010-03-01T20:41:22-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">10</feed-id>
    <format nil="true"></format>
    <header>Tweet: @sandofsky and now this no-meat...</header>
    <id type="integer">1907</id>
    <lang nil="true"></lang>
    <permalink>http://twitter.com/joem/statuses/9855220800</permalink>
    <updated-at type="datetime">2010-03-01T21:00:29-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>Strong Beer Month, February, is over.  Now begins Dry March.</content>
    <created-at type="datetime">2010-03-01T15:01:30-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">10</feed-id>
    <format nil="true"></format>
    <header>Tweet: Strong Beer Month, February, is...</header>
    <id type="integer">1906</id>
    <lang nil="true"></lang>
    <permalink>http://twitter.com/joem/statuses/9841448904</permalink>
    <updated-at type="datetime">2010-03-01T16:00:35-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
  <record>
    <allow-comments type="boolean">false</allow-comments>
    <cite nil="true"></cite>
    <comment-counter type="integer" nil="true"></comment-counter>
    <content>RT @SFist: Apple's Steve Wozniak to Appear at Roller Derby Event http://sfist.com/2010/03/01/steve_wozniak_to_appear_at_roller_d.php</content>
    <created-at type="datetime">2010-03-01T14:24:56-06:00</created-at>
    <deleted-at type="datetime" nil="true"></deleted-at>
    <feed-id type="integer">10</feed-id>
    <format nil="true"></format>
    <header>Tweet: RT @SFist: Apple's Steve Wozniak...</header>
    <id type="integer">1905</id>
    <lang nil="true"></lang>
    <permalink>http://twitter.com/joem/statuses/9840105197</permalink>
    <updated-at type="datetime">2010-03-01T15:00:34-06:00</updated-at>
    <user-id type="integer" nil="true"></user-id>
  </record>
</records>
