PageSourceSearch

https://www.destroyallsoftware.com/screencasts/catalog

html destroyallsoftware.com collected 2026-09-24 08:31:11 UTC 67,724 bytes, 2,056 lines download raw bytes

1<!DOCTYPE html>
2<html>
3<head>
4
5  <!-- mobile viewport setup -->
6  <meta name="viewport" content="width=device-width, initial-scale=1">
7
8  <title>
9    Catalog
10  </title>
11  <link rel="icon" type="image/png" href="/favicon.png" />
12  <link rel="apple-touch-icon" href="/favicon.png" />
13  <link rel="stylesheet" href="/assets/application-11634a9cacde5175b67a0615d3ca156fd703bc70b7596455ee7ad25822d77fab.css" media="all" />
14  
14<script src="/assets/application-2ec153dafeb60059eaa776a607f3000ae2b99d68f4dc78b3e1e354755a4a8652.js"></script>
14
15  
16  <meta name="csrf-param" content="authenticity_token" />
17<meta name="csrf-token" content="ZGiQC_VX-xbQ40hTnh8A0Z_En4KOZrA-uUQEeOHzNfOSBW2NJQk8cWe5FnxCcTeYI9G7PoYR2XM24BC5insssw" />
18</head>
19<body>
20  
21
22  <div class="top_navigation">
23    <div class="primary_navigation">
24      <div class="container">
25        <div class="hamburger_button"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAoCAYAAAB0HkOaAAABG2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8%2BCiA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8%2BGkqr6gAAAYJpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZHPK0RRFMc%2FM0PECKEsLCYNKyNGTWyUkVCTpjHKYDPz5peaH6%2F3ZpJsle0UJTZ%2BLfgL2CprpYiULKysiQ3Tc96Mmknm3M49n%2Fu995zuPReswZSS1uuGIJ3JaYFpr2MxtORoeMFKD114aA8rujrh9%2FuoaZ%2F3WMx46zJr1T73rzVHY7oClkbhcUXVcsIzwr61nGryjnCnkgxHhc%2BEBzS5oPCdqUfK%2FGpyoszfJmvBwCRY24QdiSqOVLGS1NLC8nKc6VRe%2Bb2P%2BRJ7LLMwL7FXvAedANN4cTDLFJPSk2HGZPbgws2grKiRP1TKnyMruYrMKutorJIgSY4BUfNSPSYxLnpMRop1s%2F9%2F%2B6rHR9zl6nYv1D8bxnsfNGxDsWAYX0eGUTwG2xNcZir52UMY%2FRC9UNGcB9C6CedXFS2yCxdb0P2ohrVwSbKJW%2BNxeDuFlhB03EDTcrlnv%2FucPEBwQ77qGvb2oV%2FOt678AHuMZ%2B%2FPgSnPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkElEQVRYhe3XsQ3CMBCF4f%2BiVEjMwggsQ8FOsAwb4GFwhfTSxBIFKaC5U%2FS%2BBe4vbNkHZr8JSUfgDMyJHW%2FgEZKewCkxZGghSdkVw5Qd8KlcTMuOWLVStylxvtnOhKQrcCH%2Fat9D0gs4JIYM3Q%2Fllgno2RGrXukA3xLnm%2B1MqW%2Bnl7gt5d6mMrzEfeElzv6yAMvSPr7b38OWAAAAAElFTkSuQmCC" /></div>
26        <h1>
27          <a href="/">Destroy All Software</a>
28        </h1>
29      </div>
30    </div>
31    <div class="secondary_links">
32      <div class="container">
33        <div class="links">
34  <div class="section screencasts_section">
35    <div class="section_title">Content</div>
36    <a href="/screencasts/catalog">
37      Screencasts
38</a>    <a href="/executeprogram">
39      Execute Program
40</a>    <a href="/compendium">
41      Programmer's Compendium
42</a>    <a href="/talks">
43      Conference Talks
44</a>  </div>
45
46  <div class="section account_section">
47    <div class="section_title">Account</div>
48      <a href="/screencasts/users/sign_in">
49        Sign In
50</a>      <a href="/screencasts/users/sign_up">
51        Sign Up
52</a>  </div>
53
54  <div class="section company_section">
55    <div class="section_title">Company</div>
56    <a href="/blog">
57      Blog
58</a>    <a href="/screencasts/contact">
59      Contact
60</a>    <a href="/screencasts/privacy_policy">
61      Privacy Policy
62</a>    <a href="/screencasts/faq">
63      FAQ
64</a>    <a href="/screencasts/eula">
65      EULA
66</a>  </div>
67
68  <div class="stretch"></div></div>
69
70      </div>
71    </div>
72  </div>
73
74    <div class="contrast_section">
75      <div class="container notice">
76      </div>
77    </div>
78  </div>
79
80  <div class="main_content">
81    
82<div class="catalog_index_page">
83  <div class="catalog_by_season">
84      <div class="container season">
85  <div class="row">
86    <h1 class="season_title twelve columns">
87      <a name="testing"></a>
88      <img src="/assets/titles/testing-d25eb698a47f7f2eb4452f3c16545c797590eb6d0cb4e2c6bc36a512b1430448.png" />
89    </h1>
90  </div>
91
92    <div class="row description">
93      <div class="six columns">
94        <p>This season covers testing tools and how to write good tests.
95  We switch between those topics frequently: first build a testing tool (like a test runner), then use it to talk about how to write good tests, then repeat!</p>
96
97      </div>
98      <img class="six columns screenshot" src="/assets/season_images/testing-685a751610575c04176924bfd75d06966d7ac8a5c89b6a61d3f1d3fd7549774e.png" />
99    </div>
100
101  <div class="episodes">
102      <div class="episode">
103        <a href="/screencasts/catalog/test-runner-from-scratch">
104
105          <div class="row">
106            <div class="number one column">1</div>
107            <div class="title six columns" >
108              Test Runner From Scratch
109            </div>
110            <div class="subtitle five columns">
111              An RSpec-style test runner
112              <div class="duration">(10 min)</div>
113            </div>
114          </div>
115</a>      </div>
116      <div class="episode">
117        <a href="/screencasts/catalog/assertions-large-and-small">
118
119          <div class="row">
120            <div class="number one column">2</div>
121            <div class="title six columns" >
122              Assertions Large and Small
123            </div>
124            <div class="subtitle five columns">
125              Asserting is surprisingly subtle.
126              <div class="duration">(12 min)</div>
127            </div>
128          </div>
129</a>      </div>
130      <div class="episode">
131        <a href="/screencasts/catalog/implementing-assertion-syntax">
132
133          <div class="row">
134            <div class="number one column">3</div>
135            <div class="title six columns" >
136              Implementing Assertion Syntax
137            </div>
138            <div class="subtitle five columns">
139              RSpec-style expect and raise_error.
140              <div class="duration">(12 min)</div>
141            </div>
142          </div>
143</a>      </div>
144      <div class="episode">
145        <a href="/screencasts/catalog/a-motivating-example-test">
146
147          <div class="row">
148            <div class="number one column">4</div>
149            <div class="title six columns" >
150              A Motivating Example Test
151            </div>
152            <div class="subtitle five columns">
153              A test to guide our runner design.
154              <div class="duration">(11 min)</div>
155            </div>
156          </div>
157</a>      </div>
158      <div class="episode">
159        <a href="/screencasts/catalog/implementing-let">
160
161          <div class="row">
162            <div class="number one column">5</div>
163            <div class="title six columns" >
164              Implementing Let
165            </div>
166            <div class="subtitle five columns">
167              A major refactor lets us write &quot;let&quot;.
168              <div class="duration">(11 min)</div>
169            </div>
170          </div>
171</a>      </div>
172      <div class="episode">
173        <a href="/screencasts/catalog/implementing-before">
174
175          <div class="row">
176            <div class="number one column">6</div>
177            <div class="title six columns" >
178              Implementing Before
179            </div>
180            <div class="subtitle five columns">
181              The last piece of our motivating test.
182              <div class="duration">(3 min)</div>
183            </div>
184          </div>
185</a>      </div>
186      <div class="episode">
187        <a href="/screencasts/catalog/finding-missing-tests">
188
189          <div class="row">
190            <div class="number one column">7</div>
191            <div class="title six columns" >
192              Finding Missing Tests
193            </div>
194            <div class="subtitle five columns">
195              A general way to expand test suites.
196              <div class="duration">(16 min)</div>
197            </div>
198          </div>
199</a>      </div>
200      <div class="episode">
201        <a href="/screencasts/catalog/test-data-factories">
202
203          <div class="row">
204            <div class="number one column">8</div>
205            <div class="title six columns" >
206              Test Data Factories
207            </div>
208            <div class="subtitle five columns">
209              A way to write cleaner tests.
210              <div class="duration">(13 min)</div>
211            </div>
212          </div>
213</a>      </div>
214  </div>
215
216    <div class="call-to-action">
217  <a class="button" href="/screencasts/account/subscription">
218    Subscribe for access ($29/mo) &rarr;
219</a></div>
220
221</div>
222
223      <div class="container season">
224  <div class="row">
225    <h1 class="season_title twelve columns">
226      <a name="web-framework-from-scratch"></a>
227      <img src="/assets/titles/web-framework-from-scratch-5275ad383de0d3d0af5bc1d827bba7a743a67b08cf24e95ed58962399e78ef88.png" />
228    </h1>
229  </div>
230
231    <div class="row description">
232      <div class="six columns">
233        <p>We give the &quot;from scratch&quot; treatment to an entire web framework.
234  It will do HTTP request routing, template rendering, database access, form validation, and more.
235  Each piece of the design will be driven by the needs of an example application.</p>
236
237      </div>
238      <img class="six columns screenshot" src="/assets/season_images/web-framework-from-scratch-3dfe7150ff7b810d2e5fe3556c53d9a1d2c6
2387bf16bf8ae21b1a9682cf69f8194.png" />
239    </div>
240
241  <div class="episodes">
242      <div class="episode">
243        <a href="/screencasts/catalog/routing-simple-requests">
244
245          <div class="row">
246            <div class="number one column">1</div>
247            <div class="title six columns" >
248              Routing Simple Requests
249            </div>
250            <div class="subtitle five columns">
251              A simple router for static URLs.
252              <div class="duration">(11 min)</div>
253            </div>
254          </div>
255</a>      </div>
256      <div class="episode">
257        <a href="/screencasts/catalog/variables-in-routes">
258
259          <div class="row">
260            <div class="number one column">2</div>
261            <div class="title six columns" >
262              Variables in Routes
263            </div>
264            <div class="subtitle five columns">
265              A complete web request router.
266              <div class="duration">(10 min)</div>
267            </div>
268          </div>
269</a>      </div>
270      <div class="episode">
271        <a href="/screencasts/catalog/three-router-tweaks">
272
273          <div class="row">
274            <div class="number one column">3</div>
275            <div class="title six columns" >
276              Three Router Tweaks
277            </div>
278            <div class="subtitle five columns">
279              Changes to ease future dev. Optional.
280              <div class="duration">(3 min)</div>
281            </div>
282          </div>
283</a>      </div>
284      <div class="episode">
285        <a href="/screencasts/catalog/first-attempt-at-database-library">
286
287          <div class="row">
288            <div class="number one column">4</div>
289            <div class="title six columns" >
290              First Attempt at Database Library
291            </div>
292            <div class="subtitle five columns">
293              We discover SQL injection attacks!
294              <div class="duration">(13 min)</div>
295            </div>
296          </div>
297</a>      </div>
298      <div class="episode">
299        <a href="/screencasts/catalog/database-library-tests">
300
301          <div class="row">
302            <div class="number one column">5</div>
303            <div class="title six columns" >
304              Database Library Tests
305            </div>
306            <div class="subtitle five columns">
307              Tests drive our SQL injection bug fix.
308              <div class="duration">(10 min)</div>
309            </div>
310          </div>
311</a>      </div>
312      <div class="episode">
313        <a href="/screencasts/catalog/better-database-library-api">
314
315          <div class="row">
316            <div class="number one column">6</div>
317            <div class="title six columns" >
318              Better Database Library API
319            </div>
320            <div class="subtitle five columns">
321              We make queries easier and safer.
322              <div class="duration">(18 min)</div>
323            </div>
324          </div>
325</a>      </div>
326      <div class="episode">
327        <a href="/screencasts/catalog/html-template-language-parser">
328
329          <div class="row">
330            <div class="number one column">7</div>
331            <div class="title six columns" >
332              HTML Template Language Parser
333            </div>
334            <div class="subtitle five columns">
335              A line-oriented template language.
336              <div class="duration">(15 min)</div>
337            </div>
338          </div>
339</a>      </div>
340      <div class="episode">
341        <a href="/screencasts/catalog/html-template-rendering">
342
343          <div class="row">
344            <div class="number one column">8</div>
345            <div class="title six columns" >
346              HTML Template Rendering
347            </div>
348            <div class="subtitle five columns">
349              The final piece of our web framework.
350              <div class="duration">(12 min)</div>
351            </div>
352          </div>
353</a>      </div>
354  </div>
355
356    <div class="call-to-action">
357  <a class="button" href="/screencasts/account/subscription">
358    Subscribe for access ($29/mo) &rarr;
359</a></div>
360
361</div>
362
363      <div class="container season">
364  <div class="row">
365    <h1 class="season_title twelve columns">
366      <a name="from-scratch"></a>
367      <img src="/assets/titles/from-scratch-da40c851a9b015100300520b62eab42fa97f05f91df9003271e3
36762ee90490ea9.png" />
368    </h1>
369  </div>
370
371    <div class="row description">
372      <div class="six columns">
373        <p>We rely on thousands of tools to do our work: compilers, editors, audio and video codecs, data compression formats, and so on.
374  Many of these tools are clever or well-designed or both.
375  By examining how they work, we can see the design insights behind them while simultaneously making them less mysterious.</p>
376
377      </div>
378      <img class="six columns screenshot" src="/assets/season_images/from-scratch-258bb0d570d8d971482ef58221aa89aa797e0100928eded06969ff566bcb95a7.png" />
379    </div>
380
381  <div class="episodes">
382      <div class="episode">
383        <a href="/screencasts/catalog/a-compiler-from-scratch">
384
385          <div class="row">
386            <div class="number one column">1</div>
387            <div class="title six columns" >
388              A Compiler From Scratch
389                <span class="tag free"> free </span>
390            </div>
391            <div class="subtitle five columns">
392              A simple compiler to JavaScript.
393              <div class="duration">(38 min)</div>
394            </div>
395          </div>
396</a>      </div>
397      <div class="episode">
398        <a href="/screencasts/catalog/data-compressor-from-scratch">
399
400          <div class="row">
401            <div class="number one column">2</div>
402            <div class="title six columns" >
403              Data Compressor From Scratch
404            </div>
405            <div class="subtitle five columns">
406              Huffman-coding-based compressor.
407              <div class="duration">(39 min)</div>
408            </div>
409          </div>
410</a>      </div>
411      <div class="episode">
412        <a href="/screencasts/catalog/text-editor-from-scratch">
413
414          <div class="row">
415            <div class="number one column">3</div>
416            <div class="title six columns" >
417              Text Editor From Scratch
418            </div>
419            <div class="subtitle five columns">
420              A basic text editor including undo.
421              <div class="duration">(33 min)</div>
422            </div>
423          </div>
424</a>      </div>
425      <div class="episode">
426        <a href="/screencasts/catalog/shell-from-scratch">
427
428          <div class="row">
429            <div class="number one column">4</div>
430            <div class="title six columns" >
431              Shell From Scratch
432            </div>
433            <div class="subtitle five columns">
434              A Unix shell with pipelines.
435              <div class="duration">(35 min)</div>
436            </div>
437          </div>
438</a>      </div>
439      <div class="episode">
440        <a href="/screencasts/catalog/http-server-from-scratch">
441
442          <div class="row">
443            <div class="number one column">5</div>
444            <div class="title six columns" >
445              HTTP Server From Scratch
446            </div>
447            <div class="subtitle five columns">
448              Serving static and dynamic content.
449              <div class="duration">(28 min)</div>
450            </div>
451          </div>
452</a>      </div>
453      <div class="episode">
454        <a href="/screencasts/catalog/malloc-from-scratch">
455
456          <div class="row">
457            <div class="number one column">6</div>
458            <div class="title six columns" >
459              Malloc From Scratch
460            </div>
461            <div class="subtitle five columns">
462              A simple memory allocator.
463              <div class="duration">(31 min)</div>
464            </div>
465          </div>
466</a>      </div>
467  </div>
468
469    <div class="call-to-action">
470  <a class="button" href="/screencasts/account/subscription">
471    Subscribe for access ($29/mo) &rarr;
472</a></div>
473
474</div>
475
476      <div class="container season">
477  <div class="row">
478    <h1 class="season_title twelve columns">
479      <a name="computation"></a>
480      <img src="/assets/titles/computation-626e6bea492c989c27d31518baa790c2834d899796837c386410298747794256.png" />
481    </h1>
482  </div>
483
484    <div class="row description">
485      <div class="six columns">
486        <p>All computing systems follow definite rules, both in theory and in practice, in the realms of both computer science and everyday programming.
487  In an hour and a half of dense screencasts, we get a high-level view of major computational topics demonstrated using code, not mathematical notation.</p>
488
489      </div>
490      <img class="six columns screenshot" src="/assets/season_images/computation-947415327bcefcf05f9e8be98f5994f3098593b3e65b2f450489fc6b7bc30b06.png" />
491    </div>
492
493  <div class="episodes">
494      <div class="episode">
495        <a href="/screencasts/catalog/introduction-to-computation">
496
497          <div class="row">
498            <div class="number one column">1</div>
499            <div class="title six columns" >
500              Introduction to Computation
501                <span class="tag free"> free </span>
502            </div>
503            <div class="subtitle five columns">
504              A survey of the topics we&#39;ll cover.
505              <div class="duration">(5 min)</div>
506            </div>
507          </div>
508</a>      </div>
509      <div class="episode">
510        <a href="/screencasts/catalog/computing-by-changing">
511
512          <div class="row">
513            <div class="number one column">2</div>
514            <div class="title six columns" >
515              Computing by Changing
516            </div>
517            <div class="subtitle five columns">
518              Basics of Turing machines.
519              <div class="duration">(13 min)</div>
520            </div>
521          </div>
522</a>      </div>
523      <div class="episode">
524        <a href="/screencasts/catalog/power-of-turing-machines">
525
526          <div class="row">
527            <div class="number one column">3</div>
528            <div class="title six columns" >
529              Power of Turing Machines
530            </div>
531            <div class="subtitle five columns">
532              Numbers and hints of data structures.
533              <div class="duration">(11 min)</div>
534            </div>
535          </div>
536</a>      </div>
537      <div class="episode">
538        <a href="/screencasts/catalog/computing-by-constructing">
539
540          <div class="row">
541            <div class="number one column">4</div>
542            <div class="title six columns" >
543              Computing by Constructing
544            </div>
545            <div class="subtitle five columns">
546              First steps with the lambda calculus.
547              <div class="duration">(10 min)</div>
548            </div>
549          </div>
550</a>      </div>
551      <div class="episode">
552        <a href="/screencasts/catalog/power-of-lambda-calculus">
553
554          <div class="row">
555            <div class="number one column">5</div>
556            <div class="title six columns" >
557              Power of Lambda Calculus
558            </div>
559            <div class="subtitle five columns">
560              Building numbers and booleans.
561              <div class="duration">(12 min)</div>
562            </div>
563          </div>
564</a>      </div>
565      <div class="episode">
566        <a href="/screencasts/catalog/the-limits-of-computation">
567
568          <div class="row">
569            <div class="number one column">6</div>
570            <div class="title six columns" >
571              The Limits of Computation
572            </div>
573            <div class="subtitle five columns">
574              Halting problem and undecidability.
575              <div class="duration">(13 min)</div>
576            </div>
577          </div>
578</a>      </div>
579      <div class="episode">
580        <a href="/screencasts/catalog/recognizing-simple-languages">
581
582          <div class="row">
583            <div class="number one column">7</div>
584            <div class="title six columns" >
585              Recognizing Simple Languages
586            </div>
587            <div class="subtitle five columns">
588              Regular languages and grammars.
589              <div class="duration">(17 min)</div>
590            </div>
591          </div>
592</a>      </div>
593      <div class="episode">
594        <a href="/screencasts/catalog/recognizing-programming-languages">
595
596          <div class="row">
597            <div class="number one column">8</div>
598            <div class="title six columns" >
599              Recognizing Programming Languages
600            </div>
601            <div class="subtitle five columns">
602              Context-free languages.
603              <div class="duration">(14 min)</div>
604            </div>
605          </div>
606</a>      </div>
607      <div class="episode">
608        <a href="/screencasts/catalog/the-most-complex-languages">
609
610          <div class="row">
611            <div class="number one column">9</div>
612            <div class="title six columns" >
613              The Most Complex Languages
614            </div>
615            <div class="subtitle five columns">
616              Context-sensitivity and beyond.
617              <div class="duration">(9 min)</div>
618            </div>
619          </div>
620</a>      </div>
621      <div class="episode">
622        <a href="/screencasts/catalog/final-notes-on-computation">
623
624          <div class="row">
625            <div class="number one column">10</div>
626            <div class="title six columns" >
627              Final Notes on Computation
628            </div>
629            <div class="subtitle five columns">
630              Metalanguages and history.
631              <div class="duration">(11 min)</div>
632            </div>
633          </div>
634</a>      </div>
635  </div>
636
637    <div class="call-to-action">
638  <a class="button" href="/screencasts/account/subscription">
639    Subscribe for access ($29/mo) &rarr;
640</a></div>
641
642</div>
643
644      <div class="container season">
645  <div class="row">
646    <h1 class="season_title twelve columns">
647      <a name="season5"></a>
648      <img src="/assets/titles/classic-season-5-f217cd8a076ebc0aa58073440d58d7e01df5956c50694cfd6bdbad11190b6488.png" />
649    </h1>
650  </div>
651
652
653  <div class="episodes">
654      <div class="episode">
655        <a href="/screencasts/catalog/collapsing-services-into-values">
656
657          <div class="row">
658            <div class="number one column">1</div>
659            <div class="title six columns" >
660              Collapsing Services Into Values
661            </div>
662            <div class="subtitle five columns">
663              Rails
664              <div class="duration">(11 min)</div>
665            </div>
666          </div>
667</a>      </div>
668      <div class="episode">
669        <a href="/screencasts/catalog/splitting-active-record-models">
670
671          <div class="row">
672            <div class="number one column">2</div>
673            <div class="title six columns" >
674              Splitting Active Record Models
675            </div>
676            <div class="subtitle five columns">
677              Active Record
678              <div class="duration">(11 min)</div>
679            </div>
680          </div>
681</a>      </div>
682      <div class="episode">
683        <a href="/screencasts/catalog/removing-a-rubinius-feature">
684
685          <div class="row">
686            <div class="number one column">3</div>
687            <div class="title six columns" >
688              Removing a Rubinius Feature
689            </div>
690            <div class="subtitle five columns">
691              Language Features
692              <div class="duration">(12 min)</div>
693            </div>
694          </div>
695</a>      </div>
696      <div class="episode">
697        <a href="/screencasts/catalog/python-vs-ruby-objects">
698
699          <div class="row">
700            <div class="number one column">4</div>
701            <div class="title six columns" >
702              Python vs. Ruby Objects
703            </div>
704            <div class="subtitle five columns">
705              Python
706              <div class="duration">(9 min)</div>
707            </div>
708          </div>
709</a>      </div>
710      <div class="episode">
711        <a href="/screencasts/catalog/where-correctness-is-enforced">
712
713          <div class="row">
714            <div class="number one column">5</div>
715            <div class="title six columns" >
716              Where Correctness Is Enforced
717            </div>
718            <div class="subtitle five columns">
719              Rails
720              <div class="duration">(10 min)</div>
721            </div>
722          </div>
723</a>      </div>
724      <div class="episode">
725        <a href="/screencasts/catalog/separating-arrangement-and-work">
726
727          <div class="row">
728            <div class="number one column">6</div>
729            <div class="title six columns" >
730              Separating Arrangement and Work
731            </div>
732            <div class="subtitle five columns">
733              Coupling
734              <div class="duration">(11 min)</div>
735            </div>
736          </div>
737</a>      </div>
738      <div class="episode">
739        <a href="/screencasts/catalog/primitive-obsession">
740
741          <div class="row">
742            <div class="number one column">7</div>
743            <div class="title six columns" >
744              Primitive Obsession
745            </div>
746            <div class="subtitle five columns">
747              Design &amp; OO
748              <div class="duration">(16 min)</div>
749            </div>
750          </div>
751</a>      </div>
752      <div class="episode">
753        <a href="/screencasts/catalog/isolating-by-separating-value">
754
755          <div class="row">
756            <div class="number one column">8</div>
757            <div class="title six columns" >
758              Isolating by Separating Value
759            </div>
760            <div class="subtitle five columns">
761              Test Isolation
762              <div class="duration">(11 min)</div>
763            </div>
764          </div>
765</a>      </div>
766      <div class="episode">
767        <a href="/screencasts/catalog/imperative-to-oo-to-functional">
768
769          <div class="row">
770            <div class="number one column">9</div>
771            <div class="title six columns" >
772              Imperative to OO to Functional
773            </div>
774            <div class="subtitle five columns">
775              Programming Paradigms
776              <div class="duration">(13 min)</div>
777            </div>
778          </div>
779</a>      </div>
780      <div class="episode">
781        <a href="/screencasts/catalog/debugging-with-tests">
782
783          <div class="row">
784            <div class="number one column">10</div>
785            <div class="title six columns" >
786              Debugging With Tests
787            </div>
788            <div class="subtitle five columns">
789              TDD
790              <div class="duration">(10 min)</div>
791            </div>
792          </div>
793</a>      </div>
794      <div class="episode">
795        <a href="/screencasts/catalog/test-cases-vs-examples">
796
797          <div class="row">
798            <div class="number one column">11</div>
799            <div class="title six columns" >
800              Test Cases vs. Examples
801            </div>
802            <div class="subtitle five columns">
803              Types of Tests
804              <div class="duration">(14 min)</div>
805            </div>
806          </div>
807</a>      </div>
808      <div class="episode">
809        <a href="/screencasts/catalog/a-bit-of-c">
810
811          <div class="row">
812            <div class="number one column">12</div>
813            <div class="title six columns" >
814              A Bit of C
815            </div>
816            <div class="subtitle five columns">
817              Unix
818              <div class="duration">(11 min)</div>
819            </div>
820          </div>
821</a>      </div>
822      <div class="episode">
823        <a href="/screencasts/catalog/analyzing-context-switches">
824
825          <div class="row">
826            <div class="number one column">13</div>
827            <div class="title six columns" >
828              Analyzing Context Switches
829            </div>
830            <div class="subtitle five columns">
831              Unix
832              <div class="duration">(12 min)</div>
833            </div>
834          </div>
835</a>      </div>
836      <div class="episode">
837        <a href="/screencasts/catalog/actor-syntax-from-scratch">
838
839          <div class="row">
840            <div class="number one column">14</div>
841            <div class="title six columns" >
842              Actor Syntax From Scratch
843            </div>
844            <div class="subtitle five columns">
845              Language Features
846              <div class="duration">(15 min)</div>
847            </div>
848          </div>
849</a>      </div>
850      <div class="episode">
851        <a href="/screencasts/catalog/running-tests-asynchronously">
852
853          <div class="row">
854            <div class="number one column">15</div>
855            <div class="title six columns" >
856              Running Tests Asynchronously
857            </div>
858            <div class="subtitle five columns">
859              Unix
860              <div class="duration">(8 min)</div>
861            </div>
862          </div>
863</a>      </div>
864      <div class="episode">
865        <a href="/screencasts/catalog/test-recommendations">
866
867          <div class="row">
868            <div class="number one column">16</div>
869            <div class="title six columns" >
870              Test Recommendations
871            </div>
872            <div class="subtitle five columns">
873              TDD
874              <div class="duration">(16 min)</div>
875            </div>
876          </div>
877</a>      </div>
878      <div class="episode">
879        <a href="/screencasts/catalog/when-rails-is-right">
880
881          <div class="row">
882            <div class="number one column">17</div>
883            <div class="title six columns" >
884              When Rails Is Right
885            </div>
886            <div class="subtitle five columns">
887              Rails
888              <div class="duration">(11 min)</div>
889            </div>
890          </div>
891</a>      </div>
892  </div>
893
894    <div class="call-to-action">
895  <a class="button" href="/screencasts/account/subscription">
896    Subscribe for access ($29/mo) &rarr;
897</a></div>
898
899</div>
900
901      <div class="container season">
902  <div class="row">
903    <h1 class="season_title twelve columns">
904      <a name="season4"></a>
905      <img src="/assets/titles/classic-season-4-baafddc5452e26565318ac76775210c533190fd8597e30dfe73a9e0ed7bd7d5b.png" />
906    </h1>
907  </div>
908
909
910  <div class="episodes">
911      <div class="episode">
912        <a href="/screencasts/catalog/sucks-rocks-1-the-rails-app">
913
914          <div class="row">
915            <div class="number one column">1</div>
916            <div class="title six columns" >
917              Sucks/Rocks 1: The Rails App
918            </div>
919            <div class="subtitle five columns">
920              Building An App From Scratch
921              <div class="duration">(9 min)</div>
922            </div>
923          </div>
924</a>      </div>
925      <div class="episode">
926        <a href="/screencasts/catalog/sucks-rocks-2-computing-scores">
927
928          <div class="row">
929            <div class="number one column">2</div>
930            <div class="title six columns" >
931              Sucks/Rocks 2: Computing Scores
932            </div>
933            <div class="subtitle five columns">
934              Building An App From Scratch
935              <div class="duration">(12 min)</div>
936            </div>
937          </div>
938</a>      </div>
939      <div class="episode">
940        <a href="/screencasts/catalog/sucks-rocks-3-the-search-engine">
941
942          <div class="row">
943            <div class="number one column">3</div>
944            <div class="title six columns" >
945              Sucks/Rocks 3: The Search Engine
946            </div>
947            <div class="subtitle five columns">
948              Building An App From Scratch
949              <div class="duration">(11 min)</div>
950            </div>
951          </div>
952</a>      </div>
953      <div class="episode">
954        <a href="/screencasts/catalog/sucks-rocks-4-caching">
955
956          <div class="row">
957            <div class="number one column">4</div>
958            <div class="title six columns" >
959              Sucks/Rocks 4: Caching
960            </div>
961            <div class="subtitle five columns">
962              Building An App From Scratch
963              <div class="duration">(14 min)</div>
964            </div>
965          </div>
966</a>      </div>
967      <div class="episode">
968        <a href="/screencasts/catalog/sucks-rocks-5-a-bug-and-a-model">
969
970          <div class="row">
971            <div class="number one column">5</div>
972            <div class="title six columns" >
973              Sucks/Rocks 5: a Bug and a Model
974            </div>
975            <div class="subtitle five columns">
976              Building An App From Scratch
977              <div class="duration">(13 min)</div>
978            </div>
979          </div>
980</a>      </div>
981      <div class="episode">
982        <a href="/screencasts/catalog/sucks-rocks-6-a-controller">
983
984          <div class="row">
985            <div class="number one column">6</div>
986            <div class="title six columns" >
987              Sucks/Rocks 6: a Controller
988            </div>
989            <div class="subtitle five columns">
990              Building An App From Scratch
991              <div class="duration">(11 min)</div>
992            </div>
993          </div>
994</a>      </div>
995      <div class="episode">
996        <a href="/screencasts/catalog/sucks-rocks-7-more-cucumber">
997
998          <div class="row">
999            <div class="number one column">7</div>
1000            <div class="title six columns" >
1001              Sucks/Rocks 7: More Cucumber
1002            </div>
1003         
1003   <div class="subtitle five columns">
1004              Building An App From Scratch
1005              <div class="duration">(12 min)</div>
1006            </div>
1007          </div>
1008</a>      </div>
1009      <div class="episode">
1010        <a href="/screencasts/catalog/sucks-rocks-8-the-whole-design">
1011
1012          <div class="row">
1013            <div class="number one column">8</div>
1014            <div class="title six columns" >
1015              Sucks/Rocks 8: The Whole Design
1016            </div>
1017            <div class="subtitle five columns">
1018              Building An App From Scratch
1019              <div class="duration">(11 min)</div>
1020            </div>
1021          </div>
1022</a>      </div>
1023      <div class="episode">
1024        <a href="/screencasts/catalog/pretty-git-logs">
1025
1026          <div class="row">
1027            <div class="number one column">9</div>
1028            <div class="title six columns" >
1029              Pretty Git Logs
1030            </div>
1031            <div class="subtitle five columns">
1032              Git
1033              <div class="duration">(10 min)</div>
1034            </div>
1035          </div>
1036</a>      </div>
1037      <div class="episode">
1038        <a href="/screencasts/catalog/mutation-in-tell-dont-ask">
1039
1040          <div class="row">
1041            <div class="number one column">10</div>
1042            <div class="title six columns" >
1043              Mutation in Tell Don&#39;t Ask
1044            </div>
1045            <div class="subtitle five columns">
1046              Design &amp; OO
1047              <div class="duration">(9 min)</div>
1048            </div>
1049          </div>
1050</a>      </div>
1051      <div class="episode">
1052        <a href="/screencasts/catalog/a-magical-isolation-story">
1053
1054          <div class="row">
1055            <div class="number one column">11</div>
1056            <div class="title six columns" >
1057              A Magical Isolation Story
1058            </div>
1059            <div class="subtitle five columns">
1060              Test Isolation
1061              <div class="duration">(10 min)</div>
1062            </div>
1063          </div>
1064</a>      </div>
1065      <div class="episode">
1066        <a href="/screencasts/catalog/ugly-tests-trigger-refactoring">
1067
1068          <div class="row">
1069            <div class="number one column">12</div>
1070            <div class="title six columns" >
1071              Ugly Tests Trigger Refactoring
1072            </div>
1073            <div class="subtitle five columns">
1074              TDD
1075              <div class="duration">(11 min)</div>
1076            </div>
1077          </div>
1078</a>      </div>
1079      <div class="episode">
1080        <a href="/screencasts/catalog/the-mock-obsession-problem">
1081
1082          <div class="row">
1083            <div class="number one column">13</div>
1084            <div class="title six columns" >
1085              The Mock Obsession Problem
1086            </div>
1087            <div class="subtitle five columns">
1088              Stubs &amp; Mocks
1089              <div class="duration">(12 min)</div>
1090            </div>
1091          </div>
1092</a>      </div>
1093      <div class="episode">
1094        <a href="/screencasts/catalog/test-driving-shell-scripts">
1095
1096          <div class="row">
1097            <div class="number one column">14</div>
1098            <div class="title six columns" >
1099              Test Driving Shell Scripts
1100            </div>
1101            <div class="subtitle five columns">
1102              The Unix Shell
1103              <div class="duration">(11 min)</div>
1104            </div>
1105          </div>
1106</a>      </div>
1107      <div class="episode">
1108        <a href="/screencasts/catalog/conditional-whac-a-mole">
1109
1110          <div class="row">
1111            <div class="number one column">15</div>
1112            <div class="title six columns" >
1113              Conditional Whac-A-Mole
1114            </div>
1115            <div class="subtitle five columns">
1116              Design &amp; OO
1117              <div class="duration">(13 min)</div>
1118            </div>
1119          </div>
1120</a>      </div>
1121      <div class="episode">
1122        <a href="/screencasts/catalog/time-to-first-request">
1123
1124          <div class="row">
1125            <div class="number one column">16</div>
1126            <div class="title six columns" >
1127              Time to First Request
1128            </div>
1129            <div class="subtitle five columns">
1130              Unix
1131              <div class="duration">(12 min)</div>
1132            </div>
1133          </div>
1134</a>      </div>
1135      <div class="episode">
1136        <a href="/screencasts/catalog/test-isolation-without-mocks">
1137
1138          <div class="row">
1139            <div class="number one column">17</div>
1140            <div class="title six columns" >
1141              Test Isolation Without Mocks
1142            </div>
1143            <div class="subtitle five columns">
1144              Test Isolation
1145              <div class="duration">(13 min)</div>
1146            </div>
1147          </div>
1148</a>      </div>
1149      <div class="episode">
1150        <a href="/screencasts/catalog/functional-core-imperative-shell">
1151
1152          <div class="row">
1153            <div class="number one column">18</div>
1154            <div class="title six columns" >
1155              Functional Core, Imperative Shell
1156                <span class="tag free"> free </span>
1157            </div>
1158            <div class="subtitle five columns">
1159              Programming Paradigms
1160              <div class="duration">(13 min)</div>
1161            </div>
1162          </div>
1163</a>      </div>
1164  </div>
1165
1166    <div class="call-to-action">
1167  <a class="button" href="/screencasts/account/subscription">
1168    Subscribe for access ($29/mo) &rarr;
1169</a></div>
1170
1171</div>
1172
1173      <div class="container season">
1174  <div class="row">
1175    <h1 class="season_title twelve columns">
1176      <a name="season3"></a>
1177      <img src="/assets/titles/classic-season-3-01cf33f29976a1f3715a5d2f31f8475e64922e0aa4ff17b201d418ec6dc08129.png" />
1178    </h1>
1179  </div>
1180
1181
1182  <div class="episodes">
1183      <div class="episode">
1184        <a href="/screencasts/catalog/what-goes-in-active-records">
1185
1186          <div class="row">
1187            <div class="number one column">1</div>
1188            <div class="title six columns" >
1189              What Goes in Active Records
1190            </div>
1191            <div class="subtitle five columns">
1192              Active Record
1193              <div class="duration">(13 min)</div>
1194            </div>
1195          </div>
1196</a>      </div>
1197      <div class="episode">
1198        <a href="/screencasts/catalog/what-goes-in-active-records-part-2">
1199
1200          <div class="row">
1201            <div class="number one column">2</div>
1202            <div class="title six columns" >
1203              What Goes in Active Records Part 2
1204            </div>
1205            <div class="subtitle five columns">
1206              Active Record
1207              <div class="duration">(10 min)</div>
1208            </div>
1209          </div>
1210</a>      </div>
1211      <div class="episode">
1212        <a href="/screencasts/catalog/outside-in-tdd-stubs-vs-stash">
1213
1214          <div class="row">
1215            <div class="number one column">3</div>
1216            <div class="title six columns" >
1217              Outside-in TDD: Stubs vs. Stash
1218            </div>
1219            <div class="subtitle five columns">
1220              Stubs &amp; Mocks
1221              <div class="duration">(13 min)</div>
1222            </div>
1223          </div>
1224</a>      </div>
1225      <div class="episode">
1226        <a href="/screencasts/catalog/web-apps-when-to-test-in-isolation">
1227
1228          <div class="row">
1229            <div class="number one column">4</div>
1230            <div class="title six columns" >
1231              Web Apps: When to Test in Isolation
1232            </div>
1233            <div class="subtitle five columns">
1234              Test Isolation
1235              <div class="duration">(10 min)</div>
1236            </div>
1237          </div>
1238</a>      </div>
1239      <div class="episode">
1240        <a href="/screencasts/catalog/untested-code-part-1-introduction">
1241
1242          <div class="row">
1243            <div class="number one column">5</div>
1244            <div class="title six columns" >
1245              Untested Code Part 1: Introduction
1246            </div>
1247            <div class="subtitle five columns">
1248              Untested Code
1249              <div class="duration">(11 min)</div>
1250            </div>
1251          </div>
1252</a>      </div>
1253      <div class="episode">
1254        <a href="/screencasts/catalog/untested-code-part-2-adding-tests">
1255
1256          <div class="row">
1257            <div class="number one column">6</div>
1258            <div class="title six columns" >
1259              Untested Code Part 2: Adding Tests
1260            </div>
1261            <div class="subtitle five columns">
1262              Untested Code
1263              <div class="duration">(19 min)</div>
1264            </div>
1265          </div>
1266</a>      </div>
1267      <div class="episode">
1268        <a href="/screencasts/catalog/untested-code-part-3-refactoring-1">
1269
1270          <div class="row">
1271            <div class="number one column">7</div>
1272            <div class="title six columns" >
1273              Untested Code Part 3: Refactoring 1
1274            </div>
1275            <div class="subtitle five columns">
1276              Untested Code
1277              <div class="duration">(16 min)</div>
1278            </div>
1279          </div>
1280</a>      </div>
1281      <div class="episode">
1282        <a href="/screencasts/catalog/untested-code-part-4-refactoring-2">
1283
1284          <div class="row">
1285            <div class="number one column">8</div>
1286            <div class="title six columns" >
1287              Untested Code Part 4: Refactoring 2
1288            </div>
1289            <div class="subtitle five columns">
1290              Untested Code
1291              <div class="duration">(18 min)</div>
1292            </div>
1293          </div>
1294</a>      </div>
1295      <div class="episode">
1296        <a href="/screencasts/catalog/emacs-chainsaw-of-chainsaws">
1297
1298          <div class="row">
1299            <div class="number one column">9</div>
1300            <div class="title six columns" >
1301              Emacs, Chainsaw of Chainsaws
1302            </div>
1303            <div class="subtitle five columns">
1304              Editors
1305              <div class="duration">(11 min)</div>
1306            </div>
1307          </div>
1308</a>      </div>
1309      <div class="episode">
1310        <a href="/screencasts/catalog/stubbing-unloaded-dependencies">
1311
1312          <div class="row">
1313            <div class="number one column">10</div>
1314            <div class="title six columns" >
1315              Stubbing Unloaded Dependencies
1316            </div>
1317            <div class="subtitle five columns">
1318              Stubs &amp; Mocks
1319              <div class="duration">(11 min)</div>
1320            </div>
1321          </div>
1322</a>      </div>
1323      <div class="episode">
1324        <a href="/screencasts/catalog/brittle-and-fragile-tests">
1325
1326          <div class="row">
1327            <div class="number one column">11</div>
1328            <div class="title six columns" >
1329              Brittle and Fragile Tests
1330            </div>
1331            <div class="subtitle five columns">
1332              TDD
1333              <div class="duration">(10 min)</div>
1334            </div>
1335          </div>
1336</a>      </div>
1337      <div class="episode">
1338        <a href="/screencasts/catalog/repository-statistics-in-raptor">
1339
1340          <div class="row">
1341            <div class="number one column">12</div>
1342            <div class="title six columns" >
1343              Repository Statistics in Raptor
1344            </div>
1345            <div class="subtitle five columns">
1346              Git
1347              <div class="duration">(11 min)</div>
1348            </div>
1349          </div>
1350</a>      </div>
1351      <div class="episode">
1352        <a href="/screencasts/catalog/generating-coupons-with-bash">
1353
1354          <div class="row">
1355            <div class="number one column">13</div>
1356            <div class="title six columns" >
1357              Generating Coupons With Bash
1358            </div>
1359            <div class="subtitle five columns">
1360              The Unix Shell
1361              <div class="duration">(12 min)</div>
1362            </div>
1363          </div>
1364</a>      </div>
1365      <div class="episode">
1366        <a href="/screencasts/catalog/shorter-class-syntax">
1367
1368          <div class="row">
1369            <div class="number one column">14</div>
1370            <div class="title six columns" >
1371              Shorter Class Syntax
1372            </div>
1373            <div class="subtitle five columns">
1374              Language Features
1375              <div class="duration">(8 min)</div>
1376            </div>
1377          </div>
1378</a>      </div>
1379      <div class="episode">
1380        <a href="/screencasts/catalog/when-to-generalize-in-tdd">
1381
1382          <div class="row">
1383            <div class="number one column">15</div>
1384            <div class="title six columns" >
1385              When to Generalize in TDD
1386            </div>
1387            <div class="subtitle five columns">
1388              TDD
1389              <div class="duration">(11 min)</div>
1390            </div>
1391          </div>
1392</a>      </div>
1393      <div class="episode">
1394        <a href="/screencasts/catalog/the-vimrc">
1395
1396          <div class="row">
1397            <div class="number one column">16</div>
1398            <div class="title six columns" >
1399              The .vimrc
1400            </div>
1401            <div class="subtitle five columns">
1402              Editors
1403              <div class="duration">(11 min)</div>
1404            </div>
1405          </div>
1406</a>      </div>
1407      <div class="episode">
1408        <a href="/screencasts/catalog/pushing-complexity-down">
1409
1410          <div class="row">
1411            <div class="number one column">17</div>
1412            <div class="title six columns" >
1413              Pushing Complexity Down
1414            </div>
1415            <div class="subtitle five columns">
1416              Design &amp; OO
1417              <div class="duration">(10 min)</div>
1418            </div>
1419          </div>
1420</a>      </div>
1421      <div class="episode">
1422        <a href="/screencasts/catalog/three-test-shapes">
1423
1424          <div class="row">
1425            <div class="number one column">18</div>
1426            <div class="title six columns" >
1427              Three Test Shapes
1428            </div>
1429            <div class="subtitle five columns">
1430              Types of Tests
1431              <div class="duration">(11 min)</div>
1432            </div>
1433          </div>
1434</a>      </div>
1435  </div>
1436
1437    <div class="call-to-action">
1438  <a class="button" href="/screencasts/account/subscription">
1439    Subscribe for access ($29/mo) &rarr;
1440</a></div>
1441
1442</div>
1443
1444      <div class="container season">
1445  <div class="row">
1446    <h1 class="season_title twelve columns">
1447      <a name="season2"></a>
1448      <img src="/assets/titles/classic-season-2-ddef748598744bfe5cb84b350c2aae68960b67b52a37ab841ae8bd87c5d6028d.png" />
1449    </h1>
1450  </div>
1451
1452
1453  <div class="episodes">
1454      <div class="episode">
1455        <a href="/screencasts/catalog/composing-a-unix-command-line">
1456
1457          <div class="row">
1458            <div class="number one column">1</div>
1459            <div class="title six columns" >
1460              Composing a Unix Command Line
1461            </div>
1462            <div class="subtitle five columns">
1463              Unix
1464              <div class="duration">(9 min)</div>
1465            </div>
1466          </div>
1467</a>      </div>
1468      <div class="episode">
1469        <a href="/screencasts/catalog/tar-fork-and-the-tar-pipe">
1470
1471          <div class="row">
1472            <div class="number one column">2</div>
1473            <div class="title six columns" >
1474              Tar, Fork, and the Tar Pipe
1475                <span class="tag free"> free </span>
1476            </div>
1477            <div class="subtitle five columns">
1478              Unix
1479              <div class="duration">(12 min)</div>
1480            </div>
1481          </div>
1482</a>      </div>
1483      <div class="episode">
1484        <a href="/screencasts/catalog/coupling-and-abstraction">
1485
1486          <div class="row">
1487            <div class="number one column">3</div>
1488            <div class="title six columns" >
1489              Coupling and Abstraction
1490            </div>
1491            <div class="subtitle five columns">
1492              Coupling
1493              <div class="duration">(10 min)</div>
1494            </div>
1495          </div>
1496</a>      </div>
1497      <div class="episode">
1498        <a href="/screencasts/catalog/test-isolation-and-refactoring">
1499
1500          <div class="row">
1501            <div class="number one column">4</div>
1502            <div class="title six columns" >
1503              Test Isolation and Refactoring
1504            </div>
1505            <div class="subtitle five columns">
1506              Test Isolation
1507              <div class="duration">(13 min)</div>
1508            </div>
1509          </div>
1510</a>      </div>
1511      <div class="episode">
1512        <a href="/screencasts/catalog/spiking-and-continuous-spiking">
1513
1514          <div class="row">
1515            <div class="number one column">5</div>
1516            <div class="title six columns" >
1517              Spiking and Continuous Spiking
1518            </div>
1519            <div class="subtitle five columns">
1520              Untested Code
1521              <div class="duration">(10 min)</div>
1522            </div>
1523          </div>
1524</a>      </div>
1525      <div class="episode">
1526        <a href="/screencasts/catalog/notes-on-stubbing">
1527
1528          <div class="row">
1529            <div class="number one column">6</div>
1530            <div class="title six columns" >
1531              Notes on Stubbing
1532            </div>
1533            <div class="subtitle five columns">
1534              Stubs &amp; Mocks
1535              <div class="duration">(9 min)</div>
1536            </div>
1537          </div>
1538</a>      </div>
1539      <div class="episode">
1540        <a href="/screencasts/catalog/controller-refactoring-demo-part-1">
1541
1542          <div class="row">
1543            <div class="number one column">7</div>
1544            <div class="title six columns" >
1545              Controller Refactoring Demo Part 1
1546            </div>
1547            <div class="subtitle five columns">
1548              Rails Controllers
1549              <div class="duration">(10 min)</div>
1550            </div>
1551          </div>
1552</a>      </div>
1553      <div class="episode">
1554        <a href="/screencasts/catalog/controller-refactoring-demo-part-2">
1555
1556          <div class="row">
1557            <div class="number one column">8</div>
1558            <div class="title six columns" >
1559              Controller Refactoring Demo Part 2
1560            </div>
1561            <div class="subtitle five columns">
1562              Rails Controllers
1563              <div class="duration">(16 min)</div>
1564            </div>
1565          </div>
1566</a>      </div>
1567      <div class="episode">
1568        <a href="/screencasts/catalog/extracting-from-controller-to-model">
1569
1570          <div class="row">
1571            <div class="number one column">9</div>
1572            <div class="title six columns" >
1573              Extracting From Controller to Model
1574            </div>
1575            <div class="subtitle five columns">
1576              Rails Controllers
1577              <div class="duration">(13 min)</div>
1578            </div>
1579          </div>
1580</a>      </div>
1581      <div class="episode">
1582        <a href="/screencasts/catalog/acceptance-tests">
1583
1584          <div class="row">
1585            <div class="number one column">10</div>
1586            <div class="title six columns" >
1587              Acceptance Tests
1588            </div>
1589            <div class="subtitle five columns">
1590              Types of Tests
1591              <div class="duration">(11 min)</div>
1592            </div>
1593          </div>
1594</a>      </div>
1595      <div class="episode">
1596        <a href="/screencasts/catalog/extracting-from-models">
1597
1598          <div class="row">
1599            <div class="number one column">11</div>
1600            <div class="title six columns" >
1601              Extracting From Models
1602            </div>
1603            <div class="subtitle five columns">
1604              Rails
1605              <div class="duration">(15 min)</div>
1606            </div>
1607          </div>
1608</a>      </div>
1609      <div class="episode">
1610        <a href="/screencasts/catalog/some-vim-tips">
1611
1612          <div class="row">
1613            <div class="number one column">12</div>
1614            <div class="title six columns" >
1615              Some Vim Tips
1616            </div>
1617            <div class="subtitle five columns">
1618              Editors
1619              <div class="duration">(14 min)</div>
1620            </div>
1621          </div>
1622</a>      </div>
1623      <div class="episode">
1624        <a href="/screencasts/catalog/history-spelunking-with-unix">
1625
1626          <div class="row">
1627            <div class="number one column">13</div>
1628            <div class="title six columns" >
1629              History Spelunking With Unix
1630            </div>
1631            <div class="subtitle five columns">
1632              Git
1633              <div class="duration">(12 min)</div>
1634            </div>
1635          </div>
1636</a>      </div>
1637      <div class="episode">
1638        <a href="/screencasts/catalog/performance-of-different-test-sizes">
1639
1640          <div class="row">
1641            <div class="number one column">14</div>
1642            <div class="title six columns" >
1643              Performance of Different Test Sizes
1644            </div>
1645            <div class="subtitle five columns">
1646              Types of Tests
1647              <div class="duration">(11 min)</div>
1648            </div>
1649          </div>
1650</a>      </div>
1651      <div class="episode">
1652        <a href="/screencasts/catalog/simple-bash-script-testing">
1653
1654          <div class="row">
1655            <div class="number one column">15</div>
1656            <div class="title six columns" >
1657              Simple Bash Script Testing
1658            </div>
1659            <div class="subtitle five columns">
1660              The Unix Shell
1661              <div class="duration">(12 min)</div>
1662            </div>
1663          </div>
1664</a>      </div>
1665      <div class="episode">
1666        <a href="/screencasts/catalog/splitting-into-fine-grained-tests">
1667
1668          <div class="row">
1669            <div class="number one column">16</div>
1670            <div class="title six columns" >
1671              Splitting Into Fine Grained Tests
1672            </div>
1673            <div class="subtitle five columns">
1674              TDD
1675              <div class="duration">(9 min)</div>
1676            </div>
1677          </div>
1678</a>      </div>
1679      <div class="episode">
1680        <a href="/screencasts/catalog/which-tests-to-write">
1681
1682          <div class="row">
1683            <div class="number one column">17</div>
1684            <div class="title six columns" >
1685              Which Tests to Write
1686            </div>
1687            <div class="subtitle five columns">
1688              Types of Tests
1689              <div class="duration">(10 min)</div>
1690            </div>
1691          </div>
1692</a>      </div>
1693      <div class="episode">
1694        <a href="/screencasts/catalog/tdding-spikes-away-with-rebase">
1695
1696          <div class="row">
1697            <div class="number one column">18</div>
1698            <div class="title six columns" >
1699              TDDing Spikes Away With Rebase
1700            </div>
1701            <div class="subtitle five columns">
1702              Untested Code
1703              <div class="duration">(11 min)</div>
1704            </div>
1705          </div>
1706</a>      </div>
1707  </div>
1708
1709    <div class="call-to-action">
1710  <a class="button" href="/screencasts/account/subscription">
1711    Subscribe for access ($29/mo) &rarr;
1712</a></div>
1713
1714</div>
1715
1716      <div class="container season">
1717  <div class="row">
1718    <h1 class="season_title twelve columns">
1719      <a name="season1"></a>
1720      <img src="/assets/titles/classic-season-1-6e837d2e9c386dc947daf4f25ce6bd0bb070bee1f3b0a11b49e501294b579f82.png" />
1721    </h1>
1722  </div>
1723
1724
1725  <div class="episodes">
1726      <div class="episode">
1727        <a href="/screencasts/catalog/statistics-over-git-repositories">
1728
1729          <div class="row">
1730            <div class="number one column">1</div>
1731            <div class="title six columns" >
1732              Statistics Over Git Repositories
1733            </div>
1734            <div class="subtitle five columns">
1735              Git
1736              <div class="duration">(14 min)</div>
1737            </div>
1738          </div>
1739</a>      </div>
1740      <div class="episode">
1741        <a href="/screencasts/catalog/how-and-why-to-avoid-nil">
1742
1743          <div class="row">
1744            <div class="number one column">2</div>
1745            <div class="title six columns" >
1746              How and Why to Avoid Nil
1747                <span class="tag free"> free </span>
1748            </div>
1749            <div class="subtitle five columns">
1750              Language Features
1751              <div class="duration">(14 min)</div>
1752            </div>
1753          </div>
1754</a>      </div>
1755      <div class="episode">
1756        <a href="/screencasts/catalog/building-rspec-from-scratch">
1757
1758          <div class="row">
1759            <div class="number one column">3</div>
1760            <div class="title six columns" >
1761              Building RSpec From Scratch
1762            </div>
1763            <div class="subtitle five columns">
1764              TDD
1765              <div class="duration">(15 min)</div>
1766            </div>
1767          </div>
1768</a>      </div>
1769      <div class="episode">
1770        <a href="/screencasts/catalog/source-code-history-integrity">
1771
1772          <div class="row">
1773            <div class="number one column">4</div>
1774            <div class="title six columns" >
1775              Source Code History Integrity
1776            </div>
1777            <div class="subtitle five columns">
1778              Git
1779              <div class="duration">(15 min)</div>
1780            </div>
1781          </div>
1782</a>      </div>
1783      <div class="episode">
1784        <a href="/screencasts/catalog/extracting-domain-objects">
1785
1786          <div class="row">
1787            <div class="number one column">5</div>
1788            <div class="title six columns" >
1789              Extracting Domain Objects
1790            </div>
1791            <div class="subtitle five columns">
1792              Coupling
1793              <div class="duration">(19 min)</div>
1794            </div>
1795          </div>
1796</a>      </div>
1797      <div class="episode">
1798        <a href="/screencasts/catalog/conflicting-principles">
1799
1800          <div class="row">
1801            <div class="number one column">6</div>
1802            <div class="title six columns" >
1803              Conflicting Principles
1804            </div>
1805            <div class="subtitle five columns">
1806              Design &amp; OO
1807              <div class="duration">(12 min)</div>
1808            </div>
1809          </div>
1810</a>      </div>
1811      <div class="episode">
1812        <a href="/screencasts/catalog/growing-a-test-suite">
1813
1814          <div class="row">
1815            <div class="number one column">7</div>
1816            <div class="title six columns" >
1817              Growing a Test Suite
1818            </div>
1819            <div class="subtitle five columns">
1820              TDD
1821              <div class="duration">(14 min)</div>
1822            </div>
1823          </div>
1824</a>      </div>
1825      <div class="episode">
1826        <a href="/screencasts/catalog/processes-and-jobs">
1827
1828          <div class="row">
1829            <div class="number one column">8</div>
1830            <div class="title six columns" >
1831              Processes and Jobs
1832            </div>
1833            <div class="subtitle five columns">
1834              Unix
1835              <div class="duration">(15 min)</div>
1836            </div>
1837          </div>
1838</a>      </div>
1839      <div class="episode">
1840        <a href="/screencasts/catalog/exceptions-and-control-flow">
1841
1842          <div class="row">
1843            <div class="number one column">9</div>
1844            <div class="title six columns" >
1845              Exceptions and Control Flow
1846            </div>
1847            <div class="subtitle five columns">
1848              Language Features
1849              <div class="duration">(11 min)</div>
1850            </div>
1851          </div>
1852</a>      </div>
1853      <div class="episode">
1854        <a href="/screencasts/catalog/fast-tests-with-and-without-rails">
1855
1856          <div class="row">
1857            <div class="number one column">10</div>
1858            <div class="title six columns" >
1859              Fast Tests With and Without Rails
1860            </div>
1861            <div class="subtitle five columns">
1862              Rails
1863              <div class="duration">(16 min)</div>
1864            </div>
1865          </div>
1866</a>      </div>
1867      <div class="episode">
1868        <a href="/screencasts/catalog/git-workflow">
1869
1870          <div class="row">
1871            <div class="number one column">11</div>
1872            <div class="title six columns" >
1873              Git Workflow
1874            </div>
1875            <div class="subtitle five columns">
1876              Git
1877              <div class="duration">(12 min)</div>
1878            </div>
1879          </div>
1880</a>      </div>
1881      <div class="episode">
1882        <a href="/screencasts/catalog/packaging-in-ruby-and-python">
1883
1884          <div class="row">
1885            <div class="number one column">12</div>
1886            <div class="title six columns" >
1887              Packaging in Ruby and Python
1888            </div>
1889            <div class="subtitle five columns">
1890              Python
1891              <div class="duration">(16 min)</div>
1892            </div>
1893          </div>
1894</a>      </div>
1895      <div class="episode">
1896        <a href="/screencasts/catalog/file-navigation-in-vim">
1897
1898          <div class="row">
1899            <div class="number one column">13</div>
1900            <div class="title six columns" >
1901              File Navigation in Vim
1902            </div>
1903            <div class="subtitle five columns">
1904              Editors
1905              <div class="duration">(10 min)</div>
1906            </div>
1907          </div>
1908</a>      </div>
1909      <div class="episode">
1910        <a href="/screencasts/catalog/extracting-objects-in-django">
1911
1912          <div class="row">
1913            <div class="number one column">14</div>
1914            <div class="title six columns" >
1915              Extracting Objects in Django
1916            </div>
1917            <div class="subtitle five columns">
1918              Python
1919              <div class="duration">(15 min)</div>
1920            </div>
1921          </div>
1922</a>      </div>
1923      <div class="episode">
1924        <a href="/screencasts/catalog/quick-and-easy-perf-tests">
1925
1926          <div class="row">
1927            <div class="number one column">15</div>
1928            <div class="title six columns" >
1929              Quick and Easy Perf Tests
1930            </div>
1931            <div class="subtitle five columns">
1932              Types of Tests
1933              <div class="duration">(13 min)</div>
1934            </div>
1935          </div>
1936</a>      </div>
1937      <div class="episode">
1938        <a href="/screencasts/catalog/a-refactoring-story">
1939
1940          <div class="row">
1941            <div class="number one column">16</div>
1942            <div class="title six columns" >
1943              A Refactoring Story
1944            </div>
1945            <div class="subtitle five columns">
1946              Design &amp; OO
1947              <div class="duration">(13 min)</div>
1948            </div>
1949          </div>
1950</a>      </div>
1951      <div class="episode">
1952        <a href="/screencasts/catalog/wrapping-third-party-apis">
1953
1954          <div class="row">
1955            <div class="number one column">17</div>
1956            <div class="title six columns" >
1957              Wrapping Third Party APIs
1958            </div>
1959            <div class="subtitle five columns">
1960              Rails
1961              <div class="duration">(17 min)</div>
1962            </div>
1963          </div>
1964</a>      </div>
1965      <div class="episode">
1966        <a href="/screencasts/catalog/clarity-via-isolated-tests">
1967
1968          <div class="row">
1969            <div class="number one column">18</div>
1970            <div class="title six columns" >
1971              Clarity via Isolated Tests
1972            </div>
1973            <div class="subtitle five columns">
1974              Test Isolation
1975              <div class="duration">(10 min)</div>
1976            </div>
1977          </div>
1978</a>      </div>
1979  </div>
1980
1981    <div class="call-to-action">
1982  <a class="button" href="/screencasts/account/subscription">
1983    Subscribe for access ($29/mo) &rarr;
1984</a></div>
1985
1986</div>
1987
1988  </div>
1989
1990  <div class="container">
1991    <div class="rss_link">
1992      <a href="https://www.destroyallsoftware.com/screencasts/feed">Atom Feed</a>
1993    </div>
1994  </div>
1995</div>
1996
1997
1998    
1999  </div>
2000
2001  <div class="footer_section">
2002    <div class="container">
2003      <div class="row">
2004        <div class="twelve columns">
2005          <div class="links">
2006  <div class="section screencasts_section">
2007    <div class="section_title">Content</div>
2008    <a href="/screencasts/catalog">
2009      Screencasts
2010</a>    <a href="/executeprogram">
2011      Execute Program
2012</a>    <a href="/compendium">
2013      Programmer's Compendium
2014</a>    <a href="/talks">
2015      Conference Talks
2016</a>  </div>
2017
2018  <div class="section account_section">
2019    <div class="section_title">Account</div>
2020      <a href="/screencasts/users/sign_in">
2021        Sign In
2022</a>      <a href="/screencasts/users/sign_up">
2023        Sign Up
2024</a>  </div>
2025
2026  <div class="section company_section">
2027    <div class="section_title">Company</div>
2028    <a href="/blog">
2029      Blog
2030</a>    <a href="/screencasts/contact">
2031      Contact
2032</a>    <a href="/screencasts/privacy_policy">
2033      Privacy Policy
2034</a>    <a href="/screencasts/faq">
2035      FAQ
2036</a>    <a href="/screencasts/eula">
2037      EULA
2038</a>  </div>
2039
2040  <div class="stretch"></div></div>
2041
2042        </div>
2043      </div>
2044    </div>
2045  </div>
2046
2047
2048    
2048<script defer data-domain="destroyallsoftware.com" src="https://plausible.io/js/plausible.js"></script>
2048
2049
2050
2051  
2052</body>
2053</html>
2054
2055
2056

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.