<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <channel>
        <title>Poo-tee-weet</title>
        <link>http://pooteeweet.org</link>
        <description>Poo-tee-weet: ramblings on PHP, SQL, the web, politics, ultimate frisbee and what else is on in my life</description>
        <dc:language>en</dc:language>
        <generator>WebBuilder2</generator>
        <managingEditor>smith@pooteeweet.org</managingEditor>
        <webMaster>smith@pooteeweet.org</webMaster>
        <ttl>1440</ttl>
        <item>
            <title>MySQL enjoying its new home</title>
            <link>http://pooteeweet.org/blog/0/1081</link>
            <category>general</category>
            <description>So it seems that Sun has made it clear that the core product will remain open source. Of course the definition of what is core and what isn&apos;t is up to Sun/MySQL to decide, but it seems that overall more things will be released as open source than if MySQL would have gone through with its planned IPO. So this is a good thing. Speaking of non core products, I really like what Mike and his team are doing in the GUI department with the workbench and their other GUI tools. However since Sun is friendly to PostgreSQL and actually also distributes SQLite (its bundled with Solaris after all), I wonder if they are considering making their tools more and more portable across other RDBMS?

</description>
            <content:encoded>&lt;p&gt;So it seems that Sun has made it &lt;a href=&quot;http://blogs.mysql.com/kaj/2008/05/06/mysql-server-is-open-source-even-backup-extensions/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;clear&lt;/a&gt; that the core product will remain open source. Of course the definition of what is core and what isn&apos;t is up to Sun/MySQL to decide, but it seems that overall more things will be released as open source than if MySQL would have gone through with its planned IPO. So this is a good thing. Speaking of non core products, I really like what Mike and his team are doing in the GUI department with the &lt;a href=&quot;http://dev.mysql.com/workbench/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;workbench&lt;/a&gt; and their other &lt;a href=&quot;http://dev.mysql.com/downloads/gui-tools/5.0.html&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;GUI tools&lt;/a&gt;. However since Sun is friendly to &lt;a href=&quot;http://www.sun.com/software/products/postgresql/index.jsp&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;PostgreSQL&lt;/a&gt; and actually also distributes SQLite (its &lt;a href=&quot;http://asdf.blogs.com/asdf/2005/06/sqlite_use_incr.html&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;bundled&lt;/a&gt; with Solaris after all), I wonder if they are considering making their tools more and more portable across other RDBMS?&lt;/p&gt;

</content:encoded>
            <pubDate>Fri, 09 May 2008 08:16:51 +0200</pubDate>
            <author>Lukas Kahwe Smith</author>
        </item>
        <item>
            <title>Signup for the TestFest@Webtuesday</title>
            <link>http://pooteeweet.org/blog/0/1079</link>
            <category>general</category>
            <description>As I already noted on the Liip blog, there will be a TestFest as part of the Webtuesday Hackday. So in order to better prepare things for the event I would appreciate it if people interested in joining the TestFest drop me a note via email or in a comment. See you there!

</description>
            <content:encoded>&lt;p&gt;As I already noted on the &lt;a href=&quot;http://blog.liip.ch/archive/2008/04/29/testfest-at-webtuesday-hackfest.html&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;Liip&lt;/a&gt; blog, there will be a TestFest as part of the &lt;a href=&quot;http://webtuesday.ch/hackdays/20080524&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;Webtuesday Hackday&lt;/a&gt;. So in order to better prepare things for the event I would appreciate it if people interested in joining the TestFest drop me a note via email or in a comment. See you there!&lt;/p&gt;

</content:encoded>
            <pubDate>Wed, 07 May 2008 13:34:16 +0200</pubDate>
            <author>Lukas Kahwe Smith</author>
        </item>
        <item>
            <title>Finding the right place for a join condition</title>
            <link>http://pooteeweet.org/blog/0/1076</link>
            <category>general</category>
            <description>In a little app where users can create tabs and portlets in those tabs I ran into some issues with my ordered list implementation. It turns out I just misplaced a filtering expression in the WHERE clause instead of the JOIN condition. The basic idea was that I wanted to add new portlets in the left hand column at the top. The positions from the portlets actually start at 0, but what I am doing is to insert them at 1 below the current minimum or -1 if the table is empty. Then in a second query I push everything up by one. Seemed like the most efficient way to deal with concurrency. I guess in theory I could even skip pushing things up by one, but oh well.

</description>
            <content:encoded>&lt;p&gt;In a little app where users can create tabs and portlets in those tabs I ran into some issues with my ordered list implementation. It turns out I just misplaced a filtering expression in the WHERE clause instead of the JOIN condition. The basic idea was that I wanted to add new portlets in the left hand column at the top. The positions from the portlets actually start at 0, but what I am doing is to insert them at 1 below the current minimum or -1 if the table is empty. Then in a second query I push everything up by one. Seemed like the most efficient way to deal with concurrency. I guess in theory I could even skip pushing things up by one, but oh well.&lt;/p&gt;

&lt;p&gt;Here is the original query (note that I am using PDO which supports Oracle style named placeholders for all drivers including MySQL):&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;INSERT INTO user_tab_portlets (tab_id, portlet_id, pos, col, is_open, config)
            (SELECT :tab_id, :portlet_id, COALESCE(MIN(utp.pos)-1, -1), :col, :is_open, :config
                FROM user_tabs ut LEFT JOIN user_tab_portlets utp ON (ut.id = utp.tab_id)
                WHERE ut.id = :tab_id AND (utp.col IS NULL OR utp.col = :col)
                GROUP BY utp.tab_id, utp.col)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I sort of expected the &amp;quot;utp.col IS NULL OR utp.col = :col&amp;quot; to work out fine for the case when there are no portlets yet in the left column on the given tab, since due to the LEFT JOIN the &amp;quot;IS NULL&amp;quot; part should fire (the col is not nullable). As it turns out a more readable and actually working version of my query would look like this:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;INSERT INTO user_tab_portlets (tab_id, portlet_id, pos, col, is_open, config)
            (SELECT :tab_id, :portlet_id, COALESCE(MIN(utp.pos)-1, -1), :col, :is_open, :config
                FROM user_tabs ut LEFT JOIN user_tab_portlets utp ON (ut.id = utp.tab_id AND utp.col = :col)
                WHERE ut.id = :tab_id
                GROUP BY utp.tab_id, utp.col)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Anyways, if anyone has some pointers on how to better do an ordered list in SQL please let me know. I felt quite good when I figured this one out :)&lt;/p&gt;

</content:encoded>
            <pubDate>Wed, 30 Apr 2008 12:03:20 +0200</pubDate>
            <author>Lukas Kahwe Smith</author>
        </item>
        <item>
            <title>Dear Marten,</title>
            <link>http://pooteeweet.org/blog/0/1073</link>
            <category>general</category>
            <description>So now that you have posted some clarifications on what is going on exactly, it seems like there is less of a problem as original thought. However I must say that the the replies you posted on Jeremy&apos;s blog (and later mine as well), you let me to believe that things are quite bad indeed. Only now that I see your two posts on /, I can relax a bit again. Matthew has written a very good summary of the situation with some historical background.

</description>
            <content:encoded>&lt;p&gt;So now that you have posted some clarifications on what is going on exactly, it seems like there is less of a problem as &lt;a href=&quot;http://pooteeweet.org/blog/1071&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;original thought&lt;/a&gt;. However I must say that the the replies you posted on &lt;a href=&quot;http://jcole.us/blog/archives/2008/04/14/just-announced-mysql-to-launch-new-features-only-in-mysql-enterprise/#comment-1469124&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;Jeremy&apos;s blog&lt;/a&gt; (and later &lt;a href=&quot;http://pooteeweet.org/blog/1071/1072&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;mine&lt;/a&gt; as well), you let me to believe that things are quite bad indeed. Only now that I see your &lt;a href=&quot;http://developers.slashdot.org/comments.pl?sid=525246&amp;amp;cid=23098626&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;http://developers.slashdot.org/comments.pl?sid=525246&amp;amp;cid=23098824&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;posts&lt;/a&gt; on /, I can relax a bit again. Matthew has written a very good &lt;a href=&quot;http://blogs.the451group.com/opensource/2008/04/17/mysqls-business-model-in-a-state-of-flux/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;summary of the situation&lt;/a&gt; with some historical background.&lt;/p&gt;

&lt;p&gt;I guess its great that you take the time to post on the blogs of individual community members, but next time you might want to take a bit more care on what you post. For example in my post I explicitly asked to be corrected if I misunderstood what&apos;s going on. When you posted in my blog without correcting me, I assumed that I was right with my assessment of the situation. Also I am a bit concerned about how you compare MySQL&apos;s business model with PostgreSQL, because I think they do not really compare well (at least from a community perspective), though Josh &lt;a href=&quot;http://pooteeweet.org/blog/515/521&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;predicted&lt;/a&gt; back when I posted my &lt;a href=&quot;http://pooteeweet.org/public/Diplomarbeit.pdf&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;thesis paper&lt;/a&gt; on exactly this topic, that MySQL is moving towards the PostgreSQL eco systems &amp;quot;secret sauce&amp;quot; business model.&lt;/p&gt;

&lt;p&gt;So where are we at? It seems that Sun/MySQL is considering close sourcing now yet developed code that provides implementations for plugins against some of the new pluggable API&apos;s. This reduces concerns since this way the chances of things diverging between the &amp;quot;real community&amp;quot; (more on this in the next paragraph) and Sun/MySQL internal development. More importantly it means that community users can easily load community developed alternative implementations without much hassle. I have not examined the plugin API&apos;s in detail, but from what I read they all loading of plugins without a restart. That being said its still likely that most hosters will not allow average users to load new modules, but I am not sure how that will play out and how much work there has been done to make it safe for hosters to allow this. So as long as the proprietary extensions focus around plugins against clearly defined plugin APIs, I see little problem from the perspective of the community. If this makes business sense is another story.&lt;/p&gt;

&lt;p&gt;But there is still some concern that I have with Marten&apos;s comparisons made in regards to the PostgreSQL eco system. To me the key difference between their eco system and MySQL&apos;s is that MySQL does not have a true &amp;quot;community&amp;quot; version. MySQL AB and now Sun decides on what goes into the &amp;quot;Community Edition&amp;quot;. More over its exactly the same company that also employ all of the key developers, so there isn&apos;t really someone outside of Sun/MySQL that could reasonably decide what should go in. Of course there could be community votes, but this is also not how open source works. For the most part the core group around an open source projects act like benevolent dictators that make decisions based on a mixture of personal needs and the goal to keep the project alive as open source.&lt;/p&gt;

&lt;p&gt;There is this delicate trust balance that end users put into the lead developers of the open source products they use. For example look at all the complaints that Zend has gotten for having developed a closed source byte code cache. Ever since then people have said that this should be part of PHP itself, but Zend is stopping this from happening. Even today after years of having an open source solution available that is even run by Yahoo on their servers, we still do not have a PHP release with a bundled byte code cache. However Zeev has given his blessing to bundeling APC with PHP6. Is it Zend&apos;s fault that it took this long? Did Zend do enough for PHP that it was ok to give them this money making opportunity? However the key point is that the community &amp;quot;gave&amp;quot; Zend this opportunity, because there are enough non Zend people in the core development team. Again the situation is totally different at Sun/MySQL.&lt;/p&gt;

&lt;p&gt;Maybe if Sun/MySQL would make it really transparent that its the MySQL developers that decide on what gets into the Community Edition with no influencing at all by managers, this could ensure that this trust balance is not thrown out of wack so easily in the future. If there would be a public promise that the community, and more importantly Sun/MySQL developers could fallback upon, it could a long way. So when there is an open source alternative implementation to a MySQL product, that someone is willing to contribute to the Community Edition (which will of course require that people grant MySQL the right to release the same code under a proprietary license - which in the sense is quite comparable to releasing code under the BSD license that PostgreSQL uses), and the code is good, then its the Sun/MySQL developers that decide what goes in and not the managers. Of course my assumption is that their decision will be based on love for the open source project they are working on and not the development of their stock options. Then again like I said earlier, open source developers always make their decisions at least partially out of selfish reasons and that is fine and dandy.&lt;/p&gt;

</content:encoded>
            <pubDate>Fri, 18 Apr 2008 08:20:40 +0200</pubDate>
            <author>Lukas Kahwe Smith</author>
        </item>
        <item>
            <title>Maybe Sun can teach MySQL a lesson about open source?</title>
            <link>http://pooteeweet.org/blog/0/1071</link>
            <category>general</category>
            <description>Once again Jeremy weights in on the oddity called &amp;quot;MySQL Enterprise Edition&amp;quot;. This time around it seems that Sun/MySQL is moving towards making their Enterprise Edition more proprietary by including features that will never be available in the Community Edition. Not sure, but I guess they are also not providing the source to the general public (I do not remember all the details of the continued mumbo-jumbo saga surrounding this product, but maybe they already pulled the source from the public version a while ago - please correct me here). I do assume that paying customers will still get the source, though obviously not under an open source license.

</description>
            <content:encoded>&lt;p&gt;Once &lt;a href=&quot;http://jcole.us/blog/archives/2007/08/09/mysql-community-split-officially-a-failure/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;again&lt;/a&gt; Jeremy weights in on the oddity called &amp;quot;MySQL Enterprise Edition&amp;quot;. This time around it seems that Sun/MySQL is moving towards &lt;a href=&quot;http://jcole.us/blog/archives/2008/04/14/just-announced-mysql-to-launch-new-features-only-in-mysql-enterprise/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;making their Enterprise Edition more proprietary&lt;/a&gt; by including features that will never be available in the Community Edition. Not sure, but I guess they are also not providing the source to the general public (I do not remember all the details of the continued mumbo-jumbo saga surrounding this product, but maybe they already pulled the source from the public version a while ago - please correct me here). I do assume that paying customers will still get the source, though obviously not under an open source license.&lt;/p&gt;

&lt;p&gt;As before MySQL AB illustrates that they have stop believing in open source when it becomes time to make money. I was not all up in arms about this with stuff like the &lt;a href=&quot;http://mysql.com/products/enterprise/monitor.html&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;Monitor&lt;/a&gt; or the &lt;a href=&quot;http://dev.mysql.com/workbench/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;Workbench&lt;/a&gt; (heck I use a &lt;a href=&quot;http://www.activestate.com/Products/komodo_ide/index.mhtml&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;proprietary editor&lt;/a&gt;, though they are moving towards &lt;a href=&quot;http://www.openkomodo.com/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;open sourcing more&lt;/a&gt;, rather than less of the new features - similar model though as Workbench), but I do think that hot backup should be part of the core product as is the case in other OSS databases like &lt;a href=&quot;http://people.planetpostgresql.org/mha/index.php?/archives/168-guid.html&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;PostgreSQL&lt;/a&gt;. InnoDB hot backup is a bad comparison for &lt;a href=&quot;http://jcole.us/blog/archives/2008/04/14/just-announced-mysql-to-launch-new-features-only-in-mysql-enterprise/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;Marten&lt;/a&gt; to use here. Nobody is claiming that its not possible to write reliable solid proprietary software. What people are saying however is that this is not the best way to write software, especially if you are an organization that has (should have?) open source build into its DNA (both from the business model as well as from the people you employ to the people that use your software). Also the comparison Marten makes in the same post about PostgreSQL is also off. The fact is that even if alot of companies in the PostgreSQL community are proprietary, its still a community decision what is added to the common base PostgreSQL. With MySQL the community does not have this option unless it does a proper fork, which I doubt Sun/MySQL is all to interested in seeing. Anyways, of course as a paying customer I would also appreciate wide spread testing of such a critical feature as backup is, but alas I will be stuck with MySQL AB&apos;s less than stellar internal QA to ensure that my backups will actually work when it becomes time to restore them.&lt;/p&gt;

&lt;p&gt;Now the weird thing is that Sun is open sourcing software left and right as Peter also &lt;a href=&quot;http://www.mysqlperformanceblog.com/2008/04/15/partially-opensourced/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;points out&lt;/a&gt;. Its a key decision that Jonathan does not get tired &lt;a href=&quot;http://www.news.com/8301-10784_3-9757417-7.html&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;explaining&lt;/a&gt;. They keep talking about the great divider in the industry being those companies that sell software and those that do not. So I can only guess that this decision predates the Sun merger and was made by the same guys that cooked up the client lib license change (which MySQL sort of &lt;a href=&quot;http://www.mysql.com/about/legal/licensing/foss-exception.html&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;fixed&lt;/a&gt;), the creation of the Enterprise Edition .. this leaves the door open for some of the new owners to correct this mistake. So maybe we will have the opportunity to witness firsthand how MySQL AB&apos;s guys learn from Sun (instead of the other way around as the MySQL guys keep &lt;a href=&quot;http://blogs.mysql.com/kaj/2008/01/16/teaching-sun-a-lesson/&quot; onclick=&quot;window.open(this.href, &apos;_blank&apos;); return false;&quot;&gt;proclaiming&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Update 16/04/2008 16:14 CEST]&lt;/strong&gt;&lt;br /&gt;
Need to learn how to spell peoples names .. like &amp;quot;Marten&amp;quot; .. sorry about that.&lt;/p&gt;

</content:encoded>
            <pubDate>Wed, 16 Apr 2008 14:56:19 +0200</pubDate>
            <author>Lukas Kahwe Smith</author>
        </item>
    </channel>
</rss>