Tuesday, January 12, 2010

Alex Payne — Don't Be A Hero


If you’ve built a system that’s supposed to be reliable, you shouldn’t be up fixing it at four in the morning. You shouldn’t be getting paged at all hours. Sure, you might need to do some occasional planned after-hours maintenance, or some very occasional unplanned-but-process-driven disaster recovery, but you shouldn’t need a hero.


Heroes are damaging to a team because they become a crutch. As soon as you have someone who’s always willing to work at all hours, the motivation from the rest of the team to produce reliable, trouble-free software drops. The hero is a human patch. Sure, you might sit around talking about how reliability is a priority, but in the back of your mind you know that the hero will be there to fix what doesn’t work.




Another great post by Alex Payne. Everybody knows a "code" hero or has been one yourself as one point or another. The problem that Alex points out is that when it happens too often, you are letting your team be mediocre or lazy and you rely on the hero. By now, I hope you have the time to read the whole post.

Sunday, January 10, 2010

Speaking at cf.Objective() 2010

I've been invited to speak at cf.Objective() 2010.  I am co-track chair for Tools & Integration track on the conference's content advisory board. I've gotten a sneak peek at the line up of sessions and speakers -- this year looks amazing!  This is definitely one CFML conference you do not want to miss.  I'm proud to announce that I will presenting on the following topics.

Speedy Websites Through Better Front-End
We'll be using tools like YSlow and Google Page Speed to diagnose issues in which we can improve the front-end performance of a website.

Open Source Tools for Debugging
The title is pretty self-explanatory, but we'll be looking a variety of tools that can be used for debugging web applications.  Everything from Javascript to HTML to webservices to file systems to Java.

Living in the Cloud: CFML Applications on Google App Engine
I'm co-presenting this with Matt Woodward.  Cloud based computing, while a buzzword these days, is something that very compelling. So come see how cloud computing differs from traditional application development and how it can open up a different world for your applications.

Simplicity, Integrity and Velocity: What's New in Mach-II
I'll be co-presenting this with fellow Team Mach-II members Matt Woodward and Kurt Wiersma.  We'll be looking at the all the features in the almost ready for gold release of Mach-II Simplicity (1.8), what is already there for Mach-II Integrity (1.9) and hopefully a sneak peek at Mach-II Velocity (2.0).

I'll be sharing more on my presentations in the next few weeks, but take the moment to take advantage of the early bird pricing for cf.Objective() ends on January 29th -- so register now!

Example of Bad Security - WeTV.com Exception Shows File Paths



Fatal error: Cannot use object of type MDB2_Error as array in /na/na010uspln2/vol2/production/apache-docroots/wetv.com/public/live/gadgets/ScheduleGadget/ScheduleGadgetIMP.php on line 168



My wife randomly surfed over to the WeTV site and it appears to be down at the moment. Above is an example of a bad security practice -- they show file paths on their exception page.

Saturday, January 2, 2010

Drone Or Phone? (Shot of Jaq Podcast)




Download ogg Download mp3




It is not often you hear the words “iPhone Killer” thrown around the place and taken in any way seriously, but Android has been getting hopes and expectations a-pumping. Jono Bacon and Stuart ‘Aq’ Langridge crack open the story and explore the opportunities and risks that Google face in how the Open Source community see this exciting new mobile system.


An interesting podcast discussion on Droid or iPhone with Jono Bacon and Stuart 'Aq' Landgridge (i.e. J + Aq). I love the part about using the Droid OS on netbooks. It particularly interesting to hear about how Droid is more "open source" in the terms of applications than the closed source iPhone platform.

SpamAssassin Y2K10 Rule Bug - Update Your Rules Now!



Versions of the FH_DATE_PAST_20XX rule released with versions of Apache SpamAssassin 3.2.0 thru 3.2.5 will trigger on most mail with a Date header that includes the year 2010 or later.  The rule will add a score of up to 3.6 towards the spam classification of all email.  You should take corrective action immediately; there are two easy ways to correct the problem:



  • If your system is configured to use sa-update run sa-update now.  An update is available that will correct the rule.  No further action is necessary (other than restarting spamd or any service that uses SpamAssassin directly).



  • Add "score FH_DATE_PAST_20XX 0" without the quotes to the end of your local.cf file to disable the rule.


If you require help updating your rules to correct this issue you are encouraged to ask for assistance on the Apache SpamAssassin Users' list.  Users' mailing list info is here.


On behalf of the Apache SpamAssassin project I apologize for this error and the grief it




I have three servers that use SpamAssassin. It's best to do this now!


Friday, January 1, 2010

Allyson's 2010 Polar Dash 10k

Some of you might know that my wife, Allyson, has been getting into running lately.  It was a balmy 2 degrees F outside. Here are the results of the Allyson's 10k race -- official results:

bib number: 177
overall place: 475 out of 831
division place (25-29 years - F): 36 out of 72
gender place: 178 out of 421
time: 58:16
pace: 9:23
chip time: 58:16
5ksplit: 29:24

It was a chip timed race so the 58:16 is rather accurate.  I'm so proud of Allyson.  She did a 6 miler and I barely can huff out 1 mile.

At the finish (no, that is not snow on her shoulders -- that is frozen ice that formed from evaporating sweat):


New Query Functions Released (Open BlueDragon Blog)


New Query Functions released



Published: 2:01 PM GMT, Friday, 1 January 2010

We've justed finished the a whole new set of functions to help with the manipulation of Query objects and their respective datasources.



The following table highlights all the current functions within the Query category available in the OpenBD (nightly build) release:

































































DatasourceCreateAdds a new datasource to the system for use with any database functions. This does not persist over server restarts
DatasourceDeleteRemoves the given datasource. Note, it will not remove any datasource that was registered with the underlying bluedragon.xml file
DatasourceIsValidChecks to see if a given datasource has been previously registered using DataSourceCreate()
QueryAddColumnAdds a new column of data to the exist query object, returning the column number
QueryAddRowAdds the specified the number of rows to the end of the query
QueryColumnArrayReturns all the data in a query for a given column
QueryColumnListReturns all the data in a query for a given row but as a structure
QueryDeleteColumnDeletes the column from the query, returning the deleted column data as an array
QueryDeleteRowDeletes the row within a query object. Modifies the original query object
QueryIsEmptyDetermines if the query has any rows
QueryNewCreates a new query object with the columns past in of the optional types
QueryOfQueryRunExecutes a Query-of-Query against a previous SQL result sets. Function version of CFQUERY
QueryRowStructReturns all the data in a query for a given row but as a structure
QueryRunExecutes the given SQL query against the given datasource, optionally passing in paramters. Function version of CFQUERY
QuerySetCellSets the given column within a query with the value at the given row, or the last row if not specified
QuerySortSorts the query based on the column specified and the order criteria given. Modifies the original query object
QuotedValueListReturns a quoted list of all the values, for a given column within the query, delimited by the value given
ToCsvTransforms the query object into a Comma Separated Value (CSV) block
ToHtmlTransforms the query object into an HTML TABLE block
ValueListReturns a list of all the values, for a given column within the query, delimited by the value given


These functions will greatly increase the speed and efficiency to which you can work with Query objects.



Many of the functions where available using other means. For example, QueryDeleteColumn could have been achieved by performing a query-of-queries leaving out the column you wanted to remove. This however had a huge overhead, as well as duplicating the data.



You can read more about the DataSource functions over at Alan Williamson's blog.

Thanks to Peter J Farrell for many of his suggestions.




One word. Woot! Happy New Year!

A little background on my blog: The Harmonious Programmer

For those of you that know me, I got my bachelor degree in music. The Harmonious Programmer blog is a homage to the Air "The Harmonious Blacksmith" which is the final movement of Suite No. 5 for Harpsichord by George Frederick Handel.

The title image header of my blog is photograph of a painting -- a harmonious blacksmith in "Habit de Marêchal" by Nicolas de Larmessin II (1638-1694).  Larmessin was a French engraver and print producer.  His works are now in the public domain and thank you to Wikipedia for the image file.

For those interested, here is a performance of the "The Harmonious Blacksmith" performed by Paul Nicholson on the harpsichord:

[youtube http://www.youtube.com/watch?v=rXeHd7Ovgjo?wmode=transparent]