When I got tapped to do the back-end work on the Rosey Awards website, I knew that I was in for trouble. It’s a pro-bono project and, while Pop Art encourages pro-bono work, the hours spent on pro-bono work are scrutinized a lot more carefully. After all, Pop Art has to look out for its bottom line, and client billable hours are critical. I looked at the desired functionality (which is not inconsiderable) and said that 40 hours would be an extremely aggressive schedule.
If I had to do it again, I would have said 80 hours and called that aggressive. It’s been a long time since I worked so late into the wee hours that it made more sense to just sleep on the couch in the company lounge than to go home. Mad props to all the good folks at Pop Art who have also been working their butts off to make this site happen: John, Dave, Lorien, and Lulu. They all put in a lot of hours, but John really went above and beyond, coming in on weekends with me, and keeping it real until well past midnight. Thanks also to Del and Dylan; neither of them were working on the project, but they each provided a key piece of functionality at the 11th hour, and helped save my bacon.
Though I’m awfully fuzzy from lack of sleep, my mind is just crammed full of fantastic new stuff I learned doing this site, some of which I’ll be blogging about over the coming months. For now, though, I just want to get some of my overall impressions on paper (so to speak).
When I first heard about the MVC pattern, I wasn’t impressed. I was working on desktop software at the time, and I’m still not convinced that MVC is a great fit for desktop software. However, for the web, the MVC pattern brings a lot of really important structure to a rapidly-changing, chaotic environment. ASP.NET’s MVC3 implementation has a lot to offer, and it’s very well-engineered. (As an aside, I actually feel that the MVVM pattern makes more sense; but it’s easy enough to employ MVVM patterns within the framework of MVC.) Scott Guthrie’s team has done a great job putting together a framework that is both well-designed and highly extensible. However, after a marathon implementation of the Rosey Awards website, I’m also acutely aware that MVC3 is still an immature technology. This is not a criticism, just an observation: I still feel it’s one of the best frameworks available for web applications. But there are definitely some areas in which it could improve, and I’m really curious to see if some of them will be addressed in the upcoming MVC4 (the developer preview has just been released!) I’ll be sharing some of the more esoteric problems you can run into, and how to avoid them. I’ll also be checking out the MVC4 developer preview and writing about that.
The proliferation of dynamic websites has led to most people having a staggering number of logins. As we all know, the human factor is the weak link in information security, and that embarrassment of logins is contributing to the problem in a big way. John and I decided to be part of the solution instead of part of the problem, and implemented and OpenID login for the Rosey Awards. Thanks to the fantastic DotNetOpenAuth, this was mostly painless. However, I’m not satisfied with “mostly painless:” in particular, I’m blindly trusting DotNetOpenAuth to be secure. I’m going to be delving a little deeper to better understand the OpenID specification so I can make a more authoritative assessment of the security implications of using a federated login. Also, we really wanted to provide an option for Facebook login, but because Facebook uses it’s own authentication method, and is not an OpenID provider, this feature got left on the cutting room floor. Now that the Rosey Awards are done, I’ll be looking into providing a seamless authentication experience, allowing users to log in using an OpenID provider or Facebook, which should cover 99.99% of all users on the internet.
JQuery File Upload
Anyone who’s ever had to process form-based submission of files knows that it’s the bane of web development. Browsers, for security reasons, place all kinds of restrictions on what information is provided to a remote server when a file is uploaded and, worse, there’s no standard implementation of browser file upload controls, which is a design nightmare. However, the standard controls are easy, well established, and something I know how to work with. Fortunately, John talked me out of taking the easy path here. He insisted that we needed a great file upload experience, and I finally gave in and implemented an upload framework based on JQuery File Upload. It was surprisingly painful, but now that it’s done, you best believe I’ll be leveraging that code for future projects. I hope to contribute to the community documentation for JQuery File Upload as well, as I found the existing ASP.NET sample implementations were all lacking, and the picture for people using MVC3 was even worse.
Leveraging Facebook’s Social Graph Framework
This year, the People’s Choice for the Rosey Awards will be determined by Facebook likes. I’ve got a lot to say about this, and it’s mostly positive. If anything, my complaint about Facebook’s developer documentation is that it’s too easy. Or, more to the point, it’s aimed towards people whose needs are very simple. It’s a lot more difficult to get good information on how to do something more sophisticated.
Time for lunch, an early departure from work, and (finally) a good night’s sleep. Don’t forget to go check out the Rosey Awards, and vote for your favorites!