Monthly Archives: January 2009

Stop Looking for ColdFusion Developers

One of the biggest complains I hear from management types about ColdFusion is that they can’t hire good ColdFusion developers. I think that this occurs because people often overlook one of ColdFusion most accepted benefits. ColdFusion is exceedingly easy to learn. Which leads me to my biggest piece of ColdFusion hiring advice – don’t look for good ColdFusion developers, look for good web developers, if they know ColdFusion, great, if not, teach them, or let them learn it.

The argument I hear back on this point is “we don’t have the time of resources to train someone; we need them to hit the ground running.” I think this is penny wise pound foolish. Based on anecdotal evidence only, I would contend that it takes an average web programmer about 1 or 2 months to learn ColdFusion. (This assumes they know HTML, CSS, SQL and another server side language.) I’ve seen some ColdFusion job hunts take upwards of 9 months. You can’t afford the month to train an employee, but you can be without them for 9 months? That doesn’t make a lot of sense to me.

Add to it that for the cost of 1 or 2 months, you get a ColdFusion developer who knows another language. Developers who know more languages tend to be better. ColdFusion programmers that know Ruby for example are usually better Object Oriented ColdFusion developers through the knowledge they picked up in Ruby.

Now, I’m not arguing that you shouldn’t hire a ColdFusion developer if you can find one. I happen to know a few that are looking for work. I also don’t mean to suggest that finding a good web developer is necessarily that much easier than finding a good ColdFusion developer. Finding “good” people is never easy, but I am arguing that you need to increase your chances of finding someone to fill your position. You can do this by opening up your search criteria, and letting one of the major selling points of ColdFusion actually work for you.

What do you think, does this agree with what you’ve seen in the job market of late?

…Hello Adobe

Wow that took less time than I thought… So yeah, I’m joining Adobe. Specifically I’m joining Adobe’s Platform Evangelism group. I’ll be working under Kevin Hoyt with the team that includes Ryan Stewart, Lee Brimelow and Danny Dura amongst others and ultimately headed by Ben Forta. So it will take all of my composure to not, you know, break down into an Adobe fanboy in my first staff meeting.

What does that mean? It means that I will be working with the rest of the team to spread excitement about the Adobe Platform Products:

  • Flash
  • Flex
  • Air
  • ColdFusion
  • LiveCycle
  • Flash Catalyst
  • BlazeDS

I’ll be promoting the entire platform, but considering my experience to date, I imagine that I’ll start with a slight focus on ColdFusion and AIR.

However in addition to that focus I will have an overriding goal:

Get Adobe Platform Technologies taught in the classrooms of Higher Ed.

It’s a big goal, and not a trivial challenge. I see a lot of different paths to achieving it. I can’t wait to work with all of you to accomplish it.

And as my first act of Evangelism I will remind you once again that both ColdFusion and Flex Builder are available free to Higher Education. All you have to do is go to one of their respective “freeriatools” sites, fill out a form, and upload a picture of your Academic ID.

Goodbye Wharton…

Today I handed in my resignation from my position at Wharton Computing.

Wow, you have no idea what a major shock to the system that is for me. I have been working at Wharton since June of 1999. 10 years. 10 yeaaaaars. 10 years.

I started as an entry level desktop support person for some faculty and the student course pack print shop. I moved on to become a system administrator. Joe Cruz introduced me to ColdFusion. I helped setup classroom technology for two new Wharton facilities: Wharton West and Huntsman Hall. I took over the ColdFusion Administrators group. I moved on to WRDS, and ended at Knowledge@Wharton.

I’ve worked for almost every directorship in Wharton Computing. I witnessed 2 major technological catastrophes: the Exchange Disaster of 2001 and the Mother’s Day Craptaculon of 2005.

Wharton has provided me with the opportunity to meet and form relationships with about a dozen major vendors including Adobe, Microsoft, and Dell. It’s allowed me access to the wider technology community in Philadelphia. It’s allowed me the opportunity to work as co-workers with some of the smartest people in the technology community. Finally, it’s given me the opportunity to participate in the ColdFusion community which has given me a group of friends and colleges which straddles the entire globe.

As my year count at Wharton grew, I was often asked why I hadn’t moved on with my career. I think it’s obvious. I moved on with my career about 3 or 4 times, it just so happened that I stayed with the same employer. There’s always more to do, there’s always some place to go here at Wharton.

Add to the brilliant co-workers, and the career opportunities – an incredible benefits package, freedom to experiment and flexibility to live, and Wharton’s pretty hard to beat.

On a personal level, I met my wife here. We carried on a relationship for quite a few years before everyone knew we were together. I proposed during the aforementioned Mother’s Day Craptaculon. (At home though, not at work, that would be a bit too much.) We were married with co-workers amongst the crowd. We had the same boss at the time. My son was born while I was here, and was born in a hospital that was part of the same University system as Wharton.

This leads me to the University of Pennsylvania, where I have spent nearly every day (summers included) since 1995. If Wharton shaped who I am professionally, Penn shaped who I am personally. Penn convinced me that Clinical Psychology was no career for me. Penn has pretty much given me every one of my closest friends. (Except for a handful left over from high school.)

I was 18. That was 14 years ago. 14 years before that I was 4. It’s not hyperbole to suggest that this signals the next major section of my life.

So wow, I didn’t mean to get so sappy, but I guess I really do like this place. If you have the opportunity to work here, take it. I won’t claim it’s perfect, it’s not, and no place ever is. However, in this world and time of settling for a paycheck, it’s nice to have the opportunity to work for a place that encourages you to be part of something and to work to keep you with them while letting you take your career unfold the way you want.

I’m not quite ready to talk about what’s next, except to say that I’ve got something lined up. This is good, because I’d like this to be about my thanks to a place which has been so very good to me.

Thanks Wharton Computing, I’m going to miss you.

Digest Authentication in ColdFusion

I’m working with the ConstantContact API webservice, and ran into a slight problem. The API uses Digest Authentication, and ColdFusion does not support Digest Authentication in cfhttp. I found this out by reading in the live docs that:

The cfhttp tag does not support NTLM or Digest Authentication.

The ConstantContact forums pointed me to a custom tag cfx_http5. But I hate CFX tags. I like to place as few dependencies on the ColdFusion Administrator as possible when I code. CFX tags also tend not to make the trip the first time in server migrations or emergency moves. It might be my own prejudice but, no, there will be no custom tags.

Which leaves me to implementing some Java client, as luck would have it there was ample documentation on doing this. I just needed to use the open source Apache HTTP client. To work with them, I had to add them to the class path, or add an entry in the ColdFusion Administrator class path list. That would have bought me nothing, as I didn’t want to go through the administrator.

This left me looking for a way to dynamically call jar files. If only there was some way to dynamically call jar files in ColdFusion… preferably written by someone with a marsupial pouch…. Ohh wait, Mark Mandel wrote the Open Source project JavaLoader, which allows just that. Hmm, and Mark is a mammal from Australia. Things are looking good.

So I was able to build my http client with Digest Authentication. I added some code that formatted the response like a cfhttp struct, so that if there were other advantages to this method I could just swap out this for cfhttp in a pinch. The code is below in the extended section of this blog post.

I was trying to do 3 things with this post:

  1. Explain how to use Digest Authentication with ColdFusion
  2. Show how with ColdFusion Open Source community and ColdFusion’s ability to call Java, there isn’t much you can’t do with it.
  3. Further the rumor that Mark Mandel is a marsupial.

I hope I’ve done these three things for you.

var paths = arrayNew(1);
var rootPath = GetDirectoryFromPath(GetCurrentTemplatePath());
paths[1] = rootPath & "/jars/commons-httpclient-3.1.jar";
paths[2] = rootPath & "/jars/commons-codec-1.3.jar";
paths[3] = rootPath & "/jars/commons-logging-1.1.1.jar";
//create the loader
variables.loader = createObject("component", "javaloader.JavaLoader").init(paths);

var result = "";
var credentials = loader.create("org.apache.commons.httpclient.UsernamePasswordCredentials");
var HttpClient = loader.create("org.apache.commons.httpclient.HttpClient").init();
var httpGet = loader.create("org.apache.commons.httpclient.methods.GetMethod");
var AuthScope = loader.create("org.apache.commons.httpclient.auth.AuthScope");
var jURL = createObject("java", "java.net.URL").init(arguments.url);

if (len(arguments.username) and len(arguments.password) gt 0){
AuthScope.init(jURL.getHost(), arguments.port, arguments.realm);
credentials.init(arguments.Username, arguments.password);
httpClient.getState().setCredentials(authScope, credentials);
}

httpGet.init(arguments.url);
httpClient.executeMethod(httpGet);

result = convertHttpClientResponseToCFHTTPFormat(httpGet);
httpGet.releaseConnection();

return result;

var result = structNew();
var responseheader = structNew();
responseheader['Status_Code'] = httpGet.getStatusCode();
responseheader['Explanation'] = httpGet.getStatusText();
responseheader['Http_Version'] = httpGet.getEffectiveVersion().toString();
header = httpGet.getStatusLine().toString();

headers = httpGet.getResponseHeaders();

for (i=1; i lte ArrayLen(headers); i=i+1){
responseheader[getToken(headers[i], 1, ":")] = getToken(headers[i], 2, ":");
header = listAppend(header, headers[i], " ");
}

result['Charset'] = httpGet.getResponseCharSet();
result['ErrorDetail'] = "";
result['Filecontent'] = httpGet.getResponseBodyAsString();
result['Header'] = header;

if (structKeyExists(responseheader, 'Content-Type')){
result['Mimetype'] = GetToken(responseheader['Content-Type'], 1, ";");
}

result['Responseheader'] = responseheader;
result['Statuscode'] = responseheader['Status_Code'] & " " & responseheader['Explanation'];

if( not structKeyExists(responseheader, 'Content-Type') OR
FindNoCase("text", responseheader['Content-Type']) OR
FindNoCase("message", responseheader['Content-Type']) OR
FindNoCase("application/octet-stream", responseheader['Content-Type'])
){
result['Text'] = "YES";
}
else{
result['Text'] = "NO";
}

return result;

2009 Predictions in Higher Ed

Spurred on by Kevin Hoyt, who commented on my last post I have some predictions for technology in higher education as a whole.

First, a quick background. The economy sucks. This is good news and bad news for higher ed. Enrollment and applications will be up. Bad news, is that most institutions arenapost entirely funded by tuition. Money comes into schools from state governements and the federal government in addition to money from their endowments and donations. All of those sources will be down in the next two years at least. Also in the picture is that fact that because of institutional culture of tenure, and the compliance issues that come from taking federal money, most higher ed institutions cannot cut budgets by trimming employees from the books. Good news, you’ve still got your job, bad news, remember Ed who quit, you’ve got his too.

Cost savings will be sought elsewhere. This is going to lead to a contraction of commitments. Upgrades will be postponed. Technology investments (big virtual machine hosting hardware, SAN’s) will not be pursued.

So what will all this lead to…

Hosting
Up until now, a penchant for open source technology, and educational discounts have made schools prefer to host their own services a little longer than the rest of technological community. However, that was before the financial craptaculon. External hosting will be considered for applications which would never have been outsourced before. It’s already started for student email, IM, web sites, and storage. It will accelerate and be targeted for smaller burdens like staff email, intranet sites, and public websites.

Virtual Classrooms
Virtual classrooms where schools could sell an unlimited number of seats to an audience for a set cost has been a holy grail for a few years now. With cut travel budgets hitting continuing education dollars, and the rise in applications coupled with the pressure to bring in revenue, they will have no choice to squeeze every dollar they can. Expect a lot of activity here.

Development Language free for all
Because of the rise of hosting for previously unhosted solutions, there will be no lock in for particular platforms or languages. Want to try Ruby or make the switch to .NET? No worries, you don’t have to build an environment, just rent it. It provides opportunities for highly productive languages and solutions to re-argue their case to the higher education world.

Students
Students are going to be looking to either stay out of the job market for as long as possible, or get trained in skills that will more likely get them hired. Any schools out there have Flex or Ajax content in their program, congrats, your students are still marketable. Expect more focus on vocational skills, like specific languages to be the rage.