<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
  <channel>
    <title>
      James Shore
      
    </title>
    <link>http://jamesshore.com</link>
    <description>The Art of Agile</description>
    <language>en</language>
    <copyright>Copyright 2000-2006, James Shore</copyright>
    <generator>Blosxom v2.0</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    
<item>
  <title>Lessons Learned: Lint and Javascript</title>
  <link>http://jamesshore.com/Blog/Lessons-Learned-Lint-and-Javascript.html</link>
  <category>/Blog</category>
  <pubDate>Wed, 16 May 2012 00:00:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Lessons-Learned-Lint-and-Javascript.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;16 May 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/"&gt;James Shore/Blog&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;Yesterday, &lt;a href=&quot;http://jamesshore.com/Blog/Announcing-Test-Driven-Javascript-Screencast.html&quot;&gt;I announced&lt;/a&gt; my new screencast series, &lt;em&gt;Let's Code: Test-Driven Javascript&lt;/em&gt;. Today, I'm pleased to share an early screen test for the &quot;Lessons Learned&quot; channel. The goal for this channel is to provide a distilled look at a specific topic&amp;mdash;to provide maximum information in minimum time. The series also includes &quot;Live&quot; and &quot;Caffeinated&quot; channels: a live recording of a real-world web application as it's developed, similar to my popular &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play TDD&lt;/a&gt; series. For details, &lt;a href=&quot;http://www.kickstarter.com/projects/188988365/lets-code-test-driven-javascript&quot;&gt;check out the Kickstarter&lt;/a&gt;!&lt;/p&gt;


&lt;h3&gt;Lessons Learned: Lint &amp;amp; Javascript&lt;/h3&gt;

&lt;p&gt;In this video, we take a concise look at what Lint is, how to use it, and how to incorporate it into your automated build. The &lt;a href=&quot;https://github.com/jamesshore/Lessons-Learned-Lint-Javascript&quot;&gt;example source code&lt;/a&gt; is available on GitHub and the transcript is below.&lt;/p&gt;

&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/EWalrvFmEe0?version=3&amp;feature=player_detailpage&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/EWalrvFmEe0?version=3&amp;feature=player_detailpage&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;640&quot; height=&quot;360&quot;&gt;&lt;/object&gt;


&lt;h3&gt;Transcript&lt;/h3&gt;

&lt;p&gt;Hi, everyone. This is James Shore with my lessons learned about Lint and Javascript. We're going to look at what linting is, how to use it, and how to incorporate it into your automated build.&lt;/p&gt;


&lt;h3&gt;What is &quot;Lint&quot;? &lt;code&gt;(00:10)&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Lint tools read your source code and look for common mistakes. In Javascript, this means things like missing semicolons or unsafe comparison operators. Javascript is full of &quot;gotchas&quot; that silently introduce bugs. A linter is invaluable for keeping your code defect-free.&lt;/p&gt;

&lt;p&gt;The leading linter for Javascript is &lt;a href=&quot;http://www.jslint.com&quot;&gt;JSLint&lt;/a&gt;, by the famed Douglas Crockford. Now, Douglas Crockford can be a bit... curmudgeonly, and some people don't agree with some of the choices he's made with JSLint. They've forked JSLint to create &lt;a href=&quot;http://jshint.com/&quot;&gt;JSHint&lt;/a&gt;. It provides more control over what's flagged as an error and what's not.&lt;/p&gt;

&lt;p&gt;I chose to use JSHint for &lt;a href=&quot;http://letscodejavascript.com&quot;&gt;Let's Code: Test-Driven Javascript&lt;/a&gt;, but most of what I'm about to describe is equally applicable to JSLint.&lt;/p&gt;


&lt;h3&gt;Running JSHint Manually &lt;code&gt;(00:50)&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;The easiest way to run JSHint is to go to the website, paste in your code, and hit the &quot;Lint&quot; button. That's fine for one-off scripts, but not really suitable for professional web development.&lt;/p&gt;

&lt;p&gt;Another option is to use the Node package manager to install a copy of JSHint. (You'll need to install Node first, if you haven't already.) If you use the &lt;code&gt;-g&lt;/code&gt; option when you install JSHint, it will put a convenient command-line interface on your path.&lt;/p&gt;


&lt;h3&gt;Automating JSHint &lt;code&gt;(01:13)&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Personally, I don't think the manual approach is a good idea. Javascript has so many gotchas that you really need to run Lint all the time, as part of your automated build. And if it's going to be in your automated build, you should install JSHint &lt;em&gt;locally&lt;/em&gt;, not globally. That will ensure your build still works when other people check out your repository.&lt;/p&gt;

&lt;p&gt;Once JSHint is installed, you can &lt;code&gt;require()&lt;/code&gt; it in your build script. JSHint and JSLint both provide the same interface, and it's not a particularly friendly one. There's only one function exposed by the module: &lt;code&gt;JSHINT&lt;/code&gt;. It takes the source code to check, a set of options, and an optional set of globals, and returns true or false depending on whether the lint succeeded or failed. It also populates an &lt;code&gt;errors&lt;/code&gt; array on the &lt;code&gt;JSHINT&lt;/code&gt; function with specific error messages.&lt;/p&gt;


&lt;h4&gt;Processing Files &lt;code&gt;(02:00)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;The first parameter is the source code. You'll need to load your files from the file system. To load a file, use the &lt;code&gt;readFileSync()&lt;/code&gt; function in Node's &lt;code&gt;fs&lt;/code&gt; module. &lt;code&gt;readFileSync()&lt;/code&gt; reads an entire file into memory. It takes a file encoding; if you're not sure what to use, &lt;code&gt;utf8&lt;/code&gt; is usually a safe bet. Once you have the file, you can pass it to JSHint.&lt;/p&gt;

&lt;p&gt;Your automated build will likely have a list of files to check, so you'll need a function that calls Lint for each file and collates the overall &quot;pass / fail&quot; status as it goes.&lt;/p&gt;


&lt;h4&gt;Options &lt;code&gt;(02:28)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;The second parameter is an object containing your JSHint options. These options control what Lint complains about and what it allows to pass. They're described in detail on the JSHint web site, so I won't repeat that here.&lt;/p&gt;


&lt;h4&gt;Globals &lt;code&gt;(02:41)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;The third parameter is optional. It's an object containing your global variables. If you set the &lt;code&gt;undef&lt;/code&gt; option to &lt;code&gt;true&lt;/code&gt;, then JSLint will complain if you use any variables that haven't been explicitly declared. This third parameter allows you to make exceptions to the rule. For each global variable name you include, you set it to &lt;code&gt;true&lt;/code&gt; if your code is allowed to change the variable, or &lt;code&gt;false&lt;/code&gt; if it isn't.&lt;/p&gt;


&lt;h4&gt;Per-File Settings &lt;code&gt;(03:02)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;You can also define options and globals by using a block comment at the top of a Javascript file or at the start of a function. This is useful for changing your global JSHint options on a case-by-case basis.&lt;/p&gt;


&lt;h4&gt;Interpreting JSHint's Results &lt;code&gt;(03:13)&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;When you run JSHint, it returns true or false according to whether or not your code passed. That's enough to cause your build to fail when you need it to, but you'll also want to print out the details of what Lint found.&lt;/p&gt;

&lt;p&gt;To do that, you'll want to examine JSHint's &lt;code&gt;errors&lt;/code&gt; array. Some elements of the array are blank--you can just skip those. The rest are objects with three properties: &lt;code&gt;line&lt;/code&gt;, which is the line number; &lt;code&gt;evidence&lt;/code&gt;, which is the source code containing the problem; and &lt;code&gt;reason&lt;/code&gt;, which is Lint's error message. Sometimes &lt;code&gt;line&lt;/code&gt; and &lt;code&gt;evidence&lt;/code&gt; are left out, so you'll want to check for that.&lt;/p&gt;


&lt;h3&gt;Conclusion &lt;code&gt;(03:46)&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;So that's what I've learned so far about Lint and Javascript. To summarize, Lint is a tool for checking for problems in your source code. Given Javascript's &quot;gotchas,&quot; I think it's an indispensable part of your automated build. You can use JSHint to include Lint in your build. Check out &lt;a href=&quot;https://github.com/jamesshore/Lessons-Learned-Lint-Javascript&quot;&gt;the source code&lt;/a&gt; for this episode for an example of how to do it. The link is available on your screen.&lt;/p&gt;

&lt;p&gt;Thanks for watching, and I'll see you next time!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Back this project on Kickstarter!&lt;/strong&gt; &lt;a href=&quot;http://www.kickstarter.com/projects/188988365/lets-code-test-driven-javascript&quot;&gt;http://lets&lt;em&gt;code&lt;/em&gt;javascript.com&lt;/a&gt;&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Lessons-Learned-Lint-and-Javascript.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Announcing: Test-Driven Javascript Screencast</title>
  <link>http://jamesshore.com/Blog/Announcing-Test-Driven-Javascript-Screencast.html</link>
  <category>/Blog</category>
  <pubDate>Tue, 15 May 2012 00:02:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Announcing-Test-Driven-Javascript-Screencast.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;15 May 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/"&gt;James Shore/Blog&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;It's alive! &lt;a href=&quot;http://www.kickstarter.com/projects/188988365/lets-code-test-driven-javascript&quot;&gt;Let's Code: Test-Driven Javascript&lt;/a&gt; has been launched on Kickstarter.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Let's Code: Test-Driven Javascript&lt;/em&gt; is my new screencast series focusing on Javascript, TDD, Node.js, and professional web development. It's a response to the success of my &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play TDD&lt;/a&gt; series, which has grown to be truly massive--189 videos and 45 hours, at the time of this writing.&lt;/p&gt;

&lt;p&gt;Where the original series focuses on Java and Swing, the new series focuses on Javascript and web technologies. Many people I meet don't bother testing the front-end logic in their web applications. But as web apps get more and more sophisticated, TDD and other rigorous development practices become more important. That's why I want to produce &lt;em&gt;Let's Code: Test-Driven Javascript&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I'm launching the series through Kickstarter so I can give it the time and attention it deserves. My intention is to create an invaluable resource for anyone doing professional Javascript development. &lt;a href=&quot;http://www.kickstarter.com/projects/188988365/lets-code-test-driven-javascript&quot;&gt;Back it on Kickstarter!&lt;/a&gt;&lt;/p&gt;

&lt;object style=&quot;height: 390px; width: 640px&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/2dLbUpXCebM?version=3&amp;feature=player_detailpage&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/2dLbUpXCebM?version=3&amp;feature=player_detailpage&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;640&quot; height=&quot;360&quot;&gt;&lt;/object&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Announcing-Test-Driven-Javascript-Screencast.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Let's Play TDD #189: A State-Based Approach</title>
  <link>http://jamesshore.com/Blog/Lets-Play/Episode-189.html</link>
  <category>/Blog/Lets-Play</category>
  <pubDate>Tue, 15 May 2012 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Lets-Play/Episode-189.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;15 May 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/Lets-Play/"&gt;James Shore/Blog/Lets-Play&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;The source code for this episode &lt;a href=&quot;https://github.com/jamesshore/lets_play_tdd/tree/e683ba895bd23758aeda76895b72fc7662a5fb4a&quot;&gt;is available here&lt;/a&gt;. Visit the &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play archive&lt;/a&gt; for more episodes!&lt;/p&gt;

&lt;object width=&quot;630&quot; height=&quot;380&quot;&gt;
&lt;param value=&quot;http://www.youtube.com/v/k9dGVE-Lw7g&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot; name=&quot;movie&quot; /&gt;&lt;param value=&quot;window&quot; name=&quot;wmode&quot; /&gt;
&lt;param value=&quot;true&quot; name=&quot;allowFullScreen&quot; /&gt;&lt;embed width=&quot;630&quot; height=&quot;380&quot; wmode=&quot;window&quot; allowfullscreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://www.youtube.com/v/k9dGVE-Lw7g&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;http://blog.jonesed.net/&quot;&gt;Danny Jones&lt;/a&gt; for figuring out the HD Youtube embed code.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Lets-Play/Episode-189.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Let's Play TDD #188: How Saving Works from End to End</title>
  <link>http://jamesshore.com/Blog/Lets-Play/Episode-188.html</link>
  <category>/Blog/Lets-Play</category>
  <pubDate>Thu, 10 May 2012 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Lets-Play/Episode-188.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;10 May 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/Lets-Play/"&gt;James Shore/Blog/Lets-Play&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;The source code for this episode &lt;a href=&quot;https://github.com/jamesshore/lets_play_tdd/tree/73669a9f6cc785794e933fcccd711c6cd43e0198&quot;&gt;is available here&lt;/a&gt;. Visit the &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play archive&lt;/a&gt; for more episodes!&lt;/p&gt;

&lt;object width=&quot;630&quot; height=&quot;380&quot;&gt;
&lt;param value=&quot;http://www.youtube.com/v/qlIHVXO31L8&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot; name=&quot;movie&quot; /&gt;&lt;param value=&quot;window&quot; name=&quot;wmode&quot; /&gt;
&lt;param value=&quot;true&quot; name=&quot;allowFullScreen&quot; /&gt;&lt;embed width=&quot;630&quot; height=&quot;380&quot; wmode=&quot;window&quot; allowfullscreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://www.youtube.com/v/qlIHVXO31L8&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;http://blog.jonesed.net/&quot;&gt;Danny Jones&lt;/a&gt; for figuring out the HD Youtube embed code.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Lets-Play/Episode-188.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Let's Play TDD #187: __Invocation</title>
  <link>http://jamesshore.com/Blog/Lets-Play/Episode-187.html</link>
  <category>/Blog/Lets-Play</category>
  <pubDate>Tue, 08 May 2012 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Lets-Play/Episode-187.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;08 May 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/Lets-Play/"&gt;James Shore/Blog/Lets-Play&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;The source code for this episode &lt;a href=&quot;https://github.com/jamesshore/lets_play_tdd/tree/7285139f76fce50c65311bec6502ad5fa103a867&quot;&gt;is available here&lt;/a&gt;. Visit the &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play archive&lt;/a&gt; for more episodes!&lt;/p&gt;

&lt;object width=&quot;630&quot; height=&quot;380&quot;&gt;
&lt;param value=&quot;http://www.youtube.com/v/lP4ynjQPTns&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot; name=&quot;movie&quot; /&gt;&lt;param value=&quot;window&quot; name=&quot;wmode&quot; /&gt;
&lt;param value=&quot;true&quot; name=&quot;allowFullScreen&quot; /&gt;&lt;embed width=&quot;630&quot; height=&quot;380&quot; wmode=&quot;window&quot; allowfullscreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://www.youtube.com/v/lP4ynjQPTns&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;http://blog.jonesed.net/&quot;&gt;Danny Jones&lt;/a&gt; for figuring out the HD Youtube embed code.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Lets-Play/Episode-187.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Let's Play TDD #186: Finishing SaveAsDialog Extraction</title>
  <link>http://jamesshore.com/Blog/Lets-Play/Episode-186.html</link>
  <category>/Blog/Lets-Play</category>
  <pubDate>Thu, 03 May 2012 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Lets-Play/Episode-186.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;03 May 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/Lets-Play/"&gt;James Shore/Blog/Lets-Play&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;The source code for this episode &lt;a href=&quot;https://github.com/jamesshore/lets_play_tdd/tree/8896a592dafadac517621c1d8971a22beebd04a9&quot;&gt;is available here&lt;/a&gt;. Visit the &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play archive&lt;/a&gt; for more episodes!&lt;/p&gt;

&lt;object width=&quot;630&quot; height=&quot;380&quot;&gt;
&lt;param value=&quot;http://www.youtube.com/v/Ty5se7dHhkw&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot; name=&quot;movie&quot; /&gt;&lt;param value=&quot;window&quot; name=&quot;wmode&quot; /&gt;
&lt;param value=&quot;true&quot; name=&quot;allowFullScreen&quot; /&gt;&lt;embed width=&quot;630&quot; height=&quot;380&quot; wmode=&quot;window&quot; allowfullscreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://www.youtube.com/v/Ty5se7dHhkw&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;http://blog.jonesed.net/&quot;&gt;Danny Jones&lt;/a&gt; for figuring out the HD Youtube embed code.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Lets-Play/Episode-186.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Let's Play TDD #185: Disentangling our Test</title>
  <link>http://jamesshore.com/Blog/Lets-Play/Episode-185.html</link>
  <category>/Blog/Lets-Play</category>
  <pubDate>Tue, 01 May 2012 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Lets-Play/Episode-185.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;01 May 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/Lets-Play/"&gt;James Shore/Blog/Lets-Play&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;The source code for this episode &lt;a href=&quot;https://github.com/jamesshore/lets_play_tdd/tree/2821f976971c2101c0a59b8ed68e58cb4180e025&quot;&gt;is available here&lt;/a&gt;. Visit the &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play archive&lt;/a&gt; for more episodes!&lt;/p&gt;

&lt;object width=&quot;630&quot; height=&quot;380&quot;&gt;
&lt;param value=&quot;http://www.youtube.com/v/YYWx6DscrPU&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot; name=&quot;movie&quot; /&gt;&lt;param value=&quot;window&quot; name=&quot;wmode&quot; /&gt;
&lt;param value=&quot;true&quot; name=&quot;allowFullScreen&quot; /&gt;&lt;embed width=&quot;630&quot; height=&quot;380&quot; wmode=&quot;window&quot; allowfullscreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://www.youtube.com/v/YYWx6DscrPU&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;http://blog.jonesed.net/&quot;&gt;Danny Jones&lt;/a&gt; for figuring out the HD Youtube embed code.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Lets-Play/Episode-185.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Let's Play TDD #184: This is Why We Have Tests</title>
  <link>http://jamesshore.com/Blog/Lets-Play/Episode-184.html</link>
  <category>/Blog/Lets-Play</category>
  <pubDate>Tue, 24 Apr 2012 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Lets-Play/Episode-184.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;24 Apr 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/Lets-Play/"&gt;James Shore/Blog/Lets-Play&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;The source code for this episode &lt;a href=&quot;https://github.com/jamesshore/lets_play_tdd/tree/db5c4cf8017468b1866696561399083f5c10d6fc&quot;&gt;is available here&lt;/a&gt;. Visit the &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play archive&lt;/a&gt; for more episodes!&lt;/p&gt;

&lt;object width=&quot;630&quot; height=&quot;380&quot;&gt;
&lt;param value=&quot;http://www.youtube.com/v/vVqlKk1cq7Y&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot; name=&quot;movie&quot; /&gt;&lt;param value=&quot;window&quot; name=&quot;wmode&quot; /&gt;
&lt;param value=&quot;true&quot; name=&quot;allowFullScreen&quot; /&gt;&lt;embed width=&quot;630&quot; height=&quot;380&quot; wmode=&quot;window&quot; allowfullscreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://www.youtube.com/v/vVqlKk1cq7Y&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;http://blog.jonesed.net/&quot;&gt;Danny Jones&lt;/a&gt; for figuring out the HD Youtube embed code.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Lets-Play/Episode-184.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Let's Play TDD #183: Extract Class</title>
  <link>http://jamesshore.com/Blog/Lets-Play/Episode-183.html</link>
  <category>/Blog/Lets-Play</category>
  <pubDate>Thu, 19 Apr 2012 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Lets-Play/Episode-183.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;19 Apr 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/Lets-Play/"&gt;James Shore/Blog/Lets-Play&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;The source code for this episode &lt;a href=&quot;https://github.com/jamesshore/lets_play_tdd/tree/bff1b07e8e68e5ed66cf2d1f790ebc6986311b4f&quot;&gt;is available here&lt;/a&gt;. Visit the &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play archive&lt;/a&gt; for more episodes!&lt;/p&gt;

&lt;object width=&quot;630&quot; height=&quot;380&quot;&gt;
&lt;param value=&quot;http://www.youtube.com/v/2Sy9VqzH890&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot; name=&quot;movie&quot; /&gt;&lt;param value=&quot;window&quot; name=&quot;wmode&quot; /&gt;
&lt;param value=&quot;true&quot; name=&quot;allowFullScreen&quot; /&gt;&lt;embed width=&quot;630&quot; height=&quot;380&quot; wmode=&quot;window&quot; allowfullscreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://www.youtube.com/v/2Sy9VqzH890&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;http://blog.jonesed.net/&quot;&gt;Danny Jones&lt;/a&gt; for figuring out the HD Youtube embed code.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Lets-Play/Episode-183.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
<item>
  <title>Let's Play TDD #182: Grab Bag</title>
  <link>http://jamesshore.com/Blog/Lets-Play/Episode-182.html</link>
  <category>/Blog/Lets-Play</category>
  <pubDate>Tue, 17 Apr 2012 00:01:00 PST</pubDate>
  <guid isPermaLink="true">http://jamesshore.com/Blog/Lets-Play/Episode-182.html</guid>
  <description>

    

    &lt;table width="100%" border="0" padding="0" spacing="0"&gt;
      &lt;tr&gt;
        &lt;td align="left"&gt;
          &lt;b&gt;17 Apr 2012&lt;/b&gt;
        &lt;/td&gt;
        &lt;td align="right"&gt;
          &lt;i&gt; &lt;a href="http://jamesshore.com/Blog/Lets-Play/"&gt;James Shore/Blog/Lets-Play&lt;/a&gt; &lt;/i&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  
    
    
      
&lt;p&gt;The source code for this episode &lt;a href=&quot;https://github.com/jamesshore/lets_play_tdd/tree/18070e0ca2003c5bc4f9b42cc97e67a5fb2ec63f&quot;&gt;is available here&lt;/a&gt;. Visit the &lt;a href=&quot;http://jamesshore.com/Blog/Lets-Play/&quot;&gt;Let's Play archive&lt;/a&gt; for more episodes!&lt;/p&gt;

&lt;object width=&quot;630&quot; height=&quot;380&quot;&gt;
&lt;param value=&quot;http://www.youtube.com/v/codhRPFUZIo&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot; name=&quot;movie&quot; /&gt;&lt;param value=&quot;window&quot; name=&quot;wmode&quot; /&gt;
&lt;param value=&quot;true&quot; name=&quot;allowFullScreen&quot; /&gt;&lt;embed width=&quot;630&quot; height=&quot;380&quot; wmode=&quot;window&quot; allowfullscreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://www.youtube.com/v/codhRPFUZIo&amp;amp;ap=%2526fmt%3D22&amp;amp;hd=1&amp;amp;fs=1&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;Many thanks to &lt;a href=&quot;http://blog.jonesed.net/&quot;&gt;Danny Jones&lt;/a&gt; for figuring out the HD Youtube embed code.&lt;/p&gt;

    
    
    &lt;p&gt;&lt;a href="http://jamesshore.com/Blog/Lets-Play/Episode-182.html#comments"&gt;Comments&lt;a&gt;&lt;p&gt;
  </description>
</item>
  </channel>
</rss>
