Welcome to the new blog, same as the old blog. But different! [Hosting my blog at a new location on a new framework]
I've had blog since 2006. It's called Delay's Blog and - for a time - was among the top most visited blogs on MSDN. MSDN hosts its blogs on the Telligent platform and has a team of people whose job it is to keep things running. This is a nice perk and that team makes it easy for Microsoft employees to reach a wide audience. I had a good run and I appreciate all their efforts!
However, I'm something of a control freak and tinkerer and I've always thought it would be nice to own the whole content pipeline. So I decided a number of months ago to migrate this blog to my own site instead. Of course, there are a wealth of good blogging platforms I could have chosen, and lots that are based on the ASP.NET stack I use for the rest of my site.
But I didn't choose any of them - instead, I've written my own blogging platform based on the Node.js stack. While I'll be the first to acknowledge there's an element of NIH going on [ :) ], there were other considerations:
- Node.js presents a good learning opportunity for a .NET guy like myself
- The Node.js community is very active and NPM has a wealth of great packages
- Though I like typing posts in HTML, I want to experiment with Markdown
- By writing my own blog, I have complete control (evil laugh...)
Development happened in small bits and pieces over many weeks and bus rides; the result is the blog you're reading now.
For the curious, here's what I used to build the site:
- iisnode - Hosts Node.js on IIS on Windows
- express - Web application framework
- express-hbs - Template engine for Handlebars
- less.js-middleware - Support for the LESS pre-processor
- lodash-node - Modules for Lo-Dash methods
- async - Asynchronous method utilities
- moment - Date and time helpers
- marked - Markdown parser
- highlight.js - Code syntax highlighter
- node-rss - RSS feed generator
- Disqus - Commenting service
- nodemon - File watcher and web server host
- grunt-contrib-jshint - Grunt task for JSHint validation
And here are a few of the features I implemented:
- Post content is HTML or Markdown (original posts were migrated directly)
- Support for both posts (in the timeline) and pages (separate, linkable content)
- Responsive design scales/scrolls wide content and moves the sidebar when narrow
- Database-less implementation makes content easy to deploy with Git
- Short, deterministic, human-readable URLs for posts and pages
- Pre-blogging support via automatic "go live" times for posts
- Automatic server-side syntax highlighting for code samples
- Simple, quick, semi-relevance-based search across all posts
- Tags, archives, paged content, RSS, and other standard blog stuff
For convenience, I've migrated all the existing content from MSDN so I can reference it in one place (here!). For continuity, I've left the posts on MSDN, with comments disabled and a pointer to this site for new content.
As expected, developing my own blogging platform on a new framework was a great learning experience; I had a good time doing it and am happy to finally have complete control over my (blogging) destiny.
I even queued up new ideas for blog posts along the way! :)
- Oops, I did it again [A rewrite of my website/blog platform - now public, open-source, and on GitHub as simple-website-with-blog]
- Lint-free documentation [markdownlint is a Node.js style checker and lint tool for Markdown files]
- Say goodbye to dead links and inconsistent formatting [grunt-check-pages is a simple Grunt task to check various aspects of a web page for correctness]
- Avoiding unnecessary dependencies by writing a few lines of code [A simple URL rewrite implementation for Node.js apps under iisnode removes the need for the URL Rewrite module]