Posts From March, 2008

One Bookmarking Service to Rule Them All and in The Widget Bind Them

I'm sure those of you out there reading this blog also read a lot of other blogs and have noticed over time the chickletization of blog pages with little icons for all the different bookmarking services like Del.icio.us and Digg, and on and on with the ever growing plethora of other services. I was starting to feel that the mojoPortal blog was a little behind the times in this respect. Then I noticed on TechCrunch, the use of the AddThis.com widget. After looking into the integration I could see that it was relatively low hanging fruit to implement a .NET control that makes it easy to add the AddThis button.

Use of the .NET control in markup is like this:

<mp:AddThisButton ID="at1" runat="server"
AccountId=""
ButtonImageUrl="~/Data/SiteImages/addthisbookmarkbutton.gif"
Text="Share This Using Popular Bookmarking Services"
CustomBrand="mojoPortal"
CustomLogoUrl="http://www.mojoportal.com/Data/mojoportal_box_dropshadow.png"
CustomLogoBackgroundColor="e8e8e8"
CustomOptions=""
UrlToShare=""
TitleOfUrlToShare=""
/>

If you leave the UrlToShare and TitleofUrlToShare blank it automatically uses the current page which makes it easy to add it to the layout.master file of your mojoPortal skin so it appears on every page.

In the blog we databind those properties to the title and url of the blog post.

If the account id is not set the control doesn't render.

Now we can just let AddThis.com keep track of the emerging services and add them for us instead of having to add a new chicklet every time some cool new service appears.

At the time of this post, this feature is only available from the mojoPortal source code repository, but it will be in the next release coming soon.

Update 5:39 PM: I just discovered that AddThis.com also has a button for RSS subscriptions so that one button can offer all the popular services. So I will be implementing use of that soon too and doing away with the multiple graphics (chicklets) for RSS subscriptions that we currently have. This is what the new button will look like (there are several options but this is my pick), I'll implement it so that users can choose their own button graphic.

 Subscribe to my feed

click it to see the rss feed subscription choices. I don't want to have to keep up with all those chicklets either, so AddThis has a great idea here.

 

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.

Help Me Pick The Next 10 Designs for mojoPortal skins

Last August (2007), someone commented in my blog, saying something to the effect that they thought the biggest thing holding back mojoPortal was the lack of good looking skins included. Of course this was something I had been thinking too but the comment motivated me to do something about it. Not being a good designer myself but very knowledgable of Html and css I set out to find some free Xhtml compliant designs and implement them in mojoPortal. After a lot of browsing and downloading of designs I spent a period of 10 days doing nothing but implementing skins from the designs. On average I was able to implement one skin a day so I ended up with 10 good looking skins in 10 days.

Since releasing those 10 good looking skins the popularity of mojoPortal seemed to spike upwards fairly dramatically so I concluded that the time spent implementing those skins was well spent and the lack of good looking skins prior to that probably really was holding us back in terms of popularity. Those skins have since formed a nice starting point for others to make their own custom skins as I have seen in the wild on various mojoPortal sites.

Currently we ship about 30 skins with mojoPortal, 10 of which are good looking and 20 that are just ok or mediocre, or just outdated looking. So I'm thinking its time to drop out most of the boring ones and do another round of 10 skin implementations to bring us up to 20 good looking skins. I figure we can move the less good looking ones to the community download page so people can still get them if they want them but we will just package the 20 or so good looking ones with new versions of mojoPortal.

So I invite you to help pick out the designs for the next 10 skins that I will implement. Please post links in the comments to this post pointing to the designs you like the best. They have to be free, open source, and Xhtml compliant. Preferably with no tables used for layout and with ul and li elements used for the menu. Extra points for designs with interesting menu styling that is different than anything we have now. When I look at the designs I also consider whether they will make a good starting point for users to make custom skins.

Some places where you can browse good designs:

http://www.opendesigns.org/
http://www.openwebdesign.org/
http://www.opensourcetemplates.org/
http://www.oswd.org/

Let me know of others and I will update this post.

Now is your chance, if you know of a good looking design but not sure how to implement it as a skin yourself, post a link. If I agree its a good looking design I will probably implement it, it just depends on how many good suggestions I get. The 10 that I like best I will implement.

My goal is that when people try out mojoPortal they find it has a lot of good looking designs included so they have a lot to work with in customizing them for their own sites. So please, help me pick some really good looking ones!

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.

mojoPortal 2.2.5.1 Released

I've just released mojoPortal 2.2.5.1, which is a bug fix release for things reported in the forums since the 2.2.5.0 release.

Specifically there was a bug in the Google Maps that caused it to not have the width and height so it made the map disappear.

There was a bug in the new folder image gallery.

There was a bug in the MS SQL version that prevented login if the site was configured for encrypted passwords and login using email.

I've also added better error handling around the search index builders due to a few reports of errors that I was not able to reproduce.

See my previous post for details about new features and enhancements.

I'd also like to mention that I've been working on some new video tutorials.

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.

mojoPortal 2.2.5.0 Released

I'm happy to announce the release of mojoPortal 2.2.5.0.

This release contains some significant database schema changes, almost every table has some new columns. As with every upgrade, its important that you backup your site and your database before upgrading so that you can get back to a known working condition should anything go wrong. I fully expect the upgrade to go smoothly and my advice about backing up is no different than any other release. I just figure that since the upgrade scripts are touching so many tables it merits emphasizing this precaution.

So why were so many tables modified this time? Well its laying the foundation for some things to come.

Architectural Changes - Guids are Good

Although we are using integer ids on most tables in mojoPortal (which is optimal for performance), we have added Guids (Globally Unique Identifiers) to most tables that can be thought of as supplemental primary keys and foreign keys. Guids are guaranteed to be unique across machines. It seems almost impossible but supposedly you can generate Guids all day and never make the same one twice or conflict with ones generated on other machines. So what are the benefits of having these Guids on your tables?

One benefit is that it makes it more feasible if you need to combine data from 2 mojoPortal sites into one site. It still would require some custom query work, but the basic idea is that the imported data would not get the same integer ids as it had in the previous system, but the relationships between rows could be re-established using the Guids.

The other benefit and perhaps the more important one is that it allows flexible relationships between tables that make it easier to re-use some functionality across features. For example, I plan soon to implement some things like Content Rating and Content Versioning. So for example I will need a ContentHistory table for the versioning so I can store a copy of every change to a content instance. Instead of implementing this versioning just for the Html Content feature, I'm implementing it in a way that multiple features can use it. So instead of having joins between the ContentHistory table and the HtmlContent table, I will store the history using the Guid that identifies the Html Content instance. It will be able to retrieve its history by passing in its Guid. I could then re-use it in the Blog feature if I want because blog items have their own Guids and can retrieve their history by passing in a Guid. Same thing for the event calendar feature. So basically the ContentHistory table doesn't care which features store their history in it and doesn't have any hard foreign key relationships, but instead loose relationships by virtue of Guids. So the ContentHistory table will have a column named ContentGuid which can relate to the Guid columns of any feature specific tables.

Consider the ContentRating table, again it will have a column named ContentGuid, but I could pass in any feature instance specific Guid, or I could even pass in a page Guid and have ratings at the page level or content instance level. I'll be able to re-use it in Blogs, Html Content, Events, Forums, or anywhere else I need to use it. It will of course be up to the feature or page or whatever to know how to retrieve its ratings or history using its own Guids.

I have not yet implemented  Content Ratings or Content Versioning, but with the Guids in place I can now implement it once and use it in flexible ways across various features. You won't notice anything in the user experience yet from this addition of Guid columns, but the value of this will be more apparent in future releases. These are just examples too, there are actually a lot more things like tagging, meta data and other sub systems that I want to be able to re-use across features and the use of Guids will make that much easier to implement.

Also, this release introduces SubSonic into our architecture which will make it much easier going forward to support all the different databases. See my previous post for more information about the use of SubSonic in mojoPortal.

Blog Enhancements

Its now possible to have a google map in your blog posts by entering a location. Not sure how often you will find that useful, but its there if you need it. A more exciting enhancement to the blog is support for Odiogo, a free service that can generate audio podcasts from you posts automatically. To use it all you have to do is enter your Odiogo feed id and podcast url into the blog settings. Both of these enhancements were pretty low hanging fruit, that is, easy to implement.

Event Calendar Enhancements

Its now possible to enter a location for an Event and have a google map appear in the event details page. The google maps api key now can be stored in Site Settings for all google map enabled features.

Forum Enhancement

A small but useful enhancement is the ability to view threads by user. For any user that has made forum posts now a link to "View Posts" appears below their forum signature as well as on the member list and profile pages.

A New Image Gallery

I blogged about this new feature here.

More work on WebStore

I've been working a lot recently on getting the WebStore feature working on MySql for two reasons. One is so that I can demo it at the MySql Conference. The other is so that I can open up a store on this site to sell premium features. Its very challenging making a living as an open source developer when you give away your products. I do ok when I get consulting work but that is sporadic and not all the work I get has any benefit to the mojoPortal project so sometimes its actually slowing down progress of the project when I take consulting work. Most of the actual progress is still happening when I'm working for free on my own time. So I'm hoping that I can come up with some premium features that you would be willing to pay for. The core of mojoPortal will always remain open source but I need to get some revenue stream going so that I can afford to keep working on improving the core features. I'm also going to roll out a corporate benefactor program soon to make it easier for companies who are building their infrastructure on mojoPortal to get involved in supporting the project financially and influencing the direction of progress.

The WebStore feature should still be considered very experimental, but as I get it running on this site and begin to use it in actual commerce, it will get polished up more quickly and soon be in a condition for others to use.

This release also includes fixes for various bugs posted in the forums since the last release.

As always, be sure and backup your site and database before upgrading, and if you run into any problems post in the forums and I will try to help.

New Tutorial Videos

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.

Automatic Podcasting From Your Blog with Odiogo

Recently I came across Odiogo, a service that generates audio podcasts from your blog posts automatically. Considering its text to speech technology, I was surprised how good it sounds. I mean you can tell its Mr Roboto but the voice and speech are impressively more natural sounding than any other text to speech things I've heard so far.

Their business model is to place audio ads inside the generated mp3s which makes sense as a way to offer the service free. Pretty cool idea they have going if you ask me.

So I signed up last week and within some hours I had an account and a link to the podcast page they generated for my blog.

Today I got around to integrating it into the mojoPortal blog to make it easy, so all you have to do is enter your odogio feed id and your podcast page url. They have some javascript that sets up a "Listen Now" button right in your post which is very nice. Those of you reading this from a feed reader will have to visit this site to see the listen now button or visit the podcast page linked above to go directly to the podcasts.

So now its possible to subscribe to this blog in iTunes if you like.

I also implemented the ping to their service page when a new post is added so it can know right away that there is new content to convert from text to speech. It will be interesting to see how long it takes from the time of making a new post to when the podcast is ready.

This feature will be in svn trunk by later tonight for anyone interested in trying it themselves.

UPDATE 2008-03-24:

Since I've been using the Odiogo service on this site, several times I've seen extremely long page loads on the blog, where apparently the Odiogo service goes down and the delay in rendering the page is caused because the javascript coming off the Odiogo server is not available. Finally the request times out and the page loads without the "Listen Now" button. So I've been turning the Odiogo feature off when this happens by removing my Odiogo feed id. This is something I hope the Odiogo folks can figure out and resolve effectively, possibly due to growing pains but I'm not one to keep using services when stuff like that starts happening repeatedly. They either need to improve the availability of their service or let us host the javascript on our own sites so that when the service is down it doesn't kill performance of our sites. So far this has happened twice that I know of and who knows if it happens when I'm not looking so its making me leave the Odiogo feature turned off because I don't have confidence in it.

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.