<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
  <head>
    <title>cmdln.net_2008-02-13</title>
    <expansionState>0,1,4,8,23,25,26,32,37,41,44,51,59,60,75,87,99,104,105,113</expansionState>
  </head>
  <body>
    <outline text="Intro" Offset="00:17">
      <outline text="Reminder about Farpoint">
        <outline text="http://www.farpointcon.com/"/>
        <outline text="No news show this Sunday as a consequence"/>
      </outline>
      <outline text="Game review, Infernal Contraption">
        <outline text="http://www.boardgamegeek.com/game/29456"/>
        <outline text="Simple, quick to learn"/>
        <outline text="Idea is you are a goblin engineer building a contraption"/>
        <outline text="Three phases per turn">
          <outline text="Add to your machine"/>
          <outline text="Aim at an opponent and turn on"/>
          <outline text="Draw fresh parts"/>
        </outline>
        <outline text="Last player with parts wins"/>
        <outline text="The contraption effects allow you to restore parts to your pile"/>
        <outline text="Burn parts from your opponents pile"/>
        <outline text="One expansion out, another on the way"/>
        <outline text="Part 2 adds sabotage parts, wreck opponents machine, burn up parts"/>
        <outline text="Rules mostly deal with what parts can go where in the machine"/>
        <outline text="The five year can play though doesn't get strategy"/>
        <outline text="Needs help reading cards"/>
        <outline text="Eight year old gets strategy a little better"/>
        <outline text="Cartoons on the card add a humorous flavor"/>
        <outline text="Totally family safe, may help encourage simple math, reading"/>
      </outline>
    </outline>
    <outline text="Word of the Week: crock" Offset="04:51">
      <outline text="http://catb.org/jargon/html/C/crock.html"/>
    </outline>
    <outline text="Inner Chapter: Debugging" Offset="06:13">
      <outline text="What is a bug?">
        <outline text="A programming error in your own code"/>
        <outline text="An error in someone else's code"/>
        <outline text="An edge case or counter example not considered"/>
        <outline text="Bad user input not handled well"/>
        <outline text="Unusually circumstances, like server outage, not handled well"/>
      </outline>
      <outline text="Bugs are usually multivariate">
        <outline text="The simple, obvious stuff gets tested during development"/>
        <outline text="Even automated unit testing only exercises what hacker anticipated"/>
        <outline text="Fully understanding a bug requires asking questions"/>
        <outline text="Need a way to answer those questions"/>
      </outline>
      <outline text="Debugging is the set of practices used to answer questions about a bug">
        <outline text="Usually with the goal of fixing"/>
        <outline text="Not always, bugs vary in frequency and severity"/>
        <outline text="If a bug is not very bad or happens rarely, may not be worth fixing"/>
      </outline>
      <outline text="Similar to scientific method">
        <outline text="Observe something unusual"/>
        <outline text="Form a hypothesis about how, why it is happening"/>
        <outline text="Craft an experiment">
          <outline text="Send particular inputs into the application"/>
          <outline text="Stress it an a specific way"/>
          <outline text="Change its configuration"/>
        </outline>
        <outline text="Invalidate or confirm hypothesis"/>
        <outline text="Iterate if the hypothesis is invalid"/>
        <outline text="Make a plan if you have a working theory"/>
        <outline text="Important to control the experiment">
          <outline text="Create a base line, first"/>
          <outline text="Only change one variable"/>
          <outline text="If you don't have a baseline, no idea whether things are improving"/>
          <outline text="If you change more than one variable, no idea what causes what difference"/>
          <outline text="Run the experiment repeatedly to smooth out fluctuations"/>
          <outline text="Some applications have one time conditions on startup"/>
          <outline text="Also smoothes out small differences in time if working on performance"/>
        </outline>
      </outline>
      <outline text="Advanced tools">
        <outline text="Logging">
          <outline text="Sometimes called print or printf"/>
          <outline text="printf refers to a C function for formatted output"/>
          <outline text="Usually involves confirming via output statements that a program hit some code"/>
          <outline text="Originally, could only really write to standard out or standard error"/>
          <outline text="Even then, idea of verbosity added some control"/>
          <outline text="Turn on debug, more verbose, get more output"/>
          <outline text="Ability to turn off lets application run faster"/>
          <outline text="Logging refers to built in facility to write directly to a log file"/>
          <outline text="Some systems, like log4j, are very sophisticated, flexible"/>
          <outline text="Many try to optimize performance so it is as close to a non-concern as possible"/>
          <outline text="Logging is useful if you would want to output something anyway"/>
          <outline text="Drawback is it requires code changes to uncover new things"/>
          <outline text="Expensive for watching variables change"/>
          <outline text="After a bug is resolved, do you still need that logging?"/>
        </outline>
        <outline text="Interactive debuggers">
          <outline text="Usually application is run inside another, custom execution environment"/>
          <outline text="Can inspect all data of a running application as it runs"/>
          <outline text="Can pause the application, can step line by line through it"/>
          <outline text="Usually can step into functions, procedures"/>
          <outline text="Break points, places where code pauses, can often have conditions"/>
          <outline text="Changed execution environment can alter program behavior"/>
          <outline text="Debuggers require a way to map to source"/>
          <outline text="Variable, function names usually stripped by compiler"/>
          <outline text="Can usually choose to leave debug symbols in"/>
          <outline text="This can inflate the size of the executable"/>
          <outline text="It often makes de-compiling easier, if secrecy is a concern"/>
        </outline>
        <outline text="Permanent, semi-permanent instrumentation">
          <outline text="Some languages, environments exploring permanent instrumentation"/>
          <outline text="Java has debugging hooks built in"/>
          <outline text="Makes builder debuggers easier"/>
          <outline text="Means a debugger can attach to a regular JVM, as it runs"/>
          <outline text="Less likely to alter runtime behavior"/>
          <outline text="Also means debugger can more easily attach over a network"/>
          <outline text="gdb, traditional debugger, can also support remote debugging"/>
          <outline text="If debugger is detached, little or no overhead"/>
          <outline text="dtrace is similar, allows investigation of running application"/>
          <outline text="Doesn't require intrusive instrumentation"/>
          <outline text="Can investigate on demand, use code like queries, expressions"/>
        </outline>
      </outline>
      <outline text="Like any other practice, need to understand all aspects, variations">
        <outline text="You may not need them for each case"/>
        <outline text="Should be able to make appropriate choices"/>
        <outline text="If you cannot successfully debug, you cannot maintain software"/>
        <outline text="Software spends more of its life in maintenance than any other phase of its life cycle"/>
      </outline>
    </outline>
    <outline text="Outro" Offset="32:58">
      <outline text="Contact me">
        <outline text="Email to feedback@thecommandline.net"/>
        <outline text="Web site at http://thecommandline.net/"/>
        <outline text="IM to command.line@skype"/>
        <outline text="Listener comment line is 240-949-2638"/>
        <outline text="del.icio.us tag is &quot;for:cmdln&quot;"/>
        <outline text="http://twitter.com/cmdln"/>
      </outline>
      <outline text="I'd like to thank libsyn.com for AAC hosting and Wouter de Bie for MP3 hosting"/>
      <outline text="These notes and the show audio and music are covered by a Creative Commons license">
        <outline text="http://creativecommons.org/licenses/by-nc-sa/3.0/us/"/>
        <outline text="Attribution, non-commercial, share alike"/>
      </outline>
    </outline>
  </body>
</opml>
