2007 CFeMmys Voting Begins

The voting has begun on the 2007 CFeMmys. Todd Sharp began the CFeMmys last year, for the ColdFusion community to vote, and recognize, those who made contributions throughout the year. Somehow, someone made a mistake, and submitted Cutter's Crossing in the 'Best Blog' category. While I won't turn down any votes, it's a bit humbling to be included in such prestigious company (man, that's twice in two weeks!)

So, don't forget to head over and vote! Voting is through this Friday at noon. The competition has nothing to worry about, I couldn't bribe anyone even if I wanted too;) Best of luck to all the nominees!

ExtJS 2.0: Extending The RowExpander Plugin

Back on the 4th of December, the ExtJS team announced the official release of ExtJS 2.0. Sorry I'm a bit late to get to this, but I've been a little busy with a move, and other fun things. I had the excellent opportunity to preview the 2.0 release in advance, and I have to tell everyone that it is outstanding, a true work of art. The team has gone out of their way to pay attention to community feedback, gather information on the features that were most needed, and writing a truly elegant implementation of this library.

[More]

The Multi-Class BO Debate

Last Week, Peter Bell wrote a post, asking the ColdFusion community "How Many Classes Per Business Object?" The debate that came out of it was very interesting, with a number of people chiming in on the plusses and minuses around multiple classes. Some were in favor of multiple classes, some thought one was enough, a few thought the "OO Purists" were creating too much complexity.

[More]

I'm Speaking At CFManiacs 2008!

I can't be much more humbled than I am today. Last Friday I received an email from Steve Drucker, CEO of FigLeaf Software, inviting me to speak at the new WebManiacs Conference as part of CFManiacs 2008, May 19-23 in Washington, DC. FigLeaf is an Adobe partner, and has heavily been involved with ColdFusion, and the ColdFusion community, for as long as I can remember (Dave Watts, FigLeaf's CTO, at one time held an annual record, for three years in a row, for the most posts to the CF-Talk list [if I remember right]). The 5 day conference has an extemely impressive, and extensive, list of topics. Even more impressive is the caliber of the other speakers who have already committed to this conference. It is extemely humbling to be included in this company, many of whom helped me hone my skillsets along the way.

I'll be presenting Using and Extending the CF 8 AJAX Framework on Day 2, Lecture 4, 12 - 12:50 (date and time subject to change.) Here is a brief synopsis of my topic:

ColdFusion 8 provides a very robust framework for quickly prototyping rich 'ajaxified' applications, once again making 'the hard things easy.' This topic will cover a brief introduction to the new ajax components and functions included with ColdFusion 8, how they can quickly be used to provide very slick application prototypes, and how the use of the ExtJS API can further extend, or replace, that base functionality to create truly rich applications.
I'm very excited about this opportunity, and it looks like this will be a fantastic conference. I look forward to meeting some of you there.

CF8 Grid Renderers and Events Source

I had several people ping me for some sample code for my CF8 Ajax Grid: Renderers and Events posting, on (what else) custom cell renderers and event listeners. I have just uploaded a zip of commented source code to that post. Just click the 'Download' link at the base of the post for all the source code goodness:)

Back In Business

Alright, now I can get busy again. It's taken me some time, but I was finally able to find the personal bandwidth to set my home network back up. That means that I can now reconnect to my home server, with all of my sample code, playpens, Flex learning projects, etc., and that CFEclipse once again has something to connect to.

The weeks ahead are going to be fun, with a company holiday party, my daughter's impending sixth birthday, and the holiday itself, but I have a few things to put out here in the blogosphere for all the world to see. I have a cool extension to the ExtJS RowExpander plugin for the 2.0 DataGrid implementation, that needs a public sample before it's posted. A lot of folks have been asking for sample code for the cell renderer and cell click I mentioned in a recent post. And I still have to re-record a certain CF8 Ajax preso (hopefully this week).

So, I'm going to get back to work now to put together some code and some posts. Let me know what you're questions, comments, and war stories are.

CF8 PDF Manipulation: Pulling Text Out

So, this morning a friend called me up with a problem. They had received some PDF files from their insurance company, and they needed the data in Word or Excel for manipulation. Now, they could cut and paste the information, but this was time consuming. She went to the Adobe site, trying to find info, and saw 'ColdFusion' on the homepage. This sparked her brain, because she immediately went, "Hey, Cutter does something with ColdFusion! Maybe he can help me!"

Lucky for her, we now have ColdFusion 8, with it's built-in PDF support through the use of the CFPDF tag. I had to do a tiny bit of research on this, because Adobe's CF LiveDocs weren't overly clear, but I eventually found out that I could extract text with some very simple DDX processing directives.

Ray did a series of posts recently about working with PDF documents. Although none of them answered my question directly, he had written one about using the DDX processing directives. This sent me searching the Adobe site for more information, which is where I came upon the Understanding DDX developer documentation. Basically, by rewriting Ray's simple example, I was able to extract all of the DocumentText from the PDF and dump it into an XML file. First I need the DDX, which is just some simple XML:

view plain print about
1<cfsavecontent variable="myddx">
2<?xml version="1.0" encoding="UTF-8"?>
3<DDX xmlns="http://ns.adobe.com/DDX/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ns.adobe.com/DDX/1.0/ coldfusion_ddx.xsd">
4    <DocumentText result="OutXML">
5        <PDF source="Title"/>
6    </DocumentText>
7</DDX>
8</cfsavecontent>
9<cfset myddx = trim(myddx)>

Then, I verify the validity:

view plain print about
1<cfif isDDX(myddx)>
2yes, its ddx
3<cfelse>
4no its not
5</cfif>

Now, a little explanation. Looking at the DDX, you'll notice I've defined a result and a source. I had tried to define my file names here directly, but ColdFusion didn't like that when I hit the CFPDF tag. Apparently, when using the processddx action of the tag, you are required to define your inputfiles and outputfiles. Further study of the LiveDocs shows that ColdFusion is expecting structures for these defininitions. So, the DDX references certain structure keys (OutXML and Title) which you must define prior to processing your pdf.

view plain print about
1<cfset inputStruct = StructNew() />
2<cfset inputStruct.Title = "rptLauncher2.pdf" />
3
4<cfset outputStruct = StructNew() />
5<cfset outputStruct.OutXML = "words2.xml" />

You now have all of the necessary pieces. All that's required is your call to process your DDX directives.

view plain print about
1<cfpdf action="processddx" ddxfile="#myddx#" name="VARIABLES.doc" inputfiles="#inputStruct#" outputfiles="#outputStruct#" />

I CFDump the VARIABLES.doc to see my success or failure, which comes out just fine. I now have a file, words2.xml, sitting in my server's folder, which contains all of the content of the PDF file. Simple and sweet.