Blocking Comment Spam

Comment spam is annoying. Since I sit well below the A-List blogger rung, it isn't my biggest problem in the world. It is just annoying.

The super fine blogware I use has a feature for blocking IP addresses. Lately I have been updating this list with IPs from comment spammers. 90% of these IP addresses originate from China. I'm considering blocking the entire class A IP block for China. If you are a legit visitor who cares about what I write, leave me a comment and tell me how bad of an idea that is.

I'm willing to share my IP list with others. Here is the list as of May 28, 2008:


How to migrate from one database to another

I am a fan of most all Database platforms. I have used MSSQL 7/2000/2005, IBM UDB, Oracle 8/9i/10g, MySql 4/5 and PostgreSQL 7.3/8.1 in production. When working in multiple database platforms, there inevitably comes the need to port a database from one platform to another.

Rather than spend my days mapping and transforming a database schema, I use SQL Script Builder. SQL Script Builder is a tool that generates SQL scripts of a database and the data for 5 officially supported platforms:

  • MySql
  • MS SQL
  • Oracle
  • Pervasive
  • PostgreSQL

The last time I blogged about this tool it lacked proper key management. Newer versions have support for:


How do I make a distance traveled Maps (yahoo/google) feature

I've been asked to make a feature that works with one of the popular map APIs. This feature would take a Start Point, End Point and a distance value and would generate a map showing the progress from the Start Point to the End Point.

For example, if the Start Point was Seattle, the End Point was Chicago and the distance value was 1000 miles, the map API would be used to create a map showing both Seattle and Chicago, with a line about 1/3rd of the way there.

Ideally, the mapping API used would be a publically available API available without cost. Seems easy, right? I'm not sure where to start. I would appreciate all input at this stage.

Personal Liberties

This blog focuses on Technology issues, by and large. I do not make political statements, endorsements or other such posts, as much as I can help it. I am not endorsing any particular candidate or party with this posting either.

That said, Bob Barr was elected the Libertarian Candidate for President of the United States. I took a quick poke around his website to see what the fuss was about and came across this gem:

At the core of libertarianism is a trust in and respect for the personal choices of every individual. All Americans should be free to decide what is best for themselves and their families. At the same time, they must bear personal responsibility for the consequences of the decisions that they make, whether those decisions prove to be good or bad.

I could not agree more. On this Memorial Day, 2008, hearing those words brought a tear to my eye.....

Working with Transfer? Don't miss Bob Silverbergs Blog!

This year at CF.Objective(), I finally met Bob Silverberg in person. Bob, along with Clayton Partridge, runs the Toronto CFUG. Bob is an intelligent guy, fun to hang out with ( ask him about our Epic Golden Tee session at the Conference bar :) ) and is doing some very interesting things with Transfer.

I found out today that Bob has a blog. You can find it at

His most interesting posts have been on Transfer, like:

If you plan on using TransferORM to the max, Bob's blog should be on your list!

Mach-II 1.5 Application Skeleton

I've put together an application skeleton for Mach-II 1.5 applications. This application skeleton is a nice way to get a Mach-II application up and running quickly. Neil Middleton, Peter Farrell, Matt Williams and Erik Meier each contributed in some way and Neil Middleton was kind enough to create an ANT task to automate the process

The code has been contributed to the Mach-II group and should be available on the official site soon.

About this skeleton:

  • Shows best practice for integrating with ColdSpring using the ColdSpringProperty.xml
  • Will detect if you have ColdSpring installed correctly. If you do not, it will nag you.
  • Shows how to use the subroutine feature of Mach-II 1.5 (thanks for the suggestion Neil)
  • Shows a sample Listener and xml configuration
  • Shows a sample Filter and xml configuration
  • Shows a sample Plugin and xml configuration
  • Has an ANT task for rapidly creating new applications (thanks again Neil)
  • Points to correct Mach-II 1.5 DTD references


CFObjective() Refactoring in ColdFusion from Procedural to OO Presentation

I presented twice at the CFObjective() conference on Refactoring in ColdFusion from Procedural to OO. I love giving this presentation because it is the culmination of many many hours of practice and research expended when I made the transition from procedural programmer to OO programmer.

The basic premise of the presentation is how to take a pragmatic approach to refactoring. Rather than feeling the need to completely rewrite your application to achieve a good OO architecture ( Managers never like this idea), I offer a reasonable, incremental approach on moving pieces and part of your application at a time.

In the presentation, there are a handful of slides with guidelines and high-level talking points about migrating to OO and move right into the code samples. The code samples show common procedural structures and then a comparible Object Oriented structure. This compare/contract method helps programmers understand how to move toward common software patterns in their applications.

If you missed the presentation, and were not at one of the user group presentations I gave last month, you can still get in on the action by showing up at CFUnited. I've also included the slides and code samples in a zip. You can download it from the Features Pod on the right hand side of the page, or better yet, from the Flagrantly Cool

ColdFusion 7 error 500 Null with Custom Tags

I spent a couple hours diagnosing a 500 Null error. There was little information to go on and 500 Null errors are hard to figure out in general. Let's hope someone is helped by this.

The error resulted on a Linux Machine using CF7.02 with no updaters. The code in question was a set of nested custom tags all linked together using cfassociate. I dug through the code looking for any such potential null reference evaluations and chopped out large blocks of code at a time to try get the error to go away. If I took out enough CFML code, the error went away. It really didn't matter at all WHICH code I took out, just that I took out some mysterious amount.

The total lines of code in the custom tagset was less than 500 with no loops or anything that would jack up the lines of code when evaluated so this REALLY threw me for a loop.

Eventually, I updated to the latest updator for CF7 and the error went away. Strangely, there was no mention in the list of updater fixes, but trust me, the error went away. If you are having a similar problem, use ColdFusion MX 7.02 Cumulative Hot Fix 3 or later.

If you similar stuff going on in your applications, there is a good chance the ColdFusion MX 7.02 Cumulative Hot Fix 3 will sort it out for you.

Happy Skip Krenek Day

This probably isn't news to most of my readers, but in case you missed it, April 25th is Skip Krenek Day. While a special day isn't enough to pay tribute to such an excellent person, It is important to tip the virtual hat to Skip for all he has contributed to our society. I appreciate the many who have worked hard behind the scenes to make this particular Skip Krenek Day special.

Here's to Skip and to his many years of continual success!

Fix for Filezilla Failing to Retrieve Directory Listing

I use Filezilla FTP client to manage files on many servers. I had a specific Filezilla client that refused to retrieve a directory listing. Other computers could connect to the same server just fine. Thusly I knew it was a client configuration problem.

I ended up with messages like this:

Response:	200 PORT command successful. Consider using PASV.
Command:	LIST
Error:	Connection timed out
Error:	Failed to retrieve directory listing

I ran the Filezilla configuration wizard to diagnose the problem. The configuration wizard utility ran for a while reporting success until the very end. After timing out, I received the following messages:
Response: 200 PORT command successful
Response: 150 opening data connection
Response: 503 Failure of data connection.
Server sent invalid reply.
Connection closed

Searching the Internet led to not so helpful posts such as "Please read the Network Configuration guide.". After analyzing the situation, it turns out the solution isn't so obvious. My Client had the default setting of Connection -> FTP -> Active Mode: Get External IP Address From This URL. Which pointed to . This is the source of the problem. If you go to that URL, you will probably get a result of If the Filezilla client needs the external address, and is given, then there will be problems indeed!

If you have a similar problem with Filezilla, and the problem persists even when the Windows Firewall is disabled, here is what you need to do:

  • Open Filezilla, go to Edit -> Settings
  • Click on Connection -> FTP: Choose Active
  • Click on Connection -> FTP -> Active Mode: Select "Ask your operating system for the external IP address"
  • Click on Connection -> FTP -> Passive Mode: Choose Fall Back to Active Mode
  • Press OK.

Try connecting to your FTP site once again. Works!

Update: In some cases, and for reasons unknown, Filezilla just won't work. I have found that coreFTP is a nice FTP program that is free Windows software which includes the client FTP features you need. Features like SFTP (SSH), SSL, TLS, IDN, browser integration, site to site transfers, FTP transfer resume, drag and drop support, file viewing & editing, firewall support, custom commands, FTP URL parsing, command line transfers, filters, and much, much more!

If Filezilla still does not work for you after you follow the steps above, then install coreFTP and it will work just fine.