Web Software Architecture and Engineering – Life on the Bleeding Edge

Archive for September, 2009

ColdFusion 8.01 Cumulutive Hot Fix 3 Update (and Pain!)

I didn’t see this advertised anywhere, but it seems the CHF3 was re-released on 9/16/09 with some fixes.
The changes can be found @ http://kb2.adobe.com/cps/511/cpsid_51180.html.
Either way, with the pre-9/16 version or the post-9/16 I am seeing errors occasionally on our servers.
The errors say: “coldfusion.runtime.J2eeSessionScopeStub cannot be cast to coldfusion.runtime.J2eeSessionScopeStub” and they match the one found by Terry Palmer @ http://cfteeps.blogspot.com/2009/09/hot-under-hotfix.html.
Does anyone else have any experience with this?


MS-SQL Tip: Creating A Comma Delimited List From a Column

A lot of times we take functions like valueList for granted. When it comes to SQL Server, if we wanted to do something similar, we have to jump through a lot of hoops.
Fortunately, I stumbled upon an article covering different techniques on MS SQL 2008, 2005, and 2000.
Take a look, you won’t be disappointed.
Read more @ http://code.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=createacommadelimitedlist.

Defragment Firefox!

Did you know you can defragment firefox… what you would really be doing is cleaning up its internal database, but it works!
More details here:

Amazing SoCal Fire Photos

Half GB ColdFusion App Open Sourced By Defense Info Agency

I’d like to see this! Written in CF8, with tons of unique features!
Read more:

Has anyone seen this app? Looks like you have to jump through some hoops to get a copy.

Hiring Woe #1 – Building Apps from Scratch vs. Maintenance

Ok, as promised, I’m covering some hiring issues I’ve had over the past couple years.
One of the first things that comes to mind, when looking at a developer’s experience, is whether they have had any experience building things from scratch, or is most of their experience in just maintaining existing applications.
Now, don’t get me wrong, the issue isn’t actually that simple. If you read Andy Singleton’s blog post (of Assembla fame), he talks about how the number one developer qualification, in his opinion, is being able to build from scratch.
On the other hand, maintenance has its own benefits. You get to see the application grow over time, understanding and work on its weaknesses, respond to client feedback and re-work/refactor to improve etc.
The reason I bring this up, is that during the interview process, I ask about the applications they have worked on. A lot of times you will find contractors who jump from one new app to another, and with no sense of what happened to that, how it progress, whether what they built created value, or even actually solved the business problem it was built for. This is an extreme, and just building from scratch with no long term perspective is a negative in my book, no matter how good an “architect” you were.
To other group I often find, is people who have just maintained apps. They might also be contractors who got brought on to maintain an app, or people who originally built and stayed long into the maintenance phase. The problem I find here is that often times, contractors especially, will say: “Well, we just maintained it. We had to adopt to the coding standards (or lack thereof.” Basically, there was little innovation. They were not allowed to rock the boat, re-factor heavily, or even understand why the app was built in the first place. I often ask this group, what their experience is with frameworks, and the few that know what I’m talking about, mention that the client saw the benefits of transitioning to one, but they never did anything. The large majority who maintained apps come back and say, “framework??”
One word of advice: If you’re maintaining an app, and you have no experience with using a framework, at least spend some time on the side working on them, and be familiar with them. If you are just maintaining apps, and stuck in your little world keeping the status quo, then I can’t work with you. That ain’t life on the bleeding edge, right. 😉
So whatever your case, understand where you are. Trying to build apps from scratch, but also stick with them for some years before you move on. These are the people who are often the most balanced: they can speak to client needs over time, the evolution of the app, and even the dire straights of being stuck in maintenance mode. If you are in one extreme case or the other, look for an opportunity to try the other extreme and come towards the middle.

Verity Indexing for SQL Server – Some Tips

We’ve been using Verity for years. Needless to say, there is a reason I don’t have hair on my head. 🙂
I can’t wait to move to Solr. But in the mean time, we made several enhancement to our indexing that I wanted to share.
First, we have close to 30,000 records (many with large text fields) that get indexed almost hourly. These records are constantly being updated.
Every several days, we would have corruption or locking issues. We decided that we would do a full purge and re-index nightly to fix this issue.
In doing 30,000 records, Verity would freak out. I mean, before we could simply load all into memory via CFQuery, and pass it to Verity. That soon became unwieldy, not because of memory issues (another topic), but because Verity would throw up.
So the first thing we did was look up an industrial strength SQL script to page through the records. Here is the process we use:

  1. Purge Index
  2. Use Special SQL Script to grab 500 records
  3. Update Index
  4. Grab next 500
  5. Update Index
  6. Repeat steps 4 and 5 till we get to our record count
  7. Optimize

This works like a charm. Well, until last night when we started getting errors from the database. We do lots of SQL Server replication (another topic!), and it seems the tables we were indexing were throwing dead lock errors. Basically SQL Server 2005 found two processes asking for a lock on similar data and killed our index process. First off, we use the (NOLOCK) flag next to each table in our query. That should have prevented the issue. I found so many search results of people complaining why SQL Server is just plain not smart enough to handle simple locks issues like this. Anyways, I digress.
To resolve the issue, I added two additional lines to the SQL query pulling the data:
Hope this helps folks having similar issues.