<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Ed at Work</title>
    <link>http://www.ejball.com/EdAtWork/</link>
    <description>Thoughts from the office by Ed Ball</description>
    <copyright>Ed Ball</copyright>
    <lastBuildDate>Fri, 28 Mar 2008 15:48:34 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.8.5223.0</generator>
    <managingEditor>ed@libronix.com</managingEditor>
    <webMaster>ed@libronix.com</webMaster>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=bb22ba9a-ba84-45c7-adf9-abb5d5715560</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,bb22ba9a-ba84-45c7-adf9-abb5d5715560.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,bb22ba9a-ba84-45c7-adf9-abb5d5715560.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=bb22ba9a-ba84-45c7-adf9-abb5d5715560</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      The second edition of <a href="http://www.amazon.com/dp/0596102070">Programming .NET
      Components</a> by Juval Löwy was a decent book on .NET techniques, though I found
      myself unconvinced by much of his advice. In particular, Juval is a big fan of interface-based
      programming, but doesn’t spend much time explaining the “benefits of interface-based
      programming” (p. 50). I find myself happy to have left it behind with COM. But perhaps
      some of this advice works better in “enterprise” situations than it does in client
      applications?
   </p>
        <p>
      In any case, most of the value for me with books like this comes from learning things
      I didn’t know before, so here’s my list of the highlights (and criticisms):
   </p>
        <ul>
          <li>
         p. 30: He seems to claim that the “global namespace” is really just a top-level namespace
         named “global”, but I don’t find that to be the case.</li>
          <li>
         p. 55: He talks about “programming defensively” by checking to see if an interface
         is supported by an object. “Never assume an object supports an interface.” This advice
         may hold well with interface-based programming, but when you’re programming with concrete
         types, it’s better to throw an exception if you expect an interface that isn’t there.</li>
          <li>
         p. 56: He doesn’t articulate the “advantages” of using interfaces on structs very
         well. In particular, he doesn’t mention that casting a struct to an interface causes
         it to be boxed, in which case you may as well be using a class instead of a struct.</li>
          <li>
         p. 96: Here’s something I didn’t know: «using (null)» is legal; it simply does nothing
         at the end of the using block.</li>
          <li>
         p. 98: He has his own “dispose pattern,” but doesn’t seem to know that there’s a <a href="http://code.logos.com/blog/2008/02/the_dispose_pattern.html">standard
         dispose pattern</a> (or should explain why he doesn’t use it).</li>
          <li>
         p. 111: A SolutionInfo.cs file that is shared among all projects of a solution is
         a great idea that we’re using in our solutions at the office.</li>
          <li>
         p. 143: “You should always publish [events] inside a try/catch block” that eats the
         exceptions. I tend to put that responsibility on the client; ignoring exceptions is
         never healthy in the long run.</li>
          <li>
         p. 149: System.ComponentModel.EventHandlerList is a handy way to support large numbers
         of events without storing an individual delegate for each of them.</li>
          <li>
         p. 181: I didn’t realize that the AsyncWaitHandle of an IAsyncResult may not be released
         until the handle is garbage collected. I don’t agree with his advice to explicitly
         close the AsyncWaitHandle, though, because AsyncWaitHandle is often lazy-loaded; if
         the handle hasn’t been created, you’ll create it just to close it. Better to just
         leave it alone; some IAsyncResult implementations are smart enough to close the handle
         automatically when you call EndXxx.</li>
          <li>
         p. 198: He advises against setting IsBackground to true on a Thread; I agree. “You
         shouldn’t count on .NET to kill your background threads for you.”</li>
          <li>
         p. 204: I learned about “synchronization domains” (which are nothing like “synchronization
         contexts”) and “context-bound objects” – it reminds me a lot of COM apartments. Maybe
         someday I’ll find a use for them.</li>
          <li>
         p. 215: He unfortunately encourages the generally discouraged practice of locking
         “this” for synchronizing instance members and locking “typeof(ThisClass)” for static
         methods.</li>
          <li>
         p. 250: He jumps through a lot of hoops to make sure that raising an event can’t throw
         a null reference exception; I had never considered the problem of possible inlining.
         A good reason to avoid thread-safe events altogether, but I’d definitely use
         the <a href="http://code.logos.com/blog/2008/03/assigning_to_c_events.html">do-nothing
         delegate</a> trick before using a MethodImpl attribute to suppress inlining.</li>
          <li>
         p. 255: I forget that “managed threads” aren’t guaranteed to be actual individual
         physical threads.</li>
          <li>
         p. 263: Events can use ISynchronizeInvoke to raise events on the proper thread for
         a client with thread affinity.</li>
          <li>
         p. 268: I had forgotten about the XxxAsync/XxxCompleted/CancelAsync pattern provided
         by web service proxy classes.</li>
        </ul>
        <p>
      I stopped reading carefully at this point – the rest of the material escaped my interest.
      To conclude this review, I’ll not discourage you from reading the book, but there
      are lots of other .NET books that you should read first.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=bb22ba9a-ba84-45c7-adf9-abb5d5715560" />
      </body>
      <title>Book Review: Programming .NET Components, 2nd Edition</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,bb22ba9a-ba84-45c7-adf9-abb5d5715560.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2008/03/28/BookReviewProgrammingNETComponents2ndEdition.aspx</link>
      <pubDate>Fri, 28 Mar 2008 15:48:34 GMT</pubDate>
      <description>&lt;p&gt;
   The second edition of &lt;a href="http://www.amazon.com/dp/0596102070"&gt;Programming .NET
   Components&lt;/a&gt; by Juval Löwy was a decent book on .NET techniques, though I found
   myself unconvinced by much of his advice. In particular, Juval is a big fan of interface-based
   programming, but doesn’t spend much time explaining the “benefits of interface-based
   programming” (p. 50). I find myself happy to have left it behind with COM. But perhaps
   some of this advice works better in “enterprise” situations than it does in client
   applications?
&lt;/p&gt;
&lt;p&gt;
   In any case, most of the value for me with books like this comes from learning things
   I didn’t know before, so here’s my list of the highlights (and criticisms):
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      p. 30: He seems to claim that the “global namespace” is really just a top-level namespace
      named “global”, but I don’t find that to be the case.&lt;/li&gt;
   &lt;li&gt;
      p. 55: He talks about “programming defensively” by checking to see if an interface
      is supported by an object. “Never assume an object supports an interface.” This advice
      may hold well with interface-based programming, but when you’re programming with concrete
      types, it’s better to throw an exception if you expect an interface that isn’t there.&lt;/li&gt;
   &lt;li&gt;
      p. 56: He doesn’t articulate the “advantages” of using interfaces on structs very
      well. In particular, he doesn’t mention that casting a struct to an interface causes
      it to be boxed, in which case you may as well be using a class instead of a struct.&lt;/li&gt;
   &lt;li&gt;
      p. 96: Here’s something I didn’t know: «using (null)» is legal; it simply does nothing
      at the end of the using block.&lt;/li&gt;
   &lt;li&gt;
      p. 98: He has his own “dispose pattern,” but doesn’t seem to know that there’s a &lt;a href="http://code.logos.com/blog/2008/02/the_dispose_pattern.html"&gt;standard
      dispose pattern&lt;/a&gt; (or should explain why he doesn’t use it).&lt;/li&gt;
   &lt;li&gt;
      p. 111: A SolutionInfo.cs file that is shared among all projects of a solution is
      a great idea that we’re using in our solutions at the office.&lt;/li&gt;
   &lt;li&gt;
      p. 143: “You should always publish [events] inside a try/catch block” that eats the
      exceptions. I tend to put that responsibility on the client; ignoring exceptions is
      never healthy in the long run.&lt;/li&gt;
   &lt;li&gt;
      p. 149: System.ComponentModel.EventHandlerList is a handy way to support large numbers
      of events without storing an individual delegate for each of them.&lt;/li&gt;
   &lt;li&gt;
      p. 181: I didn’t realize that the AsyncWaitHandle of an IAsyncResult may not be released
      until the handle is garbage collected. I don’t agree with his advice to explicitly
      close the AsyncWaitHandle, though, because AsyncWaitHandle is often lazy-loaded; if
      the handle hasn’t been created, you’ll create it just to close it. Better to just
      leave it alone; some IAsyncResult implementations are smart enough to close the handle
      automatically when you call EndXxx.&lt;/li&gt;
   &lt;li&gt;
      p. 198: He advises against setting IsBackground to true on a Thread; I agree. “You
      shouldn’t count on .NET to kill your background threads for you.”&lt;/li&gt;
   &lt;li&gt;
      p. 204: I learned about “synchronization domains” (which are nothing like “synchronization
      contexts”) and “context-bound objects” – it reminds me a lot of COM apartments. Maybe
      someday I’ll find a use for them.&lt;/li&gt;
   &lt;li&gt;
      p. 215: He unfortunately encourages the generally discouraged practice of locking
      “this” for synchronizing instance members and locking “typeof(ThisClass)” for static
      methods.&lt;/li&gt;
   &lt;li&gt;
      p. 250: He jumps through a lot of hoops to make sure that raising an event can’t throw
      a null reference exception; I had never considered the problem of possible inlining.
      A good reason to avoid thread-safe events altogether, but&amp;nbsp;I’d definitely use
      the &lt;a href="http://code.logos.com/blog/2008/03/assigning_to_c_events.html"&gt;do-nothing
      delegate&lt;/a&gt; trick before using a MethodImpl attribute to suppress inlining.&lt;/li&gt;
   &lt;li&gt;
      p. 255: I forget that “managed threads” aren’t guaranteed to be actual individual
      physical threads.&lt;/li&gt;
   &lt;li&gt;
      p. 263: Events can use ISynchronizeInvoke to raise events on the proper thread for
      a client with thread affinity.&lt;/li&gt;
   &lt;li&gt;
      p. 268: I had forgotten about the XxxAsync/XxxCompleted/CancelAsync pattern provided
      by web service proxy classes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   I stopped reading carefully at this point – the rest of the material escaped my interest.
   To conclude this review, I’ll not discourage you from reading the book, but there
   are lots of other .NET books that you should read first.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=bb22ba9a-ba84-45c7-adf9-abb5d5715560" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,bb22ba9a-ba84-45c7-adf9-abb5d5715560.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=cb23b1c7-c320-4f57-b540-969d7f66face</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,cb23b1c7-c320-4f57-b540-969d7f66face.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,cb23b1c7-c320-4f57-b540-969d7f66face.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=cb23b1c7-c320-4f57-b540-969d7f66face</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I’ve read many “how to program with WPF” books, and already have a year of programming
      experience in WPF, so I’m really not able to fairly review books like <a href="http://www.amazon.com/dp/0596510373">Programming
      WPF</a>, by Chris Sells and Ian Griffiths, at least from a beginner’s point of view.
      This book is actually the second edition; I reviewed the <a href="http://www.ejball.com/EdAtWork/2005/10/17/BookReviewProgrammingWindowsPresentationFoundation.aspx">first
      edition</a> way back in October 17, 2005.
   </p>
        <p>
      I’ll start with my conclusion – there is enough important material unique to this
      book that it is a must-have for the shelf of a WPF programmer. Despite its girth (835
      pages), it isn’t able to explain every facet of WPF in detail – in particular, I noticed
      that the Border class was given very little reference. I was worried that I wouldn’t
      find much of anything I didn’t already know, but I was fortunately wrong on that account,
      and will close the review by summarizing the most interesting bits:
   </p>
        <ul>
          <li>
         p. 59: You can safely use data binding with Settings.</li>
          <li>
         p. 136: Explains how focus scope affects command routing.</li>
          <li>
         p. 189: Good information on validation, including custom validation.</li>
          <li>
         p. 226: Grouping with PropertyGroupDescription.</li>
          <li>
         p. 298: Handy table of the template parts used by each control.</li>
          <li>
         p. 336: The ValidateBindings method.</li>
          <li>
         p. 341: You can navigate a NavigationWindow to a string.</li>
          <li>
         p. 379: It’s dangerous to use types as resource keys.</li>
          <li>
         ch. 12: Great information on resources.</li>
          <li>
         p. 432: Working with bitmaps and bitmap effects.</li>
          <li>
         p. 484: Low-level text output.</li>
          <li>
         ch. 15: Outstanding information on printing.</li>
          <li>
         p. 672: Using attached properties to identify template placeholders.</li>
          <li>
         p. 730: Screenshots demonstrating airspace issues with interop.</li>
        </ul>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=cb23b1c7-c320-4f57-b540-969d7f66face" />
      </body>
      <title>Book Review: Programming WPF</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,cb23b1c7-c320-4f57-b540-969d7f66face.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2007/09/19/BookReviewProgrammingWPF.aspx</link>
      <pubDate>Wed, 19 Sep 2007 16:32:18 GMT</pubDate>
      <description>&lt;p&gt;
   I’ve read many “how to program with WPF” books, and already have a year of programming
   experience in WPF, so I’m really not able to fairly review books like &lt;a href="http://www.amazon.com/dp/0596510373"&gt;Programming
   WPF&lt;/a&gt;, by Chris Sells and Ian Griffiths, at least from a beginner’s point of view.
   This book is actually the second edition; I reviewed the &lt;a href="http://www.ejball.com/EdAtWork/2005/10/17/BookReviewProgrammingWindowsPresentationFoundation.aspx"&gt;first
   edition&lt;/a&gt; way back in October 17, 2005.
&lt;/p&gt;
&lt;p&gt;
   I’ll start with my conclusion – there is enough important material unique to this
   book that it is a must-have for the shelf of a WPF programmer. Despite its girth (835
   pages), it isn’t able to explain every facet of WPF in detail – in particular, I noticed
   that the Border class was given very little reference. I was worried that I wouldn’t
   find much of anything I didn’t already know, but I was fortunately wrong on that account,
   and will close the review by summarizing the most interesting bits:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      p. 59: You can safely use data binding with Settings.&lt;/li&gt;
   &lt;li&gt;
      p. 136: Explains how focus scope affects command routing.&lt;/li&gt;
   &lt;li&gt;
      p. 189: Good information on validation, including custom validation.&lt;/li&gt;
   &lt;li&gt;
      p. 226: Grouping with PropertyGroupDescription.&lt;/li&gt;
   &lt;li&gt;
      p. 298: Handy table of the template parts used by each control.&lt;/li&gt;
   &lt;li&gt;
      p. 336: The ValidateBindings method.&lt;/li&gt;
   &lt;li&gt;
      p. 341: You can navigate a NavigationWindow to a string.&lt;/li&gt;
   &lt;li&gt;
      p. 379: It’s dangerous to use types as resource keys.&lt;/li&gt;
   &lt;li&gt;
      ch. 12: Great information on resources.&lt;/li&gt;
   &lt;li&gt;
      p. 432: Working with bitmaps and bitmap effects.&lt;/li&gt;
   &lt;li&gt;
      p. 484: Low-level text output.&lt;/li&gt;
   &lt;li&gt;
      ch. 15: Outstanding information on printing.&lt;/li&gt;
   &lt;li&gt;
      p. 672: Using attached properties to identify template placeholders.&lt;/li&gt;
   &lt;li&gt;
      p. 730: Screenshots demonstrating airspace issues with interop.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=cb23b1c7-c320-4f57-b540-969d7f66face" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,cb23b1c7-c320-4f57-b540-969d7f66face.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=0bc9ab65-b684-4986-aa3d-c1b840bc3980</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,0bc9ab65-b684-4986-aa3d-c1b840bc3980.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,0bc9ab65-b684-4986-aa3d-c1b840bc3980.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=0bc9ab65-b684-4986-aa3d-c1b840bc3980</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/dp/1590597826">Pro WPF</a>, by Matthew MacDonald, is
      quite impressive both in its breadth and in its depth. This tome of nearly 1,000 pages
      describes seemingly every feature of WPF with enough detail to actually get something
      done. No book of this size is perfect, but the typos were rare enough to not be distracting,
      and the writing was easy to read and comprehend. Even the succession of chapters is
      logical enough to allow sequential reading through the book, despite the varied topics.
   </p>
        <p>
      Even if you’re not of a mind to read the entire book cover to cover as I did, you’ll
      still want this book as a reference for topics that you won’t find discussed in the
      other WPF books, including how to build a custom view for a ListView, the many options
      for implementing printing in your application, how to create and use classes derived
      directly from Visual, etc. Highly recommended.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=0bc9ab65-b684-4986-aa3d-c1b840bc3980" />
      </body>
      <title>Book Review: Pro WPF</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,0bc9ab65-b684-4986-aa3d-c1b840bc3980.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2007/07/03/BookReviewProWPF.aspx</link>
      <pubDate>Tue, 03 Jul 2007 17:26:45 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/dp/1590597826"&gt;Pro WPF&lt;/a&gt;, by Matthew MacDonald, is
   quite impressive both in its breadth and in its depth. This tome of nearly 1,000 pages
   describes seemingly every feature of WPF with enough detail to actually get something
   done. No book of this size is perfect, but the typos were rare enough to not be distracting,
   and the writing was easy to read and comprehend. Even the succession of chapters is
   logical enough to allow sequential reading through the book, despite the varied topics.
&lt;/p&gt;
&lt;p&gt;
   Even if you’re not of a mind to read the entire book cover to cover as I did, you’ll
   still want this book as a reference for topics that you won’t find discussed in the
   other WPF books, including how to build a custom view for a ListView, the many options
   for implementing printing in your application, how to create and use classes derived
   directly from Visual, etc. Highly recommended.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=0bc9ab65-b684-4986-aa3d-c1b840bc3980" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,0bc9ab65-b684-4986-aa3d-c1b840bc3980.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=e56b97cc-770f-4573-89a5-18613ffd9e47</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,e56b97cc-770f-4573-89a5-18613ffd9e47.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,e56b97cc-770f-4573-89a5-18613ffd9e47.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=e56b97cc-770f-4573-89a5-18613ffd9e47</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/dp/1400082463">Dreaming in Code</a>, by Scott Rosenberg,
      is an outstanding look at the software development process from the perspective of
      a well-funded medium-size open source project that has been in development since 2003.
      This book is compelling from beginning to end, trying to help even the non-technical
      reader understand why software development is so hard. The many difficulties faced
      by this development team were surprisingly (and sometimes disturbingly) familiar.
      Highly recommended for everyone in software, and anyone else who wants to understand
      our world a little bit better.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e56b97cc-770f-4573-89a5-18613ffd9e47" />
      </body>
      <title>Book Review: Dreaming in Code</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,e56b97cc-770f-4573-89a5-18613ffd9e47.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2007/06/25/BookReviewDreamingInCode.aspx</link>
      <pubDate>Mon, 25 Jun 2007 21:22:51 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/dp/1400082463"&gt;Dreaming in Code&lt;/a&gt;, by Scott Rosenberg,
   is an outstanding look at the software development process from the perspective of
   a well-funded medium-size open source project that has been in development since 2003.
   This book is compelling from beginning to end, trying to help even the non-technical
   reader understand why software development is so hard. The many difficulties faced
   by this development team were surprisingly (and sometimes disturbingly) familiar.
   Highly recommended for everyone in software, and anyone else who wants to understand
   our world a little bit better.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e56b97cc-770f-4573-89a5-18613ffd9e47" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,e56b97cc-770f-4573-89a5-18613ffd9e47.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=22b2377d-5600-47da-bf5e-8b1abf2d2783</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,22b2377d-5600-47da-bf5e-8b1abf2d2783.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,22b2377d-5600-47da-bf5e-8b1abf2d2783.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=22b2377d-5600-47da-bf5e-8b1abf2d2783</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/dp/0321440307">The Old New Thing</a>, by Raymond Chen,
      is an entertaining and enlightening collection of articles about Windows technology.
      It is a must-read, particularly if you're not already an avid reader of <a href="http://blogs.msdn.com/oldnewthing/">his
      blog</a> of the same name.
   </p>
        <p>
      I must confess to skipping the 88 pages that comprise chapter 10, "The Inner Workings
      of the Dialog Manager." It has been nearly a decade since I assembled a classic Windows
      dialog box, so the subject simply doesn't hold my interest like it once would have.
      In fact, a lot of the information in this book would have been invaluable 10 years
      ago...
   </p>
        <p>
      The most important chapter in this book is "Taxes," which is a great reminder of the
      little things that a software application should handle properly (fast user switching,
      high DPI displays, etc.).
   </p>
        <p>
      The whole book (aside from chapter 10) is a great read. Even in the brave new world
      of the .NET Framework, WPF, etc., much of this information is still quite relevant.
      Highly recommended.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=22b2377d-5600-47da-bf5e-8b1abf2d2783" />
      </body>
      <title>Book Review: The Old New Thing</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,22b2377d-5600-47da-bf5e-8b1abf2d2783.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2007/06/25/BookReviewTheOldNewThing.aspx</link>
      <pubDate>Mon, 25 Jun 2007 21:21:02 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/dp/0321440307"&gt;The Old New Thing&lt;/a&gt;, by Raymond Chen,
   is an entertaining and enlightening collection of articles about Windows technology.
   It is a must-read, particularly if you're not already an avid reader of &lt;a href="http://blogs.msdn.com/oldnewthing/"&gt;his
   blog&lt;/a&gt; of the same name.
&lt;/p&gt;
&lt;p&gt;
   I must confess to skipping the 88 pages that comprise chapter 10, "The Inner Workings
   of the Dialog Manager." It has been nearly a decade since I assembled a classic Windows
   dialog box, so the subject simply doesn't hold my interest like it once would have.
   In fact, a lot of the information in this book would have been invaluable 10 years
   ago...
&lt;/p&gt;
&lt;p&gt;
   The most important chapter in this book is "Taxes," which is a great reminder of the
   little things that a software application should handle properly (fast user switching,
   high DPI displays, etc.).
&lt;/p&gt;
&lt;p&gt;
   The whole book (aside from chapter 10) is a great read. Even in the brave new world
   of the .NET Framework, WPF, etc., much of this information is still quite relevant.
   Highly recommended.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=22b2377d-5600-47da-bf5e-8b1abf2d2783" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,22b2377d-5600-47da-bf5e-8b1abf2d2783.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=1e7c2312-01d7-4341-a64f-76faecc7ef1c</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,1e7c2312-01d7-4341-a64f-76faecc7ef1c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,1e7c2312-01d7-4341-a64f-76faecc7ef1c.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=1e7c2312-01d7-4341-a64f-76faecc7ef1c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I enjoyed reading (and sometimes skimming) <a href="http://www.amazon.com/dp/0470084111">About
      Face 3: The Essentials of Interaction Design</a>, by Alan Cooper, et al. It is full
      of “design principles,” all of which are neatly listed in the appendix, and most of
      which seem right on target. They serve as an excellent reminder of the things to be
      aiming at when designing a software product.
   </p>
        <p>
      I must take some issue with the very first guideline, though – “Interaction design
      is not guesswork.” It is not purely guesswork, of course, but neither is it an exact
      science. Even with unlimited time, resources, and intelligence, I doubt that we could
      ever get everything “right,” if there is such a thing. Some of his examples of good
      interaction design are questionable, in my mind. But it is good to treat design
      as something that can be done right, if only to keep us from giving up altogether;
      we should do the best we can.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=1e7c2312-01d7-4341-a64f-76faecc7ef1c" />
      </body>
      <title>Book Review: About Face 3</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,1e7c2312-01d7-4341-a64f-76faecc7ef1c.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2007/06/25/BookReviewAboutFace3.aspx</link>
      <pubDate>Mon, 25 Jun 2007 21:18:42 GMT</pubDate>
      <description>&lt;p&gt;
   I enjoyed reading (and sometimes skimming) &lt;a href="http://www.amazon.com/dp/0470084111"&gt;About
   Face 3: The Essentials of Interaction Design&lt;/a&gt;, by Alan Cooper, et al. It is full
   of “design principles,” all of which are neatly listed in the appendix, and most of
   which seem right on target. They serve as an excellent reminder of the things to be
   aiming at when designing a software product.
&lt;/p&gt;
&lt;p&gt;
   I must take some issue with the very first guideline, though – “Interaction design
   is not guesswork.” It is not purely guesswork, of course, but neither is it an exact
   science. Even with unlimited time, resources, and intelligence, I doubt that we could
   ever get everything “right,” if there is such a thing. Some of his examples of good
   interaction design are questionable, in my mind.&amp;nbsp;But it is good to treat design
   as something that can be done right, if only to keep us from giving up altogether;
   we should do the best we can.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=1e7c2312-01d7-4341-a64f-76faecc7ef1c" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,1e7c2312-01d7-4341-a64f-76faecc7ef1c.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=2577ac47-2839-4d44-a415-c2620be4ec5f</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,2577ac47-2839-4d44-a415-c2620be4ec5f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,2577ac47-2839-4d44-a415-c2620be4ec5f.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=2577ac47-2839-4d44-a415-c2620be4ec5f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      The content of <a href="http://www.amazon.com/dp/0470041803">Professional WPF Programming</a> is
      too broad and too shallow, giving only a glimpse of various aspects of WPF and related
      technologies (Expression Blend, WCF, and .NET Security). If you are completely unfamiliar
      with these technologies, this book might give you a nice overview, but I don’t expect
      I’ll be picking this book up again.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=2577ac47-2839-4d44-a415-c2620be4ec5f" />
      </body>
      <title>Book Review: Professional WPF Programming</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,2577ac47-2839-4d44-a415-c2620be4ec5f.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2007/05/11/BookReviewProfessionalWPFProgramming.aspx</link>
      <pubDate>Fri, 11 May 2007 22:22:52 GMT</pubDate>
      <description>&lt;p&gt;
   The content of &lt;a href="http://www.amazon.com/dp/0470041803"&gt;Professional WPF Programming&lt;/a&gt; is
   too broad and too shallow, giving only a glimpse of various aspects of WPF and related
   technologies (Expression Blend, WCF, and .NET Security). If you are completely unfamiliar
   with these technologies, this book might give you a nice overview, but I don’t expect
   I’ll be picking this book up again.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=2577ac47-2839-4d44-a415-c2620be4ec5f" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,2577ac47-2839-4d44-a415-c2620be4ec5f.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=e39cda6a-820a-46db-85de-a02e790c3090</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,e39cda6a-820a-46db-85de-a02e790c3090.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,e39cda6a-820a-46db-85de-a02e790c3090.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=e39cda6a-820a-46db-85de-a02e790c3090</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Yet another excellent WPF book is <a href="http://www.amazon.com/dp/0321374479">Essential
      Windows Presentation Foundation</a> by Chris Anderson. Having read a number of WPF
      books, and already having considerable experience on the platform, it is hard for
      me to judge how well the book would fare for beginners, but my instinct is that some
      concepts are introduced without much explanation, which might make things difficult
      for a newbie.
   </p>
        <p>
      Being one of the architects of WPF gives Mr. Anderson’s words more authority than
      other WPF books; even better, he uses his inside knowledge to help us understand some
      of the deep concepts of WPF. Of course, I found myself wanting more – more depth on
      the subjects that he did cover, and more breadth to help with the subjects he didn’t
      cover. I highly recommend this book, though you might wait to read it until you’ve
      made it through those of <a href="http://www.ejball.com/EdAtWork/2006/11/06/BookReviewApplicationsCodeMarkup.aspx">Petzold</a> and <a href="http://www.ejball.com/EdAtWork/2007/01/26/BookReviewWindowsPresentationFoundationUnleashed.aspx">Nathan</a>.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e39cda6a-820a-46db-85de-a02e790c3090" />
      </body>
      <title>Book Review: Essential Windows Presentation Foundation</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,e39cda6a-820a-46db-85de-a02e790c3090.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2007/05/11/BookReviewEssentialWindowsPresentationFoundation.aspx</link>
      <pubDate>Fri, 11 May 2007 22:19:25 GMT</pubDate>
      <description>&lt;p&gt;
   Yet another excellent WPF book is &lt;a href="http://www.amazon.com/dp/0321374479"&gt;Essential
   Windows Presentation Foundation&lt;/a&gt; by Chris Anderson. Having read a number of WPF
   books, and already having considerable experience on the platform, it is hard for
   me to judge how well the book would fare for beginners, but my instinct is that some
   concepts are introduced without much explanation, which might make things difficult
   for a newbie.
&lt;/p&gt;
&lt;p&gt;
   Being one of the architects of WPF gives Mr. Anderson’s words more authority than
   other WPF books; even better, he uses his inside knowledge to help us understand some
   of the deep concepts of WPF. Of course, I found myself wanting more – more depth on
   the subjects that he did cover, and more breadth to help with the subjects he didn’t
   cover. I highly recommend this book, though you might wait to read it until you’ve
   made it through those of &lt;a href="http://www.ejball.com/EdAtWork/2006/11/06/BookReviewApplicationsCodeMarkup.aspx"&gt;Petzold&lt;/a&gt; and &lt;a href="http://www.ejball.com/EdAtWork/2007/01/26/BookReviewWindowsPresentationFoundationUnleashed.aspx"&gt;Nathan&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e39cda6a-820a-46db-85de-a02e790c3090" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,e39cda6a-820a-46db-85de-a02e790c3090.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=9e731966-0472-4771-b478-6a4815f0fbfd</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,9e731966-0472-4771-b478-6a4815f0fbfd.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,9e731966-0472-4771-b478-6a4815f0fbfd.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=9e731966-0472-4771-b478-6a4815f0fbfd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Considering how little information there is out there on WPF, it is no surprise that
      I eagerly read <a href="http://www.amazon.com/Windows-Presentation-Foundation-Unleashed-WPF/dp/0672328917">Windows
      Presentation Foundation Unleashed</a> by Adam Nathan, especially considering how much
      I appreciated his previous book on <a href="http://www.ejball.com/EdAtWork/2004/01/29/BookReviewNETAndCOMTheCompleteInteroperabilityGuide.aspx">.NET/COM
      interop</a>. I was hoping for more depth and less breadth, but I think I'll have to
      wait for someone to write "WPF Internals" for that. Otherwise, this book was quite
      good; I especially enjoyed the full color code samples and screenshots. This book
      makes a good companion to <a href="http://www.ejball.com/EdAtWork/2006/11/06/BookReviewApplicationsCodeMarkup.aspx">Petzold's
      book</a>, since it teaches different things and takes a different approach. I certainly
      recommend it to all WPF programmers.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=9e731966-0472-4771-b478-6a4815f0fbfd" />
      </body>
      <title>Book Review: Windows Presentation Foundation Unleashed</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,9e731966-0472-4771-b478-6a4815f0fbfd.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2007/01/26/BookReviewWindowsPresentationFoundationUnleashed.aspx</link>
      <pubDate>Fri, 26 Jan 2007 17:10:46 GMT</pubDate>
      <description>&lt;p&gt;
   Considering how little information there is out there on WPF, it is no surprise that
   I eagerly read &lt;a href="http://www.amazon.com/Windows-Presentation-Foundation-Unleashed-WPF/dp/0672328917"&gt;Windows
   Presentation Foundation Unleashed&lt;/a&gt; by Adam Nathan, especially considering how much
   I appreciated his previous book on &lt;a href="http://www.ejball.com/EdAtWork/2004/01/29/BookReviewNETAndCOMTheCompleteInteroperabilityGuide.aspx"&gt;.NET/COM
   interop&lt;/a&gt;. I was hoping for more depth and less breadth, but I think I'll have to
   wait for someone to write "WPF Internals" for that. Otherwise, this book was quite
   good; I especially enjoyed the full color code samples and screenshots. This book
   makes a good companion to &lt;a href="http://www.ejball.com/EdAtWork/2006/11/06/BookReviewApplicationsCodeMarkup.aspx"&gt;Petzold's
   book&lt;/a&gt;, since it teaches different things and takes a different approach. I certainly
   recommend it to all WPF programmers.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=9e731966-0472-4771-b478-6a4815f0fbfd" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,9e731966-0472-4771-b478-6a4815f0fbfd.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=c8b0c677-8b0f-4037-b410-cff1d8cbee01</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,c8b0c677-8b0f-4037-b410-cff1d8cbee01.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,c8b0c677-8b0f-4037-b410-cff1d8cbee01.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=c8b0c677-8b0f-4037-b410-cff1d8cbee01</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      It probably isn't really fair for me to review <a href="http://www.amazon.com/Why-Software-Sucks-What-About/dp/0321466756">Why
      Software Sucks... and What You Can Do About It</a>, by David Platt, since he's not
      writing this book for programmers, but rather for the users of our software. I didn't
      enjoy the book as much as I had hoped, partially because it's rather more crass than
      I would like. Still, the book gives good information -- consumers do need to be convinced
      that bad user interface isn't their fault, and they need to be encouraged to punish
      the bad and reward the good with their dollars and feedback.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=c8b0c677-8b0f-4037-b410-cff1d8cbee01" />
      </body>
      <title>Book Review: Why Software Sucks...</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,c8b0c677-8b0f-4037-b410-cff1d8cbee01.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2007/01/26/BookReviewWhySoftwareSucks.aspx</link>
      <pubDate>Fri, 26 Jan 2007 17:06:01 GMT</pubDate>
      <description>&lt;p&gt;
   It probably isn't really fair for me to review &lt;a href="http://www.amazon.com/Why-Software-Sucks-What-About/dp/0321466756"&gt;Why
   Software Sucks... and What You Can Do About It&lt;/a&gt;, by David Platt, since he's not
   writing this book for programmers, but rather for the users of our software. I didn't
   enjoy the book as much as I had hoped, partially because it's rather more crass than
   I would like. Still, the book gives good information -- consumers do need to be convinced
   that bad user interface isn't their fault, and they need to be encouraged to punish
   the bad and reward the good with their dollars and feedback.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=c8b0c677-8b0f-4037-b410-cff1d8cbee01" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,c8b0c677-8b0f-4037-b410-cff1d8cbee01.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=d5323424-11f7-4efc-9877-f63166c4a274</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,d5323424-11f7-4efc-9877-f63166c4a274.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,d5323424-11f7-4efc-9877-f63166c4a274.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=d5323424-11f7-4efc-9877-f63166c4a274</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I am eagerly reading everything I can about WPF, the new application framework
      from Microsoft, so I looked forward to receiving my copy of <a href="http://www.amazon.com/Foundations-WPF-Introduction-Presentation-Foundation/dp/1590597605">Foundations
      of WPF</a>, by Laurence Moroney. Unfortunately, I was very disappointed in this short
      book of barely 300 pages. It is merely a brief introduction to WPF, especially considering
      that more than half of the content consists of trivial source code examples and huge
      grayscale screenshots. Top it off with the fact that the text was written well before
      WPF shipped and you'll find yourself much better off reading the <a href="http://www.ejball.com/EdAtWork/2006/11/06/BookReviewApplicationsCodeMarkup.aspx">other</a><a href="http://www.ejball.com/EdAtWork/2005/10/17/BookReviewProgrammingWindowsPresentationFoundation.aspx">two</a> WPF
      books again.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=d5323424-11f7-4efc-9877-f63166c4a274" />
      </body>
      <title>Book Review: Foundations of WPF</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,d5323424-11f7-4efc-9877-f63166c4a274.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/12/05/BookReviewFoundationsOfWPF.aspx</link>
      <pubDate>Tue, 05 Dec 2006 15:55:18 GMT</pubDate>
      <description>&lt;p&gt;
   I am eagerly&amp;nbsp;reading everything I can about WPF, the new application framework
   from Microsoft, so I looked forward to receiving my copy of &lt;a href="http://www.amazon.com/Foundations-WPF-Introduction-Presentation-Foundation/dp/1590597605"&gt;Foundations
   of WPF&lt;/a&gt;, by Laurence Moroney. Unfortunately, I was very disappointed in this short
   book of barely 300 pages. It is merely a brief introduction to WPF, especially considering
   that more than half of the content consists of trivial source code examples and huge
   grayscale screenshots. Top it off with the fact that the text was written well before
   WPF shipped and you'll find yourself much better off reading the &lt;a href="http://www.ejball.com/EdAtWork/2006/11/06/BookReviewApplicationsCodeMarkup.aspx"&gt;other&lt;/a&gt; &lt;a href="http://www.ejball.com/EdAtWork/2005/10/17/BookReviewProgrammingWindowsPresentationFoundation.aspx"&gt;two&lt;/a&gt; WPF
   books again.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=d5323424-11f7-4efc-9877-f63166c4a274" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,d5323424-11f7-4efc-9877-f63166c4a274.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=767ae36c-d1db-4f52-bff0-c5fc735361ae</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,767ae36c-d1db-4f52-bff0-c5fc735361ae.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,767ae36c-d1db-4f52-bff0-c5fc735361ae.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=767ae36c-d1db-4f52-bff0-c5fc735361ae</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Just over three years ago, I <a href="http://www.ejball.com/EdAtWork/2003/09/15/BookReviewInSearchOfStupidity.aspx">wrote
      a review</a> on the first edition of <a href="http://www.amazon.com/Search-Stupidity-Twenty-Marketing-Disasters/dp/1590597214">In
      Search of Stupidity</a>, by Merrill R. Chapman. Fortunately, I remember few specifics
      from books that I’ve read in the past, so I was able to enjoy reading the second edition
      without much déjà vu. Like the first edition, this book is an entertaining (and brutal)
      look at the history of the high-tech industry. I enjoyed the newer material – it isn’t
      often that you read a printed book with events that occurred only a few months ago.
      The second edition also includes some explicit analysis near the end of the book.
      If his analyses don’t help you improve your high-tech business, fear of being featured
      in the third edition probably will.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=767ae36c-d1db-4f52-bff0-c5fc735361ae" />
      </body>
      <title>Book Review: In Search of Stupidity, Second Edition</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,767ae36c-d1db-4f52-bff0-c5fc735361ae.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/11/14/BookReviewInSearchOfStupiditySecondEdition.aspx</link>
      <pubDate>Tue, 14 Nov 2006 16:27:48 GMT</pubDate>
      <description>&lt;p&gt;
   Just over three years ago, I &lt;a href="http://www.ejball.com/EdAtWork/2003/09/15/BookReviewInSearchOfStupidity.aspx"&gt;wrote
   a review&lt;/a&gt; on the first edition of&amp;nbsp;&lt;a href="http://www.amazon.com/Search-Stupidity-Twenty-Marketing-Disasters/dp/1590597214"&gt;In
   Search of Stupidity&lt;/a&gt;, by Merrill R. Chapman. Fortunately, I remember few specifics
   from books that I’ve read in the past, so I was able to enjoy reading the second edition
   without much déjà vu. Like the first edition, this book is an entertaining (and brutal)
   look at the history of the high-tech industry. I enjoyed the newer material – it isn’t
   often that you read a printed book with events that occurred only a few months ago.
   The second edition also includes some explicit analysis near the end of the book.
   If his analyses don’t help you improve your high-tech business, fear of being featured
   in the third edition probably will.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=767ae36c-d1db-4f52-bff0-c5fc735361ae" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,767ae36c-d1db-4f52-bff0-c5fc735361ae.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=d170c113-aa62-4a0d-b46c-af095a68b5a6</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,d170c113-aa62-4a0d-b46c-af095a68b5a6.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,d170c113-aa62-4a0d-b46c-af095a68b5a6.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=d170c113-aa62-4a0d-b46c-af095a68b5a6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.charlespetzold.com/wpf/">Applications = Code + Markup</a> is another
      outstanding programming book by Charles Petzold. This book is all about WPF (the Microsoft
      Windows Presentation Foundation), which is Microsoft’s next-generation API for building
      client applications on Windows.
   </p>
        <p>
      I was all set to give this book a glowing review, but I was distracted by another
      project and wasn’t able to finish the book until recently. Fortunately, another reviewer
      beat me to it and said everything I was going to try to say:
   </p>
        <p>
          <a href="http://blogs.msdn.com/karstenj/archive/2006/08/31/733708.aspx">http://blogs.msdn.com/karstenj/archive/2006/08/31/733708.aspx</a>
        </p>
        <p>
      What can I add to that? Be sure to check out <a href="http://www.charlespetzold.com/blog/2006/09/120140.html">chapter
      32</a>, an online chapter about 3-D in WPF. <a href="http://www.charlespetzold.com/blog/blog.xml">Petzold’s
      blog</a> has other nuggests of WPF knowledge as well. Most importantly, check
      out the <a href="http://www.charlespetzold.com/wpf/">book’s Web site</a>, which links
      to sample code, sample applications, and expertly maintained errata, to which I was
      happy to contribute.
   </p>
        <p>
      My only complaint about the book would be the lack of section headings, though it
      certainly forces you to pay attention while you’re reading. Well, I could also complain
      that WPF could use another thirty chapters – we have a lot more to learn about this
      cool new technology.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=d170c113-aa62-4a0d-b46c-af095a68b5a6" />
      </body>
      <title>Book Review: Applications = Code + Markup</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,d170c113-aa62-4a0d-b46c-af095a68b5a6.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/11/06/BookReviewApplicationsCodeMarkup.aspx</link>
      <pubDate>Mon, 06 Nov 2006 21:08:08 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.charlespetzold.com/wpf/"&gt;Applications = Code + Markup&lt;/a&gt; is another
   outstanding programming book by Charles Petzold. This book is all about WPF (the Microsoft
   Windows Presentation Foundation), which is Microsoft’s next-generation API for building
   client applications on Windows.
&lt;/p&gt;
&lt;p&gt;
   I was all set to give this book a glowing review, but I was distracted by another
   project and wasn’t able to finish the book until recently. Fortunately, another reviewer
   beat me to it and said everything I was going to try to say:
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://blogs.msdn.com/karstenj/archive/2006/08/31/733708.aspx"&gt;http://blogs.msdn.com/karstenj/archive/2006/08/31/733708.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
   What can I add to that? Be sure to check out &lt;a href="http://www.charlespetzold.com/blog/2006/09/120140.html"&gt;chapter
   32&lt;/a&gt;, an online chapter about 3-D in WPF. &lt;a href="http://www.charlespetzold.com/blog/blog.xml"&gt;Petzold’s
   blog&lt;/a&gt;&amp;nbsp;has other nuggests of WPF knowledge as well. Most importantly, check
   out the &lt;a href="http://www.charlespetzold.com/wpf/"&gt;book’s Web site&lt;/a&gt;, which links
   to sample code, sample applications, and expertly maintained errata, to which I was
   happy to contribute.
&lt;/p&gt;
&lt;p&gt;
   My only complaint about the book would be the lack of section headings, though it
   certainly forces you to pay attention while you’re reading. Well, I could also complain
   that WPF could use another thirty chapters – we have a lot more to learn about this
   cool new technology.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=d170c113-aa62-4a0d-b46c-af095a68b5a6" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,d170c113-aa62-4a0d-b46c-af095a68b5a6.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=9072e59a-5709-45ae-a03d-db7ce709c929</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,9072e59a-5709-45ae-a03d-db7ce709c929.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,9072e59a-5709-45ae-a03d-db7ce709c929.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=9072e59a-5709-45ae-a03d-db7ce709c929</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I just finished skimming <a href="http://www.amazon.com/Pro-C-2005-NET-2-0/dp/1590594193">Pro
      C# 2005 and the .NET 2.0 Platform, Third Edition</a>, by Andrew Troelsen. Since I
      didn’t read it properly, I can’t give it a fair review – I guess I’ve read one too
      many C# books. I didn’t notice anything too surprising, except for the chapter on
      developing dynamic assemblies with IL, at the end of which he apologizes for not having
      room to describe the more sane CodeDOM approach.
   </p>
        <p>
      Overall, the breadth of this book is certainly impressive, but the depth is not there.
      A number of areas seemed to suffer from small misunderstandings. Furthermore, the
      attempt to include everything but the kitchen sink only makes more obvious the technologies
      that didn’t make the cut.
   </p>
        <p>
      This book might be valuable for an experienced programmer that is approaching the
      C# world for the first time, but I’m afraid I didn’t find it very interesting.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=9072e59a-5709-45ae-a03d-db7ce709c929" />
      </body>
      <title>Book Review: Pro C# 2005 and the .NET 2.0 Platform, Third Edition</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,9072e59a-5709-45ae-a03d-db7ce709c929.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/08/29/BookReviewProC2005AndTheNET20PlatformThirdEdition.aspx</link>
      <pubDate>Tue, 29 Aug 2006 18:17:55 GMT</pubDate>
      <description>&lt;p&gt;
   I just finished skimming &lt;a href="http://www.amazon.com/Pro-C-2005-NET-2-0/dp/1590594193"&gt;Pro
   C# 2005 and the .NET 2.0 Platform, Third Edition&lt;/a&gt;, by Andrew Troelsen. Since I
   didn’t read it properly, I can’t give it a fair review – I guess I’ve read one too
   many C# books. I didn’t notice anything too surprising, except for the chapter on
   developing dynamic assemblies with IL, at the end of which he apologizes for not having
   room to describe the more sane CodeDOM approach.
&lt;/p&gt;
&lt;p&gt;
   Overall, the breadth of this book is certainly impressive, but the depth is not there.
   A number of areas seemed to suffer from small misunderstandings. Furthermore, the
   attempt to include everything but the kitchen sink only makes more obvious the technologies
   that didn’t make the cut.
&lt;/p&gt;
&lt;p&gt;
   This book might be valuable for an experienced programmer that is approaching the
   C# world for the first time, but I’m afraid I didn’t find it very interesting.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=9072e59a-5709-45ae-a03d-db7ce709c929" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,9072e59a-5709-45ae-a03d-db7ce709c929.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=8724d15b-7113-4538-b266-8132ff11c3a9</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,8724d15b-7113-4538-b266-8132ff11c3a9.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,8724d15b-7113-4538-b266-8132ff11c3a9.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=8724d15b-7113-4538-b266-8132ff11c3a9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I made it through the 1,210 pages of <a href="http://www.amazon.com/gp/product/1590594967">Pro
      ASP.NET 2.0 in C# 2005</a> (by Matthew MacDonald and Mario Szpuszta) without nearly
      as much skimming as I thought I’d have to do. This book provides amazing breadth and
      depth in its description of ASP.NET and related technologies. Not only was it an interesting
      read from start to finish, but it will also serve as an excellent reference in the
      future. I highly recommend it to any intermediate ASP.NET developers.
   </p>
        <p>
      Of course, the book is not without problems. Aside from various errors in the source
      code, there were other noteworthy confusions:
   </p>
        <ul>
          <li>
         There is no static Page.IsPostBack method (page 78) or Page.FindControl method (page
         88). The Control class has a Page property that can make it seem so. 
      </li>
          <li>
         The examples should always HtmlEncode to underscore the importance of escaping HTML
         markup. 
      </li>
          <li>
         They have a limited understanding of regular expressions, e.g. [\w| ]* should be [\w
         ]* (page 699). 
      </li>
          <li>
         Integrated Windows Authentication can work with Firefox (page 755).</li>
        </ul>
        <p>
      The book does not make the mistake of focusing on Visual Studio to the detriment of
      understanding the actual technologies, but the authors are sometimes a little too
      fond of it. I hope they will understand if there are some readers who “still write
      HTML pages by hand” (page 25) and who “need the HTML view” (page 32).
   </p>
        <p>
      I took a few notes as I read, so here are a few of the interesting things that I learned:
   </p>
        <ul>
          <li>
         XHTML rendering can be disabled. (76) 
      </li>
          <li>
         The ASP.NET Development Helper looks interesting. (100) 
      </li>
          <li>
         HTML server controls support limited events (ServerClick, ServerChange) and don’t
         have to be inside a &lt;form runat='server'&gt;. (113, 119) 
      </li>
          <li>
         HttpRuntime.UnloadAppDomain restarts the Web app. (153) 
      </li>
          <li>
         global.asax supports lots of events. (156) 
      </li>
          <li>
         Custom configuration sections can be defined in App_Code. (174) 
      </li>
          <li>
         You can trim view state in a list control. (205) 
      </li>
          <li>
         Static properties are preferred to application state. (225) 
      </li>
          <li>
         $ expressions bind to app settings and connection strings. (298) 
      </li>
          <li>
         aspnet_compiler can be used to precompile a Web app. (653) 
      </li>
          <li>
         There’s a wizard interface for adding membership tables to a SQL database. (714) 
      </li>
          <li>
         The login user controls can be fully customized with layout templates. (729) 
      </li>
          <li>
         LoginView is interesting, and works with roles. (793) 
      </li>
          <li>
         Custom control prefixes can be reused, and can be defined in web.config. (902) 
      </li>
          <li>
         You can easily write your own templated controls! (930) 
      </li>
          <li>
         Request validation can be disabled in web.config. (989) 
      </li>
          <li>
         Web service method results can easily be cached. (1120) 
      </li>
          <li>
         Exceptions raised from Web services are rethrown as SoapExceptions. (1139) 
      </li>
          <li>
         Web service methods can be asynchronous “fire-and-forget.” (1185)</li>
        </ul>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=8724d15b-7113-4538-b266-8132ff11c3a9" />
      </body>
      <title>Book Review: Pro ASP.NET 2.0 in C# 2005</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,8724d15b-7113-4538-b266-8132ff11c3a9.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/08/28/BookReviewProASPNET20InC2005.aspx</link>
      <pubDate>Mon, 28 Aug 2006 16:21:37 GMT</pubDate>
      <description>&lt;p&gt;
   I made it through the 1,210 pages of &lt;a href="http://www.amazon.com/gp/product/1590594967"&gt;Pro
   ASP.NET 2.0 in C# 2005&lt;/a&gt; (by Matthew MacDonald and Mario Szpuszta) without nearly
   as much skimming as I thought I’d have to do. This book provides amazing breadth and
   depth in its description of ASP.NET and related technologies. Not only was it an interesting
   read from start to finish, but it will also serve as an excellent reference in the
   future. I highly recommend it to any intermediate ASP.NET developers.
&lt;/p&gt;
&lt;p&gt;
   Of course, the book is not without problems. Aside from various errors in the source
   code, there were other noteworthy confusions:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      There is no static Page.IsPostBack method (page 78) or Page.FindControl method (page
      88). The Control class has a Page property that can make it seem so. 
   &lt;li&gt;
      The examples should always HtmlEncode to underscore the importance of escaping HTML
      markup. 
   &lt;li&gt;
      They have a limited understanding of regular expressions, e.g. [\w| ]* should be [\w
      ]* (page 699). 
   &lt;li&gt;
      Integrated Windows Authentication can work with Firefox (page 755).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   The book does not make the mistake of focusing on Visual Studio to the detriment of
   understanding the actual technologies, but the authors are sometimes a little too
   fond of it. I hope they will understand if there are some readers who “still write
   HTML pages by hand” (page 25) and who “need the HTML view” (page 32).
&lt;/p&gt;
&lt;p&gt;
   I took a few notes as I read, so here are a few of the interesting things that I learned:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      XHTML rendering can be disabled. (76) 
   &lt;li&gt;
      The ASP.NET Development Helper looks interesting. (100) 
   &lt;li&gt;
      HTML server controls support limited events (ServerClick, ServerChange) and don’t
      have to be inside a &amp;lt;form runat='server'&amp;gt;. (113, 119) 
   &lt;li&gt;
      HttpRuntime.UnloadAppDomain restarts the Web app. (153) 
   &lt;li&gt;
      global.asax supports lots of events. (156) 
   &lt;li&gt;
      Custom configuration sections can be defined in App_Code. (174) 
   &lt;li&gt;
      You can trim view state in a list control. (205) 
   &lt;li&gt;
      Static properties are preferred to application state. (225) 
   &lt;li&gt;
      $ expressions bind to app settings and connection strings. (298) 
   &lt;li&gt;
      aspnet_compiler can be used to precompile a Web app. (653) 
   &lt;li&gt;
      There’s a wizard interface for adding membership tables to a SQL database. (714) 
   &lt;li&gt;
      The login user controls can be fully customized with layout templates. (729) 
   &lt;li&gt;
      LoginView is interesting, and works with roles. (793) 
   &lt;li&gt;
      Custom control prefixes can be reused, and can be defined in web.config. (902) 
   &lt;li&gt;
      You can easily write your own templated controls! (930) 
   &lt;li&gt;
      Request validation can be disabled in web.config. (989) 
   &lt;li&gt;
      Web service method results can easily be cached. (1120) 
   &lt;li&gt;
      Exceptions raised from Web services are rethrown as SoapExceptions. (1139) 
   &lt;li&gt;
      Web service methods can be asynchronous “fire-and-forget.” (1185)&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=8724d15b-7113-4538-b266-8132ff11c3a9" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,8724d15b-7113-4538-b266-8132ff11c3a9.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=e08fd42b-474d-452f-8fa0-df06d3deacd3</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,e08fd42b-474d-452f-8fa0-df06d3deacd3.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,e08fd42b-474d-452f-8fa0-df06d3deacd3.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=e08fd42b-474d-452f-8fa0-df06d3deacd3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/gp/product/0735621535">Programming Microsoft Windows
      Forms</a>, by Charles Petzold, is a great book for programmers that want to learn
      about the cool new stuff in Windows Forms 2.0, but are already familiar with Windows
      development using the .NET Framework and C#. If you’re a complete newbie, you might
      want to start with the prequel to this book, the 1,200 page <a href="http://www.amazon.com/gp/product/0735613702">Programming
      Windows with C#</a>, also by Petzold.
   </p>
        <p>
      One of the best parts about this book is that it hardly talks about Visual Studio
      – it really is important to understand these libraries before you can effectively
      use the leaky abstractions of the Visual Studio designers.
   </p>
        <p>
      The coolest new features of Windows Forms 2.0 are the dynamic layout features – automatic
      sizing, auto scaling, anchoring, docking, flow layout, table layout, etc. This book
      describes them nicely.
   </p>
        <p>
      The descriptions of the controls were interesting, if brief, and without enough screenshots.
      I learned something about the <strong>LinkLabel</strong> control – I always assumed
      it implemented a label whose entire content had to be a single link, but it actually
      supports multiple links and text wrapping.
   </p>
        <p>
      The <strong>ControlExplorer</strong> application is fun – you can install it via ClickOnce
      from <a href="http://www.charlespetzold.com/winforms/index.html">http://www.charlespetzold.com/winforms/index.html</a>.
      It allows you to play with all of the controls available with Windows Forms 2.0.
   </p>
        <p>
      I also enjoyed reading about data binding. It isn’t as well done as the data binding
      support in WPF, but it looks usable.
   </p>
        <p>
      In any case, if you are planning on writing a Windows Forms application with C# 2.0
      any time soon, I recommend that you pick up this book.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e08fd42b-474d-452f-8fa0-df06d3deacd3" />
      </body>
      <title>Book Review: Programming Microsoft Windows Forms</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,e08fd42b-474d-452f-8fa0-df06d3deacd3.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/08/17/BookReviewProgrammingMicrosoftWindowsForms.aspx</link>
      <pubDate>Thu, 17 Aug 2006 17:15:14 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/gp/product/0735621535"&gt;Programming Microsoft Windows
   Forms&lt;/a&gt;, by Charles Petzold, is a great book for programmers that want to learn
   about the cool new stuff in Windows Forms 2.0, but are already familiar with Windows
   development using the .NET Framework and C#. If you’re a complete newbie, you might
   want to start with the prequel to this book, the 1,200 page &lt;a href="http://www.amazon.com/gp/product/0735613702"&gt;Programming
   Windows with C#&lt;/a&gt;, also by Petzold.
&lt;/p&gt;
&lt;p&gt;
   One of the best parts about this book is that it hardly talks about Visual Studio
   – it really is important to understand these libraries before you can effectively
   use the leaky abstractions of the Visual Studio designers.
&lt;/p&gt;
&lt;p&gt;
   The coolest new features of Windows Forms 2.0 are the dynamic layout features – automatic
   sizing, auto scaling, anchoring, docking, flow layout, table layout, etc. This book
   describes them nicely.
&lt;/p&gt;
&lt;p&gt;
   The descriptions of the controls were interesting, if brief, and without enough screenshots.
   I learned something about the &lt;strong&gt;LinkLabel&lt;/strong&gt; control – I always assumed
   it implemented a label whose entire content had to be a single link, but it actually
   supports multiple links and text wrapping.
&lt;/p&gt;
&lt;p&gt;
   The &lt;strong&gt;ControlExplorer&lt;/strong&gt; application is fun – you can install it via ClickOnce
   from &lt;a href="http://www.charlespetzold.com/winforms/index.html"&gt;http://www.charlespetzold.com/winforms/index.html&lt;/a&gt;.
   It allows you to play with all of the controls available with Windows Forms 2.0.
&lt;/p&gt;
&lt;p&gt;
   I also enjoyed reading about data binding. It isn’t as well done as the data binding
   support in WPF, but it looks usable.
&lt;/p&gt;
&lt;p&gt;
   In any case, if you are planning on writing a Windows Forms application with C# 2.0
   any time soon, I recommend that you pick up this book.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e08fd42b-474d-452f-8fa0-df06d3deacd3" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,e08fd42b-474d-452f-8fa0-df06d3deacd3.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=00b9308f-3cec-4dbd-bbe8-d6a474ee8a6d</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,00b9308f-3cec-4dbd-bbe8-d6a474ee8a6d.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,00b9308f-3cec-4dbd-bbe8-d6a474ee8a6d.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=00b9308f-3cec-4dbd-bbe8-d6a474ee8a6d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/gp/product/0596008031">Designing Interfaces</a>, by
      Jenifer Tidwell, was an enjoyable book that gives names, descriptions, screenshots,
      and rationale for most of the user interface patterns that you have ever seen. It
      seems to be good reference material for designing a new user interface, and should
      help ensure that you aren't forgetting a useful pattern.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=00b9308f-3cec-4dbd-bbe8-d6a474ee8a6d" />
      </body>
      <title>Book Review: Designing Interfaces</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,00b9308f-3cec-4dbd-bbe8-d6a474ee8a6d.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/08/16/BookReviewDesigningInterfaces.aspx</link>
      <pubDate>Wed, 16 Aug 2006 14:47:16 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/gp/product/0596008031"&gt;Designing Interfaces&lt;/a&gt;, by
   Jenifer Tidwell, was an enjoyable book that gives names, descriptions, screenshots,
   and rationale for most of the user interface patterns that you have ever seen. It
   seems to be good reference material for designing a new user interface, and should
   help ensure that you aren't forgetting a useful pattern.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=00b9308f-3cec-4dbd-bbe8-d6a474ee8a6d" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,00b9308f-3cec-4dbd-bbe8-d6a474ee8a6d.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=7027455e-069a-4ff4-9523-eb7affcf5245</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,7027455e-069a-4ff4-9523-eb7affcf5245.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,7027455e-069a-4ff4-9523-eb7affcf5245.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=7027455e-069a-4ff4-9523-eb7affcf5245</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/gp/product/1593270569">Write Portable Code: An Introduction
      to Developing Software for Multiple Platforms</a>, by Brian Hook, is a short book
      with 18 short chapters describing the facets of computer hardware and software that
      can affect the portability of code. As the subtitle indicates, this is an “introduction”
      to writing portable code, so there are few specifics but lots of general information.
      This book should be useful if you have no experience in dealing with portable code,
      or if you are learning a low-level language like C or C++, where portability issues
      are more common than with high-level languages like C# or Ruby. Knowing about portability
      issues is important not only for writing portable code but for porting existing code
      to your platform, so I would recommend this book to anyone that doesn't already have
      experience in this area.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=7027455e-069a-4ff4-9523-eb7affcf5245" />
      </body>
      <title>Book Review: Write Portable Code</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,7027455e-069a-4ff4-9523-eb7affcf5245.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/08/14/BookReviewWritePortableCode.aspx</link>
      <pubDate>Mon, 14 Aug 2006 20:00:42 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/gp/product/1593270569"&gt;Write Portable Code: An Introduction
   to Developing Software for Multiple Platforms&lt;/a&gt;, by Brian Hook, is a short book
   with 18 short chapters describing the facets of computer hardware and software that
   can affect the portability of code. As the subtitle indicates, this is an “introduction”
   to writing portable code, so there are few specifics but lots of general information.
   This book should be useful if you have no experience in dealing with portable code,
   or if you are learning a low-level language like C or C++, where portability issues
   are more common than with high-level languages like C# or Ruby. Knowing about portability
   issues is important not only for writing portable code but for porting existing code
   to your platform, so I would recommend this book to anyone that doesn't already have
   experience in this area.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=7027455e-069a-4ff4-9523-eb7affcf5245" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,7027455e-069a-4ff4-9523-eb7affcf5245.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=d2a9f457-3b52-4d65-8fb9-711f6b9b8af5</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,d2a9f457-3b52-4d65-8fb9-711f6b9b8af5.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,d2a9f457-3b52-4d65-8fb9-711f6b9b8af5.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=d2a9f457-3b52-4d65-8fb9-711f6b9b8af5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I didn’t enjoy <a href="http://www.amazon.com/gp/product/1593270658">Write Great Code
      (Volume II: Thinking Low-Level, Writing High-Level)</a>, by Randall Hyde, as much
      as I enjoyed <a href="http://www.ejball.com/EdAtWork/2005/02/10/BookReviewWriteGreatCodeVolumeI.aspx">Volume
      I</a>. The material was mostly either stuff that I already knew, or more detail than
      I needed to know, or even things that I thought were incorrect.
   </p>
        <p>
      Understanding the concepts presented in the book is useful for writing code that won’t
      be needlessly slow. However, the author spends hardly any time reminding the user
      that the sorts of optimizations that he’s talking about should only be considered
      when you have a performance problem, and after you’ve profiled your application and
      established that the area of code in question is the reason for that performance problem.
   </p>
        <p>
      I probably should have paid more attention as he talked about the specifics of 80x86
      assembly, but it just didn’t draw me in, and it is still rather rare that I find myself
      staring at assembly code for any reason.
   </p>
        <p>
      All in all, the book is definitely a “low-level” kind of a book, and thus is less
      useful to a “high-level” programmer of one of the more modern languages. I can’t really
      evaluate the book from the perspective of someone who has never done any “low-level”
      programming (I cut my teeth on C, after all) – this book may be one of the few places
      where “low-level” information can be found at all these days.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=d2a9f457-3b52-4d65-8fb9-711f6b9b8af5" />
      </body>
      <title>Book Review: Write Great Code (Volume II)</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,d2a9f457-3b52-4d65-8fb9-711f6b9b8af5.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/08/03/BookReviewWriteGreatCodeVolumeII.aspx</link>
      <pubDate>Thu, 03 Aug 2006 00:31:09 GMT</pubDate>
      <description>&lt;p&gt;
   I didn’t enjoy &lt;a href="http://www.amazon.com/gp/product/1593270658"&gt;Write Great Code
   (Volume II: Thinking Low-Level, Writing High-Level)&lt;/a&gt;, by Randall Hyde, as much
   as I enjoyed &lt;a href="http://www.ejball.com/EdAtWork/2005/02/10/BookReviewWriteGreatCodeVolumeI.aspx"&gt;Volume
   I&lt;/a&gt;. The material was mostly either stuff that I already knew, or more detail than
   I needed to know, or even things that I thought were incorrect.
&lt;/p&gt;
&lt;p&gt;
   Understanding the concepts presented in the book is useful for writing code that won’t
   be needlessly slow. However, the author spends hardly any time reminding the user
   that the sorts of optimizations that he’s talking about should only be considered
   when you have a performance problem, and after you’ve profiled your application and
   established that the area of code in question is the reason for that performance problem.
&lt;/p&gt;
&lt;p&gt;
   I probably should have paid more attention as he talked about the specifics of 80x86
   assembly, but it just didn’t draw me in, and it is still rather rare that I find myself
   staring at assembly code for any reason.
&lt;/p&gt;
&lt;p&gt;
   All in all, the book is definitely a “low-level” kind of a book, and thus is less
   useful to a “high-level” programmer of one of the more modern languages. I can’t really
   evaluate the book from the perspective of someone who has never done any “low-level”
   programming (I cut my teeth on C, after all) – this book may be one of the few places
   where “low-level” information can be found at all these days.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=d2a9f457-3b52-4d65-8fb9-711f6b9b8af5" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,d2a9f457-3b52-4d65-8fb9-711f6b9b8af5.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=9adf5580-7ad6-4705-82ed-f53669a88067</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,9adf5580-7ad6-4705-82ed-f53669a88067.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,9adf5580-7ad6-4705-82ed-f53669a88067.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=9adf5580-7ad6-4705-82ed-f53669a88067</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I just finished reading <a href="http://www.amazon.com/gp/product/0961392177">Beautiful
      Evidence</a>, by Edward Tufte, the fourth in his series on information presentation.
      I wrote a review of the first three books in the series early last year, but neglected
      to post it here, so I’ll start with that.
   </p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
      Edward R. Tufte has written three excellent books that describe how to effectively
      present information using graphical displays: <a href="http://www.amazon.com/gp/product/096139210X">The
      Visual Display of Quantitative Information</a>, <a href="http://www.amazon.com/gp/product/0961392118">Envisioning
      Information</a>, and <a href="http://www.amazon.com/gp/product/0961392126">Visual
      Explanations</a>.<br />
       <br /><em>The Visual Display of Quantitative Information</em> seeks excellence in statistical
      graphics. Simple tables can mask interesting qualities of large data sets, so graphics
      should be used to effectively communicate the ideas represented by the data. In fact,
      “graphical excellence gives to the viewer the greatest number of ideas in the shortest
      time with the least ink in the smallest space” – within reason, of course.<br />
       <br />
      Is it also important to Tufte that graphics “tell the truth” about the data. It is
      easy – and common – to manipulate graphics in subtle ways to help prove an idea that
      the data doesn't necessarily support. He gives a number of guidelines to help maintain
      graphical integrity.<br />
       <br /><em>Envisioning Information</em> aims to increase graphical excellence in charts and
      maps using the theories of his first book. The book consists mostly of examples of
      graphical excellence and Tufte’s explanations of what makes them so great.<br />
       <br />
      Each chapter focuses on a different category of graphic. Micro/macro readings show
      patterns at a glance, and details when you look closely. Proper layering and separation
      is important to direct attention to the information. Small multiples show similar
      images on the same page for easy comparison. Color has great potential when used properly.
      Finally, combining a map and a time-series is a great way to show a narrative of space
      and time.<br />
       <br /><em>Visual Explanations</em> is about using graphics to help explain complex processes.
      This book has a number of excellent examples of graphical presentations that had great
      success in communicating an important idea, as well as examples of poor presentations
      that were unable to do so – such as the recommendation to not launch the Challenger
      Space Shuttle in extremely cold weather.<br />
       <br />
      All three books are fun to read and beautiful to look at. They provide challenging
      insights into what makes great informational graphics.
   </p>
        </blockquote>
        <p>
      I also enjoyed reading <em>Beautiful Evidence</em>, but I didn’t find it as interesting
      as I had hoped. The material seemed too familiar. The book teaches the same fundamental
      concepts as his previous three books, and uses some of the same examples. Two of the
      chapters were adapted from previously published white papers, which I had already
      read. I also found the end of the book to be rather anticlimactic – the last chapters
      have to do with sculptures, which I unfortunately found uninteresting.
   </p>
        <p>
      Still, if you’ve already read his first three books, you can hardly neglect his fourth.
      I certainly recommend the series as a whole – it is great food for thought.<br /></p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=9adf5580-7ad6-4705-82ed-f53669a88067" />
      </body>
      <title>Books by Edward R. Tufte</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,9adf5580-7ad6-4705-82ed-f53669a88067.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/07/20/BooksByEdwardRTufte.aspx</link>
      <pubDate>Thu, 20 Jul 2006 00:42:52 GMT</pubDate>
      <description>&lt;p&gt;
   I just finished reading&amp;nbsp;&lt;a href="http://www.amazon.com/gp/product/0961392177"&gt;Beautiful
   Evidence&lt;/a&gt;, by Edward Tufte, the fourth in his series on information presentation.
   I wrote a review of the first three books in the series early last year, but neglected
   to post it here, so I’ll start with that.
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
   Edward R. Tufte has written three excellent books that describe how to effectively
   present information using graphical displays: &lt;a href="http://www.amazon.com/gp/product/096139210X"&gt;The
   Visual Display of Quantitative Information&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/0961392118"&gt;Envisioning
   Information&lt;/a&gt;, and &lt;a href="http://www.amazon.com/gp/product/0961392126"&gt;Visual
   Explanations&lt;/a&gt;.&lt;br&gt;
   &amp;nbsp;&lt;br&gt;
   &lt;em&gt;The Visual Display of Quantitative Information&lt;/em&gt; seeks excellence in statistical
   graphics. Simple tables can mask interesting qualities of large data sets, so graphics
   should be used to effectively communicate the ideas represented by the data. In fact,
   “graphical excellence gives to the viewer the greatest number of ideas in the shortest
   time with the least ink in the smallest space” – within reason, of course.&lt;br&gt;
   &amp;nbsp;&lt;br&gt;
   Is it also important to Tufte that graphics “tell the truth” about the data. It is
   easy – and common – to manipulate graphics in subtle ways to help prove an idea that
   the data doesn't necessarily support. He gives a number of guidelines to help maintain
   graphical integrity.&lt;br&gt;
   &amp;nbsp;&lt;br&gt;
   &lt;em&gt;Envisioning Information&lt;/em&gt; aims to increase graphical excellence in charts and
   maps using the theories of his first book. The book consists mostly of examples of
   graphical excellence and Tufte’s explanations of what makes them so great.&lt;br&gt;
   &amp;nbsp;&lt;br&gt;
   Each chapter focuses on a different category of graphic. Micro/macro readings show
   patterns at a glance, and details when you look closely. Proper layering and separation
   is important to direct attention to the information. Small multiples show similar
   images on the same page for easy comparison. Color has great potential when used properly.
   Finally, combining a map and a time-series is a great way to show a narrative of space
   and time.&lt;br&gt;
   &amp;nbsp;&lt;br&gt;
   &lt;em&gt;Visual Explanations&lt;/em&gt; is about using graphics to help explain complex processes.
   This book has a number of excellent examples of graphical presentations that had great
   success in communicating an important idea, as well as examples of poor presentations
   that were unable to do so – such as the recommendation to not launch the Challenger
   Space Shuttle in extremely cold weather.&lt;br&gt;
   &amp;nbsp;&lt;br&gt;
   All three books are fun to read and beautiful to look at. They provide challenging
   insights into what makes great informational graphics.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   I also enjoyed reading &lt;em&gt;Beautiful Evidence&lt;/em&gt;, but I didn’t find it as interesting
   as I had hoped. The material seemed too familiar. The book teaches the same fundamental
   concepts as his previous three books, and uses some of the same examples. Two of the
   chapters were adapted from previously published white papers, which I had already
   read. I also found the end of the book to be rather anticlimactic – the last chapters
   have to do with sculptures, which I unfortunately found uninteresting.
&lt;/p&gt;
&lt;p&gt;
   Still, if you’ve already read his first three books, you can hardly neglect his fourth.
   I certainly recommend the series as a whole – it is great food for thought.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=9adf5580-7ad6-4705-82ed-f53669a88067" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,9adf5580-7ad6-4705-82ed-f53669a88067.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=e518bc0e-0236-449a-8967-e1655ad2833f</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,e518bc0e-0236-449a-8967-e1655ad2833f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,e518bc0e-0236-449a-8967-e1655ad2833f.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=e518bc0e-0236-449a-8967-e1655ad2833f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/gp/product/0764559885">Professional .NET 2.0 Generics</a>,
      by Tod Golding, explains why generics are important to the .NET Framework, explains
      the differences between .NET generics and C++ templates, and describes how generics
      are used in C# and VB.NET. Unfortunately, after the first few chapters the book is
      often difficult to understand, provides incomplete explanations, gives some bad advice,
      and is occasionally incorrect.
   </p>
        <p>
      Thus I can’t recommend this book, though it may still be helpful for those who need
      a basic introduction to generics, or to experienced developers that are looking for
      the occasional nuggets of interest. For example, I wasn’t certain that protected members
      were accessible among all “closed constructed types” of a generic class. I also hadn’t
      explored the ways in which ambiguities can arise with generic method overloads; specifically,
      I didn’t know that potentially ambiguous methods prevent VB.NET from even compiling
      a class, whereas C# will not fail until code attempts to call the ambiguous method.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e518bc0e-0236-449a-8967-e1655ad2833f" />
      </body>
      <title>Book Review: Professional .NET 2.0 Generics</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,e518bc0e-0236-449a-8967-e1655ad2833f.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/07/18/BookReviewProfessionalNET20Generics.aspx</link>
      <pubDate>Tue, 18 Jul 2006 15:27:33 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/gp/product/0764559885"&gt;Professional .NET 2.0 Generics&lt;/a&gt;,
   by Tod Golding, explains why generics are important to the .NET Framework, explains
   the differences between .NET generics and C++ templates, and describes how generics
   are used in C# and VB.NET. Unfortunately, after the first few chapters the book is
   often difficult to understand, provides incomplete explanations, gives some bad advice,
   and is occasionally incorrect.
&lt;/p&gt;
&lt;p&gt;
   Thus I can’t recommend this book, though it may still be helpful for those who need
   a basic introduction to generics, or to experienced developers that are looking for
   the occasional nuggets of interest. For example, I wasn’t certain that protected members
   were accessible among all “closed constructed types” of a generic class. I also hadn’t
   explored the ways in which ambiguities can arise with generic method overloads; specifically,
   I didn’t know that potentially ambiguous methods prevent VB.NET from even compiling
   a class, whereas C# will not fail until code attempts to call the ambiguous method.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e518bc0e-0236-449a-8967-e1655ad2833f" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,e518bc0e-0236-449a-8967-e1655ad2833f.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=6c3595e6-db77-43b8-b212-4315994ea228</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,6c3595e6-db77-43b8-b212-4315994ea228.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,6c3595e6-db77-43b8-b212-4315994ea228.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=6c3595e6-db77-43b8-b212-4315994ea228</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I browsed through <a href="http://www.amazon.com/gp/product/0321303474">The Zen of
      CSS Design</a>, by Dave Shea and Molly E. Holzschlag. It's a beautiful book that describes
      a number of the designs at <a href="http://www.csszengarden.com/">http://www.csszengarden.com/</a>.
      I learned a few things about CSS along the way, but I mostly learned to be glad that
      I'm not responsible for creating nice designs for multiple browsers using only CSS
      on semi-structured content. Even if I were a capable designer, it does not look like
      a fun task. I'm glad that there are people out there that can do it, though; the Web
      would be an uglier place without them.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=6c3595e6-db77-43b8-b212-4315994ea228" />
      </body>
      <title>Book Review: The Zen of CSS Design</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,6c3595e6-db77-43b8-b212-4315994ea228.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/07/10/BookReviewTheZenOfCSSDesign.aspx</link>
      <pubDate>Mon, 10 Jul 2006 21:36:13 GMT</pubDate>
      <description>&lt;p&gt;
   I browsed through &lt;a href="http://www.amazon.com/gp/product/0321303474"&gt;The Zen of
   CSS Design&lt;/a&gt;, by Dave Shea and Molly E. Holzschlag. It's a beautiful book that describes
   a number of the designs at &lt;a href="http://www.csszengarden.com/"&gt;http://www.csszengarden.com/&lt;/a&gt;.
   I learned a few things about CSS along the way, but I mostly learned to be glad that
   I'm not responsible for creating nice designs for multiple browsers using only CSS
   on semi-structured content. Even if I were a capable designer, it does not look like
   a fun task. I'm glad that there are people out there that can do it, though; the Web
   would be an uglier place without them.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=6c3595e6-db77-43b8-b212-4315994ea228" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,6c3595e6-db77-43b8-b212-4315994ea228.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=a63c6f96-e4e5-42cd-a0ec-ead5c5b3480f</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,a63c6f96-e4e5-42cd-a0ec-ead5c5b3480f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,a63c6f96-e4e5-42cd-a0ec-ead5c5b3480f.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=a63c6f96-e4e5-42cd-a0ec-ead5c5b3480f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/gp/product/0735621632">CLR via C#</a>, by Jeffrey Richter,
      provides thorough coverage of the core features of the .NET Framework 2.0. It is a
      great review of information that you’re already familiar with, and is certain to teach
      you some useful things that you didn’t already know. The book is very practical, and
      includes Richter’s often strong opinions on how to properly use the technology, and
      which parts of the framework to avoid entirely. I highly recommend this book to C#
      programmers, regardless of experience – I’ve read a number of books on the CLR, and
      this one held my interest throughout.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=a63c6f96-e4e5-42cd-a0ec-ead5c5b3480f" />
      </body>
      <title>Book Review: CLR via C#</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,a63c6f96-e4e5-42cd-a0ec-ead5c5b3480f.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/05/22/BookReviewCLRViaC.aspx</link>
      <pubDate>Mon, 22 May 2006 15:52:49 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/gp/product/0735621632"&gt;CLR via C#&lt;/a&gt;, by Jeffrey Richter,
   provides thorough coverage of the core features of the .NET Framework 2.0. It is a
   great review of information that you’re already familiar with, and is certain to teach
   you some useful things that you didn’t already know. The book is very practical, and
   includes Richter’s often strong opinions on how to properly use the technology, and
   which parts of the framework to avoid entirely. I highly recommend this book to C#
   programmers, regardless of experience – I’ve read a number of books on the CLR, and
   this one held my interest throughout.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=a63c6f96-e4e5-42cd-a0ec-ead5c5b3480f" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,a63c6f96-e4e5-42cd-a0ec-ead5c5b3480f.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=35edc79f-29e1-413f-8c0e-d72a8d3295f5</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,35edc79f-29e1-413f-8c0e-d72a8d3295f5.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,35edc79f-29e1-413f-8c0e-d72a8d3295f5.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=35edc79f-29e1-413f-8c0e-d72a8d3295f5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/gp/product/0596007124">Head First Design Patterns</a>,
      by Eric Freeman et al, was a nice change of pace from most technical books. The basic
      idea behind “Head First” books is to use lots of pages with pictures and diagrams
      and crazy fonts and humor and exercises to get the information to actually stick in
      your brain. This particular book takes that approach with the most important design
      patterns from the <a href="http://www.amazon.com/gp/product/0201633612">Gang of Four
      book</a>.
   </p>
        <p>
      This book was, at the very least, a good review of those patterns; I think it succeeded
      in helping me remember their names and uses. Specifically, the design patterns described
      are Strategy, Observer, Decorator, Factory Method, Abstract Factory, Singleton, Command,
      Adapter, Façade, Template Method, Iterator, Composite, State, Proxy, and Compound.
      The remaining Gang of Four patterns are each given two pages in the appendix. The
      many examples throughout the book are all in Java, but a C# developer should be able
      to follow along easily.
   </p>
        <p>
      Despite my <a href="http://www.ejball.com/EdAtWork/2006/05/09/TypographicalPetPeeves.aspx">typographical
      issues</a> with the book, I highly recommend it to anyone that wants to learn some
      of the fundamental design patterns in software development.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=35edc79f-29e1-413f-8c0e-d72a8d3295f5" />
      </body>
      <title>Book Review: Head First Design Patterns</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,35edc79f-29e1-413f-8c0e-d72a8d3295f5.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/05/12/BookReviewHeadFirstDesignPatterns.aspx</link>
      <pubDate>Fri, 12 May 2006 20:53:31 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/gp/product/0596007124"&gt;Head First Design Patterns&lt;/a&gt;,
   by Eric Freeman et al, was a nice change of pace from most technical books. The basic
   idea behind “Head First” books is to use lots of pages with pictures and diagrams
   and crazy fonts and humor and exercises to get the information to actually stick in
   your brain. This particular book takes that approach with the most important design
   patterns from the &lt;a href="http://www.amazon.com/gp/product/0201633612"&gt;Gang of Four
   book&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   This book was, at the very least, a good review of those patterns; I think it succeeded
   in helping me remember their names and uses. Specifically, the design patterns described
   are Strategy, Observer, Decorator, Factory Method, Abstract Factory, Singleton, Command,
   Adapter, Façade, Template Method, Iterator, Composite, State, Proxy, and Compound.
   The remaining Gang of Four patterns are each given two pages in the appendix. The
   many examples throughout the book are all in Java, but a C# developer should be able
   to follow along easily.
&lt;/p&gt;
&lt;p&gt;
   Despite my &lt;a href="http://www.ejball.com/EdAtWork/2006/05/09/TypographicalPetPeeves.aspx"&gt;typographical
   issues&lt;/a&gt; with the book, I highly recommend it to anyone that wants to learn some
   of the fundamental design patterns in software development.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=35edc79f-29e1-413f-8c0e-d72a8d3295f5" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,35edc79f-29e1-413f-8c0e-d72a8d3295f5.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=dd3d7607-4e51-47fc-ace4-7d5fbd08da01</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,dd3d7607-4e51-47fc-ace4-7d5fbd08da01.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,dd3d7607-4e51-47fc-ace4-7d5fbd08da01.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=dd3d7607-4e51-47fc-ace4-7d5fbd08da01</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/gp/product/0764571354">Professional .NET Framework
      2.0</a>, by Joe Duffy, contains 600 pages of mostly interesting information about
      the latest release of the .NET Framework. For the most part, the book covers topics
      to an appropriate depth; that is, it generally manages to finish a topic before I
      get tired of it.
   </p>
        <p>
      It is difficult to review a book full of information about a technology that you are
      already experienced in, because you can’t properly evaluate how well the book would
      have taught you that information had you not already known it. My inclination is that
      this book would be fairly inaccessible to someone without reasonable experience in
      a previous release of the .NET Framework and/or the C# language.
   </p>
        <p>
      The book could have used a bit more editing. I had a strong feeling of déjà vu while
      reading about anonymous delegates in chapter 14, so I looked back to chapter 2, where
      I found the pretty much the exact same text.
   </p>
        <p>
      Still, the writing style is good, and I learned some things I hadn’t already learned
      from other sources, so I recommend this book to anyone that wants to fill some of
      the gaps in their knowledge of the .NET framework.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=dd3d7607-4e51-47fc-ace4-7d5fbd08da01" />
      </body>
      <title>Book Review: Professional .NET Framework 2.0</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,dd3d7607-4e51-47fc-ace4-7d5fbd08da01.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/05/08/BookReviewProfessionalNETFramework20.aspx</link>
      <pubDate>Mon, 08 May 2006 21:38:45 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/gp/product/0764571354"&gt;Professional .NET Framework
   2.0&lt;/a&gt;, by Joe Duffy, contains 600 pages of mostly interesting information about
   the latest release of the .NET Framework. For the most part, the book covers topics
   to an appropriate depth; that is, it generally manages to finish a topic before I
   get tired of it.
&lt;/p&gt;
&lt;p&gt;
   It is difficult to review a book full of information about a technology that you are
   already experienced in, because you can’t properly evaluate how well the book would
   have taught you that information had you not already known it. My inclination is that
   this book would be fairly inaccessible to someone without reasonable experience in
   a previous release of the .NET Framework and/or the C# language.
&lt;/p&gt;
&lt;p&gt;
   The book could have used a bit more editing. I had a strong feeling of déjà vu while
   reading about anonymous delegates in chapter 14, so I looked back to chapter 2, where
   I found the pretty much the exact same text.
&lt;/p&gt;
&lt;p&gt;
   Still, the writing style is good, and I learned some things I hadn’t already learned
   from other sources, so I recommend this book to anyone that wants to fill some of
   the gaps in their knowledge of the .NET framework.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=dd3d7607-4e51-47fc-ace4-7d5fbd08da01" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,dd3d7607-4e51-47fc-ace4-7d5fbd08da01.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=e283c53d-0d3a-4221-877b-5f9b812dbc41</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,e283c53d-0d3a-4221-877b-5f9b812dbc41.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,e283c53d-0d3a-4221-877b-5f9b812dbc41.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=e283c53d-0d3a-4221-877b-5f9b812dbc41</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      To truly appreciate <a href="http://www.amazon.com/gp/product/0881791326">The Elements
      of Typographic Style</a>, by Robert Bringhurst, you should probably be a designer
      – someone who can speak the language of aesthetics and art and feeling, etc. A writer
      might also appreciate the book, particularly for its many tips on using typography
      properly on the printed page. Since I am neither designer nor writer, I’m not exactly
      the book’s primary audience, and thus didn’t end up enjoying it as much as I had hoped.
   </p>
        <p>
      Even so, I made it through half the book before I began to skim. The author is clearly
      a man who is madly in love with typography and its impact on the written word. A left-brained
      brute like me can, to a degree, enjoy a well-styled page of prose. Hopefully, reading
      this book will have helped me recognize some of the key features of good typography.
      Like so many critics, I know what I don’t like, so I’m glad that there are people
      who can use the principles in this book to create designs that I don’t “don’t like”.
   </p>
        <p>
          <strong>Update:</strong> Be sure to read <a href="http://www.ejball.com/EdAtWork/CommentView,guid,E283C53D-0D3A-4221-877B-5F9B812DBC41.aspx">Eli's
      comment</a>, which eloquently explains how I managed to read the first half of the
      book. :-)
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e283c53d-0d3a-4221-877b-5f9b812dbc41" />
      </body>
      <title>Book Review: The Elements of Typographic Style</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,e283c53d-0d3a-4221-877b-5f9b812dbc41.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/04/28/BookReviewTheElementsOfTypographicStyle.aspx</link>
      <pubDate>Fri, 28 Apr 2006 19:18:10 GMT</pubDate>
      <description>&lt;p&gt;
   To truly appreciate &lt;a href="http://www.amazon.com/gp/product/0881791326"&gt;The Elements
   of Typographic Style&lt;/a&gt;, by Robert Bringhurst, you should probably be a designer
   – someone who can speak the language of aesthetics and art and feeling, etc. A writer
   might also appreciate the book, particularly for its many tips on using typography
   properly on the printed page. Since I am neither designer nor writer, I’m not exactly
   the book’s primary audience, and thus didn’t end up enjoying it as much as I had hoped.
&lt;/p&gt;
&lt;p&gt;
   Even so, I made it through half the book before I began to skim. The author is clearly
   a man who is madly in love with typography and its impact on the written word. A left-brained
   brute like me can, to a degree, enjoy a well-styled page of prose. Hopefully, reading
   this book will have helped me recognize some of the key features of good typography.
   Like so many critics, I know what I don’t like, so I’m glad that there are people
   who can use the principles in this book to create designs that I don’t “don’t like”.
&lt;/p&gt;
&lt;p&gt;
   &lt;strong&gt;Update:&lt;/strong&gt; Be sure to read &lt;a href="http://www.ejball.com/EdAtWork/CommentView,guid,E283C53D-0D3A-4221-877B-5F9B812DBC41.aspx"&gt;Eli's
   comment&lt;/a&gt;, which eloquently explains how I managed to read the first half of the
   book. :-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e283c53d-0d3a-4221-877b-5f9b812dbc41" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,e283c53d-0d3a-4221-877b-5f9b812dbc41.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=4ca4f465-ce8f-4757-b52d-d1ae4db180a7</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,4ca4f465-ce8f-4757-b52d-d1ae4db180a7.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,4ca4f465-ce8f-4757-b52d-d1ae4db180a7.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=4ca4f465-ce8f-4757-b52d-d1ae4db180a7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/gp/product/0596526733">XAML in a Nutshell</a>, by Lori
      A. MacVittie, is a “Desktop Quick Reference” for XAML, the XML language used by Windows
      Presentation Foundation. As such, it has minimal explanatory content, consisting primarily
      of short paragraphs documenting each of the elements and attributes supported by XAML.
   </p>
        <p>
      The biggest problem with this book is that it is too early for a XAML reference book.
      The API has changed significantly since the book was written, though it was only released
      last month. Worse yet, I could find no significant errata or book updates on the Web,
      leaving me to regularly question the accuracy of the book as I read.
   </p>
        <p>
      Neither was I impressed by the organization of the book, nor the formatting of the
      reference items, nor the infrequent and/or unnecessary and/or poorly documented screenshots,
      nor the lack of online sample code, nor the errors in the text, nor the missing topics
      (like namespace mapping), nor the lack of information about WPF, the core technology
      behind XAML.
   </p>
        <p>
      In short, I cannot recommend this book. You’ll do much better with a copy of <a href="http://www.ejball.com/EdAtWork/2005/10/17/BookReviewProgrammingWindowsPresentationFoundation.aspx">Programming
      Windows Presentation Foundation</a>, the sample code and change notes on <a href="http://www.sellsbrothers.com/writing/avbook/">that
      book’s Web site</a>, and the documentation that ships with the WPF beta.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=4ca4f465-ce8f-4757-b52d-d1ae4db180a7" />
      </body>
      <title>Book Review: XAML in a Nutshell</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,4ca4f465-ce8f-4757-b52d-d1ae4db180a7.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/04/27/BookReviewXAMLInANutshell.aspx</link>
      <pubDate>Thu, 27 Apr 2006 20:30:34 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/gp/product/0596526733"&gt;XAML in a Nutshell&lt;/a&gt;, by Lori
   A. MacVittie, is a “Desktop Quick Reference” for XAML, the XML language used by Windows
   Presentation Foundation. As such, it has minimal explanatory content, consisting primarily
   of short paragraphs documenting each of the elements and attributes supported by XAML.
&lt;/p&gt;
&lt;p&gt;
   The biggest problem with this book is that it is too early for a XAML reference book.
   The API has changed significantly since the book was written, though it was only released
   last month. Worse yet, I could find no significant errata or book updates on the Web,
   leaving me to regularly question the accuracy of the book as I read.
&lt;/p&gt;
&lt;p&gt;
   Neither was I impressed by the organization of the book, nor the formatting of the
   reference items, nor the infrequent and/or unnecessary and/or poorly documented screenshots,
   nor the lack of online sample code, nor the errors in the text, nor the missing topics
   (like namespace mapping), nor the lack of information about WPF, the core technology
   behind XAML.
&lt;/p&gt;
&lt;p&gt;
   In short, I cannot recommend this book. You’ll do much better with a copy of &lt;a href="http://www.ejball.com/EdAtWork/2005/10/17/BookReviewProgrammingWindowsPresentationFoundation.aspx"&gt;Programming
   Windows Presentation Foundation&lt;/a&gt;, the sample code and change notes on &lt;a href="http://www.sellsbrothers.com/writing/avbook/"&gt;that
   book’s Web site&lt;/a&gt;, and the documentation that ships with the WPF beta.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=4ca4f465-ce8f-4757-b52d-d1ae4db180a7" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,4ca4f465-ce8f-4757-b52d-d1ae4db180a7.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=97cefe47-ddff-47b5-95aa-1e95991d7320</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,97cefe47-ddff-47b5-95aa-1e95991d7320.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,97cefe47-ddff-47b5-95aa-1e95991d7320.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=97cefe47-ddff-47b5-95aa-1e95991d7320</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://regex.info/">Mastering Regular Expressions: Second Edition</a>, by
      Jeffery E. F. Friedl, is an outstanding book about one of the most powerful weapons
      in a programmer’s arsenal. Any time you need to search or manipulate strings of text,
      regular expressions are the first tool that should come to your mind. Regular expressions
      are not only “the simplest thing that could possibly work,” but, crafted properly,
      they will probably be more efficient than any code you would write by hand.
   </p>
        <p>
      This book teaches you not only the basics of regular expressions, but also their advanced
      features, how they work, why knowing how they work is important, and how to write
      regular expressions that will do what you want and exhibit the best performance. The
      book is very well written, very easy to read (except for some of the difficult material
      on optimizing expressions), and has a great mechanism for providing useful exercises
      that I’d love to find in more technical books. (The exercises are rare, but important,
      so you don’t mind trying to solve them. The question is asked in the main flow of
      the text, and followed by a special symbol. The answer to the exercise is in a sidebar
      on the next page, so you can’t easily cheat, and the symbol helps you find your place
      when you turn back.)
   </p>
        <p>
      The first six chapters apply to all “flavors” of regular expressions, and thus are
      required reading for anyone who uses them, from the newest newbie to the most seasoned
      expert. The next three chapters are specifically about Perl, Java, and .NET, respectively.
      I must confess to having skipped the first two, since I am not currently using those
      technologies. The .NET section was good, and has the only reasonable explanation anywhere
      on how to use the cool “brace-matching” feature of .NET regular expressions. It also
      discusses the unique way that .NET regular expressions allow you to examine each capture
      of the same group, a feature that I have found very useful. Still, I wished for C#
      examples rather than VB.NET, and the chapter would have been better if the author
      had a more thorough understanding of the .NET framework.
   </p>
        <p>
      If it isn’t already clear, this is an outstanding book that you must read. Regular
      expressions are incredibly powerful, and even if you already use them here and there,
      you need to start using them to their fullest potential.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=97cefe47-ddff-47b5-95aa-1e95991d7320" />
      </body>
      <title>Book Review: Mastering Regular Expressions</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,97cefe47-ddff-47b5-95aa-1e95991d7320.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2006/01/23/BookReviewMasteringRegularExpressions.aspx</link>
      <pubDate>Mon, 23 Jan 2006 17:27:00 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://regex.info/"&gt;Mastering Regular Expressions: Second Edition&lt;/a&gt;, by
   Jeffery E. F. Friedl, is an outstanding book about one of the most powerful weapons
   in a programmer’s arsenal. Any time you need to search or manipulate strings of text,
   regular expressions are the first tool that should come to your mind. Regular expressions
   are not only “the simplest thing that could possibly work,” but, crafted properly,
   they will probably be more efficient than any code you would write by hand.
&lt;/p&gt;
&lt;p&gt;
   This book teaches you not only the basics of regular expressions, but also their advanced
   features, how they work, why knowing how they work is important, and how to write
   regular expressions that will do what you want and exhibit the best performance. The
   book is very well written, very easy to read (except for some of the difficult material
   on optimizing expressions), and has a great mechanism for providing useful exercises
   that I’d love to find in more technical books. (The exercises are rare, but important,
   so you don’t mind trying to solve them. The question is asked in the main flow of
   the text, and followed by a special symbol. The answer to the exercise is in a sidebar
   on the next page, so you can’t easily cheat, and the symbol helps you find your place
   when you turn back.)
&lt;/p&gt;
&lt;p&gt;
   The first six chapters apply to all “flavors” of regular expressions, and thus are
   required reading for anyone who uses them, from the newest newbie to the most seasoned
   expert. The next three chapters are specifically about Perl, Java, and .NET, respectively.
   I must confess to having skipped the first two, since I am not currently using those
   technologies. The .NET section was good, and has the only reasonable explanation anywhere
   on how to use the cool “brace-matching” feature of .NET regular expressions. It also
   discusses the unique way that .NET regular expressions allow you to examine each capture
   of the same group, a feature that I have found very useful. Still, I wished for C#
   examples rather than VB.NET, and the chapter would have been better if the author
   had a more thorough understanding of the .NET framework.
&lt;/p&gt;
&lt;p&gt;
   If it isn’t already clear, this is an outstanding book that you must read. Regular
   expressions are incredibly powerful, and even if you already use them here and there,
   you need to start using them to their fullest potential.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=97cefe47-ddff-47b5-95aa-1e95991d7320" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,97cefe47-ddff-47b5-95aa-1e95991d7320.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=0f9ff042-1637-4282-91ad-799cafb842d7</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,0f9ff042-1637-4282-91ad-799cafb842d7.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,0f9ff042-1637-4282-91ad-799cafb842d7.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=0f9ff042-1637-4282-91ad-799cafb842d7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/gp/product/0764576100">Professional ASP.NET 2.0</a> provides
      a great overview of ASP.NET 2.0, even for someone with minimal ASP.NET programming
      experience. It is also reasonably well organized for a book written by five people.
      Here are some of the features I learned about:
   </p>
        <ul>
          <li>
         Encrypting Web.config sections (to hide connection strings, etc.)</li>
          <li>
         Easy support for user login and personalization</li>
          <li>
         Automatically building code in the App_Code directory</li>
          <li>
         Cross-page posting (supplies back-reference to previous Page object)</li>
          <li>
         Precompiling the Web application</li>
          <li>
         &lt;asp:Literal Mode="Encode"&gt; (for automatic HTML encoding)</li>
          <li>
         Focus method (sets the default focus for the Web page)</li>
          <li>
         AutoCompleteType (auto-complete support for edit boxes)</li>
          <li>
         OnClientClick event (easy support for client-side click handling)</li>
          <li>
         Lots of ways to do hyperlinks and/or images (Image, ImageButton, ImageMap, Hyperlink,
         etc.)</li>
          <li>
         Lots of ways to render simple lists (DropDownList, ListBox, BulletedList, etc.)</li>
          <li>
         &lt;asp:Xml&gt; (for easy XML transformation)</li>
          <li>
         Master pages (shared content for different pages on the same Web site)</li>
          <li>
         New binding syntax, including XPath binding</li>
          <li>
         HttpContext.Current.Items (for per-request storage)</li>
          <li>
         Using out-of-proc session state during development (to ensure that you can switch
         from in-proc if necessary)</li>
          <li>
         Post-cache substitution (minor additions to otherwise cached pages)</li>
          <li>
         WebPageTraceListener (sends normal trace messages through ASP.NET tracing)</li>
          <li>
         Debugger.Launch (to easily attach the debugger)</li>
          <li>
         System.Net.Mail (for easy e-mail support)</li>
          <li>
         RegisterClientScriptResource (for including .js files from an assembly)</li>
          <li>
         Adding information to Web service SOAP headers (e.g., user credentials)</li>
          <li>
         WebConfigurationManager.AppSettings (easy access to application settings)</li>
          <li>
         Class properties with public getter and more restricted setter</li>
        </ul>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=0f9ff042-1637-4282-91ad-799cafb842d7" />
      </body>
      <title>Book Review: Professional ASP.NET 2.0</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,0f9ff042-1637-4282-91ad-799cafb842d7.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/12/19/BookReviewProfessionalASPNET20.aspx</link>
      <pubDate>Mon, 19 Dec 2005 18:43:44 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/gp/product/0764576100"&gt;Professional ASP.NET 2.0&lt;/a&gt; provides
   a great overview of ASP.NET 2.0, even for someone with minimal ASP.NET programming
   experience. It is also reasonably well organized for a book written by five people.
   Here are some of the features I learned about:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Encrypting Web.config sections (to hide connection strings, etc.)&lt;/li&gt;
   &lt;li&gt;
      Easy support for user login and personalization&lt;/li&gt;
   &lt;li&gt;
      Automatically building code in the App_Code directory&lt;/li&gt;
   &lt;li&gt;
      Cross-page posting (supplies back-reference to previous Page object)&lt;/li&gt;
   &lt;li&gt;
      Precompiling the Web application&lt;/li&gt;
   &lt;li&gt;
      &amp;lt;asp:Literal Mode="Encode"&amp;gt; (for automatic HTML encoding)&lt;/li&gt;
   &lt;li&gt;
      Focus method (sets the default focus for the Web page)&lt;/li&gt;
   &lt;li&gt;
      AutoCompleteType (auto-complete support for edit boxes)&lt;/li&gt;
   &lt;li&gt;
      OnClientClick event (easy support for client-side click handling)&lt;/li&gt;
   &lt;li&gt;
      Lots of ways to do hyperlinks and/or images (Image, ImageButton, ImageMap, Hyperlink,
      etc.)&lt;/li&gt;
   &lt;li&gt;
      Lots of ways to render simple lists (DropDownList, ListBox, BulletedList, etc.)&lt;/li&gt;
   &lt;li&gt;
      &amp;lt;asp:Xml&amp;gt; (for easy XML transformation)&lt;/li&gt;
   &lt;li&gt;
      Master pages (shared content for different pages on the same Web site)&lt;/li&gt;
   &lt;li&gt;
      New binding syntax, including XPath binding&lt;/li&gt;
   &lt;li&gt;
      HttpContext.Current.Items (for per-request storage)&lt;/li&gt;
   &lt;li&gt;
      Using out-of-proc session state during development (to ensure that you can switch
      from in-proc if necessary)&lt;/li&gt;
   &lt;li&gt;
      Post-cache substitution (minor additions to otherwise cached pages)&lt;/li&gt;
   &lt;li&gt;
      WebPageTraceListener (sends normal trace messages through ASP.NET tracing)&lt;/li&gt;
   &lt;li&gt;
      Debugger.Launch (to easily attach the debugger)&lt;/li&gt;
   &lt;li&gt;
      System.Net.Mail (for easy e-mail support)&lt;/li&gt;
   &lt;li&gt;
      RegisterClientScriptResource (for including .js files from an assembly)&lt;/li&gt;
   &lt;li&gt;
      Adding information to Web service SOAP headers (e.g., user credentials)&lt;/li&gt;
   &lt;li&gt;
      WebConfigurationManager.AppSettings (easy access to application settings)&lt;/li&gt;
   &lt;li&gt;
      Class properties with public getter and more restricted setter&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=0f9ff042-1637-4282-91ad-799cafb842d7" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,0f9ff042-1637-4282-91ad-799cafb842d7.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=2c6786f7-8b9f-4405-afc3-6fd8a38d227b</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,2c6786f7-8b9f-4405-afc3-6fd8a38d227b.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,2c6786f7-8b9f-4405-afc3-6fd8a38d227b.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=2c6786f7-8b9f-4405-afc3-6fd8a38d227b</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I really enjoyed reading <a href="http://www.amazon.com/gp/product/0385503865/">The
      Wisdom of Crowds</a>, by James Surowiecki. The premise of the book is that, under
      many circumstances, large groups of people make better decisions than a few experts.
      He argues that the group is even smarter than the smartest individual in the group,
      and provides many good examples. One of the first examples is the counting of jelly
      beans in a jar; the average of all of the guesses will be closer to the truth than
      the closest answer of any individual. Of course, everyone can think of examples where
      crowds (or committees) have made very poor decisions; the book describes the circumstances
      in which groups of people are smarter than individuals.
   </p>
        <p>
      To make good decisions, a group needs <strong>diversity</strong>. A group can know
      as much as all of the individuals in the group put together. Different perspectives
      make it most likely that the best solution will be found, because diversity adds new
      information to the group. (This topic applies directly to hiring practices; by hiring
      people that are different than the people you already have, you're making the group
      even smarter, even if the new people aren't as skilled.)
   </p>
        <p>
      Another requirement is <strong>independence</strong>. The best decisions are made
      by groups of people that aren't simply "following the leader." It is important that
      some members of the group "buck the trend," even if their opinions are wrong, not
      only because the "errors" can average out in the end, but because reserved people
      with good opinions are more likely to speak up if they see others doing so.
   </p>
        <p>
          <strong>Decentralization</strong> feeds both diversity and independence; when people
      are spread out, they are more likely to come up with different solutions. The final
      key component is thus <strong>aggregation</strong>; you need a way to collect all
      of the solutions of all of the members of the group to generate the final answer.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=2c6786f7-8b9f-4405-afc3-6fd8a38d227b" />
      </body>
      <title>Book Review: The Wisdom of Crowds</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,2c6786f7-8b9f-4405-afc3-6fd8a38d227b.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/12/14/BookReviewTheWisdomOfCrowds.aspx</link>
      <pubDate>Wed, 14 Dec 2005 21:55:56 GMT</pubDate>
      <description>&lt;p&gt;
   I really enjoyed reading &lt;a href="http://www.amazon.com/gp/product/0385503865/"&gt;The
   Wisdom of Crowds&lt;/a&gt;, by James Surowiecki. The premise of the book is that, under
   many circumstances, large groups of people make better decisions than a few experts.
   He argues that the group is even smarter than the smartest individual in the group,
   and provides many good examples. One of the first examples is the counting of jelly
   beans in a jar; the average of all of the guesses will be closer to the truth than
   the closest answer of any individual. Of course, everyone can think of examples where
   crowds (or committees) have made very poor decisions; the book describes the circumstances
   in which groups of people are smarter than individuals.
&lt;/p&gt;
&lt;p&gt;
   To make good decisions, a group needs &lt;strong&gt;diversity&lt;/strong&gt;. A group can know
   as much as all of the individuals in the group put together. Different perspectives
   make it most likely that the best solution will be found, because diversity adds new
   information to the group. (This topic applies directly to hiring practices; by hiring
   people that are different than the people you already have, you're making the group
   even smarter, even if the new people aren't as skilled.)
&lt;/p&gt;
&lt;p&gt;
   Another requirement is &lt;strong&gt;independence&lt;/strong&gt;. The best decisions are made
   by groups of people that aren't simply "following the leader." It is important that
   some members of the group "buck the trend," even if their opinions are wrong, not
   only because the "errors" can average out in the end, but because reserved people
   with good opinions are more likely to speak up if they see others doing so.
&lt;/p&gt;
&lt;p&gt;
   &lt;strong&gt;Decentralization&lt;/strong&gt; feeds both diversity and independence; when people
   are spread out, they are more likely to come up with different solutions. The final
   key component is thus &lt;strong&gt;aggregation&lt;/strong&gt;; you need a way to collect all
   of the solutions of all of the members of the group to generate the final answer.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=2c6786f7-8b9f-4405-afc3-6fd8a38d227b" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,2c6786f7-8b9f-4405-afc3-6fd8a38d227b.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=6ef9ba5a-9269-40ff-b5ce-08e8a6c94e9c</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,6ef9ba5a-9269-40ff-b5ce-08e8a6c94e9c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,6ef9ba5a-9269-40ff-b5ce-08e8a6c94e9c.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=6ef9ba5a-9269-40ff-b5ce-08e8a6c94e9c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      How could I avoid reading a book whose title is our favorite mantra at the office?
      Of course, it’s usually used tongue-in-cheek when that’s exactly what we can’t do…
   </p>
        <p>
          <a href="http://pragmaticprogrammer.com/titles/prj/index.html">Ship It! A Practical
      Guide to Successful Software Projects</a> is a “pragmatic” book by Jared Richardson
      and William Gwaltney Jr. It is an easy read with lots of great ideas for improving
      your software development team.
   </p>
        <p>
      The book starts by describing the <strong>infrastructure</strong> necessary to do
      successful software development. Hopefully every programmer out there is using source
      control by now, but there were some specific ideas that caught my eye; the book does
      an outstanding job of justifying them:
   </p>
        <ul>
          <li>
         Programmers should commit changes to source control at least every few days; if that’s
         not possible, they should commit changes to a private folder in the source control
         database.</li>
          <li>
         Creating a build machine should be as easy as getting files from source control and
         running a script. The build process should have no machine-level dependencies.</li>
          <li>
         The build script should run frequently, ideally whenever code is checked in, and should
         include automated tests to help prevent bug regression.</li>
          <li>
         Bug reports and feature requests must be tracked in an easy-to-use database.</li>
        </ul>
        <p>
      The book then talks about <strong>techniques</strong> that help ensure success:
   </p>
        <ul>
          <li>
         The List is a prioritized list of measurable tasks that need to be completed. The
         team has a master list, and each programmer copies items from the team list to their
         individual list.</li>
          <li>
         Each item on the list should have a time estimate. When completed, each item is marked
         as finished, and the actual time is recorded. Time estimates will improve with practice.</li>
          <li>
         Each team needs a tech lead who maintains The List and monitors the direction of the
         team.</li>
          <li>
         The team should have a daily meeting where each person takes a minute or two to describe
         what they’re working on.</li>
          <li>
         No code should be committed to source control without a code review, generally by
         one other developer. Code reviews, like commits, should be frequent.</li>
          <li>
         The team should be able to easily monitor commits to source control.</li>
        </ul>
        <p>
      The book also describes their <strong>process</strong>, called “Tracer Bullet Development.”
      I’m sure I’m missing something, but it doesn’t really seem much like a “process” to
      me; it basically describes a modular way of architecting a product and dividing the
      labor among the modules.
   </p>
        <p>
      Finally, the book reinforces the advice it has given by presenting various common
      problems in the development process and the techniques that are important to solving
      those problems. Much of the advice in this section is on how to incorporate and maintain
      automated testing without too much pain.
   </p>
        <p>
      I highly recommend this book to all software developers, particularly to those in
      leadership positions. I’m hoping that our development team will have the opportunity
      to try out some of these ideas and see improvement as well.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=6ef9ba5a-9269-40ff-b5ce-08e8a6c94e9c" />
      </body>
      <title>Book Review: Ship It!</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,6ef9ba5a-9269-40ff-b5ce-08e8a6c94e9c.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/11/23/BookReviewShipIt.aspx</link>
      <pubDate>Wed, 23 Nov 2005 22:16:50 GMT</pubDate>
      <description>&lt;p&gt;
   How could I avoid reading a book whose title is our favorite mantra at the office?
   Of course, it’s usually used tongue-in-cheek when that’s exactly what we can’t do…
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://pragmaticprogrammer.com/titles/prj/index.html"&gt;Ship It! A Practical
   Guide to Successful Software Projects&lt;/a&gt; is a “pragmatic” book by Jared Richardson
   and William Gwaltney Jr. It is an easy read with lots of great ideas for improving
   your software development team.
&lt;/p&gt;
&lt;p&gt;
   The book starts by describing the &lt;strong&gt;infrastructure&lt;/strong&gt; necessary to do
   successful software development. Hopefully every programmer out there is using source
   control by now, but there were some specific ideas that caught my eye; the book does
   an outstanding job of justifying them:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Programmers should commit changes to source control at least every few days; if that’s
      not possible, they should commit changes to a private folder in the source control
      database.&lt;/li&gt;
   &lt;li&gt;
      Creating a build machine should be as easy as getting files from source control and
      running a script. The build process should have no machine-level dependencies.&lt;/li&gt;
   &lt;li&gt;
      The build script should run frequently, ideally whenever code is checked in, and should
      include automated tests to help prevent bug regression.&lt;/li&gt;
   &lt;li&gt;
      Bug reports and feature requests must be tracked in an easy-to-use database.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   The book then talks about &lt;strong&gt;techniques&lt;/strong&gt; that help ensure success:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      The List is a prioritized list of measurable tasks that need to be completed. The
      team has a master list, and each programmer copies items from the team list to their
      individual list.&lt;/li&gt;
   &lt;li&gt;
      Each item on the list should have a time estimate. When completed, each item is marked
      as finished, and the actual time is recorded. Time estimates will improve with practice.&lt;/li&gt;
   &lt;li&gt;
      Each team needs a tech lead who maintains The List and monitors the direction of the
      team.&lt;/li&gt;
   &lt;li&gt;
      The team should have a daily meeting where each person takes a minute or two to describe
      what they’re working on.&lt;/li&gt;
   &lt;li&gt;
      No code should be committed to source control without a code review, generally by
      one other developer. Code reviews, like commits, should be frequent.&lt;/li&gt;
   &lt;li&gt;
      The team should be able to easily monitor commits to source control.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   The book also describes their &lt;strong&gt;process&lt;/strong&gt;, called “Tracer Bullet Development.”
   I’m sure I’m missing something, but it doesn’t really seem much like a “process” to
   me; it basically describes a modular way of architecting a product and dividing the
   labor among the modules.
&lt;/p&gt;
&lt;p&gt;
   Finally, the book reinforces the advice it has given by presenting various common
   problems in the development process and the techniques that are important to solving
   those problems. Much of the advice in this section is on how to incorporate and maintain
   automated testing without too much pain.
&lt;/p&gt;
&lt;p&gt;
   I highly recommend this book to all software developers, particularly to those in
   leadership positions. I’m hoping that our development team will have the opportunity
   to try out some of these ideas and see improvement as well.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=6ef9ba5a-9269-40ff-b5ce-08e8a6c94e9c" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,6ef9ba5a-9269-40ff-b5ce-08e8a6c94e9c.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=e862fadf-71cc-487b-8ef9-fadbb072ddb8</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,e862fadf-71cc-487b-8ef9-fadbb072ddb8.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,e862fadf-71cc-487b-8ef9-fadbb072ddb8.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=e862fadf-71cc-487b-8ef9-fadbb072ddb8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201310090">Concurrent Programming
      in Java</a>, by Doug Lea, was recommended to me by <a href="http://www.ejball.com/EdAtWork/2005/09/29/FUN302ProgrammingWithConcurrencyPart1.aspx">two</a> <a href="http://www.ejball.com/EdAtWork/2005/09/30/FUN405ProgrammingWithConcurrencyPart2.aspx">presenters</a> at
      the Microsoft PDC 2005 as the best book about concurrent programming for .NET. It
      is an impressive book, and it seems fairly straightforward to translate the concepts
      from the Java world to the .NET Framework.
   </p>
        <p>
      I can’t give this book a completely fair review, because I wasn’t able to finish it.
      The book is divided into four chapters; my current interest in concurrent programming
      was only able to get me through the first two. I don’t doubt that I will find additional
      value in this book the next time I am faced with a difficult concurrency challenge.
   </p>
        <p>
      I really enjoyed the first two chapters, though, as they provide the language for
      discussing concurrent programming. For example, section 1.3 describes the “design
      forces” to consider when designing concurrent software:
   </p>
        <ul>
          <li>
            <strong>Safety</strong> demands that an object is always in a consistent state. Concurrency
         makes it possible for one thread to interfere with the operation of another thread
         acting on the same object, possibly resulting in an inconsistent state. 
      </li>
          <li>
            <strong>Liveness</strong> demands that operations run to completion. Concurrent programming
         can permanently halt progress when two threads are waiting for locks held by the other
         thread, for example. 
      </li>
          <li>
            <strong>Performance</strong> wants operations to run in a timely manner. Concurrency
         support adds overhead that can hurt performance. 
      </li>
          <li>
            <strong>Reusability</strong> wants objects and algorithms to be reusable by different
         parts of the system. Concurrent programming adds a new dimension to the requirements
         of reusable software; specifically, clients must know to what extent a component is
         thread-safe.</li>
        </ul>
        <p>
      Chapter 2 is all about keeping objects in a consistent state by ensuring that two
      threads cannot manipulate the same data at the same time, either by making objects
      immutable, or preventing objects from being accessed by other threads, or by synchronizing
      the use of objects with locks. Understanding of these concepts is crucial to writing
      safely concurrent code.
   </p>
        <p>
      Section 2.2.7 is particularly interesting if you’re not familiar with the concept
      of a “memory model.” Basically, modern compilers and processors can rearrange the
      order in which statements and instructions are executed, as long as the end result
      is the same. This can cause very surprising behavior when one thread is observing
      the activity of another thread. The only practical way to ensure that each thread
      sees what you would expect it to see is to use synchronization; access to shared memory
      should always be protected by a lock.
   </p>
        <p>
      I know that the book has more important concepts; perhaps I’ll make another attempt
      at reading chapter 3 some day. If you’re doing any concurrent programming at all,
      I highly recommend that you see how far you can get.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e862fadf-71cc-487b-8ef9-fadbb072ddb8" />
      </body>
      <title>Book Review: Concurrent Programming in Java</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,e862fadf-71cc-487b-8ef9-fadbb072ddb8.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/27/BookReviewConcurrentProgrammingInJava.aspx</link>
      <pubDate>Thu, 27 Oct 2005 21:01:17 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201310090"&gt;Concurrent Programming
   in Java&lt;/a&gt;, by Doug Lea, was recommended to me by&amp;nbsp;&lt;a href="http://www.ejball.com/EdAtWork/2005/09/29/FUN302ProgrammingWithConcurrencyPart1.aspx"&gt;two&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.ejball.com/EdAtWork/2005/09/30/FUN405ProgrammingWithConcurrencyPart2.aspx"&gt;presenters&lt;/a&gt; at
   the Microsoft PDC 2005 as the best book about concurrent programming for .NET. It
   is an impressive book, and it seems fairly straightforward to translate the concepts
   from the Java world to the .NET Framework.
&lt;/p&gt;
&lt;p&gt;
   I can’t give this book a completely fair review, because I wasn’t able to finish it.
   The book is divided into four chapters; my current interest in concurrent programming
   was only able to get me through the first two. I don’t doubt that I will find additional
   value in this book the next time I am faced with a difficult concurrency challenge.
&lt;/p&gt;
&lt;p&gt;
   I really enjoyed the first two chapters, though, as they provide the language for
   discussing concurrent programming. For example, section 1.3 describes the “design
   forces” to consider when designing concurrent software:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      &lt;strong&gt;Safety&lt;/strong&gt; demands that an object is always in a consistent state. Concurrency
      makes it possible for one thread to interfere with the operation of another thread
      acting on the same object, possibly resulting in an inconsistent state. 
   &lt;li&gt;
      &lt;strong&gt;Liveness&lt;/strong&gt; demands that operations run to completion. Concurrent programming
      can permanently halt progress when two threads are waiting for locks held by the other
      thread, for example. 
   &lt;li&gt;
      &lt;strong&gt;Performance&lt;/strong&gt; wants operations to run in a timely manner. Concurrency
      support adds overhead that can hurt performance. 
   &lt;li&gt;
      &lt;strong&gt;Reusability&lt;/strong&gt; wants objects and algorithms to be reusable by different
      parts of the system. Concurrent programming adds a new dimension to the requirements
      of reusable software; specifically, clients must know to what extent a component is
      thread-safe.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Chapter 2 is all about keeping objects in a consistent state by ensuring that two
   threads cannot manipulate the same data at the same time, either by making objects
   immutable, or preventing objects from being accessed by other threads, or by synchronizing
   the use of objects with locks. Understanding of these concepts is crucial to writing
   safely concurrent code.
&lt;/p&gt;
&lt;p&gt;
   Section 2.2.7 is particularly interesting if you’re not familiar with the concept
   of a “memory model.” Basically, modern compilers and processors can rearrange the
   order in which statements and instructions are executed, as long as the end result
   is the same. This can cause very surprising behavior when one thread is observing
   the activity of another thread. The only practical way to ensure that each thread
   sees what you would expect it to see is to use synchronization; access to shared memory
   should always be protected by a lock.
&lt;/p&gt;
&lt;p&gt;
   I know that the book has more important concepts; perhaps I’ll make another attempt
   at reading chapter 3 some day. If you’re doing any concurrent programming at all,
   I highly recommend that you see how far you can get.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e862fadf-71cc-487b-8ef9-fadbb072ddb8" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,e862fadf-71cc-487b-8ef9-fadbb072ddb8.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=0fa4c9c5-3695-4757-acc4-5fb64feddc1c</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,0fa4c9c5-3695-4757-acc4-5fb64feddc1c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,0fa4c9c5-3695-4757-acc4-5fb64feddc1c.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=0fa4c9c5-3695-4757-acc4-5fb64feddc1c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I read <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201310058">Effective
      Java</a>, by Joshua Bloch, not because I ever write Java code (I don’t), but because
      it surprisingly was recommended as a valuable book for C# programmers. Sure enough,
      this book has excellent advice for programmers of any Java-like object-oriented framework.
      My favorites:
   </p>
        <ul>
          <li>
         Item 1: Consider providing static factory methods instead of constructors 
      </li>
          <li>
         Item 6: Avoid finalizers 
      </li>
          <li>
         Item 12: Minimize the accessibility of classes and members 
      </li>
          <li>
         Item 13: Favor immutability 
      </li>
          <li>
         Item 14: Favor composition over inheritance 
      </li>
          <li>
         Item 15: Design and document for inheritance or else prohibit it 
      </li>
          <li>
         Item 27: Return zero-length arrays, not nulls 
      </li>
          <li>
         Item 29: Minimize the scope of local variables 
      </li>
          <li>
         Item 30: Know and use the libraries 
      </li>
          <li>
         Item 39: Use exceptions only for exceptional conditions 
      </li>
          <li>
         Item 46: Strive for failure atomicity</li>
        </ul>
        <p>
      One item that caught my attention was item 16 (“Prefer interfaces to abstract classes”),
      because it directly conflicts with Cwalina and Abrams’ <a href="http://www.ejball.com/EdAtWork/2005/09/21/BookReviewFrameworkDesignGuidelines.aspx">Framework
      Design Guidelines</a> (“Do use abstract classes instead of interfaces to decouple
      the contract from implementations”). Of course, both books are expressing a general
      preference, not a strict rule, and both books identify the situations where each construct
      is appropriate.
   </p>
        <p>
      Some of the items are particular to Java, but they were still interesting as education
      on some of the differences between Java and C#. I just skimmed the last chapter (“Serialization”),
      which basically discourages the use of Java’s serialization mechanism anyway. Furthermore,
      I don’t know how it compares to .NET serialization. 
   </p>
        <p>
      All in all, it was definitely worth reading, and I highly recommend it to seasoned
      C# programmers.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=0fa4c9c5-3695-4757-acc4-5fb64feddc1c" />
      </body>
      <title>Book Review: Effective Java</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,0fa4c9c5-3695-4757-acc4-5fb64feddc1c.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/19/BookReviewEffectiveJava.aspx</link>
      <pubDate>Wed, 19 Oct 2005 23:10:02 GMT</pubDate>
      <description>&lt;p&gt;
   I&amp;nbsp;read&amp;nbsp;&lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201310058"&gt;Effective
   Java&lt;/a&gt;, by Joshua Bloch, not because I ever write Java code (I don’t), but because
   it surprisingly was recommended as a valuable book for C# programmers. Sure enough,
   this book has excellent advice for programmers of any Java-like object-oriented framework.
   My favorites:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Item 1: Consider providing static factory methods instead of constructors 
   &lt;li&gt;
      Item 6: Avoid finalizers 
   &lt;li&gt;
      Item 12: Minimize the accessibility of classes and members 
   &lt;li&gt;
      Item 13: Favor immutability 
   &lt;li&gt;
      Item 14: Favor composition over inheritance 
   &lt;li&gt;
      Item 15: Design and document for inheritance or else prohibit it 
   &lt;li&gt;
      Item 27: Return zero-length arrays, not nulls 
   &lt;li&gt;
      Item 29: Minimize the scope of local variables 
   &lt;li&gt;
      Item 30: Know and use the libraries 
   &lt;li&gt;
      Item 39: Use exceptions only for exceptional conditions 
   &lt;li&gt;
      Item 46: Strive for failure atomicity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   One item that caught my attention was item 16 (“Prefer interfaces to abstract classes”),
   because it directly conflicts with Cwalina and Abrams’ &lt;a href="http://www.ejball.com/EdAtWork/2005/09/21/BookReviewFrameworkDesignGuidelines.aspx"&gt;Framework
   Design Guidelines&lt;/a&gt; (“Do use abstract classes instead of interfaces to decouple
   the contract from implementations”). Of course, both books are expressing a general
   preference, not a strict rule, and both books identify the situations where each construct
   is appropriate.
&lt;/p&gt;
&lt;p&gt;
   Some of the items are particular to Java, but they were still interesting as education
   on some of the differences between Java and C#. I just skimmed the last chapter (“Serialization”),
   which basically discourages the use of Java’s serialization mechanism anyway. Furthermore,
   I don’t know how it compares to .NET serialization. 
&lt;/p&gt;
&lt;p&gt;
   All in all, it was definitely worth reading, and I highly recommend it to seasoned
   C# programmers.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=0fa4c9c5-3695-4757-acc4-5fb64feddc1c" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,0fa4c9c5-3695-4757-acc4-5fb64feddc1c.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=314cf9f6-2a6f-49b8-a7cb-2c61ba5b750c</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,314cf9f6-2a6f-49b8-a7cb-2c61ba5b750c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,314cf9f6-2a6f-49b8-a7cb-2c61ba5b750c.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=314cf9f6-2a6f-49b8-a7cb-2c61ba5b750c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0596101139">Programming Windows
      Presentation Foundation</a> is an outstanding introduction to the latest technology
      from Microsoft for building user interface for Windows XP and beyond. It is written
      by two knowledgeable and trustworthy authors, Chris Sells and Ian Griffiths, in a
      style that’s easy to follow. I’m going to need some actual experience under my belt
      before I really “get it,” but this book taught me far more than the online information
      that I’d read thus far.
   </p>
        <p>
      It’s difficult to introduce so many new concepts in a linear fashion, so there were
      a few hiccups. I would like to have learned more about “dependency properties” before
      chapter 9, as they are really fundamental to the entire programming model of WPF.
      You might consider reading chapter 9 (“Custom Controls”) immediately after reading
      chapter 3 (“Controls”). I also would have liked to see more code and less XAML, though
      that may have made the book much longer for little benefit. At the very least, take
      their advice and skip ahead to Appendix A to help understand what sort of code the
      XAML is used to generate. 
   </p>
        <p>
      This book was written for WinFX Beta 1, so be sure to read the <a href="http://www.sellsbrothers.com/writing/avbook/">errata</a>,
      as there have been important changes in the most recent releases. If that’s too bleeding-edge
      for you, feel free to wait until they publish the second edition of the book, after
      WPF actually ships. On the other hand, the fundamentals of WPF won’t be changing,
      so this book still provides an excellent introduction to the next wave of user interface
      programming for Windows. I, for one, am ready to get started! Goodbye GDI, hello WPF!
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=314cf9f6-2a6f-49b8-a7cb-2c61ba5b750c" />
      </body>
      <title>Book Review: Programming Windows Presentation Foundation</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,314cf9f6-2a6f-49b8-a7cb-2c61ba5b750c.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/17/BookReviewProgrammingWindowsPresentationFoundation.aspx</link>
      <pubDate>Mon, 17 Oct 2005 15:28:47 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0596101139"&gt;Programming Windows
   Presentation Foundation&lt;/a&gt; is an outstanding introduction to the latest technology
   from Microsoft for building user interface for Windows XP and beyond. It is written
   by two knowledgeable and trustworthy authors, Chris Sells and Ian Griffiths, in a
   style that’s easy to follow. I’m going to need some actual experience under my belt
   before I really “get it,” but this book taught me far more than the online information
   that I’d read thus far.
&lt;/p&gt;
&lt;p&gt;
   It’s difficult to introduce so many new concepts in a linear fashion, so there were
   a few hiccups. I would like to have learned more about “dependency properties” before
   chapter 9, as they are really fundamental to the entire programming model of WPF.
   You might consider reading chapter 9 (“Custom Controls”) immediately after reading
   chapter 3 (“Controls”). I also would have liked to see more code and less XAML, though
   that may have made the book much longer for little benefit. At the very least, take
   their advice and skip ahead to Appendix A to help understand what sort of code the
   XAML is used to generate. 
&lt;/p&gt;
&lt;p&gt;
   This book was written for WinFX Beta 1, so be sure to read the &lt;a href="http://www.sellsbrothers.com/writing/avbook/"&gt;errata&lt;/a&gt;,
   as there have been important changes in the most recent releases. If that’s too bleeding-edge
   for you, feel free to wait until they publish the second edition of the book, after
   WPF actually ships. On the other hand, the fundamentals of WPF won’t be changing,
   so this book still provides an excellent introduction to the next wave of user interface
   programming for Windows. I, for one, am ready to get started! Goodbye GDI, hello WPF!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=314cf9f6-2a6f-49b8-a7cb-2c61ba5b750c" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,314cf9f6-2a6f-49b8-a7cb-2c61ba5b750c.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=e13a6bcc-6acf-4001-8432-91094a16509c</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,e13a6bcc-6acf-4001-8432-91094a16509c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,e13a6bcc-6acf-4001-8432-91094a16509c.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=e13a6bcc-6acf-4001-8432-91094a16509c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Like its <a href="http://www.ejball.com/EdAtWork/2005/03/23/BookReviewNETFrameworkStandardLibraryAnnotatedReferenceVolume1.aspx">predecessor</a>,
      the <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321194454/">.NET Framework
      Standard Library Annotated Reference (Volume 2: Networking Library, Reflection Library,
      and XML Library)</a> is mostly a reference book interspersed with annotations. Unfortunately,
      the annotations in this volume are less interesting than those in volume 1. If you
      have the opportunity, do browse through the annotations, but don’t expect a big return
      on your investment.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e13a6bcc-6acf-4001-8432-91094a16509c" />
      </body>
      <title>Book Review: .NET Framework Standard Library Annotated Reference (Volume 2)</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,e13a6bcc-6acf-4001-8432-91094a16509c.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/11/BookReviewNETFrameworkStandardLibraryAnnotatedReferenceVolume2.aspx</link>
      <pubDate>Tue, 11 Oct 2005 14:52:18 GMT</pubDate>
      <description>&lt;p&gt;
   Like its &lt;a href="http://www.ejball.com/EdAtWork/2005/03/23/BookReviewNETFrameworkStandardLibraryAnnotatedReferenceVolume1.aspx"&gt;predecessor&lt;/a&gt;,
   the &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321194454/"&gt;.NET Framework
   Standard Library Annotated Reference (Volume 2: Networking Library, Reflection Library,
   and XML Library)&lt;/a&gt; is mostly a reference book interspersed with annotations. Unfortunately,
   the annotations in this volume are less interesting than those in volume 1. If you
   have the opportunity, do browse through the annotations, but don’t expect a big return
   on your investment.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=e13a6bcc-6acf-4001-8432-91094a16509c" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,e13a6bcc-6acf-4001-8432-91094a16509c.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=c6958491-65cb-40b7-b0c5-11022d002f14</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,c6958491-65cb-40b7-b0c5-11022d002f14.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,c6958491-65cb-40b7-b0c5-11022d002f14.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=c6958491-65cb-40b7-b0c5-11022d002f14</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0262693178/">C# Precisely</a>,
      by Peter Sestoft and Henrik I. Hansen, is a concise overview of the C# language. It
      is clearly intended for programmers that are already somewhat familiar with the language,
      but want to fill in the details.
   </p>
        <p>
      I picked it up not because I needed the overview – there was little that I didn’t
      already know – but because I had read great reviews on the presentation format of
      the book. The presentation is, in fact, pretty impressive. As you read the book, the
      left page contains all of the prose, which is information-dense yet quite readable,
      and the right page contains examples and their descriptions, numbered from the beginning
      of the book to the end for easy cross-referencing. In only 180 pages or so, this book
      manages to convey a lot of information very efficiently.
   </p>
        <p>
      I would definitely recommend this book to anyone that wants to get familiar with the
      details of C#. Be sure to read the online <a href="http://www.itu.dk/people/sestoft/csharpprecisely/">errata</a>,
      as some of the information on C# 2.0 is slightly outdated. Also, as mentioned in the
      preface, this book does not cover a few topics, the most important of which are destructors
      and finalization; be sure to find another source of information for the missing topics.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=c6958491-65cb-40b7-b0c5-11022d002f14" />
      </body>
      <title>Book Review: C# Precisely</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,c6958491-65cb-40b7-b0c5-11022d002f14.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/10/BookReviewCPrecisely.aspx</link>
      <pubDate>Mon, 10 Oct 2005 17:45:37 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0262693178/"&gt;C# Precisely&lt;/a&gt;,
   by Peter Sestoft and Henrik I. Hansen, is a concise overview of the C# language. It
   is clearly intended for programmers that are already somewhat familiar with the language,
   but want to fill in the details.
&lt;/p&gt;
&lt;p&gt;
   I picked it up not because I needed the overview – there was little that I didn’t
   already know – but because I had read great reviews on the presentation format of
   the book. The presentation is, in fact, pretty impressive. As you read the book, the
   left page contains all of the prose, which is information-dense yet quite readable,
   and the right page contains examples and their descriptions, numbered from the beginning
   of the book to the end for easy cross-referencing. In only 180 pages or so, this book
   manages to convey a lot of information very efficiently.
&lt;/p&gt;
&lt;p&gt;
   I would definitely recommend this book to anyone that wants to get familiar with the
   details of C#. Be sure to read the online &lt;a href="http://www.itu.dk/people/sestoft/csharpprecisely/"&gt;errata&lt;/a&gt;,
   as some of the information on C# 2.0 is slightly outdated. Also, as mentioned in the
   preface, this book does not cover a few topics, the most important of which are destructors
   and finalization; be sure to find another source of information for the missing topics.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=c6958491-65cb-40b7-b0c5-11022d002f14" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,c6958491-65cb-40b7-b0c5-11022d002f14.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=fa44c528-252a-4f44-8996-6c820408eea4</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,fa44c528-252a-4f44-8996-6c820408eea4.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,fa44c528-252a-4f44-8996-6c820408eea4.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=fa44c528-252a-4f44-8996-6c820408eea4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321334876">Effective C++,
      Third Edition</a>, by Scott Meyers, contains a number of fundamental C++ guidelines
      that should be read by all C++ programmers. Having already read a previous edition
      of <em>Effective C++</em>, my expectation was that I would get a nice reminder of
      things I already knew. My hope was that I’d learn a few things that I didn’t already
      know, or had forgotten; here are some of those things:
   </p>
        <ul>
          <li>
         You can use the member initialization list of a constructor definition even when you
         want to default construct a data member (p. 29).</li>
          <li>
         A classic implementation of the copy assignment operator takes its argument by value
         (to make a copy of it) and then calls <code>swap</code> on that argument (p. 56).</li>
          <li>
         Since compilers can reorder operations within a statement, very surprising things
         can happen in the face of exceptions (p. 76).</li>
          <li>
         Prefer non-member non-friend functions to member functions (p. 98). I remember this
         controversial item from the last edition, but it was good to read his rationale again.</li>
          <li>
         There are very peculiar rules about the <code>swap</code> function. You need to consult
         item 25 (p. 106) before you attempt to write a non-throwing swap function for your
         classes. Even <em>calling</em> the <code>swap</code> function is complicated – you
         must not call <code>std::swap</code> directly, but should instead call it like this: <code>using
         std::swap; ... swap(obj1, obj2);</code></li>
          <li>
         It never occurred to me to use an “interface class” for a single concrete class, merely
         to reduce compilation dependencies (p. 145).</li>
          <li>
         Use <code>using</code> declarations to avoid hiding inherited names; you rarely want
         to hide inherited member functions when you add a new overload, but that’s what happens
         in C++ (p. 159).</li>
          <li>
         Include a definition for a pure virtual function if you want to provide a default
         implementation that must be explicitly requested (p. 167).</li>
          <li>
         I didn’t realize that “accessing names in templated base classes” was a problem; you’d
         think I’d have run into that before (item 43, p. 207).</li>
          <li>
         I also never realized that I’d need to “define non-member functions inside templates
         when type conversions are desired.” The only way to do that is with a friend function,
         even if the function doesn’t need special access to your members (item 46, p. 222).</li>
        </ul>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=fa44c528-252a-4f44-8996-6c820408eea4" />
      </body>
      <title>Book Review: Effective C++, Third Edition</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,fa44c528-252a-4f44-8996-6c820408eea4.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/10/03/BookReviewEffectiveCThirdEdition.aspx</link>
      <pubDate>Mon, 03 Oct 2005 16:23:51 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321334876"&gt;Effective C++,
   Third Edition&lt;/a&gt;, by Scott Meyers, contains a number of fundamental C++ guidelines
   that should be read by all C++ programmers. Having already read a previous edition
   of &lt;em&gt;Effective C++&lt;/em&gt;, my expectation was that I would get a nice reminder of
   things I already knew. My hope was that I’d learn a few things that I didn’t already
   know, or had forgotten; here are some of those things:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      You can use the member initialization list of a constructor definition even when you
      want to default construct a data member (p. 29).&lt;/li&gt;
   &lt;li&gt;
      A classic implementation of the copy assignment operator takes its argument by value
      (to make a copy of it) and then calls &lt;code&gt;swap&lt;/code&gt; on that argument (p. 56).&lt;/li&gt;
   &lt;li&gt;
      Since compilers can reorder operations within a statement, very surprising things
      can happen in the face of exceptions (p. 76).&lt;/li&gt;
   &lt;li&gt;
      Prefer non-member non-friend functions to member functions (p. 98). I remember this
      controversial item from the last edition, but it was good to read his rationale again.&lt;/li&gt;
   &lt;li&gt;
      There are very peculiar rules about the &lt;code&gt;swap&lt;/code&gt; function. You need to consult
      item 25 (p. 106) before you attempt to write a non-throwing swap function for your
      classes. Even &lt;em&gt;calling&lt;/em&gt; the &lt;code&gt;swap&lt;/code&gt; function is complicated – you
      must not call &lt;code&gt;std::swap&lt;/code&gt; directly, but should instead call it like this: &lt;code&gt;using
      std::swap;&amp;nbsp;... swap(obj1, obj2);&lt;/code&gt;
   &lt;/li&gt;
   &lt;li&gt;
      It never occurred to me to use an “interface class” for a single concrete class, merely
      to reduce compilation dependencies (p. 145).&lt;/li&gt;
   &lt;li&gt;
      Use &lt;code&gt;using&lt;/code&gt; declarations to avoid hiding inherited names; you rarely want
      to hide inherited member functions when you add a new overload, but that’s what happens
      in C++ (p. 159).&lt;/li&gt;
   &lt;li&gt;
      Include a definition for a pure virtual function if you want to provide a default
      implementation that must be explicitly requested (p. 167).&lt;/li&gt;
   &lt;li&gt;
      I didn’t realize that “accessing names in templated base classes” was a problem; you’d
      think I’d have run into that before (item 43, p. 207).&lt;/li&gt;
   &lt;li&gt;
      I also never realized that I’d need to “define non-member functions inside templates
      when type conversions are desired.” The only way to do that is with a friend function,
      even if the function doesn’t need special access to your members (item 46, p. 222).&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=fa44c528-252a-4f44-8996-6c820408eea4" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,fa44c528-252a-4f44-8996-6c820408eea4.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=cf811f09-8986-4287-baf6-f3e5755393ee</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,cf811f09-8986-4287-baf6-f3e5755393ee.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,cf811f09-8986-4287-baf6-f3e5755393ee.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=cf811f09-8986-4287-baf6-f3e5755393ee</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I bought the <a href="http://blogs.msdn.com/kcwalina/archive/2005/09/20/PDC2005.aspx">last
      copy</a> of <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321246756">Framework
      Design Guidelines</a> by Krzysztof Cwalina and Brad Abrams at the PDC so that I’d
      have something interesting to read on the trip home, and I was not disappointed. I
      find myself in agreement with nearly all of the guidelines; widespread adherence to
      them even when writing small libraries would improve overall code quality. Of course,
      it’s much more interesting to highlight the areas that I don’t agree with, so I’ll
      first make myself clear – I highly recommend this book to anyone writing code that
      uses the .NET Framework or any similar object-oriented framework.
   </p>
        <p>
      One classic source of disagreement is in the use of Hungarian notation; I use a mild
      form of that notation that I feel greatly improves code readability. The guidelines
      only prohibit the use of these identifier “warts” on the public API, which would be
      fine, except that method parameter names are shared by the API (which shouldn’t use
      them) and the implementation (which should, if the rest of the implementation does).
      So, what to do? Since there’s no easy way to have my cake and eat it too, I just use
      Hungarian with parameter names, and hope that my clients will forgive me.
   </p>
        <p>
      I’m not fond of the event pattern where a protected virtual method is defined that
      raises the event. It’s not clear to me why derived classes should be able to suppress
      the raising of events; I prefer virtual methods to always be abstract or empty, so
      that derived classes don’t have to call the base-class implementation at all. I like
      adding the virtual method, so that derived classes don’t have to add event handlers
      to their own events, but I tend to call the virtual method and then raise the event.
   </p>
        <p>
      Speaking of parameter naming, and speaking of events, I really don’t like the convention
      of calling the <code>EventArgs</code> parameter <code>e</code>. I use <code>args</code>.
   </p>
        <p>
      Finally, I only agree with about half of the coding style conventions listed in Appendix
      A:
   </p>
        <ul>
          <li>
         They seem to have something against spaces, which are important for readability, particularly
         if you’re using a proportionally spaced font. (You really should be writing code in
         Verdana 8pt if you’re not already.)</li>
          <li>
         I love omitting braces around single statements; I don’t buy the “readability and
         maintainability” argument, particularly when you put the opening brace on its own
         line (which they don’t).</li>
          <li>
         Tabs are way better for indentation than spaces.</li>
          <li>
         I’ve never understood why private fields should go at the top of a class declaration.
         All other private members go at the bottom, and for good reason; why not fields? Otherwise,
         their recommendation to group members is good, though I prefer logical ordering to
         alphabetical ordering when practical.</li>
        </ul>
        <p>
      I’ll have to publish my own coding style conventions one day. If you’re really curious,
      just look at code samples elsewhere on this blog…
   </p>
        <p>
      And in case you skipped down to the bottom, let me reiterate – you should read this
      book!
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=cf811f09-8986-4287-baf6-f3e5755393ee" />
      </body>
      <title>Book Review: Framework Design Guidelines</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,cf811f09-8986-4287-baf6-f3e5755393ee.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/09/21/BookReviewFrameworkDesignGuidelines.aspx</link>
      <pubDate>Wed, 21 Sep 2005 17:12:55 GMT</pubDate>
      <description>&lt;p&gt;
   I bought the &lt;a href="http://blogs.msdn.com/kcwalina/archive/2005/09/20/PDC2005.aspx"&gt;last
   copy&lt;/a&gt; of &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321246756"&gt;Framework
   Design Guidelines&lt;/a&gt; by Krzysztof Cwalina and Brad Abrams at the PDC so that I’d
   have something interesting to read on the trip home, and I was not disappointed. I
   find myself in agreement with nearly all of the guidelines; widespread adherence to
   them even when writing small libraries would improve overall code quality. Of course,
   it’s much more interesting to highlight the areas that I don’t agree with, so I’ll
   first make myself clear – I highly recommend this book to anyone writing code that
   uses the .NET Framework or any similar object-oriented framework.
&lt;/p&gt;
&lt;p&gt;
   One classic source of disagreement is in the use of Hungarian notation; I use a mild
   form of that notation that I feel greatly improves code readability. The guidelines
   only prohibit the use of these identifier “warts” on the public API, which would be
   fine, except that method parameter names are shared by the API (which shouldn’t use
   them) and the implementation (which should, if the rest of the implementation does).
   So, what to do? Since there’s no easy way to have my cake and eat it too, I just use
   Hungarian with parameter names, and hope that my clients will forgive me.
&lt;/p&gt;
&lt;p&gt;
   I’m not fond of the event pattern where a protected virtual method is defined that
   raises the event. It’s not clear to me why derived classes should be able to suppress
   the raising of events; I prefer virtual methods to always be abstract or empty, so
   that derived classes don’t have to call the base-class implementation at all. I like
   adding the virtual method, so that derived classes don’t have to add event handlers
   to their own events, but I tend to call the virtual method and then raise the event.
&lt;/p&gt;
&lt;p&gt;
   Speaking of parameter naming, and speaking of events, I really don’t like the convention
   of calling the &lt;code&gt;EventArgs&lt;/code&gt; parameter &lt;code&gt;e&lt;/code&gt;. I use &lt;code&gt;args&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
   Finally, I only agree with about half of the coding style conventions listed in Appendix
   A:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      They seem to have something against spaces, which are important for readability, particularly
      if you’re using a proportionally spaced font. (You really should be writing code in
      Verdana 8pt if you’re not already.)&lt;/li&gt;
   &lt;li&gt;
      I love omitting braces around single statements; I don’t buy the “readability and
      maintainability” argument, particularly when you put the opening brace on its own
      line (which they don’t).&lt;/li&gt;
   &lt;li&gt;
      Tabs are way better for indentation than spaces.&lt;/li&gt;
   &lt;li&gt;
      I’ve never understood why private fields should go at the top of a class declaration.
      All other private members go at the bottom, and for good reason; why not fields? Otherwise,
      their recommendation to group members is good, though I prefer logical ordering to
      alphabetical ordering when practical.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   I’ll have to publish my own coding style conventions one day. If you’re really curious,
   just look at code samples elsewhere on this blog…
&lt;/p&gt;
&lt;p&gt;
   And in case you skipped down to the bottom, let me reiterate – you should read this
   book!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=cf811f09-8986-4287-baf6-f3e5755393ee" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,cf811f09-8986-4287-baf6-f3e5755393ee.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=2b550bc0-78c3-4ddd-80f0-543dc7f43125</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,2b550bc0-78c3-4ddd-80f0-543dc7f43125.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,2b550bc0-78c3-4ddd-80f0-543dc7f43125.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=2b550bc0-78c3-4ddd-80f0-543dc7f43125</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321321928">C++ Common Knowledge</a>,
      by Stephen C. Dewhurst, is a short book of 63 items that cover a broad variety of
      topics targeted at the “intermediate” C++ programmer. It certainly isn’t
      for a C++ beginner, but I can see how someone with some C++ experience could quickly
      learn important stuff about C++ by reading this book. None of the information was
      new to me, but most items were still fun reminders of C++ techniques that I don't
      get to use every day. Besides, the back cover and introduction make it clear that
      its primary use for “expert” C++ programmers is to help train “less-experienced
      colleagues.”
   </p>
        <p>
      I happily recommend this book to any C++ programmers out there that are ready to move
      to the “next level,” but don’t stop there. Immediately after item
      63 is an excellent bibliography of C++ books that are “must reads” for
      any C++ programmer, all of which I have read and highly recommend.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=2b550bc0-78c3-4ddd-80f0-543dc7f43125" />
      </body>
      <title>Book Review: C++ Common Knowledge</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,2b550bc0-78c3-4ddd-80f0-543dc7f43125.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/07/29/BookReviewCCommonKnowledge.aspx</link>
      <pubDate>Fri, 29 Jul 2005 14:58:21 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321321928"&gt;C++ Common Knowledge&lt;/a&gt;,
   by Stephen C. Dewhurst, is a short book of 63 items that cover a broad variety of
   topics targeted at the &amp;#8220;intermediate&amp;#8221; C++ programmer. It certainly isn&amp;#8217;t
   for a C++ beginner, but I can see how someone with some C++ experience could quickly
   learn important stuff about C++ by reading this book. None of the information was
   new to me, but most items were still fun reminders of C++ techniques that I don't
   get to use every day. Besides, the back cover and introduction make it clear that
   its primary use for &amp;#8220;expert&amp;#8221; C++ programmers is to help train &amp;#8220;less-experienced
   colleagues.&amp;#8221;
&lt;/p&gt;
&lt;p&gt;
   I happily recommend this book to any C++ programmers out there that are ready to move
   to the &amp;#8220;next level,&amp;#8221; but don&amp;#8217;t stop there. Immediately after item
   63 is an excellent bibliography of C++ books that are &amp;#8220;must reads&amp;#8221; for
   any C++ programmer, all of which I have read and highly recommend.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=2b550bc0-78c3-4ddd-80f0-543dc7f43125" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,2b550bc0-78c3-4ddd-80f0-543dc7f43125.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=ffca4bb2-7484-4ea3-97f6-ddb9e11ccc47</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,ffca4bb2-7484-4ea3-97f6-ddb9e11ccc47.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,ffca4bb2-7484-4ea3-97f6-ddb9e11ccc47.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=ffca4bb2-7484-4ea3-97f6-ddb9e11ccc47</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      If you prefer reading paper to reading a computer screen, you might like <a href="http://www.amazon.com/exec/obidos/tg/detail/-/1590595009">The
      Best Software Writing I: Selected and Introduced by Joel Spolsky</a>. It contains
      a number of articles by various authors on various aspects of software development.
      Much of the content is available online – in fact, I’d already read a
      handful of the articles – but printed books are still a lot easier on the eyes
      and the brain than reading out of a Web browser.
   </p>
        <p>
      Here are some of the main points that I want to remember:
   </p>
        <ul>
          <li>
         Coding style should be enforced by the compiler.</li>
          <li>
         Software should be flexible, simple, sloppy, tolerant, and forgiving.</li>
          <li>
         Strong testing can replace strong typing.</li>
          <li>
         Great programmers want interesting projects more than anything else.</li>
          <li>
         You can’t directly measure the performance of programmers or testers.</li>
          <li>
         Emphasizing rewards for individual merit is dangerous for team morale.</li>
          <li>
         Writing good social software is really hard.</li>
          <li>
         Small software companies should “trust the customer.”</li>
          <li>
         Hiring good people is hard (but still easier than firing).</li>
          <li>
         Ruby looks even stranger than Perl.</li>
        </ul>
        <p>
      I can’t promise that it’s the “best” software writing, but
      it’s pretty good, so I recommend this book to anyone in the software industry
      looking for some interesting ideas.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=ffca4bb2-7484-4ea3-97f6-ddb9e11ccc47" />
      </body>
      <title>Book Review: The Best Software Writing I</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,ffca4bb2-7484-4ea3-97f6-ddb9e11ccc47.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/07/07/BookReviewTheBestSoftwareWritingI.aspx</link>
      <pubDate>Thu, 07 Jul 2005 20:10:29 GMT</pubDate>
      <description>&lt;p&gt;
   If you prefer reading paper to reading a computer screen, you might like &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/1590595009"&gt;The
   Best Software Writing I: Selected and Introduced by Joel Spolsky&lt;/a&gt;. It contains
   a number of articles by various authors on various aspects of software development.
   Much of the content is available online &amp;#8211; in fact, I&amp;#8217;d already read a
   handful of the articles &amp;#8211; but printed books are still a lot easier on the eyes
   and the brain than reading out of a Web browser.
&lt;/p&gt;
&lt;p&gt;
   Here are some of the main points that I want to remember:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Coding style should be enforced by the compiler.&lt;/li&gt;
   &lt;li&gt;
      Software should be flexible, simple, sloppy, tolerant, and forgiving.&lt;/li&gt;
   &lt;li&gt;
      Strong testing can replace strong typing.&lt;/li&gt;
   &lt;li&gt;
      Great programmers want interesting projects more than anything else.&lt;/li&gt;
   &lt;li&gt;
      You can&amp;#8217;t directly measure the performance of programmers or testers.&lt;/li&gt;
   &lt;li&gt;
      Emphasizing rewards for individual merit is dangerous for team morale.&lt;/li&gt;
   &lt;li&gt;
      Writing good social software is really hard.&lt;/li&gt;
   &lt;li&gt;
      Small software companies should &amp;#8220;trust the customer.&amp;#8221;&lt;/li&gt;
   &lt;li&gt;
      Hiring good people is hard (but still easier than firing).&lt;/li&gt;
   &lt;li&gt;
      Ruby looks even stranger than Perl.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   I can&amp;#8217;t promise that it&amp;#8217;s the &amp;#8220;best&amp;#8221; software writing, but
   it&amp;#8217;s pretty good, so I recommend this book to anyone in the software industry
   looking for some interesting ideas.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=ffca4bb2-7484-4ea3-97f6-ddb9e11ccc47" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,ffca4bb2-7484-4ea3-97f6-ddb9e11ccc47.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=653a5887-0a9e-4df3-a44d-16cb0356034c</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,653a5887-0a9e-4df3-a44d-16cb0356034c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,653a5887-0a9e-4df3-a44d-16cb0356034c.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=653a5887-0a9e-4df3-a44d-16cb0356034c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321228774">Imperfect C++</a>,
      by Matthew Wilson, is an outstanding book that provides “practical solutions
      for real-life programming” in C++. It presents a wide variety of useful material
      that I haven’t found in any other book on C++. If you’re an experienced
      C++ programmer, you’ll have learned much of this material the hard way, but
      you’ll still find plenty of information that will hopefully come in handy down
      the road.
   </p>
        <p>
      As I read, I like to jot down items of interest so that I can come back to them later.
      There was no shortage of interesting items in this book; here are some highlights.
   </p>
        <ul>
          <li>
         1: Mechanisms for implementing constraints, contracts, and assertions.</li>
          <li>
         2.3: Using <code>const</code> to track down uninitialized member variables.</li>
          <li>
         2.3.1: Calling private static methods from member initialization lists.</li>
          <li>
         10.2.2: Using spin mutexes for synchronization with low contention.</li>
          <li>
         10.3.3: Critical sections are as slow as mutexes on multi-processor Windows machines.</li>
          <li>
         11.3.2: Using a spin mutex to guard local statics.</li>
          <li>
         12.2-12.4: Visual C++ 7.1 optimization. (It supports Return Value Optimization, but
         not Named RVO. It supports almost every case of Empty Base Optimization, and every
         case of Empty Derived Optimization.)</li>
          <li>
         15.1: Creating a good <code>null</code> pseudo-keyword.</li>
          <li>
         18.1: Using the <code>const</code> keyword after the type. (I should really start
         doing that; old habits are hard to break, e.g. <code>char const *</code> instead of <code>const
         char *</code>.)</li>
          <li>
         18.4: Implementing <code>true_typedef</code>.</li>
          <li>
         18.5.3: Using a <code>LocalClass</code><code>typedef</code> in implementation files
         to reduce differences between similar class implementations.</li>
          <li>
         20. The power of shims.</li>
          <li>
         24.6: The best way to implement a safe conversion-to-Boolean for a class.</li>
        </ul>
        <p>
      One of my favorites quotes is in the introduction to chapter 6: “You get all
      that functionality just by typing a <code>}</code>.”
   </p>
        <p>
      If it’s not clear already, I highly recommend this book to anyone using C++
      to write “real-life” programs.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=653a5887-0a9e-4df3-a44d-16cb0356034c" />
      </body>
      <title>Book Review: Imperfect C++</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,653a5887-0a9e-4df3-a44d-16cb0356034c.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/06/23/BookReviewImperfectC.aspx</link>
      <pubDate>Thu, 23 Jun 2005 17:53:28 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321228774"&gt;Imperfect C++&lt;/a&gt;,
   by Matthew Wilson, is an outstanding book that provides &amp;#8220;practical solutions
   for real-life programming&amp;#8221; in C++. It presents a wide variety of useful material
   that I haven&amp;#8217;t found in any other book on C++. If you&amp;#8217;re an experienced
   C++ programmer, you&amp;#8217;ll have learned much of this material the hard way, but
   you&amp;#8217;ll still find plenty of information that will hopefully come in handy down
   the road.
&lt;/p&gt;
&lt;p&gt;
   As I read, I like to jot down items of interest so that I can come back to them later.
   There was no shortage of interesting items in this book; here are some highlights.
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      1: Mechanisms for implementing constraints, contracts, and assertions.&lt;/li&gt;
   &lt;li&gt;
      2.3: Using &lt;code&gt;const&lt;/code&gt; to track down uninitialized member variables.&lt;/li&gt;
   &lt;li&gt;
      2.3.1: Calling private static methods from member initialization lists.&lt;/li&gt;
   &lt;li&gt;
      10.2.2: Using spin mutexes for synchronization with low contention.&lt;/li&gt;
   &lt;li&gt;
      10.3.3: Critical sections are as slow as mutexes on multi-processor Windows machines.&lt;/li&gt;
   &lt;li&gt;
      11.3.2: Using a spin mutex to guard local statics.&lt;/li&gt;
   &lt;li&gt;
      12.2-12.4: Visual C++ 7.1 optimization. (It supports Return Value Optimization, but
      not Named RVO. It supports almost every case of Empty Base Optimization, and every
      case of Empty Derived Optimization.)&lt;/li&gt;
   &lt;li&gt;
      15.1: Creating a good &lt;code&gt;null&lt;/code&gt; pseudo-keyword.&lt;/li&gt;
   &lt;li&gt;
      18.1: Using the &lt;code&gt;const&lt;/code&gt; keyword after the type. (I should really start
      doing that; old habits are hard to break, e.g. &lt;code&gt;char const *&lt;/code&gt; instead of &lt;code&gt;const
      char *&lt;/code&gt;.)&lt;/li&gt;
   &lt;li&gt;
      18.4: Implementing &lt;code&gt;true_typedef&lt;/code&gt;.&lt;/li&gt;
   &lt;li&gt;
      18.5.3: Using a &lt;code&gt;LocalClass&lt;/code&gt; &lt;code&gt;typedef&lt;/code&gt; in implementation files
      to reduce differences between similar class implementations.&lt;/li&gt;
   &lt;li&gt;
      20. The power of shims.&lt;/li&gt;
   &lt;li&gt;
      24.6: The best way to implement a safe conversion-to-Boolean for a class.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   One of my favorites quotes is in the introduction to chapter 6: &amp;#8220;You get all
   that functionality just by typing a &lt;code&gt;}&lt;/code&gt;.&amp;#8221;
&lt;/p&gt;
&lt;p&gt;
   If it&amp;#8217;s not clear already, I highly recommend this book to anyone using C++
   to write &amp;#8220;real-life&amp;#8221; programs.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=653a5887-0a9e-4df3-a44d-16cb0356034c" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,653a5887-0a9e-4df3-a44d-16cb0356034c.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=d06fce97-bb5d-4367-9ab8-6934a875a37f</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,d06fce97-bb5d-4367-9ab8-6934a875a37f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,d06fce97-bb5d-4367-9ab8-6934a875a37f.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=d06fce97-bb5d-4367-9ab8-6934a875a37f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0465051359">Emotional Design:
      Why We Love (Or Hate) Everyday Things</a>, by Donald A. Norman, makes the case that
      products should be designed with human emotion in mind. That is, a product should
      not only work well and be as easy to use as possible; it should also evoke positive
      emotions in the people that use the product.
   </p>
        <p>
      Taking this idea further, he argues that products – robots in particular –
      will ultimately need to evoke emotions themselves to maximize our satisfaction with
      them. His ideas are fascinating, often in the same way that science fiction is fascinating
      – it may be decades before advances in artificial intelligence can allow us
      to fully test them.
   </p>
        <p>
      His opinion of most software is that it is too abstract – too “virtual.”
      If software is to appeal to our emotions, it needs to be more physical. We need to
      find ways to stimulate other senses than sight and mind – touch, hearing, smell…
      Knobs and levers are a good start – I’m not sure where he’d like
      to see it go from there. Page 83 suggests that there is little hope for existing software
      products: “Good behavioral design has to be a fundamental part of the design
      process from the very start; it cannot be adopted once the product has been completed.”
      To design a good product, you must observe potential users in order to understand
      their needs. From there, product designs need to be prototyped, tested, and improved
      iteratively.
   </p>
        <p>
      In evaluating the effectiveness of product design, he considers three levels. Good
      visceral design has an appealing appearance. Good behavioral design produces products
      that work well and are fun to use. Good reflective design is how we feel about the
      design in the long-term – feelings of pride, good memories, etc.
   </p>
        <p>
      This book was easy and fun to read; I recommend it to anyone that is interested in
      designing products that are not only useful, but emotionally appealing. It is not
      exactly full of practical advice, but it may get you thinking in the right direction.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=d06fce97-bb5d-4367-9ab8-6934a875a37f" />
      </body>
      <title>Book Review: Emotional Design</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,d06fce97-bb5d-4367-9ab8-6934a875a37f.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/03/29/BookReviewEmotionalDesign.aspx</link>
      <pubDate>Tue, 29 Mar 2005 16:10:13 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0465051359"&gt;Emotional Design:
   Why We Love (Or Hate) Everyday Things&lt;/a&gt;, by Donald A. Norman, makes the case that
   products should be designed with human emotion in mind. That is, a product should
   not only work well and be as easy to use as possible; it should also evoke positive
   emotions in the people that use the product.
&lt;/p&gt;
&lt;p&gt;
   Taking this idea further, he argues that products &amp;#8211; robots in particular &amp;#8211;
   will ultimately need to evoke emotions themselves to maximize our satisfaction with
   them. His ideas are fascinating, often in the same way that science fiction is fascinating
   &amp;#8211; it may be decades before advances in artificial intelligence can allow us
   to fully test them.
&lt;/p&gt;
&lt;p&gt;
   His opinion of most software is that it is too abstract &amp;#8211; too &amp;#8220;virtual.&amp;#8221;
   If software is to appeal to our emotions, it needs to be more physical. We need to
   find ways to stimulate other senses than sight and mind &amp;#8211; touch, hearing, smell&amp;#8230;
   Knobs and levers are a good start &amp;#8211; I&amp;#8217;m not sure where he&amp;#8217;d like
   to see it go from there. Page 83 suggests that there is little hope for existing software
   products: &amp;#8220;Good behavioral design has to be a fundamental part of the design
   process from the very start; it cannot be adopted once the product has been completed.&amp;#8221;
   To design a good product, you must observe potential users in order to understand
   their needs. From there, product designs need to be prototyped, tested, and improved
   iteratively.
&lt;/p&gt;
&lt;p&gt;
   In evaluating the effectiveness of product design, he considers three levels. Good
   visceral design has an appealing appearance. Good behavioral design produces products
   that work well and are fun to use. Good reflective design is how we feel about the
   design in the long-term &amp;#8211; feelings of pride, good memories, etc.
&lt;/p&gt;
&lt;p&gt;
   This book was easy and fun to read; I recommend it to anyone that is interested in
   designing products that are not only useful, but emotionally appealing. It is not
   exactly full of practical advice, but it may get you thinking in the right direction.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=d06fce97-bb5d-4367-9ab8-6934a875a37f" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,d06fce97-bb5d-4367-9ab8-6934a875a37f.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=ff2b4ff7-99d3-4093-8658-9a6c4f67182d</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,ff2b4ff7-99d3-4093-8658-9a6c4f67182d.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,ff2b4ff7-99d3-4093-8658-9a6c4f67182d.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=ff2b4ff7-99d3-4093-8658-9a6c4f67182d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I’ve had a difficult time getting through what could be considered the <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321154932">first
      book</a> in this series, so I decided to read the <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321154894">.NET
      Framework Standard Library Annotated Reference (Volume 1: Base Class Library and Extended
      Numerics Library)</a> instead. It’s written by Brad Abrams with various other
      contributors.
   </p>
        <p>
      This book is mostly a reference book that covers a subset of the .NET Framework Standard
      Library. Considering the easy availability and detail of the MSDN documentation, you
      might not find this very useful as a reference. It does provide interesting summaries
      of the core namespaces, and it is nice to see all of the method signatures supported
      by a class in just a page or two, but I can’t see myself using it much for reference
      purposes.
   </p>
        <p>
      Unsurprisingly, the selling point of the book is the annotations. I wish there had
      been more of them, but since the annotations are really the only interesting reading,
      it makes this book very easy to read through. Some highlights:
   </p>
        <ul>
          <li>
         Don’t catch, throw, or even derive from <code>ApplicationException</code>. 
      </li>
          <li>
            <code>ArgumentNullException</code> and <code>ArgumentOutOfRangeException</code> take
         the parameter name as its first constructor argument, but their base class, <code>ArgumentException</code>,
         takes the parameter name as the second constructor argument (after the message). 
      </li>
          <li>
            <code>Array.Copy</code> can be very useful. 
      </li>
          <li>
         Prefer using <code>SyncRoot</code> to the <code>Synchronized</code> method. 
      </li>
          <li>
         Seal your custom attribute classes for better performance. 
      </li>
          <li>
         Expressions within a conditional method are not evaluated when the condition is not
         met. (So calls to methods within a <code>Debug.Assert</code> wouldn’t be called
         in Release mode.) 
      </li>
          <li>
         Delegates are immutable. 
      </li>
          <li>
         The static <code>Equals</code> method of the <code>Object</code> class deals with <code>null</code>. 
      </li>
          <li>
            <code>Stream.Null</code> makes a great bit bucket. 
      </li>
          <li>
         Streams work with bytes; Readers and Writers work with characters. 
      </li>
          <li>
         A <code>ThreadAbortException</code> is automatically rethrown if caught.</li>
        </ul>
        <p>
      All in all, I really enjoyed the annotations, but considering how much of the book
      is uninformative reference material, I can’t say that you’ll find it worth
      the money.
   </p>
        <p>
          <strong>Update:</strong> I should also mention that it comes with a CD that contains
      all of the samples from the book. More notable, however, is the 3,864-page PDF
      document that replicates the content of the print book, except that it includes documentation
      for each member of each class. Fascinating, to be sure, but certainly MSDN is more
      convenient.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=ff2b4ff7-99d3-4093-8658-9a6c4f67182d" />
      </body>
      <title>Book Review: .NET Framework Standard Library Annotated Reference (Volume 1)</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,ff2b4ff7-99d3-4093-8658-9a6c4f67182d.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/03/23/BookReviewNETFrameworkStandardLibraryAnnotatedReferenceVolume1.aspx</link>
      <pubDate>Wed, 23 Mar 2005 21:13:08 GMT</pubDate>
      <description>&lt;p&gt;
   I&amp;#8217;ve had a difficult time getting through what could be considered the &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321154932"&gt;first
   book&lt;/a&gt; in this series, so I decided to read the &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321154894"&gt;.NET
   Framework Standard Library Annotated Reference (Volume 1: Base Class Library and Extended
   Numerics Library)&lt;/a&gt; instead. It&amp;#8217;s written by Brad Abrams with various other
   contributors.
&lt;/p&gt;
&lt;p&gt;
   This book is mostly a reference book that covers a subset of the .NET Framework Standard
   Library. Considering the easy availability and detail of the MSDN documentation, you
   might not find this very useful as a reference. It does provide interesting summaries
   of the core namespaces, and it is nice to see all of the method signatures supported
   by a class in just a page or two, but I can&amp;#8217;t see myself using it much for reference
   purposes.
&lt;/p&gt;
&lt;p&gt;
   Unsurprisingly, the selling point of the book is the annotations. I wish there had
   been more of them, but since the annotations are really the only interesting reading,
   it makes this book very easy to read through. Some highlights:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Don&amp;#8217;t catch, throw, or even derive from &lt;code&gt;ApplicationException&lt;/code&gt;. 
   &lt;li&gt;
      &lt;code&gt;ArgumentNullException&lt;/code&gt; and &lt;code&gt;ArgumentOutOfRangeException&lt;/code&gt; take
      the parameter name as its first constructor argument, but their base class, &lt;code&gt;ArgumentException&lt;/code&gt;,
      takes the parameter name as the second constructor argument (after the message). 
   &lt;li&gt;
      &lt;code&gt;Array.Copy&lt;/code&gt; can be very useful. 
   &lt;li&gt;
      Prefer using &lt;code&gt;SyncRoot&lt;/code&gt; to the &lt;code&gt;Synchronized&lt;/code&gt; method. 
   &lt;li&gt;
      Seal your custom attribute classes for better performance. 
   &lt;li&gt;
      Expressions within a conditional method are not evaluated when the condition is not
      met. (So calls to methods within a &lt;code&gt;Debug.Assert&lt;/code&gt; wouldn&amp;#8217;t be called
      in Release mode.) 
   &lt;li&gt;
      Delegates are immutable. 
   &lt;li&gt;
      The static &lt;code&gt;Equals&lt;/code&gt; method of the &lt;code&gt;Object&lt;/code&gt; class deals with &lt;code&gt;null&lt;/code&gt;. 
   &lt;li&gt;
      &lt;code&gt;Stream.Null&lt;/code&gt; makes a great bit bucket. 
   &lt;li&gt;
      Streams work with bytes; Readers and Writers work with characters. 
   &lt;li&gt;
      A &lt;code&gt;ThreadAbortException&lt;/code&gt; is automatically rethrown if caught.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   All in all, I really enjoyed the annotations, but considering how much of the book
   is uninformative reference material, I can&amp;#8217;t say that you&amp;#8217;ll find it worth
   the money.
&lt;/p&gt;
&lt;p&gt;
   &lt;strong&gt;Update:&lt;/strong&gt; I should also mention that it comes with a CD that contains
   all of the samples from the book. More notable, however, is the&amp;nbsp;3,864-page PDF
   document that replicates the content of the print book, except that it includes documentation
   for each member of each class. Fascinating, to be sure, but certainly MSDN is more
   convenient.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=ff2b4ff7-99d3-4093-8658-9a6c4f67182d" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,ff2b4ff7-99d3-4093-8658-9a6c4f67182d.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=0d3b18f5-a0fb-4a0c-a5ce-d5b6af892979</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,0d3b18f5-a0fb-4a0c-a5ce-d5b6af892979.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,0d3b18f5-a0fb-4a0c-a5ce-d5b6af892979.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=0d3b18f5-a0fb-4a0c-a5ce-d5b6af892979</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I’ve been writing a lot about JavaScript lately, but C++ is my first and best
      love (in the realm of programming languages, anyway). I finally decided to hunker
      down and read through <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201700735">The
      C++ Programming Language (Special Third Edition)</a>, written by none other than Bjarne
      Stroustrup, creator of C++.
   </p>
        <p>
      I have a decent amount of C++ experience, and have read many of the C++ books written
      since this one was published, so I didn’t expect to learn a whole lot. Still,
      it was fun to read – at least until I got to the chapter on streams –
      and the road to C++ mastery certainly requires it.
   </p>
        <p>
      I tried to keep a list of interesting items as I read through:
   </p>
        <p>
      8.2.8: A namespace should express a logically coherent set of features without imposing
      a significant notational burden. We need a lot more guidance in this area.
   </p>
        <p>
      8.2.9.3: It is safer to define functions declared in a namespace outside of the corresponding
      namespace declaration.
   </p>
        <pre>// this works
namespace N { void F() {} }</pre>
        <pre>// this is safer
namespace N { void F(); }
void N::F() {}</pre>
        <p>
      11.5: Individual member functions of other classes can be made friends.
   </p>
        <pre>friend Node * Node::GetNext();</pre>
        <p>
      12.4.1.1: Data should be kept in derived classes.
   </p>
        <p>
      14.4.6.1: Exceptions from member initializers can be caught by enclosing the entire
      function body in a <code>try</code> block.
   </p>
        <p>
      15.2.4: I’m finally starting to understand virtual base classes, but experimentation
      was the key when trying to figure out how they ensure that the shared base class constructor
      is only called once, particularly when non-default constructors are involved.
   </p>
        <p>
      15.3.2: Base classes of a <code>struct</code> default to <code>public</code>, just
      like members.
   </p>
        <p>
      17.1: Some relational operations can be created implicitly by <code>using namespace
      std::rel_ops</code>.
   </p>
        <p>
      18.3.1: Input sequences look interesting.
   </p>
        <p>
      18.4.2: I forget about many of the algorithms, like <code>mismatch</code>, <code>inplace_merge</code>,
      and <code>stable_sort</code>.
   </p>
        <p>
      21+: I couldn’t bring myself to care enough about the Streams and Numerics chapters
      to read them carefully. I’ve just never had much use for them.
   </p>
        <p>
      The rest of the book was somewhat interesting, but I enjoyed the first 20 chapters
      the most. You, too, should be sure to read this book if you’re on the road to
      C++ mastery.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=0d3b18f5-a0fb-4a0c-a5ce-d5b6af892979" />
      </body>
      <title>Book Review: The C++ Programming Language</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,0d3b18f5-a0fb-4a0c-a5ce-d5b6af892979.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/03/23/BookReviewTheCProgrammingLanguage.aspx</link>
      <pubDate>Wed, 23 Mar 2005 00:13:52 GMT</pubDate>
      <description>&lt;p&gt;
   I&amp;#8217;ve been writing a lot about JavaScript lately, but C++ is my first and best
   love (in the realm of programming languages, anyway). I finally decided to hunker
   down and read through &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201700735"&gt;The
   C++ Programming Language (Special Third Edition)&lt;/a&gt;, written by none other than Bjarne
   Stroustrup, creator of C++.
&lt;/p&gt;
&lt;p&gt;
   I have a decent amount of C++ experience, and have read many of the C++ books written
   since this one was published, so I didn&amp;#8217;t expect to learn a whole lot. Still,
   it was fun to read &amp;#8211; at least until I got to the chapter on streams &amp;#8211;
   and the road to C++ mastery certainly requires it.
&lt;/p&gt;
&lt;p&gt;
   I tried to keep a list of interesting items as I read through:
&lt;/p&gt;
&lt;p&gt;
   8.2.8: A namespace should express a logically coherent set of features without imposing
   a significant notational burden. We need a lot more guidance in this area.
&lt;/p&gt;
&lt;p&gt;
   8.2.9.3: It is safer to define functions declared in a namespace outside of the corresponding
   namespace declaration.
&lt;/p&gt;
&lt;pre&gt;// this works
namespace N { void F() {} }&lt;/pre&gt;
&lt;pre&gt;// this is safer
namespace N { void F(); }
void N::F() {}&lt;/pre&gt;
&lt;p&gt;
   11.5: Individual member functions of other classes can be made friends.
&lt;/p&gt;
&lt;pre&gt;friend Node * Node::GetNext();&lt;/pre&gt;
&lt;p&gt;
   12.4.1.1: Data should be kept in derived classes.
&lt;/p&gt;
&lt;p&gt;
   14.4.6.1: Exceptions from member initializers can be caught by enclosing the entire
   function body in a &lt;code&gt;try&lt;/code&gt; block.
&lt;/p&gt;
&lt;p&gt;
   15.2.4: I&amp;#8217;m finally starting to understand virtual base classes, but experimentation
   was the key when trying to figure out how they ensure that the shared base class constructor
   is only called once, particularly when non-default constructors are involved.
&lt;/p&gt;
&lt;p&gt;
   15.3.2: Base classes of a &lt;code&gt;struct&lt;/code&gt; default to &lt;code&gt;public&lt;/code&gt;, just
   like members.
&lt;/p&gt;
&lt;p&gt;
   17.1: Some relational operations can be created implicitly by &lt;code&gt;using namespace
   std::rel_ops&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
   18.3.1: Input sequences look interesting.
&lt;/p&gt;
&lt;p&gt;
   18.4.2: I forget about many of the algorithms, like &lt;code&gt;mismatch&lt;/code&gt;, &lt;code&gt;inplace_merge&lt;/code&gt;,
   and &lt;code&gt;stable_sort&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
   21+: I couldn&amp;#8217;t bring myself to care enough about the Streams and Numerics chapters
   to read them carefully. I&amp;#8217;ve just never had much use for them.
&lt;/p&gt;
&lt;p&gt;
   The rest of the book was somewhat interesting, but I enjoyed the first 20 chapters
   the most. You, too, should be sure to read this book if you&amp;#8217;re on the road to
   C++ mastery.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=0d3b18f5-a0fb-4a0c-a5ce-d5b6af892979" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,0d3b18f5-a0fb-4a0c-a5ce-d5b6af892979.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=46fbdf9b-9708-4c51-b760-43d12971e62f</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,46fbdf9b-9708-4c51-b760-43d12971e62f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,46fbdf9b-9708-4c51-b760-43d12971e62f.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=46fbdf9b-9708-4c51-b760-43d12971e62f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0596000480">JavaScript: The
      Definitive Guide</a>, by David Flanagan, is an outstanding book about the JavaScript
      language. It has excellent documentation on both the “core” JavaScript
      language and “client-side” JavaScript as used by a web browser. Best of
      all, it doesn’t mix the two, which is particularly useful if you find yourself
      using JavaScript outside of a browser. It also gives the author a chance to dig deep
      into the core language, which is a far more powerful and expressive language than
      most people realize.
   </p>
        <p>
      The second half of the book consists of three references – one for “core”
      JavaScript, one for “client-side” JavaScript, and one for the W3C DOM.
      The references aren’t nearly as useful as the first half of the book, since
      that sort of documentation is more widely available, but it could come in handy.
   </p>
        <p>
      I have extensive experience using JavaScript both inside and outside of a browser,
      and have recently been studying the more “advanced” features. I was surprised
      by some of the details I had overlooked:
   </p>
        <ul>
          <li>
         The switch statement uses identity (<code>===</code>), not equality (<code>==</code>),
         when looking for a matching case statement.</li>
          <li>
         Each <code>case</code> of a switch statement can use any expression (not just numbers
         or strings).</li>
          <li>
         The first expression of a <code>for...in</code> statement is evaluated for each item.
         (I don’t plan on taking advantage of that obscure feature.)</li>
          <li>
         You can <code>break</code> or <code>continue</code> to a label.</li>
          <li>
            <code>FunctionName.length</code> is the declared number of function arguments.</li>
          <li>
         If a function used as a constructor returns an object, that object becomes the “new”
         object.</li>
          <li>
         The <code>push</code> method of an <code>Array</code> can take multiple arguments.</li>
          <li>
         In client-side JavaScript, “global” variables become properties of the
         global object, the window.</li>
          <li>
            <code>SCRIPT</code> elements should use <code>DEFER</code> if they don’t call <code>document.write</code>.</li>
          <li>
         The Internet Explorer event model has important differences from the standard event
         model.</li>
          <li>
         The standard <code>Error</code> object simply takes a string in its constructor (in
         Internet Explorer, the <code>Error</code> constructor is documented as taking a number
         followed by the message; I have since discovered that the standard behavior is supported
         as well).</li>
          <li>
         The <code>substr</code> method of <code>String</code> is deprecated in favor of <code>substring</code> or <code>slice</code>.
         (Unfortunately, I find <code>substr</code> far more natural than <code>substring</code> or <code>slice</code>.)</li>
          <li>
         There are a lot of methods that only work in Internet Explorer (and this book only
         scratched the surface).</li>
        </ul>
        <p>
      The book also talks some about “Object-Oriented JavaScript,” which I hope
      to talk more about in a future post.
   </p>
        <p>
      If you are a JavaScript programmer but realize that you may only be scratching the
      surface of what is possible, or wonder why the language doesn’t always behave
      as you’d expect it to, I highly recommend that you read this book.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=46fbdf9b-9708-4c51-b760-43d12971e62f" />
      </body>
      <title>Book Review: JavaScript: The Definitive Guide</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,46fbdf9b-9708-4c51-b760-43d12971e62f.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/03/01/BookReviewJavaScriptTheDefinitiveGuide.aspx</link>
      <pubDate>Tue, 01 Mar 2005 21:36:27 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0596000480"&gt;JavaScript: The
   Definitive Guide&lt;/a&gt;, by David Flanagan, is an outstanding book about the JavaScript
   language. It has excellent documentation on both the &amp;#8220;core&amp;#8221; JavaScript
   language and &amp;#8220;client-side&amp;#8221; JavaScript as used by a web browser. Best of
   all, it doesn&amp;#8217;t mix the two, which is particularly useful if you find yourself
   using JavaScript outside of a browser. It also gives the author a chance to dig deep
   into the core language, which is a far more powerful and expressive language than
   most people realize.
&lt;/p&gt;
&lt;p&gt;
   The second half of the book consists of three references &amp;#8211; one for &amp;#8220;core&amp;#8221;
   JavaScript, one for &amp;#8220;client-side&amp;#8221; JavaScript, and one for the W3C DOM.
   The references aren&amp;#8217;t nearly as useful as the first half of the book, since
   that sort of documentation is more widely available, but it could come in handy.
&lt;/p&gt;
&lt;p&gt;
   I have extensive experience using JavaScript both inside and outside of a browser,
   and have recently been studying the more &amp;#8220;advanced&amp;#8221; features. I was surprised
   by some of the details I had overlooked:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      The switch statement uses identity (&lt;code&gt;===&lt;/code&gt;), not equality (&lt;code&gt;==&lt;/code&gt;),
      when looking for a matching case statement.&lt;/li&gt;
   &lt;li&gt;
      Each &lt;code&gt;case&lt;/code&gt; of a switch statement can use any expression (not just numbers
      or strings).&lt;/li&gt;
   &lt;li&gt;
      The first expression of a &lt;code&gt;for...in&lt;/code&gt; statement is evaluated for each item.
      (I don&amp;#8217;t plan on taking advantage of that obscure feature.)&lt;/li&gt;
   &lt;li&gt;
      You can &lt;code&gt;break&lt;/code&gt; or &lt;code&gt;continue&lt;/code&gt; to a label.&lt;/li&gt;
   &lt;li&gt;
      &lt;code&gt;FunctionName.length&lt;/code&gt; is the declared number of function arguments.&lt;/li&gt;
   &lt;li&gt;
      If a function used as a constructor returns an object, that object becomes the &amp;#8220;new&amp;#8221;
      object.&lt;/li&gt;
   &lt;li&gt;
      The &lt;code&gt;push&lt;/code&gt; method of an &lt;code&gt;Array&lt;/code&gt; can take multiple arguments.&lt;/li&gt;
   &lt;li&gt;
      In client-side JavaScript, &amp;#8220;global&amp;#8221; variables become properties of the
      global object, the window.&lt;/li&gt;
   &lt;li&gt;
      &lt;code&gt;SCRIPT&lt;/code&gt; elements should use &lt;code&gt;DEFER&lt;/code&gt; if they don&amp;#8217;t call &lt;code&gt;document.write&lt;/code&gt;.&lt;/li&gt;
   &lt;li&gt;
      The Internet Explorer event model has important differences from the standard event
      model.&lt;/li&gt;
   &lt;li&gt;
      The standard &lt;code&gt;Error&lt;/code&gt; object simply takes a string in its constructor (in
      Internet Explorer, the &lt;code&gt;Error&lt;/code&gt; constructor is documented as taking a number
      followed by the message; I have since discovered that the standard behavior is supported
      as well).&lt;/li&gt;
   &lt;li&gt;
      The &lt;code&gt;substr&lt;/code&gt; method of &lt;code&gt;String&lt;/code&gt; is deprecated in favor of &lt;code&gt;substring&lt;/code&gt; or &lt;code&gt;slice&lt;/code&gt;.
      (Unfortunately, I find &lt;code&gt;substr&lt;/code&gt; far more natural than &lt;code&gt;substring&lt;/code&gt; or &lt;code&gt;slice&lt;/code&gt;.)&lt;/li&gt;
   &lt;li&gt;
      There are a lot of methods that only work in Internet Explorer (and this book only
      scratched the surface).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   The book also talks some about &amp;#8220;Object-Oriented JavaScript,&amp;#8221; which I hope
   to talk more about in a future post.
&lt;/p&gt;
&lt;p&gt;
   If you are a JavaScript programmer but realize that you may only be scratching the
   surface of what is possible, or wonder why the language doesn&amp;#8217;t always behave
   as you&amp;#8217;d expect it to, I highly recommend that you read this book.
&lt;/p&gt;
&gt;&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=46fbdf9b-9708-4c51-b760-43d12971e62f" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,46fbdf9b-9708-4c51-b760-43d12971e62f.aspx</comments>
      <category>Books;JavaScript</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=58ef07db-70ca-4b45-bdd1-ef2f1f697566</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,58ef07db-70ca-4b45-bdd1-ef2f1f697566.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,58ef07db-70ca-4b45-bdd1-ef2f1f697566.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=58ef07db-70ca-4b45-bdd1-ef2f1f697566</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I don’t use FogBugz for bug tracking, so I read <a href="http://www.amazon.com/exec/obidos/tg/detail/-/159059486X">Painless
      Project Management with FogBugz</a> by Mike Gunderloy more out of curiosity than real
      need. Since I have little experience with formal bug-tracking systems (I know, shame
      on me), I found it interesting to read about the various features of this particular
      bug-tracking system and some of the philosophy behind those features. If you are considering
      purchasing FogBugz, or are learning how to use it, this book is sure to be useful
      to you.
   </p>
        <p>
      (I did end up with one particularly practical nugget of information, though. We’re
      currently using Visual SourceSafe for source control, and I wondered how a bug-tracking
      system could easily integrate with VSS – it would need to know which files were
      most recently checked in, but I know that the History feature of VSS is quite slow.
      As it turns out, there’s a useful Journal feature that’s available through
      the Options dialog of the VSS Administrator. It records every change to the database
      to a log file, which could come in handy for any tools I might write to monitor the
      database.)
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=58ef07db-70ca-4b45-bdd1-ef2f1f697566" />
      </body>
      <title>Book Review: Painless Project Management with FogBugz</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,58ef07db-70ca-4b45-bdd1-ef2f1f697566.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/02/28/BookReviewPainlessProjectManagementWithFogBugz.aspx</link>
      <pubDate>Mon, 28 Feb 2005 23:22:25 GMT</pubDate>
      <description>&lt;p&gt;
   I don&amp;#8217;t use FogBugz for bug tracking, so I read &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/159059486X"&gt;Painless
   Project Management with FogBugz&lt;/a&gt; by Mike Gunderloy more out of curiosity than real
   need. Since I have little experience with formal bug-tracking systems (I know, shame
   on me), I found it interesting to read about the various features of this particular
   bug-tracking system and some of the philosophy behind those features. If you are considering
   purchasing FogBugz, or are learning how to use it, this book is sure to be useful
   to you.
&lt;/p&gt;
&lt;p&gt;
   (I did end up with one particularly practical nugget of information, though. We&amp;#8217;re
   currently using Visual SourceSafe for source control, and I wondered how a bug-tracking
   system could easily integrate with VSS &amp;#8211; it would need to know which files were
   most recently checked in, but I know that the History feature of VSS is quite slow.
   As it turns out, there&amp;#8217;s a useful Journal feature that&amp;#8217;s available through
   the Options dialog of the VSS Administrator. It records every change to the database
   to a log file, which could come in handy for any tools I might write to monitor the
   database.)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=58ef07db-70ca-4b45-bdd1-ef2f1f697566" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,58ef07db-70ca-4b45-bdd1-ef2f1f697566.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=8c9e0ecc-58d8-4a83-ad0f-9b563d26ecd1</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,8c9e0ecc-58d8-4a83-ad0f-9b563d26ecd1.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,8c9e0ecc-58d8-4a83-ad0f-9b563d26ecd1.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=8c9e0ecc-58d8-4a83-ad0f-9b563d26ecd1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201432935">Pattern Hatching:
      Design Patterns Applied</a> is small book that serves as a follow-up to <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201633612">Design
      Patterns</a>. It was written by John Vlissides, one of the “Gang of Four,”
      and published back in 1998.
   </p>
        <p>
      I enjoyed chapter two of this book, “Designing with Patterns,” as it provided
      a concrete example of patterns at work. The rest of the book seemed aimed at writers
      of patterns, so I found it much less interesting. One big problem was that I didn’t
      heed the warning in the introduction that I needed to be very familiar with all of
      the classic patterns – I don’t know them as well as I ought, so I sometimes
      had a little trouble following. It must be time to reread <em>Design Patterns</em>.
      I also need to brush up on my UML – there can be a lot of meaning hidden behind
      the style of arrowhead used in a diagram.
   </p>
        <p>
      In summary, I can’t give the book a formal recommentation, but I did find it
      interesting, and if you’re really into patterns, then you certainly need to
      have read this book.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=8c9e0ecc-58d8-4a83-ad0f-9b563d26ecd1" />
      </body>
      <title>Book Review: Pattern Hatching</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,8c9e0ecc-58d8-4a83-ad0f-9b563d26ecd1.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/02/14/BookReviewPatternHatching.aspx</link>
      <pubDate>Mon, 14 Feb 2005 20:44:58 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201432935"&gt;Pattern Hatching:
   Design Patterns Applied&lt;/a&gt; is small book that serves as a follow-up to &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201633612"&gt;Design
   Patterns&lt;/a&gt;. It was written by John Vlissides, one of the &amp;#8220;Gang of Four,&amp;#8221;
   and published back in 1998.
&lt;/p&gt;
&lt;p&gt;
   I enjoyed chapter two of this book, &amp;#8220;Designing with Patterns,&amp;#8221; as it provided
   a concrete example of patterns at work. The rest of the book seemed aimed at writers
   of patterns, so I found it much less interesting. One big problem was that I didn&amp;#8217;t
   heed the warning in the introduction that I needed to be very familiar with all of
   the classic patterns &amp;#8211; I don&amp;#8217;t know them as well as I ought, so I sometimes
   had a little trouble following. It must be time to reread &lt;em&gt;Design Patterns&lt;/em&gt;.
   I also need to brush up on my UML &amp;#8211; there can be a lot of meaning hidden behind
   the style of arrowhead used in a diagram.
&lt;/p&gt;
&lt;p&gt;
   In summary, I can&amp;#8217;t give the book a formal recommentation, but I did find it
   interesting, and if you&amp;#8217;re really into patterns, then you certainly need to
   have read this book.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=8c9e0ecc-58d8-4a83-ad0f-9b563d26ecd1" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,8c9e0ecc-58d8-4a83-ad0f-9b563d26ecd1.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=3b4b0eca-391f-4b03-95a8-e0d613ab74bb</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,3b4b0eca-391f-4b03-95a8-e0d613ab74bb.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,3b4b0eca-391f-4b03-95a8-e0d613ab74bb.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=3b4b0eca-391f-4b03-95a8-e0d613ab74bb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/1593270038">Write Great Code
      (Volume I: Understanding the Machine)</a>, by Randall Hyde, wants to help you write
      better software by teaching you more about the hardware. I found the book quite fascinating
      when I didn’t find it uninteresting. I skimmed through his software implementations
      of floating-point operations, the design of a hypothetical instruction set, and some
      of the other really deep material, so I ended up really enjoying the book overall.
   </p>
        <p>
      I enjoyed the refresher on how floating-point works. I’ve never paid much attention
      to hardware, so I learned a lot about what the data buses are and how they’re
      used, how memory is accessed, what a wait state is, etc. I thought I knew Boolean
      logic until I read (and then skimmed) chapter 8. I learned a lot about I/O in the
      last chapter as well.
   </p>
        <p>
      The less you understand about the hardware, the more you stand to gain from reading
      this book. I don’t intend to leverage the material to go out and exercise premature
      optimization in all of my future code, of course; after all, code should be written
      for humans, not machines, until it becomes clear that there’s a performance
      problem.
   </p>
        <p>
      I’m somewhat tempted to read Hyde’s other book, <a href="http://www.amazon.com/exec/obidos/tg/detail/-/1886411972">The
      Art of Assembly Language</a>. However, from what I can tell, that book teaches you
      how to write assembly language in HLA (High-Level Assembly). I’d be much better
      off learning how to read assembly language for x86 processors, since that still comes
      in handy when debugging high-level languages.
   </p>
        <p>
      I highly recommend this book to anyone that knows more about software than hardware,
      and I’m looking forward to <a href="http://writegreatcode.com">Volume II: Thinking
      Low-Level, Writing High-Level</a>.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=3b4b0eca-391f-4b03-95a8-e0d613ab74bb" />
      </body>
      <title>Book Review: Write Great Code (Volume I)</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,3b4b0eca-391f-4b03-95a8-e0d613ab74bb.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/02/10/BookReviewWriteGreatCodeVolumeI.aspx</link>
      <pubDate>Thu, 10 Feb 2005 23:26:19 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/1593270038"&gt;Write Great Code
   (Volume I: Understanding the Machine)&lt;/a&gt;, by Randall Hyde, wants to help you write
   better software by teaching you more about the hardware. I found the book quite fascinating
   when I didn&amp;#8217;t find it uninteresting. I skimmed through his software implementations
   of floating-point operations, the design of a hypothetical instruction set, and some
   of the other really deep material, so I ended up really enjoying the book overall.
&lt;/p&gt;
&lt;p&gt;
   I enjoyed the refresher on how floating-point works. I&amp;#8217;ve never paid much attention
   to hardware, so I learned a lot about what the data buses are and how they&amp;#8217;re
   used, how memory is accessed, what a wait state is, etc. I thought I knew Boolean
   logic until I read (and then skimmed) chapter 8. I learned a lot about I/O in the
   last chapter as well.
&lt;/p&gt;
&lt;p&gt;
   The less you understand about the hardware, the more you stand to gain from reading
   this book. I don&amp;#8217;t intend to leverage the material to go out and exercise premature
   optimization in all of my future code, of course; after all, code should be written
   for humans, not machines, until it becomes clear that there&amp;#8217;s a performance
   problem.
&lt;/p&gt;
&lt;p&gt;
   I&amp;#8217;m somewhat tempted to read Hyde&amp;#8217;s other book, &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/1886411972"&gt;The
   Art of Assembly Language&lt;/a&gt;. However, from what I can tell, that book teaches you
   how to write assembly language in HLA (High-Level Assembly). I&amp;#8217;d be much better
   off learning how to read assembly language for x86 processors, since that still comes
   in handy when debugging high-level languages.
&lt;/p&gt;
&lt;p&gt;
   I highly recommend this book to anyone that knows more about software than hardware,
   and I&amp;#8217;m looking forward to &lt;a href="http://writegreatcode.com"&gt;Volume II: Thinking
   Low-Level, Writing High-Level&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=3b4b0eca-391f-4b03-95a8-e0d613ab74bb" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,3b4b0eca-391f-4b03-95a8-e0d613ab74bb.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=b89a05bc-baf2-4ca5-92fa-55170654d078</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,b89a05bc-baf2-4ca5-92fa-55170654d078.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,b89a05bc-baf2-4ca5-92fa-55170654d078.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=b89a05bc-baf2-4ca5-92fa-55170654d078</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.gotw.ca/publications/c++cs.htm">C++ Coding Standards</a>, by Herb
      Sutter and Andrei Alexandrescu, provides “101 rules, guidelines, and best practices”
      for programmers that aim to write modern, high-quality C++ code. Every C++ programmer
      needs to read and understand this book.
   </p>
        <p>
      Relatively inexperienced C++ programmers will have a hard time following some of the
      items in this book, many of which assume that this isn’t the first, or even
      the fifth, C++ book or article that you’ve read. Fortunately, each item comes
      with a handy list of references to follow until you achieve sufficient mastery.
   </p>
        <p>
      It’s really hard to argue with most of the items in the book. Many of the items
      are about minimizing dependencies, which I consider to be the most important rule
      of software development (items 5, 6, 10, 11, 18, 21, 22, 32-44, etc.). I also love
      item 9, referenced by many of the other items: “Don’t pessimize prematurely.”
      (Don’t worry; it’s preceded by item 8, “Don’t optimize prematurely.”)
      There were a few items that were a bit surprising – item 58 seems to suggest
      defining far more namespaces than I’m accustomed to; I wish it would have given
      naming guidelines!
   </p>
        <p>
      The book does an excellent job of bringing all of the little C++ rules that I’ve
      picked up here and there and putting them all in one short book. The authors did an
      excellent job of filling 220 pages with 101 items, while always starting each item
      at the top of a page! There’s also a handy summary of all 101 items in the back,
      right after the extensive list of references, and before what looks to be a thorough
      index. Be sure to review this material before any new C++ project to help correct
      the biggest challenge of C++ programming – it’s hard to remember all of
      this stuff!
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=b89a05bc-baf2-4ca5-92fa-55170654d078" />
      </body>
      <title>Book Review: C++ Coding Standards</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,b89a05bc-baf2-4ca5-92fa-55170654d078.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/01/25/BookReviewCCodingStandards.aspx</link>
      <pubDate>Tue, 25 Jan 2005 00:57:57 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.gotw.ca/publications/c++cs.htm"&gt;C++ Coding Standards&lt;/a&gt;, by Herb
   Sutter and Andrei Alexandrescu, provides &amp;#8220;101 rules, guidelines, and best practices&amp;#8221;
   for programmers that aim to write modern, high-quality C++ code. Every C++ programmer
   needs to read and understand this book.
&lt;/p&gt;
&lt;p&gt;
   Relatively inexperienced C++ programmers will have a hard time following some of the
   items in this book, many of which assume that this isn&amp;#8217;t the first, or even
   the fifth, C++ book or article that you&amp;#8217;ve read. Fortunately, each item comes
   with a handy list of references to follow until you achieve sufficient mastery.
&lt;/p&gt;
&lt;p&gt;
   It&amp;#8217;s really hard to argue with most of the items in the book. Many of the items
   are about minimizing dependencies, which I consider to be the most important rule
   of software development (items 5, 6, 10, 11, 18, 21, 22, 32-44, etc.). I also love
   item 9, referenced by many of the other items: &amp;#8220;Don&amp;#8217;t pessimize prematurely.&amp;#8221;
   (Don&amp;#8217;t worry; it&amp;#8217;s preceded by item 8, &amp;#8220;Don&amp;#8217;t optimize prematurely.&amp;#8221;)
   There were a few items that were a bit surprising &amp;#8211; item 58 seems to suggest
   defining far more namespaces than I&amp;#8217;m accustomed to; I wish it would have given
   naming guidelines!
&lt;/p&gt;
&lt;p&gt;
   The book does an excellent job of bringing all of the little C++ rules that I&amp;#8217;ve
   picked up here and there and putting them all in one short book. The authors did an
   excellent job of filling 220 pages with 101 items, while always starting each item
   at the top of a page! There&amp;#8217;s also a handy summary of all 101 items in the back,
   right after the extensive list of references, and before what looks to be a thorough
   index. Be sure to review this material before any new C++ project to help correct
   the biggest challenge of C++ programming &amp;#8211; it&amp;#8217;s hard to remember all of
   this stuff!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=b89a05bc-baf2-4ca5-92fa-55170654d078" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,b89a05bc-baf2-4ca5-92fa-55170654d078.aspx</comments>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://www.ejball.com/EdAtWork/Trackback.aspx?guid=1355b71d-ddcd-41dc-8972-c290312ed1fc</trackback:ping>
      <pingback:server>http://www.ejball.com/EdAtWork/pingback.aspx</pingback:server>
      <pingback:target>http://www.ejball.com/EdAtWork/PermaLink,guid,1355b71d-ddcd-41dc-8972-c290312ed1fc.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.ejball.com/EdAtWork/CommentView,guid,1355b71d-ddcd-41dc-8972-c290312ed1fc.aspx</wfw:comment>
      <wfw:commentRss>http://www.ejball.com/EdAtWork/SyndicationService.asmx/GetEntryCommentsRss?guid=1355b71d-ddcd-41dc-8972-c290312ed1fc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/exec/obidos/tg/detail/-/078214361X">Developer to Designer</a>,
      by Mike Gunderloy, contains practical advice on how to design a decent Windows application.
      It’s much more than just throwing some controls onto an interactive designer,
      writing some event handlers, and sticking a fork in it. You’ve got to pay attention
      to Windows user interface conventions, both written and unwritten. You’ve got
      to align controls properly, create predictable menus, ensure that functionality can
      be accessed by both mouse and keyboard, etc., etc. You’ve got to be consistent
      within your own application and with the other Windows applications that your users
      have grown comfortable with. Unless you’re one of a rare breed of developers
      that has a user interface designer making these decisions for you, it’s up to
      you to make this happen.
   </p>
        <p>
      There’s not much in this book that can’t be learned with experience, so
      if you’re a Windows programming veteran that has taken care to follow the Windows
      user interface guidelines, you may not learn much from this book. I must admit that
      I found nothing surprising in the book, and couldn’t escape the feeling that
      any Windows programmers worth their salt should already know all of this stuff. However,
      if you’re relatively new to Windows programming, or haven’t really taken
      the time to make a Windows user interface that’s at least as good as the likes
      of Microsoft Office, then this book will put you on the right track.
   </p>
        <p>
      I should mention that Developer to Designer also spends a few chapters on basic Web
      design. The same idea applies – if you have any experience with Web development,
      these chapters may seem terribly obvious, but if you’re new to Web development,
      this book should provide you with a good starting point.
   </p>
        <p>
      The book also includes an appendix on what we might expect from the new user interface
      guidelines that will attend the next version of Windows, code-named Longhorn. If you
      haven’t already done much reading on the subject, this should provide a simple
      introduction of what is to come.
   </p>
        <p>
      In summary, this book distills years of Windows UI design experience into one short
      book of great tips, so if you want to take a shortcut and start writing good user
      interface for Windows today, reading this book will be a great start.
   </p>
        <img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=1355b71d-ddcd-41dc-8972-c290312ed1fc" />
      </body>
      <title>Book Review: Developer to Designer</title>
      <guid>http://www.ejball.com/EdAtWork/PermaLink,guid,1355b71d-ddcd-41dc-8972-c290312ed1fc.aspx</guid>
      <link>http://www.ejball.com/EdAtWork/2005/01/10/BookReviewDeveloperToDesigner.aspx</link>
      <pubDate>Mon, 10 Jan 2005 16:31:54 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/078214361X"&gt;Developer to Designer&lt;/a&gt;,
   by Mike Gunderloy, contains practical advice on how to design a decent Windows application.
   It&amp;#8217;s much more than just throwing some controls onto an interactive designer,
   writing some event handlers, and sticking a fork in it. You&amp;#8217;ve got to pay attention
   to Windows user interface conventions, both written and unwritten. You&amp;#8217;ve got
   to align controls properly, create predictable menus, ensure that functionality can
   be accessed by both mouse and keyboard, etc., etc. You&amp;#8217;ve got to be consistent
   within your own application and with the other Windows applications that your users
   have grown comfortable with. Unless you&amp;#8217;re one of a rare breed of developers
   that has a user interface designer making these decisions for you, it&amp;#8217;s up to
   you to make this happen.
&lt;/p&gt;
&lt;p&gt;
   There&amp;#8217;s not much in this book that can&amp;#8217;t be learned with experience, so
   if you&amp;#8217;re a Windows programming veteran that has taken care to follow the Windows
   user interface guidelines, you may not learn much from this book. I must admit that
   I found nothing surprising in the book, and couldn&amp;#8217;t escape the feeling that
   any Windows programmers worth their salt should already know all of this stuff. However,
   if you&amp;#8217;re relatively new to Windows programming, or haven&amp;#8217;t really taken
   the time to make a Windows user interface that&amp;#8217;s at least as good as the likes
   of Microsoft Office, then this book will put you on the right track.
&lt;/p&gt;
&lt;p&gt;
   I should mention that Developer to Designer also spends a few chapters on basic Web
   design. The same idea applies &amp;#8211; if you have any experience with Web development,
   these chapters may seem terribly obvious, but if you&amp;#8217;re new to Web development,
   this book should provide you with a good starting point.
&lt;/p&gt;
&lt;p&gt;
   The book also includes an appendix on what we might expect from the new user interface
   guidelines that will attend the next version of Windows, code-named Longhorn. If you
   haven&amp;#8217;t already done much reading on the subject, this should provide a simple
   introduction of what is to come.
&lt;/p&gt;
&lt;p&gt;
   In summary, this book distills years of Windows UI design experience into one short
   book of great tips, so if you want to take a shortcut and start writing good user
   interface for Windows today, reading this book will be a great start.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ejball.com/EdAtWork/aggbug.ashx?id=1355b71d-ddcd-41dc-8972-c290312ed1fc" /&gt;</description>
      <comments>http://www.ejball.com/EdAtWork/CommentView,guid,1355b71d-ddcd-41dc-8972-c290312ed1fc.aspx</comments>
      <category>Books</category>
    </item>
  </channel>
</rss>