<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JohnnyCoder &#187; Recommended</title>
	<atom:link href="http://johnnycoder.com/blog/category/recommended/feed/" rel="self" type="application/rss+xml" />
	<link>http://johnnycoder.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 03 Nov 2010 17:07:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Test-Drive ASP.NET MVC Review</title>
		<link>http://johnnycoder.com/blog/2010/11/03/test-drive-asp-net-mvc-review/</link>
		<comments>http://johnnycoder.com/blog/2010/11/03/test-drive-asp-net-mvc-review/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 16:17:49 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Recommended]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2010/11/03/test-drive-asp-net-mvc-review/</guid>
		<description><![CDATA[A few years back I started dallying with test-driven development, but I never fully committed to the practice. This wasn’t because I didn’t believe in the value of TDD; it was more a matter of not completely understanding how to incorporate “test first” into my everyday development. Back in my web forms days, I could [...]]]></description>
			<content:encoded><![CDATA[<p>A few years back I started dallying with test-driven development, but I never fully committed to the practice. This wasn’t because I didn’t believe in the value of TDD; it was more a matter of not completely understanding how to incorporate “test first” into my everyday development. Back in my web forms days, I could point fingers at the framework for my ignorance and laziness. After all, web forms weren’t exactly designed for testability so who could blame me for not embracing TDD in those conditions, right? But when I switched to ASP.NET MVC and quickly found myself fresh out of excuses and it became instantly clear that it was time to get my head around red-green-refactor once and for all or I would regretfully miss out on one of the biggest selling points the new framework had to offer.</p>
<p><a href="http://pragprog.com/titles/jmasp/test-drive-asp-net-mvc"><img style="background-image: none; border-right-width: 0px; margin: 10px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" border="0" alt="Test-Drive ASP.NET MVC" align="left" src="http://assets3.pragprog.com/images/covers/190x228/jmasp.jpg?1271900905" /></a></p>
<p>I have previously written about how I learned ASP.NET MVC. It was primarily hands on learning but <a href="http://johnnycoder.com/blog/?s=asp.net+mvc+books">I did read a couple of ASP.NET MVC books along the way</a>. The books I read dedicated a chapter or two to TDD and they certainly addressed the benefits of TDD and how MVC was designed with testability in mind, but TDD was merely an afterthought compared to, well, teaching one how to code the model, view and controller. This approach made some sense, and I learned a bunch about MVC from those books, but when it came to TDD the books were just a teaser and an opportunity missed.&#160; But then I got lucky – <a href="http://jonathanmccracken.blogspot.com/">Jonathan McCracken</a> contacted me and asked if I’d review his book, <a href="http://pragprog.com/titles/jmasp/test-drive-asp-net-mvc">Test-Drive ASP.NET MVC</a>, and it was just what I needed to get over the TDD hump.</p>
<p>As the title suggests, <a href="http://pragprog.com/titles/jmasp/test-drive-asp-net-mvc"><strong>Test-Drive ASP.NET MVC</strong></a><strong> takes a different approach to learning MVC as it focuses on testing right from the very start.</strong> McCracken wastes no time and swiftly familiarizes us with the framework by building out a trivial Quote-O-Matic application and then dedicates the better part of his book to testing first – first by explaining TDD and then coding a full-featured Getting Organized application inspired by David Allen’s popular book, <a href="http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280">Getting Things Done</a>. If you are a learn-by-example kind of coder (like me), you will instantly appreciate and enjoy McCracken’s style – its fast-moving, pragmatic and focused on only the most relevant information required to get you going with ASP.NET MVC and TDD. </p>
<p>The book continues with the test-first theme but McCracken moves away from the sample application and incorporates other practical skills like persisting models with NHibernate, leveraging Inversion of Control with the IControllerFactory and building a RESTful web service. What I most appreciated about this section was McCracken’s use of and praise for open source libraries like Rhino Mocks, SQLite and StructureMap (to name just a few) and productivity tools like ReSharper, Web Platform Installer and ASP.NET SQL Server Setup Wizard.&#160; McCracken’s emphasis on real world, pragmatic development was clearly demonstrated in every tool choice, straight-forward code block and developer tip. Whether one is already familiar with the tools/tips or not, McCracken’s thought process is easily understood and appreciated.</p>
<p>The final section of the book walks the reader through security and deployment – everything from error handling and logging with ELMAH, to ASP.NET Health Monitoring, to using MSBuild with automated builds, to the deployment&#160; of ASP.NET MVC to various web environments. These chapters, like those prior, offer enough information and explanation to simply help you get the job done.&#160; </p>
<p>Do I believe Test-Drive ASP.NET MVC will turn you into an expert MVC developer overnight?&#160; Well, no.&#160; I don’t think any book can make that claim.&#160; If that were possible, I think book list prices would skyrocket!&#160; That said, Test-Drive ASP.NET MVC provides a solid foundation and a unique (and dare I say necessary) approach to learning ASP.NET MVC.&#160; Along the way McCracken shares loads of very practical software development tips and references numerous tools and libraries. The bottom line is it’s a great ASP.NET MVC primer – if you’re new to ASP.NET MVC it’s just what you need to get started.&#160; </p>
<p>Do I believe Test-Drive ASP.NET MVC will give you everything you need to start employing TDD in your everyday development?&#160; Well, I used to think that <a href="http://johnnycoder.com/blog/2008/08/01/learning-test-driven-development/">learning TDD required a lot of practice and, if you’re lucky enough, the guidance of a mentor or coach</a>.&#160; I used to think that one couldn’t learn TDD from a book alone. Well, I’m still no pro, but I’m testing first now and Jonathan McCracken and his book, Test-Drive ASP.NET MVC, played a big part in making this happen.&#160; <strong>If you are an MVC developer and a TDD newb, Test-Drive ASP.NET MVC is just the book for you.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2010/11/03/test-drive-asp-net-mvc-review/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Professional ASP.NET MVC 2 Review</title>
		<link>http://johnnycoder.com/blog/2010/07/23/professional-asp-net-mvc-2-review/</link>
		<comments>http://johnnycoder.com/blog/2010/07/23/professional-asp-net-mvc-2-review/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 06:52:19 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Recommended]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2010/07/23/professional-asp-net-mvc-2-review/</guid>
		<description><![CDATA[What’s up with Ben? All he’s been writing about lately is Ruby, Ruby, Ruby. Doesn’t he work with ASP.NET MVC anymore? Let me assure you that I do – just about every single day and it’s been for quite a while now. Sure, I have been spending time learning Ruby but I’m also constantly developing [...]]]></description>
			<content:encoded><![CDATA[<p>What’s up with Ben? All he’s been writing about lately is Ruby, Ruby, Ruby. Doesn’t he work with ASP.NET MVC anymore? Let me assure you that I do – just about every single day and it’s been for quite a while now. Sure, I have been spending time <a href="http://johnnycoder.com/blog/2010/07/04/adventures-in-code-club/">learning Ruby</a> but I’m also constantly developing my primary craft, ASP.NET MVC with C#. So, inspired by yesterday’s virtual <a href="http://mvcconf.com/">MvcConf</a>, I’m going to get back to what I do every day and share a bit about learning ASP.NET MVC with you.</p>
<p><a href="http://www.amazon.com/Professional-ASP-NET-MVC-Wrox-Programmer/dp/0470643188"><img style="margin: 10px 15px 10px 10px; display: inline;" src="http://images.barnesandnoble.com/images/59280000/59289471.JPG" alt="Professional ASP.NET MVC 2 by Scott Hanselman: Book Cover" width="149" height="186" align="left" /></a>I have told <a href="http://johnnycoder.com/blog/2010/03/18/pro-asp-net-mvc-framework-review/">this story</a> before but early in my career, when I wanted to learn a new technology, I’d sit on the floor in the bookstore aisle and work my way through each of the available books on a given subject.  Put in enough time in a bookstore and you can learn just about anything. I used to really enjoy this time but over the years my habits have certainly changed.  Whereas books used to be the only place I could find solutions to my problems, now they may be the very last place I look. Case in point, it wasn’t until I had worked with the ASP.NET MVC 1.0 Framework for more than a year, and I had a few projects and a couple of major deployments under my belt, did I finally read through <a href="http://www.amazon.com/Pro-ASP-NET-Framework-Steven-Sanderson/dp/1430210079">Steven Sanderson’s Pro ASP.NET MVC Framework</a>. With so many resources at my fingertips (podcasts, screen casts, blogs, stackoverflow, open source projects, <a href="http://www.asp.net">www.asp.net</a>) I was able to get up to speed with ASP.NET MVC without reading a single book.  So, I didn’t until late into the game.   <a href="http://www.amazon.com/Professional-ASP-NET-MVC-Wrox-Programmer/dp/0470384611"><img style="margin: 10px 10px 2px 15px; display: inline;" src="http://t2.gstatic.com/images?q=tbn:ANd9GcT4kEHbdfEduqk94pW6-FzhRocOw_pHpOoXCTYhbrAKK61FiSA&amp;t=1&amp;usg=__WQAEmMcbhcwKW1VoAnfRyoVbEZg=" alt="" align="right" /></a></p>
<p>This past April, the day after the RTM release became available, I upgraded my primary MVC project to MVC 2.  Now, a few months later, there are a handful of MVC 2 books on the shelves of those said bookstores and I now offer you a review of <a href="http://www.amazon.com/Professional-ASP-NET-MVC-Wrox-Programmer/dp/0470643188">Professional ASP.NET MVC 2</a>.  You may know that <a href="http://johnnycoder.com/blog/2010/03/18/pro-asp-net-mvc-framework-review/">I have given a lot of praise to Sanderson’s first book</a> so why did I choose Professional ASP.NET MVC 2 over the <a href="http://www.amazon.com/Pro-ASP-NET-MVC-V2-Framework/dp/1430228865">second edition of Sanderson’s book</a>? Well, the <a href="http://tinyurl.com/aspnetmvc">NerdDinner chapter (a.k.a the free bits)</a> of <a href="http://www.amazon.com/Professional-ASP-NET-MVC-Wrox-Programmer/dp/0470384611/ref=pd_bxgy_b_img_a">Professional ASP.NET MVC 1.0</a> offered me <a href="http://nerddinner.codeplex.com/">a really great MVC primer</a> but I never got around to buying the book.  Not only has the guilt weighed on me a bit, it’s also been quite the cliffhanger.  Having now read through the second edition of Professional ASP.NET MVC 2, I now know that everything worked out for <a href="http://weblogs.asp.net/scottgu">Guthrie</a>, <a href="http://www.hanselman.com">Hanselman</a>, <a href="http://haacked.com/">Haack</a>, <a href="http://blog.wekeroad.com">Conery</a> but I’ve been worried.  (Sorry if I just spoiled the ending for you.)  Anything else?  Yes. Full disclosure, a copy of Professional ASP.NET MVC 2 kind of fell in my lap as Jon gave me a copy on my birthday. He didn’t know it was my big day but it was.  And this leads us into the first thing you’ll undoubtedly notice about the book – there is one more author, <a href="http://weblogs.asp.net/jgalloway/default.aspx">Jon Galloway</a>, and the four foreheads on the book cover have been replaced by a blurry bobsled.  Welcome change all around, I think.</p>
<p><a href="http://nerddinner.com"><img style="margin: 0px 15px 10px 10px; display: inline;" src="http://t2.gstatic.com/images?q=tbn:D2TC3iTobAeEVM:l" alt="" align="left" /></a>As you may have guessed, Professional ASP.NET MVC 2 begins with a new and improved NerdDinner walkthrough. With the book’s first release, I coded up the application from scratch as I followed along, step by step, with the tutorial. I even uncovered and fixed a couple of bugs, but don’t tell.  This new NerdDinner tutorial does a fine job of working in a number features which were introduced with MVC 2.  That’s stuff like HTML Encoding Code Blocks, Strongly Typed HTML Helpers, Templated Helpers, and Client-Side Validation.  There are other new features, and we’ll get to those. If you can get through the tutorial and understand what MVC has to offer, congratulations, you now know enough to be dangerous. But should you stop there? Does the NerdDinner sample application provide you everything you need to become a full-fledged MVC developer?  You might think so, but nope, not even close.  Thus, there’s a lot more book to give you the rest of the scoop.  Think of the NerdDinner sample as the appetizer which whets your appetite, leaving you craving for the main course.  Sorry, I couldn’t help myself…</p>
<p>With that, onto the rest of the book review:</p>
<p>Chapter 2 shares the history of the MVC design pattern and runs through other popular MVC web frameworks you may have seen running in the wild. This chapter also brings attention to the “how” and “why” ASP.NET MVC came into existence. Chapter 3 builds on these same points and explores ASP.NET MVC basics like separation of concerns, maintainability and testability and how ASP.NET MVC relates to both WebForms and ASP.NET as a whole.  You might be thinking, “That’s great but is this going to make me a better MVC developer?”  I was tempted to say that these two chapters aren’t required reading unless you are a complete MVC newbie, but the truth is there’s always value in learning about the background of a technology, pattern, language or framework in order to better understand and master it.  And knowing this information will separate those passionate about MVC from those who merely code against MVC.  So, yes, these chapters will make you a better developer.</p>
<p>Chapter 4 digs into routing and sheds light on a number of sophisticated scenarios. If you have a good handle on routing from your work with MVC 1, you will acknowledge the chapter as being well-written but nothing new is going to jump off the page at you.  However, if you are new to  MVC, you need a strong understanding of outgoing and incoming routes, route patterns and how possible gotchas like Overflow Parameters work and this book does a wonderful job explaining these concepts.  And don’t forget that routing is now exposed in the ASP.NET libraries to be used in WebForms too.  You know, just in case MVC isn’t your cup of tea.</p>
<p>Chapter 5 and 6 dive into controllers and views, respectively.  If you’re new to MVC, the authors walk you through everything you’ll need to know about the C and V in MVC.  For those focusing on the MVC 2 bits, there’s a very nice overview of how requests are handled on the server along with an explanation of how to benefit from the new Asynchronous Controller Actions.  You may have picked up a lot about what views have to offer from the NerdDinner tutorial already but you’d be surprised what else you’ll pick up from this detailed chapter.  Again, for those honing in on MVC 2, give special attention to the new Html.Action and Html.RenderAction helper methods.  Final note on views – I commend the authors for including a rundown of the most popular alternative view engines.  Pretty classy.  On aside, since we’re talking about the V and the C, there isn’t a chapter dedicated to the M, models.  The NerdDinner walkthrough may have sufficiently covered this topic, but the topic was otherwise absent.</p>
<p>Chapter 7 is focused on Ajax, partials and jQuery.  This section is somewhat like a cookbook with lots of recipes.  It’s a little different than the rest of the book as it offers more code examples than written explanation of what the AJAX and jQuery libraries bring to the MVC 2 table. Having worked with MVC for a while now, it’s apparent from Day 1 of development that one needs to have their Ajax and Javascript/jQuery hat on if they want to work with effectively with the framework.  Thankfully Chapter 7 offers a surfeit of practical examples.  Be sure to bookmark this section because you’ll be referring back to it when you need a ratings or autocomplete textbox implementation.</p>
<p>Chapter 8 shows us how one can use Filters to add behavior to action methods.  For the MVC neophytes, filters are powerful.  Soak this chapter in.  For the MVC veterans, be on the look out for the RequireHttps action filter which was introduced with MVC 2.  <a href="http://www.asp.net"><img style="margin: 10px 10px 10px 15px; display: inline;" src="http://t3.gstatic.com/images?q=tbn:ANd9GcTXxKI9E3lRaz74dXC7rJf-tsTBiBtpnVaFTLmdhBPA6XCVvlE&amp;t=1&amp;usg=__k02qQ8kentcu5xHUyl7eiYyGR_8=" alt="" align="right" /></a></p>
<p>Chapter 9 speaks to securing our MVC applications.  I agree with the authors – this should be required reading.  This chapter uses case studies, quotes, short stories, humor, scare tactics, anything and everything to get important points across to the reader.  Listen, security is important.  If you’re a WebForms convert, read carefully as MVC doesn’t hold your hand quite as much as the WebForms world does when it comes to securing your application.  And give thanks to the authors for their willingness to talk about security concerns throughout the book as well dedicate an entire chapter to this topic.  This chapter also includes number of additional reading references which might be worth your time.</p>
<p>Chapter 10 and 11 are dedicated to TDD, unit testing and testable design patterns. The book provides a nice introduction into these topics and solid foundation on how to get started with these design/testing techniques.  Professional ASP.NET MVC 2 includes more than 50 pages of TDD/testing instruction.  Truly, one of the greatest benefits of ASP.NET MVC is testability and if you are new to testing, this book will be a wonderful jumping off point for you.</p>
<p>I’m a bad person. I didn’t read Chapter 12, Best of Both Worlds: Web Forms and MVC Together. I skimmed through it but that’s it.  Obviously there’s demand for this information or it wouldn’t be included in the book but mixing WebForms and MVC doesn’t pertain to me right now. Maybe I’m being shortsighted but I’d like to keep these worlds separate for now. If there comes a time and I need to migrate a WebForms app to MVC, I’ll be sure to come back to this chapter.  For now, it remains unread. Sorry.</p>
<p>Remember how the NerdDinner tutorial sample showed off a number of the new ASP.NET MVC 2 features?  Well, it didn’t catch them all.  That’s where Chapter 13 comes in – offering a roll up of everything new to MVC.  You may actually want to read this chapter first just to become acquainted with the new bits.  That way you can be sure to pick up on the callouts elsewhere in the book.  A couple of important notes – you will find details about Areas in Chapter 13 which you won’t find in any other section. Also there’s an important note about breaking changes with JsonResult when upgrading from MVC 1 to 2.  The change is web vulnerability related and don’t say I didn’t warn you.</p>
<p>A few additional notes about the book which I couldn’t find a good place for elsewhere:</p>
<ul>
<li>Comments from the ASP.NET Product Team are inserted throughout the book. These tips and additional info were my favorite part of the book.  It’s kind of like VH1’s “Behind the Music” to me</li>
<li>My only real concern with the NerdDinner tutorial is the emphasis placed on the Entity Framework (EF).  When the original tutorial was published, I encouraged everyone on my team to work through the sample application before diving into their first MVC project.  One of my colleagues was so impressed with MVC that they presented what they learned to the rest of the team.  Guess the name of the presentation. It was “An Overview of the .NET MVC Entity Framework.”  Yikes! In the individual’s defense, they had no prior experience with the .NET stack and frankly the Professional ASP.NET MVC book does drive home the concept of building out one’s model with EF.  There is quick mention of other ORMs which can be used with ASP.NET MVC, but guess which path someone new to .NET will follow?  I don’t feel the use of the Entity Framework is inappropriate in the NerdDinner sample, but I do think it is important to stress (yes, a little more) that EF is not part of the MVC framework and maybe even offer hints as to how one might hook in another ORM if they so choose. This said, I suppose I have the same issue with the references to ASP.NET Forms Authentication, ASP.NET Membership and Role Management APIs, not to mention the Visual Studio Unit Test framework.  [Disclaimer: I am using EF4 and the ASP.NET Membership stuff on my primary project and I think they are both the bees knees.]</li>
<li>If you are turning to MVC in hopes to never hear or read about WebForms again, you’re kind of out of luck because Professional ASP.NET MVC offers lots of WebForms commentary.  If you are only interested in MVC, this constant reminder of  WebForms might be a little distracting.</li>
<li>In the NerdDinner sample, data-type validation was implemented using DataAnnotations.  DataAnnotations are fine, but I would have liked to read more about validating true business rules (e.g. ensuring passwords are strong, validating a shipping date doesn&#8217;t fall on a weekend or holiday, or guaranteeing a submitted email address is unique). Managing this type of validation can be complicated and this topic was glossed over entirely.</li>
<li>Your Professional ASP.NET MVC 2 purchase comes with two weeks of <a href="http://tekpub.com/">TekPub</a> access. You may wish to factor this in when your calculating the true purchase price.</li>
</ul>
<p>As I alluded to earlier, you may be tempted to read through the NerdDinner tutorial and then go off and code up a storm. Don’t do it! The rest of the book has so much to offer – especially to someone brand new to ASP.NET MVC.  Really, soak up what’s provided in all of the chapters.  And as I climb onto my soapbox, please remember that <a href="http://mvcmusicstore.codeplex.com/">sample applications like NerdDinner</a> demonstrate basic and generalized implementations in order to highlight new features and ensure focus is firmly set on teaching and learning specific information.  If you wish to really understand ASP.NET MVC 2 development, work through the NerdDinner tutorial, read Professional ASP.NET MVC 2 cover to cover, write lots of your own code, read lots of other people’s code, come up with your own ideas and keep learning from the many other resources which are readily available to you.  I recommend Professional ASP.NET MVC 2 – it’ll get you off to a great start.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2010/07/23/professional-asp-net-mvc-2-review/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Streaming Netflix Media with My Wii</title>
		<link>http://johnnycoder.com/blog/2010/04/19/streaming-netflix-media-with-my-wii/</link>
		<comments>http://johnnycoder.com/blog/2010/04/19/streaming-netflix-media-with-my-wii/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 15:33:00 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[Recommended]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2010/04/19/streaming-netflix-media-with-my-wii/</guid>
		<description><![CDATA[Late last year, I wrote about Streaming Media with my Sony Blu-ray Disc Player. I am still digging the Blu-ray player setup but guess what showed up in the mail yesterday?&#160;&#160; That’s right!&#160; A free Netflix disc which now let’s me instantly watch TV episodes and movies via my Wii console.&#160; I popped the disc [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://johnnycoder.com/blog/wp-content/uploads/2010/04/image3.png"><img style="border-right-width: 0px; margin: 0px 20px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://johnnycoder.com/blog/wp-content/uploads/2010/04/image_thumb3.png" width="191" height="244" /></a>Late last year, I wrote about <a href="http://johnnycoder.com/blog/2009/12/31/streaming-media-with-sony-blu-ray-disc-player/">Streaming Media with my Sony Blu-ray Disc Player</a>. I am still digging the Blu-ray player setup but guess what showed up in the mail yesterday?&#160;&#160; That’s right!&#160; A <strong>free</strong> <a href="http://www.netflix.com">Netflix</a> disc which now let’s me instantly watch TV episodes and movies via my Wii console.&#160; </p>
<p>I popped the disc into the console and in less than 2 minutes the brain-numbingly simple activation was complete.&#160; (Full-disclosure: I already had my Wi-Fi connection configured, but I’m confident that the Netflix installation disc would have helpfully walked me through this additional step if need be.)</p>
<p>As it turns out, the Wii Netflix UI offers far more options than what one gets with the Blu-ray setup.&#160; Not only can I view my Instant Queue, but there’s a list of recently watched movies, a list of recommended titles by category, the star rating system, movies information and nearly everything you find on the web.&#160; </p>
<p>I reread <a href="http://www.amazon.com/Think-Common-Sense-Approach-Usability/dp/0789723107">Steve Krug’s Don’t Make Me Think: A Common Sense Approach to Web Usability</a> on a flight back from Orlando on Wednesday, so my current view of the world may be a little skewed but, the brilliance of Netflix Wii’s user interface is undeniable. It’s not like the Blu-ray navigation is complicated but the Wii navigation feels familiar and intuitive. How intuitive?&#160; Well, you won’t find a single bit of help text on any of the Wii screens – just a simple and obvious point-and-click navigation system.&#160; And the <a href="http://johnnycoder.com/blog/2006/10/26/selling-beer-in-a-champaign-bottle/">UI is really pretty</a> (which is still very important if you ask me) and so easy it became fun.</p>
<p>Did I mention the media streaming works!&#160; Yep, we watched 2 half-hour kid videos yesterday without any streaming issues at all.&#160; If you have a Netflix account and a Wii, order your disc and give it a go. It’s good stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2010/04/19/streaming-netflix-media-with-my-wii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pro ASP.NET MVC Framework Review</title>
		<link>http://johnnycoder.com/blog/2010/03/18/pro-asp-net-mvc-framework-review/</link>
		<comments>http://johnnycoder.com/blog/2010/03/18/pro-asp-net-mvc-framework-review/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 00:31:26 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2010/03/18/pro-asp-net-mvc-framework-review/</guid>
		<description><![CDATA[Early in my career, when I wanted to learn a new technology, I’d sit in the bookstore aisle and I’d work my way through each of the available books on the given subject.&#160; Put in enough time in a bookstore and you can learn just about anything. I used to really enjoy my time in [...]]]></description>
			<content:encoded><![CDATA[<p>Early in my career, when I wanted to learn a new technology, I’d sit in the bookstore aisle and I’d work my way through each of the available books on the given subject.&#160; Put in enough time in a bookstore and you can learn just about anything. I used to really enjoy my time in the bookstore – but times have certainly <a href="http://johnnycoder.com/blog/wp-content/uploads/2010/03/image4.png"><img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://johnnycoder.com/blog/wp-content/uploads/2010/03/image_thumb.png" width="133" height="175" /></a>changed.&#160; Whereas books used to be the only place I could find solutions to my problems, now they may be the very last place I look.&#160; </p>
<p>I have been working with the ASP.NET MVC Framework for more than a year.&#160; I have a few projects and a couple of major deployments under my belt and I was able to get up to speed with the framework without reading a single book*.&#160; With so many resources at our fingertips (podcasts, screencasts, blogs, stackoverflow, open source projects, <a href="http://www.asp.net">www.asp.net</a>, you name it) why bother with a book?</p>
<p>Well, I flipped through <a href="http://www.amazon.com/Pro-ASP-NET-Framework-Steven-Sanderson/dp/1430210079">Steven Sanderson’s Pro ASP.NET MVC Framework</a> a few months ago. And since it is prominently displayed in my co-worker’s office, I tend to pick it up as a reference from time to time.&#160; Last week, I’m not sure why, I decided to read it cover to cover.&#160; Man, did I eat this book up.&#160; Granted, a lot of what I read was review, but it was only review because I had already learned lessons by piecing the puzzle together for myself via various sources.</p>
<p><strong>If I were starting with ASP.NET MVC (or ASP.NET Web Deployment in general) today, the first thing I would do is buy </strong><a href="http://www.amazon.com/Pro-ASP-NET-Framework-Steven-Sanderson/dp/1430210079"><strong>Steven Sanderson’s Pro ASP.NET MVC Framework</strong></a><strong> and read it cover to cover. </strong></p>
<p><a href="http://blog.stevensanderson.com/">Steven Sanderson</a> did such a great job with this book! As much as I appreciated the in-depth model, view, and controller talk, I was completely impressed with all the extra bits which were included.&#160; There a was nice overview of BDD, view engine comparisons, a chapter dedicated to security and vulnerabilities, IoC, TDD and Mocking (of course), IIS deployment options and a nice overview of what the .NET platform and C# offers.&#160; Heck, Sanderson even include bits about webforms!</p>
<p>The book is fantastic and I highly recommend it – even if you think you’ve already got your head around ASP.NET MVC.&#160; By the way, procrastinators may be in luck.&#160; <a href="http://www.amazon.com/Pro-ASP-NET-MVC-V2-Framework/dp/1430228865/ref=pd_bxgy_b_img_a">ASP.NET MVC V2 Framework</a> can be pre-ordered.&#160; You might want to jump right into the second edition and find out what Sanderson has to say about MVC 2.</p>
<p>*<em> Actually, I did read through the free bits of </em><a href="http://www.amazon.com/Professional-ASP-NET-MVC-Wrox-Programmer/dp/0470384611/ref=pd_bxgy_b_img_a"><em>Professional ASP.NET MVC 1.0</em></a><em>.&#160; But it was just a chapter – albeit a really long chapter.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2010/03/18/pro-asp-net-mvc-framework-review/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Streaming Media with Sony Blu-ray Disc Player</title>
		<link>http://johnnycoder.com/blog/2009/12/31/streaming-media-with-sony-blu-ray-disc-player/</link>
		<comments>http://johnnycoder.com/blog/2009/12/31/streaming-media-with-sony-blu-ray-disc-player/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 18:29:41 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[Recommended]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2009/12/31/streaming-media-with-sony-blu-ray-disc-player/</guid>
		<description><![CDATA[The best gift under the tree this year? A Sony Blu-ray Disc player: The BDP-N460 allows you to instantly stream thousands of movies, videos and music from the largest selection of leading content providers including Netflix, Amazon Video On Demand, YouTube™, Slacker® Radio and many, many more. Plus, enjoy the ultimate in high-definition entertainment and [...]]]></description>
			<content:encoded><![CDATA[<p>The best gift under the tree this year? A <a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10551&amp;storeId=10151&amp;langId=-1&amp;productId=8198552921665968161">Sony Blu-ray Disc player</a>:</p>
<blockquote><p><a href="http://johnnycoder.com/blog/wp-content/uploads/2009/12/croppercapture1.png"><img style="border-right-width: 0px; margin: 10px 20px 20px 15px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CropperCapture[1]" border="0" alt="CropperCapture[1]" align="left" src="http://johnnycoder.com/blog/wp-content/uploads/2009/12/croppercapture1-thumb.png" width="244" height="183" /></a>The BDP-N460 allows you to instantly stream thousands of movies, videos and music from the largest selection of leading content providers including Netflix, Amazon Video On Demand, YouTube<sup>™</sup>, Slacker<sup>®</sup> Radio and many, many more. Plus, enjoy the ultimate in high-definition entertainment and watch Blu-ray Disc movies in Full HD 1080p quality with HD audio.</p>
</blockquote>
<p>The BDP-N460 includes built-in software that makes it easy to connect this player to your existing wireless network.&#160; So I did… I paired the disc player with the recommended <a href="http://www.linksysbycisco.com/US/en/products/WET610N">Linksys Wireless Ethernet Bridge (WET-610N)</a> and I was streaming the last season of Lost episodes in no time.</p>
<p>Really cool. Highly recommended.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2009/12/31/streaming-media-with-sony-blu-ray-disc-player/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC HandleError Attribute</title>
		<link>http://johnnycoder.com/blog/2009/12/22/aspnet-mvc-handleerror-attribute/</link>
		<comments>http://johnnycoder.com/blog/2009/12/22/aspnet-mvc-handleerror-attribute/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 00:39:05 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2009/12/22/aspnet-mvc-handleerror-attribute/</guid>
		<description><![CDATA[Last Wednesday, I took a whopping 15 minutes out of my day and added ELMAH (Error Logging Modules and Handlers) to my ASP.NET MVC application.&#160; If you haven’t heard the news (I hadn’t until recently), ELMAH does a killer job of logging and reporting nearly all unhandled exceptions.&#160; As for handled exceptions, I’ve been using [...]]]></description>
			<content:encoded><![CDATA[<p>Last Wednesday, I took a whopping 15 minutes out of my day and added <a href="http://code.google.com/p/elmah/">ELMAH</a> (Error Logging Modules and Handlers) to my ASP.NET MVC application.&#160; If you haven’t heard the news (I hadn’t until recently), ELMAH does a killer job of logging and reporting nearly all unhandled exceptions.&#160; As for handled exceptions, I’ve been using <a href="http://nlog-project.org/documentation.html">NLog</a> but since I was already playing with the ELMAH bits I thought I’d see if I couldn’t replace it.</p>
<p><a href="http://stackoverflow.com/users/6682">Atif Aziz</a> provided a quick solution in his answer to <a href="http://stackoverflow.com/questions/766610/how-to-get-elmah-to-work-with-asp-net-mvc-handleerror-attribute">a Stack Overflow question</a>.&#160; I’ll let you consult his answer to see how one can subclass the HandleErrorAttribute and override the OnException method in order to get the bits working.&#160; I pretty much took rolled the recommended logic into my application and it worked like a charm.&#160; </p>
<p>Along the way, I did uncover a few HandleError fact to which I wasn’t already privy.&#160; Most of my learning came from <a href="http://blog.codeville.net/">Steven Sanderson</a>’s book, <a href="http://www.amazon.com/gp/product/1430210079?ie=UTF8&amp;tag=stesansblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430210079">Pro ASP.NET MVC Framework</a>.&#160; I’ve flipped through a bunch of the book and spent time on specific sections.&#160; It’s a really good read if you’re looking to pick up an ASP.NET MVC reference.</p>
<p>Anyway, my notes are found a comments in the following code snippet.&#160; I hope my notes clarify a few things for you too.</p>
</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6a07fb8a-b150-4942-8759-aaf6d643f0b9" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt">
<div style="background: #ddd; overflow: auto">
<ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px; white-space: nowrap">
<li><span style="color:#0000ff">public</span> <span style="color:#0000ff">class</span> <span style="color:#2b91af">LogAndHandleErrorAttribute</span> : <span style="color:#2b91af">HandleErrorAttribute</span></li>
<li style="background: #f3f3f3">{</li>
<li>&#160;&#160;&#160;&#160;<span style="color:#0000ff">public</span> <span style="color:#0000ff">override</span> <span style="color:#0000ff">void</span> OnException(<span style="color:#2b91af">ExceptionContext</span> context)</li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;{</li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// A word from our sponsors: </span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">//&#160;&#160;&#160;&#160;&#160;&#160;http://stackoverflow.com/questions/766610/how-to-get-elmah-to-work-with-asp-net-mvc-handleerror-attribute</span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">//&#160;&#160;&#160;&#160;&#160;&#160;and Pro ASP.NET MVC Framework by Steven Sanderson</span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// </span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Invoke the base implementation first. This should mark context.ExceptionHandled = true </span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// which stops ASP.NET from producing a &quot;yellow screen of death.&quot; This also sets the </span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Http StatusCode to 500 (internal server error.)</span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">//</span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Assuming Custom Errors aren&#39;t off, the base implementation will trigger the application </span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// to ultimately render the &quot;Error&quot; view from one of the following locations:</span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">//</span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">//&#160;&#160;&#160;&#160;&#160;&#160;1. ~/Views/Controller/Error.aspx</span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">//&#160;&#160;&#160;&#160;&#160;&#160;2. ~/Views/Controller/Error.ascx</span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">//&#160;&#160;&#160;&#160;&#160;&#160;3. ~/Views/Shared/Error.aspx</span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">//&#160;&#160;&#160;&#160;&#160;&#160;4. ~/Views/Shared/Error.ascx</span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// </span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// &quot;Error&quot; is the default view, however, a specific view may be provided as an Attribute property.</span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// A notable point is the Custom Errors defaultRedirect is not considered in the redirection plan.</span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">base</span>.OnException(context);</li>
<li style="background: #f3f3f3">&nbsp;</li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">var</span> e = context.Exception;</li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// If the exception is unhandled, simply return and let Elmah handle the unhandled exception.</span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// Otherwise, try to use error signaling which involves the fully configured pipeline like logging, </span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// mailing, filtering and what have you). Failing that, see if the error should be filtered. </span></li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#008000">// If not, the error simply logged the exception. </span></li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">if</span> (!context.ExceptionHandled&#160;&#160;&#160;</li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|| RaiseErrorSignal(e)&#160;&#160;&#160;&#160;&#160;&#160;</li>
<li>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;|| IsFiltered(context))&#160;&#160;&#160;&#160;&#160;</li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">return</span>;</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LogException(e); <span style="color:#008000">// FYI. Simple Elmah logging doesn&#39;t handle mail notifications. </span></li>
<li>&#160;&#160;&#160;&#160;}</li>
</ol></div>
</p></div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2009/12/22/aspnet-mvc-handleerror-attribute/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Screen Design with Balsamiq Mockups</title>
		<link>http://johnnycoder.com/blog/2009/05/11/screen-design-with-balsamiq-mockups/</link>
		<comments>http://johnnycoder.com/blog/2009/05/11/screen-design-with-balsamiq-mockups/#comments</comments>
		<pubDate>Mon, 11 May 2009 17:36:13 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2009/05/11/screen-design-with-balsamiq-mockups/</guid>
		<description><![CDATA[I was just speaking with a coworker about the tool I used to mockup screens in a recent requirements document.&#160; If you aren’t familiar with Balsamiq Mockups, you are missing out.&#160; Maybe you are responsible for application UI design or you simply like to sketch out your screens before you develop them?&#160; If so, take [...]]]></description>
			<content:encoded><![CDATA[<p>I was just speaking with a coworker about the tool I used to mockup screens in a recent requirements document.&#160; If you aren’t familiar with <a href="http://www.balsamiq.com/products/mockups">Balsamiq Mockups</a>, you are missing out.&#160; Maybe you are responsible for application UI design or you simply like to sketch out your<a name="wiki"><img style="margin: 15px 10px 15px 15px; display: inline" align="right" src="http://www.balsamiq.com/images/wiki.gif" width="240" height="190" /></a> screens before you develop them?&#160; If so, take a minute out of your day and <a href="http://www.balsamiq.com/demos/mockups/Mockups.html">give Balsamiq Mockups a try</a>.&#160; </p>
<p>Balsamiq mockups sped up my document writing time. It also increased the overall document quality and understandability when it came to sharing ideas with my customer.&#160; Of course, the fact that working with Balsamiq Mockups is just plain fun doesn’t hurt my opinion of the tool…</p>
<p>The biggest plus is the fact the mockup data – even the data which is generated using the online trial – is yours and it’s in an open, portable and human readable format.&#160; In other words, it’s super easy to duplicate, edit and share mockups. </p>
<p>If you want to learn more about Balsamiq Mockups, <a href="http://www.balsamiq.com/products/mockups">check out the product page</a>.&#160; Otherwise, just <a href="http://www.balsamiq.com/demos/mockups/Mockups.html">give it a try</a>.&#160; I promise it will be fun (and maybe even productive.)</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2009/05/11/screen-design-with-balsamiq-mockups/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>15 Random Things I&#8217;ve Learned from Jeffrey Richter</title>
		<link>http://johnnycoder.com/blog/2009/04/08/15-random-things-ive-learned-from-jeffrey-richter/</link>
		<comments>http://johnnycoder.com/blog/2009/04/08/15-random-things-ive-learned-from-jeffrey-richter/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 06:28:28 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[CLR]]></category>
		<category><![CDATA[Recommended]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2009/04/08/15-random-things-ive-learned-from-jeffrey-richter/</guid>
		<description><![CDATA[I read through Jeffrey Richter’s CLR via C# not too long ago.&#160; This evening I cracked it open again and jotted down a few notes on what I personally took away from the book. Of course, if I spent the time to write down everything I learned, I might still be busy writing.&#160; I’ve thrown [...]]]></description>
			<content:encoded><![CDATA[<p>I read through Jeffrey Richter’s CLR via C# not too long ago.&#160; This evening I cracked it open again and jotted down a few notes on what I personally took away from the book. Of course, if I spent the time to write down <u>everything</u> I learned, I might still be busy writing.&#160; I’ve thrown in the towel and though I’m probably not doing the book justice, here are <strong>15 random things I have learned from Jeffrey Richter</strong>:<a href="http://search.barnesandnoble.com/CLR-Via-C/Jeffrey-Richter/e/9780735621633/?itm=1"><img style="display: inline; margin: 0px 20px 15px" height="156" alt="CLR Via C# by Richter Richter: Book Cover" src="http://images.barnesandnoble.com/images/34720000/34724778.JPG" width="128" align="right" border="0" /></a></p>
<p>Page 3 – Way more than I ever wanted to know about the CLR’s execution model.&#160; That is, everything about Managed Modules, Assemblies, Intermediate Language (IL), Framework Class Library (FCL), Common Type System (CTS) and Common Language Specification (CLS.)&#160; </p>
<p>Page 56 – How to properly version your assemblies – including a breakdown of the assembly version resource information, how/when to increment the major, minor, build and revision numbers, and the distinction between AssemblyFileVersion, AssemblyInfomationVersion and AssemblyVersion numbers. </p>
<p>Page 144 – Best practices on how to write code to compare objects.&#160; Here, Richter drills into object equality, identity and hash codes. </p>
<p>Page 177 – How the compiler handles constants – their values are embedded inside the IL code at compile time.&#160; </p>
<p>Page 185 – Why one must beware of code explosion with initializing fields within classes with multiple constructors.&#160; Key points: Any fields that the constructor doesn’t explicitly overwrite are guaranteed to have a value of 0 or null.&#160; The compiler embeds, at the beginning of all constructor methods, field initialization code.&#160; You should consider not initializing the default field value at the point of field declaration and instead perform the common initialization in a single constructor and have all other constructors explicitly call the common initialization constructor before overriding varying defaults.&#160; </p>
<pre class="code"><span style="color: blue">internal sealed class </span><span style="color: #2b91af">SomeType
</span>{
    <span style="color: green">// Do not explicitly initialize the fields here
    </span><span style="color: blue">private </span><span style="color: #2b91af">Int32 </span>x;
    <span style="color: blue">private </span><span style="color: #2b91af">String </span>y;
    <span style="color: blue">private </span><span style="color: #2b91af">Double </span>z;

    <span style="color: green">// Sets all fields to their default
    // All constructors explicitly invoke this constructor
    </span><span style="color: blue">public </span>SomeType()
    {
        x = 5;
        y = <span style="color: #a31515">&quot;Ben&quot;</span>;
        z = 3.14159;
    }

    <span style="color: green">// Sets all fields to their default, then changes x
    </span><span style="color: blue">public </span>SomeType(<span style="color: #2b91af">Int32 </span>x) : <span style="color: blue">this</span>()
    {
        <span style="color: blue">this</span>.x = x;
    }

    <span style="color: green">// Sets all fields to their default, then changes y
    </span><span style="color: blue">public </span>SomeType(<span style="color: #2b91af">String </span>y) : <span style="color: blue">this</span>()
    {
        <span style="color: blue">this</span>.y = y;
    }

    <span style="color: green">// Sets all fields to their default, then changes x, y
    </span><span style="color: blue">public </span>SomeType(<span style="color: #2b91af">Int32 </span>x, <span style="color: #2b91af">String </span>y) : <span style="color: blue">this</span>()
    {
        <span style="color: blue">this</span>.x = x;
        <span style="color: blue">this</span>.y = y;
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Page 254 – The power of string interning and string&#160; pooling. </p>
<p>Page 309 – How to perform unsafe array access and fixed-sized arrays. </p>
<p>Page 322 – How to implement multiple interfaces that have the same method name and signature and… </p>
<p>Page 325 – Why you need to be really careful when using explicit interface method implementations.</p>
<p>Page 365 – A quick introduction into <a href="http://www.wintellect.com/PowerCollections.aspx" target="_blank">Wintellect’s Power Collections</a> library which extends the .NET Framework’s Class Library with an assortment of collection classes. The Power Collections library, documentation, and licensing information is available on <a href="http://www.codeplex.com/PowerCollections">CodePlex</a>. </p>
<p>Page 411 – How the CLR provides special support for Nullable value types. </p>
<p>Page 431 – A little background on System.Exception, System.SystemException and System.ApplicationException and how Microsoft through the basic principles out the window. </p>
<p>Page 457 – Way more information than any single person should know about Garbage Collection (GC).</p>
<p>Page 562 – How to build a system which support add-ins. </p>
<p>Though it wasn’t mentioned in the book, Richter’s <a href="http://www.wintellect.com/PowerThreading.aspx" target="_blank">Power Threading library (DLL)</a> contains many classes to help with threading and asynchronous programming for the .NET Framework, Silverlight, and the .NET Compact Framework. Jeffrey has described many of the classes contained in the library by way of his <a href="http://msdn.microsoft.com/en-us/magazine/cc301191.aspx">MSDN Magazine Concurrent Affairs columns</a> and I found his <a href="http://tinyurl.com/6ku9k2" target="_blank">Channel 9 overview on the AsyncEnumerator class</a> (which uses Yield to simplify multithreading) absolutely fascinating.&#160; The Power Threading Library is available for download <a href="http://www.wintellect.com/Downloads/PowerThreadingAttachments/Wintellect_Power_Threading_Library_(March_7,_2009).zip">here</a>. </p>
<p>That’s fifteen.&#160; I should probably drill into a couple of these with code samples…or you could just get a copy of the book. <img src='http://johnnycoder.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Random closing thought: When I was flipping through the book today I found a spider smashed between pages 72 and 73.&#160; Ironic?</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2009/04/08/15-random-things-ive-learned-from-jeffrey-richter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>FlexBox jQuery Plugin</title>
		<link>http://johnnycoder.com/blog/2008/12/13/flexbox-jquery-plugin/</link>
		<comments>http://johnnycoder.com/blog/2008/12/13/flexbox-jquery-plugin/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 06:05:37 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Controls]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/12/13/flexbox-jquery-plugin/</guid>
		<description><![CDATA[FlexBox is a jQuery plugin that is intended to be a very flexible replacement for HTML textboxes and dropdowns using AJAX to retrieve and bind JSON data.&#160; Okay. Now what is FlexBox exactly? It is a dynamic control which can present itself as a combobox with per-result HTML templates, a suggest box (like Google search) [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.fairwaytech.com/flexbox/Default.aspx">FlexBox</a> is a jQuery plugin that is intended to be a very flexible replacement for HTML textboxes and dropdowns using AJAX to retrieve and bind JSON data.&nbsp;
<p><em>Okay. Now what is FlexBox exactly? </em>
<p>It is a dynamic control which can present itself as a combobox with per-result HTML templates, a suggest box (like Google search) or a data-driven type-ahead input box.&nbsp; It supports theming/skinning via CSS, flexible paging, configurable client-side cache and <a href="http://www.fairwaytech.com/flexbox/#config">much more</a>.&nbsp;
<p><em>Great.&nbsp; We got it.&nbsp; It&#8217;s clearly flexible, but is it easy to use?&nbsp; </em>
<p>Yes.&nbsp; It&#8217;s also super easy to use.&nbsp; <a href="http://johnnycoder.com/blog/wp-content/uploads/2008/12/image1.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 5px; border-right-width: 0px" height="292" alt="image" src="http://johnnycoder.com/blog/wp-content/uploads/2008/12/image-thumb1.png" width="231" align="right" border="0"></a>
<p><em>Prove it!</em>
<p>Okay, for example, you can generate a Google Suggests-type textbox in just a few steps:
<ol>
<li>Reference jQuery and the FlexBox scripts.
<li>Add an empty div to the &lt;body&gt; tag wherever you want the FlexBox to appear.
<li>And assuming results.aspx returns JSON data and your div has an id = &#8220;ffb3&#8243;, this code will render a suggest box similar to that represented in the image to the right:
<pre class="code">$(<span style="color: #a31515">'#ffb3'</span>).flexbox(<span style="color: #a31515">'results.aspx'</span>, {
    showArrow: <span style="color: blue">false
</span>});</pre>
<p><a href="http://11011.net/software/vspaste"></a></li>
</ol>
<p>Pretty slick, eh?&nbsp; FlexBox was developed by a co-worker of mine, Noah Heldman, as an open source project hosted on CodePlex. It is <a href="http://www.fairwaytech.com/flexbox/Default.aspx">well documented</a> (including a Getting Started Guide) and comes along with <a href="http://www.fairwaytech.com/flexbox/Demos.aspx">a great demo page</a>.&nbsp; I think Noah did a really nice job with this plugin.&nbsp; If you&#8217;re looking for a searchable textbox/dropdown, I suggest you check it out. </p>
<p><a href="http://www.codeplex.com/flexbox"><b>FlexBox</b> CodePlex Project Page</a><br /><a href="http://plugins.jquery.com/project/FlexBox"><b>FlexBox</b> jQuery Plugin Page</a><br /><a href="http://www.fairwaytech.com/Default.aspx"><b>FlexBox</b> Overview</a></p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/12/13/flexbox-jquery-plugin/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Required Reading for JavaScript Devs</title>
		<link>http://johnnycoder.com/blog/2008/12/11/required-reading-for-javascript-devs/</link>
		<comments>http://johnnycoder.com/blog/2008/12/11/required-reading-for-javascript-devs/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 08:30:23 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/12/11/required-reading-for-javascript-devs/</guid>
		<description><![CDATA[I read a bit of “jQuery in Action” a couple of weeks back.&#160; Actually all I read was the appendix which is aptly titled &#8220;JavaScript that you need to know but might not!&#8221;&#160; This short chapter very concisely covers JavaScript concepts which should be required learning for all web developers.&#160; If you are an experienced [...]]]></description>
			<content:encoded><![CDATA[<p>I read a bit of “jQuery in Action” a couple of weeks back.&nbsp; Actually all I read was the appendix which is aptly titled &#8220;JavaScript that you ne<a href="http://www.amazon.com/dp/1933988355/?tag=johnnycoderco-20"><img style="margin: 10px" height="240" alt="jQuery in Action" src="http://ecx.images-amazon.com/images/I/51REisyoeoL._SL500_AA240_.jpg" width="240" align="right" border="0"></a>ed to know but might not!&#8221;&nbsp; This short chapter very concisely covers <strong>JavaScript concepts which should be required learning for all web developers</strong>.&nbsp;
<p>If you are an experienced JavaScript developer (i.e. your JS code does more than trigger alerts, toggle divs and set window locations), you know the language is not particularly easy to get your head around.&nbsp; In my opinion, most web developers have a poor understanding of JavaScript to the extent that the bulk of their JS code (mine included) is a mere collection of hacked-together, simple statements.&nbsp; Based on my judgement, the appendix title should read &#8220;JavaScript that you need to know but you more than likely do not!&#8221;&nbsp;
<p>Generously, &#8220;jQuery in Action&#8221; provides a thorough overview of &#8220;basic&#8221; JS concepts like objects and JSON, functions being first-class objects, controlling what &#8220;this&#8221; means along with closures.&nbsp; I&#8217;ve really enjoyed jQuery in Action thus far &#8211; particularly because the authors ensure that their readers have a firm understanding of core JavaScript concepts which are arguably the necessary foundation to effectively use jQuery.
<p>The next time you find yourself in your local bookstore, sit down in the aisle with a copy of &#8220;jQuery in Action&#8221; and give the appendix a good read.&nbsp; It&#8217;s 19 pages of pure Javascript goodness.&nbsp; And who knows?&nbsp; You might even purchased the copy and read the jQuery parts&#8230;</p>
<p>&nbsp;</p>
<div class="wlWriterSmartContent" id="scid:C16BAC14-9A3D-4c50-9394-FBFEF7A93539:d93e2bae-ae8e-48c4-a501-c6a0eea9fd61" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><a href="http://www.dotnetkicks.com/kick/?url=http://johnnycoder.com/blog/2008/12/11/required-reading-for-javascript-devs/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://johnnycoder.com/blog/2008/12/11/required-reading-for-javascript-devs/" border="0" alt="kick it on DotNetKicks.com" /></a></div>
<p><a href="&quot;http://www.amazon.com/dp/0470294191/?tag=johnnycoderco-20"></p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/12/11/required-reading-for-javascript-devs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Thirsty Developer Podcast</title>
		<link>http://johnnycoder.com/blog/2008/10/22/the-thirsty-developer/</link>
		<comments>http://johnnycoder.com/blog/2008/10/22/the-thirsty-developer/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 16:28:40 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[Recommended]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/10/22/the-thirsty-developer/</guid>
		<description><![CDATA[I&#8217;ve recommended .NET podcasts before and it&#8217;s time to add a new show to the mix.  This past weekend, I started consuming the backlog of The Thirsty Developer podcast in large quantities and I like it.  I found the majority of the shows to be well-structured, high production quality, informative and entertaining.  But I&#8217;ll let [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://thirstydeveloper.com/images/ThirstyDeveloper_small.png" border="0" alt="" align="right" /></p>
<p>I&#8217;ve <a href="http://johnnycoder.com/blog/2008/08/06/net-podcast-recommendations/">recommended .NET podcasts</a> before and it&#8217;s time to add a new show to the mix.  This past weekend, I started consuming the backlog of <a href="http://thirstydeveloper.com/">The Thirsty Developer</a> podcast in large quantities and I like it.  I found the majority of the shows to be well-structured, high production quality, informative and entertaining.  But I&#8217;ll let you be the judge. </p>
<p>The show is hosted by MS Developer Evangelist, <a href="http://www.davebost.com/blog">Dave Bost</a>, and MS Architect Evangelist, <a href="http://eraserandcrowbar.com/">Larry Clarkin</a>, but don&#8217;t let those Blue Badges scare you away as conversations/interviews aren&#8217;t solely Microsoft-centric.  Topics vary but generally stay within the interests of the typical .NET developer.  Case in point, my two favorite episodes, thus far, are related to SCRUM.  If you are at all interested in this <span style="text-decoration: line-through;">methodology</span> process, you should give them a listen: </p>
<ul>
<li><a href="http://thirstydeveloper.com/2008/03/01/TheThirstyDeveloper14SCRUM.aspx">The Thirsty Developer 14: SCRUM</a></li>
<li><a href="http://thirstydeveloper.com/2008/07/26/TheThirstyDeveloper28SCRUMAndAgileInTheEnterprise.aspx">The Thirsty Developer 28: SCRUM and Agile in the Enterprise</a></li>
</ul>
<p>Again, I find the podcast informative and entertaining. I bet if you like <a href="http://deepfriedbytes.com/ ">Deep Fried Bytes</a>, you&#8217;ll like <a href="http://thirstydeveloper.com/">The Thirsty Developer</a> as well.</p>
<p>Let me know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/10/22/the-thirsty-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET Podcast Recommendations</title>
		<link>http://johnnycoder.com/blog/2008/08/06/net-podcast-recommendations/</link>
		<comments>http://johnnycoder.com/blog/2008/08/06/net-podcast-recommendations/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 13:00:51 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[Recommended]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/08/06/net-podcast-recommendations/</guid>
		<description><![CDATA[Last Friday, a fellow coder asked the team for podcast recommendations.  Since I listen to anywhere from 6-10 podcasts a week, I was happy to share what is currently in my top podcast rotation.  It is worth noting that those of us in the .NET community are rather fortunate as there are a number of [...]]]></description>
			<content:encoded><![CDATA[<p>Last Friday, a fellow coder asked the team for podcast recommendations.  Since I listen to anywhere from 6-10 podcasts a week, I was happy to share what is currently in my top podcast rotation. </p>
<p>It is worth noting that those of us in the .NET community are rather fortunate as there are a number of recent newcomers in this space.  In fact, four of my top six podcasts have been around for less than 4 months.  I personally think they&#8217;ve all done a standup job and it has been enjoyable listening to the podcasts as they mature.  Maybe some day, years from now, young developers will gather around as I tell tales of the very first Herding Code podcast. You never know&#8230;</p>
<p>Enough with the intro already.  Here&#8217;s my .NET Podcast Recommendation List in no particular order (other than alphabetical):</p>
<p><strong>Alt.NET Podcast<br />
</strong><a title="http://altnetpodcast.com/" href="http://altnetpodcast.com/">http://altnetpodcast.com/</a><br />
Hosted by <a href="http://blowmage.com/">Mike Moore</a><br />
Currently on Episode 8 </p>
<p><strong>Deep Fried Bytes<br />
</strong><a title="http://deepfriedbytes.com/" href="http://deepfriedbytes.com/">http://deepfriedbytes.com/</a><br />
Hosted by <a href="http://keithelder.net/blog/">Keith Elder</a> and <a href="http://blog.cloudsocket.com/">Chris Woodruff</a><br />
Currently on Episode 8</p>
<p><strong>Hanselminutes <br />
</strong><a title="http://www.hanselminutes.com/" href="http://www.hanselminutes.com/">http://www.hanselminutes.com/</a><br />
Hosted by <a href="http://www.hanselman.com/blog/">Scott Hanselman</a><br />
Currently on Show #124 </p>
<p><strong>Herding Code<br />
</strong><a title="http://herdingcode.com/" href="http://herdingcode.com/">http://herdingcode.com/</a><br />
Hosted by <a href="http://weblogs.asp.net/jgalloway/">Jon Galloway</a>, <a href="http://odetocode.com/">K. Scott Allen</a>, <a href="http://weblogs.asp.net/kdente/">Kevin Dente</a> and <a href="http://www.lazycoder.com/weblog/">Scott Koon</a><br />
Currently on Episode 11</p>
<p><strong>.NET Rocks!<br />
</strong><a title="http://www.dotnetrocks.com/" href="http://www.dotnetrocks.com/">http://www.dotnetrocks.com/</a><br />
Hosted by <a href="http://www.intellectualhedonism.com/">Carl Franklin</a> and <a href="http://www.campbellassociates.ca/blog/default.aspx">Richard Campbell</a><br />
Currently on Show #365</p>
<p><strong>Stackoverflow<br />
</strong><a title="http://blog.stackoverflow.com/" href="http://blog.stackoverflow.com/">http://blog.stackoverflow.com/</a><br />
Hosted by <a href="http://www.codinghorror.com/blog/">Jeff Atwood</a> and <a href="http://joelonsoftware.com/">Joel Spolsky</a><br />
Currently on Podcast #16</p>
<div id="scid:C16BAC14-9A3D-4c50-9394-FBFEF7A93539:2d969a8d-ed51-4a12-b4cc-7d10bf85d7e5" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><a href="http://www.dotnetkicks.com/kick/?url=http://johnnycoder.com/blog/2008/08/06/net-podcast-recommendations/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://johnnycoder.com/blog/2008/08/06/net-podcast-recommendations/" border="0" alt="kick it on DotNetKicks.com" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/08/06/net-podcast-recommendations/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting Started with Inno Setup</title>
		<link>http://johnnycoder.com/blog/2008/07/28/getting-started-with-inno-setup/</link>
		<comments>http://johnnycoder.com/blog/2008/07/28/getting-started-with-inno-setup/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 11:18:05 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Installers]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/07/28/getting-started-with-inno-setup/</guid>
		<description><![CDATA[For the first time in years, I needed to distribute my application to the end user&#8217;s machine via an online download.  To do this effectively and professionally, I, of course, needed an install package.  Over the year, I have used both Wise and InstallShield but they both cost money and I don&#8217;t recall them being [...]]]></description>
			<content:encoded><![CDATA[<p>For the first time in years, I needed to distribute my application to the end user&#8217;s machine via an online download.  To do this effectively and professionally, I, of course, needed an install package.  Over the year, I have used both <a href="http://www.wisesolutions.com/Products/Installations.aspx">Wise</a> and <a href="http://www.acresso.com/products/installation/installshield.htm">InstallShield</a> but they both cost money and I don&#8217;t recall them being all that easy to manage.  This was, however, years ago.  More recently I have, like many developers, used <a href="http://msdn.microsoft.com/en-us/library/aa372866.aspx">Windows Installer</a> to <a href="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image25.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px; border-right-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image-thumb10.png" border="0" alt="image" width="339" height="265" align="right" /></a>generate MSIs for very simple (read: file copy) deployments. There&#8217;s nothing flexible or particularly pleasing about MSIs, but one can typically get them created with a few button clicks.  For the installation of internal applications, MSIs are more than tolerable, in my opinion.  Other than those options, I was quite ignorant on the subject of installers so I briefly evaluated three free candidates:</p>
<ul>
<li><a href="http://wix.sourceforge.net/">Windows Installer XML (WiX) Toolset</a> is a Microsoft open source project used to create the Office 2007 installer. WiX includes some advanced capabilities, but it has a steep learning curve even though the scripting language is XML-based.</li>
<li><a href="http://nsis.sourceforge.net/Main_Page">NSIS (Nullsoft Scriptable Install System)</a> is a professional open source system to create Windows installers. It is designed to be as small and flexible as possible and is therefore very suitable for Internet distribution. It has a rich feature list, a good set of online samples and a good community following.</li>
<li><a href="http://www.jrsoftware.org/isinfo.php">Inno Setup</a> is another free, open source installer for Windows programs. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.</li>
</ul>
<h3>Decision</h3>
<p>After a quick review of each product, I opted to run with Inno Setup primarily because it had the ugliest website, all of their product award links are broken and it isn&#8217;t known by any acronym&#8230;yet.  Joking aside, I chose Jordan Russell&#8217;s Inno Setup because it met all of my requirements almost effortlessly.  Here&#8217;s the rundown of what I needed:</p>
<ul>
<li>Check for the .NET Framework and install if not found</li>
<li>Check if Remote Registry is running and start if stopped.</li>
<li>Check is UAC is enabled and provide user dialogue.</li>
<li>Open website(s).</li>
<li>Create quick launch, desktop, start icons.</li>
<li>Read, update registry.</li>
<li>Ask custom questions and manage response.</li>
<li>Launch applications.</li>
<li>Install silently.</li>
<li>Create associated uninstaller.</li>
<li>Show/acknowledge terms of service.</li>
<li>Display readme.</li>
<li>Customizable/skinnable display.  </li>
<li>Etc</li>
</ul>
<p>Additionally, Inno Setup it is such an easy tool to use and test and it has been around for a long while and has a great <a href="http://www.jrsoftware.org/isinfo.php#features">feature list:</a></p>
<ul>
<li>Support for <strong>all versions of Windows</strong> in use today: Vista, XP, 2008, 2003, 2000, Me, 98, 95, and NT 4.0. (No service packs are required.)</li>
<li>Extensive support for installation of 64-bit applications on the 64-bit editions of Windows. Both the x64 and Itanium architectures are supported. (On the Itanium architecture, Service Pack 1 or later is required on Windows Server 2003 to install in 64-bit mode.)</li>
<li>Supports creation of a <strong>single EXE</strong> to install your program for easy online distribution. Disk spanning is also supported.</li>
<li>Standard Windows 2000/XP-style wizard interface.</li>
<li><strong>Customizable setup types</strong>, e.g. Full, Minimal, Custom.</li>
<li>Complete <strong>uninstall</strong> capabilities.</li>
<li>Installation of files:<br />
Includes integrated support for &#8220;deflate&#8221;, bzip2, and <strong>7-Zip LZMA file compression</strong>. The installer has the ability to compare file version info, replace in-use files, use shared file counting, register DLL/OCX&#8217;s and type libraries, and install fonts.</li>
<li>Creation of shortcuts anywhere, including in the Start Menu and on the desktop.</li>
<li>Creation of registry and .INI entries.</li>
<li>Integrated Pascal scripting engine.</li>
<li>Support for multilingual installs.</li>
<li>Support for passworded and encrypted installs.</li>
<li>Silent install and uninstall.</li>
<li>Full <strong>source code</strong> is available (Borland Delphi 2.0-5.0).</li>
</ul>
<p>Oh, and have I mentioned that it is free? </p>
<h3>Getting Started</h3>
<p>The basic installer includes the Inno Setup Compiler, documentation and numerous samples.  If you want to get started quickly just <a href="http://www.jrsoftware.org/isdl.php">download</a> Inno Setup and review the sample scripts.  You&#8217;ll be creating your own installers in no time.  Alternatively, you could download/install the <a href="http://www.jrsoftware.org/isdl.php#qsp">QuickStart Pack</a>, but I honestly do not think it is necessary.<a href="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image26.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px; border-right-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image-thumb11.png" border="0" alt="image" width="221" height="291" align="right" /></a></p>
<p>As I mentioned, a review/compilation of the samples can provide a quick, easy introduction into the impressive tool. All the examples are worth a look, but I feel it is necessary to give a few special mention:</p>
<ul>
<li><strong>Example1.iss, Example2.iss and Example3.iss</strong> provide a great foundation as they demonstrate how to access the registry, add a desktop icon, include a readme file, etc, etc, etc.  </li>
<li>If you are planning to do anything non-standard, play around with the<strong> CodeExample1.iss</strong> sample.  It essentially builds a basic setup, captures every installer event, includes custom functions, and demonstrates how to extract/expand files, display dialogues and issue before and after installer actions. </li>
<li>Finally, if you want to build custom pages, check out <strong>CodeDlg.iss</strong> which demonstrates how to build installer pages with custom questions and user input options.</li>
</ul>
<p>My suggestion is to review the samples from within the Compiler.  The Compiler doesn&#8217;t have intellisense or anything, but it will obviously validate your script and call out where <a href="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image27.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 10px 5px; border-right-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image-thumb12.png" border="0" alt="image" width="342" height="109" align="left" /></a>invalid syntax exists.  The Compiler also allows you to immediately &#8220;run&#8221; your installer script (by clicking on the green arrow button) or compile the script (by clicking on the fourth button from the left.) What the heck is that anyway?  The Compile IDE is a fancy notepad with options and actions.  It&#8217;s simple and I dig it.</p>
<p>Speaking of simple, here&#8217;s an example script.  You would have to build on its foundation if you wanted to do anything fancy, like read from the registry, but these few lines practically do it all.  They copy three files into the Program Files sub directory, displays a read me file and add an icon to the Start Menu.  And all the standard installer pages (splash, location, completion, etc) comes along for free &#8212; free meaning no effort and no code.</p>
<p>[Setup]<br />
AppName=My Program<br />
AppVerName=My Program version 1.5<br />
DefaultDirName={pf}\My Program<br />
DefaultGroupName=My Program<br />
UninstallDisplayIcon={app}\MyProg.exe<br />
Compression=lzma<br />
SolidCompression=yes<br />
OutputDir=userdocs:Inno Setup Examples Output</p>
<p>[Files]<br />
Source: &#8220;MyProg.exe&#8221;; DestDir: &#8220;{app}&#8221;<br />
Source: &#8220;MyProg.chm&#8221;; DestDir: &#8220;{app}&#8221;<br />
Source: &#8220;Readme.txt&#8221;; DestDir: &#8220;{app}&#8221;; Flags: isreadme</p>
<p>[Icons]<br />
Name: &#8220;{group}\My Program&#8221;; Filename: &#8220;{app}\MyProg.exe&#8221;</p>
<h3>Extra Help</h3>
<p>Finding the right syntax wasn&#8217;t always a breeze as everything isn&#8217;t covered in the samples.  With that said, the best online reference I found was an <a href="http://www.agensoft.com/download/addons/inno_manual.pdf">Inno Setup Manual</a> hosted at AgentSoft.com. I can&#8217;t say I know the connection between AgentSoft and Inno but I&#8217;m still very happy to have found the reference.  I also found various &#8220;real world&#8221; installer scripts, like this <a href="http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/phpgwjp/phpgwjp_installer/phpGroupWare.iss?rev=1.3">one</a>, posted online which really helped facilitate my ramp up.</p>
<h3>.NET Framework Install Script</h3>
<p><a name="features"><span style="color: #000000;">In my requirements list,</span></a> I called out the need to check for the .NET Framework and install if it wasn&#8217;t found.  This functionality is a snap using Inno Setup &#8212; just be sure to use the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4f7ae6fe-f4d1-4196-a372-80eab6d56332&amp;displaylang=en">Client Profile version</a> of the installer.</p>
<p>[Files]<br />
Source: &#8220;Executables\dotnetfx35setup.exe&#8221;; DestDir: &#8220;{tmp}&#8221;; Flags: deleteafterinstall</p>
<p>[Run]<br />
Filename: {tmp}\dotnetfx35setup.exe; Parameters: &#8220;/Q /NORESTART&#8221;; Check: Is35FrameworkInstalled; Flags: runhidden shellexec waituntilterminated; StatusMsg: &#8220;This may forever.&#8221;</p>
<p>[Code]<br />
function Is35FrameworkInstalled():Boolean;<br />
begin<br />
    Result := not RegKeyExists(HKEY_LOCAL_MACHINE, &#8216;SOFTWARE\Microsoft\Net Framework Setup\NDP\v3.5&#8242;);<br />
end;</p>
<h3>Summary</h3>
<p>I&#8217;ll keep it short and sweet: Inno Setup is one slick piece of software that made the dreaded task of creating a custom installer one heck of a lot easier than it could have been.  I&#8217;ve added Inno Setup to my toolbox and I highly suggest you do too.</p>
<div id="scid:C16BAC14-9A3D-4c50-9394-FBFEF7A93539:a61f9e0b-f99c-4963-aa45-29bdb5550cb1" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><a href="http://www.dotnetkicks.com/kick/?url=http://johnnycoder.com/blog/2008/07/28/getting-started-with-inno-setup/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://johnnycoder.com/blog/2008/07/28/getting-started-with-inno-setup/" border="0" alt="kick it on DotNetKicks.com" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/07/28/getting-started-with-inno-setup/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Getting Started with AnkhSVN</title>
		<link>http://johnnycoder.com/blog/2008/07/22/getting-started-with-ankhsvn/</link>
		<comments>http://johnnycoder.com/blog/2008/07/22/getting-started-with-ankhsvn/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 20:27:55 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Version Control]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/07/22/getting-started-with-ankhsvn/</guid>
		<description><![CDATA[I&#8217;ve previously written about managing your Subversion repositories via the TortoiseSVN client.  TortoiseSVN integrates with Windows Explorer and provides a really slick way to do things like view the status of your source code, update your Subversion working copy and commit change. But as slick as it is, TortoiseSVN requires one to bounce between their [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://johnnycoder.com/blog/2007/01/19/getting-started-with-subversion/">I&#8217;ve previously written</a> about managing your <a href="http://subversion.tigris.org/">Subversion</a> repositories via the <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a> client.  TortoiseSVN integrates with Windows Explorer and provides a really slick way to do things like view the status of your source code, update your Subversion working copy and commit change.<a href="http://johnnycoder.com/blog/wp-content/uploads/2007/01/WindowsLiveWriter/GettingStartedwithSubVersion_E7CA/image%7B0%7D%5B10%5D.png"><img style="margin: 10px" src="http://johnnycoder.com/blog/wp-content/uploads/2007/01/WindowsLiveWriter/GettingStartedwithSubVersion_E7CA/image%7B0%7D_thumb%5B4%5D.png" border="0" alt="" width="351" height="94" align="right" /></a></p>
<p>But as slick as it is, TortoiseSVN requires one to bounce between their IDE and the Windows Explorer.  You&#8217;re right!  A simple, two-second step, a mere ALT-TAB, shouldn&#8217;t be that disruptive but, for me, it is and it keeps me from committing my changes as often as I probably should.  Perhaps this is a flaw in the way I work, but it is, without a doubt, the way I work.</p>
<p>There are two players in the &#8220;Subversion Source Control Provider for Visual Studio&#8221; space.  There&#8217;s <a href="http://www.visualsvn.com/">VisualSVN</a> and there&#8217;s <a href="http://ankhsvn.open.collab.net/">AnkhSVN</a>.   Until this week, I had heard nothing but good things about VisualSVN and AnkhSVN reviews weren&#8217;t nearly as favorable. </p>
<p>I ended up trying VisualSVN for over a week and, frankly, I was disappointed. I deserve to get negative feedback about publishing the following comments without any supporting documentation but I found VisualSVN to be sluggish and I felt it called up TortoiseSVN dialogues (rather than handling the file management itself) far too often.  Since so many folks like the product, I would be willing to bet I simply had a very bad first go (although I did spend over 1 week with the product.) All the same, it is uninstalled, the $49 are still burning a hole in my pocket and, well, there was no harm done. </p>
<p>I reverted to my old ways of not using source control effectively by avoiding Windows Explorer and TortoiseSVN and then, on my birthday, <a href="http://blogs.open.collab.net/svn/2008/07/ankhsvn-20-fina.html">AnkhSVN 2.0 Final was released</a>.  Though folks grumbled about the previous version, 2.0 is a near rewrite of the original and is now a full Source Control Provider Integration Package rather than a Visual Studio Add-In. With commercial backing from CollabNet and renewed open source enthusiasm, AnkhSVN 2.0 seemed to deserve a look so I looked&#8230;</p>
<h3>Quick Start</h3>
<p>1. Download AnkhSVN 2.0 <a href="http://ankhsvn.open.collab.net/servlets/ProjectProcess?pageID=3794">here</a> and run the install package.  If you want the latest and greatest, check out the <a href="http://ankhsvn.open.collab.net/daily/">daily builds</a>. </p>
<p> </p>
<p>2. The AnkhSVN <a href="http://ankhsvn.open.collab.net/servlets/ProjectProcess?pageID=3794">download page</a> says to install and then &#8220;Start Visual Studio and choose Tools -&gt; Settings -&gt; Source Control and make sure AnkhSVN is the active source control provider.&#8221;  Actually, you want Tools -&gt; Options rather than Settings, but you would probably figure that out on your own.  All the same, AnkhSVN was already configured/selected.</p>
<p> </p>
<p>3. Open an existing solution and noticed the new &#8220;Pending Changes&#8221; windows (also available via View -&gt; Show Pending Changes.)  Enter your repository URL into the empty &#8220;Working on:&#8221; field and, if you are as lucky as me (after all it was my birthday), everything should just work. </p>
<p><a href="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image6.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 0px 0px 10px; border-right-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image-thumb6.png" border="0" alt="image" width="503" height="133" align="left" /></a> </p>
<p> </p>
<p>4. This step is optional, but inevitable. I think. After about 20 minutes of playing with AnkhSVN you&#8217;re probably going to want to hook up your favorite diff tool.  If your favorite diff tool is <a href="http://winmerge.org/">WinMerge</a>, perform the following: Go to Tools -&gt; Options -&gt; Source Control -&gt; Subversion -&gt; External Diff Path = &#8220;C:\Program Files\WinMerge\WinMergeU.exe&#8221; &#8220;%base&#8221; &#8220;%mine&#8221;</p>
<p><a href="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image16.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 0px 0px 10px; border-right-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image-thumb9.png" border="0" alt="image" width="512" height="119" align="left" /></a> </p>
<p> </p>
<p>5. Once you are setup, you will see green check-marks alongside items in the Solution Explorer window.  And, as you start to make changes, you will see modified items added to the Pending Changes window.  This, my friends, is  a great feature!  Now you able to manage all of your changes in a single location rather than having to navigate through Windows Explorer or even the Solution Explorer. In another life, StarTeam provided me with similar functionality by allowing me to flatten out the folder hierarchy and then sorting by status, but the Pending Changes windows is 100 times better.  Sure, you can manage your commits via the Solution Explorer, but I&#8217;m not going to. The Pending Changes view is also great since the Solution Explorer doesn&#8217;t always <em>conveniently</em> show you the status of your files.  Take the screen shot below, for example.  Collapsing the EmailTemplates folder leaves me no insight into the state of the files within.  (For the record, I prefer VisualSVN&#8217;s Solution Explorer display.)</p>
<p> </p>
<p><a href="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image24.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 0px 0px 10px; border-right-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image-thumb8.png" border="0" alt="image" width="222" height="114" align="left" /></a></p>
<p><a href="http://johnnycoder.com/blog/wp-content/uploads/2008/07/image24.png"></a></p>
<p> </p>
<ol></ol>
<p> </p>
<p> </p>
<p> </p>
<p>Side note: If I could do it all over again, I really wish I followed the <a href="http://ankhsvn.open.collab.net/servlets/ProjectProcess?pageID=3794">posted download instructions</a>.  The suggested setup sounds straight forward enough, but trying to replicate the steps now, after already setting up, is seemingly impossible.  The instructions can be firmed up for clarity (see prior example referring to incorrect menu names), but I would have liked to give them a test run without jumping the gun and setting up my own way first.  If you do follow the published install instructions, let me know how it goes for you as I simply can not make heads or tails out of some of the steps.  One thing which seems to be missing &#8212; perhaps because of my impatience &#8212; is the persistence of the Subversion repositories added to the Repository Explorer.  It is really nice a version of the Repository Browser is built in, but it seems odd that repositories would need to be reestablished each time you open a solution.  Anyhow, it is probably my fault&#8230;</p>
<h3>Wrap Up</h3>
<p>Thus far, I am pleased with AnkhSVN.  For those of you who tried out earlier versions and were disappointed, try again.  Here&#8217;s a partial list of <a href="http://blogs.open.collab.net/svn/2008/07/ankhsvn-20-fina.html">what&#8217;s new in AnkhSVN 2.0</a>:</p>
<ul>
<li>For Microsoft Visual Studio 2005 and 2008.</li>
<li>Built on <a href="http://subversion.tigris.org/svn_1.5_releasenotes.html">Subversion 1.5.0</a> via <a href="http://sharpsvn.net/">SharpSvn</a>.</li>
<li>Pending changes window; subversion status and commands available in one place</li>
<li>Full support for Visual Studio 2005 and 2008; AnkhSVN is now a SCC package instead of just an addin</li>
<li>Better log viewer</li>
<li>Merge support</li>
<li>Property editor</li>
<li>AnkhSVN now supports most project types previously unsupported via the SCC api</li>
<li>All solution explorer actions (rename, copy&amp;paste, drag&amp;drop) keep subversion history now</li>
<li>Enhanced build process and setup</li>
<li>Automatic check for updates</li>
<li>And last but certainly not least <strong>end user </strong><a href="http://help.collab.net/"><strong>documentation</strong></a></li>
</ul>
<p>For more information about AnkhSVN, check out the <a href="http://ankhsvn.open.collab.net/">project&#8217;s home.</a></p>
<div id="scid:C16BAC14-9A3D-4c50-9394-FBFEF7A93539:05fdaaaf-bd0f-4fe6-b4b1-685308069ec0" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><a href="http://www.dotnetkicks.com/kick/?url=http://johnnycoder.com/blog/2008/07/22/getting-started-with-ankhsvn/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://johnnycoder.com/blog/2008/07/22/getting-started-with-ankhsvn/" border="0" alt="kick it on DotNetKicks.com" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/07/22/getting-started-with-ankhsvn/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ReSharper 4.0 Beta Makes Me Giggle</title>
		<link>http://johnnycoder.com/blog/2008/05/31/resharper-40-beta-makes-me-giggle/</link>
		<comments>http://johnnycoder.com/blog/2008/05/31/resharper-40-beta-makes-me-giggle/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 03:57:03 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/05/31/resharper-40-beta-makes-me-giggle/</guid>
		<description><![CDATA[Today I did what I should have done a lot while ago.  I watched the Jedi Coding Demo and installed JetBrain&#8217;s ReSharper &#8211; The Most Intelligent Add-In To Visual Studio about 30 seconds later. Finally&#8230; After launching VS2008, R# 4.0 Beta asked me a couple configuration-preference-type questions and then I completely stomped on my code until [...]]]></description>
			<content:encoded><![CDATA[<p>Today I did what I should have done a lot while ago.  I watched the <a href="http://www.jetbrains.com/resharper/documentation/">Jedi Coding Demo</a> and installed <a href="http://www.jetbrains.com/index.html">JetBrain&#8217;s</a> <a href="http://www.jetbrains.com/resharper/beta/beta.html">ReSharper &#8211; The Most Intelligent Add-In To Visual Studio</a> about 30 seconds later. Finally&#8230;</p>
<p>After launching VS2008, R# 4.0 Beta asked me a couple configuration-preference-type questions and then I completely stomped on my code until I could recognize it no more.  (Did I mention the full source tree was already <a href="http://johnnycoder.com/blog/wp-content/uploads/2008/05/image2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px; border-right-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2008/05/image-thumb2.png" border="0" alt="image" width="161" height="133" align="right" /></a>committed to source control?)  </p>
<p>I played with R# for well over an hour as anonymous delegates became lambda expressions<sup>1</sup>, object instantiation plus a number of property sets were rolled up into an object initializer<sup>2</sup>, if statements were inverted, switches became if-else statements, foreachs became to-fors, unused methods were removed, ternary operators were introduced, classes were moved into new files, namespaces were updated and on and on and on and back again.</p>
<p>I know I&#8217;ve only brushed the surfaces of what R# can do (<a href="http://www.jetbrains.com/resharper/features/index.html">3.1 feature list</a>, <a href="http://www.jetbrains.com/resharper/beta/beta_newfeatures.html">4.0 beta feature list</a>,) but knowing R# offers far more than a ridiculous number of refactoring shortcuts, I can&#8217;t hardly wait to start using it as I write new code. </p>
<p>One might consider this recommendation premature, but I encourage you to give ReSharper 4.0 Beta a whirl especially if you are new to Visual Studio 2008 and C# 3.* since R# essentially provides you with a painless primer.  (Can&#8217;t get your head around Lambdas?  ReSharper 4.0 will create such an expression for you.) It is a quick download and install and it takes only a few minutes to feel the power of the ALT+ENTER keystroke. </p>
<p>I hope the Add-in makes coding fun enough to make you giggle.</p>
<p> </p>
<p><span style="text-decoration: underline;"><em>Example Refactor 1</em></span></p>
<pre class="code"><span style="color: #0000ff;">private bool </span>IsAliased()
{
    <span style="color: #0000ff;">var </span>computer = computerList.Find(<span style="color: #0000ff;">delegate</span>(<span style="color: #2b91af;">Computer </span>c)
        { <span style="color: #0000ff;">return </span>c.ID == <span style="color: #2b91af;">RegistryHelper</span>.MachineID; });
    <span style="color: #0000ff;">return </span>(computer.Name != computer.Alias);
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><span style="font-size: x-small;">became</span></p>
<pre class="code"><span style="font-size: x-small;"><span style="color: #0000ff;">private bool </span>IsAliased()
{
    <span style="color: #0000ff;">var </span>computer = computerList.Find(c =&gt; c.ID == <span style="color: #2b91af;">RegistryHelper</span>.MachineID);
    <span style="color: #0000ff;">return </span>(computer.Name != computer.Alias);
}</span></pre>
<pre class="code"><em><span style="text-decoration: underline;">Example Refactor 2</span></em></pre>
<pre class="code"><span style="font-size: x-small;"><span style="color: #2b91af;">Notification </span>notification = <span style="color: #0000ff;">new </span><span style="color: #2b91af;">Notification</span>();
notification.Message = <span style="color: #a31515;">"Message 1"</span>;
notification.Title= <span style="color: #0000ff;">true</span>;</span></pre>
<p><span style="font-size: x-small;">became</span></p>
<pre class="code"><span style="color: #2b91af;">Notification </span>notification =
    <span style="color: #0000ff;">new </span><span style="color: #2b91af;">Notification </span>{ Message = <span style="color: #a31515;">"Message 1"</span>, Title = <span style="color: #0000ff;">true </span>};</pre>
<pre class="code"><span style="font-size: x-small;"> <font size="2">
 
</font></span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<div id="scid:C16BAC14-9A3D-4c50-9394-FBFEF7A93539:71b15bda-bb3d-46e0-bbcd-e61a06acd5e5" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><a href="http://www.dotnetkicks.com/kick/?url=http://johnnycoder.com/blog/2008/05/31/resharper-40-beta-makes-me-giggle/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://johnnycoder.com/blog/2008/05/31/resharper-40-beta-makes-me-giggle/" border="0" alt="kick it on DotNetKicks.com" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/05/31/resharper-40-beta-makes-me-giggle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SubSonic and SSMS Tools Pack Saved The Day</title>
		<link>http://johnnycoder.com/blog/2008/05/21/subsonic-and-ssms-tools-pack-saved-the-day/</link>
		<comments>http://johnnycoder.com/blog/2008/05/21/subsonic-and-ssms-tools-pack-saved-the-day/#comments</comments>
		<pubDate>Thu, 22 May 2008 03:32:59 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[SubSonic]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/05/21/subsonic-and-ssms-tools-pack-saved-the-day/</guid>
		<description><![CDATA[Today I woke up feeling uneasy about the direction of my current project.  For all intents and purposes, I am taking an existing system which was pieced together by a couple of past developers and extending it. I&#8217;m not saying the code I  inherited was a disaster but I am not going to publicly praise [...]]]></description>
			<content:encoded><![CDATA[<p>Today I woke up feeling uneasy about the direction of my current project.  For all intents and purposes, I am taking an existing system which was pieced together by a couple of past developers and extending it. I&#8217;m not saying the code I  inherited was a disaster but I am not going to publicly praise the design and implementation either.  <span style="text-decoration: underline;">The big problem is the existing system works.</span></p>
<p>I know that last statement sounds funny but put yourself in the position of my customer.  They currently have a working product which they wish to extend and private label.  With the core functionality already in place (read: tested with dozens if not hundreds of users,) how much time could/should it take to implement my updates?</p>
<p>While ramping up, I jotted down a number of areas where the application could be improved but I tabled every task which wouldn&#8217;t get me closer to completing my assignment.  In other words, if the change was transparent to my client, I didn&#8217;t muck with it &#8212; for the most part.</p>
<p>Which brings me to this morning, approximately two weeks into my development, and my uneasy feeling.  The bottom-line is I made the wrong call.  I should have made the product my own, so to speak, and applied a handful of design changes right off the bat.  If I were completing a simple bug fix, this approach would have been wrong, but since I am scheduled for appropriately 2 months of dev, I can &#8220;afford&#8221; to make the needed improvements.  It makes sense as it would ultimately save me effort and frustration while costing my customer no extra time or money.  </p>
<p>Today I talked myself into thinking that refactoring/redesigning would be best for everyone and I promptly redesigned the database (all of it) and swapped out the data access layer (all of it) with the help of <a href="http://www.ssmstoolspack.com/">SSMS Tool Packs</a> and <a href="http://subsonicproject.com/">SubSonic</a>, respectively.  Of course, I had help. Lots of it. Hours and hours of other people&#8217;s time&#8230;  I&#8217;ve written about <a href="http://johnnycoder.com/blog/2006/11/05/subsonic-another-look-at-code-generation/">Getting Started with SubSonic</a> and though I &#8220;admire&#8221; it, I hadn&#8217;t put it to good use until this morning.  SubSonic (after a quick review which consisted of watching <a href="http://www.wekeroad.com/ss_setup2.html">this webcast</a>) generated my DAL. SSMS Tool Packs was a lucky discovery as it auto-generated my CRUD routines.  The product offers <a href="http://www.ssmstoolspack.com/Features.aspx">much more</a> than this and integrates with each version of SQL Server Management Studio, but I only needed stored proc creation today.  All told the entire change took less than 5 hours.  It would have taken far less time if I didn&#8217;t have a complete brain fart and chase my tail around an incorrectly established SQLEXPRESS connection string.  Pretty amazing if you ask me!</p>
<p>To sum things up, thanks to Rob Conery and crew for SubSonic and thanks to Mladen Prajdic for your exceptional contributions.  They really helped me get back on track with minimal investment today.  </p>
<div id="scid:C16BAC14-9A3D-4c50-9394-FBFEF7A93539:00871490-fa37-4f63-b36f-3f9b1ff8199d" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><a href="http://www.dotnetkicks.com/kick/?url=http://johnnycoder.com/blog/2008/05/21/subsonic-and-ssms-tools-pack-saved-the-day/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://johnnycoder.com/blog/2008/05/21/subsonic-and-ssms-tools-pack-saved-the-day/" border="0" alt="kick it on DotNetKicks.com" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/05/21/subsonic-and-ssms-tools-pack-saved-the-day/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Resource Refactoring Tool</title>
		<link>http://johnnycoder.com/blog/2008/05/19/resource-ractoring-tool/</link>
		<comments>http://johnnycoder.com/blog/2008/05/19/resource-ractoring-tool/#comments</comments>
		<pubDate>Tue, 20 May 2008 00:47:22 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/05/19/resource-ractoring-tool/</guid>
		<description><![CDATA[Resource Refactoring Tool provides developers with a super easy way to extract hard coded strings from your code into resource files. I won&#8217;t say this tool has saved me days of time but has certainly saved me hours (especially on those hand-me-down projects which tend to require a good amount of clean up. ) You&#8217;ll [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codeplex.com/ResourceRefactoring">Resource Refactoring Tool</a> provides developers with a super easy way to extract hard coded strings from your code into resource files.</p>
<p><a href="http://johnnycoder.com/blog/wp-content/uploads/2008/05/image.png"><img style="border-width: 0px" src="http://johnnycoder.com/blog/wp-content/uploads/2008/05/image-thumb.png" border="0" alt="image" width="244" height="137" align="right" /></a>I won&#8217;t say this tool has saved me days of time but has certainly saved me hours (especially on those hand-me-down projects which tend to require a good amount of clean up. )</p>
<p>You&#8217;ll find the tool works in VS2005/VS2008 as it leverages the existing Refactor menu. Simply <a href="http://www.codeplex.com/ResourceRefactoring">install the latest version</a> found on the <a href="http://www.codeplex.com/">CodePlex</a> project site and then Select Text &gt; Right Click &gt; Refactor &gt; Extract to Resource until you find yourself giggling to yourself.</p>
<p>I&#8217;m not a big utility guy, but this tool gets installed along with VS on work stations. Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/05/19/resource-ractoring-tool/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DotNetKicks &quot;Kick It&quot; Counter Plugin for WLW and WordPress</title>
		<link>http://johnnycoder.com/blog/2008/02/10/dotnetkicks-kick-it-counter-plugin-for-wlw-and-wordpress/</link>
		<comments>http://johnnycoder.com/blog/2008/02/10/dotnetkicks-kick-it-counter-plugin-for-wlw-and-wordpress/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 03:01:07 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2008/02/10/dotnetkicks-kick-it-counter-plugin-for-wlw-and-wordpress/</guid>
		<description><![CDATA[This announcement may be yesterday&#8217;s news for some, but I just discovered Aaron Lerch&#8217;s &#8220;Kick It&#8221; plugin today and it works like a charm.  If you are using WordPress AND Windows Live Writer is your go-to editor AND your posts tend to be .NET related, give Aaron Lerch&#8217;s DotNetKicks &#8220;Kick It&#8221; Counter Plugin for Windows [...]]]></description>
			<content:encoded><![CDATA[<p>This announcement may be yesterday&#8217;s news for some, but I just discovered Aaron Lerch&#8217;s &#8220;Kick It&#8221; plugin today and it works like a charm.  If you are using WordPress AND Windows Live Writer is your go-to editor AND your posts tend to be .NET related, give <a href="http://www.aaronlerch.com/blog/2007/10/21/dotnetkicks-kick-it-counter-plugin-for-windows-live-writer/" target="_blank">Aaron Lerch&#8217;s DotNetKicks &#8220;Kick It&#8221; Counter Plugin for Windows Live Writer</a> a try.  Again, it works like a charm.  Well, if I am being completely honest, I haven&#8217;t tested it yet as I&#8217;m not prepared to submit my own post to DNK. So, who&#8217;s going to be the first to test the plugin for me?</p>
<div id="scid:C16BAC14-9A3D-4c50-9394-FBFEF7A93539:fe265aff-924b-4419-a433-7a4a1f224076" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><a href="http://www.dotnetkicks.com/kick/?url=http://johnnycoder.com/blog/2008/02/10/dotnetkicks-kick-it-counter-plugin-for-wlw-and-wordpress/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://johnnycoder.com/blog/2008/02/10/dotnetkicks-kick-it-counter-plugin-for-wlw-and-wordpress/" border="0" alt="kick it on DotNetKicks.com" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2008/02/10/dotnetkicks-kick-it-counter-plugin-for-wlw-and-wordpress/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>PrimoPDF &#8211; Free PDF Converter</title>
		<link>http://johnnycoder.com/blog/2007/11/18/primopdf-free-pdf-converter/</link>
		<comments>http://johnnycoder.com/blog/2007/11/18/primopdf-free-pdf-converter/#comments</comments>
		<pubDate>Sun, 18 Nov 2007 17:49:24 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2007/11/18/primopdf-free-pdf-converter/</guid>
		<description><![CDATA[This may be yesterday&#8217;s news, but if you are looking for a reliable (and free) PDF converter, may I suggest PrimoPDF?  I have been using it for months to convert my Word documents to PDF and it is great.  Here&#8217;s a bit more: PrimoPDF is a free tool for high-quality PDF creation, comprising a user-friendly [...]]]></description>
			<content:encoded><![CDATA[<p>This may be yesterday&#8217;s news, but if you are looking for a reliable (and free) PDF converter, may I suggest <a href="http://www.primopdf.com/primopdf_free_idx.aspx" target="_blank">PrimoPDF</a>?  I have been using it for months to convert my Word documents to PDF and it is great. </p>
<p>Here&#8217;s a bit more:</p>
<p><em>PrimoPDF is a free tool for high-quality PDF creation, comprising a user-friendly interface that enables printing to PDF from virtually any Windows application.</em></p>
<ul>
<li><em>Completely free, not just a trial version, and no user registration is required. </em></li>
<li><em>Ability to optimize PDF output for screen (online viewing), print (standard laser printers), ebook, and prepress. </em></li>
<li><em>Resultant PDF output conforms to the PDF 1.4 specification. </em></li>
<li><em>Secure PDF files with 40- or 128-bit encryption. </em></li>
<li><em>Add document information (e.g. title, author, subject, keywords) to converted PDF files. </em></li>
<li><em><strong>NEW:</strong> Full support for 64-bit machines. </em></li>
<li><em><strong>NEW:</strong> Double byte character support. </em></li>
<li><em><strong>NEW:</strong> Support of non-TrueType fonts. </em></li>
<li><em><strong>NEW:</strong> Enhanced support for Microsoft Windows 98, ME, XP and Vista as well as improved PDF viewing support on non-Windows platforms. </em></li>
<li><em><strong>NEW:</strong> Ability to merge/append PDF files upon conversion. </em></li>
</ul>
<p>That&#8217;s it.  I like the product and wanted to share&#8230;</p>
<p>(By the way, they also have a Developer API which I haven&#8217;t played around with yet.)</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2007/11/18/primopdf-free-pdf-converter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SVN Hosting</title>
		<link>http://johnnycoder.com/blog/2007/02/03/svn-hosting/</link>
		<comments>http://johnnycoder.com/blog/2007/02/03/svn-hosting/#comments</comments>
		<pubDate>Sat, 03 Feb 2007 14:59:48 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2007/02/03/svn-hosting/</guid>
		<description><![CDATA[Since being turned onto SVN no so long ago, I&#8217;ve been looking for hosting.  Per a recommendation spotted here, I picked up an account with SVN Repository about two weeks ago.  So far, it&#8217;s been a flawless experience. Here&#8217;s what I can tell you:  I purchased their small business plan which gives me 2GB of [...]]]></description>
			<content:encoded><![CDATA[<p>Since being turned onto SVN no so long ago, I&#8217;ve been looking for hosting.  Per a recommendation spotted <a href="http://blogs.ittoolbox.com/windows/alex/archives/svn-visual-studio-pluggin-hostingplayground-keeping-your-source-safe-14109">here</a>, I picked up an account with <a href="http://www.svnrepository.com/">SVN Repository</a> about two weeks ago. <a href="http://www.svnrepository.com/"><img style="margin: 20px" src="http://johnnycoder.com/blog/wp-content/uploads/2007/02/WindowsLiveWriter/SVNHosting_5B0B/svnlogo350_thumb%5B8%5D.gif" alt="" width="350" height="111" align="right" /></a> So far, it&#8217;s been a flawless experience.</p>
<p>Here&#8217;s what I can tell you:  I purchased their small business plan which gives me 2GB of space, unlimited repositories, unlimited Trac instances and unlimited developers for $6.95 per month.  It also includes nightly offsite backups, HTTP/HTTPS access to SVN repositories, 24/7 personal technical support (which I haven&#8217;t tested yet) and a 30 day money back guarantee.  Not bad, right?  Once one&#8217;s account is established (it does take 24 hours for initial account setup), everything is automated and and the control panels for both the repository and billing management are pretty easy to use. </p>
<p>If you are looking for SVN hosting, they are worth a look.  I understand the same group, <a href="http://www.hostingplayground.com">HostingPlayground</a>, provides Ruby hosting as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2007/02/03/svn-hosting/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Solve Problems With Rubber Ducking</title>
		<link>http://johnnycoder.com/blog/2006/10/29/solve-problems-with-rubber-ducking/</link>
		<comments>http://johnnycoder.com/blog/2006/10/29/solve-problems-with-rubber-ducking/#comments</comments>
		<pubDate>Mon, 30 Oct 2006 04:59:40 +0000</pubDate>
		<dc:creator>Ben Griswold</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Recommended]]></category>

		<guid isPermaLink="false">http://johnnycoder.com/blog/2006/10/29/solve-problems-with-rubber-ducking/</guid>
		<description><![CDATA[What is &#8220;Rubber Ducking?&#8221; The phrase was made famous by Andrew Hunt and David Thomas in the book The Pragmatic Programmer: From Journeyman to Master.  A book, by the way,  which is required reading for all coders.  In fact, it is time I reread it.  You may already be familiar with this term, but in [...]]]></description>
			<content:encoded><![CDATA[<p>What is &#8220;Rubber Ducking?&#8221; The phrase was made famous by Andrew Hunt and David Thomas in the book <a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=johnnycoderco-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=020161622X"><em>The Pragmatic Programmer: From Journeyman to Master</em></a>.  A book, by the way,  which is required reading for all coders.  In fact, it is time I reread it.  You may already be familiar with this term, but in a nutshell, the idea is that simply explaining a problem aloud often helps one come up with a solution on their own. In the words of the Pragmatic Programmer,</p>
<blockquote><p>Place a rubber duck on your monitor and describe your problems to it. There&#8217;s something magical about stating your problems aloud that makes the solution more clear.</p></blockquote>
<p><a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=johnnycoderco-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=020161622X"><img style="margin: 5px 13px 0px 3px" src="http://johnnycoder.com/blog/wp-content/uploads/2006/10/WindowsLiveWriter/RubberDucking_14F1B/programmer_thumb%5B1%5D.jpg" alt="" width="152" height="193" align="left" /></a>This is an effective approach to problem solving.  I&#8217;ve actually had a duck work by my side for years now.  He&#8217;s a good, patient, loyal duck.  Of course, you don&#8217;t need a rubber duck.  Some people use email.   In the process of meticulously documenting their problem, which will ultimately be shipped to all the smartest people they know looking for help, the solution comes to them.  Some people call a colleague into their office, point at the screen and say, &#8220;I&#8217;d like to get a second pair of eyes on this.&#8221;  The request for review comes along with a detailed overview of the problem which, in turn, begets an answer to one&#8217;s own question.  As they say in the book, it&#8217;s magical.I stumbled upon an <a href="http://www.ddj.com/dept/architect/184415833" target="_blank">Interview with Hunt and Thomas</a> which tells a bit more about rubber ducking.  It&#8217;s a quick read and it&#8217;s worth a look.</p>
<blockquote><p>Reading your source code aloud, or explaining it to someone else, has concrete and documented value, whether in a formal setting of code inspections, peer reviews or just chatting with your cube neighbor, said Thomas. &#8220;Have you ever done this? You stare at a piece of code for an hour, debug and debug, and finally, in desperation, you pull your friend in from his cubicle. You start to explain the code and how it works, but then â€¦&#8221; (smacking his forehead) &#8220;Oh, <em>that&#8217;s</em> it!&#8221;The audience laughed again, and most of them were nodding ruefully. In fact, Thomas said, you can even resort to &#8220;rubber-ducking.&#8221; &#8220;I don&#8217;t know why it works, but it works. You put the rubber duck on top of your monitor. Then, when you&#8217;re stuck on something, you start explaining what the code does aloud to the duck.&#8221; And before you&#8217;ve finished the explanation, the solution comes to you. You smack your forehead, and politely thank the duck, he said to general laughter.</p></blockquote>
<p>Why do I bring this up?  I am currently on a 6-week leave of absence from work spending time with my wife and new born son.  Prior to leaving the office a few weeks back, I dropped my duck off on a colleague&#8217;s desk without any advanced warning that a duck-sitter was needed.  I know the sentiment was appreciated, but I&#8217;m not positive the significance was understood.  As I mentioned earlier, you don&#8217;t need a rubber duck.  All you need is to willingly share your problems aloud.  I was this person&#8217;s rubber duck.  They always came up with the answers on their own, but not before giving me the opportunity to listen.  </p>
<p>I hope my duck is getting an earful right now&#8230;</p>
<p><img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" src="http://www.assoc-amazon.com/e/ir?t=johnnycoderco-20&amp;l=as2&amp;o=1&amp;a=020161622X" border="0" alt="" width="1" height="1" /></p>
<p>* Update: Previously, I incorrectly credited Hunt and Thomas with coming up with the phrase &#8220;Rubber Ducking.&#8221;  In fact, it was Greg Pugh who coined the term.  Thanks to Ed Davies and his considerate comment for addressing my oversight.</p>
]]></content:encoded>
			<wfw:commentRss>http://johnnycoder.com/blog/2006/10/29/solve-problems-with-rubber-ducking/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

