I'm Keyvan Nayyeri, a 25 years old Ph.D. student at
the Computer Science department of
the University of Texas at San Antonio.
I'm also
a Software Architect and Developer and previously held a B.Sc.
degree in Applied Mathematics.
This is my blog where I publish content about various topics specifically Programming Languages and Compilers, Software
Engineering and Programming.
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.
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.
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.
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
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.
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.
During the migration process I applied some major changes in my blog:
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.
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!
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.
Dave Burke
Sep 19, 2009 9:18 AM
#
Keyvan Nayyeri
Sep 19, 2009 9:26 AM
#
It's not such a big accomplishment ;-)
Mohammad Mahdi Ramezanpour
Sep 19, 2009 9:58 AM
#
In fact, I like this style and also its simplicity!
Anyway, Congrats :-)
Mahdi Taghizadeh
Sep 19, 2009 10:07 AM
#
Jef
Sep 19, 2009 10:09 AM
#
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
#
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
#
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
#
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
#
Keyvan Nayyeri
Sep 19, 2009 11:07 AM
#
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
#
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
#
Rob Bazinet
Sep 19, 2009 11:50 AM
#
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
#
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
#
-Ryan
Keyvan Nayyeri
Sep 21, 2009 10:20 PM
#
Thank you :-)
Gary McPherson
Sep 22, 2009 12:40 PM
#
Keyvan Nayyeri
Sep 22, 2009 12:48 PM
#
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
#
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
#
Michael E
Dec 02, 2009 1:23 PM
#
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
#
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
#
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
#
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