Skip to content

Evaluating CMSes: cmsmatrix.org

One of the hardest decisions every developer faces is build vs buy. In general, build takes more money and time, but can deliver a program closer to the users’ needs with greater flexibility. Buy, on the other hand, limits extension of the software–only in ways that the creators have intended can you typically extend bought software–but delivers it quickly and for a known cost (unless you’re buying Oracle in which case, I hear, the price is negotiable :).

One of the harder components of deciding to buy is comparing features. This usually involves rummaging around websites, downloading evaluation copies and installing them. I’ve done a few of these (for open source portals, open source CMSes and bug tracking tools) and it’s interesting as well as daunting. There’s just a lot out there, and with limited time, I end up making decisions based on less than full fledged implementation. You can’t afford to entirely implement the solution using the proposed software, and every solution will cause you pain (including, for that matter, custom built solutions).

Regardless, a friend sent me a website that takes some of the tediousness out of evaluating CMSes. Sure, it’s not a replacement for downloading the software and trying it out, but it does give you a central starting point and makes it easier to quickly rule out possible solutions. I was also impressed by their inclusion of blogging tools and ease of use as well as the breadth of features compared.

Using XSLT to grab only certain RSS entries

So, as I’ve mentioned before, RSS can help you find a job. However, many jobs in my area are posted to a yahoo group (rmiug-jobs). I’m usually interested in seeing new contracts, even if it’s just to see how the market is doing. However, subscribing to this email list presents you with four choices:

1. Have your inbox flooded with job postings, most of which don’t apply to you. The benefit of this method is that when you do see one that applies, you can respond. Every single response I’ve received off of this list was in reply to a mail I sent minutes after seeing the job post; I’m guessing that almost 8000 members means that any job posters are flooded with resumes.

2. Create a filter so that all the mail messages (or even the ones with interesting subject lines) are pushed to one folder in your email client. This means that your inbox isn’t flooded, but that you have to read that folder regularly. I didn’t do that often enough to be worthwhile. In fact, as the messages piled up in that folder, I felt less and less able to read it. In addition, you may have issues if your filtering rules are complex (I want A and B but not C), though not if you use procmail.

3. Get the daily digest and miss out on timely job postings. I did this for a few months and found that I almost never read the large digest. I just felt guilty at the bandwidth wastage.

4. Use the search functionality to periodically check for postings of relevance to you. This helps with research, but doesn’t deal with the time issue. And, you have to remember to check periodically.

However, now there’s a fifth solution. Yahoo provides an RSS feed for that group. (Not all groups seem to have rss provided for them, and I couldn’t figure out how to turn it on for a group that I moderate.)

With the magic of XSLT, I was able to write a stylesheet which only grabs entries with interesting keywords in the title, thus avoiding the flooding problem. RSS is not real time, but it’s can be close (as close as I want/am allowed to poll the feed). Additionally, I’m a lot more likely to scan it than I would any of the email solutions.

Here’s the relevant XSLT:

<xsl:template match="item">
        <xsl:variable name="item_link" select="link"/>
        <xsl:variable name="item_desc" select="description"/>
        <xsl:variable name="item_title" select="title"/>
        <xsl:variable name="uc_item_title" select="translate($item_title,'boulderjava','BOULDERJAVA')"/>
        <xsl:choose>
           <xsl:when test="contains($uc_item_title, 'JAVA')">
              <li><a href="{$item_link}" title="{$item_desc}"><xsl:value-of select="title"/></a></li>
           </xsl:when>
           <xsl:when test="contains($uc_item_title, 'BOULDER')">
              <li><a href="{$item_link}" title="{$item_desc}"><xsl:value-of select="title"/></a></li>
           </xsl:when>
           <xsl:otherwise>
           </xsl:otherwise>
        </xsl:choose>

</xsl:template>

The reason for the translate cheesiness is that the version of the perl RSS module I’m using does not support the upper-case function (here’s a useful list of XSLT functions).

“The Enthusiastic Employee” Author Interview

Here’s a very interesting interview with one of the authors of “The Enthusiastic Employee”. Updated 12/2/2006: Apparently you now have to sign up to view the interview. Here’s a tidbit of the interview to let you know if you want to sign up for a free account:

Knowledge@Wharton: Your research shows most workers are happy at a new job for about six months before the honeymoon ends. What goes wrong?

Sirota: We are often asked how to motivate employees. Our response is, that’s a silly question. The real question is: ‘How do you keep management from destroying motivation?’ When we look at the data we find that people coming to a new job are quite enthusiastic. Most of them are very happy to be there and looking forward to meeting their new coworkers. But as you study the data you find morale, or enthusiasm, declines precipitously after five or six months. One theory is that there is a natural honeymoon that is bound to end. And yet we find that in 10% of companies the honeymoon continues throughout a worker’s entire career. So there are organizations that are able to maintain enthusiasm.

As a general proposition it is hard to be enthusiastic about an organization that is not enthusiastic about you. Let’s look at a few specific things. One is job security. We expect employees to be enthusiastic, loyal and engaged in an organization, but with the slightest downturn or prospective downturn we get rid of them. They are expendable. They are treated like paperclips. How can you be loyal and committed to an organization that seems to have absolutely no concern about your job?

“The Enthusiastic Employee” at Amazon.

Article Clipping on the Internet

How many times have you been reading a print magazine and run across an article that would be of intense interest to one of your friends? This happens to me often, and when it does, I either rip out the article or give the magazine to my buddy (if it’s my magazine) or make a copy of the article, if I’m in the public library.

I also subscribe to Salon.com, a liberal online news magazine. On Sunday, I was talking to my mother about health issues and mentioned that today’s kids are the first generation to have a shorter life expectancy than their parents. This was from Growing Up Too Fat a recent Salon article. Like most of the articles, it was considered, well written, and entirely inaccessible to non subscribers. I would have loved to shot my mother the link to the article. This would have introduced her to Salon and its excellent journalism. However, I couldn’t do this easily because to view the article she’d either have to be a subscriber or view a commercial, neither of which she’d be willing to do.

Why isn’t the analog of the print article copying that we all have done available? I can think of a technical solution right off the top of my head that would generate a one time link that could only be used for a specific article (preventing someone from handing out subscriptions) and only once (preventing someone from posting the link to slashdot). My mother win, since she gets useful information via a reliable source (me). And Salon wins, because they’ve just gained exposure and also made me a happier subscriber.

There’s no reason why this same technology can’t be applied to any website that has subscription based revenues. Other than the development and the incremental bandwidth cost, it’s free to the website, and it exposes the website in a positive light to people who are, by definition, not subscribers.

Book Review: Saving Capitalism From the Capitalists

If you’ve seen ‘Meet the Fockers,’ you probably remember the scene where Greg’s parents have constructed a shrine to him, full of 8th place medals and the odd 10th place ribbon. Greg apparently didn’t do too well in competition, but his parents loved him anyway. Not everyone is so forgiving, and most people had competition. To rephrase that, most people hate losing at competition–winning is just fine, thank you very much. In a free market system as well, most firms and people don’t like competition–it forces firms to respond to customers and people to work harder. However, the overall benefits to society are larger in a system where everything is competitive.

Saving Capitalism from the Capitalists, by Rashuram Rajan and Luigi Zingales, examines competition from an academic perspective, choosing to focus on financial markets. As you’d expect from two economics professors, they argue that markets are the most powerful economic invention of all time, and the solution to many problems facing us today is to make them more prevalent. However, the central thesis of their book is that markets depend on governments for vital infrastructure (rule of law, contracts, etc) and thus depend on politics. Because of the nature of politics the interests of a focused few can outweigh the interests of a diffuse many. This means that government regulation of markets can be easily hijacked by those with disliking competition to smother it.

The authors examine many cases where this hijacking occurred, from developed and developing countries and many different time periods. They focus on finance because free flow of capital has a magnifying effect on competition since upstart produces of goods often need capital. The focus is on incumbent firms, who are usually the party with the will and ability to influence the government to put the needs of the few over the needs of the many.

Other issues they tackle include the emergence of financial markets, whether finance benefits the rich disproportinately, and how the free markets of the early 20th century were rolled back in the 1930s and what replaced them.

Well written, if dense, this book would have been average had the last chapter, which proposes solutions to the political vulnerabilty of markets, been omitted. However, with their proposed solutions, which build on the foundation that they laid out in previous chapters, I feel that this book is a useful read for anyone interested in knowing how the world works and might work better. In addition, I think it’s wise and brave of them to trumpet that current markets aren’t really free but instead are usually hijacked by powerful incumbent firms. This is something that you don’t hear economists acknowledge often enough.

“Saving Capitalism From the Capitalists” at Amazon.

Metafor: Using English to create program scaffolding

Continuing the evolution of easier-to-use computer programming (a lineage which includes tools ranging from assembly language to the spreadsheet), Metafor is a way to build “the scaffolding for a program.” This doesn’t mean that programmers will be out of work, but such software sketching might help to bridge the gap between programmers and non-programmers, in the same way that VBA helped bridge that gap. (I believe that naked objects attacks a similar problem from a different angle.) This obviously has implications for novices and folks who don’t understand formal problems as well. Via Roland Piquepaille’s Technology Trends, which also has links to some interesting PDFs regarding the language.

However, as most business programmers know, the complicated part of developing software is not in writing the code, but in defining the problem. Depending on how intelligent the Metafor parser is, such tools may help non-technical users prototype their problems by writing sets of stories outlining what they want to achieve. This would have two benefits. In one case, there may be users who have tasks that should be automated by software, but who cannot afford a developer. While definitely not available at the present time, perhaps such story based software could create simple, yet sufficient, applications. In addition, software sketching, especially if a crude program was the result, could help the focus of larger software, making it easier (and cheaper!) to prototype a complicated business problem. In this way, when a developer meets with the business user, they aren’t just discussing bullet points and static images, but an actual running program, however crude.

The label tag

An HTML tip for you: the label tag is a boon to usability. If you it should take you to

Small touches like this make it much easier to build forms that are forgiving in terms of user input–you can make clicking a checkboxes easy for the mouse impaired.

Doing this kind of control extension used to take a bit of javascript, but now the label tag makes it easy. Looks like <tag> is supported in modern browsers (Moz 5, IE 5).

Quartz and java job scheduling

I’m working on a stand alone java application that needs some fairly sophisticated scheduling capabilities, more than java.util.Timer can provide. Normally, I’d reach for trusty old cron, but in this case, it’s a java program that needs to be run on both unix and windows with a minimum of fuss.

Quartz to the rescue. This open source java package lets you schedule a myriad of executable objects in many different ways. There are many different ways to use Quartz; there’s a nice tutorial here, and the Quartz javadoc is pretty up to date.

All I’m using it for is a cross-platform cron replacement, but it does seem to have large number of other features. The one that I’m not using that seems the most useful is the ability to differentiate between activities (a Job) to be scheduled, and the events, be they time or otherwise related, that should cause those activities to be executed (a Trigger). Nice orthogonality, but for my purposes, overkill. However, I can see the usefulness of this feature.

The coolest feature that I am using is JobExecutionContext.getScheduler() which allows any job running to access the scheduler in which they are running. They can delete themselves, verify that other jobs are working, and even shutdown the scheduler.

If you have to do scheduling in java, you should take a look at Quartz. (Here is a survey of job scheduling options in Java.)