It won't be long till the 2.1.1 release

Significant progress was made this week in converting to the new 2.0 .NET localization model in svn branches/2.1.1 so we will probably be able to make a new release in about 2 weeks. I still have some tweaking and testing to do and also still need to implement the keyboard shortcuts feature that is targeted for the 2.1.1 release.

The Culture*.config files will go away with this release and culture specific strings will come from App_GloabalResources/Resource*.resx files where the default english will be just Resource.resx, Russian will be Resource-ru.resx, and Mexican spanish will be Resource-es-MX.resx for example.

In the new model, the culture of the browser is detected and if there is a resource file for that culture it will be used, otherwise it will fall back to the default cutlure specified in the web.config. We will still use the /Data/MessageTemplate/*.config files which also have fallback to the default culture.

The new .resx file format is in a very readable xml format and can be edited with a text editor, though VS 2005 has a nicer built in editor. Going forward, anyone contributing translations should contribute them in .resx format plus message tamplate files.

Since the 2.1 release shipped last weekend, the new development branch in svn is branches/2.1.1 and changes will only be made in branches/2.1 if we have to make important bug fixes before the next planned release.

Of course content from the database is always in the language that it was entered in but labels, buttons, date formats etc will adapt to the user's browser. Hopefully I will update this site later this week from svn.

Release 1.0.3 and 2.1 Now Available

I'm happy to announce the latest releases available from the download page:

1.0.3 for the 1.1 .NET Framework or mono a maintenance release with bug fixes and the newest version of FCKeditor. The coolest new feature in the FCKeditor is the full screen mode. Try the bottom right toolbar icon in the editor to see how it works.

and

2.1 for the 2.0 .NET Framework (currently Windows only) is a major new release featuring:
Personalization using the new 2.0 .NET WebParts framework
XHTML Compliance, table-less layouts, and table-less menus
New streamlined Content Manager module
New 2.0 .NET provider implementations for all supported databases including:
SiteMapProvider
MembershipProvider
RolesProvider
PersonalizationProvider

Most of the above is really improvements in the infrastructure to take advantage of the new 2.0 .NET. The new features that actual users will notice include the MyPage feature which allows registered users to create personalized pages by selecting content from a Catalog of content. Administrators can make any site content available in the Catalog. Very easy to use RSS feeds to bring in external content and make it available, but all of the modules can be used there. Also the new Contant Manager will make things easy for Administrators. Content can now be published on any number of pages in the site not just one as before. The new FCKeditor with full screen mode is very cool. It is now easy to use icons in the menu as you can see on this site.

There are no table changes in the 1.0.3 release but new stored procedures if you are using MS SQL or PostgreSQL.
2.1 has quite a few db schema changes, there are upgrade scripts to help you upgrade. As always, be sure and completely backup your site and your database before attempting an upgrade in case things go wrong. If you do run into any problems, post in the forums and I will try to help.

There is a separate download for the 2.1 version called the Atlas pak. If you want to use Atlas to make the WebParts drag and drop work in Firefox and maybe Safari, download this and read the readme file. You will also need the Atlas dll from Microsoft.

There is one known bug if you use SQLite, the MyPage feature is broken due to a bug in the driver for SQLite. It is not handling the blob/binary data type parameter. I am looking into this issue to see if we can get it fixed.

The Mono Demo Site is Back Online Thanks to GrokThis.net Hosting

Some of you may have noticed in the last month or so that the mojoPortal Mono Demo site (mono.mojoportal.com) was not performing well and was offline frequently and I'm afraid that was giving the wrong impression that either mono or the mono version of mojoPortal was unstable. But I assure you this was not the case. The problem was that I was hosting the site over a cable modem on a dev machine. Not exactly robust.

I think it was not the best way to make a good impression for people new to mono and not exactly fair either.

Before the 2.0 .NET framework came out, this site was hosted on Mono for about a year with excellent uptime, performance and stability at GrokThis.net and now thanks to their gracious sponsorship, the mono demo site is hosted there. GrokThis.net, hosts quite a few mojoPortal sites on mono and everyone I know has been very happy with their sites running there. I think having the mono demo site hosted there will make a much better impression.

It is only natural that it will take some time for the mono project to catch up on the 2.0 .NET implementation but progress is being made. It is only a matter of time and the 2.x version of mojoPortal will run on mono and we will be back to having one version of mojoPortal that runs on all platforms.

In the meantime I'm shooting for a release this weekend of 2.1 for Windows/.NET 2.0 which has some very exciting new features I'll blog about soon and a 1.0.2 maintenance release for linux/mono or 1.1 NET

Menu Icons and more WebParts work

If you've visited this site before you've probably noticed the new menu icons. Just added that over the weekend into branches/2.1. It was low hanging fruit. There was already a field in the mp_Pages table for MenuImage that had been there a long time but not implemented as a feature. So I added the UI elements to pick an icon and hooked it into the menu.

The only interesting bits about the implementation was that while the ASP.NET Menu items have an image property, the standard SiteMapNode does not so there was no where to store it when populating the node tree from within a custom SiteMapProvider. Not a difficult problem at all though, I just implemented a mojoSiteMapNode that inherits from SiteMapNode and add a property to store the image url. Then when I build the node tree I populate it with mojoSiteMapNode objects.
Since I'm already handling the MenuItemDataBound event to filter the menu based on roles I just had to add a little code ther to populate the image like this:

mojoSiteMapNode mapNode = (mojoSiteMapNode)e.Item.DataItem;
if (mapNode.MenuImage.Length > 0)
{
      e.Item.ImageUrl = mapNode.MenuImage;
}

Pretty sweet!

The other cool thing that landed in svn branches/2.1 this weekend was my further WebPart work including the WebPartModule and WebPartAdminModule features mentioned in my previous post, allowing use of 3rd party WebParts (if you can find some) both in the MyPage feature and anywhere in the content system. Also I have implemented the feature on MyPage to allow users to create as many "pages" of personailzed content as they like similar to pageflakes.com.

Now I still have some work to do in styling the User Page Menu on MyPage in the various skins (so far I've only been working in subblue). I'm not the greatest designer as I'm sure you have observed but hopefuly it will come out looking something like tabs.

With this, almost all of the compelling new 2.0 ASP.NET features are being used to good advantage in mojoPortal which means we are getting close to a time when I can try and focus on identifying what needs work in mono to get mojoportal 2.x working. There is still just one more big 2.0 feature I would like to take advantage of and that is the new improved localization features. I shied away from the conventional 1.1 .NET localization in the current mojoPortal localization implementation because I felt it had one fatal flaw. It required storing resource strings in satellite assemblies which meant a developer would need to be involved just to change a label. I felt very strongly that it should be possible to change any label with a text editor and not require any compilation. This and more is now possible and efficient in 2.0 .NET and would give us some ability to adapt labels in the site to the culture of the user's browser (if we have resources for his culture) with fallback to a default culture if not available. I still think the value added is very limited because the bulk of the content comes from the db and will never localize unless a person translates it but it is worth doing because there is some benefit if the login button and other buttons are localized as well as calendar and date time formats, it may help someone who knows some english for example but is not fluent.

I think I am leaning toward making the 2.1 release before tackling the localization changes. It will not be difficult but it will be a lot of grunt work copying strings from the culture files into the resource editor and going through the site to make the changes.

So I guess its a little more polish on the MyPage stuff, some QA and then make the 2.1 release

For those of you following along with the sources from svn, I pretty much work in branches/2.1 most of the time except when making changes that require db schema changes. To avoid breaking things for users who are working from svn I do the db change work in my sandbox branch and only merge it back into 2.1 once I have all the data layers implemented. This weekend I merged quite a bit, you may need to look for the newer stuff in the upgrade scripts if you are working with an existing db. There is still quite a bit of things to do before the release but I think the db changes are done for this coming release.

More WebPart Next Steps

I implemented the WebPartModule and WebPartAdmin module in my sandbox over the weekend using the MS SQL data layer. I still have some work in the other data layers but I'm waiting until I complete all the schema changes In this db before moving through the other layers.

These modules work just as I planned using a test dll I made with a simple web part. I was able to drop it in the bin folder, it showed up on a list in the WebPart Admin module as a WebPart available to install. Installing was 2 clicks and 2 check boxes to indicate whether it should be made available for MyPage and the Content System. I checked them both and then was able to use the WebPart on MyPage and in the content system. Pretty Sweet!....but, if you build it wil they come?

Googling I could not find any webpart libraries available for download except those for Sharepoint which are not compatible with ASP.NET WebParts. Often, people don't realize these are not the same thing because they are both named WebParts, but they are not the same thing.

So the utility of this feature is good for developing your own WebParts as features for mojoPortal or other projects using WebParts but we have yet to see much of anything out there right now as far as 3rd party WebParts. Maybe that will emerge later, we shall see.

But anyway, there is still more that I want to do in the MyPage implementation of WebParts.

Similar to what they have over at www.pageflakes.com, I want the user to be able to have multiple pages on MyPage, with the ability to create more as needed.

Also, I want to do something more elaborate with the WebPart Catalog. You can only show so many choices in the default presentation without it getting obnoxious so I need to figure out how to implement it so that the most popular ones show up in a short list and there is a more link where you can open a screen that lets you page through them so that it is not too cumbersome having a large catalog and browsing through them.

I think after those 2 things are implemented I will start the QA process towards a release. Not sure how long that will take, hopefully it will go quickly.