Sunday, September 24, 2006

The Evolution of Content Management

Edit: Seems Writely doesn't publish images onto here. Argh.

It is challenging to make a clear distinction that separates WCM systems from similar information systems. To explore this one must understand the possible ways to do web content management. Various architectures of implementation exist. One possible categorization is presented here.

These four levels are a way to divide the physical management of content. In general one can say that the higher use of web content in a company, the higher level its WCMS implementation should be. The separation is historical and drawn from my personal experience with web development through the last decade, therefore the evolutionary approach.

Static files on a web-server

The most basic strategy is to compose static HTML files and transfer these to a web server capable of serving such files to clients connecting to the web-site. It is possible to apply styles to the pages, for example with the help of cascading style-sheets (CSS).

Content wrapped in templates

The next level of content management is attained when the editor wishes to re-use the design of the web-site by dynamically including content into a frame of finished design, or a template. The content is typically contained in a text file the dynamic page engine

can read. Examples of technology capable of this are Server-Side Includes (SSI), Simple Common Gateway Interfaces (CGI) [Dudek, 2003] and XML-documents using XLST transformations [Weitzman, 2002]. The HTML standard also has a command called frames to include nested web-pages, although professional web designers and developers frown upon the use of this deprecated function [Nielsen, 1996].

Dynamically generated content

More complexity arrives as the re-use of templates is pushed further, having a template dynamically selecting content source based on a dynamic parameter. This is not possible with SSI as you have to provide each separate content page with its own physical HTML file. This means two files for any page on the web-site, one with content, another with design. Many find this to be too cumbersome and end up putting both files inside one, thereby mixing content and design. If a dynamic parameter is possible, as is the case with scripting languages such as PHP (a recursive acronym), Active Server Pages (ASP) or JavaServer Pages (JSP), one can have the template select and read the content file conditionally, thereby removing the need for its own HTML file [Challenger, 2005].

Content stored in a repository

The next step is to remove the content files to replace them with something more scalable. Native files have many disadvantages: they are not versionable, backup-routines require mirrored copies, search is not easy, binary files like picture and video can not be wrapped with meta data, there is no fitting access control and the possibilities for collaboration is limited. Instead the content is put inside some kind of repository, most likely a database, illustrated in Figure 5. Management of the content is subsequently handled by middle-ware that replace the programming interface of the file system.

A system developer will recognize this three-level architecture of the Model-View-Control (MVC) pattern [Reenskaug, 1978]. The model consists of the content in the database, the view-layer is provided by templates, and control is implemented in the middle-ware. The MVC is a pattern that offers a separation of concerns in the WCMS.

The next level

It is possible to invent further levels of content management, but any present form of WCMS will most likely apply some variation of the last level. Future levels might include technologies focusing on content integration and service orientation with the use of web services and mash-up principles [First Author, 2006]. Another direction in improving performance is distributed CMS networks [Voras, 2005], [Canfora, 2002].

Canfora, G., Manzo, S., Rollo, V. F., Villani, M. L. 2002, "ContentP2P: a peer-to-peer content management system", conference proceedings from COMPSAC'02, IEEE

Challenger, J., Dantzig, P., Iyengar, A. 2005, "A Fragment-Based Approach for Efficiently Creating Dynamic Web Content", 2, p. 359-389

Dudek, D. T., Wieczorek, H. A. 2003, "A Simple Web Content Management Tool as the Solution to a Web Site Redesign", conference proceedings from SIGUCCS'03, ACM

First Author 2006, "The Monster Mash-Up" [] Retrieved 22. April, 2006

Nielsen, J. 1996, "Why Frames Suck (Most of the Time)" [] Retrieved 22. April, 2006

Reenskaug, T. M. H. 2006, "MVC XEROX PARC 1978-79" [] Retrieved March 26, 2006

Weitzmann, L., Dean, S. E., Meliksetian, D., Gupta, K., Nianjun, Z., Wu, J. 2002, "Transforming the Content Management Process at", Experience Design Case Study Archive

Voras, I., Zimmer, K., Zagar, M. 2005, "Distributing Web-based Content Management System - "FERweb"", conference proceedings from ITI 2005,

Friday, September 15, 2006

JavaZone report, rest of day 1 and day 2

Updated with hyperlinks

Day 1

Well, I didn't go to Bjørn's presentation anyway for some reason. Some chaos at the stand, and I dropped into the presentation on Matisse. Long story short, this stuff is Visual Studio five years ago, the live demo botched terribly, and I did a walk-out after about 20 minutes. Geertjan explained why in his blog, and it looked like a dependancy management problem. Snap out of it, guys. Ditch Ant and start using Maven. Still, looking at the state of Swing, I'm glad I'm doing web-apps.

Then I took some time off to handle stand-chaos, and eat with Erling (old student buddy) who I haven't met in a while. I was also in the Meet-The-Gurus: MVC framework smackdown with Arjen Poutsma (Interface 21/Spring MVC), Rickard Öberg (creator of WW) and Kaare Nilsen (JSF). Was interesting to see how the MVC frameworks (or web frameworks as I prefer to call them) could be divided into several channels of motivation, and thus is the reason we have so many frameworks:

Performance/customer-friendliness (anti-JSF)
Developer-friendliness (JSF actually)
Container dependent (Struts)
Testability and container independence (WebWork)
Request/response model (Spring MVC)
AJAX compatibility (every framework, although it appears some are more equal than others)
Some others.

I started off being the WW-pusher, but eventually I got bored with that (it's just too easy, isn't it), so I advocated the devil (JSF) instead.

Attended Mads Nissen's SOA-fishbowl/shootout, which was also good fun, and very interesting. My SOA conclusion is that we're spending 90% of our time worrying about something that concern 10% of us. Let the architects worry about SOA, and tell us which service-protocols to use based on their wise decision (as long as they don't decide on anything silly). Give me Mule and JavaSpaces, stay clear of XML-transport and I'll be happy. Was very cool to see my old database professor Naci Akkøk so active in the discussion.

Then it was party zone! Sat around talking to Kjell and Mark about recruitment, JavaZone, life and everything.. Then discussed some scrum with Johannes, and I think I agreed to do a lighting-talk on the next XP-meetup... And then there was a quick beer up in the 21st floor before heading home.

Day 2

Early up the next morning to get the stand ready, then off to some awesome presentations!

I finally got to see Romain Guy's Filthy Rich Clients. Aerith still looks cool, but he also had some demo-troubles without letting that effect the presentation too much. Will have to sub to his blog as soon as Java 6/Mustang is out. Shine up on my old Swing skills, but still I think Java is a horrible language for doing graphic-design. Why not use more of a markup language? Something like JSF, only make it generate pretty glassy swing instead of HTML...

Struck a thought that when we do encounter errors in apps, remember to display user friendly error messages. Make them believe sometbody is actually doing something about the problem. Non-obtrusive, but still informative and helpful. Expect that things will go wrong.

Then I saw Kaare Nilsen's AspectJ presentation. I think I stole his eclipse/aspectJ book when packing up later on. Nuff said, but I really firmly believe that aspects will become as natural a paradigm as OO in the future.

Then I saw Alex Popescu's InfoQ presentation! As an old Magnolia-fan, lots of interesting and impressive stuff going on there! You hang in there, guys. Take-off will come soon, I'm sure!

After that I had to start correcting the JavaQuiz. I have to say people really suck at Java. On the total score of 18, the best guy got 9 points (120 contestants). Shape up guys :)

Then it was Johannes' agile presentation. Very inspiring! It's good to see that someone so high up in the system see the same problems in software engineering as us guys on the floor.

Joshua Block was the most skilled presenter I've seen this 'Zone, with Bruce Tate not far behind. Very entertaining, and some nice pointers on what I have to notice in Java 5.

And that was my last one! Had to mess around with the stand the rest of the day.

Also came up with the title of my presentation next year: How to put the fun back in programming!

Wednesday, September 13, 2006

JavaZone report, day 1, half-done

Updated with hyperlinks

Was at Bruce Johnson's talk on Google WTK. Cool stuff, Google, nuff said. Will have to try it out.

Then on to Jevgeni Kabanov's talk on Arenea. Interesting ideas, but I don't really think this is anything ready for prod. I'm an OO guy, so I can really see the use of using more OO in webapps. Might try this out next year if it's still alive.

Took a one session break.

Now in Bruce Tate's Java/Ruby integration talk. So far doing very well being diplomatic towards java (perhaps very wisely). Alotta RoR demonstration, and the ReST stuff was of course impressive. Tate is by the way one helluva talker. Sounds a bit like an American president (scaringly smoothly convincing type), but I think he's Texan, after all :)

Now I've stumbled into Ross Mason's Mule/JavaSpaces . The nickle in his shoe is handling meta-data for web services. but ESBs, or was it WSDLs, don't provide this too well.

Now normally I like to stay clear of the service layer, but I don't think I can too much longer. Will remember stuff like ReST and JavaSpaces if I ever journey into such landscapes. Quite simply. Mule seems like a bus. This I will have to try soon as well. Too many beer-talks about remoting I want in on these days!

Had a quick discussion with Rickard Öberg earlier, trying to explain him the benefits of having a standardized content repository (JSR-170). Now from his point of view, most of the requirements (migration, search and even versioning) is handled by the transport/data layer format, RDF. Why standardize beneath that (other than making it more developer standard)? Now I just had a qiock look at the spec, and there's one use case I didn't think of during discussion, and that is events.

I also talk to Alex Popescu for a tiny bit, figured me and him could gang up on Rickard. Anyhows, Rickard was gonna show him a quick SiteVision demo, and I guess that would get him rolling (heard he can pick quite a verbal fight, according to the tales of speakers' night out yesterday). Looking forward to his talk about InfoQ.

Afterwards it's onto Bjørn's talk on some ORM performance stuff. Will try to update when the beer's out.

Tuesday, September 12, 2006

See you at JavaZone!

Righto, wednesday is the big day! JavaZone really looks to be one of the coolest Java conferences ever, and it's right here in Oslo! Quite amazing. Will try to blog a bit about the presentations I get to see, but will also be hanging around Objectware's stand alot, eating popcorn (come get some, it's free!).

Sunday, September 03, 2006

Replacing a repository

They say you should blog about something you like, stick to the subject, be informal, and write something useful. Add subjective knowledge to the community.

My thoughts on the field of content management haven't really evolved much since I began working one month ago, but I have encountered a portal/CMS system which I sooner or later will have to use and develop with, I guess. Now the sorry thing about this portal is that I can't utilize my experience with the Java content repository (JCR) standard JSR-170. The portal vendor *could* implement support for it, but as I guess the internal datastructure is, this would lead to an entire replacement of the existing repository, throwing some years of development and use out of the window.

My gut feeling tells me this would not be worth it at this point. But for the sake of argument, let's wheigh the implications of replacing a homegrown repository with for instance Jackrabbit.

Negative implications

Implementation. The datastructure needs to be re-written. The persistence mechanisms might not be loosely bundled enough, or interfaced in the same way as the JCR, so the old repository can't just be unplugged and replaced with Jackrabbit.

Existing content. There are probably thousands of pages of existing content using the old data structure. Literally this is an implication you get to feel when migrating from one CMS to another, but it also applies when changing the content repository alone. Imagine all the customers that will have to migrate their content when they wish to upgrade to the latest version of the portal.. Ugh.

Positive implications

Developer friendly. I know JSR-170, so I already know how to use the repository. I don't need to spend X weeks learning the repository domain model and its API.

It's a standard. The repo becomes compliant with the standard. Content can be imported and exported between other JCRs.

Free stuff. Jackrabbit has implemented alotta nice features the spec provides, versioning, security, search, transaction management and access control to name a few.

Any more implications? To me, the migration one stands out as the biggest blocker. And as long as the customers don't have a need for stuff like that, JCR-compliance remains a (rather weak) sellng point.

Haven't got any more time now, will try to write back with the "conclusion" later on. In a couple o' weeks I will actually get to meet the lead guy of this portal's development, and I have until then to come up with the arguments to convince him. But first I have to convince myself :)