<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>The Sweet Science Of Coding</title>
    <link>http://sweetsciencecoding.com/</link>
    <description>Articles, tutorials, and thoughts on ASP.NET MVC, .NET, and software development in general by Dan Martin</description>
    <copyright>(c)2012, Dan Martin. All rights reserved</copyright>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/thezendev" /><feedburner:info uri="thezendev" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>CodeMash 2012 Rundown</title>
      <description>&lt;p&gt;CodeMash 2012 was not only my first time attending &lt;a href="http://codemash.org" target="_blank"&gt;CodeMash&lt;/a&gt;, but also my first time attending a software development conference.&amp;nbsp; I really wanted to go last year but did not order tickets quick enough. This year I made sure to not repeat the same mistake, and I still almost missed out on &lt;a href="/blog/going-to-codemash" target="_blank"&gt;getting CodeMash tickets.&lt;/a&gt; I’ll summarize what stood out to me the most and my thoughts on the conference below, but if you want the &lt;strong&gt;TL;DR&lt;/strong&gt; version, then this pic sums it up best.&lt;/p&gt; &lt;p&gt; &lt;center&gt;&lt;img title="CodeMash 2012" border="0" alt="CodeMash 2012 was epic!" src="http://s3.amazonaws.com/TheZenDev/images/codemash_awesome.jpg" width="350" height="262"&gt;&lt;/center&gt; &lt;p&gt;&lt;strong&gt;PreCompilers&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;If possible, I would have attended nearly every session offered during the Wednesday Precompiler. Instead, I had to settle with only two sessions, and I really enjoyed both of them.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;.NET TDD Immersion by &lt;a href="http://twitter.com/JonKruger" target="_blank"&gt;Jon Kruger&lt;/a&gt;&lt;/strong&gt; – I was already fairly comfortable with TDD. But since I don’t get to use it much at my current job, I’m always looking for further insight. Jon did a great job going through the basics and more within the half day session. The material itself was good, but I got a lot out of some of the tips/tricks that Jon currently utilizes to make TDD easier. The Q&amp;amp;A from the audience was also very helpful. Many of us run into similar problems testing, so it was nice to hear what others are doing to solve these problems. We finished the session up by pairing on a payroll calculator kata that was a bit more difficult than you’d initially expect. I look forward to sharing that kata with team members to work on in upcoming weeks.  &lt;li&gt;&lt;strong&gt;HTML5 is Here and the Web Will Never Be the Same by &lt;a href="http://twitter.com/BrandonSatrom" target="_blank"&gt;Brandon Satrom&lt;/a&gt; &amp;amp; &lt;a href="http://twitter.com/csell5" target="_blank"&gt;Clark Sell&lt;/a&gt; – &lt;/strong&gt;I caught the first few minutes of this one from the hallway, it was that packed. Thankfully the CodeMash organizers and Kalahari staff were quick to remedy the situation (Thanks again guys!). This session also ended up being very enjoyable, and could have easily been expanded into a full day event. Brandon &amp;amp; Clark did a great job presenting a lot of information but in a way that not only a web novice like me could understand, but in an entertaining way. In between slides and demos, we were given labs to work on that were very helpful. FYI, you can &lt;a href="https://github.com/csell5/HTML5-Compiler" target="_blank"&gt;find the labs here&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Sessions&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Picking which sessions to go to wasn’t any easier than picking the precompilers. Not only were there always several good sessions going at the same time, but then there were open spaces going on that sounded just as interesting.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Inside the Microsoft Web Stack of Love by &lt;a href="https://twitter.com/#!/shanselman" target="_blank"&gt;Scott Hanselman&lt;/a&gt;&lt;/strong&gt; – This session could have been on basket weaving and I still would have attended. I had heard and seen videos of how good a presenter Scott is, and he did not disappoint.&amp;nbsp; Not to take anyway away from the session material though, which covered a lot of the cool stuff coming soon from Microsoft. There are a lot of really nice improvements on the way that I look forward to working with.  &lt;li&gt;&lt;strong&gt;Breaking the Sound Barrier with Node.js on Windows and Azure by &lt;a href="http://twitter.com/#!/gblock" target="_blank"&gt;Glenn Block&lt;/a&gt;&lt;/strong&gt; – I’ve been a big fan of Glenn’s blog and podcast appearances, so I wanted to attend his session as well. It also helps that I've been very interested in learning about Node.js, so this session became a must see for me. It too, did not disappoint. We got a good overview of Node.js and how to play with it on Windows. The examples Glenn demonstrated were really nice for seeing what you could do in Node.js and how quickly you could do it. It was also really cool to see how open source is helping to improve the experience in Windows. A &lt;a href="https://github.com/WindowsAzure" target="_blank"&gt;Windows Azure github account&lt;/a&gt; is a good start, and something I honestly didn’t expect to see. Add in projects like &lt;a href="https://github.com/einaros/GitAzure" target="_blank"&gt;GitAzure&lt;/a&gt; and the future should be bright for Node.js on Windows.  &lt;li&gt;&lt;strong&gt;Dynamic in a Static World by &lt;a href="http://twitter.com/hhariri" target="_blank"&gt;Hadi Hariri&lt;/a&gt; – &lt;/strong&gt;Great talk on the basics of using dynamic in C#. Hadi was another one of the really good, entertaining presenters at CodeMash. The session was very enjoyable. Basic enough for beginners with dynamic in C#,&amp;nbsp; like me to keep up. But also in-depth enough to answer some of the questions regarding performance and when you should or shouldn’t use dynamic.  &lt;li&gt;&lt;strong&gt;C#’s Greatest Mistakes by &lt;a href="http://twitter.com/jonskeet" target="_blank"&gt;Jon Skeet&lt;/a&gt;&lt;/strong&gt; – I expected Jon’s session to be great, and like most sessions it did not disappoint. The session was originally supposed to be about C#’s greatest mistakes, but Jon changed it up to get more interaction with the audience. Specifically he wanted our thoughts on what we wanted to see in a language, and what made a language more usable. He then talked about some of the surprising “features” in C#, which turned out to be not only amusing but very interesting. The session actually ran over a few minutes, but I would have been fine with this one turning into a double session. Jon was every bit as entertaining and intelligent as I expected, and there is a good chance I got smarter simply through osmosis of being in the same room as him.&amp;nbsp; &lt;li&gt;&lt;strong&gt;Capability vs. Suitability by &lt;a href="http://twitter.com/garybernhardt" target="_blank"&gt;Gary Bernhardt&lt;/a&gt;&lt;/strong&gt; – Another entertaining, yet informative presentation. Gary went over the history of programming languages and how there is a pattern of expansion and contraction between languages. His talk wasn’t very long, but he more than made up for it with his epic &lt;a href="https://www.destroyallsoftware.com/talks/wat" target="_blank"&gt;lightning talk – “Wat”&lt;/a&gt; - that most of you have probably already seen. If not, do yourself a favor and watch immediately (FYI, that’s where I got the image above from) . There was also a good bit of Q&amp;amp;A afterwards where the audience got Gary’s thoughts on where we might be heading in terms of languages and frameworks. Very interesting stuff and a great way to close out CodeMash.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Misc&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Pecha Kucha – &lt;/strong&gt;This was the main event during Thursday’s dinner. Highly entertaining way to cap off a great day. Search “codemash pecha kucha” on Youtube to find a few of the videos if you’re curious, such as the &lt;a href="http://www.youtube.com/watch?v=BrcC2nhXExI" target="_blank"&gt;Urinal Rules Kata&lt;/a&gt;. FYI, you can also find the rules to the &lt;a href="http://melgrubb.wordpress.com/2012/01/16/urinal-code-kata/" target="_blank"&gt;urinal code kata here&lt;/a&gt;.  &lt;li&gt;&lt;strong&gt;Waterpark Party – &lt;/strong&gt;Pretty hard to top drinking beers in a giant outdoor hot tub during a winter storm in Northern Ohio in January.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I can pretty much guarantee I’ll do whatever it takes to make it back to CodeMash in 2013. There are some things I didn’t get to do this year that I’d like to do next year. Specifically, I want to attend some of the open spaces. I heard really good things about some of them and it may be worth missing a session to participate in one that interests me. There were also quite a few people that I didn’t get to chat with that I had hoped to, something I will have to remedy next year. Still, I don’t have many regrets. I had a lot of fun and met a lot really nice and helpful people. I’d like to say Thanks again to the CodeMash organizers for putting on such a fantastic conference. Everything was more than I hoped for, even the infamous Bacon Bar. The Kalahari staff deserves credit too as they were very nice and operate a really nice resort. See you all next year!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/o5VJZHAVAuM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/o5VJZHAVAuM/codemash-2012-rundown</link>
      <pubDate>Wed, 01 Feb 2012 04:53:56 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/codemash-2012-rundown</feedburner:origLink></item>
    <item>
      <title>IFception</title>
      <description>&lt;p&gt;My team at work was working on some code katas and refactoring examples last week when came upon a particularly terrible piece of code. I won’t post the code in question, but let’s just say it consisted of nearly a dozen nested if statements. One of the devs was quick to term the awfulness as “&lt;strong&gt;IF&lt;/strong&gt;ception”. &lt;/p&gt; &lt;p&gt; &lt;center&gt;&lt;img title="Ifception" border="0" alt="Ifception - We have to code deeper" src="http://s3.amazonaws.com/TheZenDev/images/ifception.jpg" width="450" height="291"&gt;&lt;/center&gt; &lt;center&gt;&lt;em&gt;(Found this via Google Image Search. My apologies, not sure who to contribute it to.)&lt;/em&gt;&lt;/center&gt; &lt;p&gt;We all got a laugh, but the term was pretty accurate. I’m sure most of you have heard the Inception joke about having a virtual machine within a virtual machine (etc..), and how it causes them to run really slow. Well the analogy is still pretty accurate with code. It might not always cause an application to perform slower, but it sure as hell slows down the developers who have to maintain the code. All of the developers on the team looked at the code and we decided it was best to leave it alone for now. It was that complicated and in such a critical area that we felt we’d get the best bang for our buck cleaning up some other area of the code. Yeah, it was that bad. It will need to be dealt with sometime, but that time was not Friday at 4pm. &lt;/p&gt; &lt;p&gt; &lt;center&gt;&lt;img title="Ifception" border="0" alt="Ifception - We have to code deeper" src="http://s3.amazonaws.com/TheZenDev/images/ifception_quote.jpg" width="528" height="174"&gt;&lt;/center&gt; &lt;center&gt;&lt;em&gt;I think Olivier expresses IFception quite well.&lt;/em&gt;&lt;/center&gt; &lt;p&gt;So the moral of this story is…? Please don’t do this, ever! Don’t make your fellow developers want to punch you in the throat. Have some pride as a professional. And if you do come across code like this, remember to bring your totem.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/XxbIjsNVUqQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/XxbIjsNVUqQ/ifception</link>
      <pubDate>Mon, 30 Jan 2012 00:14:24 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/ifception</feedburner:origLink></item>
    <item>
      <title>It's Always The Little Things</title>
      <description>&lt;p&gt;I had some time to kill this evening, so I figured I’d address some minor nagging issues with the site. One of which, was that Chrome did not seem to be auto-discovering my RSS feed correctly. I thought I had everything set up right, and it seemed to get picked up by Firefox and IE just fine, but never in Chrome. So where would one begin with solving this issue?&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Google It?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;At least, that is the first step I took. I swear it was working at one time, so maybe there is a bug in Chrome? Doesn’t appear to be one. So let me see if there is some different method or syntax that I should be using in my HTML head tag. Not seeing anything new. I’m missing something, obviously, so what is the next course of action?&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Compare to a Working Site?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;That’s the ticket! I see the RSS icon show up all the time when I’m visiting websites, so I’ll just compare theirs to mine and see what I’m not doing. (Note – I expect to see the RSS feed icon in Chrome because I have the &lt;a href="https://chrome.google.com/webstore/detail/lojpenhmoajbiciapkjkiekmobleogjc" target="_blank"&gt;Chrome Reader&lt;/a&gt; extension installed for simple adding/removing of feeds in Google Reader.) Not seeing anything really different, other than some sites have an atom &amp;amp; xml feed tag so I’ll add an atom tag just to be safe. Still not working, what the hell!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Software Development 101&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Now is a good time to say “the hell with it!” and walk away or better yet get a second set of eyes involved. I chose the former and went to the store for a bit. After returning I decided to give it one more shot and this time I’d do what I should have done in the beginning and carefully examine &lt;strong&gt;my &lt;/strong&gt;syntax and compare to the examples I’m seeing online. Well, wouldn’t you know it! I got a &lt;em&gt;“&amp;lt;link rel=”Alternate ….”&lt;/em&gt; tag where I probably should have a &lt;em&gt;“&amp;lt;link rel=”alternate ...”&lt;/em&gt; tag. Oops! Make the two second change and wouldn’t you know it, my RSS feed is found!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Moral of the Story&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;If something isn’t working how you expect it to, take a closer look at your own work first. Take a nice, close look. It could be the simplest little thing, such as an upper case letter (facepalm), but if you get carried away you can and will waste a lot of time. In my case, I lost a good hour over something so stupid. Also remember, you don’t have to be a beginner to make a beginner mistake!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/29A4tS4LVGo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/29A4tS4LVGo/its-always-the-little-things</link>
      <pubDate>Sat, 21 Jan 2012 04:18:57 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/its-always-the-little-things</feedburner:origLink></item>
    <item>
      <title>2011 Retrospective And 2012 Goals</title>
      <description>&lt;p&gt;After a fairly active 2010, I set several important goals for myself in 2011. So how well did I do in accomplishing those goals? To be honest, I am pretty disappointed in myself but I remain hopeful and excited for 2012. Anyway, here are the results for 2011.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2011 Goals&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Read 12 technical books&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;Started off strong and managed to read 5 books within the first 3 months! Unfortunately, I only managed to read one more book the rest of the year. I’d like to say that I had a good reason for not reaching this goal, but the truth is I got lazy and couldn’t stay consistent.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Contribute to an OSS project&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;Epic fail. I didn’t even attempt this one. I kept putting it off, just like last year, and still never took the dive. &lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Attend a conference&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;I did not attend any conferences in 2011. However, I did order tickets for CodeMash 2012 and am glad to say that I attended and had a great time. (Expect some follow up posts soon)&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Learn a new language&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;I played with ruby a bit earlier in the year, but the language I learned the most would have to be JavaScript. I still have a lot to learn, but I got in some good practice with this language over the summer.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Get involved in the dev community&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;Another epic fail. I’m located in north east Ohio, where there are plenty of interesting user groups and various meetings and I did not manage to attend a single one of them. I have been attending some development &amp;amp; learning sessions with co-workers outside of work hours, but still not the same.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Personal projects&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;I worked on a couple projects again this year, but just like last year I failed to produce anything worthwhile. I have several projects that are in limbo, and have yet to properly finish and release them.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;As I said, I’m pretty disappointed in 2011. I know I could have accomplished a lot more in regards to software development. I started off strong, but have little to show for the second half of the year. On the other hand, I did focus quite a bit on some personal matters, specifically health, which may have been for the best (I will post more info on this later).&amp;nbsp; So how do I plan to redeem myself in 2012?&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2012 Goals&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Read 12 technical books&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;Big surprise. There are so many books that I want to read and/or should have already read, so I fully expect this to be a goal for a long time.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Contribute to an OSS project&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;This is a must. I have to put aside ego, fear, &amp;amp; laziness and get more involved this year. The benefits are too great to ignore any longer.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Attend a&amp;nbsp; conference&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;I’ve already accomplished this one. Although I’m looking to attend another conference later this year if possible.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Learn a new language&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;This is another goal that I expect to repeat for a long time. There are a lot of interesting languages/frameworks that I want to learn. I need to continue mastering the languages I already know, but I still think it is important to gain other perspectives.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Get involved in the dev community&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;This is also a must. It is absolutely facepalm worthy that I have remained as inactive in the community as I have so far. There are so many talented developers in this area and I have nothing to lose by getting more involved.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;Release personal projects&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt;Another must. I have to finish some of these little projects. I don’t want to be the LeBron James of software development. 75% done is not acceptable, so I plan to get back to work and release at least 3 projects this year. They probably won’t be great or that ambitious, but it’s a good first step.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Looks pretty familiar, huh? I’m a big fan of redemption, so my goal this year is to essentially correct the sins of last year. January is already half over, but I feel good about this year. My desire to get better as a developer is as high as it has been in a long time, so I’m really looking forward to a nice year!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/LhiG9VyGRwA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/LhiG9VyGRwA/2011-retrospective-and-2012-goals</link>
      <pubDate>Thu, 19 Jan 2012 02:25:45 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/2011-retrospective-and-2012-goals</feedburner:origLink></item>
    <item>
      <title>Going To CodeMash</title>
      <description>&lt;p&gt;Finally! I’ve been wanting to go to the &lt;a href="http://www.codemash.org/" target="_blank"&gt;CodeMash conference&lt;/a&gt; for a couple of years and always manage to find an excuse not to. This year I finally made it a point to ensure that I’d go. I booked my hotel reservation a month in advance and I was ready to order my ticket as soon as they went on sale. Turns out that was a very wise decision, because all 1200 tickets were sold within the first 20 minutes. I ordered as soon as they went on sale and this is what I saw on twitter immediately following the completion of my order:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Sold Out?" border="0" alt="CodeMash 2012 tickets are almost sold out?!" src="http://s3.amazonaws.com/TheZenDev/images/codemashtweet.png" width="511" height="174"&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Well that was close. I know a lot of people who were stuck in meetings and had to get on the waitlist because they were a few minutes late. Crazy stuff, but it only makes me look forward to the conference in January that much more. There are a lot of good sessions and I can already tell that I’m going to have a hard time choosing which ones to attend and which ones to miss. I’m also pretty excited about some of the After Dark sessions that are being planned. There is a good thread on the &lt;a href="https://groups.google.com/forum/#!forum/codemash" target="_blank"&gt;CodeMash Google groups board&lt;/a&gt; with ideas for talks, many of which I’d be interested in learning about. &lt;/p&gt; &lt;p&gt;Anyway I can’t wait. Hopefully I won’t be lazy and manage to do a few posts covering the conference. It is blog posts about the conference that got me interested in it initially, so I’d be more than happy to get others interested in attending in the future.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/F34fGpNajTM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/F34fGpNajTM/going-to-codemash</link>
      <pubDate>Sat, 29 Oct 2011 17:10:49 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/going-to-codemash</feedburner:origLink></item>
    <item>
      <title>The Windows 8 Post That Never Was</title>
      <description>&lt;p&gt;I was digging through my collection of half-written blog posts and found one regarding the Windows 8 demo and the resulting fallout from back in June. It was amusing at first to watch people freak out about HTML5 &amp;amp; JavaScript. There was a good mixture of laughter and shaking of my head as I read through the replies in the epic Silverlight.net forum threads that resulted in millions of page views. I had all sorts of absurd and moronic quotes written down. I even put to practice my awful Photoshop skills to make a funny picture describing the situation (linked below). I started to make the case for and against all the rage. I had jotted down my own predictions and what I expected to see announced at the BUILD 2011 conference in September and so on and so on…&lt;/p&gt; &lt;p&gt;&lt;strong&gt;So why not finish it?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I don’t care anymore. If you want to think Silverlight is dead, be my guest. If you think using JavaScript is a return to the stone ages then more power to you. I don’t care. Maybe it’s because I never invested any significant time into Silverlight/WPF. Maybe it’s because I do not see any problem with using HTML5 &amp;amp; JavaScript. Or maybe it’s because I really don’t have a damn clue what the future will be. In either case I don’t care enough to debate that topic anymore. I just want to move on and continue to learn. The individual technology does not concern me much. I just want to get smarter and better at software development. And hopefully whatever the story is for Windows 8 or Windows 15, I will be good enough to leverage those technologies and build something cool.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Cool story bro, but you finished it anyway!&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Yeah I know, but maybe I really just wanted a reason to post my terrible image...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Trolled Hard" border="0" alt="WPF &amp;amp; Silverlight Developers Get Trolled" src="http://s3.amazonaws.com/TheZenDev/images/windowsdev.jpg" width="640" height="480"&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/MdJo4BHVddU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/MdJo4BHVddU/the-windows-8-post-that-never-was</link>
      <pubDate>Tue, 30 Aug 2011 03:39:16 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/the-windows-8-post-that-never-was</feedburner:origLink></item>
    <item>
      <title>Filtering Errors In ELMAH</title>
      <description>&lt;p&gt;There are very few projects I enjoy more than &lt;a href="http://code.google.com/p/elmah/" target="_blank"&gt;ELMAH&lt;/a&gt;. If you’ve never heard of it, please check out the project site for more details. It is essentially an open source gift from the software gods that lets lazy people like me easily do application-wide error logging. I use it on this blog and have no complaints. However as I intended, I will receive emails for every exception encountered. Even on a low-traffic site such as this, I end up with an absurd amount of 404 errors. So it would be nice if I could ignore the 404 errors and continue to be notified of the others.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ELMAH can do that!&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Sweet! A quick search reveals that not only does &lt;a href="http://code.google.com/p/elmah/wiki/ErrorFiltering" target="_blank"&gt;ELMAH support filtering&lt;/a&gt;, but it is very easy to do like everything else associated with it. In fact, there are two ways of accomplishing this, programmatically and by configuration. I avoid Web.config whenever I can, so I’ll opt for the programmatic approach. This requires me to add a small bit of code to my Global.asax.cs file:&lt;/p&gt;&lt;pre style="font-family: ; background: #22282a; color: "&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; ErrorMail_Filtering(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; sender, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;ExceptionFilterEventArgs&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt; args)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Filter404Errors(args);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; Filter404Errors(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;ExceptionFilterEventArgs&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt; args)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; (args&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;Exception&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;GetBaseException() &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;is&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;HttpException&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; httpException &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;=&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; args&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;Exception&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;GetBaseException() &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;as&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;HttpException&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; (httpException &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;!=&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;&amp;amp;&amp;amp;&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; httpException&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;GetHttpCode() &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;==&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ffcd22"&gt;404&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#f1f2f3"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; args&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;Dismiss();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;You’ll need to reference the &lt;em&gt;Elmah &lt;/em&gt;namespace, but it really is as simple as that. I have custom error pages so users still get redirected to my 404 error page, but without lighting up my phone with new emails. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Let’s change up the requirements&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So I might not have told you everything before. (I always wanted to act like a client!). The problem with handling all the 404 errors is that a good 99% of them are requests to images that no longer exist. Back in the day I’d use my site to host images on various message boards and when I implemented ELMAH I began to get an annoying amount of 404 errors for 50 variations of images like “fail.jpg”. So what I’d really like, is to filter out the common image-related 404 errors but still be notified of the others.&lt;/p&gt;
&lt;p&gt;Thankfully that is simple to do as well. We only need to modify the &lt;em&gt;Filter404Errors &lt;/em&gt;method that we added such as:&lt;/p&gt;&lt;pre style="font-family: ; background: #22282a; color: "&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;static&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; Filter404Errors(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;ExceptionFilterEventArgs&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt; args)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; (args&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;Exception&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;GetBaseException() &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;is&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;HttpException&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; httpException &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;=&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; args&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;Exception&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;GetBaseException() &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;as&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;HttpException&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; path &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;=&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; ((&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;HttpContext&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;) args&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;Context)&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;Request&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;Path;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; (httpException &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;!=&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;&amp;amp;&amp;amp;&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; httpException&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;GetHttpCode() &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;==&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ffcd22"&gt;404&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;&amp;amp;&amp;amp;&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; (path&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;StartsWith(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ec7600"&gt;"/images"&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;) &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;||&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; path&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;EndsWith(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ec7600"&gt;".jpg"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#f1f2f3"&gt;) ))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; args&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;Dismiss();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;Obviously we could make that a lot more elegant. It certainly won’t catch all images, but it will catch all the ones I’m concerned about. So we’re good to go now, right?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I was wrong, You were right…&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So it turns out that even when I filter out 99% of the 404 errors, that it still breaks the threshold where I get annoyed enough to no longer care about them. So I’m going to filter out all of them and hope that if a legit 404 ever pops up that either I’ll notice it or someone will be kind enough to inform me about it. Regardless, filtering specific errors in ELMAH is as simple as it gets and still gives you the ability to be selective if you choose to be. I hope this can be helpful to anyone looking to filter certain errors. If not, please check out the &lt;a href="http://code.google.com/p/elmah/wiki/ErrorFiltering" target="_blank"&gt;official documentation&lt;/a&gt; on the ELMAH project page.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/2Yz7Chq5Yz8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/2Yz7Chq5Yz8/filtering-errors-in-elmah</link>
      <pubDate>Sun, 28 Aug 2011 20:44:33 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/filtering-errors-in-elmah</feedburner:origLink></item>
    <item>
      <title>More Changes</title>
      <description>&lt;p&gt;Yeah...I switched domains again. I never really liked "TheZenDev". The name was stupid at best and was a poorly thought out and rushed alternative to my old dmartin.net domain. Anyway I think I am content with this new one and it is something I have been planning to do for months until I finally got around to doing it. I switched the design up a bit, mostly just color scheme &amp;amp; logo. I plan on fixing up the design a lot more in the next couple of months but nothing too drastic.&amp;nbsp; I got some good posts on some internal improvements I've made that some might find interesting, so I'll try and get on a regular blogging schedule ASAP. If anyone runs into any issues with the "new" site, please let me know.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/nbiHPr60vxA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/nbiHPr60vxA/more-changes</link>
      <pubDate>Sat, 27 Aug 2011 17:30:10 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/more-changes</feedburner:origLink></item>
    <item>
      <title>Partial View Caching in ASP.NET MVC 3</title>
      <description>&lt;p&gt;Exactly one year ago I wrote a post on &lt;a href="http://sweetsciencecoding.com/blog/simple-caching-of-partial-views-in-aspnet-mvc-2" target="_blank"&gt;how to cache partial views in ASP.NET MVC 2&lt;/a&gt;. Back then, you had to make use of the futures assembly&amp;#160; to get this functionality but it was marked as being planned for version 3. I figured I’d write an update post to go over partial view caching and how it has been implemented in ASP.NET MVC 3. As expected, it is now part of the main project and does not require any additional assemblies or packages to be used.&lt;/p&gt;  &lt;p&gt;In version 2, the MVC futures assembly had a &lt;em&gt;ChildActionCache &lt;/em&gt;attribute that one could use to achieve this functionality. However, in ASP.NET MVC 3 you can now simply use the &lt;em&gt;OutputCache&lt;/em&gt; attribute with the child action, just as you normally would with any regular action.&lt;/p&gt;  &lt;pre style="font-family: ; background: #22282a; color: "&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;TimeController&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;Controller&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;ChildActionOnly&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;OutputCache&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;(Duration &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;=&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ffcd22"&gt;600&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;PartialViewResult&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#f1f2f3"&gt; Index()&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ViewBag&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;CurrentTime &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;=&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#678cb1"&gt;DateTime&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#e8e2b7"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#f1f2f3"&gt;Now;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#93c763"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#f1f2f3"&gt; PartialView();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;The duration is in seconds, so in the code above we are telling ASP.NET MVC to cache this child action for 10 minutes. Now when we use this partial view within a regular view, the output will be cached for the specified duration regardless if the main view is cached or not. &lt;/p&gt;

&lt;p&gt;This can be very helpful in some cases. For example, I use partial views for my Links section and the archive links to the right of the page. That data does not change very often, so I cache the child actions to prevent that same data from being retrieved over and over. Hope you find this helpful.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/OOpp0Wx7iZI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/OOpp0Wx7iZI/partial-view-caching-in-aspnet-mvc-3</link>
      <pubDate>Thu, 23 Jun 2011 02:19:07 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/partial-view-caching-in-aspnet-mvc-3</feedburner:origLink></item>
    <item>
      <title>NDC 2011 Video Torrent</title>
      <description>&lt;p&gt;A torrent of all the NDC 2011 videos (&lt;a href="http://www.ndc2011.no/" target="_blank"&gt;Norwegian Developers Conference&lt;/a&gt;) has finally hit the Internet. This torrent, while unofficial, seems to be complete and comes in at around 51GB for all 3-days worth of videos. You can grab the &lt;a href="http://goo.gl/IKrBh" target="_blank"&gt;NDC 2011 torrent here&lt;/a&gt;. I was not able to attend, but I hope to view many of the videos in the next couple of weeks and do a review on my favorites. I encourage developers of any background to at least check out the conference agenda and see if anything catches your eye. Last years conference had many amazing presentations that I was able to view and I enjoyed them immensely. When the official torrent comes out, I will update this post with that link as well.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update – &lt;/strong&gt;I’m not sure when the official torrent is coming out, but according to the &lt;a href="https://twitter.com/#!/NDC_2011/status/82757690480263168" target="_blank"&gt;NDC twitter account&lt;/a&gt;, the official torrent will not be wmv files. So anyone having troubles with these videos or wmv in general may want to hold off until the official torrent is released.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update 2 – &lt;/strong&gt;I added a mirror to the torrent file in case the original one vanishes. You can access the &lt;a href="http://s3.amazonaws.com/TheZenDev/files/NDC2011.torrent" target="_blank"&gt;mirrored torrent file here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update 3 – &lt;/strong&gt;The official torrent has been released! The videos in this torrent are .mp4 and are roughly half the size of the unofficial torrent at approximately 25GB. You can get the &lt;a href="http://ndc2011.no/index.aspx?id=361621&amp;amp;cat=1069" target="_blank"&gt;official torrent here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/upXAy0eNIxk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/upXAy0eNIxk/ndc-2011-video-torrent</link>
      <pubDate>Sun, 19 Jun 2011 23:56:15 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/ndc-2011-video-torrent</feedburner:origLink></item>
    <item>
      <title>Migration Complete</title>
      <description>&lt;p&gt;In a bit of belated news, this blog has been successfully migrated over to AppHarbor. I haven’t gotten around to updating thanks to a mixture of laziness, sometimes being busy, and fixing a few bugs here and there. However I fully intend to resume blogging regularly, including a few posts on the migration to AppHarbor. I’m also planning to redesign this thing, but that will probably be at least a month away. Until then, if you notice something something funky with the site, then please feel free to let me know via the contact page or send me a nasty message through twitter.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/RJlLfyTMRJA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/RJlLfyTMRJA/migration-complete</link>
      <pubDate>Tue, 14 Jun 2011 02:26:49 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/migration-complete</feedburner:origLink></item>
    <item>
      <title>Migrating Site</title>
      <description>&lt;p&gt;Just a heads up, but I am in the process of migrating this blog over to &lt;a href="http://appharbor.com/" target="_blank"&gt;AppHarbor&lt;/a&gt;. So there may be some downtime and general brokenness over the next week or so. I am also redesigning the blog/site but I’ve been running a bit behind so it’ll be a couple weeks before any of that happens. Once I get everything moved over to the new host and everything is work fine I’ll start updating again. I have 3 posts ready to go but I have been holding off. Also, I’m planning a series of a few posts detailing the migration to AppHarbor that I’d like to start publishing first week of May.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/hL7PDNeQtHU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/hL7PDNeQtHU/migrating-site</link>
      <pubDate>Sat, 23 Apr 2011 07:47:16 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/migrating-site</feedburner:origLink></item>
    <item>
      <title>ReSharper Live Templates</title>
      <description>&lt;p&gt;I am a pretty lazy individual, so it didn’t take me very long into my &lt;a href="http://sweetsciencecoding.com/blog/a-kata-a-day-keeps-the-suckage-away" target="_blank"&gt;kata-a-day quest&lt;/a&gt; to start looking for shortcuts. There are a lot of good shortcuts and timesavers built into Visual Studio and &lt;a href="http://www.jetbrains.com/resharper/" target="_blank"&gt;ReSharper&lt;/a&gt; to help improve productivity in .NET. But I am really starting to like and take advantage of ReSharper’s live templates, which are basically a more useful version of Visual Studio’s code snippets. &lt;/p&gt;  &lt;p&gt;One of the big benefits of doing coding katas is working and improving at doing TDD/BDD. I’m ashamed to admit that I didn’t think of it earlier, but I noticed in a lot of coding kata screen casts that people were utilizing code snippets for creating their tests. I searched around and found plenty for VS and ReSharper, but I learn best by doing so I just created my own. Below I’ll review the steps I took to create a live template in ReSharper and this outline can be used to create most templates/snippets that you’d want.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Go to the ReSharper menu in the toolbar and click “Live Templates…” to open the template explorer. This is where you can create/edit your templates. Click the new template button…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 2: &lt;/strong&gt;A window/tab will open for you to enter/paste your code template in and give it a shortcut and description. Clean up the names to something descriptive if you want, but in this case they are only going to be placeholders.&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="" border="0" alt="" src="http://s3.amazonaws.com/TheZenDev/images/rs00_3.png" width="660" height="345" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 3: &lt;/strong&gt;Next wrap each editable portion of the template in $ symbols. This will add them to the right column of the screen. These are the fields that you will be prompted to replace as you tab through.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 4: &lt;/strong&gt;Add “&lt;em&gt;$END$&lt;/em&gt;” to the location in the template where you ultimately want the cursor to be placed. Make any other changes that you’d like (there are lots that you can do) and save.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now return to your code and type the first few letters of your shortcut and your template should show up in the intellisense window. &lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="" border="0" alt="" src="http://s3.amazonaws.com/TheZenDev/images/template01_6.png" width="482" height="263" /&gt;&amp;#160; &lt;/p&gt;  &lt;p align="left"&gt;Tab through or select it and it will insert your code template and highlight any fields you wanted to replace.&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="" border="0" alt="" src="http://s3.amazonaws.com/TheZenDev/images/rs01_3.png" width="414" height="252" /&gt; &lt;/p&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Pretty simple stuff, but incredibly useful when you’re creating a lot of tests. ReSharper is an amazing tool for .NET development and one that I hope to continue to improve at using. It’s the little things like this that save time and let you focus on the actual work. This was a pretty simple and straightforward example, but I could see myself using templates a lot more in the future.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/4glvG83WkXE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/4glvG83WkXE/resharper-live-templates</link>
      <pubDate>Tue, 08 Feb 2011 18:57:51 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/resharper-live-templates</feedburner:origLink></item>
    <item>
      <title>A Kata a Day Keeps the Suckage Away</title>
      <description>&lt;p&gt;I’ve been trying to do more and more code katas over the past few months to improve my skills in…well everything. If you’re not familiar with code katas, then please do yourself a favor and check out some of these links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://codekata.pragprog.com/" target="_blank"&gt;CodeKata – How to become a better developer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://codingkata.org/" target="_blank"&gt;CodingKata.org&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://dotnet.dzone.com/news/code-kata" target="_blank"&gt;DZone – Code Kata article&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;They are worth doing to improve your skills and I have managed to start doing them more often since the new year. But it seems to me that I should be doing them a lot more than just “occasionally”. And then it hit me…&lt;/p&gt;  &lt;p&gt;In order to not be a lazy fat ass anymore, I began doing some activity (lifting, exercise, or even basic stretches) every day (In addition to diet of course) . When I decided to start reading a book a month, I made it a point to read something every day, even if only a few pages. Obviously there are going to be days that you miss, as you won’t find me doing much exercise or reading in Vegas other than 12oz curls and trying to add up the dealer’s blackjack hand. But I consider those acceptable exceptions and am more concerned with the normal, vacation-free weeks.&lt;/p&gt;  &lt;p&gt;So I have decided to apply the same logic to code katas. Starting a couple days ago, I am making it a point to practice a coding kata once a day. Does not matter if it is a new kata or one that I am practicing for the 100th time, I just want to do something. I don’t know how long I plan to do this, as I have plenty of other goals that I am trying to accomplish. But in the meantime, I think it is a worthy endeavor. Actually, I think I’ll try it out for the next 30 days and report back how it went, so stay tuned!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/hNRjjMBapmo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/hNRjjMBapmo/a-kata-a-day-keeps-the-suckage-away</link>
      <pubDate>Sun, 06 Feb 2011 20:42:20 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/a-kata-a-day-keeps-the-suckage-away</feedburner:origLink></item>
    <item>
      <title>Change In Plans - Android Time</title>
      <description>&lt;p&gt;Well, despite my plans and &lt;a href="http://sweetsciencecoding.com/blog/2010-retrospective-and-goals-for-2011" target="_blank"&gt;goals for 2011&lt;/a&gt;, my “shiny object” syndrome kicked in and I have decide to experiment with a little bit of Android development. In my defense, I finally upgraded my old windows mobile phone to an Evo 4g and I have a couple of homemade apps on it that I’d like to port over. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Difficulty:&lt;/strong&gt; I am new to android and haven’t done Java development in at least 5 years, but the transition from C# to Java cannot be that tough. Also working in my favor is that these applications are pretty damn simple. The first one I’ll be focusing on is a lifting warm-up calculator and it is even simpler than it sounds. It will be a free application and I plan on releasing the source code for the entire world to point and laugh at.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Initial Thoughts: &lt;/strong&gt;I’m currently reading through some android books and tutorials and just trying to get used to developing on the platform. I like it so far, although I am having some trouble adjusting to eclipse. A lot of the difficulty is my fault, in that I continue to be a slave to Visual Studio. But there are some weird behaviors with developing android apps within eclipse that I could do without; specifically the 30 second lag you sometimes get when intellisense kicks in. &lt;/p&gt;  &lt;p&gt;Ideally I would like to get this application finished and released in the next couple weeks, as well as review these android books I’ve been reading. Despite the deviation in plans, doing some mobile development will be good experience that I can learn from.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/MTZr1rbdHvw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/MTZr1rbdHvw/change-in-plans-android-time</link>
      <pubDate>Mon, 31 Jan 2011 18:33:26 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/change-in-plans-android-time</feedburner:origLink></item>
    <item>
      <title>2010 Retrospective And Goals For 2011</title>
      <description>&lt;p&gt;It’s been a while since I posted but I wanted to take a look back at my goals in 2010 and see how I did. Also, I wanted to come up with some new goals to strive for in 2011. A while back I wrote a post where I talked about &lt;a href="http://sweetsciencecoding.com/blog/become-a-better-developer-2010---six-month-summary" target="_blank"&gt;my goals in 2010&lt;/a&gt; and gave a mid-year review on them. So how did I do?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2010 Goals&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Read 12 technical books&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;I ended up reading 10 books. I was going strong for a while but started slacking around October when I started job hunting and got lazy. Still, I’m pretty satisfied with the number and quality of books I managed to read. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Complete two of my own personal software projects&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;I managed to finish two of my personal projects. However, because of everything I’ve learned in the past year, I now have a desire to rewrite and improve both projects. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Get my website up and running&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;Managed to do this and have been happy with the results. I have a long way to go but it was a step in the right direction. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Increase proficiency at using ReSharper&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;I am not a master of this tool yet, but I believe I’ve gotten pretty damn good at using it. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Start contributing to an OSS project&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;Never got around to this one and I regret it. I’ll talk about this one more in my 2011 goals. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Change jobs&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;I kept this one secret from my mid-year review because I didn’t want to make anything uncomfortable at my last job. I won’t get too much into the reasons why, but I knew it was time for a change. I did manage to switch jobs at the end of the year to a company where I think I will be a better fit. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Overall, I am satisfied with how 2010 went. I could have done better, but I also could have done a lot worse. Everything was going well until later in the year when I started job hunting and then I got a bit lazy with the side work. If I can avoid that dry spell in 2011, then I should be able to get a lot more accomplished. So what are my goals for the new year?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2011 Goals&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Read 12 technical books&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;This one isn’t going away anytime soon. There is a lot of benefit to doing this and I got a lot of enjoyment out of it as well. I should clarify that the books don’t have to be completely technical. I am very interested in reading books that discuss the theory and principles related to software design. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Contribute to an OSS project&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;This is something I should have been doing for years and I will not go another year without giving it a shot. This year I will find a project and make some contributions to it. I truly believe this is a step I need to take to improve as a developer. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Attend a conference&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;I really wanted to attend &lt;a href="http://www.codemash.org/" target="_blank"&gt;CodeMash&lt;/a&gt; this year, but I waited too long and it sold out quickly. Hopefully I will be able to attend something else this year. If not, then I can guarantee that CodeMash will be a must in 2012. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Learn a new language&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;Something I probably should have done in 2010, but I was more focused on general improvement in my existing langauges. Not sure which language I will learn, but it will probably be Ruby. I have a couple Ruby books sitting around and I think this one might benefit me the most, as well as being enjoyable. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Get involved in the dev community&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;I made some good steps in 2010, but this year I really need to get involved more. I think contributing to OSS and conferences will help, but there are several user groups nearby that I really should be attending. I learn a lot from reading blogs and listening to podcasts, but I think I could learn even more if I participated in these groups. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Personal Projects&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;Yeah, that is pretty vague. I am not sure how I want to go with this one. Either I want to rewrite a couple of small applications and release them to open source, or I want to start a completely new project. I haven’t decided yet and probably will not start working on this one for a couple more months. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Probably not the most ambitious set of goals, but they work well for me. I still have a lot of general improvement to make as a software developer and I look forward to seeing how I improve this year.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/aX5JOgemYvI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/aX5JOgemYvI/2010-retrospective-and-goals-for-2011</link>
      <pubDate>Sun, 09 Jan 2011 08:47:01 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/2010-retrospective-and-goals-for-2011</feedburner:origLink></item>
    <item>
      <title>Book Review: Pro ASP.NET MVC 2 Framework</title>
      <description>&lt;p&gt;&lt;a href="http://amzn.com/1430228865" target="_blank"&gt;Pro ASP.NET MVC 2 Framework&lt;/a&gt; by Steve Sanderson is a book that I’ve been meaning to review for a while. It is the second edition and update of his original, and well received, ASP.NET MVC book that came out in 2009. The new book, as you can guess by the title, covers the newer MVC 2 framework. &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="proaspnetmvc" border="0" alt="proaspnetmvc" src="http://s3.amazonaws.com/TheZenDev/images/proaspnetmvc_3.jpg" width="225" height="300" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Overview&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Having read the first edition book, I was looking forward to reading the second edition. Some people are surprised when I say this, but I found the first edition to be one of the best programming books I’ve read. Surprising, because usually when you think of top or favorite programming books, you end up with books that cover a more general topic such as Code Complete or The Pragmatic Programmer. Pro ASP.NET MVC was a book I put high on my list, because it felt very complete from start to finish. It was never boring, and the amount of good information presented, not only about the ASP.NET MVC framework, was very impressive. In the age of drawn out technical books that could have their length cut in half, the first edition of Steve’s book was a rare one that fully utilized all 550 pages.&lt;/p&gt;  &lt;p&gt;Even though the first edition was so comprehensive, I still wanted to read the second edition. I won’t go into too much detail on the differences between the first and second edition, Steve discusses them in &lt;a href="http://blog.stevensanderson.com/2010/06/11/pro-aspnet-mvc-2-framework/" target="_blank"&gt;this blog post&lt;/a&gt;, but there was enough of a difference to make me want to check out the second edition. The book is split up into three parts. The first part introduces the framework with a quick sample app and some prerequisites. It concludes with a much larger application that is as close to a real world app as you’ll find in any technical book. Part two covers the framework in great detail. Information on routing, controllers, views, models, etc can be found in this part of the book. The last part covers security, deployment, and upgrading.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Pros&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Encourages Good Practices – &lt;/strong&gt;I was impressed that the book utilized open source tools for doing TDD and dependency injection in the book’s examples. The big advantage of the ASP.NET MVC framework is the ability to separate concerns and easily test, so it’s only natural that the book cover them. Some books don’t and you almost come to expect that they’ll cut out details like that to focus purely on the featured technology. But thankfully this book covers them and by doing so it you get to see first hand the benefits and why they mesh so well with the ASP.NET MVC framework. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Useful Examples – &lt;/strong&gt;Another surprise in this book is the SportsStore application that you spend three chapters working on towards the beginning of the book. It’s one thing to simply cover the framework and show code samples here and there. It’s another to build a real world application and learn along the way. That’s exactly what this book does, and it does it well. The project is an ecommerce website that utilizes a lot of the features of the framework, which makes it not only easy to learn but also easy to apply what you learn to real world situations. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Detailed&lt;/strong&gt; – This book comes in at about 700 pages, but it makes full use of that space. There is a lot of very good information about the framework and other topics presented throughout. There are parts that can be skimmed depending on your level of expertise with ASP.NET MVC and the .NET framework. Some would consider that a con, but given the way the information is separated in the book, I consider it a pro. If there is an aspect of the framework that you know well or don’t care to know, you can easily skip to the next chapter without having to skim page by page. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Cons&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Apress Errata – &lt;/strong&gt;This is about the only complaint I have with the book, and it’s not even a fault of the book or the author. But I still found it annoying, so it is worth mentioning that errata on the Apress website is absolutely terrible. I cannot find an errata page for the second edition, but based on the first edition and other books on the website, I can safely assume I’ll hate the second edition errata. Why? Because the formatting is terrible and it makes it impossible to print or read. It’s nice that you can submit a problem and the author responds to it, but the display of this data couldn’t be any worse. Thankfully there aren’t many errors in the book, especially in the second edition, that I’ve found so you won’t need to look at the errata much. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Conclusion&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I give it a &lt;strong&gt;5 out of 5&lt;/strong&gt;. The second edition of this book only improves on the first edition. It does a great job covering the new features in ASP.NET MVC 2, enough to warrant checking it out if you’ve read the first edition. I haven’t read any of the other ASP.NET MVC books, but if you’re looking into checking out the framework then I recommend you try this book. If you don’t believe me, feel free to check out the reviews on Amazon and compare them to the other books. But this is a book I completely recommend if you have any interest at all in the ASP.NET MVC framework.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/BCLsk8lyavA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/BCLsk8lyavA/book-review-pro-aspnet-mvc-2-framework</link>
      <pubDate>Fri, 01 Oct 2010 20:17:12 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/book-review-pro-aspnet-mvc-2-framework</feedburner:origLink></item>
    <item>
      <title>Easy Mocking With FakeItEasy</title>
      <description>&lt;p&gt;While there are already plenty of good mocking frameworks available for .NET, two more frameworks have been recently released and I figured I’d do a quick overview on both. First I’ll cover &lt;a href="http://code.google.com/p/fakeiteasy/" target="_blank"&gt;FakeItEasy&lt;/a&gt;, and in my next post I’ll take a look at &lt;a href="http://nsubstitute.github.com/" target="_blank"&gt;NSubstitute&lt;/a&gt;. The first is &lt;a href="http://code.google.com/p/fakeiteasy/" target="_blank"&gt;FakeItEasy&lt;/a&gt;, a framework “designed for ease of use and for compatibility with both C# and VB.NET”. Sounds good right? It even got a lofty endorsement from &lt;a href="http://twitter.com/RoyOsherove" target="_blank"&gt;Roy Osherove&lt;/a&gt;, author of &lt;a href="http://amzn.com/1933988274" target="_blank"&gt;The Art of Unit Testing&lt;/a&gt;, who said “it's a no brainer - FakeItEasy is the new Moq.” That is a big claim given how simple &lt;a href="http://code.google.com/p/moq/" target="_blank"&gt;Moq&lt;/a&gt; is to use and read.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Prove it&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Fair enough, let’s do a couple quick examples and see it in action. First you need to download the latest version and reference the &lt;strong&gt;FakeItEasy.dll&lt;/strong&gt; in your project. Next we’ll do a quick test on some contrived code from an ASP.NET MVC project. Say we have a controller that handles a contact portion of our site and we want to test that when a valid message is provided, that it is submitted. Given something like this:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IContactSubmitter&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;void&lt;/span&gt; SubmitContact(&lt;span style="color: blue"&gt;string&lt;/span&gt; message);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ContactController&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;Controller&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IContactSubmitter&lt;/span&gt; _contactSubmitter;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; ContactController(&lt;span style="color: #2b91af"&gt;IContactSubmitter&lt;/span&gt; contactSubmitter)&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _contactSubmitter = contactSubmitter;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;HttpPost&lt;/span&gt;]&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ViewResult&lt;/span&gt; Contact(&lt;span style="color: blue"&gt;string&lt;/span&gt; message)&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Pretend there was some validation done here..&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (ValidateMessage(message))&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _contactSubmitter.SubmitContact(message);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; View();&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We could write a quick test using FakeItEasy’s syntax like such:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;Test&lt;/span&gt;]&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Can_Submit_Contact_Email_With_A_Valid_Message()&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; mockSubmitter = &lt;span style="color: #2b91af"&gt;A&lt;/span&gt;.Fake&amp;lt;&lt;span style="color: #2b91af"&gt;IContactSubmitter&lt;/span&gt;&amp;gt;();&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; controller = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ContactController&lt;/span&gt;(mockSubmitter);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; controller.Contact(&lt;span style="color: #a31515"&gt;&amp;quot;some message&amp;quot;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;A&lt;/span&gt;.CallTo(() =&amp;gt; mockSubmitter.SubmitContact(&lt;span style="color: #a31515"&gt;&amp;quot;some message&amp;quot;&lt;/span&gt;))&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .MustHaveHappened(&lt;span style="color: #2b91af"&gt;Repeated&lt;/span&gt;.Once.Exactly);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Pretty simple, huh? The syntax is nice. I find it a little easier to read than Moq’s, but no major differences.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Another Example&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Let’s test some more useless, made up code. This time we’ll mock something that returns a value. The object we are mocking returns a boolean value, and in our test we’d like to simulate it returning false:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;pre style="font-family: consolas"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;Test&lt;/span&gt;]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; Invalid_Credit_Card_Cancels_Order()&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; mockProcessor = &lt;span style="color: #2b91af"&gt;A&lt;/span&gt;.Fake&amp;lt;&lt;span style="color: #2b91af"&gt;IProcessor&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;A&lt;/span&gt;.CallTo(() =&amp;gt; mockProcessor.Validate(&lt;span style="color: #a31515"&gt;&amp;quot;12345&amp;quot;&lt;/span&gt;)).Returns(&lt;span style="color: blue"&gt;false&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; cart = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;ShoppingCart&lt;/span&gt;(mockProcessor);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cart.Checkout(&lt;span style="color: #a31515"&gt;&amp;quot;12345&amp;quot;&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.That(cart.PaymentAccepted, &lt;span style="color: #2b91af"&gt;Is&lt;/span&gt;.EqualTo(&lt;span style="color: blue"&gt;false&lt;/span&gt;));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;A&lt;/span&gt;.CallTo(() =&amp;gt; mockProcessor.Validate(&lt;span style="color: #a31515"&gt;&amp;quot;12345&amp;quot;&lt;/span&gt;)).MustHaveHappened(&lt;span style="color: #2b91af"&gt;Repeated&lt;/span&gt;.Once.Exactly);&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;      &lt;pre style="font-family: consolas"&gt;&amp;#160;&lt;/pre&gt;      &lt;p style="margin: 0px"&gt;&lt;/p&gt;  &lt;/div&gt;    &lt;p&gt;&lt;strong&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;There is no doubt that FakeItEasy is easy to use, and the syntax is nice, but is there a big enough difference to warrant switching mocking frameworks? I can’t really answer that for you. Personally I use Moq, and have mostly enjoyed using it so far. So I’m not about to swap frameworks just yet, but I will keep an eye on FakeItEasy. I would recommend giving it a shot and seeing what you think of it. Perhaps run it by your team and get their thoughts on it. You might find the nicer syntax improves testing and readability enough to be worth switching.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/Ik00X5BtMQY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/Ik00X5BtMQY/easy-mocking-with-fakeiteasy</link>
      <pubDate>Wed, 01 Sep 2010 20:04:42 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/easy-mocking-with-fakeiteasy</feedburner:origLink></item>
    <item>
      <title>.NET Package Management with Nu</title>
      <description>&lt;p&gt;So I finally got around to checking out &lt;a href="http://nu.wikispot.org/" target="_blank"&gt;Nu&lt;/a&gt; for package management in .NET. I had heard good things but it wasn’t until I used it that I finally understood why others had so much praise for gems in Ruby. I won’t go into too much detail, as many others have blogged about it over the past couple weeks. But if you are interested in all of the details, please check out &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/26/the-future-of-net-open-source-software-delivery.aspx" target="_blank"&gt;Rob Reynold’s post&lt;/a&gt;, the &lt;a href="http://www.highoncoding.com/Articles/735_Package_Management_Using_NU.aspx" target="_blank"&gt;HighOnCoding.com&lt;/a&gt; post by AzamSharp, or TekPub’s free &lt;a href="http://tekpub.com/production/dotnet-oss" target="_blank"&gt;screencast&lt;/a&gt; on using Nu.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;strong&gt;&lt;u&gt;The Basics&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Package management in .NET is a pain. You have to go hunting down the newest downloads from several different sites and then making sure to unzip them to the right directory. Ruby on the other hand handles this like a pro, thanks to RubyGems which downloads and installs them for you. And it’s even nice enough to manage any dependencies for you. So how about something cool like that for .NET? Well, that is where Nu comes in. Nu makes use of gems to provide the same convenience and functionality for .NET packages.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;strong&gt;&lt;u&gt;Setup&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Getting Nu setup can take a while, and by a while I mean about 90 seconds. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://rubyinstaller.org/" target="_blank"&gt;Install Ruby&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Go to the command prompt and type: &lt;strong&gt;gem install nu&lt;/strong&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Getting packages with Nu&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So yesterday I was going to do a little sample app, and I wanted to use &lt;a href="http://structuremap.github.com/structuremap/" target="_blank"&gt;StructureMap&lt;/a&gt; for dependency injection and &lt;a href="http://code.google.com/p/moq/" target="_blank"&gt;Moq&lt;/a&gt; for mocking during unit testing. First, picture in your head what you would normally do to get both of these tools into your project. Got it? Now here is what I ended up doing, thanks to Nu.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nu in action" border="0" alt="Nu in action" src="http://s3.amazonaws.com/TheZenDev/images/nu01_3.png" width="675" height="337" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Keep in mind this only took about 15 seconds overall. I simply typed the following commands:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;nu install structuremap&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;nu install moq&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And the result was both packages in a lib folder in the directory of my choosing.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nu in action 2" border="0" alt="Nu in action 2" src="http://s3.amazonaws.com/TheZenDev/images/nu02_6.png" width="642" height="368" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update – &lt;/strong&gt;As Bil pointed out in the comments, you can combine gems on a single line. So I could have made it even easier by typing “&lt;strong&gt;nu install structuremap moq” &lt;/strong&gt;instead.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As you can see, Nu is simple to use and works great. Thanks to it and usage of gems in Ruby, you can spend more time doing actual development and less time treasure hunting for necessary libraries. There is a lot more that Nu can do. I didn’t get into any of the options or show how it handles dependencies, but you can check out the links I put at the top for more info. There is also an extension for VS2010 to use Nu that is covered in &lt;a href="http://www.highoncoding.com/Articles/735_Package_Management_Using_NU.aspx" target="_blank"&gt;AzamSharp’s post&lt;/a&gt;. Enjoy!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/bPa8hxJ6otY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/bPa8hxJ6otY/net-package-management-with-nu</link>
      <pubDate>Thu, 12 Aug 2010 18:23:44 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/net-package-management-with-nu</feedburner:origLink></item>
    <item>
      <title>NDC 2010 Videos Review</title>
      <description>&lt;p&gt;It’s been nearly a month since the torrent with all 121 of the NDC 2010 videos was released. While I’ve only been able to watch roughly 35-40 of them, I wanted to do a quick update on the ones I really liked so far. I mentioned a couple videos in my &lt;a href="/blog/ndc-2010-videos" target="_blank"&gt;previous post&lt;/a&gt; that I really liked, but I’d like to mention a few others.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;&lt;strong&gt;Practical IronRuby&lt;/strong&gt; by &lt;a href="http://ironshay.com/" target="_blank"&gt;Shay Friedman&lt;/a&gt; – Great intro video to IronRuby.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;IronRuby – A Brave New World for .NET &lt;/strong&gt;by &lt;a href="http://blog.benhall.me.uk/" target="_blank"&gt;Ben Hall&lt;/a&gt; – More IronRuby goodness with good examples of using the powerful Ruby language with .NET libraries. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Riding IronRuby on Rails &lt;/strong&gt;by &lt;a href="http://ironshay.com/" target="_blank"&gt;Shay Friedman&lt;/a&gt; – Good look into building a site using Ruby on Rails. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;I Can’t Hear You There’s an ORM in my Ear&lt;/strong&gt; by &lt;a href="http://blog.wekeroad.com/" target="_blank"&gt;Rob Conery&lt;/a&gt; – Great video on usage of non-RDBMS and their pro’s and con’s. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;The Myth of Developer Productivity &lt;/strong&gt;by &lt;a href="http://blog.scottbellware.com/" target="_blank"&gt;Scott Bellware&lt;/a&gt; – Good look into how manufacturing perspectives affect software development. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Unit Testing Best Practices &amp;amp; Test Reviews &lt;/strong&gt;by &lt;a href="http://weblogs.asp.net/rosherove/" target="_blank"&gt;Roy Osherove&lt;/a&gt; – As the name implies, it goes over the do’s and don’ts of unit testing by examining tests from open source projects. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I could honestly list the majority of the videos that I’ve watched as I have liked most of them, but these were my favorites. I’m going to continue watching the NDC and MvcConf videos when I can, but it’ll probably be a few months before I can get through all the ones I want. I have a bad habit of watching a video or two, then getting inspired to start playing around with a different technique or technology.&lt;/p&gt;  &lt;p&gt;With regards to the IronRuby videos, I really enjoyed them as I’ve been looking more into Ruby lately and wanting to try it out. It seems that IronRuby no longer has the support of Microsoft, but it will continue on with support from the community (details I’ll save for another post). I’m always looking for new things to try out, as you can always get different perspectives on building software, so I fully intend to continue with playing around with Ruby and IronRuby as well as document databases.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/GWwsWLnrz8o" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/GWwsWLnrz8o/ndc-2010-videos-review</link>
      <pubDate>Sun, 08 Aug 2010 15:31:44 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/ndc-2010-videos-review</feedburner:origLink></item>
    <item>
      <title>MvcConf Videos</title>
      <description>&lt;p&gt;In case you missed it, the &lt;a href="http://mvcconf.com/" target="_blank"&gt;MvcConf&lt;/a&gt; virtual conference for ASP.NET MVC took place last week. Thankfully they were kind enough to upload the &lt;a href="http://www.viddler.com/explore/mvcconf/videos/" target="_blank"&gt;conference videos&lt;/a&gt; for people like me who were unable to attend. I would have loved to watched them live but I was enjoying my vacation on the beach! Anyway, I have not gotten a chance to watch any of the videos yet since I’m still getting caught up on NDC 2010 videos, but I heard good things about the sessions. &lt;/p&gt;  &lt;p&gt;In particular, I heard that &lt;a href="http://www.lostechies.com/blogs/jimmy_bogard/" target="_blank"&gt;Jimmy Bogard’s&lt;/a&gt; session on bloated controllers and &lt;a href="http://blogs.msdn.com/b/davidebb/" target="_blank"&gt;David Ebbo’s&lt;/a&gt; one on T4MVC were especially good. Personally, I’m looking forward to &lt;a href="http://codebetter.com/blogs/jeremy.miller/" target="_blank"&gt;Jeremy Miller’s&lt;/a&gt; FubuMVC session, as I have just started to play around with the framework. It is worth checking out and the price is right (free!). I will probably do another post in a couple weeks and go over some of my favorite sessions from both NDC 2010 and MvcConf. Enjoy!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update – &lt;/strong&gt;A torrent containing all of the videos is also now available. &lt;a href="http://www.clearbits.net/torrents/1284-mvcconf" target="_blank"&gt;Click here for torrent&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update #2&lt;/strong&gt; – &lt;a href="http://tekpub.com/" target="_blank"&gt;TekPub&lt;/a&gt; has been nice enough to host the videos streaming (for free!). &lt;a href="http://mvcconf.tekpub.com/" target="_blank"&gt;Click here for the streaming videos.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/gjFLkshIDhE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/gjFLkshIDhE/mvcconf-videos</link>
      <pubDate>Tue, 27 Jul 2010 19:18:58 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/mvcconf-videos</feedburner:origLink></item>
    <item>
      <title>NDC 2010 Videos</title>
      <description>&lt;p&gt;NDC (Norwegian Developers Conference) 2010 took place a couple weeks ago. It is a conference that I had heard about before, but never gotten a chance to attend. I was unable to attend this year as well, but it didn’t take long for word to spread on how outstanding the conference was. You can check out the &lt;a href="http://www.ndc2010.no/agenda.aspx" target="_blank"&gt;NDC 2010 agenda&lt;/a&gt; for yourself and see if you agree. The website streams the videos, but thankfully there is an &lt;a href="http://dl.dropbox.com/u/1373839/NDC2010%20Sessions.torrent" target="_blank"&gt;official torrent&lt;/a&gt; out now with all 121 of the videos.&lt;/p&gt;  &lt;p&gt;There was an earlier torrent with a few of the videos. I took a look at them and have been anticipating the rest of them ever since. From the few that I have already seen, I can definitely recommend Scott Bellware’s talk on &lt;em&gt;Ruby for .NET Developers, &lt;/em&gt;as well as Roy Osherove’s talk &lt;em&gt;Beautiful Teams &amp;amp; Leaders.&lt;/em&gt; I would also recommend Rob Conery’s talk, &lt;em&gt;The Next Big Thing or Cool-Kid Koolaid?.&lt;/em&gt; Rob’s talk may rub some .NET developers the wrong way, but he makes some really good points on the state of .NET. Anyway, I would take a look at the agenda and see if you find anything interesting (you will) and think about getting that video or others from the torrent. But please remember to seed, as the entire torrent comes in at around 56GB.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/r1LcOiVmDxc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/r1LcOiVmDxc/ndc-2010-videos</link>
      <pubDate>Mon, 05 Jul 2010 15:59:31 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/ndc-2010-videos</feedburner:origLink></item>
    <item>
      <title>Simple Caching of Partial Views in ASP.NET MVC 2</title>
      <description>&lt;p&gt;Caching of partial views in ASP.NET MVC can be a bit tricky. If you use Html.RenderAction()&lt;strong&gt; &lt;/strong&gt;to display your cached partial view, you will find that not only is the partial view cached but the rest of the view page is as well. Not quite what we are trying to achieve… Given the way the [OutputCache] filter is implemented, it is a wrapper around the core ASP.NET output caching; it isn’t surprising that we run into these sorts of problems.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Any Workarounds?&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Thankfully, others have figured out some workarounds to make caching of partial views possible. Steve Sanderson blogged about a &lt;a href="http://blog.stevensanderson.com/2008/10/15/partial-output-caching-in-aspnet-mvc/" target="_blank"&gt;solution&lt;/a&gt; where you create a custom output caching filter. Phil Haack posted another solution &lt;a href="http://haacked.com/archive/2009/05/12/donut-hole-caching.aspx" target="_blank"&gt;here&lt;/a&gt; as well. (Note: these solutions are for MVC 1, but you should be able to apply them to MVC 2 as well.)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;MVC Futures Can Help&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You will be happy to hear that there is an even easier solution if you are using ASP.NET MVC 2 and are able to use the &lt;a href="http://aspnet.codeplex.com/releases" target="_blank"&gt;MVC futures assembly&lt;/a&gt;. Simply add the &lt;em&gt;Microsoft.Web.Mvc.Aspnet4.dll&lt;/em&gt; to your project and you can use the new &lt;strong&gt;[ChildActionCache]&lt;/strong&gt; filter on the action method:&lt;/p&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;LinkController&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;Controller&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;ChildActionCache&lt;/span&gt;(Duration = 300)]&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ViewResult&lt;/span&gt; Links()&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ViewData[&lt;span style="color: #a31515"&gt;&amp;quot;currentTime&amp;quot;&lt;/span&gt;] = &lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.Now;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; View();&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Now your partial view will be cached for the desired duration (in seconds), but the rest of the view will load as normal.&lt;/p&gt;  &lt;p&gt;Not a fan of either solution? Well if it helps, improved caching support is listed as an area of focus for ASP.NET MVC 3. The roadmap says: “&lt;strong&gt;Improved Caching Support&lt;/strong&gt; – Enable caching of an child action when called via the RenderAction method. Also looking at donut caching and donut hole caching.”&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So you have several options for caching your partial views right now, and improved caching support is on the way. Hope this is helpful. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/mNr17_yFi64" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/mNr17_yFi64/simple-caching-of-partial-views-in-aspnet-mvc-2</link>
      <pubDate>Tue, 22 Jun 2010 17:14:19 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/simple-caching-of-partial-views-in-aspnet-mvc-2</feedburner:origLink></item>
    <item>
      <title>Thoughts on the Link Section</title>
      <description>&lt;p&gt;I will admit, having a list of links is pretty cliché and mostly seems to be used as filler to take up space (clearly this site is guilty). But I still think they can provide some benefit which is why I decided to list a few of my favorite software development related websites. I was a late adopter of blogging, but I found myself visiting them more and more over the past year. At first I only visited a few sites from time to time. Slowly I began to check out some of their links or commenter's links and before I knew it I was regularly using Google reader and am subscribed to nearly 100 rss feeds.&lt;/p&gt;  &lt;p&gt;So hopefully the links I listed can be helpful to someone. You can’t go wrong with any of the ones listed. They’re all ridiculously smart people within the software development community. If you’re looking for more blogs, check out this &lt;a href="http://stackoverflow.com/questions/5119/what-are-the-best-rss-feeds-for-programmers-developers" target="_blank"&gt;Stack Overflow thread&lt;/a&gt; with more than enough links to keep your news aggregator busy. I also recommend checking out John Sonmez’s article &lt;a href="http://simpleprogrammer.com/2010/05/07/drinking-from-the-firehose/" target="_blank"&gt;Drinking From the Firehose&lt;/a&gt; where he gives some tips on using blogs and other sources of information to your advantage without getting overwhelmed.&lt;/p&gt;  &lt;p&gt;In case your wondering, Penny Arcade and RossTraining are not software development related. Penny Arcade is my favorite web comic and RossTraining is my favorite strength/conditioning website. I have found both of them to be pretty useful so I had to add them to the links section as well.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/4q74eFxDc7w" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/4q74eFxDc7w/thoughts-on-the-link-section</link>
      <pubDate>Sun, 20 Jun 2010 16:49:31 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/thoughts-on-the-link-section</feedburner:origLink></item>
    <item>
      <title>New Site Maintenance</title>
      <description>&lt;p&gt;Wear your hard hats if you got ‘em. I’m in the process of making a bunch of little changes and improvements to the site. In the event anyone is actually reading this, do not be surprised if you run into any errors or weird load times this weekend. Just trying to finish a lot of them tasks I put off when I initially deployed the site.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thezendev/~4/QBG8n8rv2KM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thezendev/~3/QBG8n8rv2KM/new-site-maintenance</link>
      <pubDate>Fri, 18 Jun 2010 19:58:14 GMT</pubDate>
    <feedburner:origLink>http://sweetsciencecoding.com/blog/new-site-maintenance</feedburner:origLink></item>
  </channel>
</rss>

