Pablo Varando's ColdFusion Blog

Looking for ColdFusion Developers....

I am looking for ColdFusion developers to work on a project I am working on. I need someone with 8+ years experience and who understands OO concepts. If you're interested; send me an email to : webmaster@easycfm.com.

I've been busy working on the new EasyCFM... In the 8+ years the site has been up; it's been a repository of tutorials and online forums; that's great but we need to bring in some new features and things to bring it into the new era... with that being said; new things are coming... soon! Stay tuned! (I don't want to spoil the surprises) :)

And yes, the developers I am looking for above are for the new changes.... so let me hear from you if you're interested!

~P

Tracking user clicks.... one way....

A few days ago a user on Easy asked a question about tracking users click through your site, like a breadcrumbs.... now naturally my suggestion was to insert a value to the database and then (based on the user's IP address) return back the data for display. This is still my favorite solution as it is quick and painless; the user however asked me to provide a solution that did not involve the database... so here goes nothing.... (disclaimer, use the database it's better and allows you to get data long term, but for a short timespan type thing this might help you... so I thought I'd post it.


Put this in your application.cfm or application.cfc
(onRequestStart).

<!--- create an application structure to track all
users --->

<cfparam name="application.clickStream"
default="#structNew()#" />

<!--- create an array in the structure for this user
(by ip) --->

<cfparam
name="application.clickStream['user_'&cgi.REMOTE_ADDR]"
default="#arrayNew(1)#" />


<!--- now insert this current page for this user --->
<cfset application.clickStream['user_'&cgi.REMOTE_ADDR][val(ar
rayLen(application.clickStream['user_'&cgi.REMOTE_ADDR]
)+1)] = cgi.SCRIPT_NAME /
>



<!--- THIS you can use to see the actual dump of all
users... --->


<cfdump var="#application.clickStream#" />

As mentioned before, the database is the best route; but this is one route you could go.

Free ColdFusion 9 Enterprise Hosting!!!

I wanted to post a little message letting everyone know that Free ColdFusionHosting.Com (Formerly CFM-Resources.Com) now supports ColdFusion 9 for your account. I upgraded it last night to provide you with the latest and greatest features. More features are in the works as we speak, the control panel is getting an overhaul so you can create your own datasources and more.... things are about to get "fun" again..... So what do you get for free?

The hosting accounts come with the following specs:

Free ColdFusion Hosting Account Details
  • Adobe ColdFusion MX 9 (Enterprise)
  • Windows 2003 Enterprise
  • 500 MB of space
  • 10GB of Bandwidth
  • 1 - MS SQL Database (MSSQL 2005)
  • Unlimited - MS Access Database
  • FTP Access
  • Access to all ColdFusion Tags and Functions
  • Debug on server is turned on to all public calls
  • Forum Support (post and discussion issues with others via our forums).
  • Note: If you would prefer to develop locally, always remember that Adobe does provide a FREE development version of ColdFusion MX 9, you can download it here

* Note that tags and functions might be removed if account is found to be abusing the service; removal will come without notice.

EasyCFM.COM - Get paid for your tutorial submissions!

Calling All Authors!!!

EasyCFM.COM has changed the way ColdFusion authors get compensated for their work, in the past we would hold contests and sweepstakes and if your tutorial won you would get a prize! We understand that as rewarding and exciting as this is; most people love to get paid for their work (even when they are helping others) no matter what!

With this in mind, we have created a new system to compensate authors posting their work on our site. Every tutorial you post will pay you out real money (based on a few different criterias):

  1. Length of your tutorial - By length we mean how many words exist in the tutorial, how much explanation do you put into it, do you really drive the user to understand your topic, etc. We're looking for the best authors out there, that can provide good explanations of how to do things with ColdFusion, so get creative, explain it in full detail and get paid more money!
  2. Quality of your work - We provide bonuses (after-the fact) to the most successful tutorials posted on the site. (and you can get more then one for a single tutorial... so you can continue to make money even after the tutorial has been on the site for a long time!) The bonus structure is based on feedback from our community, popularity of your tutorial, visitor ratings & feedback, etc). We will track it and then add money to your account instantly for providing high quality work!

So start making some money today, upload your fresh tutorial content and together we'll make EasyCFM.COM bigger and better; but more importantly; get some cash in your pocket!

What is a good ColdFusion Book these days?

You know, I read books on ColdFusion all the time (I fly a lot) to stay up to par with things, but mostly to get different perspectives on how people see and use ColdFusion in their own lives. We all have our own perspective and uses; and I like to see how others use it and/or teach it.. (the teach it part intrigues me, because I teach it too.. so i do my best to learn from others and see what works and what doesn't so I can do it better myself).

Recently, I got my hands on a copy of John Farrar's [ColdFusion 8 Developer Tutorial] and I have to say.. I think it's clearly written...it covers a broad range of subjects, but I think what I like the most is that it goes above and beyond most books. He clearly focuses on the readers and does everything possible to get you to get it... (if that makes sense).

I am not one to recommend books, I think tutorials and "demonstrations" work better when it comes to learning things, but I think that this book can teach people quite a bit and really get them to understand and master the coding logic that is needed to become a good developer.

If you have yet to read this book, I suggest you pick up a copy.. It's not only worth the cash.. but will also be a good reference later on.. Lots of Ajax in there too.. which I haven't seen in many other books (other than WACK... but that is another story!).

Overall, I would give this book a 4.5 (out of 5 stars) because it delivers a good range of topics, clear communication, and most importantly it helps with next steps!

Great Job John!
Keep them coming!


Want to get your own copy of the recommended book?

CFML (for mobile phones?)

I wanted to see if anyone out there is interested in helping me build a new CFML framework.

Why build a new framework when you have 50 of them out there now?
I want to make a Mobile Phone framework powered by CFML, Stylesheets and more.

I would like to build a CFML tag framework that would enable developers to build mobile compliant website, easily and quickly. If you have experience building mobile compliant web sites, please let me know (even if you can't help.. I might be interested in asking some questions or getting some feedback from you to get this framework going!)

I have registered a domain name "cfml.mobi" which I am finihsing up a site for; however if after we got this going we want to change the name as a team; I am willing to do that too, just trying to be pro-active! :)

I wanted to see if there was anyone out there interested in being part of the development of the framework. Let me know your thoughts and if you're interested in being part of the team... Drop me an email in this post!

Thanks,
Pablo Varando

What is the best way to show categories (and their children, and their children and those children)

Today I ran by a forum post on EasyCFM.COM (see it here) that asked for help in displaying categories. This can be tricky; especially if you have many parent/child relationships. So I thought I would post a blog entry talking about the best way I have found to do this... Here goes nothing..

First you need to create the database for it... so lets make a table and cll it "categories".

In that table you will need to have the following items:

categoryID int identity (autonumber).
category   nvarchar(50) (string/text)
parentcategoryID int (number)

Then in that database; we will put in a few records (Let's do (3) layers).

CategoryID    Category             ParentCategoryID
1             Automotive           0
2             Real Estate          0
3             Used                 1
4             New                  1
5             For Sale             2
6             For Rent             2
7             Homes                5
8             Apartments           5
9             Homes                6
10            Apartments           6

Now notice that you have two records that are "master" records... Or top level which have a parentID of "0". This means that these are the ones that will show up in bold and are special :)

Now inside of that we created a (3) level one as follows, the other one has only two levels:

Real Estate
   > For Sale
       > Homes
       > Apartments
   For Rent
       > Homes
       > Apartments

Now to show them on a page all the way down, can be tricky if you code it; since it will require you to loop through the ones with a "0" and then do another query and loop through it and then do it again and again... so how do you accommodate for as many levels as you may need.. (imagine one has 40 levels deep)....

This is wehre custom tags really do come in handy... You can do a custom tag that will call itself over and over and over until it doesnt need to anymore... So how do you ask?

Well, let's show you...

First lets create a custom tag and let's call the file "categories.cfm"; on this page lets put this code:

<!--- this is a custom tag that will loop over itself and show categories and their children --->

<!--- first let's allow you to pass in a variable that will tell the system which categories to show --->
<cfparam name="attributes.ParentCategoryID" default="0" />

<!--- now let's hit the database and call the records --->
<cfquery name="qGetCategories" datasource="#request.dsn#">
select categoryID, category
from categories
where ParentCategoryID = #val(attributes.ParentCategoryID)#
</cfquery>

<!--- now let's show the categories --->
<cfoutput query="qGetCategories">
<a href="apage.cfm?categoryID=#val(categoryID)#">#category#</a><br />
<!--- now here goes teh magic... here let's have it call itself (the same page) but with a different ParentCategoryID ID value so it gets this records children --->
<cf_categories ParentCategoryID="#categoryID#">
</cfoutput>

That's pretty much it... now on the main page (where you want the parent categories to always show up) let's call the custom tag with a ParentCategoryID of "0" (again, remember this is the master records).

<cf_categories ParentCategoryID="0">

How easy was that? Now this baby can go 1, 2, 10, 40, 60, 100 levels deep and you don't have to do anyhing else... Sweeet..

If you want to only force it to go "2" levels down... you can do this:

<!--- now let's show the categories --->
<cfoutput query="qGetCategories">
<a href="apage.cfm?categoryID=#val(categoryID)#">#category#</a><br />
<!--- now here goes teh magic... here let's have it call itself (the same page) but with a different ParentCategoryID ID value so it gets this records children --->
<cfif attributes.ParentCategoryID EQ 0>
<cf_categories ParentCategoryID="#categoryID#">
</cfif>
</cfoutput>

That will only run one time when you call the parent caegories... then the parent's grandchildren will not be show; because when you call that tag again for the third time.. the ParentCategoryID will be higher then zero... make sense?

Let me know your thoughts....

-P

Encrypt() - Decrypt() Issues in ColdFusion 8.... Ugggg!

So today I openned up an older application I previously developed in ColdFusion 7. I copied the files to my ColdFusion 8 environment and most everything worked... what didnt? Encryption and Decryption.

I was passing in a "path" that is supposed to get encrypted and then passed in the URL.. but I kept getting pure gibberish... so I openned up the ColdFusion 8 documentation and started my search for a soltuion.

This is the code I have in the ColdFusion 7 system; basically it's a UDF (User Defined Function) that will encrypt a string and then one that will decrypt a string; based on a common system key. Nothing fancy; but it shoudl work.... or should it?


<cfscript>
    //Encrypt a string and append it to URLEncrypted variables
    function EncString(theString){
        tNewString = Encrypt(theString, request.EncKey);
        tNewString = URLEncodedFormat(tNewString);
        return tNewString;
    }
    //Decrypt a string and return its value.
    function DecString(theString){
        tNewString = Decrypt(theString, request.EncKey);
        return tNewString;
    }
</cfscript>

So after a few hours of research, I found that I needed to add a few things to the code... particularly 'CFMX_COMPAT','Hex' those settings... without them it wasnt working! Uggg!


<cfscript>
    //Encrypt a string and append it to URLEncrypted variables
    function EncString(theString){
        tNewString = Encrypt(theString, request.EncKey, 'CFMX_COMPAT','Hex');
        tNewString = URLEncodedFormat(tNewString);
        return tNewString;
    }
    //Decrypt a string and return its value.
    function DecString(theString){
        tNewString = Decrypt(theString, request.EncKey, 'CFMX_COMPAT','Hex');
        return tNewString;
    }
</cfscript>

Apparently, the documentation says that "CFMX_COMPAT" is supposed to be the "default" encryption algorythm; however unless I define it... it wasnt working... Also you need the "Hex" definition right after it... I put that in and voila... it works!

Just wanted to post it on here as it might help someone later on!

ColdFusion 5 - Get Image Information....

There are a couple of ways to achieve this... I've found out once again.... It's been a while since I used CF 5... WOW what a difference 8 is to it... anyways, back to the topic.

The first way

<cfset imgFile = createObject("java","javax.swing.ImageIcon").init(expandPath('/images/fileName.jpg'))>
<cfset imgFile.getImage()>
<cfset imgWidth = imgFile.getIconWidth()>
<cfset imgHeight = imgFile.getIconHeight()>

For this however, Java must be installed on the server. I know it's installed by default with ColdFusion MX or higher... but not the case all the time with CF 5.

There are a few tags (This is the one I recommend) that will also do the trick; however some are cheap, some are free and the one I used costs around $100 bucks.

The tag is Efflare ImageCR (you can get it here: http://www.efflare.com )

You can read the documentation, but since the library is written in c++ it is compatible with CF 5... so there goes that... let me know if you have any questions!

Image Processing under ColdFusion 5.... A little blast from the past...

Today I ran by a post on the EasyCFM.COM forums; where the individual is still using ColdFusion 5 and is trying to get the image width/height values of a given image.

I know that CF 5 is a bit outdated; but I'm feeling a bit nostalgic and so I am gonna install CF 5 on a local box and see if I can get something going for him... I wanted to post a little something mentioning this as I will be posting a follow up shortly with a solution... wish me luck :) hehe

Back in a bit... :-)