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 "let". 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) → 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 "from scratch" 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) → 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) → 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'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) → 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 & 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) → 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't Ask 1044 </div> 1045 <div class="subtitle five columns"> 1046 Design & 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 & 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 & 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) → 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 & 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 & 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 & 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) → 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 & 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) → 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 & 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 & 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) → 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.