<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
  <head>
    <title>cmdln.net_2008-02-06</title>
    <expansionState>0,1,12,14,15,20,28,33,42,55,64,72,73,81</expansionState>
  </head>
  <body>
    <outline text="Intro">
      <outline text="Quick review of No More Heroes">
        <outline text="http://en.wikipedia.org/wiki/No_More_Heroes_(video_game)"/>
        <outline text="Not for kids"/>
        <outline text="Some of the humor, gore a bit over the top"/>
        <outline text="Has a certain charm, like Samurai Champloo"/>
        <outline text="Use of motion sensors a bit disappointing"/>
        <outline text="A solid button mashing fighter, though"/>
        <outline text="Very silly special mode, with Engrish mangling of desert names"/>
        <outline text="Riding through the city loses its appeal, a quick jump mode would be nice"/>
        <outline text="Load times are also sometimes a bit intrusive"/>
        <outline text="I like it but it won't appeal to a lot of folks"/>
      </outline>
    </outline>
    <outline text="Word of the Week: crippleware">
      <outline text="http://catb.org/jargon/html/C/crippleware.html"/>
    </outline>
    <outline text="Hacking 101: Aspect Oriented Programming">
      <outline text="What is an aspect?">
        <outline text="http://en.wikipedia.org/wiki/Aspect_oriented_programming"/>
        <outline text="Originally developed by Gregory Kiczales at Xerox PARC"/>
        <outline text="An attempt to improve separation of concern"/>
        <outline text="Encapsulation in OO is also about separating concerns"/>
        <outline text="Many principles attempt to improve separation">
          <outline text="Do not repeat yourself"/>
          <outline text="Single responsiblity"/>
          <outline text="Open, closed"/>
        </outline>
        <outline text="Separation means components overlap as little as possible"/>
        <outline text="The term loosely coupled or decoupled also applies"/>
        <outline text="AOP introduces a cross cutting concern as a new form of encapsulation"/>
        <outline text="Called that because it address some issue that applies across a mix of other types"/>
      </outline>
      <outline text="Where did AOP come from">
        <outline text="Logical extension of duck typing"/>
        <outline text="Close to categories in Smalltalk"/>
        <outline text="Code independent of a class' state"/>
        <outline text="Category, aspect operates across all types, fulfilling some independent concern"/>
      </outline>
      <outline text="Most common/popular implementation, AspectJ">
        <outline text="Bytecode re-engineering of Java"/>
        <outline text="Introduces lower level semantics"/>
        <outline text="An aspect is the encapsulation of a cross cutting concerns"/>
        <outline text="Join points are where they apply to existing code"/>
        <outline text="Advice is additional behavior as applied from the aspect to the existing object"/>
        <outline text="Point cut is a query, a way of specify where to inject a join point"/>
        <outline text="Join points seem more generalizable"/>
        <outline text="A common example of a join point is a method entrance/exit or a member read/write"/>
      </outline>
      <outline text="Limitations">
        <outline text="Common specific examples logging, security, transactions"/>
        <outline text="Some of these cannot be separated all the time"/>
        <outline text="How can a generic piece of code always know where to start a transaction?"/>
        <outline text="Requires more complex cut points or an overall more remedial design"/>
        <outline text="These examples also often have to do with tooling, not application intelligence"/>
        <outline text="Think AOP is a good approach for a container, services"/>
        <outline text="Doesn't make as much sense for business rules, core application logic"/>
        <outline text="Proponents argue removal of cross-cutting concerns increases readability"/>
        <outline text="I am concerned about added cost of debugging"/>
        <outline text="Surprises in behavior because of non-local concerns"/>
        <outline text="At some point, concerns have to become at least minimally tangled"/>
        <outline text="Otherwise, perfectly de-coupled components never interact, never do anything"/>
      </outline>
      <outline text="Why I think OO makes more sense">
        <outline text="OO is an easier to understand metaphor"/>
        <outline text="People are good at dealing with objects"/>
        <outline text="Understand their relationships, how two things may or may not work together"/>
        <outline text="AOP has similar promise"/>
        <outline text="But finding obvious examples is harder"/>
        <outline text="The temptation is to characterize a cross cutting concern as just another object"/>
        <outline text="Can certainly get similar benefit with well defined interfaces, contracts, simple behavorial code"/>
        <outline text="I think this re-inforces my point about limiting its use"/>
      </outline>
      <outline text="Like dynamism, other languages approach AOP">
        <outline text="Proxies, interceptors"/>
        <outline text="Facilities exist to get at some naturally arise join points"/>
        <outline text="Some systems, like Java EE, reverse the join point, allowing a component author to declare rather than requiring an external point cut"/>
        <outline text="Of course, AOP is implemented in existing languages, like C++ was original in C"/>
        <outline text="The fact that no language fully embraces AOP questions how generally applicable"/>
        <outline text="Good to be aware of what it is, the problems it can better solve"/>
        <outline text="As always, need to be careful of golden hammer"/>
      </outline>
    </outline>
    <outline text="Outro">
      <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>
