<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/'>
<channel>
  <title>Arjen&apos;s Journal</title>
  <link>http://arjen-lentz.livejournal.com/</link>
  <description>Arjen&apos;s Journal - LiveJournal.com</description>
  <lastBuildDate>Fri, 25 Jul 2008 00:21:03 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>arjen_lentz</lj:journal>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>http://p-userpic.livejournal.com/73490772/4747889</url>
    <title>Arjen&apos;s Journal</title>
    <link>http://arjen-lentz.livejournal.com/</link>
    <width>100</width>
    <height>74</height>
  </image>

<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/127326.html</guid>
  <pubDate>Fri, 25 Jul 2008 00:21:03 GMT</pubDate>
  <title>InnoDB Performance Tuning (training course day for MySQL)</title>
  <link>http://arjen-lentz.livejournal.com/127326.html</link>
  <description>This &lt;a href=&quot;http://openquery.com.au/training/mysql_innodb_performance_tuning&quot;&gt;DBA course day&lt;/a&gt; is in part based on info from &lt;a href=&quot;http://www.mysqlperformanceblog.com/&quot;&gt;Peter Zaitsev&lt;a&gt;&apos;s earlier explorations (thanks Peter), and of course new insights from the &lt;a href=&quot;http://openquery.com.au/resources/hpm&quot;&gt;High Performance MySQL&lt;/a&gt; book (there&apos;s a lot of Baron in there, all credit to his great work!), wisdom from &lt;a href=&quot;http://mysqlha.blogspot.com/&quot;&gt;Mark Callaghan&lt;/a&gt;, with my own teach approach and style thrown in to turn it into a good yet fun educational day!&lt;br /&gt;&lt;br /&gt;Just like with other topics, extending this to a full day allows the issue to be explored much better rather than getting skimmed over as a small part of a much bigger course. After all, if you understand the tool, how it does things and why, you can utilise it more optimally. The skimming wouldn&apos;t help you in this sense.&lt;br /&gt;&lt;br /&gt;I still have some customers use MyISAM (out of habit mainly) but the default storage engine really is InnoDB, effectively, even if the server build does not see it that way by default ;-) But there is more to tune, things to know. Just converting to InnoDB does not make the application run any better necessarily. It might reduce lock contention in some cases (like update heavy apps), but the overall running might be slower without the right setup. While maintaining ACID, there&apos;s much that can be done.&lt;br /&gt;&lt;br /&gt;The course is part of the DBA course days that &lt;a href=&quot;http://openquery.com.au/training&quot;&gt;Open Query&lt;/a&gt; has currently scheduled in cities around Australia, and in Auckland New Zealand. For dates that are still a few months away you can get up to $50 off (per person/per day) for early bookings.&lt;/a&gt;&lt;/a&gt;</description>
  <comments>http://arjen-lentz.livejournal.com/127326.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/127111.html</guid>
  <pubDate>Thu, 24 Jul 2008 03:04:09 GMT</pubDate>
  <title>PHPUnit, Selenium... Sebastian&apos;s workshops in Australia</title>
  <link>http://arjen-lentz.livejournal.com/127111.html</link>
  <description>Sebastian Bergmann&apos;s &lt;a href=&quot;http://sebastian-bergmann.de/archives/804-Quality-Assurance-in-PHP-Projects.html&quot;&gt;slides&lt;/a&gt; of his presentation at OSCON this week. &lt;a href=&quot;http://openquery.com.au/training/php_project_qa&quot;&gt;Quality Assurance in PHP Projects&lt;/a&gt; is a workshop by Sebastian (author of PHPUnit) in Melbourne (4-6 August) and Brisbane (11-12,14 August), on my invitation. This was triggered by meeting up with him earlier this year at the MySQL Conf in Santa Clara, and a discussion I had a month or so later with &lt;a href=&quot;http://www.oxer.com.au/&quot;&gt;Jonathan Oxer&lt;/a&gt; of IVT.&lt;br /&gt;&lt;br /&gt;I&apos;ve been promoting various aspects of development process improvements through the keynote selection at OSDC 2007, the distributed revision control talk at the combined MySQL/PHP user groups in Brisbane by Ian Clatworthy (Canonical/Bazaar), and of course test-driven development for PHP is another key aspect. PHP is pupular (essentially it runs Web 2.0) but so easy that coders can get very slack. On a larger project, this can become disastrous. I don&apos;t believe that PHP is fundamentally bad; given the right development environment, it&apos;s fine. It&apos;s just that what&apos;s regarded as standard in the Java and Ruby/Rails world, has been nonexistent, hard to use, or optional in the PHP realm.&lt;br /&gt;&lt;br /&gt;Anyway, both workshops are almost full now, just one or two places still available. No this is not marketing blah to just make you think it&apos;s popular ;-) If I say almost full, I do mean just that. I gave Jonathan a place for the Melbourne workshop, as it&apos;s his birthday coming up this Saturday (Unfortunately I can&apos;t make it to the party next week). Jonathan is a special friend to me and Open Query as we bounce around ideas and exchange interesting books. IVT also happened to be Open Query&apos;s first customer.&lt;br /&gt;&lt;br /&gt;Speaking of gifts, consider donating something for little Ivan Nikitin&apos;s operation: &lt;a href=&quot;http://www.mysql.com/about/help-ivan.html&quot;&gt;http://www.mysql.com/about/help-ivan.html&lt;/a&gt;. This is not another random sad chainletter, this is a real small smurf, son of a MySQL support engineer. Ivan and his parents have now already arrived in Germany for the tests and procedures that Ivan needs, however additional financial help is still very important.</description>
  <comments>http://arjen-lentz.livejournal.com/127111.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/126798.html</guid>
  <pubDate>Wed, 23 Jul 2008 01:54:55 GMT</pubDate>
  <title>MySQL and Drizzle</title>
  <link>http://arjen-lentz.livejournal.com/126798.html</link>
  <description>Today &lt;a href=&quot;http://krow.livejournal.com/602409.html&quot;&gt;Brian&lt;/a&gt; launched Drizzle, something he&apos;s been working on for a number of weeks now, together with some other Sun/MySQL people and quite a few active MySQL community members. I scribbled some quick info and my own perspective on &lt;a href=&quot;http://openquery.com.au/products/about-drizzle&quot;&gt;About Drizzle&lt;/a&gt;, with links to the various currently available resources.&lt;br /&gt;&lt;br /&gt;I think it&apos;s an interesting and worthwhile development, and I understand it has the okidoki from inside Sun; &lt;a href=&quot;http://monty-says.blogspot.com/2008/07/what-if.html&quot;&gt;Monty&lt;/a&gt; also noted this. We&apos;ll have to see how that goes though. It amounts to an internal fork, doesn&apos;t it... Drizzle is not directly a MySQL replacement, but it does kinda wipe the floor with MySQL&apos;s current development process, roadmap, licensing and business model. I do commend Sun on allowing a project such as this to exist within.&lt;br /&gt;&lt;br /&gt;If you&apos;re a coder, do get involved. Grab the bzr tree, read the FAQ, and get in with the refactoring effort. I&apos;ve been perusing the tree for a bit now, and having previous experience with the MySQL tree, I find it much easier to find things now that some of the fluff is gone. This should make other things easier as well... development and bug fixing, build process. It&apos;s a good exercise.</description>
  <comments>http://arjen-lentz.livejournal.com/126798.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/126673.html</guid>
  <pubDate>Mon, 21 Jul 2008 23:53:13 GMT</pubDate>
  <title>OQ Poll: which MySQL version do you use for development?</title>
  <link>http://arjen-lentz.livejournal.com/126673.html</link>
  <description>Related to my &lt;a href=&quot;http://arjen-lentz.livejournal.com/126316.html&quot;&gt;post earlier today&lt;/a&gt; about the use of MySQL 5.0 and the Open Query course on upgrading and new features... I thought it might be good to do a broader poll of the MySQL population and see what version people are using for development (not deployment) right now!&lt;br /&gt;&lt;br /&gt;Use this link to go directly to this OQ Poll page: &lt;a href=&quot;http://openquery.com.au/poll/dev08_mysqlversion&quot;&gt;Which MySQL version do you use for development?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Development is not quite the same as production. It can be good to use a newer version in development, as you have new features (and fewer old bugs ;-) at your disposal. Regardless of the release status of a version, by the time your application reaches production stage, you will be comfortable with that version so deploying on it will be  fine.&lt;br /&gt;&lt;br /&gt;Development is the ideal time for being progressive with choice of version, since at any other stage it can be risky or costly (in terms of QA). So, I&apos;m very curious whether developers are indeed being progressive in this respect.&lt;br /&gt;Please enter your vote! Thanks</description>
  <comments>http://arjen-lentz.livejournal.com/126673.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/126316.html</guid>
  <pubDate>Mon, 21 Jul 2008 22:26:45 GMT</pubDate>
  <title>Are you using MySQL 5.0 yet, or any of its features?</title>
  <link>http://arjen-lentz.livejournal.com/126316.html</link>
  <description>MySQL 5.1 is nearly GA (not debating that fun now ;-), MySQL 6.0 has interesting new magic such as Falcon and online backup. But I still have many clients that are on MySQL 4.0 or 4.1 both in production and development. Works fine, overall, but quite a few problems would be nonexistent if they were on 5.0, and by making use of some changed or new features various aspects could be faster.&lt;br /&gt;&lt;br /&gt;The Open Query &lt;a href=&quot;http://openquery.com.au/training/mysql_50_upgrade_advfeatures&quot;&gt;MySQL 5.0 Upgrade and Advanced Features&lt;/a&gt; course day is for this group of developers and DBAs, but also for users moving to MySQL and going straight for MySQL 5.0 (as they should, please don&apos;t *start* with earlier versions!).&lt;br /&gt;&lt;br /&gt;We delve into the differences and new features. This includes&lt;ul&gt;&lt;li&gt;Views &amp;mdash; did you know they&apos;re updatable, and have you considered using them for smart access control? (tables, columns, rows)&lt;li&gt;INFORMATION_SCHEMA &amp;mdash; users at my local MySQL group were initially not so excited about this, until I showed how it can be used to optimise your database! Several people have applied the techniques in their business deployments now, and reported excellent improvements.&lt;li&gt;Stored Procedures &amp;mdash; not wanting to shift all your app into the db, that&apos;s unwise; but you can use dynamic SQL and cursors (and infoschema) to perform some tasks more efficiently inside the server.&lt;br /&gt;&lt;li&gt;Stored Functions &amp;mdash; MySQL has lots of built-in functions, but sometimes you just really need one that&apos;s missing. You can build your own! UDFs are faster but require more effort and maintenance.&lt;br /&gt;&lt;li&gt;Making use of the fact that a VARCHAR can now be nearly 64k (in bytes, character length will depend on the character set) you can get rid of some text-type columns and thus reduce temp-disk-table usage (=speed).&lt;/ul&gt;MySQL 5.0 also fixes many bugs from the 4.x series; this is particularly relevant if you use features like replication. Even with MySQL 5.0&apos;s less-than-perfect track record, it&apos;s generally preferably over MySQL 4.1, and users can move from 4.0 straight to 5.0, provided some precautions are taken.&lt;br /&gt;&lt;br /&gt;The course day costs $575 + GST which includes a suitable lab environment (Windows or Ubuntu, or you can even bring your own laptop!), lunch and morning and afternoon tea, and a most enjoyable as well as educational day. Like all other Open Query modules you can just sign up for this one day, if you want. It&apos;s scheduled in various cities around Australia, and in Auckland New Zealand.</description>
  <comments>http://arjen-lentz.livejournal.com/126316.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/126199.html</guid>
  <pubDate>Mon, 21 Jul 2008 04:24:53 GMT</pubDate>
  <title>Never attribute to malice... MySQL Training in Australia</title>
  <link>http://arjen-lentz.livejournal.com/126199.html</link>
  <description>Sometimes you don&apos;t quite know what to think... last month MySQL (the company) had no courses in Australia listed in their schedule. They do a few courses a year, schedule them, and they disappear from the schedule when they&apos;re full - which, given one active MySQL salesperson since the start of the year, is happening.&lt;br /&gt;&lt;br /&gt;Anyway, all of a sudden there were some new ones in the schedule (that&apos;s ok, must publish some time) but they&apos;re fairly short notice (about one month, rather than 2-3 months ahead), and one is on a similar topic as one of the &lt;a href=&quot;http://openquery.com.au/training/&quot;&gt;Open Query courses&lt;/a&gt;, in a location that MySQL has not previously been to. And aside from the short notice, the state in question had its winter school holidays two weeks of the period between announcing and the course, so that makes the lead time even shorter.&lt;br /&gt;&lt;br /&gt;Now we know, &lt;em&gt;&quot;never attribute to malice what can easily be attributed to ignorance/stupidity.&quot;&lt;/em&gt; Shall we leave it at that? What do you think...&lt;br /&gt;&lt;br /&gt;But, I hear you ponder, MySQL does not actually have any trainers in Australia! That&apos;s right. Because MySQL does not wish to partner/contract Open Query for training courses (since I also do my own training materials/courses), they actually fly in a trainer from the US or Europe. As I understand it, they spent USD 5k earlier this year for flights from the US for a one-week training course. Not sure about the economics of that ;-)</description>
  <comments>http://arjen-lentz.livejournal.com/126199.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/125847.html</guid>
  <pubDate>Mon, 21 Jul 2008 02:18:37 GMT</pubDate>
  <title>site tracking phone spam</title>
  <link>http://arjen-lentz.livejournal.com/125847.html</link>
  <description>Good idea: &lt;a href=&quot;http://whocallsme.com/&quot;&gt;WhoCallsMe?&lt;/a&gt;. Tracks nuisance calls (globally), of course only if there&apos;s a CallerID. Check on the site if the number is already in the system, read the comments, add your own. Simple, but useful.</description>
  <comments>http://arjen-lentz.livejournal.com/125847.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/125603.html</guid>
  <pubDate>Mon, 21 Jul 2008 00:09:17 GMT</pubDate>
  <title>ulimit, taskset for mysqld</title>
  <link>http://arjen-lentz.livejournal.com/125603.html</link>
  <description>my.cnf can take the &lt;code&gt;open_files_limit=N&lt;/code&gt; option in the [mysqld_safe] block. This doesn&apos;t do anything to mysqld directly, instead the mysqld_safe script calls &lt;code&gt;ulimit -n &amp;lt;N&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;These days, we might want to limit mysqld to use a maximum of 4 cores (using taskset on Linux) so InnoDB performance doesn&apos;t degrade. Of course this is only relevant on machines with more than 4 cores (like boxes with 2 quadcore CPUs), but still, it&apos;s nice to not have to hack mysqld_safe for such changes, as it makes upgrades less fussy and keeps config info in the one place (my.cnf).&lt;br /&gt;&lt;br /&gt;Peter and I were discussing this, and I suggested two new options for mysqld_safe, one for pre-mysqld and one for post-mysqld commands that need to be run. Calling ulimit would be a pre-mysqld task, but taskset is post.&lt;br /&gt;The one thing is that taskset needs to be passed the PID, so we must provide a way to pass that through the config dynamically.&lt;br /&gt;&lt;br /&gt;We know that MySQL wants to get rid of mysqld_safe in favour of the Instance Manager, but that&apos;s been a long time and it hasn&apos;t happened yet.&lt;br /&gt;&lt;br /&gt;Thoughts/ideas welcome, before we make a patch for this.</description>
  <comments>http://arjen-lentz.livejournal.com/125603.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/125253.html</guid>
  <pubDate>Sun, 20 Jul 2008 23:13:54 GMT</pubDate>
  <title>Oracle Out - MySQL In?</title>
  <link>http://arjen-lentz.livejournal.com/125253.html</link>
  <description>Interesting &lt;a href=&quot;http://blogs.sun.com/jonathan/entry/solaris_on_wall_street_faster#comment-1215495490000&quot;&gt;comment&lt;/a&gt; spotted on Jonathan Schwartz&apos; blog:&lt;blockquote&gt;[...] I work for a major Fortune company, and we&apos;re in the process of putting Oracle on a &quot;sunset&quot; list of restricted vendors. No new applications are allowed on Oracle, the only approved vendors are Sun/MySQL and Microsoft/SQL Server. So I don&apos;t know how Sun did that, but if their objective was to provide competition for Oracle, it appears to have worked with my management...&lt;/blockquote&gt;I know that MySQL and Oracle happily co-exist in many companies, I often train highly skilled Oracle developers and DBAs about MySQL specifics.</description>
  <comments>http://arjen-lentz.livejournal.com/125253.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/125163.html</guid>
  <pubDate>Fri, 18 Jul 2008 00:03:17 GMT</pubDate>
  <title>Open Query training for MySQL in Canberra</title>
  <link>http://arjen-lentz.livejournal.com/125163.html</link>
  <description>Already &lt;a href=&quot;http://openquery.com.au/training/canberra&quot;&gt;scheduled&lt;/a&gt; for some time, but since it&apos;s a new location for MySQL training it&apos;s probably worth an extra mention. Ye that&apos;s right, MySQL itself has never held a training course in Canberra either (I know since I was the trainer ;-) except for some custom stuff. The DBA days are pretty soon but there are still some seats.&lt;ul&gt;&lt;strong&gt;MySQL DBAs&lt;/strong&gt;&lt;li&gt;Mon 4 Aug: &lt;a href=&quot;http://openquery.com.au/training/mysql_installation_security_user_management&quot; target=&quot;_blank&quot;&gt;MySQL Installation, Security and User Management&lt;/a&gt; ($475)&lt;br /&gt;&lt;li&gt;Tue 5 Aug: &lt;a href=&quot;http://openquery.com.au/training/mysql_backup_recovery&quot; target=&quot;_blank&quot;&gt;MySQL Backup and Recovery&lt;/a&gt; ($475)&lt;br /&gt;&lt;li&gt;Wed 6 Aug: &lt;strong&gt;&lt;a href=&quot;http://openquery.com.au/training/mysql_innodb_performance_tuning&quot; target=&quot;_blank&quot;&gt;MySQL InnoDB Performance Tuning&lt;/a&gt;&lt;/strong&gt; ($575)&lt;/ul&gt; You can pick individual days if you want. For the later courses/dates you can score a $50/person/day discount by booking early!&lt;ul&gt;&lt;strong&gt;MySQL HA&lt;/strong&gt; - Next upcoming in &lt;a href=&quot;http://openquery.com.au/training/melbourne&quot;&gt;Melbourne&lt;/a&gt; (October)&lt;/ul&gt;&lt;ul&gt;&lt;strong&gt;MySQL Developers&lt;/strong&gt;&lt;li&gt;Mon 10 Nov: &lt;strong&gt;&lt;a href=&quot;http://openquery.com.au/training/mysql_optdesign&quot; target=&quot;_blank&quot;&gt;MySQL Optimisation by Design&lt;/a&gt;&lt;/strong&gt; ($475)&lt;br /&gt;&lt;li&gt;Tue 11 Nov: &lt;a href=&quot;http://openquery.com.au/training/storage_engines&quot; target=&quot;_blank&quot;&gt;MySQL Storage Engine Optimisation&lt;/a&gt; ($475)&lt;br /&gt;&lt;li&gt;Wed 12 Nov: &lt;a href=&quot;http://openquery.com.au/training/mysql_50_upgrade_advfeatures&quot; target=&quot;_blank&quot;&gt;MySQL 5.0 Upgrade and Advanced Features&lt;/a&gt; ($575)&lt;/ul&gt;</description>
  <comments>http://arjen-lentz.livejournal.com/125163.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/124697.html</guid>
  <pubDate>Fri, 11 Jul 2008 04:13:11 GMT</pubDate>
  <title>India&apos;s SMS GupShup Has 3x The Usage Of Twitter And No Downtime</title>
  <link>http://arjen-lentz.livejournal.com/124697.html</link>
  <description>Just spotted this &lt;a href=&quot;http://anand.typepad.com/datawocky/2008/06/indias-sms-gupshup-has-3x-the-usage-of-twitter-and-no-downtime.html&quot;&gt;article&lt;/a&gt; by Anand Rajaraman about an Indian version of Twitter that uses mostly mobile SMS rather than web access, and is built on Java and MySQL. It handles many more users and messages than Twitter currently does, and seems to be doing ok.&lt;br /&gt;&lt;br /&gt;Anyway, have a read, the usual obvious architecture choices for scalable database apps are in there, but it&apos;s always good to read how people have actually applied these things and made something real work - serves better as an example for others... ;-)</description>
  <comments>http://arjen-lentz.livejournal.com/124697.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/124611.html</guid>
  <pubDate>Tue, 08 Jul 2008 00:00:28 GMT</pubDate>
  <title>One free OSCON 2008 ticket on offer!</title>
  <link>http://arjen-lentz.livejournal.com/124611.html</link>
  <description>Do you want to go to &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/content/home&quot;&gt;OSCON&lt;/a&gt; but can&apos;t afford the entrance fee? I can help. Being on the program committee, I receive a freebie ticket to hand out. Simply answer this question (provided by Brian): &lt;strong&gt;Where does name of the TINA storage engine come from, and which engine is it actually when used in MySQL?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Be sure to either login to Livejournal when you reply, or have some other way to identify yourself - an anonymous comment can&apos;t be contacted, and thus you wouldn&apos;t be able to win the prize...&lt;/em&gt;</description>
  <comments>http://arjen-lentz.livejournal.com/124611.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/124411.html</guid>
  <pubDate>Mon, 07 Jul 2008 23:38:41 GMT</pubDate>
  <title>Interview with MySQL&apos;s Marten Mickos in WSJ</title>
  <link>http://arjen-lentz.livejournal.com/124411.html</link>
  <description>Interesting interview with Marten Mickos in the &lt;a href=&quot;http://online.wsj.com/article/SB121494378874020445.html&quot;&gt;Wall Street Journal&lt;/a&gt; today. I think he describes the overall environment really well, although I don&apos;t quite agree that the innovation spirit is all through MySQL. That depends on where the people come from and their own interests, as well as the drivers of their department.&lt;br /&gt;&lt;br /&gt;Also, the number of developers is not really 12M. The 12M people could actually be a huge QA department, and used to be exactly that, but they aren&apos;t now. This because new code now goes into the Enterprise branch, and first gets tested by the few thousand Enterprise customers, before being let loose on the wider community (the 12M). I&apos;m sure the Enterprise customers are really pleased about this (ask &lt;a href=&quot;http://mysqlha.blogspot.com/&quot;&gt;Mark Callaghan&lt;/a&gt;)... it&apos;s completely upside down. AKA utterly borked.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Thanks to James McPherson for that link.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;On the note of business models, see this: &lt;a href=&quot;http://blogs.zdnet.com/open-source/?p=2623&amp;amp;tag=nl.e550&quot;&gt;What could Open Office do with a business model?&lt;/a&gt;.</description>
  <comments>http://arjen-lentz.livejournal.com/124411.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/124004.html</guid>
  <pubDate>Mon, 07 Jul 2008 23:11:29 GMT</pubDate>
  <title>Sakila the Tequila Dolphin?</title>
  <link>http://arjen-lentz.livejournal.com/124004.html</link>
  <description>A few years back, MySQL (the company) has let its trademark application on the name Sakila expire. As you may (or may not) remember, around 2002 there was a grand naming competition for the new logo dolphin, and Sakila name won, over other interesting names like Finn, and corny blah like Flipper (I know this because I was the person wading through the spreadsheet with all the submissions, extracting a shortlist for Monty and David).&lt;br /&gt;&lt;em&gt;(By the way, MySQL docs team lead Stefan Hinz named his son Finn. I don&apos;t know if there&apos;s a connection ;-)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Anyway, a bit later but still a few years ago already, the name Sakila was registered by the Jose Cuervo company, of global tequila fame. You can easily see this at uspto.gov.&lt;br /&gt;So, I&apos;m just curious does anyone know of a Cuervo product that uses that name now, or is it a dormant trademark? Is there a relevance to the name sakila in Mexican Spanish? The name originates in Africa.... if there&apos;s no Mexican connection, chances are there&apos;s a MySQL fan in the Cuervo company!</description>
  <comments>http://arjen-lentz.livejournal.com/124004.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/123650.html</guid>
  <pubDate>Mon, 07 Jul 2008 12:46:06 GMT</pubDate>
  <title>Two 5.0 bugs in a day</title>
  <link>http://arjen-lentz.livejournal.com/123650.html</link>
  <description>I filed these two MySQL bugs today:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://bugs.mysql.com/37910&quot;&gt;Bug#37910&lt;/a&gt; Dropping unrelated index fails if fk on first col&lt;br /&gt;&lt;a href=&quot;http://bugs.mysql.com/37925&quot;&gt;Bug#37925&lt;/a&gt; Select with comma join pretends a column does not exist&lt;br /&gt;&lt;br /&gt;They originate with clients, and occur on recent 5.0 versions. No fatal stuff, but annoying. Both are of the fairly awkward variety and I&apos;m curious why they still exist so late in the 5.0 series.&lt;br /&gt;&lt;br /&gt;For instance, the second one looks like a parser bug, and I&apos;d have figured someone tripping over this ages ago. It&apos;s actually a regression as it worked fine in 4.x, the testcase is directly from an app that was in production on a 4.x server, then upgraded to 5.0. Kaboom on this. Quite unexpected, and very annoying as going through the entire app changing the join syntax is a bit of a pest for the developers.&lt;br /&gt;&lt;br /&gt;(update on this below, with assistance from Mark Leith - thanks Mark!):&lt;br /&gt;&lt;br /&gt;Being aware of&lt;br /&gt; - &lt;a href=&quot;http://bugs.mysql.com/13551&quot;&gt;http://bugs.mysql.com/13551&lt;/a&gt;&lt;br /&gt; - &lt;a href=&quot;http://bugs.mysql.com/14817&quot;&gt;http://bugs.mysql.com/14817&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and the information from the Docs (&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/join.html&quot;&gt;http://dev.mysql.com/doc/refman/5.0/en/join.html&lt;/a&gt;):&lt;blockquote&gt;&apos;However, the precedence of the comma operator is less than of INNER JOIN, CROSS JOIN, LEFT JOIN, and so on. If you mix comma joins with the other join types when there is a join condition, an error of the form Unknown column &apos;col_name&apos; in &apos;on clause&apos; may occur. Information about dealing with this problem is given later in this section.&apos;&lt;br /&gt;[...]&lt;br /&gt;&apos;Previously, the comma operator (,) and JOIN both had the same precedence, so the join expression t1, t2 JOIN t3 was interpreted as ((t1, t2) JOIN t3). Now JOIN has higher precedence, so the expression is interpreted as (t1, (t2 JOIN t3)). This change affects statements that use an ON clause, because that clause can refer only to columns in the operands of the join, and the change in precedence changes interpretation of what those operands are.&apos;&lt;/blockquote&gt;That still leaves us with a unclear error reporting. Technically it may be correct based&lt;br /&gt;on parser internals, but users should not need to care about such black magic.</description>
  <comments>http://arjen-lentz.livejournal.com/123650.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/123605.html</guid>
  <pubDate>Mon, 07 Jul 2008 09:56:49 GMT</pubDate>
  <title>Abuse of LEFT JOIN</title>
  <link>http://arjen-lentz.livejournal.com/123605.html</link>
  <description>I teach the exact differences and use of the different join types and keywords in my courses (specifically the &lt;a href=&quot;http://openquery.com.au/training/mysql_optdesign&quot;&gt;Optimisation by Design&lt;/a&gt; day). A few tidbits:&lt;ul&gt;&lt;li&gt;Left and right joins are outer joins.&lt;/li&gt;&lt;li&gt;A,B is an inner join (equivalent to a cross join if you don&apos;t have a join condition).&lt;/li&gt;&lt;/ul&gt;But the point of this post... when looking at apps, I often see LEFT JOINs abused. That is, the query does not actually require a left join. The result might be ok, but that entirely depends on the data contained in the tables; no guarantee.&lt;br /&gt;&lt;br /&gt;Apart from understanding joins, I&apos;ve found that there&apos;s a very simple but effective test for whether or not to use a left join.... &lt;em&gt;&quot;if you can&apos;t think of a specific reason, you don&apos;t&quot;&lt;/em&gt; ;-)</description>
  <comments>http://arjen-lentz.livejournal.com/123605.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/123383.html</guid>
  <pubDate>Thu, 03 Jul 2008 11:36:22 GMT</pubDate>
  <title>FORCE INDEX</title>
  <link>http://arjen-lentz.livejournal.com/123383.html</link>
  <description>&lt;pre&gt;&lt;code&gt;SELECT ... FROM
tblProduct as prd FORCE INDEX(vProductName,iCategoryId,eProductType,vProductImage,fPrice,eProductStatus,dProductDateAdded)
LEFT OUTER JOIN (SELECT bidjoin.* FROM tblProduct as prdjoin, tblBid as bidjoin WHERE bidjoin.iProductId = prdjoin.iProductId) bid ON prd.iProductId = bid.iProductId
, tblCategory as cat FORCE INDEX(vCategoryName,eCategoryStatus,dCategoryDateAdded) 
, tblAuctionProduct as aucprd FORCE INDEX(iRequiredBids,iProductId,eAuctionType,iFreeBidLevel,fAdminFee,dDateClosed)
, tblPurchaseProduct as purprd FORCE INDEX(dProductCloseDate,iProductId,iTotalInventory,dLastUpdated)&lt;/code&gt;&lt;/pre&gt;I know, unreadable. But the main issue today is the FORCE INDEX. This is just one query (real, with permission - I just adjusted some identifiers) from an app that is litterally full of queries using FORCE INDEX. So what does FORCE INDEX do? It forces the MySQL optimiser to use the specified index (or choose from one of the specified, if multiple), even if it reckons it&apos;s not the best choice. Likewise there&apos;s an IGNORE INDEX modifier that denies the optimiser the choice for using a specified index in a particular query.&lt;br /&gt;&lt;br /&gt;I generally hold that these modifiers should only be used for testing things and tracking down optimiser issues (not that common these days, but 3.23 had plenty that 4.0 fixed). This because when you hardcode them into an app, perhaps fixing a real problem you see *now*, your data will still change over time and so the optimiser needs the freedom to change its choices too. It might be ok for a week, a month, or even a year, but at some point it&apos;s going to cost.&lt;br /&gt;&lt;br /&gt;The above query takes about 5 times as long compared to the same query without the FORCE modifiers. Considering the app is chockers with it, I&apos;m guessing that it might have been coded by someone who didn&apos;t know that MySQL actually has an optimiser at all. Who can say... anyway it serves here as an extreme example.&lt;br /&gt;&lt;br /&gt;The take-away message is: use these modifiers with care, and be very hesitant ever adding it to production code. There&apos;s generally always a better way to resolve whatever problem you might be observing.</description>
  <comments>http://arjen-lentz.livejournal.com/123383.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/122977.html</guid>
  <pubDate>Tue, 01 Jul 2008 00:47:45 GMT</pubDate>
  <title>OSS-based appliances: Cybersource/datasafe</title>
  <link>http://arjen-lentz.livejournal.com/122977.html</link>
  <description>I&apos;m pretty happy with my 1TB Apple Time Capsule. Bought it while at the MySQL Conf in April, and it does the right thing for my situation.&lt;br /&gt;&lt;br /&gt;Con Zymaris and his crowd at Cybersource in Melbourne made something like this ages ago, aimed at small businesses: &lt;a href=&quot;http://cybersource.com.au/product/datasafe/&quot;&gt;Cybersource/DATASAFE&lt;/a&gt;. That&apos;s a pretty neat solution, and an excellent example of how an OSS-based solution can be deployed in a business, regardless of what other technologies might already exist on the premises. The box will work just fine in a Windows environment.&lt;br /&gt;&lt;br /&gt;Always focus on the solution (and what practical needs it solves for the client), not the technology (or the philosophy) - with a happy customer, you&apos;ll get plenty of opportunity (over time) to discuss what OSS is really about, and you&apos;re likely to find a very willing ear at that point.</description>
  <comments>http://arjen-lentz.livejournal.com/122977.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/122792.html</guid>
  <pubDate>Mon, 30 Jun 2008 23:36:43 GMT</pubDate>
  <title>Training schedule readability</title>
  <link>http://arjen-lentz.livejournal.com/122792.html</link>
  <description>A tricky meta-question. I&apos;ve been experimenting with ways to display an overview of training days (or days grouped by audience/topics, like Developers or DBAs), locations, and schedule.&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Product&lt;/th&gt;
&lt;th&gt;Audience&lt;/th&gt;
&lt;th&gt;&lt;a href=&quot;http://openquery.com.au/training/brisbane&quot;&gt;BNE&lt;/a&gt;&lt;/th&gt;&lt;th&gt;&lt;a href=&quot;http://openquery.com.au/training/sydney&quot;&gt;SYD&lt;/a&gt;&lt;/th&gt;&lt;th&gt;&lt;a href=&quot;http://openquery.com.au/training/canberra&quot;&gt;CBR&lt;/a&gt;&lt;/th&gt;&lt;th&gt;&lt;a href=&quot;http://openquery.com.au/training/melbourne&quot;&gt;MEL&lt;/a&gt;&lt;/th&gt;&lt;th&gt;&lt;a href=&quot;http://openquery.com.au/training/adelaide&quot;&gt;ADL&lt;/a&gt;&lt;/th&gt;&lt;th&gt;&lt;a href=&quot;http://openquery.com.au/training/auckland&quot;&gt;AKL&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;MySQL&lt;/td&gt;
&lt;td&gt;Dev&lt;/td&gt;
&lt;td&gt;Sep&lt;/td&gt;&lt;td&gt;Aug&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Sep&lt;/td&gt;&lt;td&gt;Aug&lt;/td&gt;&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;MySQL&lt;/td&gt;
&lt;td&gt;DBA&lt;/td&gt;
&lt;td&gt;Sep&lt;/td&gt;&lt;td&gt;Jul&lt;/td&gt;&lt;td&gt;Aug&lt;/td&gt;&lt;td&gt;Aug&lt;/td&gt;&lt;td&gt;Aug&lt;/td&gt;&lt;td&gt;Jul&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;MySQL&lt;/td&gt;
&lt;td&gt;HA&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;td&gt;Aug&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;DBA&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;td&gt;Jul&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Jul&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;PHP QA&lt;/td&gt;
&lt;td&gt;Dev&lt;/td&gt;
&lt;td&gt;Aug&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Aug&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;With the number of locations I have now, it&apos;s easy to run out of space horizontally. And vertically can&apos;t make the list too long either, otherwise the nice simple overview is lost. It&apos;s a difficult problem and I haven&apos;t fully resolved it. Displaying the locations vertically and the topics horizontally doesn&apos;t seem to work either. Different pages on the &lt;a href=&quot;http://openquery.com.au/&quot;&gt;Open Query&lt;/a&gt; web site now display things differently depending on context, and I hope to learn more from that experiment. The above is an example of this. Compact, but I&apos;m not sure it conveys sufficient information. Within each group, people are able to sign up for individual course days. It&apos;s work in progress I suppose. Suggestions welcome!</description>
  <comments>http://arjen-lentz.livejournal.com/122792.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/122399.html</guid>
  <pubDate>Mon, 30 Jun 2008 02:47:37 GMT</pubDate>
  <title>Finding useless indexes</title>
  <link>http://arjen-lentz.livejournal.com/122399.html</link>
  <description>I&apos;ll say beforehand that the following is not very clean - for a number of reasons. I&apos;ll discuss some issues after the query. The query returns all indexes in a db where the cardinality is lower than 30% of the rows, thus making it unlikely that the server will ever use that index.&lt;pre&gt;
SELECT s.table_name,
       concat(s.index_name,&apos;(&apos;,group_concat(s.column_name order by s.seq_in_index),&apos;)&apos;) as idx,
       GROUP_CONCAT(s.cardinality ORDER BY s.seq_in_index) AS card,
       t.table_rows
  FROM information_schema.tables t
  JOIN information_schema.statistics s USING (table_schema,table_name)
 WHERE t.table_schema=&apos;dbname&apos;
   AND t.table_rows &amp;gt; 1000
   AND s.non_unique
 GROUP BY s.table_name,s.index_name
HAVING (card + 0) &amp;lt; (t.table_rows / 3);
&lt;/pre&gt;Let&apos;s discuss...&lt;br /&gt;The number of rows in a table used here will be accurate for MyISAM; for InnoDB it&apos;s essentiall a rough guess.&lt;br /&gt;Cardinality in this context is the number of distinct values in a column. This statistic needs to be updated using ANALYZE TABLE, otherwise it might either not be available or just outdated.&lt;br /&gt;Since there can be composite indexes (index on a,b or more columns, rather than just one column), the cardinality is per column and in the output we show this comma-separated; of course for anything but the first, it&apos;s relative to the previous columns. The HAVING clause just ends up using the cardinality of the first column, which statistically is not really correct. If someone has a bright idea on how to grab or calculate a sensible cardinality figure for composite indexes, please do comment.&lt;br /&gt;And yes, some selected columns (like t.table_rows) fall outside the grouping, however they remain the same so that&apos;s &quot;ok&quot; for this quick hack and MySQL allows this unless you have sql_mode=ONLY_FULL_GROUP_BY enabled.&lt;br /&gt;&lt;br /&gt;The fact that the calculated  cardinality figure (for composite indexes) is dodgy may not actually be relevant for the purpose of this query. The point of the query is that generally, the server will not use an index if it needs to look at &amp;gt;30% of the rows anyway. That&apos;s not *actually* how it works inside the server (as Peter Zaitsev can explain in great detail ;-) but as an easy rule-of-thumb it&apos;s close enough to reality. That&apos;s not the whole story, because if all the columns referenced in a query are in the index you have a so-called covering index, and the server knows that scanning an index is quicker than scanning the table. So in that case, an index might still make sense, but this query can&apos;t know about that case.&lt;br /&gt;Also, for very small tables, the server will prefer a table scan anyway; to weed out the worst of this, only tables with &amp;gt;1000 rows are shown in the output. Again, a rather crude filter with plenty of flaws. But again, it may suffice for this purpose.&lt;br /&gt;&lt;br /&gt;Normally, what you&apos;d do is pick out the obvious indexes on yes/no, male/female, active/deleted style columns. They&apos;re easy to spot. But if you run the above query, much more may show up. Do unused indexes hurt? Well, they slow down INSERT/UPDATE/DELETE and ALTER TABLE statements. So this query can be useful as a rough filter, then human brains can be used to decide which indexes to keep and which ones to get rid of.</description>
  <comments>http://arjen-lentz.livejournal.com/122399.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/122134.html</guid>
  <pubDate>Fri, 27 Jun 2008 05:13:55 GMT</pubDate>
  <title>mysql cmdline tricks: output control (\G, pager, tee)</title>
  <link>http://arjen-lentz.livejournal.com/122134.html</link>
  <description>Compared to SQL*Plus (Oracle&apos;s cmdline client) which can as I understand produce complete paginated reports, the &apos;mysql&apos; tool has fairly simple output formatting. I&apos;m not generally fussed about that, as there are perfectly good other tools do make snazzy reports with. Some very cross platform (like web based), output PDF, not a problem. You can even write your own quickly these days.&lt;br /&gt;&lt;br /&gt;But the cmdline tool has its use. I always teach my students the basics of it, and insist that some exercises are done using this tool. Familiarity (which involves some practice) helps there. Why? If all else fails, you generally do have mysql available on a machine. It&apos;s not hindered by remote ssh logins, or anything else. And, of course, for quickly checking something. And that&apos;s where the proficiency helps again. So, normally, you get this type of ASCII table:&lt;pre&gt;mysql&amp;gt; select &quot;Hello, world!&quot; AS foo;
 --------------- 
| foo           |
 --------------- 
| Hello, world! | 
 --------------- &lt;/pre&gt;which is nice. But for some commands, this type of formatting would make the output unreadable. Key examples are SHOW CREATE TABLE, SHOW CREATE TRIGGER, and SHOW WARNINGS (particularly after EXPLAIN). Now check this out:&lt;pre&gt;mysql&amp;gt; select &quot;Hello, world!&quot; AS foo \G
*************************** 1. row ***************************
foo: Hello, world!&lt;/pre&gt;If, instead of a semicolon you specify \G, the output is formatted vertically. A separator line above each row, and then each column prefixed by its name/alias followed by the value of that column within the row. It&apos;s much more readable for cases where you get a one-row result set with only a few columns, at least one of which might be longer than the width of your console.&lt;br /&gt;&lt;br /&gt;The above also teaches us another lesson: the semicolon is not actually part of the SQL command. It&apos;s merely a delimiter that tells the client code to send the query to the server. If you&apos;re in a programming or scripting language using the MySQL API, you wouldn&apos;t include it in the query string.&lt;br /&gt;&lt;br /&gt;A related trick is to use the &quot;pager&quot; command. If you specify &lt;code&gt;pager less&lt;/code&gt; on the mysql command prompt, the output will thereafter be run through less. So then you can scroll through a larger result set, search it, etc. (see &lt;code&gt;man less&lt;/code&gt;).&lt;br /&gt;&lt;br /&gt;Final one for this post, there&apos;s &quot;tee&quot;. This command followed by a filename (or program/pipe!) lets you log everything you do, queries (what you type) as well as output. Very handy, particularly during training and testing, or when you need to make a bugreport or support request.</description>
  <comments>http://arjen-lentz.livejournal.com/122134.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/122054.html</guid>
  <pubDate>Fri, 27 Jun 2008 01:26:54 GMT</pubDate>
  <title>Website usability vs performance - Measly Mouse revisited</title>
  <link>http://arjen-lentz.livejournal.com/122054.html</link>
  <description>Peter Zaitsev wrote an interesting item on &lt;a href=&quot;http://www.mysqlperformanceblog.com/2008/06/26/web-site-optimization-frontend-and-backend/&quot;&gt;front-end performance&lt;/a&gt; of a website.&lt;br /&gt;&lt;br /&gt;I&apos;ve always tried to look at the front-end from the user perspective, rather than purely technical. Once you weed out what&apos;s not really necessary for the user, and also deal with issues like &quot;how important is it that this number is live&quot;, you generally look at a fairly different site already ;-)&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.bitbike.com/measly/&quot;&gt;&lt;img src=&quot;http://www.bitbike.com/measly/measly.jpg&quot; alt=&quot;Measly Mouse&quot; border=&quot;0&quot; align=&quot;left&quot; border=&quot;0&quot; style=&quot;margin-right=5px; margin-bottom=5px;&quot; /&gt;&lt;/a&gt;Before my time at MySQL, I wrote a little gizmo called &lt;a href=&quot;http://www.bitbike.com/measly/&quot;&gt;Measly Mouse&lt;/a&gt; which leads a modest but still active life. &lt;em&gt;When reading on from here, please remember it was designed in 2001 and hasn&apos;t really been changed since.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Measly Mouse retrieves a page and deals with redirects, CSS and other includes like images, and tries to apply some basic metric to see how sensible the page is. Basic usability testing shows that people cannot choose between more than about 7 or so items. So you can imagine how the brain desperately fails to deal with most websites (website creators often feel everything is so important it must be on the front page), or through training filters out most things than don&apos;t relate directly to what the person is looking for. The other key factor is size. The bigger the page, and the more includes, the longer it takes. That&apos;s annoying. So the Measly scoring formula is as follows: &lt;strong&gt;BYTES + ((REQUESTS + LINKS) * 1024)&lt;/strong&gt; where:&lt;ul&gt;&lt;li&gt;BYTES - is the total page content including stylesheets, images, etc;&lt;br /&gt;&lt;li&gt;REQUESTS - is the total number of requests required (including redirects) to get all page content;&lt;br /&gt;&lt;li&gt;LINKS - is the total number of clickable items on the page, including forms fields.&lt;/ul&gt;Naturally all pages have some includes and some links, it&apos;s just a matter of finding balance to keep the site usable. Some sites use so many redirects.... nutty.&lt;br /&gt;&lt;br /&gt;At the time there was quite a lot of debate on the simple methodology and the owners of some sites got pretty upset when someone ran their front page through Measly and it ended up in the top 10 ;-)&lt;br /&gt;I still reckon the concept has merit though... please do make your own judgement and feel free to comment.&lt;br /&gt;You may find some aggregating (like mailing list archive) sites in the top 10... I personally take those entries less serious, because they&apos;re generally focused on a niche (geek) group which does not conform to a general user profile. Still, it&apos;s quite possible their user interface could be improved!&lt;br /&gt;&lt;br /&gt;As to how the tool works... it actually parses the pages in PHP using regexes (again remember the time it was built). Although it still works reasonably well, could be vastly improved now and catch more of a modern page.&lt;br /&gt;But what would be really great, is if someone would care turn Measly Mouse into a Firefox plugin. Inside Firefox you have clean access to a page, so the analysis becomes extremely easy. For any page, the plugin could calculate the Measly Mouse (MM?) score, and perhaps optionally submit it to a central location. Who would like to pick this up?</description>
  <comments>http://arjen-lentz.livejournal.com/122054.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/121830.html</guid>
  <pubDate>Fri, 27 Jun 2008 00:18:10 GMT</pubDate>
  <title>Some impressive hw hacking of Eee PC</title>
  <link>http://arjen-lentz.livejournal.com/121830.html</link>
  <description>This fellow is pretty amazing: &lt;a href=&quot;http://beta.ivancover.com/wiki/index.php/Eee_PC_Internal_Upgrades&quot;&gt;http://beta.ivancover.com/wiki/index.php/Eee_PC_Internal_Upgrades&lt;/a&gt;. To the already tiny Eee PC, he added (internally!):&lt;ol&gt;&lt;li&gt;USB hub&lt;br /&gt;&lt;li&gt;GPS with antenna&lt;br /&gt;&lt;li&gt;Bluetooth&lt;br /&gt;&lt;li&gt;Card reader w/ additioal SSD&lt;br /&gt;&lt;li&gt;Power switch (10 dip) for switching all extra foo on/off&lt;br /&gt;&lt;li&gt;Wifi upgrade 802.11n&lt;br /&gt;&lt;li&gt;FM transmitter&lt;br /&gt;&lt;li&gt;Modem (admittedly there&apos;s design space for that)&lt;br /&gt;&lt;li&gt;Touch screen&lt;br /&gt;&lt;li&gt;Temperature sensor&lt;br /&gt;&lt;li&gt;Heatsink&lt;br /&gt;&lt;/ol&gt;That&apos;s pretty cool...</description>
  <comments>http://arjen-lentz.livejournal.com/121830.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/121591.html</guid>
  <pubDate>Thu, 26 Jun 2008 02:05:31 GMT</pubDate>
  <title>Got my copy! High Performance MySQL (2nd edition)</title>
  <link>http://arjen-lentz.livejournal.com/121591.html</link>
  <description>&lt;p&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0596101716?ie=UTF8&amp;amp;tag=lentzinternet-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596101716&quot;&gt;&lt;img src=&quot;http://ecx.images-amazon.com/images/I/51SBfDVIv4L._SL500_AA240_.jpg&quot; border=&quot;0&quot; align=&quot;left&quot; border=&quot;0&quot; style=&quot;margin-right=5px; margin-bottom=5px;&quot; /&gt;&lt;/a&gt;Grand, I got my personal copy from the courier today!&lt;br /&gt;Many people kept asking me over recent months &quot;when is it coming, when can I get it&quot;... so now you can. Officially out, and available.&lt;br /&gt;&lt;br /&gt;Click on the book pic if you want to grab your copy via Amazon (which is probably one of the cheapest sources, even if you&apos;re overseas).&lt;br /&gt;&lt;br /&gt;I&apos;m also looking at acquiring a bundle of them through the author arrangement with O&apos;Reilly, to give away to &lt;a href=&quot;http://openquery.com.au/training/&quot;&gt;Open Query training&lt;/a&gt; students - well, for the courses related to MySQL at least ;-)&lt;br /&gt;&lt;/p&gt;</description>
  <comments>http://arjen-lentz.livejournal.com/121591.html</comments>
  <lj:security>public</lj:security>
</item>
<item>
  <guid isPermaLink='true'>http://arjen-lentz.livejournal.com/121093.html</guid>
  <pubDate>Sat, 21 Jun 2008 05:01:47 GMT</pubDate>
  <title>The grey art of eBay - the feedback process borked</title>
  <link>http://arjen-lentz.livejournal.com/121093.html</link>
  <description>Since a few months, sellers can no longer provide neutral or negative feedback to buyers. Not sure if I completely agree with this as I reckon buyers can be quite dodgy and how else to capture that. But the objective was to weed out retaliatory feedback. I.e. buyer has a bad experience, provides neutral or negative feedback, and in return for his honesty gets back similar feedback. So that&apos;s no longer possible. I suppose that&apos;s good.&lt;br /&gt;&lt;br /&gt;I actually had such an experience at the beginning of the year, before the new policy. That one (in this case neutral) retaliatory feedback seriously impacts my rating to just over 90%. Not much of an issue as a buyer, but if I want to sell something, potential buyers might regard me as dodgy just on the basis of that number. Of course they could delve into the exact feedback comment and figure out what&apos;s been going on to some degree, but who bothers with such detail while browsing eBay for goodies?&lt;br /&gt;&lt;br /&gt;The formula for the rating is positive / (positive+neutral+negative), and all that limited to the last 12 months. Let&apos;s take my simple case where I get one neutral. For 11 transactions over the last year, you get 10/(10+1) = 90%. Ok so I don&apos;t buy stuff on eBay all the time. Most people don&apos;t. But let&apos;s double the number of transactions and see how the formula works out: 20/(20+1) = 95%. Still not good for seller karma. Anyway, you get the picture; this kind of thing is damaging, and you&apos;d really have to go on a buying spree to make up for it. With different buyers or on different weeks, otherwise it&apos;s counted as a duplicate and disregarded. And heaven beware if any of the many different sellers also decides to give you a neutral rating!&lt;br /&gt;&lt;br /&gt;Ok ok, so the new eBay policy prevents this exact scenario from occurring again. But consider the mechanism if you&apos;re a seller. Buyers *will* provide you with feedback, and using the same formula a single malicious buyer can destroy your reputation. You suddenly have to sell a lot more to make up for it, except you may not be able to, because of your rating! In a nutshell, unless you&apos;re a powerseller moving dozens of items a month, you&apos;re pretty much an open target. If you, like I, sell the odd item once in a while, you don&apos;t have a chance.&lt;br /&gt;&lt;br /&gt;But hang on, isn&apos;t there a policy that allows you to get feedback removed? Yes, but only in very specific cases. For this, the comment would have to be defamatory, referencing an unrelated item/transaction, a policy file number, a URL or other contact details, stuff like that. Also, a clearly negative comment on a positive rating qualifies. But not the other way round.&lt;br /&gt;So, the loophole is a gaping one, and that is: you just scribble something nonsensical or at least meaningless; that way it won&apos;t qualify for removal. So you can just give a seller a neutral (just as damaging as negative, as far as the formula is concerned!) with a comment of &quot;blah de blah&quot; and that does the trick.&lt;br /&gt;&lt;br /&gt;Someone please tell me that I went wrong with my logic - and where!</description>
  <comments>http://arjen-lentz.livejournal.com/121093.html</comments>
  <lj:security>public</lj:security>
</item>
</channel>
</rss>
