ColdFusion and beyond…Python or Ruby?

I have been doing quite a bit of research to help decide which open source language would be a good choice to work in parallel with CF.

It seems that Ruby and Python are the dominant choices. I am aware of Groovy’s popularity amongst the CF community, and it’s justified with it’s ties to Java.

However, this decision needs to be as isolated as possible from outside dependencies. By that I mean, the most portable. No requirement for a JVM or a specific platform.

I stumbled on to this article To Ruby from Python outlining the differences between the two languages. It looks pretty straight forward, and it should be. It’s directly from the Ruby language site.

There’s more to this for me than just core language specifics. Most will say to choose a base language then decide on a framework. I can understand that, but I need to keep one factor in mind: learning curve.

Time is of the essence, and from what I have seen, some of the frameworks out there play a large role in development time. Rails is infamous in the Ruby community, but the word on the street is that it’s becoming dated. A new kid on the block, rather the ‘Chairman of the Board’, Sinatra is making quite an impression and gaining lots of traction. Especially, for whipping up a Proof of Concept in a timely manner.

In the Python scene, it’s Django that most swear by. After checking out their website and documentation, I was ready to roll with it myself. I kept on digging, just to be sure. It seems the web.py framework is a popular choice for rapid prototyping in Python. I have also heard that dealing with dependencies in Python and distributing development environments for teams is not a pretty process.

I am sitting on the fence right now. Looking for something to push me over one side or the other.

I am reaching out to the CF community, but by no means is it limited to just that realm. I am open to all feedback and suggestions.

Got Eclipse? Optimize your IDE (CFEclipse, CFBuilder, Subversive, etc)

I’ve been using Eclipse IDE for years now, and I purchased Adobe ColdFusion Builder shortly after it’s release. While my experience with Eclipse was always a bit fickle, I figured like any loving relationship it’s a game of give and take. I had the same feeling with ColdFusion Builder, which I installed as an add on to my existing Eclipse platform. While both proved to be essential in development, performance has started to waiver quite a bit, as of late. Eating up memory, constant processing, and frequent crashing had brought me to the brink of using NotePad++, but I couldn’t just give up on Eclipse. We’ve been through so much together. I also cannot afford any slow down in my development time. As we know, a good developer’s work load only increases with achievement.

So…what to do, what to do???

I figured it would be a good idea to get a clean install of Eclipse running. I even went to the extent of creating a new workspace. (That decision is totally up to you).

The clean install, however, is where my recommendation lies. The trick here is to grab the right Eclipse package for you. Or for that matter, the Eclipse ‘non-package’ and make it your own.

I must have stared at the Compare Packages page for what seemed like hours, and even downloaded 3 different ones before I found ‘the one’.

You won’t find it on the download page. You have to click on the Other Downloads link next to Eclipse Classic. That will take you to all the Eclipse project download links. Select the version of choice, I went with 3.6.1

Next, you will be presented with all the download links for the core distributions and then some.
The one I want to point out is under the Platform Runtime Binary section. Scroll down a bit, and you’ll see it.

Select the one that matches your OS configuration.

Now, the following is based on my experience. I am interested to hear from others, as well.

I am running a Mac (32 bit) and a Windows 7 PC (64 bit).
While I saw a dramatic improvement just by using this stripped down platform package, it was even more noticeable using the 64 bit edition. (Make sure you have a 64 bit Java JRE installed or point the Eclipse binary to one directly using the command line argument -vm “pathtojvm” when starting up the application.)
To my surprise, eclipse.exe was barely using any memory…don’t get too excited, javaw.exe was.

It’s nothing to be concerned about, I was actually delighted to see Eclipse running as it was meant to be.
In my opinion, the responsiveness of the IDE had never been better.

Remember, there are no additional packages installed in this distribution. Not one. You have to manually pick and choose what you want in your IDE.

So I loaded up the usual suspects:

-Subversive Team Provider (Helios)
-Subversive SVN Connectors (Polarion)
-SVNKit 1.3.2 Implementation (Polarion) *required for 64 bit
-Eclipse XML Editor and Tools (Helios)
-Eclipse Web Developer Tools (Helios)
-CFEclipse (CFEclipse)

I left Mylnn out for sake of time and confusion.

I setup another instance with:

-Subversive Team Provider (Helios)
-Subversive SVN Connectors (Polarion)
-SVNKit 1.3.2 Implementation (Polarion) *required for 64 bit
-Adobe ColdFusion Builder (Adobe)

There was no need for the XML and Web Tools since Adobe has Aptana under the hood.
(Which is where most of my recent crash logs indicated problems).

The 64 bit Eclipse will let you install CF Builder as an add on, and it will even start up just fine. It wasn’t till I tried to update to the latest CF Builder release that I came up short handed. The option in the menu was disabled, staring back at me in pale grey. Adobe has never denied it’s lack of 64 bit support for Builder, which I was fine with.

After getting a taste of the 64 bit with the options listed in the first set above, I have to take a break from Builder and re-visit CFEclipse. It’s running so fast and smooth, and I have yet to crash. My only complaint would be the CTRL+SHIFT+D when inside CFSCRIPT produces a dump() instead of writeDump(). That’s a feature or enhancement request for the CFEclipse team, nothing more.

On a side note, another reason for making the switch was the lack of portability with CF Builder.
I am one of those who has no trust in a laptop, especially company issued units. I rely heavily on my own external hard drive. I work on multiple platforms and on multiple machines. Portability is a key factor for me these days.

The 32 bit Eclipse IDE on the Mac with either set of options from above performs great. The portability issue is still a factor but at least the kernel isn’t.

It’s been a couple days, and I can say I am still impressed.

That extra overhead you save by eliminating the unnecessary components that come along with those Eclipse download packages obviously makes a difference. If you have the luxury of running a 64 bit OS, then the benefit is multiplied.

In no means, am I putting Adobe CF Builder down, maybe just pushing for a 64 bit portable version ;)

Microsoft SQL Server, Error: 64 A connection was successfully established with the server…

I was recently prompted by the following error message while attempting to connect to a MS SQL Server instance:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 – The specified network name is no longer available.) (Microsoft SQL Server, Error: 64)

It had been working previously, what could have changed to cause the problem?

I did a quick google but the suggested fixes had mixed results, and none solved my problem.

I stumbled on this article:
SQL SERVER – FIX : ERROR…

It wasn’t the answer to my problem, but it led me down the right path.

I was connecting to a MS SQL Server instance on a Virtual Machine I had running locally.
Recently, I installed tethering software for my mobile phone which had corrupted my windows network configuration.
Not saying that this you did the same, or were using a VM, but it helps explain the cause a bit.
I had to re-install my VM software, and the VM networking components were re-configured in doing so.

The IP address of my VM had changed.

That was the culprit.

The solution:

Go to the SQL Configuration Manager. (You can refer to the link above for a walk through with screen shots to get there)

Expand the SQL Network Configuration and click on the PROTOCOLS node

Right click on TCP/IP and open up the PROPERTIES panel

Select the IP ADDRESS tab

Make sure the values for the IP ADDRESS fields are correct and match the system it is running on.

Restart the service, and you should be back in business, I was.

On a side note, this is also the same place where lots of people get hung up when setting up remote access to a SQL Server instance.

Make sure you fill in the TCP PORT, even if you are using the default 1433.

MySQL Madness? INT(SIZE) what is it good for? Absolutely Nothin’

Close to nothing, at least from what I have been able to find.

The MySQL docs don’t say much to persuade me otherwise. I found a great post here.

It claims the only purpose for the SIZE on an INT field is to determine how many ZEROs to pad with when using ZEROFILL.

So I ask, does anyone know if this is it? Is there more to it?

I can’t believe I didn’t run into this earlier.
I’ve never been a big fan of MySQL, for other reasons. But it seems to be pretty popular. Has to be more to it than just being FREE.

YUICompressor CFC v0.1 Released

If you are looking for ways to minify, optimize, and compress your CSS and Javascript with ColdFusion, this is an all-in-one solution based on the YUI Compressor Java library.

It’s simple but powerful.

The project and code: YUICompressor CFC @ RIAForge

There is some sample code included with the download package.


project: YUICompressor CFC
author: Tom de Manincor
version: 0.1.1
date: 2/18/2010

-overview-
This CFC allows you to use the YUI Compressor Java library.

"The YUI Compressor is a JavaScript compressor which, in addition to removing
comments and white-spaces, obfuscates local variables using the smallest
possible variable name. This obfuscation is safe, even when using constructs
such as 'eval' or 'with' (although the compression is not optimal is those
cases) Compared to jsmin, the average savings is around 20%.
The YUI Compressor is also able to safely compress CSS files. The decision
on which compressor is being used is made on the file extension (js or css)"

This CFC adds some more flexibility. It accepts an input string or a file, as long as its valid JS or CSS.
You can also choose to return the compressed results back as a string or a file.

It is using the YUI components for both CSS and JS.
For more information on the YUI library visit:

http://developer.yahoo.com/yui/compressor/

-requirements-
ColdFusion 7 or Higher
JavaLoader (optional)
YUI Compressor Java Library (version 2.4.2 included)

-usage-
The constructor (init method) is required if using inheritance (ClassLoaderAdapter).

Since this is dependent upon the YUI Java library,
I have integrated a ClassLoaderAdapter that allows you to toggle between JavaLoader
or the CF native ClassLoader that will use libraries found in your CF class path.
Remember, if you are not going to use JavaLoader then make sure you put the yuicompressor-2.4.2.jar in your CF class path.
If this is the approach you choose you also have the option to discard the ClassLoaderAdapter.
Instead of using the YUICompressor.cfc and the ClassLoaderAdapter.cfc, rename and use the included YUICompressor_noinheritance.cfc.

-note-
Do not use the additional libraries that are bundled with the base jar. String Index out of range errors may occur.

-credits-
Joe Roberts

0.1 -INITIAL RELEASE- 2/18/2010
-JS and CSS compression supported
-auto detect input type
-allow input files or string
-output to file or string

Installing Railo 3.1.2 on Centos 5.4 with Apache and Virtual Hosts

I finally had the chance to install the latest Railo CFML Engine on my Centos 5.4 VirtualBox VM. I found a few good resources online, but still came across a few kinks, so I’d thought I would put together a recap including the work arounds.

Before you begin, you must have a Java 6 JDK installed. If you don’t already you can get it from the Sun Java Download Page

Note the installation path. For this example, I will be using:

/opt/jdk1.6.0_17

There are a few Linux dependencies. I never like to install things I don’t need, so I avoided the suggestion to install all ‘Development Tools’ from the Centos Add/Remove Software feature. Instead I used yum to install the noted packages. Later, adding to that list as I dealt with errors during the installation.

My compiled list so far:
automake
autoconf
binutils
gcc
libtool
httpd-devel
openssl-devel
lynx

I may have had others already installed, so if you find any that are not on the list, please post them.

Here is the command line to install them all:

yum install automake autoconf binutils gcc libtool httpd-devel openssl-devel lynx

Once yum has done it’s thing and all packages have been installed or updated, our system is prepared. Let’s get Railo installed.

First, we need to extract our installation package. If you haven’t downloaded one already, they are available at the Railo Download Page.

For this example, I have moved the tarball into the opt directory, where I will be installing Railo.

tar -xzf /opt/railo*.tar.gz

Clean up and remove the unused files:

rm railo*.tar.gz
cd railo
rm -rf httpd.exe install-service.bat remove-service.bat setup.exe win32
cd ..

The next part is a matter of preference. You can leave the Railo folder name as is, create a symbolic link, or just rename it.

In some situations, you may require multiple versions of Railo running but prefer one as the default. Symbolic links work nice there.


ln -s railo-3(hit tab to auto complete folder name) railo

#version specific
ln -s railo-3(hit tab to auto complete folder name) railo3

Another option is a Simple rename:

mv railo-3(hit tab to auto complete folder name) railo

#version specific
mv railo-3(hit tab to auto complete folder name) railo3

Railo is now unpacked, and just needs to be integrated with Apache Web Server.
It has a few scripts that do the heavy lifting. We need to configure and build the connector module Apache will use. This is where most of the earlier described linux dependencies are involved, so keep an eye out for any error messages.


cd railo3
./configure --with-java-home=/opt/jdk1.6.0_17 --with-apxs=/usr/sbin/apxs

It was mentioned to look for “checking for JNI in /opt/soft/java/include/linux … found”. That being an indicator of a successful build. Unfortunately, this is one of the areas, I had a number of errors, and even saw the correct JNI message. Hopefully, the list above of dependencies covers it, and you don’t see anything unexpected here. I was able to get away with a AC_PROG_LIBTOOL undefined error. I checked to make sure libtool was installed, and it was. Everything worked beyond this point, if you see this don’t be alarmed.

The next step, is to actually build the module file and have it installed with the other Apache modules. Before we can do this, we need to create a few symbolic links to take care of an installation bug.


cd /opt/railo3/modules/c/src
ln -s resin_os resin
ln -s resin_os resinssl
cd /opt/railo3

Now create the file using the distributed automake files:

make

The Apache integration is automated, as well:

make install

I had to make a few changes to my Apache configuration files, since I also have Adobe CF 8 and CF 9 running on the same machine. If you don’t this will still work, and is a good practice. It keeps Railo isolated, and the more familiar you are with Apache the more you will see how flexible this approach is.

Open the Apache conf file /etc/hettpd/conf/httpd.conf.
Look for the lines:

#
# mod_caucho Resin Configuration
#
LoadModule caucho_module /usr/lib/httpd/modules/mod_caucho.so
ResinConfigServer localhost 6800
CauchoConfigCacheDirectory /tmp
CauchoStatus yes

I created a virtual host for Railo and moved the added lines into it:


ServerName centos54r3
DocumentRoot /mnt/dev/src
LoadModule caucho_module /usr/lib/httpd/modules/mod_caucho.so
ResinConfigServer localhost 6800
CauchoConfigCacheDirectory /tmp
CauchoStatus yes

SetHandler caucho-status


Keep in mind, a few of these values are specific to my setup. The ServerName and the DocumentRoot will vary.

I also added the Caucho Status location. It’s a nice reference, and also a good test page.

Almost there…

Let’s update our Railo instance so that it is in sync with our virtual host.
Edit the /opt/railo3/conf/resin.conf. You can add your own host definitions in here, but for now I just updated the default host entry. It now points to the DocumentRoot of my Apache virtual host.




One last step before we can start up the resin server. We need to add a few values to the start up script. Open up /opt/railo3/bin/httpd.sh in a text editor and add your JAVA_HOME and RESIN_HOME paths after the initial comments or anywhere before the beginning of the script.


JAVA_HOME="/opt/jdk1.6.0_17"
RESIN_HOME="/opt/railo3"

Now it’s time to fire up the Resin server:

/opt/railo3/bin/httpd.sh start

To test your installation open the Admin URL from your client browser:
http://virtualhostname/railo-context/admin.cfm
For example, http://centos54r3/railo-context/admin.cfm

** Virtual hosts require entries in hosts file for the URLs to resolve. If you are not familiar with Virtual Hosts, please check the Apache docs.

Thanks to the Railo team for the initial resources:

Railo, Resin, Apache, and Linux PDF

Installing Railo on CentOS

Simultaneous CFML Engines using Apache HTTP Server on Linux or Windows

I wrote an article awhile back, No More WAR, demonstrating how to set up CF 7 and 8 without using the WAR files. Instead, I used CF in stand-alone mode and Apache’s Virtual Host configurations to create separate environments, that could run side by side.

I wanted to see if anything had changed with the JRun config that this technique depends on in CF 9. Fortunately, things remain the same in that department. The method is still applicable, and I am currently running: CF 7, 8, and 9 on both Linux and Windows platforms running Apache Web Server.

Why stop there? Let’s add Railo 3.1 to that list. For instructions on how to integrate Railo with Apache, check out this post.

DropIO CFC v0.1 Released – drop.io ColdFusion Library

Bringing the power of drop.io to ColdFusion.

drop.io is a handy cloud collaboration tool.

To quote drop.io:

“Use drop.io to privately share your files and collaborate in real time by web, email, phone, mobile, and more.”

“With the drop.io API, your app can leverage our core web-services to share what you want, with whom you want, how you want. Anything you can do with the drop.io interface, you can do via the API, so you can develop powerful extensions to the drop.io service, or cherry pick specific functionality from drop.io for your apps.”

Check out their web interface drop.io.

To use drop.io with ColdFusion, I’ve posted the project DropIO CFC @ RIAForge.

The download package includes a sample application, as well.

To find out more about working with drop.io check out the developer page.

Project ‘readme.txt’:

project: DropIO CFC
version: 0.1
date: 2/5/2010

-overview-
This CFC allows you to connect and work with drop.io's API.

-requirements-
ColdFusion 7 or Higher
drop.io API Key (free - http://api.drop.io/)

-usage-
The constructor (init method) is required.
There is a dependency on Javascript libraries for file transfers.
See the included js folder and code examples for integration.

To setup the code samples provided,
place your drop.io API Key in the createObject call in the onApplicationStart method of the Application.cfc
Follow the instructions on the page.

-note-
drop.io Developer Page: http://dev.drop.io/

0.1 -INITIAL RELEASE- 2/5/2010
-supports the following drop.io API methods:
createComment
createDrop
createFile
createLink
createNote
deleteAsset
deleteComment
deleteDrop
getAsset
getAssetEmbedCode
getAssetList
getComment
getCommentList
getDrop
getUpload
sendAsset
updateAsset
updateComment
updateDrop
uploadFile
uploadResponse

SalesForce CFC v0.7 Released – Call for Features for 1.0

SalesForceCFC has been stable, but there is always room for improvement. This version includes a few tweaks and clean up.

Download the code @ RIAForge

I would also like to put out a ‘Call for Features’ to put on the roadmap for 1.0

Some already suggested:
-support for SOQL sub/nested queries
-asynchronous HTTP calls

Please post your suggestions on the Forums @ RIAForge or just leave a comment here.

In addition, I will be including a base unit test collection to provide stability for future releases and customization. Along with improved documentation and code samples.

I’d like to thank Daniel Llewellyn and Pete Freitag for their contributions, as well.

0.7 -CHANGE LOG- 1/24/2009
- enhancement – added support for batch save
- enhancement – added support for AssignmentHeader
- enhancement – added support for EmailHeader
- enhancement – added result size to query return data
- enhancement – updated typing and case of component
- enhancement – increased default SOAP timeout
- deprecated – unnecessary setters (setServerURL,setSessionId,setLastLogin)

Speaking at NL CFUG – Battle of the Frameworks

Debating over the popular Coldfusion frameworks always leads to some interesting discussion.

Today, Model-Glue, Fusebox, and Coldbox will be facing off.

To introduce the code and theory, as well as the practicality each framework brings to the table, we will be presenting them with an application walkthrough.

Letting attendees see what’s in the pudding and leave with the proof.

Check the NL CFUG Homepage for more information.

Location: Adobe HQ, Hoogoorddreef 54-A, Amsterdam

13:00 – 13:30 Binnenkomst
13:30 – 14:15 Coldbox – Tom de Manincor
14.15 – 15.00 Fusebox – Erik-Jan Jaquet
15:00 – 15:30 Pauze
15:30 – 16:15 ModelGlue – Jochem van Dieten
16.15 – 17.00 Discussie frameworks
17:00 – 18:00 Borrel / Netwerken