New Features on the Horizon

multiple sites on one web instance and db
I have been thinking about supporting multiple sites on one web instance and one db for a while and have finally got around to working on it since the design has finally coalesced in my mind. It ties in with thinking I've been doing about the role hierarchy within the site and my future plans to support content workflow.

The way it would know which site to use is by the host name in the url.
 
Say the ip address of your site is 1.1.1.1 and you have 2 (or more) DNS host records both pointing to that ip address for example
www.joeaudette.com
www.mojoportal.com

I would have a SiteHosts table in the db to connect the host names to site ids. Then using the host name in the request I can easily get the site id. There would be a fallback to use the first site in the table if no matching host name is found.
There will also be a need to separate and secure file system resources between sites. Things like gallery images for example should not be accessible between sites. I'm thinking I could create folders named based on the site id and store any site specific stuff beneath that.

There will have to be a property on each site indicating whether it is allowed "Server Administrator" priveleges. Sites with this setting will be able to create new sites and setup the site hosts. Also it would be nice if these admins could specify which modules are available to each of the non-serveradmin sites.  This way someone could do hosting with free for some features and charge for others. I'm thinking normally there will only be one site configured this way to administer the others.

search
Any good site needs to have a good search engine. DotLucene seems to have what I need. I'm still deciding on how best to build the index. I've thought about building a site crawler that could be run from a an aspx  page or from a cron job or scheduled task.  I'm leaning toward following the example of Martijn Boland and the approach he has taken with his Cuyahoga Web Site Framework. He is also using DotLucene and his design updates the index whenever content is added or updated so no scheduled indexing is needed. Pretty cool! I see alot of advantages to this approach. The index is never out of date and it works for hosted situations where scheduled tasks and cron jobs may not be an option at all. Of course I need to implement the mutliple sites feature first since I will want the search to be site specific, each site will have its own index.

Postgre SQL support
Joseph Hill of GotMono.com has begun work on a data layer for Postgre SQL. Joseph has a lot of experience porting ASP.NET apps to mono and Postgre SQL as you can see from the Projects page on his site.

miscellany
Found a few cool things recently that I plan to use in mojoPortal. ZedGraph is an awesome open source charting framework for .NET. Just look at the samples to see how visually impressive it is.  I also found a cool schedule control on codeproject.com, I'm sure I will find some use for these in the other features I have planned.

Release 20050227 alpha is now available

A new release is available on the download page, including the new Shared Files Module for securely sharing files without directly exposing the file system.  To the user, it looks and feels just like the File Manager module.

Also the Blog Module now has an option to notify you if someone posts a comment as well as some new features to customize the rss feed.

A number of miscellaneous bug fixes are also included.

Also a daily tarball of the VS.NET Solution source files are now available from Novell Forge in addition to anonymous svn checkout, see the download page for details.

If you have any questions or difficulties, please post in the forums.

putting the mojo in the mojoPortal Blog module

Recently my personal blog which runs using mojoPortal was added to monologue. It wasn't working for a while becuase it didn't like the mojoPortal blog feed.  It was the datetime format that was throwing it off. Formatting the date time as GMT fixed the problem but then it wasn't sorting right because my system clock is on Central Time.  So I added a web.config setting for GreenwichMeantimeOffset and setup the feed to adjust the post time to match GMT before formatting it.

Once my feed was displaying on monologue I noticed that there are no handy comment links on monologue like when my posts are displayed in my own blog. I decided it would be easy to add that to the bottom of each post inside the feed since it is generated dynamically.  Seems like a no brainer but I don't see any other feeds with this feature.  I've added 2 module settings to make it configurable, "Add Comments Links To RSS", and "Add Signature To RSS". That way the user of the mojoPortal Blog can decide for himself whether to add a signature link to his site and/or a comments link inside the feed. These features are now available in the latest svn version.

Running on mono

This site is now running on Suse 9.2/apache/mono 1.1.4 Up until now it was running on a Windows server and my demo site at monoForge was my only public site actually running on mono. I'm very excited to finally have this server online. Hopefully the performance and availability will be solid enough. Time will tell.

I had to learn a lot of apache stuff so I could get multiple sites running under 1 ip address using Virtual Hosts. Like everything else, its easy when you know how and seems hard when you don't. So now I've changed the Works With Mono logo to the mono Powered logo!

I'm also learning how to use the awstats log analysis tool. It works pretty sweet on linux. Wonder if I can harvest all my old IIS logs and run a report against them on the linux machine so I don't lose any history going to the new server.

Anonymous SVN Checkout now available

I am happy to announce that the mojoPortal source code is now available using anonymous checkout from a Subversion source control repository hosted on forge.novell.com. See the Download page for details.

Big Thanks to Novell for making this service available free to the open source community!