<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-464973908851456442</atom:id><lastBuildDate>Mon, 06 May 2013 05:18:38 +0000</lastBuildDate><category>quote</category><category>link</category><category>gearman gearmand opensource</category><category>mysql hpcloud</category><category>drizzle</category><category>photo</category><category>regular</category><category>mysql</category><category>mysql drizzle skysql percona</category><category>drizzle mysql jenkins hudson</category><title>Brian "Krow" Aker's Idle Thoughts</title><description /><link>http://blog.krow.net/</link><managingEditor>noreply@blogger.com (Brian Aker)</managingEditor><generator>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/brianaker" /><feedburner:info uri="brianaker" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-907760086913529684</guid><pubDate>Tue, 12 Mar 2013 08:28:00 +0000</pubDate><atom:updated>2013-03-12T20:03:58.667-07:00</atom:updated><title>MySQL vs NoSQL vs Postgres vs SQL Server, Cage Match</title><description>Tonight I went to compare the usual suspects for a set of slides I was doing and thought I would share the results.

&amp;nbsp;&lt;script src="//www.google.com/trends/embed.js?hl=en-US&amp;amp;q=nosql,+postgres,+mysql,+sql+server&amp;amp;cmpt=q&amp;amp;content=1&amp;amp;cid=TIMESERIES_GRAPH_0&amp;amp;export=5&amp;amp;w=500&amp;amp;h=330" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
I do not believe anyone should be surprised by the results. MySQL became less interesting once it was acquired, and the number of Postgres deployments is greater than what all of the NoSQL market combined adds up to. When looking at emerging technologies, press time given to a single software product has no relation to what its actual market share is (which isn't as obvious as one might think to everyone).

&lt;br /&gt;
&lt;br /&gt;
When I get asked what my current opinion about NoSQL vs SQL is, I say that I continue to see NoSQL as a spotlight highlighting the failures in the design of the current relational database software vendors(*). Which should not damn the concept of the relational database, but somehow it happens anyways. 

&lt;br /&gt;
&lt;br /&gt;
The two biggest issues that stand out to me are that current leading relational databases never solved scale out very well, and online operations are too expensive.

&lt;br /&gt;
&lt;br /&gt;
Would a document model really matter if schemas could be altered online? You would still have the weak vs strongly typed arguments that can exist in schema/table design, but if the operation to add additional characteristics to a table (object) was online or automatic I believe a lot of the arguments you see for schema less design would go away.

&lt;br /&gt;
&lt;br /&gt;
The other giant failure was that the vendors didn't approach scale out as a strong requirement for future designs. Going back a few years you can see where the vendors would talk about shared nothing designs, but only in the scope of support handful of nodes in a cluster. A hundred or so at best, which is small potatoes for where some of the NoSQL vendors who focus on scale out shoot for.

&lt;br /&gt;
&lt;br /&gt;
Its funny to think about how much has been written on this topic that has focused on the SQL language, when no new language has emerged from the NoSQL market that has any size-able adoption. At this point most of the NoSQL vendors now talk about how they have, or are, adding a SQL interface to their products.&lt;br /&gt;
&lt;br /&gt;
The innovation hasn't been in the language, but in the design of database engines themselves. 

&lt;br /&gt;
&lt;br /&gt;
The other bit of humor in this, is that if you take apart how most of the major vendors have implemented their storage engines, you would find that in the inner design few are strongly typed, and few track relationships in the core of their design. Most of the major vendors could do more operational changes online if they were willing to put reasonable scoping on what can be altered. The Innodb row format is inflexible, but the addition of some version information and a catalog documenting the versions would fix that.&lt;br /&gt;
&lt;br /&gt;
To sum this up, the need to preserve backwards compatibility is what has kept the relational database vendors from solving the needs that caused the NoSQL solutions to come to market. I don't see any of them tackling this anytime soon; the margins on their current products doesn't dictate the need for them to do this.&lt;br /&gt;
&lt;br /&gt;
A final thought about the state of the current nosql databases.&lt;br /&gt;
&lt;br /&gt;
One of the "hard things" that almost(?) none of the current NoSQL vendors has tackled is the JOIN, i.e. the fundamental feature which is required to do anything beyond simple key/pair or basic search. Join optimizers are hard to write(*). &amp;nbsp;Network aware join optimizers are particularly difficult to write mainly because direct attached storage, AKA a hard drive, is a lot more reliable on a second to second basis than the network.&lt;br /&gt;
&lt;br /&gt;
*) I also get asked which one I would pick if I had to pick one. Currently I suggest Cassandra, though more often then not a table with a key and a blob would work as well.

&lt;br /&gt;
&lt;br /&gt;
*) One of the nice things about MySQL's design was that someone designing a new engine could focus on the datastore and punt on the rest (well, sort of,... the pluggable storage engine interface never matured to the point of really playing nicely with other people's designs).&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/4udPmALEs_w" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/4udPmALEs_w/mysql-vs-nosql-vs-postgres-vs-sql.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>7</thr:total><feedburner:origLink>http://blog.krow.net/2013/03/mysql-vs-nosql-vs-postgres-vs-sql.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-6179527856134246626</guid><pubDate>Fri, 01 Mar 2013 04:23:00 +0000</pubDate><atom:updated>2013-02-28T20:33:04.560-08:00</atom:updated><title>Pioneer 1021 / 1121, Airplay, You suck</title><description>After a year of owning both a Pioneer VSX-1021 and a VSX-1121, I would never ever buy Pioneer equipment again.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The Airplay software on the Pioneer crashes a lot. When it doesn't crash, it plays music out of sync with other Apple airplay devices.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The HMG server? Who let that ship? Did they look up from their Atari 2600 for more then a few seconds before saying "Menus! What sort of crazy new concepts for an interface will you think of next? Ship it!"&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Their support for their iPad and iPhone application has been non-existant.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
On the other hand, the Pioneer sounds better then my 20 year old Onkyo amp (I think).&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Someday, someone, is going to build a modern amplifier right.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I really doubt it will be Pioneer.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/U2CVNMuMH7I" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/U2CVNMuMH7I/pioneer-airplay-1021-or-1121-you-suck.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2013/02/pioneer-airplay-1021-or-1121-you-suck.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-9194288740212439272</guid><pubDate>Fri, 22 Feb 2013 09:11:00 +0000</pubDate><atom:updated>2013-02-22T01:11:07.879-08:00</atom:updated><title>You can be right, or you decide to save everyone else a bunch of time...</title><description>This is one of my favorite valgrind finds at the moment (well, last few months):&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;blockquote class="tr_bq"&gt;
|| ==881== Syscall param sendmsg(mmsg[0].msg_hdr) points to uninitialised byte(s)&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
|| ==881== &amp;nbsp; &amp;nbsp;at 0x386BAF3D6B: sendmmsg (sendmmsg.c:36)&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
|| ==881== &amp;nbsp; &amp;nbsp;by 0x386DE0B4D6: __libc_res_nsend (res_send.c:1132)&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
|| ==881== &amp;nbsp; &amp;nbsp;by 0x386DE08BDF: __libc_res_nquery (res_query.c:226)&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
|| ==881== &amp;nbsp; &amp;nbsp;by 0x386DE097B9: __libc_res_nsearch (res_query.c:582)&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
|| ==881== &amp;nbsp; &amp;nbsp;by 0x5E8CAC7: _nss_dns_gethostbyname4_r (dns-host.c:309)&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
|| ==881== &amp;nbsp; &amp;nbsp;by 0x386BAD9AF1: gaih_inet (getaddrinfo.c:845)&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
|| ==881== &amp;nbsp; &amp;nbsp;by 0x386BADD750: getaddrinfo (getaddrinfo.c:2359)&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;br /&gt;&lt;/blockquote&gt;
&lt;/blockquote&gt;
If you really want to be right, and not cost a lot of other people time when you know you are right and valgrind is wrong. You could leave a snarky comment in the code where you create a fix to silence the valgrind error.&lt;br /&gt;
&lt;br /&gt;
Or you could decide to not fix the warning, and cost a lot of other developers their time as they trip over you academically correct code which spews errors when run through valgrind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/dI8vuxUDueM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/dI8vuxUDueM/you-can-be-right-or-you-decide-to-save.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2013/02/you-can-be-right-or-you-decide-to-save.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-7073078558316876210</guid><pubDate>Thu, 03 Jan 2013 20:07:00 +0000</pubDate><atom:updated>2013-01-03T12:07:44.480-08:00</atom:updated><title>Child Processes</title><description>&lt;div&gt;
When we, some of my peers, talk about "child processes"...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
20 years ago the discussion was around the question of "who all is running&amp;nbsp;netrek, and can we have someone who is root kill their process?". This was a quality of life issue, a very real first world problem.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
15 years ago it was about zombies. Software usage was such that we started noticing quality. Child processes that became zombies. Seriously, zombies.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
10 years ago &amp;nbsp;it was all about tuning Apache such that it had the optimal number of "children" such that you would not go into swap because you miscalculated the amount of memory that would be used. We often had too many children.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
5 years ago the debate around child processes vs threads became a real conversation due to the changes in hardware.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Today?&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I find my peers talking about child processes and sleep time, where child processes are in the 1 week to 12 month range with a average sleep time that is anywhere between 2 and 8 hours.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
*) Can you find reversed joke in the above statement?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/EdQLEmEzATQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/EdQLEmEzATQ/child-processes.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2013/01/child-processes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-1937725677591432899</guid><pubDate>Mon, 03 Dec 2012 09:58:00 +0000</pubDate><atom:updated>2012-12-03T01:58:56.086-08:00</atom:updated><title>Installing Open Stack</title><description>&lt;br /&gt;
&lt;div class="p1"&gt;
It took me 4 hours to go from bare metal to a small cluster of computers today.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
The install was done on Fedora (Redhat), and included Horizon, Nova, Swift, Cinder, Glance, and Keystone. This was using Folsom.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
I hit exactly one install bug that I fixed in under 10 minutes. I fed Pepper once.&amp;nbsp;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
Not bad.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/IfvUT3MtcVA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/IfvUT3MtcVA/installing-open-stack.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2012/12/installing-open-stack.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-1855053565084535601</guid><pubDate>Tue, 30 Oct 2012 07:54:00 +0000</pubDate><atom:updated>2012-10-30T00:54:13.990-07:00</atom:updated><title>Burning Man, Steve Jobs, The Importance of "use" over "testing"</title><description>My only real contribution to Burning Man, beyond the price of my ticket this year, was to help&amp;nbsp;&lt;a href="http://ignitebrc.com/"&gt;Ignite BRC&lt;/a&gt;&amp;nbsp;by carrying a monitor to Center Camp, and to point out that Steve Jobs had now left the building.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
How did I know that Steve Jobs had left the building?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I did the see the news reports, the book, and had walked past the memorial that someone had built on a local street corner. This wasn't like the moment in grad school where I had to ask "O.J. did what?" when one of my students tuned on a radio in class to hear the jury report.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
But how did I really know that he was dead?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A week before Burning Man my laptop failed to work with a projector. This is how I knew Steve Jobs had departed this world.&lt;br /&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I doubt Steve ever touched Mountain Lion. &amp;nbsp;My presentation was given from a brand new laptop, with a shiny from the factory setup of OSX.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Out of the box my OSX setup did not work with the projector.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
That would have never happened if Steve had been actively using Mountain Lion.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Can you imagine what would have happened to the developers if Steve would have been alive, let alone experienced, such a simple failure of technology?&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It would not have been pretty.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
One week after my own experience with OSX not working with a projector I found myself in a different environment reliving project-fail.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There is something to be said about knowing for certain that the reason that the laptop sitting in front of you is not able to run a presentation is because the OS is at fault.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I was standing in the desert, in a giant circus tent, with dust in the air, staring at a hodgepodge of cables that were connected to some ancient CRT. There is a lot of things that might be contributing to the problem. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
When I was asked, "why isn't this working?"&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The most useful thing I could contribute was:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
"Running the presentations off a mac isn't going to work; the laptop is running Mountain Lion. Go find a Windows laptop."&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The presentation was moved off the Mac, and onto a PC.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The PC&amp;nbsp;immediately&amp;nbsp;worked.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I am wondering if anyone at Apple used Mountain Lion to give a presentation before it was released. It is hard to imagine that someone didn't run into this problem long before Mountain Lion was released (as far as I know Apple has not&amp;nbsp;&amp;nbsp;&lt;a href="https://discussions.apple.com/thread/4159965?start=0&amp;amp;tstart=0"&gt;fix the bug&lt;/a&gt;&amp;nbsp;yet).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I am sure that there is a lot of testing happening each release.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Testing software is not the same as "using" software.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Apple is a company, someone, at least once a day, must be giving a presentation.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
How did they miss this?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Steve Jobs would have presented Mountain Lion to the world using Mountain Lion.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If that presentation had blown up on him,...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Egads.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/IvW10nCn8sQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/IvW10nCn8sQ/burning-man-steve-jobs-importance-of.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>1</thr:total><feedburner:origLink>http://blog.krow.net/2012/10/burning-man-steve-jobs-importance-of.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-423861190883400331</guid><pubDate>Thu, 02 Aug 2012 16:23:00 +0000</pubDate><atom:updated>2012-12-30T14:02:46.814-08:00</atom:updated><title>Drizzle 7.2.3</title><description>&lt;div&gt;
From the release notes:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Fix for CTRL-Z for shutdowns. Many updates for JSON server. Improvements completed on Catalog support. ZeroMQ and Gearman supported updated. Updates AUTH_HTTP authentication module. Documentation enhancements. Testing framework updated. Regex Policy updates.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Stewart can say a lot more about Catalog support, but this is one of the cooler bits of work that is happening ongoing. The original work was began for Rackspace and continues today. Virtualization inside of the database is long overdue.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The JSON server is another one of the locations where we see a lot of effort. Being able to support JSON queries directly seems to resonate with a lot of folks today.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
For the record I wrote zero lines of codes in this release. Work continues, and in the case of Drizzle it is all about work coming in from the community :)&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/7Q9ivk8WtHY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/7Q9ivk8WtHY/drizzle-723.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2012/08/drizzle-723.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-3441420015188772698</guid><pubDate>Tue, 10 Apr 2012 22:55:00 +0000</pubDate><atom:updated>2012-04-10T15:55:28.284-07:00</atom:updated><title>Drizzle 7.1 Released</title><description>&lt;a href="http://blog.drizzle.org/2012/04/04/drizzle-7-1-33-stable-has-been-released/"&gt;Drizzle 7.1&lt;/a&gt; was released!&lt;br /&gt;
&lt;br /&gt;
The laundry list for features and improvements are pretty long, so I will leave that to the main blog announcement.&lt;br /&gt;
&lt;br /&gt;
The part that I find the most interesting? 7.1 was the effort of a lot of developers and people who do the heavy lifting of promoting the project (and the efforts around a project like this are huge). It takes the resources of a half a dozen companies directly, and a number of companies indirectly.&lt;br /&gt;
&lt;br /&gt;
Compared to 7.0, Drizzle was done by volunteers, not paid Drizzle employees, who find the project fun and interesting. These are people who want to be involved with the Open Source Community, and who find value in the work (and looking at our incoming Google Summer of Code applicants there are more people to come).&lt;br /&gt;
&lt;br /&gt;
The biggest surprise that some might fine? Much of the 7.1 effort was done by new developers. These are people who never worked at MySQL, Sun, or Oracle.&lt;br /&gt;
&lt;br /&gt;
Contributions by new individuals make up the bulk of the 7.1 effort, and I am very happy to see that. It it is evidence of the ongoing growth of the Drizzle community.&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/2xIQwTHHr0g" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/2xIQwTHHr0g/drizzle-71-released.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>1</thr:total><feedburner:origLink>http://blog.krow.net/2012/04/drizzle-71-released.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-5208056555477248164</guid><pubDate>Sun, 08 Apr 2012 18:29:00 +0000</pubDate><atom:updated>2012-04-08T11:29:46.278-07:00</atom:updated><title>One Fat Bird</title><description>&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-_LmJlgnZa-s/T4HZGGvnviI/AAAAAAAAAH4/HiANF-3Uv_8/s640/blogger-image-1881809016.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-_LmJlgnZa-s/T4HZGGvnviI/AAAAAAAAAH4/HiANF-3Uv_8/s640/blogger-image-1881809016.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/g_ZNKIv0YU4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/g_ZNKIv0YU4/one-fat-bird.html</link><author>noreply@blogger.com (Brian Aker)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-_LmJlgnZa-s/T4HZGGvnviI/AAAAAAAAAH4/HiANF-3Uv_8/s72-c/blogger-image-1881809016.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2012/04/one-fat-bird.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-5667677970278795532</guid><pubDate>Tue, 27 Mar 2012 04:58:00 +0000</pubDate><atom:updated>2012-03-26T22:12:01.700-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">mysql hpcloud</category><title>Opscode's Chef, MySQL, Best Practices</title><description>If Chef manages a CNF file, please have it put a comment in the top of the file that it is managed by Chef. Do not assume that everyone will believe that every file is being managed by Chef. In general, you should have Chef leave a comment in every file that it manages (and someone at Opscode should make this a default feature in Chef).&lt;br /&gt;
&lt;br /&gt;
Do not have Chef reboot the database. Databases are designed to run for years at a time. Many parameters can be set while the databases is running in such a way that it does not need to be bounced in order to make the parameter work. There are exceptions to this in non-production environments.&lt;br /&gt;
&lt;br /&gt;
Need to change the schema? Do not have the Chef create a table, and then do alter table after alter table to install a new system. This is very painful to watch.&lt;br /&gt;
&lt;br /&gt;
* Thanks to Alex Howells for the idea of always putting a comment in the top of the Chef script.&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/qOUvLqC0yE0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/qOUvLqC0yE0/opscodes-chef-mysql-best-practices.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2012/03/opscodes-chef-mysql-best-practices.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-2576461512622435665</guid><pubDate>Fri, 09 Mar 2012 03:27:00 +0000</pubDate><atom:updated>2012-03-08T19:27:02.344-08:00</atom:updated><title>Patrick!</title><description>&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-G8JLAFPiWgg/T1l4halYFaI/AAAAAAAAAHY/JhKa2KTuZhI/s640/blogger-image--1325600716.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh3.googleusercontent.com/-G8JLAFPiWgg/T1l4halYFaI/AAAAAAAAAHY/JhKa2KTuZhI/s640/blogger-image--1325600716.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/2udJXZrkf78" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/2udJXZrkf78/patrick.html</link><author>noreply@blogger.com (Brian Aker)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/-G8JLAFPiWgg/T1l4halYFaI/AAAAAAAAAHY/JhKa2KTuZhI/s72-c/blogger-image--1325600716.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2012/03/patrick.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-7709811418370709189</guid><pubDate>Thu, 08 Mar 2012 07:38:00 +0000</pubDate><atom:updated>2012-03-08T00:19:17.810-08:00</atom:updated><title>MySQL Conference, Percona, the Ecosystem...</title><description>&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;This year O'Reilly isn't running the MySQL conference, &lt;a href="http://www.percona.com/"&gt;Percona&lt;/a&gt; is doing it.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;a href="http://www.percona.com/live/mysql-conference-2012/"&gt;Santa Clara, April 10-12&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;. The usual time and place.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;This is great news. They run a great conference. They always get rave reviews.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;This isn't the first one they've done. They've done San Francisco, New York, London, more.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;What's different about Santa Clara?&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;This isn't their typical 300-person one-day conference. They're picking up the annual MySQL users conference and carrying the torch forward. This is a 1000+ person, huge expo hall, 8 concurrent tracks, several days conference.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;This year is a banner year for the MySQL ecosystem.&amp;nbsp; Why?&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Because now the conference is focused on MySQL again. This is the central conference for the ecosystem. And now it's managed by a company that understands both the community and business side.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;And the MySQL Ecosystem? Thanks to cloud vendors it continues to grow.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;The&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;a href="http://www.percona.com/live/mysql-conference-2012/program/sessions"&gt;sessions&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;? Better than ever. In the past there was a lot of auxiliary content. Take a look. This year it's easily the best technical content I've ever seen. And I've led the selection committee for years.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;The&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;a href="http://www.percona.com/live/mysql-conference-2012/sponsors"&gt;sponsors and exhibitors&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;? Pretty much anyone who's anyone will be there.&amp;nbsp; Looking for solutions to your MySQL problems? You'll meet the folks who can help you. Visit the expo hall. There is great sponsor support for this year's event. &lt;a href="http://hpcloud.com/"&gt;HPCloud&lt;/a&gt;, Facebook, Clustrix, Google, et cetera.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;The keynotes are nothing to sneeze at too. There will be talks from Marten Mickos, Mark Callaghan, myself, and more of the old gang.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;Is there more? Yes there is.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;There are the community awards, BOFs, lightning talks. There is a Tuesday welcome reception, Wednesday community networking.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;More? Yes. There is not one, not two, but three follow-on events. Stay an extra day and on Friday you can attend&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;a href="http://www.drizzle.org/content/drizzle-day-fri-13-apr-2012-santa-clara"&gt;Drizzle Day&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;,&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;a href="http://www.skysql.com/mysql-solutions-day"&gt;SkySQL and MariaDB Day&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;, or&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;a href="http://sphinxsearch.com/conference2012/"&gt;Sphinx Search Day&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;.&amp;nbsp; Three awesome technologies for MySQL users.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;This is a really big deal. If you are even slightly interested in MySQL, this is the event of the year. Don't miss it. By the way, early-bird pricing is almost expired. Register before March 12th or you'll pay more for the ticket and the hotel.&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/-I3LI29rA5A" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/-I3LI29rA5A/mysql-conference-percona-ecosystem.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2012/03/mysql-conference-percona-ecosystem.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-193106645290287905</guid><pubDate>Wed, 29 Feb 2012 18:30:00 +0000</pubDate><atom:updated>2012-02-29T11:30:41.051-08:00</atom:updated><title>Drizzle Day at the Percona MySQL Conference</title><description>The major annual event in both the MySQL and Drizzle worlds is the&amp;nbsp;conference week in April. This year Percona is organizing the &lt;a&lt;br&gt;&lt;a href="http://www.percona.com/live/mysql-conference-2012/"&gt;Percona Live  MySQL Conference and Expo&lt;/a&gt; from Apr 10-12 and as usual we follow up&amp;nbsp;with a &lt;a href="http://www.drizzle.org/content/drizzle-day-fri-13-apr-2012-hyatt-santa-clara"&gt;Drizzle&amp;nbsp;Day on Apr 13&lt;/a&gt;. It's the 4th Drizzle Day!&lt;/a&lt;br&gt;&lt;br /&gt;
&lt;a&lt;br&gt;
&lt;br /&gt;
I will be giving a keynote at the main conference, on Wednesday April&amp;nbsp;11. I will be giving a keynote on the state of the MySQL Ecosystem and how cloud is evolving it. (&lt;a href="http://hpcloud.com/"&gt;HPCloud&lt;/a&gt; is a sponsor of&amp;nbsp;the conference.) Of course, it is about&amp;nbsp;&lt;a&lt;br&gt;&lt;a href="http://www.percona.com/live/mysql-conference-2012/sessions/keynote-servicing-databases-cloud"&gt;Databases  in the Cloud&lt;/a&gt; so MySQL and Drizzle are still with me :-)&lt;br /&gt;
&lt;br /&gt;
There are a few Drizzle specific talks though. Check out &lt;a&lt;br&gt;&lt;a href="http://www.percona.com/live/mysql-conference-2012/sessions/scripting-mysql-lua-and-libdrizzle-inside-nginx"&gt;Scripting  MySQL with Lua and libdrizzle inside Nginx&lt;/a&gt; and &amp;nbsp;&lt;a&lt;br&gt;&lt;a href="http://www.percona.com/live/mysql-conference-2012/sessions/getting-started-drizzle-71"&gt;Getting  Started with Drizzle 7.1&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Then on Friday, April 13 &lt;a&lt;br&gt;&lt;a href="http://www.drizzle.org/content/drizzle-day-fri-13-apr-2012-hyatt-santa-clara"&gt;it's  all about Drizzle&lt;/a&gt;. I will be giving a mini-keynote to start the&amp;nbsp;day, and then we have great talks about new and old features in&amp;nbsp;Drizzle. The Drizzle Day is free entry, so even if you're not&amp;nbsp;attending the main conference, but if you're interested to learn about&amp;nbsp;using Drizzle, please consider joining us. At the end of the day there&amp;nbsp;is also some content for those who might want to start hacking on&amp;nbsp;Drizzle itself. Especially if you live in the Bay area, just pop in,&amp;nbsp;it would be great to meet Drizzle users and hackers in person.&lt;br /&gt;
&lt;br /&gt;
Oh, and I also want to say it is really great that Percona and&amp;nbsp;Technocation are sponsoring this event and also that SkySQL has&amp;nbsp;invited us to their lunch and after party. Since Drizzle is purely a&amp;nbsp;community project, we really appreciate this. It is what makes Drizzle&amp;nbsp;Day happen.&lt;br /&gt;
&lt;br /&gt;
Speaking of lunch: &lt;a&lt;br&gt;&lt;a href="http://www.drizzle.org/content/drizzle-day-fri-13-apr-2012-hyatt-santa-clara"&gt;Please  RSVP&lt;/a&gt; to us so we know how many are coming.&lt;br /&gt;
&lt;/a&lt;br&gt;&lt;/a&lt;br&gt;&lt;/a&lt;br&gt;&lt;/a&lt;br&gt;&lt;/a&lt;br&gt;&lt;/a&lt;br&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/3FGo_e7LlpE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/3FGo_e7LlpE/drizzle-day-at-percona-mysql-conference.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2012/02/drizzle-day-at-percona-mysql-conference.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-4251947855784519988</guid><pubDate>Thu, 02 Feb 2012 07:02:00 +0000</pubDate><atom:updated>2012-02-01T23:02:15.916-08:00</atom:updated><title>Error Messages</title><description>I have written a number of libraries that are frequently used, and I have yet to find a pattern for error messages that I am completely happy with.&lt;br /&gt;
&lt;br /&gt;
Let me tell you about a few of my thoughts on this.&lt;br /&gt;
&lt;br /&gt;
I have found that there are two parts to an error, the code and the message. The code is a numerical value, and the message is an expression that you expect a human to read.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Error codes and messages do not have to map one for one.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
You only really want to provide a specific error code if you believe the developer who is working with your code can do something about the error.&lt;br /&gt;
&lt;br /&gt;
I've&amp;nbsp;definitely&amp;nbsp;gotten myself into the trap of creating a dozen or so error codes that all relate to how a host has failed a connection. In almost all cases of a connection failure there is very little that the end user of the end user of the library can do. &lt;br /&gt;
&lt;br /&gt;
While one error code might be fine, you should create specific error messages which provide more information for an end user to&amp;nbsp;diagnose&amp;nbsp;a problem.&lt;br /&gt;
&lt;br /&gt;
The developer who is looking at the error will appreciate the message. It might make the difference between someone spending five minutes, instead of five hours diagnosing the problem.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Never return an error message that is just a number.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
No one wants to try to figure out what "error 13" means. A number tells me nothing, and while I could google the number, that is an extra step I don't want to have to take each time I look at a problem.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;If you need a paragraph to explain the error, make the error searchable.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If a developer wants more information on the error, they will search for it. Make this a very simple process. It drives your users to your website. This may sound obvious, but I continue to meet people who haven't realized this.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Do not map to ERRNO.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Mapping to ERRNO. ERRNO is not very flexible, and it comes with the&amp;nbsp;baggage&amp;nbsp;of a&amp;nbsp;preconceived&amp;nbsp;notion of what the error means (which does not map across operating systems). &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Give yourself enough information to diagnose a problem for the end user.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In the last few years I have taken to embedding the line of the code, and the file that the error was in, every error messages. This has allowed me to better support software that I write by creating context for me. An error is not only a tool for the end user, it is a tool for you to provide support.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Consider the case that multiple failures may occur.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes you don't have one failure in a given context, so try to store up all of the errors that occur. If you can, design your error system so that you store all of what failed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;In the end,...&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Be consistent. Format your error codes and messages in a consistent manner. Make sure that if someone wants to, they can parse them in batch. Never under estime the creativity of an end user armed with a regular expression.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/WlgGfZTLnJ0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/WlgGfZTLnJ0/error-messages.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2012/02/error-messages.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-7010849561900436120</guid><pubDate>Sat, 21 Jan 2012 19:50:00 +0000</pubDate><atom:updated>2012-01-21T11:50:55.236-08:00</atom:updated><title>CenturyLink, Suck, US Tech Support</title><description>I wake up and discover the internet connection is down to the house.&lt;br /&gt;
&lt;br /&gt;
I log into my router and run the diagnostics software that is built into it. Everything is good (BTW this is an actual router which bridges the DSL signal to ethernet (built by Cisco)).&lt;br /&gt;
&lt;br /&gt;
So I call tech support. The fellow immediately blames the device and tells me that they will send out a new one on Tuesday. It will have built in WiFI, and since "I don't pay for a static IP address" it will be "easy to configure".&lt;br /&gt;
&lt;br /&gt;
Ugh,... I have a routable subnet, and no I don't want your cheep assed device that won't do what my current device does.&lt;br /&gt;
&lt;br /&gt;
We go around and around for &amp;nbsp;a bit, and finally he gets me his manager.&lt;br /&gt;
&lt;br /&gt;
His manager stumbles through the conversation for a bit, and repeats the "we can be out by Tuesday, and our new device is better...".&lt;br /&gt;
&lt;br /&gt;
I escalate, and he pushes back.&lt;br /&gt;
&lt;br /&gt;
So? I escalate again, and point out that I am happy to call the city and bitch about their service (I also drop words like "911 service", etc...).&lt;br /&gt;
&lt;br /&gt;
I get transferred to Idaho.&lt;br /&gt;
&lt;br /&gt;
This nice woman bounces the line for me, and....&lt;br /&gt;
&lt;br /&gt;
Everything works.&lt;br /&gt;
&lt;br /&gt;
In the future, I am going ask to be transferred to the US first.&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/t1ISvh8vJgU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/t1ISvh8vJgU/centurylink-suck-us-tech-support.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>1</thr:total><feedburner:origLink>http://blog.krow.net/2012/01/centurylink-suck-us-tech-support.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-5659339466183824165</guid><pubDate>Tue, 01 Nov 2011 15:38:00 +0000</pubDate><atom:updated>2012-02-01T23:05:19.676-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">photo</category><title>Twisted Circus,Going all our for Halloween in Capital Hill</title><description>&lt;img alt="" src="http://30.media.tumblr.com/tumblr_ltzvrrFMpg1qgkehdo1_500.jpg" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/crvMGnv7jGA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/crvMGnv7jGA/dsc0025.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/11/dsc0025.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-403669082200986357</guid><pubDate>Tue, 18 Oct 2011 13:18:00 +0000</pubDate><atom:updated>2012-01-16T14:17:37.849-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">regular</category><title>Contributor Agreements, Open Stack's Contributor</title><description>I have not been a fan of the Open Source Contributor agreements that have been used for the last two decades. All of them tend to have an onerous bit whereby a developer has to hand over the copyright to a group, organization, or company.&lt;br /&gt;
&lt;br /&gt;
I’ve never felt like this is a very honest exchange. With MySQL you were handing over copyright to a company that was making money off your work. With the FSF I have always been bothered by Richard’s insistence that FSF has the right then to take that code and relicense it. His stance on dual licensing under commercial licenses is my issue with this.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://wiki.openstack.org/CLA"&gt;Open Stack contributor’s agreement&lt;/a&gt; is a bit different then much of what we have seen thus far. It basically states, and please keep in your mind firmly that I am not a lawyer, that you have the right to submit the code you are submitting. It states directly that you can do whatever you want in the future with the code you wrote.&lt;br /&gt;
&lt;br /&gt;
It is not Apache specific. I don’t see any reason why it couldn’t be used with a GPL project as well.&lt;br /&gt;
&lt;br /&gt;
It is worded such that the group that the code is contributed too couldn’t just take your code, and then hold the contribution hostage. By hostage I mean that the contribution would sit in a limbo where you couldn’t do anything with it, and would therefor be at the mercy of the new owner of the code publishing it.&lt;br /&gt;
&lt;br /&gt;
The GPL, BSD, Apache, MIT, and other licenses where a watershed in their time. Lawyers learned the licenses, and each of these licenses have been “debugged”.&lt;br /&gt;
&lt;br /&gt;
Every time a company sees a new license, or a new legal agreement, there is a huge bar that must be met before it can be signed.&lt;br /&gt;
&lt;br /&gt;
If you are an engineer, think of lawyers as a picky c++ compiler. Some lawyers issue better warnings then others. Some organizations turn the compiler flag “all warnings to error” on. Other organizatiosn not only do this, but add they add in -Wextra for good measure.&lt;br /&gt;
&lt;br /&gt;
We have software licenses, the OSI stamped out quite a few of these.&lt;br /&gt;
&lt;br /&gt;
What is missing then?&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Agreements for developers who are on advisory boards.&amp;nbsp;&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Contractor agreements that carve out open source projects such that they don’t become entangled with “work for hire”.&amp;nbsp;&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;Contribution agreements.&lt;/li&gt;
&lt;/ul&gt;
Take a look at the Open Stack contributor agreement. Could it be used as a standard for open source contributions?&lt;br /&gt;
&lt;br /&gt;
Where is the advantage in using it? We already have a long list of companies who signed it for Open Stack. It has been debugged, and a number of large companies are willing to sign it.&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/DLDJrH790Gk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/DLDJrH790Gk/contributor-agreements-open-stack.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/10/contributor-agreements-open-stack.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-1488065178499349250</guid><pubDate>Fri, 30 Sep 2011 17:03:00 +0000</pubDate><atom:updated>2012-01-16T14:18:59.587-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">photo</category><title /><description>&lt;img src="http://24.media.tumblr.com/tumblr_lscqdetodp1qgkehdo1_500.jpg" alt=""/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;b&gt;DSC_0262&lt;/b&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/0T3MxjoA1og" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/0T3MxjoA1og/dsc0262.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/09/dsc0262.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-9138365269823019765</guid><pubDate>Thu, 29 Sep 2011 13:17:00 +0000</pubDate><atom:updated>2012-01-16T14:18:59.754-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">regular</category><title>Spoon full of Sugar, Oracle and the Open Core Model</title><description>&lt;p&gt;&lt;span&gt;From the &lt;a href="http://blogs.the451group.com/opensource/2011/09/26/mysql-at-the-core-of-commercial-open-source/"&gt;451 Group&lt;/a&gt;:&lt;/span&gt;&lt;br/&gt;&amp;#8220;MySQL flirted with the open core licensing model in early 2008 with plans to introduce new features into Enterprise Edition that would not be available under an open source license.&amp;#8221;&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;MySQL didn&amp;#8217;t flirt with, it was going to do it. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;Why? Because we were asking the question, &amp;#8220;how do we pull in customers to make more money&amp;#8221;. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;MySQL was going to put the new backup API, which never materialized, into an Enterprise branch. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;It was a lousy idea for the following reasons:&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;1) There was no internal API in the server for this, so the engineering was going to be messy and expensive. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;2) We didn&amp;#8217;t own the technology that was needed to even do this (Oracle owned Hot Backup)&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;3) Percona has an awesome tool for doing this, that is Open Source (&lt;a href="http://www.percona.com/software/percona-xtrabackup/"&gt;&lt;a href="http://www.percona.com/software/percona-xtrabackup/"&gt;http://www.percona.com/software/percona-xtrabackup/&lt;/a&gt;&lt;/a&gt;)&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;4) Backup is a core feature everyone needs, and some of those &amp;#8220;everyones&amp;#8221; are the folks who manufacture tools that you want to have work with your product.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;5) When we were going to announce it, we hadn&amp;#8217;t even written it/completed it. It was vaporware. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;br/&gt;It would have been a horrible move, and would have caused Chaos for no particular reason. It was dead on arrival, and when it was to be announced as a strategy since it didn&amp;#8217;t even exist. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;Lets look at &lt;a href="http://blogs.oracle.com/MySQL/entry/new_commercial_extensions_for_mysql"&gt;Oracle&amp;#8217;s move&lt;/a&gt;. Both the authentication module, and the Thread Pool come into the MySQL server as plugins. If the engineering of the MySQL server continues in the current direction (which is somewhat flattering to Drizzle I might add), then they are on a good path (if I can find my blog entry where I talked about this as a good strategy, I&amp;#8217;ll link back to it here). &lt;/p&gt;&lt;br/&gt;&lt;p&gt;Much of the hubbub around Open Source, Community, etc, in regards to this are a bit inflated I feel. They haven&amp;#8217;t touched the core product, and they are creating API. Are they possibly hurting themselves in regards to ubiquity?&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Doubtful. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;Would I pick those two pieces? No, but they aren&amp;#8217;t the last two I would pick either.  If Sun had continued as a company? Something similar to this would have been done as well.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;From an engineering and usage stand point?&lt;/p&gt;&lt;br/&gt;&lt;p&gt;The first person who sniffs at the authentication mechanism who knows anything about security is going to freak.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;The Thread Pool can only be used by a very limited number of users (and there are some restrictions on what can be done in the server while it is in use). MySQL&amp;#8217;s IO was never designed for the Thread Pool, and there is a lot of engineering work that would need to be done to make it work. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;Still? People will use both, and I am betting some customers will want them badly enough to pay. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;If they are really badly needed? Well then someone will write an open source version of both.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;I have no great love of Oracle, but this is really not a big deal at all. The original GPL&amp;#8217;ing of the Public Domain/LGPL clients was a much bigger deal.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/fYdo3wZkI5s" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/fYdo3wZkI5s/spoon-full-of-sugar-oracle-and-open_29.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/09/spoon-full-of-sugar-oracle-and-open_29.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-5865570988744561770</guid><pubDate>Thu, 22 Sep 2011 23:08:00 +0000</pubDate><atom:updated>2012-01-16T14:18:59.643-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">regular</category><title>memcached_exist()</title><description>&lt;p&gt;New in version 0.53 (which yes, I really should renumber into 1.X at some point in the near future) is &lt;a title="memcached_exist()" href="http://docs.libmemcached.org/libmemcached/memcached_exist.html"&gt;memcached_exist()&lt;/a&gt;. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;Ever wanted to find out if a key existed but didn&amp;#8217;t want to have to fetch the object?&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Well now you can do this. It works by seeing if an add can be done on the key (the add though is dated in the past, so any write afterward will expire it).&lt;/p&gt;&lt;br/&gt;&lt;p&gt;You can currently grab the code via bar on &lt;a href="http://launchpad.net/libmemcached"&gt;Launchpad&lt;/a&gt;.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Have fun! &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/J8MHOzwvGfU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/J8MHOzwvGfU/memcachedexist_22.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/09/memcachedexist_22.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-3591895948186473125</guid><pubDate>Mon, 12 Sep 2011 08:54:00 +0000</pubDate><atom:updated>2012-01-16T14:18:59.604-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">quote</category><title>First commute discovery of the day? My orca card is empty.</title><description>First commute discovery of the day? My orca card is empty.&lt;br/&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/xMzwNNN_msI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/xMzwNNN_msI/first-commute-discovery-of-day-my-orca.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/09/first-commute-discovery-of-day-my-orca.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-608907412030148386</guid><pubDate>Fri, 05 Aug 2011 09:35:00 +0000</pubDate><atom:updated>2012-01-16T14:18:59.650-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">photo</category><title /><description>&lt;img src="http://28.media.tumblr.com/tumblr_lpggbdCPpa1qgkehdo1_500.jpg" alt=""/&gt;&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Truckler Straps:&lt;/b&gt; &lt;br/&gt;&lt;br/&gt;&lt;p&gt;Sent from my TI85&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/ht2K2fZzfGA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/ht2K2fZzfGA/truckler-straps-sent-from-my-ti85.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/08/truckler-straps-sent-from-my-ti85.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-8642088684927960616</guid><pubDate>Thu, 04 Aug 2011 18:13:00 +0000</pubDate><atom:updated>2012-01-16T14:18:59.735-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">regular</category><title>C/C++, #Ifdef, working around the need for them</title><description>&lt;p&gt;Consider the all to common code:&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;#ifdef HAVE_SOMETHING&lt;/p&gt;&lt;br/&gt;&lt;p&gt;something();&lt;/p&gt;&lt;br/&gt;&lt;p&gt;#endif&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;ifdef are problematic because any number of combinations of them can lead to multiple execution paths that the compiler never will so. PIA&lt;/p&gt;&lt;br/&gt;&lt;p&gt;The above assumes that HAVE_SOMETHING will have some value or not. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;Another option is the following:&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;if (HAVE_SOMETHING)&lt;/p&gt;&lt;br/&gt;&lt;p&gt;{&lt;/p&gt;&lt;br/&gt;&lt;p&gt;  something();&lt;/p&gt;&lt;br/&gt;&lt;p&gt;}&lt;/p&gt;&lt;br/&gt;&lt;p&gt;The significance in the above?&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Any good compiler will evaluate HAVE_SOMETHING, and if the value is zero then the code path will be optimized out.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Awesome. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/ehj-1s3dWpM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/ehj-1s3dWpM/cc-ifdef-working-around-need-for-them.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/08/cc-ifdef-working-around-need-for-them.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-9176263229505278849</guid><pubDate>Thu, 21 Jul 2011 22:18:00 +0000</pubDate><atom:updated>2012-01-16T14:18:59.762-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">regular</category><title>Dear Lazyweb, how secure is Tomato?</title><description>&lt;p&gt;So today I noticed on one of my internal servers the following:&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Jul 17&amp;#160;23:53:13 localhost sshd[31847]: Invalid user sales from 123.196.113.11&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Jul 17&amp;#160;23:53:13 localhost sshd[31848]: input_userauth_request: invalid user sales&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;And I also see&amp;#8230;.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Jul 17&amp;#160;23:47:11 localhost sshd[31690]: reverse mapping checking getaddrinfo for 42.ac.84ae.static.theplanet.com [174.132.172.66] failed - POSSIBLE BREAK-IN ATTEMPT!&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Also?&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Jul 20&amp;#160;14:56:01 localhost ¿&amp;lt;28&amp;gt;fail2ban.actions: WARNING [ssh-iptables] Ban 121.88.250.208&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Huh? Nothing is port forwarded, and the only thing that could be connecting to the box is a Linksys running 1.28 Tomato.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;So I am wondering, is Tomato secure right now?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/APuoNgIaGfY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/APuoNgIaGfY/dear-lazyweb-how-secure-is-tomato_21.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/07/dear-lazyweb-how-secure-is-tomato_21.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-464973908851456442.post-8325262677558523635</guid><pubDate>Thu, 14 Jul 2011 14:46:00 +0000</pubDate><atom:updated>2012-01-16T14:18:59.724-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">regular</category><title>MySQL, Enum, skip the if()</title><description>&lt;p&gt;There are a number of different, and very valid patterns for handling objects of different types. This is not about that, this is about how to not mix a pattern.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;A very, very common bit of code that is in MySQL (and can therefor be found in Drizzle):&lt;/p&gt;&lt;br/&gt;&lt;pre&gt;&lt;p&gt;if ((cached_result_type == DECIMAL_RESULT) or (cached_result_type == INT_RESULT))&lt;/p&gt;&lt;br/&gt;&lt;p&gt;{&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;span&gt; &lt;/span&gt;do_something();&lt;/p&gt;&lt;br/&gt;&lt;p&gt;}&lt;/p&gt;&lt;br/&gt;&lt;p&gt;else&lt;/p&gt;&lt;br/&gt;&lt;p&gt;{&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;span&gt; &lt;/span&gt;do_something_else();&lt;/p&gt;&lt;br/&gt;&lt;p&gt;}&lt;/p&gt;&lt;br/&gt;&lt;/pre&gt;&lt;br/&gt;&lt;p&gt;DECIMAL_RESULT and INT_RESULT are each possible result types.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Are there more?&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Why yes there are. In the above bit of code the original author thought about two cases, and assumed all other cases could just be lumped into the else.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;I&amp;#8217;ve fixed dozens of bugs over the last few years based on similar assumptions.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;What assumptions? &lt;/p&gt;&lt;br/&gt;&lt;p&gt;1) The no one would ever add another result type.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;2) That no other bug fix might create a case where the else no longer held true.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;3) That the else was ever correct in the first place.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Without changing the entire design, what would be better?&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Use a switch and make a case for each enum. That way if a new enum is added anywhere in the code where logic is required based on the enum you will catch it when you compile (assuming you have your warning flags turned up in your compiler). &lt;/p&gt;&lt;br/&gt;&lt;p&gt;Also? Skip &amp;#8220;default&amp;#8221;. Unless you are taking something off the wire/file/etc you can skip default because you aren&amp;#8217;t going to end up with an invalid enum. If you are doing one of these actions?&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Sanitize the data first, don&amp;#8217;t just cast it.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/brianaker/~4/xCH40bci3bM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/brianaker/~3/xCH40bci3bM/mysql-enum-skip-if.html</link><author>noreply@blogger.com (Brian Aker)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.krow.net/2011/07/mysql-enum-skip-if.html</feedburner:origLink></item></channel></rss>
