EngineCMS

EngineCMS is a CMS that i’m working on developing to fill a specific set of features that I haven’t been able to find in other systems.

  1. Use the file system, instead of a database, to store content. This is important so that we can use command line tools to work with the files.
  2. Revision control
  3. Authentication, Permissions, ACLs against local users (unix auth), built in users (to the CMS), Active Directories Users/Groups/OUs, and IP based authentication.
  4. Easily integrate external applications, without resorting to having to use rewrite rules in apache
  5. simple ’server’ scripts to handle the rendering and display, providing a robust and stable developing platform. That is, once the rendering engine is developed thats it. All the ‘new’ features will be on the ‘back end’
  6. back end, the CMS part, is separate from the rendering engine allowing it to be located on a separate server.
  7. system is designed in such a way that no one has to have access to the public web server.
  8. Individual pages need to be able to have different themes applied to them, instead of the default theme
  9. Fallback — if you specify “images/banner.gif” it will search the current directory for a directory “images” and “banner.gif” inside of it. If it doesn’t exist it will work its way back up the directory tree until it does. Same thing for any file, such as “leftNavigation.php”
  10. Easy for people with no web development experience to create and maintain pages

There are some other influences as well, but those are the big ones. I’ve been looking at several CMSs over the years. Drupal and Zope/Plone come the closest to providing what I am looking for, but fall short.

Drupal, currently, doesn’t support ACL properly in version 6 and its been out since February. Version 7 is already in development. A lot of the *core* features i want are in modules that lag far behind the main system. This worries me and makes me think that I will get stuck in an old version of drupal.

Drupal also requires all “addons” to be drupal modules. In some cases there are things that we will want to throw up that will be easy to throw together, but not easy as a module. An example would be a temporary application that might be up for 1 semester, and we only have 1 week to develop it.

Drupal’s revision control is also lacking a bit.

Zope/Plone is a great system. I used it for years on my own personal website and I still use it on the Library Intranet website (until this new system is ready at least). Problem is, everything has to be done via the web interface. You can’t use common commandline tools to work with files. If i am out of town on a 56k dial up, i want to be able to use emacs to make an edit instead of having to use a web browser. This is my biggest complaint about Zope, which kills it for me.

Enter EngineCMS

EngineCMS, for lack of a better name, addresses everything above and is very alpha at this point. I’m currently implementing the authentication system. Once the authentication system is done, which i hope to get done by 8/11/2008 (that might be wishful thinking), the Engine/Front-End part will be ‘feature complete’ and I will be able to start working on the back end.

The back end is where all the actual CMS magic happens. It is where web authors will go to do their thing. The front end is merely what will render the pages that are on the server. Once the front end is done I will begin converting the library’s intranet to the new CMS, by hand, so that I have a test bed for the back end CMS stuff. It will also give me a frequently used, but private, area to debug problems with the front end so that it is rock solid by the time we are ready to move it to live-public-production servers.

Development is being done in PHP, which is something i’ve resisted for years … but it is starting to grow on me. It allows for a lot of neat things without having to develop an actual server, like I’ve done in the past (and like zope still does).

Web Desktop

I’m finding more and more of my daily applications are moving to the web.

  • Google Reader : Has replaced NetNewsWire
  • ToDoist : Replaces todo’s in iCal
  • Meebo : pops up on my laptop instead of a real IM Client

Those are just applications that I use every day. Others, such as Roundcube could easily replace mail.app if they would just introduce collapsible folder listing. Google Calendar could completely replace iCal if I could sync it with my palm (that is, things i add on the palm go into Google Calendar. I know it can go from gCal to iCal).

So. Web Desktop. Other than being able to sync easily with devices (phones or PDAs), there is one piece missing. Desktop cohesion. All these applications exist in a web browser, usually in tabs or separate windows. Problem is, they are not only ugly but don’t always use the proper hot keys for the operating systems. command+n doesn’t create a new Todo in todoist. The web app has the bookmark and url navigation of the browser it is in.

The best idea i can come up with is a Firefox extension that allows an API to websites to more easily control the actual browser interface. Perhaps even the menu bar (either along the top of the screen for MacOS X or in the window for other OSes) that the browser displays when its window is selected. I’m thinking of GreaseMonkey, but backwards. Instead of you scripting for sites you visit, sites script your browser interface.

Conditional Comments

Internet Explorer has this wonderful thing called conditional comments.

All browsers should support conditional comments. Something off 1 pixel in safari? No Problem. add a style that moves that one element 1 pixel over for that browser. Problem is fixed, without pulling out any hair.

No more dirty-as-all-hell CSS Hacks because one browser handles something slightly different than another (or has a nasty bug in one version).

Now, back to trying to figure out how to move something 3 pixels to the right in Safari, but not in Firefox or IE.