JASPER: About
The Best Things Are Home-made
JASPER is the name of the blogging application that Blog!ARU and Webtech run on — JASPER because it's built with JScript ASP. I started work on JASPER in August 2002 and a huge amount of time and effort has gone into its production, today JASPER is an advanced multi-blog, multi-user blogging system. The source code for JASPER is over half a megabyte of text files with over 14,000 individual lines! Here's a list of some of the advanced features it currently supports:
Features
- Supports multiple users
- Supports multiple blogs
- Each blog may have its own subset of users each with a variety of access permissions — e.g. a user in blog 'A' may only be a guest editor but may be the owner of blog 'B'
- Always generates validating XHTML Strict output
- Pages are accessible to all types of users, particularly search engine robots
- Comprehensive administration system with multi-tier security permissions
- Supports comments/replies to entries. Global settings controlled by the blog owner determine whether new, existing only or no comments are to be displayed. Beneath this at a lower priority, each blog entry has the option of enabling/disabling comments and specifying how many days an entry is available to be commented upon.
- Supports an optional subset of semantic HTML for comments
- Has a complete archive system with optional date filtering and support for blocking access by robots to individual posts
- Supports UTF-8 for internationalisation
- Supports RSS web feeds of entries and recent comments with a pre-defined CSS stylesheet for basic viewing. Tested with the Bloglines feed aggregator. RSS generation happens automatically behind the scenes when entries are created, edited or commented upon. RSS feeds are validating.
- Uses an advanced caching system to pre-generate collections of entries for fast retrieval. This functions automatically behind the scenes rebuilding and storing data as entries are created, edited and commented upon. Data in the sidebar panels is also cached and rebuilt automatically.
- Presentation is achieved through CSS only, including the layout structures. This enables maximum flexibility in appearance design, accessibility and caching enhancements. Each blog supports its own separate stylesheet.
- Customisable data fields — each blog supports an infinite collection of customisable fields configured on a per-blog basis. For example in my main blog I have 3 optional fields defined as 'I'm currently feeling', 'I'm currently listening to' and 'I'm currently eating' that I may optionally add content to and which appear beside the parent blog entry.
- Timezone-aware — each blog has its own individual and customisable timezone. Once set the administration interface and comment facility presents users with this timezone for locale user-friendliness.
- Support for a third-party image host — images may be hosted on a different web server if desired and each blog has its own customisable image host path.
- Each user has a preferences page including customisable nicknames, email addresses, passwords and personal URLs that automatically appear on blog entries and comments that they publish.
- Each user may predefine a set of customisable posting locations for faster blog authoring. For example a user may create an address to post from at home, work and a second home, etc. and pick these from a drop-down list when writing blog entries and comments.
- Each blog has its own preferences page accessible to authorised blog owners. It includes the ability to regenerate all cached content if the owner believes an automatic cache rebuild has not completed.
- Email notification system. Authors of blog entries may opt to receive email notifications when comments are added to their posts.
- Anyone, including the general public, that comments on an entry has the option of being notified by email if someone else also adds a comment to that particular entry. An unsubscribe facility allows such users to turn off these notification emails at any time.
- A ping system allows authors to notify a selection of third-party 'recently updated blog lists' such as weblogs.com and blo.gs of new posts. This allows blogging tools such as Technorati and BlogShares to read their entries. The ping system is optional on a per-blog basis.
- Blog authors and higher authorised users may embargo blog entries and embargo or delete blog comments
- The administration system provides a list of recent referrers for tracking who is linking to a given blog. There is the option of adding the most recent referrers to the sidebar (this is disabled on my blogs to prevent something called 'referrer spam')
- Spam filtering - a separate module to prevent over-zealous robots from crawling content too quickly is available and a databased filtering system allows webmasters to block users by IP address, user-agent and referrer.
- Supports emoticons
- Partial support for post scheduling (future-dating)
- Manual out-bound TrackBack support, full in-bound auto-discovery TrackBack support
Technical Details
JASPER is implemented in object-based JScript under ASP using a MySQL database. Code is structured as a series of functions referenced from template include files. These include files are placed within the host web applications pages to invoke various aspects of the blog system, e.g. invoke an archive page here, display a comment page there, etc. JASPER is a standalone application, for example the administration part could be hosted from a separate virtual directory to that of the main website, or a different website altogether provided that both servers can see the database server. The database design consists of 9 inter-related tables designed for both integrity and flexibility, see the following diagram:
The Future
JASPER is almost complete. There are a few remaining items on the 'todo list'. At this moment in time I'd like more users to write content for me in the Webtech blog as this will also help me debug the application.
Release into the public domain is something that I'm considering for JASPER.