The Future of Content Management

An interesting article on content management. I agree that infrastructure providers will subsume core functionality into their products. But the big question is whether a market for vertical solutions will be built upon that infrastructure.

IBM, Microsoft, and Oracle will ultimately define the fate of content management [by] promulgating the adoption of XML and Web services, pushing structured content to the employee desktop, and weaving content management functionality into the file and operating systems.

Pac-10 Should Stay at 10

Derek thinks that the Big 10 and Pac 10 will face pressure to expand to 12. While I think that he’s right about the pressure, I hope that the Pac-10 resists it.

An expansion to 12 would wreak havoc on the basketball schedule. The Pac-10 has a balanced 18-game home and away conference schedule. A 22-game schedule has no leeway for out of conference games and a divisional split eliminates existing rivalries. It’s going to be ugly when the ACC announces their two division basketball schedule, and I don’t think the Pac-12 will learn anything from that.

And where will the extra 3 football games come from? Who will be willing to schedule trips up to Washington and Oregon to play WSU, OSU or OU? And where will WSU, OSU, OU, Cal and Stanford play their extra road games? I expect that they’ll end up playing non conference games against teams in the other division.

When it comes to 12, the Pac-10 should just say no.

Setting Properties with Ant Tasks

In this Ant tutorial installment, we’ll take a closer look at setting properties. The combination of properties and conditional execution allows more robust build files that adapt to the computing environment. Start with this basic build.xml file.

1
2
3
4
5
6
7
8
<project default="set">
<target name="set">
<property name="status" value="false"/>
<echo message="the status is ${status}" />
</target>

<property name="status" value="true"/>
</project>

And then execute ant.

1
$ ant
Buildfile: build.xml

set:
     [echo] the status is true

BUILD SUCCESSFUL
Total time: 2 seconds

This demonstrates two characteristics of the property task:

  1. Properties are immutable. Once they are set, they stay set (with some inevitable exceptions). If properties were mutable, then the property assignment task would result in the message the status is false.
  2. Property tasks that are direct children of the project are executed before any target task is executed. In this case, the property assignment task is a direct child of the project and is executed before the target set.

Now let’s see how we can use the available task to set a property value. The available task can be used to test for the existence of a file or directory, test for the existence of a class in a classpath, and test for the existence of a system resource. We’ll just work with the first option, please see the fine manual for the other choices. This build file tests for the presence of foo.

1
2
3
4
5
6
7
8
9
10
11
12
13
<project default="all">
<target name="init">
<available property="present"
file="foo"
/>

</target>

<target name="exists" depends="init" if="present">
<echo message="foo exists" />
</target>

<target name="all" depends="exists" />
</project>

Execute this build.xml file twice. Once with an empty directory and once after creating file foo with the touch command.

1
$ ls
build.xml
$ ant
Buildfile: build.xml

init:

exists:

all:

BUILD SUCCESSFUL
Total time: 3 seconds
$ touch foo
$ ant
Buildfile: build.xml

init:

exists:
     [echo] foo exists

all:

BUILD SUCCESSFUL
Total time: 3 seconds

In the previous example, we only checked for the existence of foo. In this example, we will also identify whether it is a directory or a file. The available task’s type=”dir” attribute specifically tests for a directory and is used to set property isaDir. We could use the type=”file” attribute to set property isaFile but we’ll use the condition task instead. The condition task is the generalized method for setting parameters. Please see the manual for a complete list of the supported conditions.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<project default="all">
<target name="init">
<available property="present"
file="foo"
/>

<available property="isaDir"
file="foo"
type="dir"
/>

<condition property="isaFile">
<and>
<isset property="present" />
<not>
<isset property="isaDir" />
</not>
</and>
</condition>
</target>

<target name="exists" depends="init" if="present">
<echo message="foo exists" />
</target>

<target name="isFile" depends="init" if="isaFile">
<echo message="foo is is a file" />
</target>

<target name="isDir" depends="init" if="isaDir">
<echo message="foo is is a directory" />
</target>

<target name="all" depends="exists,isFile,isDir" />
</project>

Execute this build file three times. Once with an empty directory, once after creating directory foo, and once after removing directory and creating file foo.

1
$ ls
build.xml
$ ant
Buildfile: build.xml

init:

exists:

isFile:

isDir:

all:

BUILD SUCCESSFUL
Total time: 3 seconds
Ant/Setting 41 $ mkdir foo
mkdir foo
Ant/Setting 42 $ ant
ant
Buildfile: build.xml

init:

exists:
     [echo] foo exists

isFile:

isDir:
     [echo] foo is is a directory

all:

BUILD SUCCESSFUL
Total time: 3 seconds
$ rmdir foo
$ touch foo
$ ant
Buildfile: build.xml

init:

exists:
     [echo] foo exists

isFile:
     [echo] foo is is a file

isDir:

all:

BUILD SUCCESSFUL
Total time: 3 seconds

Disclaimer: I don’t claim to be an expert on ant. Please send comments and corrections.

Think Different

I haven’t forgiven baseball for the strike, but after 20 years in the Bay Area I still have a soft spot for the A’s and the Giants. With the recent release of Michael Lewis’s Moneyball, the A’s are back in the spotlight. Here in the NY Metro area, a reference to the genius of Billy Beane is likely to be countered by either “How many championships has he won?” or “It’s easy to be smart with Hudson, Mulder and Zito on the mound.” And I agree that the Beane’s analytical style of management is overrated.

However, Beane’s willingness to think different and take an independent course is vastly underrated. Baseball is an old-fashioned sport, set in it’s ways. Where else would a 72-year old Jack McKeon be brought on to rescue a floundering franchise? Beane is able to operate in his counterparts’ blind spots by thinking different. And that allows him to build a superior team on a limited budget.

There is a value to thinking different in business as well. If you commit to a common business approach, then you also commit to a well defined competition on a level playing field. But if you’re willing to think different and act different, then you might just tilt the field to your advantage.

Past Performance is no Guarantee

It’s been shown that many of us have no idea how good we are. So just how are we going to assess our strengths and weaknesses?

I’m a fan of Joel’s Painless Software Schedule. I like that it’s simple. I like that it recognizes that the schedule is worthless until you’ve resolved the design down to fine grained tasks. And I really like that it keeps track of the original estimate, current estimate, and actual time invested. Because while past performance is no guarantee of future results, it’s a heck of a lot better than anything else that we’ve got.

How good you are on an absolute scale is not as important as how good you are relative to expectations. Having data on past performance allows you to make better task estimates in the future and understand the relative strengths and weaknesses of your team. Now you have a shot at reconciling time, talent and expectations.

Mitigating Risk

Over on Swimming with the Razorfishes, Eric asks What should a project lead know [… to mitigate risk]?

You have to start with an understanding of the strengths and weaknesses of your team. Protection against everything only works against cooties in the schoolyard. But you may be able to structure your approach to mask weakness. If your team is weak in test, then you may want to take a test driven approach. If you’re weak in deployment, then you may want to arrange the schedule to allow meaningful trial deployments along the way.

When it comes to people, you usually have to play with the hand that you’re dealt. But if you understand your weaknesses, you may be able to arrange for some help at critical junctures of the project. And you can start to cultivate your team’s skills for the next go around.

What is the Relationship between a Portal and a CMS?

A portal aggregates information from multiple sources. It is meant to alleviate information overload by providing a common interface to interact with those sources. A content management system (CMS) is simply a potential information source. The two are often confused because most portal software includes some CMS capability and most CMS software includes some portal capability. In this context the term portal usually refers to an http-based Enterprise Information Portal (EIP) and this meaning will be assumed throughout this article.

An EIP provides a single point from which an employee may access all information relevant to the performance of the employee’s job duties. The information is usually personalized to the employee role to provide further insulation from information overload. The EIP will almost always include a CMS to manage the text content. Other potential information sources include the Enterprise Resource Planning (ERP) system, Sales Force Automation (SFA) system, Customer Relationship Management (CRM) system et al. Note that each of these systems is data oriented.

The CMS core competency is centered on the managing the process by which content is created, modified and distributed. Other information sources are usually handled by making them behave as content within the CMS framework. While simplifying development, this limits the ability to interact with other sources from the EIP. A EIP implemented within a CMS framework will be content driven and deviation from this paradigm will be painful.

The portal core competency is centered on providing flexible interaction with multiple information sources. Any source can be emphasized within the portal framework and different sources are more easily emphasized for different audiences. The portal framework makes it easier to interact with data through the EIP and supports a data driven EIP.

The minimal EIP usually consists of a CMS and another information source. It is usually implemented within the CMS framework because the CMS usually provides excellent facilities for building web sites. As additional information sources are added, or as data interaction requirements increase, the balance shifts from CMS software to portal software.

You can build an Enterprise Information Portal with either content management software or portal software. If your requirements are content driven, then a CMS solution is favored. If your requirements are driven by data interactivity, then a portal framework is favored. And if your requirements are somewhere in the middle, then you’ve got some homework to do.

Singh, Take a look at Yourself

Under intensity scrutiny, Vijay Singh started backpedaling from his previous comment on Annika Sorenstam playing the colonial. Rogers Cadenhead has already addressed the fallacy of Singh’s position. I’d like to know why Singh criticizes Sorenstam for accepting the exemption without criticizing the Bank of America Colonial for extending it.

Apparently Singh feels that the Augusta National has the right to choose who they associate with. That the Bank of America Colonial has the right to choose who they extend exemptions to. But that Sorenstam doesn’t have the right to accept that exemption. You can draw your own conclusion.

My next RSS Client

Yes, I have RSS on the brain. But as I think of the ways I would like to use RSS, I keep coming back to the same place. I need RSS and email integrated into my Personal Information Manager.

Because I’d like to tuck individual items away for future reference and execute a combined search over my RSS items and email. And I’d like to get a meeting announcement via a RSS feed and easily add it to my calendar. And have modifications in the meeting time and place propagate to my calendar.

I wonder who is going to step up to the plate on the Mac?

Anaheim's Wild Ride

The Ducks continue their wild ride through the Stanley Cup playoffs with two shorthanded goals in a 2-0 win over the Wild. Down 2-0 in games, the Minnesota Wild haven’t scored a goal in two games, an overtime period and change. And Giguère keeps proving that a hot goalie can take a team anywhere. It may not be pretty, but it sure is fun.