Quick Tip For Installation of FTP Tasks in Flex Builder
I installed the dependencies for the FTP Task in ANT this morning and when I ran the ANT task I promptly got this error:
Could not create type ftp due to java.lang.NoClassDefFoundError: org/apache/commons/net/ftp/FTPClientConfig
Clearly, this means the FTP Client Config class was not where it was supposed to be. I thought I was doing the right thing by downloading http://commons.apache.org/downloads/download_net.cgi and http://jakarta.apache.org/site/downloads/downloads_oro.cgi, unzipping them into $FlexBuilderHome$/plugins/org.apache.ant_1.7.0.xxxxx/lib directory, then restarting Flex Builder.
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 http://www.silverwareconsulting.com/
His most interesting posts have been on Transfer, like:
- Dynamic Datasources with Transfer and Coldspring
- A Generic Decorator for Transfer - A Populate Method
- Using Transfer Decorators to Deal with Invalid Data
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 SlideSix.com
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!