<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.fishpool.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Fishpool</title>
  <link>http://www.fishpool.org/</link>
  <atom:link href="http://www.fishpool.org/feed/rss2" rel="self" type="application/rss+xml"/>
  <description>Osman satunnaisia aivoituksia</description>
  <language>en</language>
  <pubDate>Thu, 11 Mar 2010 07:17:43 +0200</pubDate>
  <copyright>Creative Commons Attribution Sharealike</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Smartphone platforms comparison - a developer perspective</title>
    <link>http://www.fishpool.org/post/2010/03/09/Smartphone-platforms-comparison-a-developer-perspective</link>
    <guid isPermaLink="false">urn:md5:201c889f54bdfe375f9a436c8b339fde</guid>
    <pubDate>Tue, 09 Mar 2010 23:12:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>Android</category><category>development</category><category>iPhone</category><category>Maemo</category><category>Symbian</category>    
    <description>    &lt;p&gt;Having for years used Nokia phones, lately S60 phones of various
generations, with a fair amount of experience of the iPhone/iPod Touch OS and
lately having used both the Nokia N900 (Maemo OS) and the Google Nexus One
(Android) devices as well, I can't avoid comparing these together. As a
developer, I'm not really that interested in what they look like today, because
today's devices are not what a developer needs to target for applications -
rather, what can one determine of the platforms' future from looking at their
past?&lt;/p&gt;
&lt;p&gt;I can't make any comparisons to the Palm Pre (WebOS), Windows Mobile or
Blackberry devices, since I have no first-hand experience of any of them.
However, of the four platforms I know to some degree, not only is iPhone still
clearly in the lead, but it looks to have the most predictable future as well.
iPhone OS 3.1 no longer misses any significant functionality and has gained all
the important bits without giving in on the level of platform polish, and the
application market is humongous. Its only real weakness is the draconian
control Apple enforces, and the crazy restrictions that results in. &lt;a href=&quot;http://www.eff.org/deeplinks/2010/03/iphone-developer-program-license-agreement-all&quot;&gt;
Those issues are well documented by a recent EFF post outlining the contents of
the iPhone developer program contract&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The imminent launch of iPad is the first time the platform starts to
experience any kind of real fragmentation in terms of a application development
target. At this point that fragmentation looks like to be minimal - with the
iPhone, iPod Touch and iPad all sharing the same OS, same UI, practically same
inputs and outputs and differing only by what networks are available for
communication and what size the screen is, developers are not going to have a
hard time at all in developing for all three devices.&lt;/p&gt;
&lt;p&gt;That is quite unlike the situation on the other three platforms (Symbian,
Android, Maemo). The fragmentation of the Symbian market is a matter of some
notoriety. Basically, the same app will not work on phone models launched 9
months apart, or sometimes even on simultaneously launched devices, due to
differences in the OS, let alone differences in the form factor, screen size,
input mechanisms, and so on. With already two major revisions announced, this
trend is only going to continue, and the base OS is already nearing 15 years
old, if &lt;a href=&quot;http://en.wikipedia.org/wiki/Symbian_OS&quot;&gt;traced back to the
first 32 bit EPOC&lt;/a&gt; it evolved from, though I believe the first S60 UI
version came out in 2002.&lt;/p&gt;
&lt;p&gt;Android is beginning to suffer from the same disease. Not only are the
devices on the market each a running different base OS version with different
features available to applications, but nearly all of them are also customized
by their manufacturers or network carriers with little regard to compatibility
(nor in fact could they have any regard for it, since none of them have any
previous experience maintaining a platform). And of course each one has a
different form factor. However, the most surprising feature of the platform (as
a recent Nexus One user) is that even though Android is barely two years old,
it already carries with itself a legacy of inconsistent UI controls. What
exactly does one do with an indirect-control pointing device (a trackball) on a
device capable of direct control via both a touchscreen and motion sensors? Why
are the built-in applications (never mind those available on the Android
Market) full of menus, &amp;quot;select an object and execute a function on it via a
separate control&amp;quot; type UIs clearly inheriting baggage from the decade before
touch screens, and other clunky hacks, when there's a rich base to copy from in
the iPhone UI design library of 150,000 applications?&lt;/p&gt;
&lt;p&gt;So, what about Maemo? I bought a few years ago the very first Maemo device,
the N770 Internet Tablet. I've seen and played with every device since. All of
them up to the N900 carried the same &amp;quot;windows and menus&amp;quot; baggage Android is
suffering from, but the refreshed UI in N900 got rid of most of that. Not
entirely so, but enough that I can state with confidence that the N900 UI is
more modern, more designed for the touch screen than Android is. However,
Maemo's weakness is that of a platform - there's none. Every version of the OS
thus far (five iterations on the market) has broken compatibility with the
previous. Now, that's to be expected and somewhat forgivable as long as it's in
developers-only mode, essentially being beta tested. It's hard to call N900 a
beta test any longer. What's worse, is that Nokia has publicly stated that the
&lt;em&gt;next&lt;/em&gt; device, whatever it's name, and regardless of whether its OS is
called &lt;a href=&quot;http://maemo.org/&quot;&gt;Maemo&lt;/a&gt; 6 or &lt;a href=&quot;http://meego.com/&quot;&gt;MeeGo&lt;/a&gt; whatever, is also going to be incompatible with
the current one, and applications will require a re-write. This is no way to
build a developer base.&lt;/p&gt;
&lt;p&gt;So, what do we have to look towards to as application developers, trying to
figure out what platform to target when working on our next mobile
applications?&lt;/p&gt;
&lt;p&gt;iPhone, a consistent, easy to use platform with a stable technical roadmap
and little legacy baggage, but saddled with an unpredictable owner who's just
as likely to deny you from doing business at all than to support you in it?&lt;/p&gt;
&lt;p&gt;Symbian, full of legacy, and with a refreshed, incompatible platform to
launch maybe next year?&lt;/p&gt;
&lt;p&gt;Android, fast-growing, but already full of clunky hacks, and fragmenting
faster than than anyone's seen before?&lt;/p&gt;
&lt;p&gt;Or Maemo, approaching a state of polish but unable to maintain direction for
the length of one device cycle?&lt;/p&gt;
&lt;p&gt;I think we're all going to miss the days of Java mobile games development
before this is over.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.fishpool.org/post/2010/03/09/Smartphone-platforms-comparison-a-developer-perspective#comment-form</comments>
      <wfw:comment>http://www.fishpool.org/post/2010/03/09/Smartphone-platforms-comparison-a-developer-perspective#comment-form</wfw:comment>
      <wfw:commentRss>http://www.fishpool.org/feed/atom/comments/495176</wfw:commentRss>
      </item>
    
  <item>
    <title>First thoughts about Balancion</title>
    <link>http://www.fishpool.org/post/2010/01/17/First-thoughts-about-Balancion</link>
    <guid isPermaLink="false">urn:md5:17ebe880a1a1a98f7c3b36f1d1a82091</guid>
    <pubDate>Sun, 17 Jan 2010 13:15:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>Balancion</category><category>business</category><category>finance</category><category>review</category>    
    <description>    &lt;p&gt;I got an invite to the &lt;a href=&quot;http://www.balancion.com&quot;&gt;Balancion&lt;/a&gt;
personal finance application beta a week ago, and have played with it somewhat
since. I've tried a few similar tools before, ranging from the finance packages
of the banks I've been a customer of, to a few desktop applications. Until now,
I haven't been sufficiently impressed by them to continue using any for any
significant period, but I think Balancion might be one to stick around for a
while.&lt;/p&gt;
&lt;p&gt;Balancion solves the two issues my previous experiments have failed at:
first, it covers the entirety of my personal accounts (or very close thereof),
because it isn't limited to just the services offered by one bank (the failing
of Nordea's, Sampo's and OP's packages, at least the last time I tried them),
and second, it doesn't force me to spend my evenings manually typing in boring
details, thanks to its tools for downloading the data from the banks and other
institutions. Of course, that's just table stakes for the game, really, but my
previous experiences have shown even that much is not a given in a market the
size of Finland. I would imagine larger market areas have had more focus on
this type of stuff - American banks seem to advertise compatibility with
Quicken or MS Money - or now with Mint, the hottest entry in the area. German
banks apparently have a standard for transaction data exchange. None of that
has been available to individuals in Finland.&lt;/p&gt;
&lt;p&gt;What currently lifts Balancion above the table-stakes minimum is how it
deals with &amp;quot;uncategorized&amp;quot; expenses. Other tools allow searching for similar
historic transactions and categorizing all of them at once. Balancion applies
that to the future as well, and learns to recognise more and more stuff as you
go. Setting the books up for the first time does require a few hours of
clicking around, but it gets less and less manual as time goes. That's what
makes it a joy to use (as much as any financial application can be a joy, that
is!)&lt;/p&gt;
&lt;p&gt;At this point in the beta, it's a bit limited; just tracking income and
expenses, plus a few (quite useful and informative) visualizations of the same,
which already can be helpful in recognizing big expense areas and saving money.
However, I'm looking forward to seeing more of the budgeting, expense
management and investing tools in the service. It's pretty clear how this can
develop and where the opportunities for the business lie. The crucial question
is, how can Balancion add partnerships and cross-sell features while retaining
the trust of the users. Thus far, their communication indicates they understand
how important this will be to their success.&lt;/p&gt;
&lt;p&gt;I'm not terribly happy about the way Balancion authenticates me, though. The
email/password login is standard, though I'd prefer to use OpenID to avoid
managing one more password. What really bugs me are the mandatory &amp;quot;security
questions&amp;quot;, which they require to be able to change the password. Such
questions, especially since they were limited to two out of half a dozen
pre-selected questions only reduce security (seriously, it does not take much
investigating to figure out the maiden name of my mother). If this is what
their &lt;a href=&quot;https://www.balancion.com/app/static/ukk#q23&quot;&gt;security advisor
Nixu&lt;/a&gt; truly has recommended to the team, I'm disappointed in Nixu as well.
Anyway, I answered the questions with something random - so now I can't change
my password at all. This probably was not what they intended.&lt;/p&gt;
&lt;p&gt;For anyone interested in this category of services, I would recommend
checking out the &lt;a href=&quot;http://www.slideshare.net/hnshah/mintcom-prelaunch-pitch-deck&quot;&gt;venture capital
pitch presentation of Mint.com&lt;/a&gt;, the US equivalent of Balancion. If you want
to try out Balancion yourself, ask me for an invite here in the blog comments
or by &lt;a href=&quot;http://www.twitter.com/osma&quot;&gt;tweeting @osma&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.fishpool.org/post/2010/01/17/First-thoughts-about-Balancion#comment-form</comments>
      <wfw:comment>http://www.fishpool.org/post/2010/01/17/First-thoughts-about-Balancion#comment-form</wfw:comment>
      <wfw:commentRss>http://www.fishpool.org/feed/atom/comments/476182</wfw:commentRss>
      </item>
    
  <item>
    <title>Technology factors to watch during 2010</title>
    <link>http://www.fishpool.org/post/2010/01/14/Factors-to-watch-during-2010</link>
    <guid isPermaLink="false">urn:md5:912586098bb6310a9f1184e1c30b3b16</guid>
    <pubDate>Thu, 14 Jan 2010 14:28:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>3D</category><category>business</category><category>cloud</category><category>development</category><category>games</category><category>OpenID</category><category>presentation</category><category>virtual worlds</category><category>web</category><category>Web20</category>    
    <description>    &lt;p&gt;Last week I posted a &lt;a href=&quot;http://www.fishpool.org/post/2010/01/04/Happy-2010-a-review&quot;&gt;brief
review of 2009 here&lt;/a&gt;, but didn't go much into predictions for 2010. I won't
try to predict anything detailed now either, but here's a few things I think
will be interesting to monitor over the year. And no, tablet computing isn't on
the list. For fairly obvious reasons, this is focused on areas impacting social
games. As a further assist, I've &lt;ins&gt;underlined the parts most resembling
conclusions or predictions&lt;/ins&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Social networks and virtual worlds interoperability&lt;/h2&gt;
&lt;p&gt;As more and more business transforms to use Internet as a core function, the
customers of these businesses are faced with a &lt;ins&gt;proliferation of
proprietary identification mechanisms&lt;/ins&gt; that has already gotten out of
hand. It is not uncommon today to have to manage 20-30 different
userid/password pairs that are in regular use, from banks to e-commerce to
social networks. At the same time, &lt;ins&gt;identity theft is a growing
problem&lt;/ins&gt;, no doubt in large part because of the minimum-security methods
of identification.&lt;/p&gt;
&lt;p&gt;Social networks today are a significant contributor to this problem. Each
collects and presents information about its users that &lt;ins&gt;contribute to the
rise of identity theft while having their own authorization mechanisms&lt;/ins&gt; in
a silo of low-trustworthy identification methods. The users, on the other hand,
perceive little incentive to manage their passwords in a secure fashion.
Account hijacking and impersonation is a major problem area to each vendor. The
low trust level of individual account data also leads to a &lt;ins&gt;low relative
value of owning a large user database&lt;/ins&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.fishpool.org/public/Illustrations/openid-partners.png&quot; alt=&quot;&quot; style=&quot;float: right; margin-top: 0; margin-right: 0; margin-bottom: 1em; margin-left: 1em;&quot; title=&quot;openid-partners.png, Jan 2010&quot; /&gt;A technology solution, &lt;ins&gt;&lt;a href=&quot;http://www.openid.net/&quot;&gt;OpenID&lt;/a&gt;&lt;/ins&gt; is emerging and taking hold in a form
of an industry-accepted standard for exchanging identity data between an ID
provider and a vendor in need of a verified id for their customer. A few of
current backers of the standard in the picture on the right. However, changing
the practices of the largest businesses has barely begun and no consumer shift
can yet be seen – as is typical for such “undercurrent” trends.&lt;/p&gt;
&lt;p&gt;OpenID will allow consumers to use f&lt;ins&gt;ewer, higher-security ids over the
universe of their preferred services&lt;/ins&gt;, which in turn will &lt;ins&gt;allow these
services a new level of transparent interoperability&lt;/ins&gt; in combining data
from each other in near-automatic, personalized mash-ups via the APIs each
vendor can expose to trusted users with less fear of opening holes for account
hijacking.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Browsers vs desktops: what's the target for entertainment software?&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;http://www.fishpool.org/public/Illustrations/browsers-desktops-venn.png&quot; alt=&quot;&quot; style=&quot;float: right; margin-top: 0; margin-right: 0; margin-bottom: 1em; margin-left: 1em;&quot; title=&quot;browsers-desktops-venn.png, Jan 2010&quot; /&gt;Here's a rough sketch of
competing technology streams in terms of two primary factors – ease of access
versus the rich experience of high-performance software. “Browser wars” are
starting again, and with the improved engines behind Safari 4, Firefox 4, IE 8
and Google Chrome, a lot of the kind of &lt;ins&gt;functionality&lt;/ins&gt;&lt;span style=&quot;text-decoration: none&quot;&gt;we're used to thinking belongs to native
software&lt;/span&gt; or at best browser plugins like Flash, Java or Silverlight
&lt;ins&gt;will be available straight in the browser&lt;/ins&gt;. This for sure includes
high-performance application code, rich 2D vector and pixel graphics, video
streams and access to new information like location-sensing. The plugins will
most likely be stronger at 3D graphics and synchronized audio and at
&lt;ins&gt;advanced input mechanisms&lt;/ins&gt; like using webcams for gesture-based
control. Invariably, especially the new input capabilities will also bring with
them &lt;ins&gt;new security and privacy concerns&lt;/ins&gt; which will not be fully
resolved within the next 2-3 years.&lt;/p&gt;
&lt;p&gt;While 3D as a technology will be available to browser-based applications,
this doesn't mean the web will turn to represent everything as a virtual copy
of the physical world. Instead, it's best use will be as a tool for
accelerating and &lt;ins&gt;enhancing other UI&lt;/ins&gt; and presentation concepts –
&lt;ins&gt;think iTunes CoverFlow&lt;/ins&gt;. For social interaction experiences, a
3-degrees-freedom &lt;ins&gt;pure 3D representation will remain a confusing
solution&lt;/ins&gt;, and other presentations such as axonometric “camera in the
corner” concepts will remain more accessible. Naturally, they can (but don't
necessarily need to) be &lt;ins&gt;rendered using 3D&lt;/ins&gt; tech.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Increased computing capabilities will change economies of scale&lt;/h2&gt;
&lt;p&gt;The history of the “computer revolution” has been about automation changing
economies of scale to enable entirely new types of business. Lately we've seen
this eg by Google AdWords enabling small businesses to advertise and/or publish
ads without marketing departments or involvement of agencies.&lt;/p&gt;
&lt;p&gt;The same trend is continuing in the form of &lt;ins&gt;computing capacity becoming
a utility&lt;/ins&gt; in Cloud Computing, &lt;ins&gt;extreme amounts of storage&lt;/ins&gt;
becoming available in costs which allow terabytes of storage to organizations
of almost any size and budget, and most importantly, developing data mining,
search and discovery algorithms that &lt;ins&gt;enable organizations to utilize data
which used to be impossible to analyze&lt;/ins&gt; as automated business practices.
Unfortunately, the &lt;ins&gt;same capabilities are available for criminals&lt;/ins&gt; as
well.&lt;/p&gt;
&lt;p&gt;Areas in which this is happening as we speak:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;further types and &lt;ins&gt;spread of self-service advertising&lt;/ins&gt;, better
targeting, availability of media&lt;/li&gt;
&lt;li&gt;automated &lt;ins&gt;heuristics-based detection of risky customers, automated
moderation&lt;/ins&gt;&lt;/li&gt;
&lt;li&gt;computer-vision based user interfaces which require nothing more than a
webcam&lt;/li&gt;
&lt;li&gt;ever &lt;ins&gt;increasing size of botnets,&lt;/ins&gt; and the use of them for game
exploits, money laundering, identity theft and surveillance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The escalation of large-scale threats have raised the need for
&lt;ins&gt;industry-wide groups for exchanging information&lt;/ins&gt; and best practices
between organizations regarding the security relevant information such as new
threats, customer risk rating, identification of targeted and organized
crime.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;Software development, efficiencies, bottlenecks, resources&lt;/h2&gt;
&lt;p&gt;Commercial software development tools and methods experience a significant
shift roughly once every decade. The last such shift was the mainstreaming of
RAD/IDE-based, virtual-machine oriented tools and the rise of Web and open
source in the 90s, and now those two rising themes are increasingly mainstream
while “convergent”, cross-platform applications which depend on the
availability of always-on Internet are emerging. As before, it's not driven by
technological possibility, but by the richness and availability of high-quality
development tools with which more than just the “rocket-scientist” superstars
can create new applications.&lt;/p&gt;
&lt;p&gt;&lt;ins&gt;The skills which are going to be in short supply are those for
designing applications which can smoothly interface to the rest of the cloud of
applications in this emerging category.&lt;/ins&gt; Web-accessible APIs, the security
design of those APIs, efficient utilization of services from non-associated,
even competing companies, and friction-free interfaces for end users of these
web-native applications is the challenge.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 12px;&quot;&gt;In this world, the
traditional IT outsourcing houses won't be able to serve as a safety valve for
resources as they're necessarily still focused on serving the last and current
mainstream. In their place, &lt;ins&gt;we must consider the availability of open
source solutions not just as a method for reducing licensing cost, but as the
“extra developer” used to reduce time-to-market.&lt;/ins&gt; And as with any such
relationship, it must be nurtured. In the case of open source, that requires
participation and contribution back to the further development of that enabling
infrastructure as the cost of outsourcing the majority of the work to the
community.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Mobile internet&lt;/h2&gt;
&lt;p&gt;With the launch of iPhone, the use of Web content and 3rd party applications
on mobile devices has multiplied compared to previous smart phone generations.
This is due to &lt;ins&gt;two factors&lt;/ins&gt;: the f&lt;ins&gt;amiliarity and productivity of
Apple's developer tools&lt;/ins&gt; for the iPhone, and the &lt;ins&gt;straightforward App
Store for the end-users&lt;/ins&gt;. Moreover, the wide base of the applications is
primarily because of the former, as proven by the wide availability of
unauthorized applications already before the launch of iPhone 2.0 and the App
Store. Nokia's failure to create such an applications market despite the
functionality available on S60 phones for years before the iPhone launch proves
this – it was not the features of the device, but the development tools and
application distribution platform were the primary factor.&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 12px;&quot;&gt;The launch of
Google's &lt;ins&gt;Android will further accelerate this development&lt;/ins&gt;. Current
Android-based devices lack the polish of iPhone, and the stability gained from
years of experience of Nokia devices, yet the &lt;ins&gt;availability of development
tools will supercharge this market&lt;/ins&gt;, and the next couple of years will see
accelerated development and polish cycle from all parties. At the moment, it's
impossible to call the winner on this race, though.&lt;/span&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.fishpool.org/post/2010/01/14/Factors-to-watch-during-2010#comment-form</comments>
      <wfw:comment>http://www.fishpool.org/post/2010/01/14/Factors-to-watch-during-2010#comment-form</wfw:comment>
      <wfw:commentRss>http://www.fishpool.org/feed/atom/comments/475471</wfw:commentRss>
      </item>
    
  <item>
    <title>Happy 2010 - it's review time</title>
    <link>http://www.fishpool.org/post/2010/01/04/Happy-2010-a-review</link>
    <guid isPermaLink="false">urn:md5:9edcab51d1627f324c91362d4e23cae5</guid>
    <pubDate>Mon, 04 Jan 2010 20:05:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>Habbo</category><category>MySQL</category><category>Oracle</category><category>snowboarding</category><category>Sulake</category><category>Sun</category><category>web</category><category>Web20</category>    
    <description>    &lt;p&gt;I was happily snowboarding and skiing (the latter for the first time in two
decades) last week, so here comes the year-end review a week late. &lt;a href=&quot;http://www.fishpool.org/post/2008/12/28/A-year-end-review&quot;&gt;Last year&lt;/a&gt;, I harped on Facebook's
closed nature, and over the the year they've tried to open more of the users'
data over to the Internet. Still, there are no decent APIs for a user to pull
out everything they've posted to Facebook to have their own copy, though. That
doesn't seem to stop them from &lt;a href=&quot;http://www.readwriteweb.com/archives/it_was_a_facebook_christmas.php&quot;&gt;dominating
the Internet&lt;/a&gt; for the time being, though, so good for them.&lt;/p&gt;
&lt;p&gt;I'm trying to think of what would have surprised me over the year, but given
I failed to make many accurate predictions myself, things just seemed to happen
in pretty natural direction. &lt;a href=&quot;http://www.fishpool.org/post/2009/04/21/Interesting-start-to-MySQL-Conf&quot;&gt;Oracle's Sun acquisition
over in April&lt;/a&gt; was a bit of a surprise at the time, but since then, I've
grown to appreciate how it might make sense for Oracle. However, what still
baffles me is that EC is going along with Monty's campaign of blocking the
completion of that acquisition. Look, guys - &lt;a href=&quot;http://www.fishpool.org/post/2009/11/11/MySQL-could-we-please-move-on-already&quot;&gt;the entire world does
not need to agree on a commercial transaction in order for one to go
through&lt;/a&gt;! MySQL is not the important thing here overall, &lt;a href=&quot;http://www.fishpool.org/post/2009/05/04/What-does-Oracle-mean-for-Java&quot;&gt;Java is&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We managed to complete a few of major transitions for &lt;a href=&quot;http://www.habbo.com&quot;&gt;Habbo&lt;/a&gt;, most notably replacing the Shockwave client
which was getting a bit long in the tooth with an all-new Flash-based Habbo
Hotel and &lt;a href=&quot;http://apps.facebook.com/habbous/&quot;&gt;integrating Habbo with
Facebook&lt;/a&gt; and &lt;a href=&quot;http://www.habbo.co.uk/&quot;&gt;other social networks&lt;/a&gt;. I
didn't write about either of those launches here at the time, but these are
pretty huge things for us because they make approaching Habbo much easier for a
new user, and enable us to create all kinds of interesting features that would
not have made sense previously.&lt;/p&gt;
&lt;p&gt;So, what do I expect from 2010? Well, &lt;a href=&quot;http://www.fishpool.org/post/2007/01/02/Three-predictions-for-2007&quot;&gt;did the mobile Internet already
happen&lt;/a&gt;? If not, at least it has a fighting chance this year. I'm having a
hard time identifying any people close to me who're not using some Internet
services on their phone by now, and some seem to be doing that almost
exclusively on a phone. That must mean the rest of the world is close on their
heels. As for more predictions, others have taken care of them by now.&lt;/p&gt;
&lt;p&gt;One promise I can make is to try to do my part in making the Internet more
fun and more social. At least now that even newspapers are beginning to think
that asking their readers for money is not just a utopia, we can focus on the
apps themselves, not whether they're ad-supportable.&lt;/p&gt;
&lt;p&gt;Have a great year MMX!&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>The balance of great products and rapid evolution</title>
    <link>http://www.fishpool.org/post/2009/12/08/The-balance-of-great-products-and-rapid-evolution</link>
    <guid isPermaLink="false">urn:md5:271ce3b631f67a238fe702bc5e8e3b42</guid>
    <pubDate>Tue, 08 Dec 2009 20:03:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>agile</category><category>business</category><category>design</category><category>development</category>    
    <description>    &lt;p&gt;I wanted to link to Andrew Chen's recent article, &lt;a href=&quot;http://andrewchenblog.com/2009/12/04/does-every-startup-need-a-steve-jobs/&quot;&gt;Does
every startup need a Steve Jobs&lt;/a&gt;, because it's a useful discussion about the
differences between technical feasibility, design-led desirability, and
business viability, a triplet productized by IDEO, and one that we also
identified a decade ago at Razorfish (wow, it's really a decade ago!). As for
the question in the title - no, I don't think that's the only way to create
greatness, though clearly if you have Steve at your disposal, you could do
worse than have him run everything. :)&lt;/p&gt;
&lt;p&gt;Seriously though, at least in this consumer-targeted software business that
I'm familiar with, it's crucially important to have those three principles well
represented at every level of the business. Sure, it's possible to create a
successful business with just two or perhaps even just one of those viewpoints,
especially if you can get away with copying someone else but just doing it with
better economics. However, to create something new and be successful, it'd be a
mistake to ignore business, technology or design. Sadly, of the three, design
is the one most commonly ignored. According to &lt;a href=&quot;http://itc.conversationsnetwork.org/shows/detail4310.html&quot;&gt;this interview of
Ken Auletta&lt;/a&gt; of his new book, even Google ignores it, Marissa Mayer
notwithstanding.&lt;/p&gt;
&lt;p&gt;Anyway, what I'm particularly interested about is how can you marry great
design with incremental, rapid iterations on the market. I'm pretty sure I've
understood how to iterate out in the open with regards to technical work, and
relatively comfortable with iteration regarding business aspects. I've yet to
come up with a really convincing argument for iteration and design on a very
granular basis - well, I can convince myself, but I'm having less success
convincing designers. :) If anyone cares to share their secrets, I'd love to
hear more.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Notes about Fedora 12</title>
    <link>http://www.fishpool.org/post/2009/11/23/Notes-about-Fedora-12</link>
    <guid isPermaLink="false">urn:md5:71d0c12c187669cc5fb1a6ae27bddbf1</guid>
    <pubDate>Mon, 23 Nov 2009 20:02:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>Fedora</category><category>GNOME</category><category>Linux</category><category>open source</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;https://fedoraproject.org/&quot;&gt;Another six months, another Fedora
release.&lt;/a&gt; Apparently I still couldn't resist the temptation of upgrading,
given I got a few days of flu-related downtime. Happy to report it's a pretty
smooth release, with most things in the expected places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gnome.org&quot;&gt;GNOME&lt;/a&gt; is a tiny bit cleaner than it used
to be, which is as expected, given that's what it's been doing for the last 5
releases. Apparently next time it'll be &lt;em&gt;&lt;a href=&quot;http://live.gnome.org/GnomeShell&quot;&gt;something completely different&lt;/a&gt;&lt;/em&gt;. I
don't know if I should be excited or apprehensive about that..&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pulseaudio.org/&quot;&gt;PulseAudio&lt;/a&gt; continues to improve -
however, I could swear I've successfully used a Bluetooth headset with Skype
earlier, and now audio gets stuck if I pair a headset. That's not the most
typical use case, of course, and for the most part, audio no longer sucks on
Linux. Too bad &lt;a href=&quot;http://www.fishpool.org/post/2007/08/01/Sound-on-Acer-Travelmate-6292-under-Linux&quot;&gt;my laptop's&lt;/a&gt;
built-in microphone &lt;strong&gt;does&lt;/strong&gt; suck (don't know if that's with
Linux or in general), so I do need a headset to make Skype calls.&lt;/li&gt;
&lt;li&gt;Apparently Empathy is approaching a usable IM now that it's made the
default. Still slightly prematurely, IMO, and I will continue to use &lt;a href=&quot;http://pidgin.im/&quot;&gt;Pidgin&lt;/a&gt; with all its warts for the time being.&lt;/li&gt;
&lt;li&gt;OpenOffice still works as expected, which is to say, slowly, but reasonably
predicably.&lt;/li&gt;
&lt;li&gt;I can get rid of many of the hacks I've done to make multihead work as I
like without setting it up every time, because now Xorg does that by default.
Yippee!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.fishpool.org/post/2008/12/27/A-couple-of-Fedora-10-notes&quot;&gt;Evolution still
continues to gain one or two major regressions per release&lt;/a&gt;, and lose none
of the earlier. The tally now seems to be: brken live search, fkdup IMAP sync,
scrwy calendaring, and, as an additional feature, automatically selecting the
&lt;strong&gt;wrong&lt;/strong&gt; recipient address out of several available emails
despite being repeatedly told otherwise. Seriously, the thing needs to be taken
behind the shed and shot to the head. And I need to find a decent email
program. Thunderbird 2 wasn't that - and 3 still isn't done. Sigh.&lt;/li&gt;
&lt;li&gt;Google Chromium is about 10x faster than Firefox, and by far the &lt;a href=&quot;http://spot.fedorapeople.org/chromium/F12/&quot;&gt;easiest way to install a 32 bit
browser&lt;/a&gt; (working Flash!) on a 64 bit OS (I should probably reinstall to 32
bits all around, this bits thing doesn't help me do anything better).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;That concludes my &amp;quot;yes, I'm a Linux geek&amp;quot; postings for the next six
months, I guess. :)&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>MySQL - could we please move on already?</title>
    <link>http://www.fishpool.org/post/2009/11/11/MySQL-could-we-please-move-on-already</link>
    <guid isPermaLink="false">urn:md5:4e73b32556b203e68dfc607356199552</guid>
    <pubDate>Wed, 11 Nov 2009 14:10:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>business</category><category>MySQL</category><category>Oracle</category><category>Sun</category>    
    <description>    &lt;p&gt;I've kept away from this debate since last April, but this eternal
dragging-on is getting to me. &lt;a href=&quot;http://blogs.barrons.com/techtraderdaily/2009/11/09/ec-opposes-oraclesun-deal-larry-will-fight-back/&quot;&gt;
Could we please move on already&lt;/a&gt; regarding the Oracle-Sun-MySQL decision?
I'm a customer of MySQL, and I don't really savor the idea of becoming a
customer of Oracle. Even so, I'd much rather see Oracle own it, than leave it
straggling, let alone see this process drag on and on. This is helping no
one.&lt;/p&gt;
&lt;p&gt;I'm using a &lt;a href=&quot;http://mysql.com/products/enterprise/&quot;&gt;product from a
company from which I buy commercial support&lt;/a&gt;, but I could switch to using a
binary-compatible Open Source tool any day I chose. I am not bound to remaining
a customer of the company I'm buying support from for any period longer than
the current contract. I can definitely live with that obligation. I can live
with the OSS-tool (whether we want to call it &lt;a href=&quot;http://dev.mysql.com/downloads/mysql/5.1.html&quot;&gt;MySQL Community&lt;/a&gt;, &lt;a href=&quot;http://www.percona.com/docs/wiki/percona-xtradb:info:xtradb_downloads&quot;&gt;Percona&lt;/a&gt;,
&lt;a href=&quot;http://askmonty.org/wiki/index.php/MariaDB&quot;&gt;MariaDB&lt;/a&gt; or whatever, I
don't care) instead of the commercial product - in fact, I'm getting the
understanding that the OSS-tool may in fact be better suited to my requirements
than the product. So, I have no issue being bound Oracle, should the merger go
through, because I am not bound to them. I can see as much &lt;a href=&quot;http://drizzle.org/&quot;&gt;interesting&lt;/a&gt; related &lt;a href=&quot;http://www.continuent.com/community&quot;&gt;technology&lt;/a&gt; being &lt;a href=&quot;http://www.primebase.org/&quot;&gt;developed&lt;/a&gt; outside the discussed commercial unit
as inside it, so I'm certainly not worried about the future of the tech.&lt;/p&gt;
&lt;p&gt;At this point in time, I could buy &lt;a href=&quot;http://www.google.com/search?sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=mysql+consulting+and+support&quot;&gt;
support&lt;/a&gt; from &lt;a href=&quot;http://www.percona.com/services.html&quot;&gt;at least&lt;/a&gt; a
&lt;a href=&quot;http://openquery.com/&quot;&gt;couple&lt;/a&gt; of different &lt;a href=&quot;http://askmonty.org/wiki/index.php/Support&quot;&gt;organizations&lt;/a&gt; to &lt;a href=&quot;http://www.pythian.com/services/&quot;&gt;replace&lt;/a&gt; and extend that which
I've bought from MySQL/Sun. I have absolutely no reason to think that option
would go away should the merger be approved, despite what certain founders
&lt;a href=&quot;http://monty-says.blogspot.com/2009/10/importance-of-license-model-of-mysql-or.html&quot;&gt;
now claim&lt;/a&gt;. If it's not commercially possible to develop and support a
database product without being in full control over its copyright, then how
come Percona has a business? If it's possible to provide such support for GPL
software on a limited basis, but not on a big-business enterprise level, then
how come Red Hat is a successful public company?&lt;/p&gt;
&lt;p&gt;I use MySQL as an infrastructure component to run a business which could be
described as software-as-a-service. I do not redistribute the code base as part
of a licensed product. There are companies who do that, but they've always done
it with the full understanding that what they're doing is dependent on having
to license something from an independent party over which they have no control.
If they don't like licensing from Oracle, then they can choose to re-engineer
their solution to work on top of some other database engine. It's not like
those don't exist, or like technology, licensed or not, hasn't always carried
that risk with it.&lt;/p&gt;
&lt;p&gt;I can't avoid thinking that some of the parties keeping this thing from
reaching completion are dreaming of Skype -- &lt;a href=&quot;http://online.wsj.com/article/SB10001424052748704328104574519411132567706.html?mod=googlenews_wsj&quot;&gt;
selling the same business twice&lt;/a&gt;. Hey, more power to them if that happens,
but frankly, that was dependent on &lt;a href=&quot;http://gigaom.com/2009/09/01/ebay-skype-sale/&quot;&gt;Ebay making a stupid deal at
the time&lt;/a&gt;. I just do not see what that has to do with anti-trust and why the
European Commission needs to be involved. THIS is hurting the market, more so
that Oracle is likely to.&lt;/p&gt;
&lt;p&gt;I have nothing further on the matter. Thank you for your attention.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Nice going for Bobba Bar -</title>
    <link>http://www.fishpool.org/post/2009/11/08/Nice-going-for-Bobba-Bar-</link>
    <guid isPermaLink="false">urn:md5:607612c88072404a20d79a92d7faedb3</guid>
    <pubDate>Sun, 08 Nov 2009 11:02:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>Bobba</category><category>Sulake</category><category>virtual worlds</category>    
    <description>    &lt;a href=&quot;http://www.fishpool.org/public/Blogphotos/img_1604.jpg&quot;&gt;&lt;img src=&quot;http://www.fishpool.org/public/Blogphotos/.img_1604_t.jpg&quot; alt=&quot;&quot; style=&quot;float: right; margin-top: 0; margin-right: 0; margin-bottom: 1em; margin-left: 1em;&quot; title=&quot;bobba-top-sns, Nov 2009&quot; /&gt;&lt;/a&gt;What a fun end of the week! &lt;a href=&quot;http://bobba.com&quot;&gt;Bobba Bar&lt;/a&gt;, our virtual world app for mobiles &lt;a href=&quot;http://www.itunes.com/app/bobbabar&quot;&gt;just launched this Thursday on iPhone&lt;/a&gt;
having been available (in a slightly different form) for Nokia S60 devices for
a few months. Four days later it's (at least in Finland where I'm looking at
it) the top social networking app (ahead of Facebook, Skype and others) and the
3rd highest ranked free app in general. Great launch performance! &lt;a href=&quot;http://bobba.com&quot;&gt;Get yours from Bobba.com&lt;/a&gt;, or if you don't have a
compatible phone, check out the &lt;a href=&quot;http://www.facebook.com/pages/Bobba/97952869090&quot;&gt;Facebook group for Bobba
Bar&lt;/a&gt;. Oh, and post here or in Facebook where you see Bobba in your local App
Store listings!</description>
    
    
    
      </item>
    
  <item>
    <title>Creating your very own Habbo site</title>
    <link>http://www.fishpool.org/post/2009/11/01/Creating-your-very-own-Habbo-site</link>
    <guid isPermaLink="false">urn:md5:024f5e1c373d4117e1408bdfa973a596</guid>
    <pubDate>Sun, 01 Nov 2009 15:20:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>Habbo</category>    
    <description>    &lt;p&gt;So, &lt;a href=&quot;http://www.fishpool.org/post/2009/11/01/Habbo%2C-soon-ten-years-old%2C-still-the-leader&quot;&gt;I mentioned
an idea of relaunching Mobiles Disco&lt;/a&gt; in celebration of 10 years of Habbo
history. It's actually super-easy to do so. We've created a similar space in
Habbo, and with the embed functionality launched last month, setting up a web
site with your own rooms is no trouble at all, and the only tools required are
just two browser windows while you're working on it. Here's how..&lt;/p&gt;
&lt;p&gt;Come up with a theme. I'm just going to use the existing Old Skool rooms,
but go wild with your own idea!&lt;/p&gt;
&lt;p&gt;Create the rooms in Habbo. Again, I got mine pre-created, but since you can
do pretty much anything with your own Habbo spaces, the sky's the limit to what
can be done. And with Teleport furni, you can create a complete world if you
want to...&lt;/p&gt;
&lt;p&gt;Go back to the first room you want start your site from. &lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: rgb(249, 249, 249);&quot;&gt;You'll see a
small window at the bottom left corner with instructions for &amp;quot;embed this room&amp;quot;.
Copy the code from that window, and paste it somewhere for safe-keeping for a
moment.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: rgb(249, 249, 249);&quot;&gt;&lt;img src=&quot;http://www.fishpool.org/public/Illustrations/.old-skool_m.jpg&quot; alt=&quot;&quot; style=&quot;margin-top: 0; margin-right: auto; margin-bottom: 0; margin-left: auto; display: block;&quot; title=&quot;old-skool.png, Nov 2009&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Next, you'll set up the web site for your own Habbo to live on. I'm going to
use the Google Sites creator for this particular effort, since it's pretty easy
to use. You'll need a name for the site, and decide on, or make your own
background theme. I went with a retro theme for this particular one..&lt;/p&gt;
&lt;p&gt;The Site will begin with just one page on it. Edit the page, and go into
&amp;quot;source code&amp;quot; mode. In Google Sites, this is the &amp;quot;HTML&amp;quot; button at the right end
of the toolbar. Paste the embed code you copied from Habbo here and save the
page.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.fishpool.org/public/Illustrations/.google-sites-editor_m.jpg&quot; alt=&quot;&quot; style=&quot;margin-top: 0; margin-right: auto; margin-bottom: 0; margin-left: auto; display: block;&quot; title=&quot;google-sites-editor.png, Nov 2009&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Google Sites editor will turn the code into a Google Gadget. Other site
creators may work slightly differently. The Gadget is easy to tweak though, so
this is pretty nice. Clicking on the gadget pops up a small edit menu, where I
can choose to center the gadget, and click on Properties to make it a bit
larger (960x720 instead of 800x540 to use my screen better), and turn off the
title.&lt;/p&gt;
&lt;p&gt;That's it! This &lt;a href=&quot;http://sites.google.com/site/mobilesdisco10years/&quot;&gt;simple creation&lt;/a&gt; took 10
minutes to do, and 30 to write the instructions for. I'm sure you can do a
better one, though. &lt;a href=&quot;http://twitter.com/osma&quot;&gt;Tweet me about yours&lt;/a&gt;,
and I'll come and check it out!&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Habbo, soon ten years old, still the leader</title>
    <link>http://www.fishpool.org/post/2009/11/01/Habbo%2C-soon-ten-years-old%2C-still-the-leader</link>
    <guid isPermaLink="false">urn:md5:8311824026be472c2c293771d6cba4de</guid>
    <pubDate>Sun, 01 Nov 2009 13:59:00 +0200</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>Habbo</category><category>Sulake</category><category>virtual worlds</category>    
    <description>    &lt;p&gt;According to Nic Mitham at KZero, &lt;a href=&quot;http://www.kzero.co.uk/blog/?p=2929&quot;&gt;Habbo was the fastest growing virtual
world for another quarter&lt;/a&gt;. Thanks, Nic! One thing though:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, 'MS Trebuchet', sans-serif; font-size: 13px; line-height: 17px;&quot;&gt;
Although it’s the Grand-Daddy of the sector, Habbo continues to show dominance
in the virtual worlds sector from a user acquisition perspective&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Grand-daddy? Sheesh, &lt;a href=&quot;http://www.habbo.com&quot;&gt;Habbo&lt;/a&gt; hasn't even
got to its pre-teen years, let alone have kids! Lets talk about that another
ten years later :) Seriously though, Mobiles Disco, which preceded Habbo by a
few months is now ten years old. I'm thinking we should relaunch the
Disco..&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Some scaling observations on Infobright</title>
    <link>http://www.fishpool.org/post/2009/10/03/Some-scaling-observations-on-Infobright</link>
    <guid isPermaLink="false">urn:md5:8e52b562bdd4e936c1a69555259d6260</guid>
    <pubDate>Sat, 03 Oct 2009 11:12:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>data warehousing</category><category>Infobright</category><category>MySQL</category><category>open source</category>    
    <description>&lt;p style=&quot;margin-top: 0;&quot;&gt;A couple of days ago, Baron Schwartz posted some
&lt;a href=&quot;http://www.mysqlperformanceblog.com/2009/09/29/quick-comparison-of-myisam-infobright-and-monetdb/&quot;&gt;
simple load and select benchmarking of MyISAM, Infobright and MonetDB&lt;/a&gt;,
which Vadim Tkachenko followed up with a &lt;a href=&quot;http://www.mysqlperformanceblog.com/2009/10/02/analyzing-air-traffic-performance-with-infobright-and-monetdb/&quot;&gt;
more realistic dataset and interesting figures where MonetDB beat Infobright in
most queries&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Used to the parallel IEE loader, I was surprised by the apparent slow
loading speed of Baron's benchmark and decided to try and replicate it. I
installed Infobright 3.2 on my laptop (see, this is very unscientific) and
wrote a simple perl script to generate and load an arbitrarily large
data set resembling Baron's description. I'm not going to post my exact
numbers, because this installation is severely resource-constrained below
Infobright's recommended smallest installation. However, you can reproduce the
results yourself with the attached script, and I will note some
observations.&lt;/p&gt;    &lt;p&gt;First of all, this was run on a 1.8GHz Core 2 Duo 2GB RAM laptop running a
64-bit kernel and 64-bit ICE. I stopped most other programs for the duration of
the test, but was still running Fedora 11's GNOME Desktop, and gave ICE only
400MB main heap, 200MB compressed heap and 300MB loader heap. What I found:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Loading speed is almost a linear function of table width. Every time I
doubled the number of (random integer) columns in the loaded table, loading
speed approximately halved. At 200 columns, I was seeing approximately the same
speed as Baron.&lt;/li&gt;
&lt;li&gt;On the other hand, loading speed is NOT affected by the number of rows
loaded, from which one could assume that it won't be affected by the size of
the pre-existing table either (though I did not test this).&lt;/li&gt;
&lt;li&gt;SELECT speed is not affected by the number of columns in the table, unless
those columns are being selected or used in the where constraint. The same
select executed in the same speed regardless of whether the source table had
10, 100 or 500 columns which were not being inspected.&lt;/li&gt;
&lt;li&gt;Loading order, column sorting and select constraints are strongly
correlated. Limiting a query with a random-value column causes a query which
reads 10%, 50% or 90% of the table to execute in approximately 1x, 2x and 3x
time. On the other hand, replacing the random-value column in the where
constraint with a sorted-value (in load order) column makes queries accessing
the same 10%, 50% or 90% of the rows run in nearly constant time. This is the
rough set &amp;quot;knowledge grid&amp;quot; in action, but only works if the aggregations done
are sum(), min(), max() or other simple functions supported by the grid.&lt;/li&gt;
&lt;li&gt;With large dataset (I stopped at 50x heap space), the constant scale factor
in the previous query starts to deteriorate, as the entire knowledge grid no
longer fits in heap, and inspecting 90% of it vs 10% will require I/O. At this
point the scale is beginning to resemble a realistic production setting, as few
people are able to host even 5% of their ADBMS working set in-memory.&lt;/li&gt;
&lt;li&gt;So this is where things get really interesting, and performance
characteristics shift around. Random-column constrained queries of 10%, 50% and
90% of rows now run at 1x, 1.1x and 1.3x time, while constant-column
constraints execute at 1x, 1.3x and 3x their respective performance, but
approximately 3000x faster than the random-constraints!&lt;/li&gt;
&lt;li&gt;The last point shows why it really matters to Infobright workloads that the
most frequent queries are taken into account when deciding the load order for
the data set. Even when designing an incremental ETL process, it can pay off
immensely to pre-sort the incremental data sets by the most likely constraint
or group by columns to allow blocks of data (64k rows each) to be included or
excluded for particular query plans.&lt;/li&gt;
&lt;li&gt;Why is the random-column constrained queries executing in almost constant
time regardless of the rows inspected? Because Infobright's columnar datapack
engine accesses 64k rows at a time, it's nearly as expensive to access every
tenth row as it is to access nine rows out of every ten, if the distribution of
those rows is even across the data set. On the other hand, if the 10% of rows
needed are clustered together, then the other 90% of the data set is skipped
very early in the query optimization process. A traditional btree-indexed data
set would still require a random sweep over most of the index, which would be
much larger than Infobright's &amp;quot;knowledge grid&amp;quot; is.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;That's it for now. If you decide to run your own test using the script,
please post comments. It should run as-is on a machine with the unmodified ICE
3.2 installation and basic Perl packages available. The script takes two
arguments: number of columns (each a random integer value), and number of rows,
and generates the data set into a named pipe though which it's loaded into a
local table created automatically.&lt;/div&gt;</description>
    
          <enclosure url="http://www.fishpool.org/public/code/test-infobright"
      length="2476" type="text/plain" />
    
    
      </item>
    
  <item>
    <title>A peek under the hood in Infobright 3.2 storage engine</title>
    <link>http://www.fishpool.org/post/2009/09/21/A-peek-under-the-hood-in-Infobright-3.2-storage-engine</link>
    <guid isPermaLink="false">urn:md5:301b2e5caaa8dda081c35423ba520eb2</guid>
    <pubDate>Mon, 21 Sep 2009 15:50:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>data warehousing</category><category>Infobright</category><category>MySQL</category><category>open source</category><category>Performance</category>    
    <description>&lt;p&gt;I've been meaning to post some real-world data on the performance of the
Infobright 3.2 release which happened a few weeks ago after an extended release
candidate period. We're just preparing our upgrades now, so I don't have any
performance notes over significant data sets or complicated queries to post
quite yet.&lt;/p&gt;
&lt;p&gt;To make up for that, I decided to address a particular annoyance of mine in
the community edition, first because it hadn't been addressed in the 3.2
release (and really, I'm hoping doing this would include it into 3.2.1), and
second, simply because the engine being open source means I can. I feel
&lt;a href=&quot;http://mervadrian.wordpress.com/2009/07/07/infobright-bids-to-anchor-an-open-source-dw-ecosystem/&quot;&gt;
being OSS is one of Infobright's biggest strengths&lt;/a&gt;, in addition to being a
pretty amazing piece of performance for such a simple, undemanding package in
general, and not making use of that would be shame. Read on for details.&lt;/p&gt;    &lt;p&gt;The annoyance? It's pretty difficult to tell, as a user, what the engine is
doing while it's running queries. &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/explain.html&quot;&gt;EXPLAIN&lt;/a&gt; isn't hooked
up and falls back to the general MySQL code path (which, due to the storage
engine not exporting any index information, simply thinks any query will be a
full table scan). &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html&quot;&gt;SHOW
PROCESSLIST&lt;/a&gt; status data on every query simply says &amp;quot;init&amp;quot; for the entire
duration of the queries, which could be minutes at a time. It does write quite
a lot of detailed information into an optional debug log, but that's on the
database server, inaccessible to the user and application, as well as being
rather hard to read.&lt;/p&gt;
&lt;p&gt;Fortunately, the existence of those debug statements meant it was very easy
to find the places into which I could insert some status instrumentation for
the process list. This is certainly not perfect - this doesn't help telling
about execution paths before running a query, and the convention for process
list status is far more terse than what the debug output of the engine could
produce. I could have simply copied the same detail level into the process
list, but that doesn't seem to be the norm in MySQL engines, and assuming that
Infobright will later include the &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/show-profiles.html&quot;&gt;SHOW PROFILES&lt;/a&gt;
feature, would not be helpful anyway.&lt;/p&gt;
&lt;p&gt;The patch is below (or &lt;a href=&quot;http://www.fishpool.org/public/code/infobright-3.2-proc-info.patch&quot;&gt;download it as raw text&lt;/a&gt;), and
it applies on top of 3.2 src package &lt;a href=&quot;http://www.infobright.org/Download/ICE/&quot;&gt;downloadable at the Infobright.org
site&lt;/a&gt;. Builds with 'make EDITION=community release' and works for me, but
use this at your own risk. Please do post notes and comments, though, I'd be
interested to hear about other users. I'm sure the patch could be much
improved, too.&lt;/p&gt;
&lt;p&gt;Now, what would be &lt;strong&gt;really&lt;/strong&gt; interesting was if the debug
log's information of the knowledge grid evaluation could be turned into EXPLAIN
output, but that would require more understanding of MySQL internals than what
I have...&lt;/p&gt;
&lt;p&gt;This was the first time I looked at the source code for Infobright, and the
second or third time I did so for MySQL in general. ICE is pretty impressive
also in its techniques, not only being the only integrated columnar engine, but
also having more join strategies than other engines I've used, and so forth.
The code is tough to follow though, and the source package included a huge
amount of unused stuff, like a copy of both the InnoDB and NDB storage engines,
neither of which is built from the code base. I guess a bit of clean-up would
make this somewhat more approachable..&lt;/p&gt;
&lt;code&gt;diff -ur
infobright-3.2-x86_64src/src/storage/brighthouse/core/JoinerGeneral.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/JoinerGeneral.cpp&lt;br /&gt;

---
infobright-3.2-x86_64src/src/storage/brighthouse/core/JoinerGeneral.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/JoinerGeneral.cpp  
 2009-09-18 12:13:23.001506795 +0300&lt;br /&gt;
@@ -26,6 +26,7 @@&lt;br /&gt;
         mind-&amp;gt;Empty();&lt;br /&gt;
         return no_desc;  
         // all done&lt;br /&gt;
     }&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;joining&amp;quot;);&lt;br /&gt;
     //if(desc[0].val1.vc-&amp;gt;IsConst() &amp;amp;&amp;amp;
desc[0].val2.vc == NULL) {&lt;br /&gt;
     //    // Special case: if there is a
chance for one-dimensional filtering, execute one condition only.&lt;br /&gt;
     //    no_desc = 1;&lt;br /&gt;
@@ -48,7 +49,8 @@ int JoinerGeneral::ExecuteJoinConditions&lt;br /&gt;
        bool loc_result;&lt;br /&gt;
        bool stop_execution =
false;    // early stop for LIMIT&lt;br /&gt;
        rccontrol.lock(m_conn.GetThreadID())
&amp;lt;&amp;lt; &amp;quot;Starting joiner loop (&amp;quot; &amp;lt;&amp;lt; mit.NoTuples() &amp;lt;&amp;lt; &amp;quot; rows).&amp;quot;
&amp;lt;&amp;lt; unlock;&lt;br /&gt;
-&lt;br /&gt;
+      
thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(), &amp;quot;in joiner loop&amp;quot;);&lt;br /&gt;
+      &lt;br /&gt;
        // The main loop for checking
conditions&lt;br /&gt;
        while(mit.IsValid()) {&lt;br /&gt;
               
if(mit.PackrowStarted()) {&lt;br /&gt;
diff -ur infobright-3.2-x86_64src/src/storage/brighthouse/core/JoinerHash.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/JoinerHash.cpp&lt;br /&gt;
---
infobright-3.2-x86_64src/src/storage/brighthouse/core/JoinerHash.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/JoinerHash.cpp  
 2009-09-18 15:31:15.263505407 +0300&lt;br /&gt;
@@ -55,6 +55,7 @@&lt;br /&gt;
     /////////////////// Prepare all descriptor information
/////////////&lt;br /&gt;
     // TODO: prepare a common language for both joined
columns, if not compatible&lt;br /&gt;
     bool first_found = true;&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(), &amp;quot;hash
join&amp;quot;);&lt;br /&gt;
     DimensionVector dims1(mind);  
     // Initial dimension descriptions&lt;br /&gt;
     DimensionVector dims2(mind);&lt;br /&gt;
     for(int i = 0; i &amp;lt; desc.size(); i++) {&lt;br /&gt;
@@ -203,6 +204,7 @@&lt;br /&gt;
 &lt;br /&gt;
     _int64 hash_row = 0;      
         // hash_row = 0, otherwise deadlock
for null on the first position&lt;br /&gt;
     _int64 traversed_rows = 0;&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(), &amp;quot;hash
join traverse&amp;quot;);&lt;br /&gt;
     while(mit.IsValid()) {&lt;br /&gt;
         if(m_conn.killed())&lt;br /&gt;
             throw
KilledRCException();&lt;br /&gt;
@@ -247,6 +249,7 @@&lt;br /&gt;
     int no_of_matching_rows;&lt;br /&gt;
     MIIterator mit(mind, matched_dims);&lt;br /&gt;
     MIDummyIterator combined_mit(mind);  
     // a combined iterator for checking non-hashed
conditions, if any&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(), &amp;quot;hash
join tuples&amp;quot;);&lt;br /&gt;
     while(mit.IsValid()) {&lt;br /&gt;
         if(m_conn.killed())&lt;br /&gt;
             throw
KilledRCException();&lt;br /&gt;
diff -ur infobright-3.2-x86_64src/src/storage/brighthouse/core/JoinerLoop.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/JoinerLoop.cpp&lt;br /&gt;
---
infobright-3.2-x86_64src/src/storage/brighthouse/core/JoinerLoop.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/JoinerLoop.cpp  
 2009-09-18 12:12:46.056444175 +0300&lt;br /&gt;
@@ -34,6 +34,8 @@&lt;br /&gt;
     int cur_dim1, cur_dim2;&lt;br /&gt;
     int attr1, attr2;&lt;br /&gt;
 &lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(), &amp;quot;loop
join&amp;quot;);&lt;br /&gt;
+&lt;br /&gt;
     ParseDescriptor( desc[0], cur_t1, cur_t2, cur_dim1,
cur_dim2, attr1, attr2, loc_op );&lt;br /&gt;
 &lt;br /&gt;
   
 //////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;

diff -ur infobright-3.2-x86_64src/src/storage/brighthouse/core/JoinerSort.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/JoinerSort.cpp&lt;br /&gt;
---
infobright-3.2-x86_64src/src/storage/brighthouse/core/JoinerSort.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/JoinerSort.cpp  
 2009-09-18 15:32:01.921256944 +0300&lt;br /&gt;
@@ -29,6 +29,7 @@&lt;br /&gt;
     VirtualColumn *vc2 = desc[0].val1.vc;&lt;br /&gt;
     dim1 = vc1-&amp;gt;GetDim();&lt;br /&gt;
     dim2 = vc2-&amp;gt;GetDim();&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(), &amp;quot;sort
join&amp;quot;);&lt;br /&gt;
     // The only supported cases (for now):&lt;br /&gt;
     if(dim1 == -1 || dim2 == -1 ||  
         // one-dim only&lt;br /&gt;
         mind-&amp;gt;GetFilter(dim1) == NULL
||&lt;br /&gt;
@@ -128,6 +129,8 @@&lt;br /&gt;
     s1.Lock();&lt;br /&gt;
     s2.Lock();&lt;br /&gt;
 &lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(), &amp;quot;sort
join apply&amp;quot;);&lt;br /&gt;
+&lt;br /&gt;
     MINewContents new_mind(mind);&lt;br /&gt;
     new_mind.SetDimension(dim1);&lt;br /&gt;
     new_mind.SetDimension(dim2);&lt;br /&gt;
diff -ur
infobright-3.2-x86_64src/src/storage/brighthouse/core/MIRoughSorter.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/MIRoughSorter.cpp&lt;br /&gt;

---
infobright-3.2-x86_64src/src/storage/brighthouse/core/MIRoughSorter.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/MIRoughSorter.cpp  
 2009-09-16 23:17:07.487972507 +0300&lt;br /&gt;
@@ -77,6 +77,7 @@&lt;br /&gt;
 &lt;br /&gt;
     ///////////////////////// the main sorting loop
through bigblocks /////////&lt;br /&gt;
     if(sorting_needed)    {&lt;br /&gt;
+      
 thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(), &amp;quot;sorting
roughly&amp;quot;);&lt;br /&gt;
       
 rccontrol.lock(mind-&amp;gt;m_conn-&amp;gt;GetThreadID()) &amp;lt;&amp;lt; &amp;quot;Sorting
roughly multiindex...&amp;quot; &amp;lt;&amp;lt; unlock;&lt;br /&gt;
         _int64 start_tuple = 0;&lt;br /&gt;
         _int64 stop_tuple = 0;&lt;br /&gt;
diff -ur
infobright-3.2-x86_64src/src/storage/brighthouse/core/MIUpdatingIterator.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/MIUpdatingIterator.cpp&lt;br /&gt;

---
infobright-3.2-x86_64src/src/storage/brighthouse/core/MIUpdatingIterator.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/MIUpdatingIterator.cpp  
 2009-09-18 15:12:03.293257577 +0300&lt;br /&gt;
@@ -116,6 +116,7 @@&lt;br /&gt;
 {&lt;br /&gt;
     if(!changed)&lt;br /&gt;
         return;&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;commit&amp;quot;);&lt;br /&gt;
     if(one_dim_filter) {&lt;br /&gt;
       
 one_dim_filter-&amp;gt;Commit();        //
working directly on multiindex filer (special case)&lt;br /&gt;
         mind-&amp;gt;UpdateNoTuples();&lt;br /&gt;
diff -ur infobright-3.2-x86_64src/src/storage/brighthouse/core/MultiSorter.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/MultiSorter.cpp&lt;br /&gt;
---
infobright-3.2-x86_64src/src/storage/brighthouse/core/MultiSorter.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/MultiSorter.cpp  
 2009-09-18 11:31:50.202579444 +0300&lt;br /&gt;
@@ -372,6 +372,7 @@&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
       
 rccontrol.lock(m_conn-&amp;gt;GetThreadID()) &amp;lt;&amp;lt; &amp;quot;Sorting &amp;quot; &amp;lt;&amp;lt;
no_obj &amp;lt;&amp;lt; &amp;quot; rows...&amp;quot; &amp;lt;&amp;lt; unlock;&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;sorting&amp;quot;);&lt;br /&gt;
     if(max_rate &amp;lt; cur_rate)&lt;br /&gt;
         max_rate = cur_rate;&lt;br /&gt;
     int byte_ind = 4;      
     // no. of bytes to encode row index (4 or 8)&lt;br /&gt;
diff -ur
infobright-3.2-x86_64src/src/storage/brighthouse/core/Query_exeq_low.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/Query_exeq_low.cpp&lt;br /&gt;

---
infobright-3.2-x86_64src/src/storage/brighthouse/core/Query_exeq_low.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/Query_exeq_low.cpp  
 2009-09-18 11:59:48.065253205 +0300&lt;br /&gt;
@@ -553,6 +553,7 @@&lt;br /&gt;
   
 ////////////////////////////////////////////////////////////////////////&lt;br /&gt;

     if(desc.size() &amp;lt; 1)&lt;br /&gt;
         return;&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;preparing&amp;quot;);&lt;br /&gt;
     DelayWhereConditions(desc);&lt;br /&gt;
     SyntacticalDescriptorListPreprocessing(desc, mind,
table);&lt;br /&gt;
 &lt;br /&gt;
@@ -619,6 +620,8 @@&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;executing&amp;quot;);&lt;br /&gt;
+    &lt;br /&gt;
     ///////////////// Apply all one-dimensional filters
(after where, i.e. without outer joins)&lt;br /&gt;
     for(uint i = 0; i &amp;lt; desc.size(); i++)&lt;br /&gt;
         if(!desc[i].done &amp;amp;&amp;amp;
desc[i].IsInner() &amp;amp;&amp;amp; !desc[i].IsType_Join() &amp;amp;&amp;amp;
!desc[i].IsDelayed()) {&lt;br /&gt;
@@ -655,6 +658,7 @@&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   
 /////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;

+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;joining&amp;quot;);&lt;br /&gt;
     DescriptorJoinOrdering(desc, mind);&lt;br /&gt;
 &lt;br /&gt;
     ///// descriptor display for joins&lt;br /&gt;
diff -ur
infobright-3.2-x86_64src/src/storage/brighthouse/core/Query_optimize_RS.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/Query_optimize_RS.cpp&lt;br /&gt;

---
infobright-3.2-x86_64src/src/storage/brighthouse/core/Query_optimize_RS.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/Query_optimize_RS.cpp  
 2009-09-18 11:27:55.040256644 +0300&lt;br /&gt;
@@ -104,6 +104,7 @@&lt;br /&gt;
               
               
   MultiIndex &amp;amp;mind,&lt;br /&gt;
               
               
   vector&amp;lt;Descriptor&amp;gt; &amp;amp;desc)&lt;br /&gt;
 {&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;evaluating P2P&amp;quot;);&lt;br /&gt;
     bool is_nonempty = true;&lt;br /&gt;
     // init by previous values of mind (if any
nontrivial)&lt;br /&gt;
     for(int i = 0; i &amp;lt; mind.NoDimensions(); i++)
{&lt;br /&gt;
diff -ur
infobright-3.2-x86_64src/src/storage/brighthouse/core/RCEngine_results.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/RCEngine_results.cpp&lt;br /&gt;

---
infobright-3.2-x86_64src/src/storage/brighthouse/core/RCEngine_results.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/RCEngine_results.cpp  
 2009-09-16 23:02:02.200221840 +0300&lt;br /&gt;
@@ -37,7 +37,7 @@&lt;br /&gt;
 void RCEngine::SendResults(na::DataSource* exectree, THD* thd,
select_result *res, List&amp;lt;Item&amp;gt; &amp;amp;fields)&lt;br /&gt;
 {&lt;br /&gt;
     int error = 0;&lt;br /&gt;
-    thd-&amp;gt;proc_info=&amp;quot;Sending data&amp;quot;;&lt;br /&gt;
+    thd_proc_info(thd,&amp;quot;Sending data&amp;quot;);&lt;br /&gt;
     DBUG_PRINT(&amp;quot;info&amp;quot;, (&amp;quot;%s&amp;quot;, thd-&amp;gt;proc_info));&lt;br /&gt;
 &lt;br /&gt;
     res-&amp;gt;send_fields(fields, Protocol::SEND_NUM_ROWS |
Protocol::SEND_EOF);&lt;br /&gt;
@@ -136,7 +136,7 @@&lt;br /&gt;
 void RCEngine::SendResults(JustATable&amp;amp; results, THD* thd,
select_result *res, List&amp;lt;Item&amp;gt; &amp;amp;fields, ConnectionInfo *conn)&lt;br /&gt;
 {&lt;br /&gt;
     int error = 0;&lt;br /&gt;
-    thd-&amp;gt;proc_info=&amp;quot;Sending data&amp;quot;;&lt;br /&gt;
+    thd_proc_info(thd,&amp;quot;Sending data&amp;quot;);&lt;br /&gt;
     DBUG_PRINT(&amp;quot;info&amp;quot;, (&amp;quot;%s&amp;quot;, thd-&amp;gt;proc_info));&lt;br /&gt;
 &lt;br /&gt;
     res-&amp;gt;send_fields(fields, Protocol::SEND_NUM_ROWS |
Protocol::SEND_EOF);&lt;br /&gt;
diff -ur
infobright-3.2-x86_64src/src/storage/brighthouse/core/RoughJoinWatcher.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/RoughJoinWatcher.cpp&lt;br /&gt;

---
infobright-3.2-x86_64src/src/storage/brighthouse/core/RoughJoinWatcher.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/RoughJoinWatcher.cpp  
 2009-09-16 23:18:25.821225774 +0300&lt;br /&gt;
@@ -184,6 +184,7 @@&lt;br /&gt;
     //        - after
checking all the result:&lt;br /&gt;
     //          
 - if still potentially_excluded =&amp;gt; set as non-intersecting and up to
date&lt;br /&gt;
 &lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;updating P2P&amp;quot;);&lt;br /&gt;
     rccontrol.lock(mind.m_conn-&amp;gt;GetThreadID()) &amp;lt;&amp;lt;
&amp;quot;Updating P2P...&amp;quot; &amp;lt;&amp;lt; unlock;&lt;br /&gt;
     anything_to_update = false;&lt;br /&gt;
     _int64 pairs_already_updated = 0;&lt;br /&gt;
diff -ur
infobright-3.2-x86_64src/src/storage/brighthouse/core/TempTable_aggregate.cpp
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/TempTable_aggregate.cpp&lt;br /&gt;

---
infobright-3.2-x86_64src/src/storage/brighthouse/core/TempTable_aggregate.cpp  
 2009-08-26 21:26:43.000000000 +0300&lt;br /&gt;
+++
infobright-3.2-x86_64src.new/src/storage/brighthouse/core/TempTable_aggregate.cpp  
 2009-09-18 11:30:24.149255211 +0300&lt;br /&gt;
@@ -65,6 +65,7 @@&lt;br /&gt;
     ::Filter tuple_left(mit.NoTuples());&lt;br /&gt;
     tuple_left.Set();&lt;br /&gt;
     gbw.SetDistinctTuples(tuple_left.NoObj());&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;aggregating&amp;quot;);&lt;br /&gt;
     do {&lt;br /&gt;
         if(rccontrol.isOn())  {&lt;br /&gt;
           
 if(upper_approx_of_groups == 1)&lt;br /&gt;
@@ -222,6 +223,7 @@&lt;br /&gt;
 void TempTable::MultiDimensionalDistinctScan(GroupByWrapper&amp;amp; gbw,
DimensionVector &amp;amp;dims)&lt;br /&gt;
 {&lt;br /&gt;
   
 MEASURE_FET(&amp;quot;TempTable::MultiDimensionalDistinctScan(GroupByWrapper&amp;amp;
gbw)&amp;quot;);&lt;br /&gt;
+    thd_proc_info(&amp;amp;ConnectionInfoOnTLS.Get().Thd(),
&amp;quot;Distinct scan&amp;quot;);&lt;br /&gt;
     while(gbw.AnyOmittedByDistinct()) {  
 /////////// any distincts omitted? =&amp;gt; another pass needed&lt;br /&gt;
         ///// Some displays&lt;br /&gt;
         _int64 max_size_for_display =
0;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
    
          <enclosure url="http://www.fishpool.org/public/code/infobright-3.2-proc-info.patch"
      length="12112" type="text/plain" />
    
    
      </item>
    
  <item>
    <title>Why mobile computers are a bad idea</title>
    <link>http://www.fishpool.org/post/2009/08/28/Why-mobile-computers-are-a-bad-idea</link>
    <guid isPermaLink="false">urn:md5:0d622a29d7144f1beb0e442f99e4fe26</guid>
    <pubDate>Fri, 28 Aug 2009 11:03:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>hardware</category><category>Maemo</category><category>quality</category>    
    <description>    &lt;p&gt;After my &lt;a href=&quot;http://www.fishpool.org/post/2009/08/27/Reflections-on-Nokia-Maemo&quot;&gt;last night's
posting&lt;/a&gt;, I had a small exchange with &lt;a href=&quot;http://twitter.com/moximillian&quot;&gt;@moximilian&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/joeludwig&quot;&gt;@jludwig&lt;/a&gt; about my claim that calling the
N900 a computer is BS and nobody wants a computer. Somehow, Nokia has gone from
calling the N-series devices &amp;quot;multimedia computers&amp;quot; a couple of years back to
&amp;quot;mobile computers&amp;quot; today, but it's a totally horrible thing to do from a market
positioning point of view. I suppose I should clarify my reasoning a bit.&lt;/p&gt;
&lt;p&gt;This is how I imagine the thought process has gone: Nokia, an
engineering-led manufacturer of fixed-function devices (phones) has had the
ambition to &amp;quot;put the Internet in your pocket&amp;quot; for quite some time. So far, so
good. Now, an engineer designs a brilliant package of a high-performance
programmable microprocessor, significant amount of working memory and storage
memory, and a rich set of input and output mechanisms. To an engineer, this
fits the &lt;a href=&quot;http://en.wikipedia.org/wiki/Computer#Function&quot;&gt;definition of
a computer&lt;/a&gt;, thus it must be a computer.&lt;/p&gt;
&lt;p&gt;However, that is not how the world at large sees computers. The general
understanding of a computer is a device which &lt;a href=&quot;http://www.s60tips.com/2007/03/07/file-manager-for-s60-3rd-edition/&quot;&gt;requires
constant management&lt;/a&gt;, is &lt;a href=&quot;http://www.google.com/search?btnG=Google+Search&amp;amp;q=computer+virus&quot;&gt;at
risk&lt;/a&gt; from viruses and other malware, produces &lt;a href=&quot;http://discussions.europe.nokia.com/discussions/board/message?board.id=messaging&amp;amp;message.id=3750&quot;&gt;
incomprehensible error messages&lt;/a&gt; and, despite being a window to the
wonderful new world of Twitters, Facebooks and all kinds of information and
entertainment, is best left alone when at all possible. Yes, the computer
industry has made great progress in the last decades in making their produce
more approachable and human-friendly, but it's not there yet. Apple, for all
its faults, is generally regarded as the gold standard in &amp;quot;computers for the
normal people&amp;quot;. Yet who hasn't seen a Mac or even an iPhone (once loaded with
applications, at least) bug out in the most bizarre of ways?&lt;/p&gt;
&lt;p&gt;Computers don't have any built-in value of their own. The value is
completely attached to the applications, services and solutions to which they
provide access. If it was left at that, and calling something a &amp;quot;mobile
computer&amp;quot; would be simply a bad choice of marketing titles, I wouldn't mind.
However, as long as the engineers working on the future devices think it's
desirable to think of them as computers, they will carry the problems I
mentioned along to future devices, because that's what computers do.&lt;/p&gt;
&lt;p&gt;The device in your pocket is a terminal, a window onto the services of the
Global Computer, and a flexible access point to things no one has yet to
invent. It is programmable, it does have memory, and it can compute. Even so,
lets not call it a computer.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Reflections on Nokia Maemo</title>
    <link>http://www.fishpool.org/post/2009/08/27/Reflections-on-Nokia-Maemo</link>
    <guid isPermaLink="false">urn:md5:ac5062f4dd5f02f44663e1c53a24ba33</guid>
    <pubDate>Thu, 27 Aug 2009 22:14:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>business</category><category>hardware</category><category>Maemo</category><category>open source</category><category>quality</category>    
    <description>    &lt;p&gt;Earlier today Nokia announced their first handset based on what is likely to
be their mobile operating system of the future - the &lt;a href=&quot;http://maemo.nokia.com/n900/&quot;&gt;Nokia N900 Maemo&lt;/a&gt;. I didn't think I would
bother to pay attention, but somehow, I ended up doing so anyway, and this post
is a result of that time spent thinking about it. I like quite a few things
about it, but can't avoid being deeply bothered by other aspects. I hope by
writing this I can make some small contribution to its future.&lt;/p&gt;
&lt;p&gt;Why do I care? After the frustrations and disappointments with Nokia devices
in the past years, I've tried not to. However, they're impossible to ignore in
Finland, I have family reasons to hope this road leads to something good, and
it's an attempt to make an open platform -- and I care about open platforms.
Why do I feel qualified to comment? Well, because this is not really about
devices, it's about software. And software is what I've always done, and
managing software organizations is what I think about daily.&lt;/p&gt;
&lt;p&gt;There's lot to like about the N900. I haven't seen, let alone played with
one, but as far as the specs go, it's a &lt;a href=&quot;http://maemo.nokia.com/n900/specifications/&quot;&gt;pretty nice set of hardware&lt;/a&gt;.
Same performance as the iPhone 3GS (which also makes it faster than any Android
device announced), 3D acceleration, lots of storage (and a memory card slot),
and, as a welcome change from many other Nokia devices, completely standard
connectors (3.5mm audio, micro-USB tethering and battery charger). On the
hardware side, the only thing not to like about it is the lack of a
finger-usable, multi-touch display. This device, like all the other Nokia
devices before it, require a stylus or at least long fingernails. It makes up
for that by being really high resolution.&lt;/p&gt;
&lt;p&gt;It's also based on an open source, &lt;a href=&quot;http://maemo.nokia.com/features/&quot;&gt;Linux-based operating system&lt;/a&gt; Nokia has
been developing for several years with &lt;a href=&quot;http://maemo.org/&quot;&gt;community
participation&lt;/a&gt;, Maemo. This makes it more attractive to me on a personal
level than iPhone (which is &lt;a href=&quot;http://musically.com/blog/2009/08/25/now-facebooks-iphone-developer-criticises-app-store-approvals/&quot;&gt;
way too closely guarded and controlled by Apple&lt;/a&gt;), Palm WebOS (open, but
little track record), or even Android (open, but built out of pieces which have
far less common with normal Linux than Maemo). It should be fairly clear that
all four mentioned are way ahead of things like Symbian S60, which clearly
needs to be taken behind the shed and put out of its misery, not matter what
Nokia's representatives say about it official capacity.&lt;/p&gt;
&lt;p&gt;On a more professional level, the inclusion of Flash 9.4 in the platform is
a big deal. I'm anxious to get hold of one and see how much work it is to make
Habbo work on it. This could be the first handset capable of technically
running it (enough performance, enough resolution, good enough software),
though obviously tuning our service to a mobile device would still need work on
UI and other pieces.&lt;/p&gt;
&lt;p&gt;However, like I wrote above, there's also plenty that bothers me. First of
all, unlike most people probably realize, this is actually the 4th Maemo device
in about as many years that Nokia releases. First was the &lt;a href=&quot;http://europe.nokia.com/find-products/devices/nokia-770&quot;&gt;Nokia 770 Internet
Tablet&lt;/a&gt;, essentially an early adopter test device. Then came &lt;a href=&quot;http://usa.nokia.com/find-products/phones/nokia-n800-r6&quot;&gt;N800&lt;/a&gt; -- running
an updated OS which required applications to be ported to it, but which never
was officially released for the 770 (putting the early adopter developers in a
rather awkward position). Less than a year later &lt;a href=&quot;http://usa.nokia.com/find-products/phones/nokia-n810&quot;&gt;N810&lt;/a&gt; added a
physical keyboard and an OS upgrade (which fortunately could be installed, with
some difficulty, on the N800). That was quite a long time ago, though.&lt;/p&gt;
&lt;p&gt;In the meantime, Maemo has been completely reinvented. The original UI
toolkit has been switched to &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;QT&lt;/a&gt;, which Nokia
bought in the meantime, and all of the (rather limited quantity) applications
require significant rework to be compatible with the OS release on the N900.
The public reasoning for this compatibility break has been pretty weak -- &amp;quot;to
ensure compatibility with S60&amp;quot;, which &lt;em&gt;also&lt;/em&gt; is moving on to QT
framework. Why is this weak? Well, because the transition over on the S60 side
also requires all of the (somewhat more numerous) applications developed for
that platform to be significantly reworked. In other words, Nokia broke
compatibility on both its old smartphone platform and the new platform at the
same time, and offered little transitionary compatibility layers to either
side. Not for the first time, either. S60 applications have been &lt;a href=&quot;http://en.wikipedia.org/wiki/S60_%28software_platform%29#S60_editions&quot;&gt;broken
between upgrades&lt;/a&gt; several times before, too.&lt;/p&gt;
&lt;p&gt;This track record is highly worrying. Despite their years of practice and
ambitions to have a lively third party mobile applications market, Nokia has
clearly not grasped the importance of a stable platform to the developers they
mean to attract. This lack of understanding of one of the most basic
requirements is enough to counter pretty much everything I wrote about Maemo
versus its closest competitions a few chapters earlier.&lt;/p&gt;
&lt;p&gt;Contrast the above to iPhone OS 2.0 to 3.0 transition. Sure, a few things
did change. However, developers were given months of notice ahead of time, and
the changes, apart from added functionality, were all pretty minor. Of course,
Apple has a long history of making major upgrades while retaining forwards
compatibility, with the Mac OS 68k to PowerPC, then to OS X, then to Intel CPU
transitions.&lt;/p&gt;
&lt;p&gt;It's also taken a LONG time for this device to be announced. I don't know,
but I get the feeling it's something like a year late. The break in launch
schedule between N810 and N900, the amount of changes in the Maemo platform,
and the design of the device compared to for instance the N97 all scream &amp;quot;last
year&amp;quot; to me. Besides, &lt;a href=&quot;http://www.techcrunch.com/2009/08/27/nokia-n900-gets-official-heading-to-europe-in-october/&quot;&gt;
everyone knew this was coming&lt;/a&gt; ages ago. In the time between the launches of
N810 and N900, Apple has managed to update the iPhone twice. This lack of
predictability in the release cycle doesn't bode well for the next device in
the line.&lt;/p&gt;
&lt;p&gt;There is nothing more important for progress in software development than
cycle time. The only cost-effective, productive way of making software today is
to get feedback on it often, and the longer it stays unreleased, the more the
feedback is late when it comes. This seems to be another area where Nokia has
not been able to shake off their &amp;quot;we make hardware&amp;quot; mentality. Unline hardware,
software can be updated with no extra cost. That's an advantage nearly everyone
else has learned to make use of, and Nokia, if they truly desire to become a
software and services powerhouse, has to finally take to heart.&lt;/p&gt;
&lt;p&gt;N900 is not an &amp;quot;iPhone killer&amp;quot;. I don't think it's meant to be. When its
development started, it's unlikely the iPhone had even been announced. However,
it's the best chance for Nokia to ever develop a device better than an iPhone.
I hope they will - the world needs competition, and I would like to see Nokia
be part in that. However, at this rate they will never catch up - Apple will
have released two more major updates before the next Maemo device unless Nokia
gets their act together.&lt;/p&gt;
&lt;p&gt;I'm still hoping.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Excuse the downtime</title>
    <link>http://www.fishpool.org/post/2009/07/16/Excuse-the-downtime</link>
    <guid isPermaLink="false">urn:md5:41dc12f6b9d2c21b4451e412cf1355ce</guid>
    <pubDate>Thu, 16 Jul 2009 23:33:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
            
    <description>    &lt;p&gt;Mea culpa, a small domain to fix email redirection update seems to have gone
wrong and taken the blog offline. I didn't notice since I've been mostly
offline myself, so thanks to the readers who notified me. If you can read this,
the problem has been resolved.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>What we're looking for in a data integration tool</title>
    <link>http://www.fishpool.org/post/2009/05/27/What-we-re-looking-for-in-a-data-integration-tool</link>
    <guid isPermaLink="false">urn:md5:488f680698596d2ee859aef4abc3cb45</guid>
    <pubDate>Wed, 27 May 2009 20:05:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>data warehousing</category><category>enterprise</category><category>Habbo</category><category>MySQL</category><category>open source</category><category>Sulake</category>    
    <description>    &lt;p&gt;As &lt;a href=&quot;http://www.sulake.com&quot;&gt;our&lt;/a&gt; data warehousing process grows
and the workflows get more complex, we've revisited the question of what tools
to use in this process. Out of curiosity, I had a look at basing such a process
on &lt;a href=&quot;http://hadoop.apache.org/&quot;&gt;Hadoop&lt;/a&gt;/&lt;a href=&quot;http://wiki.apache.org/hadoop/Hive&quot;&gt;Hive&lt;/a&gt; for scalability reasons, but the
lack of mature tools and the sacrifices on efficiency that would entail meant
we're better off using something else as long as a distributed processing
platform is the only thing that can get the job done. I'm also curious about
the transition to continuous integration, a model I noticed showing up a couple
of years ago and now getting some air under its wings as &lt;a href=&quot;http://tibcoblogs.com/cep/category/etl/&quot;&gt;CEP&lt;/a&gt;, IBM's &lt;a href=&quot;http://www.dbms2.com/2009/05/13/ibm-system-s-infosphere-streams-processing/&quot;&gt;Infosphere
Streams&lt;/a&gt;, and other similar approaches. Still, I think I'll continue to rely
on something else for a while and see how things shake out. Continuous
integration clearly is the future, but there are many ways to get there.&lt;/p&gt;
&lt;p&gt;So, we had a look at what's going on in the Open Source data integration
field. It seems the leaders in that field are Pentaho with &lt;a href=&quot;http://pentaho.com/products/data_integration/&quot;&gt;Kettle/Pentaho Data
Integration&lt;/a&gt;, and Talend with &lt;a href=&quot;http://www.talend.com/products-data-integration/talend-products.php&quot;&gt;Open
Studio and Talend Integration Suite&lt;/a&gt;. Both seem pretty even in terms of
features. Both companies are a bit difficult to approach as a potential
customer, so I figured I should also try what would come up from the OSS
approach of just posting my thoughts on the Interweb ;)&lt;/p&gt;
&lt;p&gt;Besides the technical pilot implementations we've made to compare basic
workflow of the various tools, below is a sample of the kind of questions we're
considering when evaluating the suitability of the tools.&lt;/p&gt;
&lt;p&gt;Product roadmap, release schedule and size of the development team&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How often and of what scope of changes should we expect and prepare
ourselves for platform upgrades?&lt;/li&gt;
&lt;li&gt;Past track record on keeping to a regular updates schedule&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Data lineage and dependency, Impact analysis&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to find out which tables are being used to for deriving DWH dimensions
and facts?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Logging, auditing, monitoring on row and job level&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to monitor and archive workflows on a row level (amount of rows being
inserted/updated/deleted)?&lt;/li&gt;
&lt;li&gt;How to maintain, access and query a job execution history (start time/end
time/return code)?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Version control&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to track and restore changes in jobs?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Multi-user environment&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How can several developers work together?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Change Data Capture&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to assist incremental loads?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Data profiling&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How can data source be examined?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Job recovery&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to recover from possible failures in jobs (such as lost database
connection)?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deploy jobs&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to move jobs from one repository to another (development to testing to
production)?&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Hello, MySQL 6.0, err, something</title>
    <link>http://www.fishpool.org/post/2009/05/24/Hello-MySQL-60-err-something</link>
    <guid isPermaLink="false">urn:md5:b2529aeb2bda4b434ea669c1fcc362da</guid>
    <pubDate>Sun, 24 May 2009 13:28:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>community</category><category>enterprise</category><category>MySQL</category><category>production</category>    
    <description>    &lt;p&gt;I'm conflicted about the latest twist of the MySQL release saga, ie the
&lt;a href=&quot;http://forums.mysql.com/read.php?3,263815&quot;&gt;announcement of the 6.0.11
alpha&lt;/a&gt; version and the accompanying note that it's the last 6.0 release and
will be replaced by the &lt;a href=&quot;http://forge.mysql.com/wiki/Development_Cycle&quot;&gt;already discussed milestone
model&lt;/a&gt;. From an engineering point of view, I think this is the right step.
I'm not sure about that, because I can't really tell exactly what is the
engineering model chosen: trunk-first, then backport, or fix-in-releases, then
forward port. I also can't tell whether the milestone model is going to be
timeboxed or feature-scoped. Personally, I would prefer to see the former of
both alternatives.&lt;/p&gt;
&lt;p&gt;From a customer point of view, I'm even more confused, though much less
concerned. Okay, so 6.0 won't become the marketing version number of any MySQL
Enterprise release? Doesn't matter. &lt;a href=&quot;http://www.fishpool.org/post/2009/05/12/Confusing-Sun-communication-about-MySQL-54&quot;&gt;5.4 needs to come
out first anyway&lt;/a&gt;, preferably sooner with a concrete, well-tested feature
set, than later with more planned-but-unfinished features stuffed in it. What
the release after that is going to be called makes no difference to me, as long
as it's also going to contain &lt;a href=&quot;http://www.fishpool.org/post/2009/04/26/MySQL-2009-2010-roadmap&quot;&gt;solid improvements and comes out on
predictable schedule&lt;/a&gt; that doesn't force me to look for something
drastically different in order to deal with scale.&lt;/p&gt;
&lt;p&gt;That being said, it's still weird. So if the thought of 6.0 GA release is
scrapped, why release anything and still call it 6.0? I guess it's just tying
loose ends, but that's an engineering thing, and only the number of existing
source branches with stuff to merge together matter, not the version number put
to it...&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Confusing Sun communication about MySQL 5.4</title>
    <link>http://www.fishpool.org/post/2009/05/12/Confusing-Sun-communication-about-MySQL-54</link>
    <guid isPermaLink="false">urn:md5:d5de2e377562b55d20dff4dbd4428193</guid>
    <pubDate>Tue, 12 May 2009 17:01:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>MySQL</category>    
    <description>    &lt;p&gt;Just received an email newsletter from Sun titled &amp;quot;MySQL 5.4 Preview
Release&amp;quot; which states:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sun Microsystems recently released MySQL 5.4, delivering performance and
scalability improvements enabling the InnoDB storage engine to scale up to
16-way x86 servers and 64-way CMT servers.&lt;br /&gt;
&lt;br /&gt;
MySQL 5.4 also includes new subquery optimizations and JOIN improvements,
resulting in 90% better response times for certain queries.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Apparently, the confusion about the contents of the release I wrote about
earlier continue to reign inside Sun as well. MySQL 5.4 &lt;strong&gt;has not been
released&lt;/strong&gt; by any reasonable meaning of the word, since there's &amp;quot;only&amp;quot; a
preview available at this time. Compare this to Windows 7: that's already a
Release Candidate, but it has not been released. Also, the preview release
available &lt;strong&gt;does not&lt;/strong&gt; include new subquery optimizations nor JOIN
improvements. Having planned such improvements doesn't count.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.fishpool.org/post/2009/04/26/MySQL-2009-2010-roadmap&quot;&gt;As I wrote earlier, the
best of the rather bad excuses for the release labeling&lt;/a&gt; offered to me was
that Sun wanted to avoid confusion by not releasing many versions at once. I
think that got replaced (and then some) by plenty of extra confusion about when
and what was released, instead. Sorry, no good. Try again, 'kthxbye.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>What does Oracle mean for Java?</title>
    <link>http://www.fishpool.org/post/2009/05/04/What-does-Oracle-mean-for-Java</link>
    <guid isPermaLink="false">urn:md5:61cc6ad1edef2a9ac25f7e98b47e80f6</guid>
    <pubDate>Mon, 04 May 2009 22:54:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>business</category><category>Java</category><category>MySQL</category><category>open source</category><category>Oracle</category>    
    <description>    &lt;p&gt;Over the past two weeks I've been mostly focused on MySQL, but the
big-ticket item in the Sun/Oracle deal is not databases, it's Java. However,
it's also the domain which is far less clear to predict. It was a big deal when
Sun decided to open source Java, but the fact of the matter is that the first
fully open source release isn't out yet, and Sun has been &lt;a href=&quot;http://www.jroller.com/scolebourne/entry/shedding_new_light_on_no&quot;&gt;keeping the
testing and certification kit off-limits&lt;/a&gt; for open source communities. This
means it would still be far too easy for OpenJDK to be killed off.&lt;/p&gt;
&lt;p&gt;I've been keeping clear of Oracle for several years, and can't even begin to
guess what their position on this is. Oracle has been a pretty active
contributor to Linux in particular for several years, and I'm sure their open
source strategy and how it works together with their business is pretty well
established within at least the engineering parts of the company. At the same
time, their notoriously aggressive market tactics make sure that everyone's
wary of their next move. Java is a huge part of Oracle's business, and after
they purchased BEA, I wouldn't be surprised if Oracle wasn't already the
biggest Java company (in terms of revenue) ahead of both Sun and IBM. After
completing the Sun acquisition, that'll be guaranteed.&lt;/p&gt;
&lt;p&gt;That's a big balance shift for the overall Java community. Now, Oracle is a
smart company. My worry is they might emphasize short-term tactical market
advantage (owning all of Java, JRockit, Glassfish and WebLogic to compete
against other middleware and business applications) over long-term strategic
benefit of a unified platform competing with .NET and the host of open source
platforms from PHP and Ruby to Python. With such a wide field, following up on,
and improving on the open source platform process would be the right thing to
do - and it would help me :)&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>The difference between conversion and retention</title>
    <link>http://www.fishpool.org/post/2009/04/30/The-difference-between-conversion-and-retention</link>
    <guid isPermaLink="false">urn:md5:0aaa4217f8fe7c019db79fdd41a7dd98</guid>
    <pubDate>Thu, 30 Apr 2009 11:27:00 +0300</pubDate>
    <dc:creator>Osma</dc:creator>
        <category>business</category><category>measurement</category><category>Performance</category><category>research</category>    
    <description>    &lt;p&gt;Picked up a piece of analysis today from my newsfeed regarding Twitter
audience. Nielsen has posted information about &lt;a href=&quot;http://blog.nielsen.com/nielsenwire/online_mobile/twitter-quitters-post-roadblock-to-long-term-growth&quot;&gt;
Twitter's month-to-month retention (40%)&lt;/a&gt; and compared that to Facebook's
and MySpace's. Pete Cashmore over at Mashable promptly misread the basic
information and came to an entirely wrong conclusion about the stats, titling
his post about it as &amp;quot;&lt;a href=&quot;http://mashable.com/2009/04/28/twitter-quitters/&quot;&gt;60% quit Twitter in the
first month&lt;/a&gt;&amp;quot;. A simple misunderstanding of basic audience analysis like
this is the crucial difference between explosively growing traffic and a
failure. That's a fail for you, Pete.&lt;/p&gt;
&lt;p&gt;What's wrong? Well, retention is a separate matter from conversion. 40%
conversion from a trial registration to being a continuing active user to the
second month would not be a bad conversion rate. It's not stratospherically
great, I've seen better, but I wouldn't be terribly unhappy about such a
figure. However, Nielsen didn't say anything at all about first-to-second month
conversion. This is what they DID say: &amp;quot;Twitter’s audience retention rate, or
the percentage of a given month’s users who come back the following month, is
currently about 40 percent.&amp;quot;&lt;/p&gt;
&lt;p&gt;That's pretty plain English when you take the time to read it. Month to
month, regardless of visitor lifetime, not first to second month. On this
metric, 40% retention is not good at all, and will definitely be a limiting
factor to Twitter's traffic and audience size over time, just the Nielsen
article points out (and shows the math for). For any given retention rate,
there just is a certain maximum audience reach beyond which any new traffic
can't overcome the leaving base, since new traffic is not an inexhaustible
supply.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.nielsen.com/nielsenwire/online_mobile/twitter-quitters-post-roadblock-to-long-term-growth&quot;&gt;
&lt;img alt=&quot;&quot; src=&quot;http://blog.nielsen.com/nielsenwire/wp-content/uploads/2009/04/social_audience_retention.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And since today is a busy day, that concludes the free startup advice. Take
the time to understand the difference between these metrics, you'll thank
yourself for it later.&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>