Keyvan Nayyeri

God breathing through me

Now Running on Behistun and ASP.NET MVC

It was quite a long while that I had decided to migrate my blog from Graffiti CMS to a new engine, and today I finally completed this task.

There is a long story to tell about this process and my reasons to choose my own blog engine after over 4 years of using Telligent products (Community Server and Graffiti CMS), and I try to talk about them shortly in this post.

Why Migrate?

Old followers of my blog know that I’ve been using Telligent products since the beginning of this blog for a very long time. First I was using Community Server as a single-blog and then migrated to Graffiti CMS as a more appropriate option for my blogging style. I used to be an active community contributor to Telligent products, ran popular open source projects for both products, and praised both these products as they really deserved it at the time of being. I used to be a Community Server MVP and a prominent name in Graffiti CMS development, and could find great friends inside Telligent and via this company and its products. Many of my old readers had come here from my initial activities on this community and suddenly we became great friends.

However, as all of you already know, this economic crisis had a huge impact on the way that Telligent leadership were managing the company, and after many layoffs during the last year, they restricted the activity around their products. The main product that was negatively affected by this movement was Graffiti CMS. There has been a long time that Telligent hasn’t contributed any update to this product and this has been the source of many complaints by customers and community members recently.

Here I’d mention that Graffiti was a great product as was, and it’s still a thorough product for its own whether as a CMS or a blog engine. However, I don’t want to deviate from the main point of this post by talking about Telligent and its products, and why many of the community members including myself believe that Telligent had to drop new builds in the past months.

But the reason that convinced me to move off Graffiti and write my own engine was the fact that most likely I won’t have time to spend on maintaining the technical side of this blog in the next few years, and I thought that it’s better to have something simple and easy to maintain that I have full control on. Graffiti was written for ASP.NET 2.0 and IIS 6.0 and there was no source code available, so it could cause difficulties in the future to manage this product.

Destination Options

It’s a matter of a fact that after more than 4 years of blogging, I’ve realized that the type of a blog engine and the technology behind it are not a big deal whether you’re a technical developer or not. All an author wants is a tool to go, and almost all the current blogging engines are satisfactory in this matter specifically for me as a blogger who has stopped categorizing and tagging his posts. I really need a plain blog engine that works for me.

I had many destination options to use. I was very interested to use an engine powered by ASP.NET MVC, but neither Oxite nor AtomSite were what I wanted. Both these options add an extra complexity that doesn’t have any value for my needs.

There were also some great engines written by ASP.NET WebForms such as Subtext or BlogEngine.NET but less or more, they couldn’t satisfy my requirements, too.

Looking around, I was seriously going to migrate to a PHP option like MoveableType or WordPress, and even used Jon Sagara’s tool to export my posts, but somewhere in the middle of the process I disliked the quality of my imported posts in the destination engine. It was breaking all my URLs and couldn’t carry all the data that I had.

Why Write My Own Engine?

Having this in mind, I thought about writing my own blog engine. To be honest, I dislike writing blog engines as I think that world is saturated by various engines available out there. I’ve contributed to many open source projects but never wrote a blog engine myself because I don’t believe in its necessity. When there are many engines available, why should we start a new project, drop one or two releases, and then stop the project after a while to make difficulties for our users?

However, I was locked in the middle point of a process where I couldn’t satisfy my needs with any of the existing blog engines. My blog is old and there were over 1000 posts (mostly lengthy with source code samples) written by me with many feedback. It wasn’t easy to find something suitable for this amount of data and type of content. I was looking for a simple blog engine that can import my posts and maintain the huge number of incoming links to my blog that have become a reference for the community over the years.

Furthermore, it was a while that I wanted to use ASP.NET MVC to power my blog engine, and I had promised some of our book readers to build a blog engine similar to WroxBlog that I’ve written for Chapter 18 of the book that lets them learn about the backend part of the blog.

Therefore, I decided to write a simple blog engine for my own that meets my goals and doesn’t make things complex

What is Behistun?

After spending much time on finding an alternative, I started writing my simple blog engine and called it Behistun. Behistun is the name of an ancient UNESCO World Heritage Site near Kermanshah, Kurdistan (Iran) where I was born.

I wrote Behistun in 7-8 hours then spent 4 days to end up with this simple theme and wasted 7-8 days to move the images and other files of my old blog to a single location to make them consistent!

As you see, Behistun is pretty simple. It’s written with ASP.NET MVC 1.0 (C#) and applies SQL Server as its storage. I used LINQ to SQL to interact with the data storage that consists of four tables only. I also used WCF for some parts such as RSS feed generation and XML-RPC service hosting.

Behistun is as simple as following features that are all built for single-blog functionality.

  • Post management
  • Comment management
  • Trackback and Pingback (the latter one is not enabled yet)
  • Monthly archive
  • MetaWeblogAPI
  • Sitemap
  • FeedBurner support

The first and foremost advantage of Behistun is its simplicity, but it’s also a cool engine as it’s built by ASP.NET MVC, generates neat URLs, and loads pretty fast!

In order to build Behistun I used some third party tools and components that I list here:

There is only one minor issue to inject my XML-RPC services built with WCF that I’m working with Ninject team members to resolve.

The theme for this blog is a simple one as the engine is. I inspired some ideas in coloring and fonts from Posterous design.

Major Changes

During the migration process I applied some major changes in my blog:

  • Now I’m using Google Custom Search as the search engine for my blog. The search engine for Graffiti was pretty slow for this number of posts, and I saw no point in reinventing the best wheel that is ever built for the search on the web!
  • There is no excerpt for posts anymore. You see the full content of the posts in the homepage.
  • There is no About or Contact page anymore. You see a short biography along with a few links in my sidebar that you can use to contact me (don’t forget that I’m not that type of guy who accepts any friends request on social networking sites).
  • After a long while, I restored my monthly archive with tons of blog posts that shows the power and age of this blog!
  • Once again I migrated my feed to FeedBurner! This time just to make you happy and let you laugh a lot!

Having these changes in look and feel and functionality, I’m also going to apply major changes in my blogging style in a smooth manner. You’ll be witnessing a transition from my current focus on Software Development and .NET-related stuff to other topics that I like them more than these.

New License

The very important change is that I changed the license of my blog to a copyleft GNU Free Documentation License. I’m a big advocate of openness in software (don’t look at my Microsofti face!), so I thought it’s worthwhile to open all the doors for anyone to use this resource of content about .NET and Software Development and spread the word. There are some content stealers that steal my posts every time I publish them, and there is nothing I can do. At least, I can help them do a legal job!

Behistun as a Public Project?

The short answer is no, not at the moment! As I said above, I don’t like to add something to this mess of blogging engines and stop supporting it after a while.

However, the good news is that at the moment I’m using an Alpha version of Behistun and once I complete working on the first version as a stable engine, I’ll publish it as a disclaimer project with a very open license, so anyone can adapt the code and use it with no support on my side.

Having this said, if I can find 1-2 contributors who are really interested to get Behistun and make it a public open source project, I’m ready to cooperate with them.

30 Comments

Dave Burke
Sep 19, 2009 9:18 AM
#
Another outstanding accomplishment of Keyvan Nayyeri. Congrats.

Keyvan Nayyeri
Sep 19, 2009 9:26 AM
#
Thank you, Dave :-)

It's not such a big accomplishment ;-)

Mohammad Mahdi Ramezanpour
Sep 19, 2009 9:58 AM
#
Wow! It's so simple and so cool! By the way, your new website's theme is very similar to Jeff Atwood's (http://codinghorror.com) website.
In fact, I like this style and also its simplicity!
Anyway, Congrats :-)

Mahdi Taghizadeh
Sep 19, 2009 10:07 AM
#
Congrats ;)

Jef
Sep 19, 2009 10:09 AM
#
I just swapped GraffitiCMS in favor of Wordpress since I don't have the skills to write my own :)

The thing I was dreading the most was the URL changes, but the URL Mapper plugin of IIS7 and the Wordpress Redirection plugin made this super painless.

I'm sorry to see GCMS fall so far, but I agree the economic times just didn't allow them to focus on their niche product enough.

Also, check out disqus.com for a more robust comment engine, as it will also allow you to import comments into it.

Jef
http://jeftek.com

Keyvan Nayyeri
Sep 19, 2009 10:10 AM
#
@Mohammad Mahdi

Thank you.

The only similarity that I see between my new theme and Jeff's is the white color. This way my theme is similar to millions of sites in the world!

@Mahdi

Thanks :-)

Keyvan Nayyeri
Sep 19, 2009 10:12 AM
#
@Jef

Yes, I'm sorry for seeing this bad situation for Graffiti CMS.

Thank you, I've already checked Disqus but may reconsider it for my new blog.

Rob Bazinet
Sep 19, 2009 10:56 AM
#
Wow Keyvan, you were serious about moving off of GraffitiCMS. I am still contemplating the move as well but fear all of the links I have coming in will be broken.

How did you deal with the incoming links from other websites linking to your blog URLs in the GraffitiCMS format to your new format?

Great work!

Rob Bazinet
Sep 19, 2009 11:02 AM
#
@jef, so you are running Wordpress on IIS7? If so, any issues?

Keyvan Nayyeri
Sep 19, 2009 11:07 AM
#
@Rob

Thank you.

I maintained my old post Slugs during the migration and used ASP.NET routing to map old URLs to their new equivalents, so none of the URLs is broken.

Jef
Sep 19, 2009 11:21 AM
#
Rob,

No issues at all with wordpress and iis7.

In fact I had gcms and wordpress running side by side until last night when I removed the gcms files.

Essentially all I did was modify Jon's gcms export tool to include more fields and export my content.
Installed wordpress
Configured it
Imported my content into wp from export file which gave me the new links
Created an IIS7 url mapping file to map the old and new links
Enabled index.php as a higher precedence page than default.aspx
Reset my feedburner links
Since then I have used the Redirection plugin for wordpress since it gives me more control and also better reporting of 404s so I can update rules.

Maybe I will create a post on it instead of here in the comments :)

But so far I am very impressed with wordpress.

Jef
http://jeftek.com

Rob Bazinet
Sep 19, 2009 11:48 AM
#
@keyvan, interesting. I hope you share the code at some point, I would like to see how you solved the problem with routing.


Rob Bazinet
Sep 19, 2009 11:50 AM
#
@jef - Thanks for the info. I would like to see that blog post for sure. :-)

Running PHP on IIS7 concerns me a little. Have you done any profiling to see how memory is utilized on IIS7 by PHP? I am not aware of really anyone doing PHP on IIS.

I agree Wordpress is great way to go with so many great plugins.


Keyvan Nayyeri
Sep 19, 2009 12:50 PM
#

@Rob

My solution is simple. During the conversion of database data, I kept the old post names in a column in the new table. Every time I receive a request matching the old blog URL pattern, I retrieve the new post name from the database and map it in ASP.NET routing.


mohamadreza
Sep 19, 2009 2:17 PM
#

congrats man.
Simplicity rules ;)
I like the style and theme and also behind the scene, which is a great job.


Keyvan Nayyeri
Sep 19, 2009 2:33 PM
#

@MohammadReza

Thanks :-)


Jef
Sep 19, 2009 11:32 PM
#
Rob and all,

I posted about the migration of GrafficitCMS to Wordpress here:

http://jeftek.com/520/migrating-blog-from-graffiticms-to-wordpress/

Keyvan Nayyeri
Sep 19, 2009 11:48 PM
#

@Jef

Nice. Thanks for sharing :-)


Ryan Farley
Sep 21, 2009 4:50 PM
#
Looks great Keyvan! I am looking forward to playing with the source in the future.

-Ryan

Keyvan Nayyeri
Sep 21, 2009 10:20 PM
#
@Ryan

Thank you :-)

Gary McPherson
Sep 22, 2009 12:40 PM
#
Hey Keyvan, good to see you still making cool stuff, just because you can. It's sad that you even had to go to those lengths, but I guess it shows that every cloud has a silver lining!

Keyvan Nayyeri
Sep 22, 2009 12:48 PM
#
@Gary

Thanks for your comment :-)

Yes, the current situation for Telligent was unfortunate. They faced with the crisis just at the same time they were about to have a huge jump. However, I hope things return to normal for the company soon.

Nariman
Sep 30, 2009 12:57 PM
#

Nice blog, Keyvan; I'm subscribed! Just getting started with MVC after some deep introspection. Given that you seem to know Telligent well, I'd be curious to get your thoughts on CS pricing: http://www.onpreinit.com/2009/06/community-server-final-thoughts-on-role.html


Rebwar
Oct 03, 2009 8:38 AM
#
Hey keyvan.
Good works and nice name for your blog engine.

Keyvan Nayyeri
Oct 07, 2009 4:59 AM
#

Trackback from Sitemap Action Result for ASP.NET MVC.


Digging My Blog - Dan Hounshell
Oct 15, 2009 11:08 AM
#
I finished reading Beginning ASP.NET MVC 1.0 this past weekend. Keyvan Nayyeri and Simone Chiaretta did

Michael E
Dec 02, 2009 1:23 PM
#
Hey there,

That is pretty cool that you built your own solution, I am very impressed. I just wanted to inform you and others that Graffiti CMS is going open source so it looks like it will be 100% extendable.

Twitter Comment by Scott Watermasysk:
http://twitter.com/scottw/status/6020011113

Open Source Wishlist started by the few Graffiti Followers that made it the year without updates:
http://support.graffiticms.com/t/1763.aspx



Keyvan Nayyeri
Dec 02, 2009 1:33 PM
#
@Michael

Thanks for your comment and informing me about that. Yes, I had heard about the announcement and have been following the updates.

Michael E
Dec 03, 2009 10:42 AM
#
Pretty cool, I am pretty excited about it since I have not yet found a more reasonable .NET CMS that is as affordable.

Are you planning on being part of the Graffiti, Open Source community or have you had enough?

Your additions to the original CMS were significant, it would be pretty awesome to have someone like you involved with Graffiti open source.

-Michael

Keyvan Nayyeri
Dec 03, 2009 10:58 AM
#
@Michael

Well, if they release the product under a real open source license and we can find a robust group of developers interested to convert it to ASP.NET MVC, I'm very interested to incorporate and help it as much as I can afford because as you said, Graffiti CMS seems to be the richest ASP.NET CMS available.

Leave a Comment





Ads Powered by Lake Quincy Media Network