<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!--Generated by Squarespace V5 Site Server v5.13.156 (http://www.squarespace.com) on Thu, 16 May 2013 23:20:51 GMT--><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>ISerializable</title><link>http://osherove.com/blog/</link><description /><lastBuildDate>Thu, 16 May 2013 23:20:44 +0000</lastBuildDate><copyright>Roy Osherove</copyright><language>en-US</language><generator>Squarespace V5 Site Server v5.13.156 (http://www.squarespace.com)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Iserializable" /><feedburner:info uri="iserializable" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><link>http://www.ISerializable.com</link><url>http://files.osherove.com/Roy_Pic_BW_Small.jpg</url><title>Roy Osherove</title></image><feedburner:emailServiceId>Iserializable</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><item><title>Videos: Beautiful Builds, and a Second Look at Unit Testing</title><category>video</category><dc:creator>Roy Osherove</dc:creator><pubDate>Thu, 16 May 2013 23:16:59 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/4Jp5Qw7rgSA/videos-beautiful-builds-and-a-second-look-at-unit-testing.html</link><guid isPermaLink="false">397930:8455365:33723748</guid><description>&lt;p&gt;While at the msswit conference in the Ukraine, I got to speak on two subjects with the following videos:&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.techdays.ru/videos/6834.html"&gt;Beautiful Builds: &amp;nbsp;Maintainable, Coherent Build Processes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.techdays.ru/videos/6832.html"&gt;A Second Look at Unit Testing&lt;/a&gt;: what I learned since the first edtion of &lt;a href="http://ArtOfUnitTesting.com"&gt;Art Of Unit Testing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=4Jp5Qw7rgSA:c9SP6yvALZU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=4Jp5Qw7rgSA:c9SP6yvALZU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=4Jp5Qw7rgSA:c9SP6yvALZU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=4Jp5Qw7rgSA:c9SP6yvALZU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/4Jp5Qw7rgSA" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33723748.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/5/17/videos-beautiful-builds-and-a-second-look-at-unit-testing.html</feedburner:origLink></item><item><title>Beautiful Builds: Release Compilation Step</title><category>Build Bullet</category><dc:creator>Roy Osherove</dc:creator><pubDate>Mon, 22 Apr 2013 22:55:48 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/YdpU-AjoszI/beautiful-builds-release-compilation-step.html</link><guid isPermaLink="false">397930:8455365:33422894</guid><description>&lt;p&gt;Imagine you could only compile once a week. Once every two weeks. Once a month. Scary?&lt;/p&gt;
&lt;p&gt;All that code that you write blindly, not knowing whether it even compiles.  All those hidden errors lurking, accumulating in the dark.  Then, on that special day of compilation, you get to finally find out if you made it. And of course, you most likely did not. Unfortunately, that special compilation day is followed by an even worse day. Demo day.&lt;/p&gt;
&lt;p&gt;You are supposed to sit down with your customer, or product owner, and show them all the progress you have made to your application.  Most times, compilation day goes sour, and you are stuck fixing last minute, last hour, and last night-Compilation issues only to find out that now, the application isn&amp;#8217;t working. So there goes demo day.&lt;/p&gt;
&lt;p&gt;You secretly start wondering if there was a way to &amp;#8216;break the rules&amp;#8217;. A way that you could secretly compile your code &amp;#8212; maybe on a daily basis?&amp;#8212; and see if you left something out. Hell, why not do it every time you check in your code? or even save it? What if you could _continuously_ compile your code? Your life would be so much easier. Not to mention your customer&amp;#8217;s life. You could find those compilation errors quickly, and thus fix them quickly while they are still fresh in memory. You could start focusing on that demo now that the code compiles, and see if the app is actually working!&lt;/p&gt;
&lt;p&gt;Aren&amp;#8217;t we lucky that we all already live with that kind of continuous compilation? At least in static languages, we can see if our code &amp;#8216;checks out&amp;#8217; by the compiler almost instantly. We can write a single line, or even a single code keyword, and see if it works when the reality of the compiler hits. If we are working in a dynamically typed language, like Ruby or Python, we write tests, and we run those tests continuously , so that we get feedback that the code works. Well, some of us do, anyway. A lot of us just _say_ we do it, but deep down we know it is lip service.&lt;/p&gt;
&lt;p&gt;Sometimes we get a &amp;#8216;fluke&amp;#8217; - we write a function and it fully compiles and runs with no problems with no compilation and debugging errors. That kind of magic doesn&amp;#8217;t happen very often though.&lt;/p&gt;
&lt;p&gt;Things aren&amp;#8217;t perfect. Now that we live in this magical world where compilation is continuous, we start to realize we still have problems with our customer&amp;#8217;s demos.&lt;/p&gt;
&lt;p&gt;The demos aren&amp;#8217;t working. Well, they are working, but not really. they break and they work only partially. And when we try to fix the functionality problems, we break other functionality. We need testing, or, more precisely, _automated_ testing to tell us if our code functions right.&lt;/p&gt;
&lt;p&gt;Why does it need to be automated though? Because manual testing takes so much time. It&amp;#8217;s really a good waste of money to repeat the same regression  tests by a human. We should be using humans for tasks with creativity built in, like exploration testing, but we need &amp;#8216;automated checks&amp;#8217; for regression testing, to keep telling us we didn&amp;#8217;t break anything, continuously.&lt;/p&gt;
&lt;p&gt;So we write some tests, and we run them locally every time we are about to check in the code. things feel better for a while, but then we realize the customer demos are still not really working. &amp;#8220;Why would the customer tests not be working _now_?&amp;#8221; you ask yourself.  Turns out, the demos are supposed to be shown on the customer&amp;#8217;s machine. The customer&amp;#8217;s machine is very different from a developer&amp;#8217;s machine. It has weird firewall requirements, it needs active directory permissions to run your application, and the database is shared on a different machine.  For you, demo day is also, it turns out, deployment day.&lt;/p&gt;
&lt;p&gt;Because you deploy before you demo (usually the day before if you are lucky), it means you have one day every week you deploy. Or maybe demo is once every two or three weeks, so you deploy just once every two or three weeks. If you&amp;#8217;re lucky.&lt;/p&gt;
&lt;p&gt;Deployment once a week? Now you spend your week compiling and testing code, but you&amp;#8217;re still as blind as a bat. You do not know whether all this code will actually work within the constraints of the customer&amp;#8217;s machine. Sure, it works on _your machine_, but we all know that doesn&amp;#8217;t mean much.You spend all this time writing and polishing your beautiful code, all the while you have no idea whether it will _fit in_ with the hard reality of living on a customer&amp;#8217;s machine.&lt;/p&gt;
&lt;p&gt;Demo day comes, and you deploy, and your perfectly working code is shamingly crashing, lagging, stalling and  basically acting like an angry child in the middle of a supermarket: Badly. Your demo sucks. And now you can&amp;#8217;t get any feedback from the customer. Instead, you have wasted your customer&amp;#8217;s time, and some of their hard earned trust.&lt;/p&gt;
&lt;p&gt;This keeps happening.&lt;/p&gt;
&lt;p&gt;Some weeks you get things right, some weeks the new pieces of code just don&amp;#8217;t fit the configuration. You have to wait a week between demos to find out if the changes you made to your code or configuration files actually work, because, well, &lt;em&gt;you deploy once a week&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;You secretly start wondering what happened if you broke the rules and got your own little machine that  looks and acts just like a customer&amp;#8217;s machine. If you had that kind of machine locally, you could try and deploy to it on a daily basis, and find out if your code actually works after deployment. If it didn&amp;#8217;t you could fix it way before demo day. And then you can use the demos to actually get feedback  on the functionality of your application.  On second thought, what if you went all out and _automated_ the deployment to the fake customer machine? then you could test your deployment continuously! On every check in.&lt;/p&gt;
&lt;p&gt;Now that would be quite beautiful.&lt;/p&gt;
&lt;p&gt;Deployment testing is like a compilation step for your release cycle. It verifies that  your product, when deployed, can face the harsh realities of a production machine. It should happen continuously, so that you do not find out at the last minute that your code or configuration, is not able to handle the current reality.&lt;/p&gt;
&lt;p&gt;For deployment testing, you need to create a _staging_ environment. This environment mimics the  production environment as closely as possible, and it should not be contaminated with compilers, editors or development tools.&lt;/p&gt;
&lt;p&gt;How do you test your deployment with a staging environment? You run acceptance tests ,and hopefully also all the other automated tests you&amp;#8217;ve written, against the application deployed on staging. For example, you could run browser tests (using selenium or capybara  &amp;#8212; google those) against a web application installed on staging.  What happens if you _do_ need to debug something that only seems to happen in the staging environment? That&amp;#8217;s why you have a &amp;#8216;test&amp;#8217; environment. think of &amp;#8216;test&amp;#8217; as &amp;#8216;staging + debugging tools&amp;#8217;. It can be &amp;#8216;dirty&amp;#8217; in that you can use it to examine things more closely, but in an environment that can simulate  real world difficulties.&lt;/p&gt;
&lt;p&gt;The environment right before &amp;#8216;test&amp;#8217; is &amp;#8216;dev-test&amp;#8217;. that can either be a developer local machine, or a continuous integration build agent, that usually just compiles and runs automated tests.&lt;/p&gt;
&lt;p&gt;To me, a beautiful build, is one that encompasses all the levels of confidence we just discussed: Compilation, automated testing, automated deployment, and deployment testing.&lt;/p&gt;
&lt;p&gt;If possible,I take the next logical step - I also deploy to a production machine in an automated manner - the same code that has passed all the other stages.&lt;/p&gt;
&lt;p&gt;I, and many others, call this chain &amp;#8216;Continuous Delivery&amp;#8217;. (will be part of my builds book)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=YdpU-AjoszI:oRNHL20-98k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=YdpU-AjoszI:oRNHL20-98k:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=YdpU-AjoszI:oRNHL20-98k:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=YdpU-AjoszI:oRNHL20-98k:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/YdpU-AjoszI" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33422894.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/4/23/beautiful-builds-release-compilation-step.html</feedburner:origLink></item><item><title>April 18: Refactoring and Design Skills for Test Driven Development Workshop</title><category>Unit Testing</category><dc:creator>Roy Osherove</dc:creator><pubDate>Wed, 10 Apr 2013 22:10:19 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/7RfoB34jOWM/april-18-refactoring-and-design-skills-for-test-driven-devel.html</link><guid isPermaLink="false">397930:8455365:33279054</guid><description>&lt;p&gt;&lt;strong&gt;When?&lt;/strong&gt; April 18-19&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where?&lt;/strong&gt; Oslo&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How much?&lt;/strong&gt; 11,900 NOK&lt;/p&gt;
&lt;p&gt;How to register?&lt;a href="http://contact.osherove.com"&gt; Send me an email.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You have been trying to learn TDD, and it&amp;rsquo;s going pretty well, but your code looks horrible. Your design skills are lacking, and trying to let TDD drive the design without having design skills can lead to a very problematic, although testable, design of your code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Objectives&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I usually do not focus about design in my TDD courses. I believe that separating the learning about the core skills of Unit Testing, TDD, and Design should be separated so that the learner will not feel overwhelmed. This course is a complement to the Art of Unit Testing course I am teaching. This course is specifically dealing with design skills, and assumes that you already know how to write unit tests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Assumed&lt;/strong&gt;: You already have some experience writing unit tests.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Clean Code and SOLID Design Principles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Design for Testability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Refactoring patterns on hard to test legacy code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Writing tests against refactored code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;When it does and does not make sense to refactor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;We will also take a look at open source projects and try to see how we would refactor them.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Materials&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;All students get a PDF of all the slides in the course, in downloadable form.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agenda - Day 1:(09:00-16:00)&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;From TDD Kata to Design Skills&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Single Responsibility Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Single Responsibility Classes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;SOLID Principles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Drills throughout the day&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Agenda - Day 2:(09:00-16:00)&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Working with Legacy Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Refactoring for Inversion of Control&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Refactoring for Open Closed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Liskov Substitution Problems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Refactoring for Dependency Injection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;Drills throughout the day&lt;/li&gt;
&lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=7RfoB34jOWM:Wr_ZzjG7L-Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=7RfoB34jOWM:Wr_ZzjG7L-Y:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=7RfoB34jOWM:Wr_ZzjG7L-Y:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=7RfoB34jOWM:Wr_ZzjG7L-Y:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/7RfoB34jOWM" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33279054.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/4/11/april-18-refactoring-and-design-skills-for-test-driven-devel.html</feedburner:origLink></item><item><title>Two workshops on Beautiful Builds, Refactoring and Design Skills</title><category>Agile</category><dc:creator>Roy Osherove</dc:creator><pubDate>Sat, 06 Apr 2013 21:21:12 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/RqSHg5ZBrEk/two-workshops-on-beautiful-builds-and-refactoring-and-design.html</link><guid isPermaLink="false">397930:8455365:33262430</guid><description>&lt;p&gt;This April, I will be in Kyiv, &lt;a href="http://www.msswit.in.ua/en/"&gt;speaking at the Microsoft SWIT conference&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I will also be holding two separate workshops before the conference. Two very NEW workshops that I have only done once or twice before.&lt;/p&gt;  &lt;p&gt;The first one is the &lt;a href="http://www.msswit.in.ua/en/refactoringskills"&gt;Refactoring Skills for TDD workshop. April 23rd&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The second one is &lt;a href="http://www.msswit.in.ua/en/beautifulbuildsosherove/"&gt;Beautiful Builds in .NET . April 24th&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Find the agendas below and location, payment and other details at the links mentioned above.&lt;/p&gt;  &lt;p&gt;---------------------------------------------------------&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;&lt;a href="http://www.msswit.in.ua/en/refactoringskills"&gt;AGENDA: REFACTORING SKILLS FOR TDD IN .NET AND JAVA&lt;/a&gt;&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You have been trying to learn TDD, and it’s going pretty well, but your code looks horrible. Your design skills are lacking, and trying to let TDD drive the design without having design skills can lead to a very problematic, although testable, design of your code.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Objectives&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I usually do not focus about design in my TDD courses. I believe that separating the learning about the core skills of Unit Testing, TDD, and Design should be separated so that the learner will not feel overwhelmed. This course is a complement to the Art of Unit Testing course I am teaching. This course is specifically dealing with design skills, and assumes that you already know how to write unit tests.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Assumed&lt;/strong&gt;: You already have some experience writing unit tests.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;1.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Clean Code and SOLID Design Principles &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;2.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Design for Testability &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;3.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Refactoring patterns on hard to test legacy code &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;4.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Writing tests against refactored code &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;5.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;When it does and does not make sense to refactor &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;6.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;We will also take a look at open source projects and try to see how we would refactor them.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Materials&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;All students get a PDF of all the slides in the course, in downloadable form.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Agenda - Day 1:(09:00-16:00)&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;1.&amp;#160; &lt;/strong&gt;From TDD Kata to Design Skills &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;2.&amp;#160; &lt;/strong&gt;Single Responsibility Functions &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;3.&amp;#160; &lt;/strong&gt;Single Responsibility Classes &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;4.&amp;#160; &lt;/strong&gt;SOLID Principles &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;6.&amp;#160; &lt;/strong&gt;Working with Legacy Code &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;7.&amp;#160; &lt;/strong&gt;Refactoring for Inversion of Control &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;8.&amp;#160; &lt;/strong&gt;Refactoring for Open Closed &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;9.&amp;#160; &lt;/strong&gt;Liskov Substitution Problems &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;10.&amp;#160; &lt;/strong&gt;Refactoring for Dependency Injection &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;11.&amp;#160; &lt;/strong&gt;Drills throughout the day&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;-----------------------------------------------&lt;/h4&gt;  &lt;h4&gt;&amp;#160;&lt;/h4&gt;  &lt;h4&gt;&amp;#160;&lt;/h4&gt;  &lt;h4&gt;&amp;#160;&lt;/h4&gt;  &lt;h4&gt;&lt;a href="http://www.msswit.in.ua/en/beautifulbuildsosherove/"&gt;BEAUTIFUL BUILDS IN .NET WITH ROY OSHEROVE&lt;/a&gt;&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Being able to deliver fast, and get feedback fast, is a necessary requirement for any kind of agility in software development. But most of our builds, if we have any, look like pieces of gum and string hanging together, held together with some spit. Many projects are barely able to deliver something every month.. We will cover:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Objectives&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In this workshop we will learn common patterns and anti patterns for automating the build process, making builds fast, and continuously deliver, while still being able to maintain and understand our builds scripts and process, based on &lt;a href="http://beautifulbuilds.com/"&gt;http://beautifulbuilds.com&lt;/a&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Understand how automated build scripts and continuous integration servers work best together &lt;/li&gt;    &lt;li&gt;Know how to choose the right tools for build scripts and CI based on common and future build requirements, such as auto scaling, amount of projects, ease of maintenance etc. &lt;/li&gt;    &lt;li&gt;Learn common solutions and patterns for making builds faster, maintainable and coherent &lt;/li&gt;    &lt;li&gt;Understand database migrations and upgrades &lt;/li&gt;    &lt;li&gt;Understand advanced features of CI systems such as branch builds, gated commits, artifact sharing, build chaining, and when to use them &lt;/li&gt;    &lt;li&gt;Learn to create a holistic view of the build process, build environments, and the delivery process&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Materials&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;All students get a PDF of all the slides in the course, in downloadable form.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Agenda - Day 1:(09:00-16:00)&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Comparison of build script and CI tooling &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Build Script Patterns &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;CI Patterns &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Build Process Patterns &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Database Migrations and Upgrade Patterns &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/strong&gt;Build and Delivery Environments&lt;/li&gt; &lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=RqSHg5ZBrEk:QTEO4gezsXI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=RqSHg5ZBrEk:QTEO4gezsXI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=RqSHg5ZBrEk:QTEO4gezsXI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=RqSHg5ZBrEk:QTEO4gezsXI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/RqSHg5ZBrEk" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33262430.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/4/6/two-workshops-on-beautiful-builds-and-refactoring-and-design.html</feedburner:origLink></item><item><title>Acceptance Frameworks Vs. Specification APis</title><category>Unit Testing</category><dc:creator>Roy Osherove</dc:creator><pubDate>Fri, 29 Mar 2013 14:40:35 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/VxOsG56eVyg/acceptance-frameworks-vs-specification-apis.html</link><guid isPermaLink="false">397930:8455365:33170056</guid><description>&lt;p&gt;I see two forms of ‘BDD’ tools floating in the wild.&lt;/p&gt;  &lt;p&gt;The first form, let`s call it ‘deep BDD’ for now, requires you to go through a special langauge filter, before translating it with special adapters into executable specifications. Think Cucumber’s Gherkin forcing you to write adapters in code to execute your tests. Or SpecFlow’s &lt;em&gt;Gherkin&lt;/em&gt; with .NET step definitions.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The second form, let’s call it ‘shallow BDD’ are tools that only give you an API to develop with, but no natural language interface to discuss with end users, or for giving end users to edit on their own. Think RSpec, MSpec or NSpec – they are literally just libraries that allow you to write your “tests” in a more BDD like API.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Deep BDD tools give you more permission to get out of your comfort zone and talk to a customer, while shallow BDD tools give you more permission to stay in side your comfort zone – your code, and to just stay with yourself, coding into the night, not having to talk to anybody, still feeling you’re awesome because you are dong ‘BDD’.&lt;/p&gt;  &lt;p&gt;In that way, shallow bdd tools are just shiny wrappers on unit testing tools, while deep BDD tools make us work harder for communication.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=VxOsG56eVyg:6RKulQdszz8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=VxOsG56eVyg:6RKulQdszz8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=VxOsG56eVyg:6RKulQdszz8:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=VxOsG56eVyg:6RKulQdszz8:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/VxOsG56eVyg" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33170056.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/3/29/acceptance-frameworks-vs-specification-apis.html</feedburner:origLink></item><item><title>Which Specification Style Framework in .NET are you using?</title><dc:creator>Roy Osherove</dc:creator><pubDate>Fri, 29 Mar 2013 13:28:33 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/sUOmGOJeDG0/which-specification-style-framework-in-net-are-you-using.html</link><guid isPermaLink="false">397930:8455365:33169799</guid><description>&lt;p&gt;Which one are you using?&lt;/p&gt; &lt;script type="text/javascript" charset="utf-8" src="http://static.polldaddy.com/p/7000900.js"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;a href="http://polldaddy.com/poll/7000900/"&gt;Which Specification framework are you using in your projects?&lt;/a&gt;&lt;/noscript&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=sUOmGOJeDG0:KIhvag64GIU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=sUOmGOJeDG0:KIhvag64GIU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=sUOmGOJeDG0:KIhvag64GIU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=sUOmGOJeDG0:KIhvag64GIU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/sUOmGOJeDG0" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33169799.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/3/29/which-specification-style-framework-in-net-are-you-using.html</feedburner:origLink></item><item><title>Using System.Transactions.TransactionScope to Rollback Database changes under an integration test</title><category>Unit Testing</category><dc:creator>Roy Osherove</dc:creator><pubDate>Thu, 28 Mar 2013 22:51:05 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/GFVfhDWcH6c/using-systemtransactionstransactionscope-to-rollback-databas.html</link><guid isPermaLink="false">397930:8455365:33168544</guid><description>&lt;p&gt;It has been several years since I came up with the idea of database rolled back tests based on com+ transactions, which later became ServicedComponent tests, which later became TransactionScope aided tests.&lt;/p&gt;  &lt;p&gt;At some point, a DataRollback attribute was added to NUnIt, but them removed for some reason, that used this idea. I know it exists in MbUnit…. ANYWAY.&lt;/p&gt;  &lt;p&gt;I never blogged about the TransactionScope solution in this blog, &lt;/p&gt;  &lt;p&gt;so here is a very simple way to rollback database&amp;#160; changes that your code under test performs under an integration test, so that the DB is not dirtied up for the next test Just use System.Transactions.TransactionScope class:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;script src="https://gist.github.com/royosherove/5267460.js"&gt;&lt;/script&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=GFVfhDWcH6c:jCdGl9arXu0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=GFVfhDWcH6c:jCdGl9arXu0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=GFVfhDWcH6c:jCdGl9arXu0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=GFVfhDWcH6c:jCdGl9arXu0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/GFVfhDWcH6c" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33168544.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/3/28/using-systemtransactionstransactionscope-to-rollback-databas.html</feedburner:origLink></item><item><title>Poll&amp;gt; Which IoC frameworks Are you actively using in your current .NET projects?</title><dc:creator>Roy Osherove</dc:creator><pubDate>Mon, 25 Mar 2013 10:19:16 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/7qWK7rL90T8/pollgt-which-ioc-frameworks-are-you-actively-using-in-your-c.html</link><guid isPermaLink="false">397930:8455365:33123278</guid><description>&lt;p&gt;Which ones do you actively use? &lt;/p&gt; &lt;script type="text/javascript" charset="utf-8" src="http://static.polldaddy.com/p/6988922.js"&gt;&lt;/script&gt; &lt;noscript&gt;&lt;a href="http://polldaddy.com/poll/6988922/"&gt;Which IoC frameworks Are you actively using in your current .NET projects?&lt;/a&gt;&lt;/noscript&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=7qWK7rL90T8:VNTj1_ISaWQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=7qWK7rL90T8:VNTj1_ISaWQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=7qWK7rL90T8:VNTj1_ISaWQ:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=7qWK7rL90T8:VNTj1_ISaWQ:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/7qWK7rL90T8" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33123278.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/3/25/pollgt-which-ioc-frameworks-are-you-actively-using-in-your-c.html</feedburner:origLink></item><item><title>TDD Master Class Online: Get Each Day Separately for $59</title><category>video</category><dc:creator>Roy Osherove</dc:creator><pubDate>Fri, 22 Mar 2013 21:43:47 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/0ZLjwCvWiwE/tdd-master-class-online-get-each-day-separately-for-59.html</link><guid isPermaLink="false">397930:8455365:33096871</guid><description>&lt;p&gt;Due to public demand, and as part of the big experiment I am doing, you can now have TWO ways to get my TDD master class online:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You can &lt;a href="https://www.udemy.com/tdd-in-net-with-roy-osherove/"&gt;get the whole master class thing in one big giant course&lt;/a&gt;, for $500 (use coupon &amp;lsquo;&lt;em&gt;maintainability&amp;rsquo;&lt;/em&gt; to get 30% off that until end of day today, Seattle time) &lt;/li&gt;
&lt;li&gt;You can download each of the days separately for $90 a pop:      &lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/part1-the-art-of-unit-testing-and-tdd-osherove"&gt;Day one: The First Test&lt;/a&gt;,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/part2-the-art-of-unit-testing-and-tdd-osherove"&gt;Day 2: Mocks and Stubs&lt;/a&gt;,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/part3-the-art-of-unit-testing-and-tdd-osherove"&gt;Day 3: Good Tests, Bad Tests&lt;/a&gt;,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/part-the-art-of-unit-testing-and-tdd-osherove"&gt;Day 4: Legacy Code&lt;/a&gt;,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/part5-the-art-of-unit-testing-and-tdd-osherove"&gt;Day 5: Unit Testing Patterns in the wild&lt;/a&gt;,&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There will NOT be any upgrade path if you have already purchased a specific day and want the full course, unless I see people truly explode about that.&lt;/p&gt;
&lt;p&gt;Let us see how people&amp;rsquo;s wallets vote! feedback is appreciated. If you cannot purchase, &lt;a href="http://twitter.com/royosherove"&gt;do let me know on twitter why&lt;/a&gt;!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=0ZLjwCvWiwE:g46spDvG5zU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=0ZLjwCvWiwE:g46spDvG5zU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=0ZLjwCvWiwE:g46spDvG5zU:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=0ZLjwCvWiwE:g46spDvG5zU:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/0ZLjwCvWiwE" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33096871.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/3/22/tdd-master-class-online-get-each-day-separately-for-59.html</feedburner:origLink></item><item><title>Osherove online TDD master class at 40% off for a few hours.</title><category>course</category><dc:creator>Roy Osherove</dc:creator><pubDate>Thu, 21 Mar 2013 13:20:28 +0000</pubDate><link>http://feedproxy.google.com/~r/Iserializable/~3/DLvp_h2BuuM/osherove-online-tdd-master-class-at-40-off-for-a-few-hours.html</link><guid isPermaLink="false">397930:8455365:33090280</guid><description>&lt;p&gt;FYI, for the next few hours, I am offering a 40% off &lt;a href="https://www.udemy.com/tdd-in-net-with-roy-osherove" target="_blank"&gt;my TDD online training course&lt;/a&gt; ($300 instead of $500). use coupon code ‘&lt;strong&gt;readability’&lt;/strong&gt; on the course page.&lt;/p&gt;  &lt;p&gt;This is an experiment I am doing, and will be doing others, but with higher prices.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=DLvp_h2BuuM:2icF6tNBwf0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=DLvp_h2BuuM:2icF6tNBwf0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Iserializable?a=DLvp_h2BuuM:2icF6tNBwf0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Iserializable?i=DLvp_h2BuuM:2icF6tNBwf0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Iserializable/~4/DLvp_h2BuuM" height="1" width="1"/&gt;</description><wfw:commentRss>http://osherove.com/blog/rss-comments-entry-33090280.xml</wfw:commentRss><feedburner:origLink>http://osherove.com/blog/2013/3/21/osherove-online-tdd-master-class-at-40-off-for-a-few-hours.html</feedburner:origLink></item></channel></rss>
