Finally I did it! I burned my old SharePoint blog and R.I.P.’ed my former Russian blog (DasBlog) as promised.

The problem

Just to recall the history. Several years ago I realized that I need a new website/portal to host my stuff. Initially I looked for a ready solution that would match my humble requirements:

  1. It should support hierarchical site directories to organize content;
  2. It should support SQL database;
  3. It should support multi-level hierarchical content categories;
  4. It should support an ability to control rendering;
  5. It should support old URLs and redirect to migrated content. It was very important, because I realize that there are tons reference links to my previous weblogs and can’t simply break them;
  6. Should use friendly URLs;
  7. Preferably, it should be .NET-based.

There were several candidates:

  • SharePoint (what? Again?)
  • Orchard
  • BlogEngine.NET
  • DasBlog (again)

After testing each from the list, neither matched all my requirements. I used to like Scott Hanselman’s DasBlog, as it matched almost all requirements, except first two. After that I decided to write my own blog/website engine with black-jack and hookers.


The first problem was that I don’t have web-application development experience. Many thanks to Sergey Zwezdin, who helped me to make first steps and provided valuable support during development. He suggested to try ASP.NET MVC + Entity Framework (EF) as a start point. Relatively quickly I learned basic concepts and some non-trivial things. Site development started about 2 years ago, but last year I realized that this is a bullshit, not a website and started again with new knowledge. Due to my studies at university, the progress was quite slow and only after exams I was able to work on website intensively.

The biggest conceptual problem was with hierarchical site directories, where each directory would have their own settings and filters. Once I implemented this, I faced another issue: ASP.NET routing failed to differentiate directories and pages with matching names. Actually, this was the only thing I couldn’t handle correctly and was forced to apply extensions to pages (like in classic WebForms). But I don’t care too much about this, not a big deal.

Second phase was existing content migration. Neither, DasBlog, nor SharePoint allows to export content in BlogML format. Since DasBlog uses XML to store site content, I quickly converted them to BlogML, including comments. With SharePoint this trick didn’t worked, so I used my small Metaweblog API client to grab posts from database.

Next phase was HTML content rendering control. I wanted to template some parts of page contents. For example, provide an unified PowerShell syntax highlighting, PowerShell console box rendering and so on. A great HtmlAgilityPack library became extremely handy to clear inline styles, transform HTML fetch images, rewrite embedded links to a new format and much more. In a fully automated way! I can guarantee that any direct link to any of my previously published page will work by redirecting to a new URL. Now this library is used to replace HTML at runtime. I wrote nice PowerShell syntax highlighter (by using built-in PowerShell tokenizer) and reused XML/HTML syntax highlighting from PS Cmdlet Help Editor and much more. JavaScript-free.

Once this major task was done, I started to work on related stuff, like Metaweblog API server (to post articles via Windows Live Writer), management system and UX. Eventually, I ended up with 5 MVC controllers and 5k+ (according to Visual Studio metrics) lines of code.

At this point, my new web site implements almost all my wishes, except the biggest one: site search. Unfortunately, there are no easy-to-use search engines for .NET applications, but I’m going to work on it. There are two search engines: Lucene.NET and Solr.NET, but they doesn’t look easy and requires some research.

What next?

There are still places to improve. My general roadmap includes:

  • Research an ability to add on-site search;
  • Replace heavy CKEditor with lightweight editor in the comment boxes;
  • Re-categorize existing content in main weblog;
  • Implement cuts for main page feed;
  • Move external content to this web site.

Final word

As a final word, I encourage you, my readers, to update bookmarks, links (if possible) to my website and RSS feed. For any questions, and/or issues, please, report them in the contact form.

And do not forget to visit my website for new content. Thank you, very much!

Share this article:



It is pity the Russian website is gone. Is it still available somewhere? I'd like to download some articles for my archive.



See "Former Blog" in the nav menu http://sysadmins.lv/blog-ru/default.aspx


Post your comment:

Please, solve this little equation and enter result below. Captcha