Squidhead Still Swimming

I’m pleased to announce that Squidhead is getting some more chefs. I’m pleased to announce that Nathan Mische and Dave Konopka are joining the effort. I’m excited about both additions. Dave was working with me when I first wrote Squidhead and has already contributed some code. Nathan is, of course, the lead developer on ColdFire.

We’re still working out what’s coming down the pike, but improvements will include:

  • A more organized and useful API to the database introspection piece.
  • A better template system
  • A configuration creator and editor

It’s all towards making Squidhead more useful and extendable. Expect new releases soon.

Knowledge@Wharton High School Coming Soon

I’m pleased to report that the Knowledge@Wharton team launched a pre-release site for the upcoming Knowledge@Wharton High School. If you are, or know any high school students send them along. We’re launching in February 2009, and as part of that, are holding an essay contest with prizes. I don’t think we’ve spelled out what those prizes are, but from discussions I’ve heard, they’re pretty awesome.

It’s powered by ColdFusion 8, and Flash Video. I worked on the backend details: hosting, network configuration, database CRUD. My co-worker Sanjay did the design and UI, and my boss Dave, did the Flash video setup. The time it took us to go from mockup to finished product was very short – we did this much quicker than I had done before for non-personal project. I know it isn’t a huge site, but after years of working on nothing but backend systems that never get seen by the public, it was extremely satisfying to work on something that wasn’t behind a corporate login.

A couple other things make me happy about this. Squidhead powered backend development, which made dealing with last minute schema changes a snap. It also used the core application framework that I’ve been developing for Knowledge. It was the first project we did with the new one click build process. It uses unfuddle.com, SVN commit hooks, ANT, and ColdFusion calling ANT to allow for:

  • Automatic publishing of SVN checked-in content to a shared development server
  • 1 Click publishing of checked in content to a shared development server (In case automatic is too slow)
  • 1 Click publishing of shared development space to staging
  • 1 Click publishing of staging to production
  • 1 Click publishing of SVN checked-in content to development to staging to production

This new model allowed for both a thoughtful develop and review process during development, and was flexible enough to allow for rapid content updates when we were rolling out production.

All in all, it was awesome to use all of the stuff I learned about over the past two years at cf.Objective to do my job.

Override URLSessionFormat

I received an interesting challenge today from my boss.

We recently switched from requiring people to be logged into the site to read our articles to being open, and only requiring logins to comment. Because of the previous restriction and a large amount of our audience being corporate users with cookies disabled, we have URLSessionFormat wrapping all of our internal links spread out over a few template pages, over a few of our sites. Now that we don’t have to be as careful about checking logins it would be better to make sure all of our urls are cleaner (i.e. not having the session information appended to it). My boss wanted to avoid having to edit all of those files. So that challenge to me was to figure out how to override c and make sure our urls were clean.

After fiddling with getPageContext to no avail I settled on this solution:

  • Grab the page content in Application.cfc:onRequest()
  • Replace any reference to the jsessionid in the page.
  • Output the page as intended

<cffunction
name=“onRequest”
output=“TRUE”
access=“public”
>
   <cfargument
name=“thePage”
type=“string”
required=“true”>
      <cfset

var pageContent = “”>
      <cfset
var token = “;jsessionid=#session.sessionid#”>

      <cfsavecontent
variable=“pageContent”>
         <cfinclude

template=“#arguments.thePage#”>
      </cfsavecontent>

   <cfset pageContent = Replace(pageContent, token, “”, “ALL”) />

   <cfoutput>#pageContent#</cfoutput>

</cffunction>

It’s not bad, and it doesn’t add a tremendous amount of overhead to every page, and would have worked if this was imperative to do. We decided however that string processing every single request was probably not preferable to just finding and replacing all of the URLSessionFormat() references.

Confused About the Economy?

The current economic crisis is catching many people flat-footed and confused:

  • Why did financial entities that survived the Great Depression go belly up this week?
  • What do the two campaigns really have to say about the economy?
  • What’s going to happen next?

If only there was some sort of site that took that sort of economic information from academic and industry experts and distilled it to the answers that you need… Wait a minute, I just happen to work for such a group…

This is my round about way of telling you all that Knowledge@Wharton (My current employer) has a special section this week on the Financial Crisis, and it’s powered by ColdFusion and Flash Video.

CFLocation and Safari

I had a weird issue today , and I thought I’d share.

I was having trouble reproducing an issue that a client was reporting in the flow of a page that was posting back to itself. No matter what I did I couldn’t get it to occur on my machine.

I then went over a dump of the cgi scope and noticed they were using Safari. I gave it a try, and BOOM, same problem.

I looked at what was happened, and it looked like the querystring of the last request was added to the querystring of where I was trying to cflocate.

So I was posting to “?method=delete_process&id=1” and cflocating to “?method=list” when I was done. Firefox tried to cflocate to “?method=list” but Safari posted to “?method=delete_process&id=1?method=list”. This caused the error, as id=1 was already deleted, and even if it wasn’t id=1? was invalid.

The fix was to prepend “#cgi.script_name#” before the question mark.

After a quick search, it turns out that this has come up in Forum over on Ray’s site (cflocation & safari).

Knowledge@Wharton interviews Adobe Co-founder

Last week’s issue of Knowledge@Wharton (my current employer) featured a pretty cool interview with Charles Geschke, one of the co-founders of Adobe. There’s a lot of great content, from stories about Steve Jobs and the beginning of Adobe, and the story of how they dealt with a hostile takeover attempt from Quark.

One of things I found was interesting was the inclusion of an internal document that outlined Adobe’s corporate values. It was a pretty interesting window into their overall philosophy, and a clear sign that as a company they are discouraged from wasting people’s times in meetings.

Check it out – Driving Adobe: Co-founder Charles Geschke on Challenges, Change and Values.

Speaking at ColdFusion Unconference at Max

Thanks to being quick on the old reply key I got myself on the speakers list for the ColdFusion Unconference. I’ll be speaking on Wednesday Morning at 9:30.

My session is on Formal Code reviews. I’ve spoken on them before, so I think I’m going to add a twist to achieve the whole “unconference” vibe. I think after I give my presentation which outlines how to go about code reviews, we’re going to go through that process with a piece of code. Granted it won’t be a full blown application, but it should give people a chance to actually feel how it works when you’re doing it the way I call right.

If anyone has anything they would like to hear or see discussed, let me know.

Starting a New Job

So once again, I’m moving jobs. I’m still with the Wharton School. However, now I will be working for Knowledge@Wharton. I’ll be working on small and medium sized projects, working on growing the backend platform, and anything else they tell me to do.

I’m pretty excited about the move. I’ll be joining a great team, it gives me an opportunity to work for a former boss again, and it’s a lot easier to point someone to a public site like Knowledge as an explanation of what I do.

I start Tuesday, after a visit to DC this weekend.