nodeTunnel();
If you've read even a few of my blogs then it's pretty obvious how much I love .NET. Some might even call me a "fanboy" of Microsoft tech. However, despite all that I think I've finally been intrigued enough by another language that I'm going to take a stab at doing a project in a new language. Well, the language isn't really new, but the concept sure is!
Node.js has been catching my eye for almost a year now. I've dabbled here and there and I've done more Googling and researching than I care to admit. I definitely have a tendency to fall into a "waterfall" mentality where I get stuck researching for long periods of time but never actually execute on anything. Once I realized I wanted to do something with Node I began to think about what I wanted to do. Podstarter is about to get underway and I strongly considered writing that in Node. After much thought I felt like such a large project would benefit from my experience with .NET so I decided not to do that. Then I thought of this place. Code Tunnel has been up for almost two years now and it has been one of my favorite personal projects; mostly because of the content but for my first real MVC project the code isn't half bad either.
I started this site in MVC 2 and upgraded to 3 the moment it was released in a stable condition. I fully intended to bump it up to MVC 4 when Windows Azure Websites implemented support for ASP.NET 4.5. Now that it finally does support 4.5 it is somewhat ironic that I'm considering writing it in another language altogether. I think it will be an exciting project. I expect it will take me a week, maybe a little more. I've done extensive reading and I believe I know pretty much all the technology I plan to employ.
Before I rattle of some cool tech I want to set a few ground rules. CodeTunnel has been my pet compatibility project and I don't want that to change. This website works as far back as I have tested. It looks a little funky in IE 5 & 6 but you can bet that it functions just fine and is completely readable. The site has to continue to work with Javascript turned off. This means that I will continue to follow the progressive enhancement design philosophy. I will build the site to work in the lowest browsers possible, as far back as IE 6 at least, and then add features as they become available. When Javascript is enabled then scripts will override default functions and AJAXify things that would otherwise work through plain requests. To that end, one of the awesome pieces of tech I plan to use is Modernizr. I plan to detect when a browser is capable of certain things and then use those things to my advantage.
Here is a list of all the tech I have put together.
Server-side:
- Node.js (obviously)
- Express.js MVC framework.
- Jade view engine.
- Stylus CSS engine.
- TypeScript typed and compiled JavaScript.
- MongoDB NOSQL database.
- Socket.io for real-time comments.
- Mocha and Chai for Behavior Driven Development
Client-side:
- I also plan to use Mocha and Chai to test client-side code.
- Knockout.js for MVVM on the client.
- Modernizr to detect what features are available to me.
- Toastr for simple toast notifications.
- JQuery because anyone who doesn't use JQuery for DOM interaction is square.
The tech that I plan to implement in the new CodeTunnel will be impressive, but by far the hardest decision before me is what IDE to use for development. So far there are several choices I am considering. Do I just kick it old school and use Sublime Text 2? It's certainly possible that I could just use something like nodemon and write all my code in Sublime. I'm seriously considering that option just to experience what it's like programming without an IDE. However, there are some other quite compelling options.
I could use Web Storm by JetBrains for my Node development. Web Storm is a full IDE for Node and from what I've seen it seems pretty complete. Debugging is very simple in Web Storm and that is a big deal, especially in a dynamic language like JavaScript. I'm seriously considering shelling out the 50 dollars and picking up this IDE, but I haven't been sold just yet because of another contender in the ring.
Cloud9 IDE is a complete Node.js IDE with all the bells and whistles. So what's the problem? It's a web application. Don't get me wrong, it's one of the most impressive web applications I've ever seen. It even includes full-featured debugging. Even cooler is the fact that the entire application was built with Node. I really want to use Cloud9 but something feels amiss when I am in there. There are little issues that I keep running into when I play around with it. Granted, I haven't sat down and tried to use it to develop an actual application, but I'm still a little weary about pulling the trigger and making it my IDE. Another issue is that I need to run MongoDB locally for development and then deploy a live version of MongoDB; developing in the cloud would make it difficult to setup a development database. I'm sure I could figure something out, but I'm wondering if it doesn't just make more sense to develop locally.
Another option is to install Cloud9 locally. Unfortunately it only runs on Linux. I'd have to either dual-boot and setup Linux on my local machine or go for the more attractive option and host it on an Azure Virtual Machine. I could then setup MongoDB on the VM as well. If I spin up a VM then I will have two deployment options when I want to put the site live. I can either host the Node application right there in the VM or I could publish to Azure Websites which is where CodeTunnel is currently hosted. While I'm intrigued about the idea of running my own Ubuntu web server for the experience, I'm also worried that it will be too much to maintain and might wish I had just gone with Azure Websites. It's possible I may have to spin up a VM anyway because I don't know how else I will host MongoDB for the live site.
I haven't decided which direction I'm going to go but I am hoping to make a decision by tomorrow so I can start working. I'll be sure to keep you all updated with my progress :)