<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Dr. Blip's PC-Doctor Blog - Software</title>
    <link>http://www.pcdoctor-community.com/blog/</link>
    <description>A technical blog for technical people, among other things...</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.5.5 - http://www.s9y.org/</generator>
    <pubDate>Tue, 03 Jun 2008 15:31:36 GMT</pubDate>

    <image>
        <url>http://www.pcdoctor-community.com/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Dr. Blip's PC-Doctor Blog - Software - A technical blog for technical people, among other things...</title>
        <link>http://www.pcdoctor-community.com/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Enums in C++ Suck</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/06/03/Enums-in-C++-Suck/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/06/03/Enums-in-C++-Suck/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=218</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=218</wfw:commentRss>
    

    <author>nospam@example.com (fred.bertsch)</author>
    <content:encoded>
    Like most strongly typed languages, C++ has a way to group a set of constants together as their own type called enums. Enums are extremely useful in a wide variety of circumstances. However, enums in C++ have a lot of problems, and, in fact, they&#039;re really a mess. &lt;a href=&quot;http://cpp-tips-gw.blogspot.com/2008/04/efficient-enum-access_8452.html&quot;&gt;I&#039;m&lt;/a&gt; &lt;a href=&quot;http://aautar.digital-radiation.com/blog/2006/12/namespace-enum-trick.html&quot;&gt;certainly&lt;/a&gt; &lt;a href=&quot;http://noamtm.blogspot.com/2005/07/enum-code-generation.html&quot;&gt;not&lt;/a&gt; &lt;a href=&quot;http://blog.stevex.net/index.php/2007/09/11/enums-in-c0x/&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;http://www.artima.com/forums/flat.jsp?forum=106&amp;thread=115363&quot;&gt;only&lt;/a&gt; &lt;a href=&quot;http://www.codeproject.com/KB/cpp/EnumBinder.aspx&quot;&gt;person&lt;/a&gt; &lt;a href=&quot;http://danielkitta.org/blog/category/tech/?s=enum&amp;submit=Search&quot;&gt;to&lt;/a&gt; &lt;a href=&quot;http://blogs.msdn.com/vcblog/archive/2008/04/30/enums-macros-unicode-and-token-pasting.aspx&quot;&gt;complain&lt;/a&gt; &lt;a href=&quot;http://scottbilas.blogspot.com/2007/10/stupid-enum-tricks.html&quot;&gt;about&lt;/a&gt; &lt;a href=&quot;http://www.gamedev.net/community/forums/topic.asp?topic_id=289588&quot;&gt;this&lt;/a&gt;, &lt;a href=&quot;http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!291.entry&quot;&gt;either&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Enums don&#039;t fit in with the rest of the language. They feel like something that was tacked onto the language to me. This is purely an aesthetic issue, and the fact that they&#039;re useful in a wide variety of circumstances probably negates this.&lt;br /&gt;
&lt;br /&gt;
More practically, you can&#039;t control the conversion of the enum to and from integers. For example, you can use the less than operator to compare an enum and an integer without using a cast. This can result in accidental conversions that don&#039;t make sense. &lt;br /&gt;
&lt;br /&gt;
Perhaps the worst problem is the scope of the constants defined by the enum. They are enclosed in the same scope as the enum itself. I&#039;ve seen a lot of code where people prepend an abbreviation of the enum&#039;s type to each of the enum&#039;s constants to avoid this problem. Adding the type to the name of a constant is always a good sign that something bad is happening.&lt;br /&gt;
&lt;br /&gt;
In addition, you can&#039;t decide ahead of time what the size of your enum&#039;s type is. C++ normally tries to give the programmer as much control as possible. In the case of enums, this allows the compiler to store your enum in whatever type it wants to. Frequently, this doesn&#039;t matter, but when it does matter, you&#039;ll end up copying the value into an integer type that&#039;s less expressive than than the enum. &lt;br /&gt;
&lt;br /&gt;
After the break, I&#039;ll explain what other languages are doing about it, what the next iteration of the C++ standard will do about it, and what you can do about it now. &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/06/03/Enums-in-C++-Suck/#extended&quot;&gt;Continue reading &quot;Enums in C++ Suck&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 03 Jun 2008 11:17:00 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/06/03/218/</guid>
    
</item>
<item>
    <title>A Theory of Scheduling Low Priority Work</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/05/26/A-Theory-of-Scheduling-Low-Priority-Work/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/05/26/A-Theory-of-Scheduling-Low-Priority-Work/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=217</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=217</wfw:commentRss>
    

    <author>nospam@example.com (fred.bertsch)</author>
    <content:encoded>
    PC-Doctor delivers an enormous number of different products to different customers. Each customer gets a different product, and they get frequent updates to that product as well. Delivering these products requires complex synchronization between dozens of engineers. We&#039;ve gotten great at scheduling the most important work. Our clients love us for that. &lt;br /&gt;
&lt;br /&gt;
However, the low priority projects get released significantly less reliably. Until recently, I&#039;d assumed that this problem was unique to PC-Doctor. Based on some extremely sketchy evidence from another company, I&#039;m going to release my Theory Of Scheduling Low priOrity Work (TOSLOW).&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/05/26/A-Theory-of-Scheduling-Low-Priority-Work/#extended&quot;&gt;Continue reading &quot;A Theory of Scheduling Low Priority Work&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 26 May 2008 12:00:00 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/05/26/217/</guid>
    
</item>
<item>
    <title>Making Regexes Readable</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/05/21/Making-Regexes-Readable/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/05/21/Making-Regexes-Readable/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=216</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=216</wfw:commentRss>
    

    <author>nospam@example.com (fred.bertsch)</author>
    <content:encoded>
    Regular expressions are extremely powerful. They have a tendency, however, to grow and turn into unreadable messes. What have people done to try to tame them?&lt;br /&gt;
&lt;br /&gt;
Perl is often on the forefront of regex technology. It allows &lt;a href=&quot;http://www.perl.com/pub/a/2004/01/16/regexps.html&quot;&gt;multiline regexes with ignored whitespace&lt;/a&gt; and comments. That&#039;s nice, and it&#039;s a great step in the right direction. If your regex grows much more than that example, then you&#039;ll still have a mess.&lt;br /&gt;
&lt;br /&gt;
Click through to see another solution.&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/05/21/Making-Regexes-Readable/#extended&quot;&gt;Continue reading &quot;Making Regexes Readable&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 21 May 2008 13:01:00 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/05/21/216/</guid>
    
</item>
<item>
    <title>Anonymous Methods in C# Cause Subtle Programming Errors.</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/05/12/Anonymous-Methods-in-C-Cause-Subtle-Programming-Errors./</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/05/12/Anonymous-Methods-in-C-Cause-Subtle-Programming-Errors./#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=210</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=210</wfw:commentRss>
    

    <author>nospam@example.com (fred.bertsch)</author>
    <content:encoded>
    Lambda expressions and anonymous methods in C# are more complicated than you probably think. &lt;a href=&quot;http://blogs.msdn.com/oldnewthing/archive/2006/08/02/686456.aspx&quot;&gt;Microsoft points out&lt;/a&gt; that an incomplete understanding of them can result in &quot;subtle programming errors&quot;. After running into exactly that, I&#039;d agree. While I haven&#039;t tried it, Lambda expressions in C# 3 are supposed to do exactly the same thing.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/05/12/Anonymous-Methods-in-C-Cause-Subtle-Programming-Errors./#extended&quot;&gt;Continue reading &quot;Anonymous Methods in C# Cause Subtle Programming Errors.&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 12 May 2008 07:52:33 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/05/12/210/</guid>
    
</item>
<item>
    <title>Developing a New Framework</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/05/05/Developing-a-New-Framework/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/05/05/Developing-a-New-Framework/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=170</wfw:comment>

    <slash:comments>4</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=170</wfw:commentRss>
    

    <author>nospam@example.com (fred.bertsch)</author>
    <content:encoded>
    This post is a bit of a change for me. I&#039;m actually going to write about my work for PC-Doctor! I&#039;m actually a bit embarrassed at how rare that&#039;s been. &lt;br /&gt;
&lt;br /&gt;
I want to talk about how to design a brand new framework. It&#039;s not something that everyone has to do, and it&#039;s not something that anyone does frequently. However, there&#039;s very little information on the web about the differences between creating a library and a framework. &lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/05/05/Developing-a-New-Framework/#extended&quot;&gt;Continue reading &quot;Developing a New Framework&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 05 May 2008 12:00:00 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/05/05/170/</guid>
    
</item>
<item>
    <title>C++0x: The Lambda Expression Debate</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/04/27/C++0x-The-Lambda-Expression-Debate/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/04/27/C++0x-The-Lambda-Expression-Debate/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=168</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=168</wfw:commentRss>
    

    <author>nospam@example.com (fred.bertsch)</author>
    <content:encoded>
    &lt;br /&gt;
The next C++ standard (C++0x) will have lambda expressions as part of the standard. &lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2550.pdf&quot;&gt;N2550&lt;/a&gt; introduces them. It&#039;s a short document, and it&#039;s not too painful to read. Go ahead and click it.&lt;br /&gt;
&lt;br /&gt;
Like many new C++ standards, it&#039;s not clear yet how the new feature is going to be used. Michael Feathers has &lt;a href=&quot;http://beautifulcode.oreillynet.com/2008/03/the_lambda_function_tradeoff_c.php&quot;&gt;already decided not to use them&lt;/a&gt;. At least &lt;a href=&quot;http://yvan.seth.id.au/Entries/Technology/Code/Further_notes_on_C___lambda__N2550_.html&quot;&gt;one other person&lt;/a&gt; seems to mostly agree. I, on the other hand, am with &lt;a href=&quot;http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!785.entry?wa=wsignin1.0&quot;&gt;Herb Sutter&lt;/a&gt; who seems excited enough about the feature to imply that MSVC10 will have support for it. This is going to be a great feature. Incidentally, Sutter has mentioned an addition to C++/CLI in the past that would add less sophisticated lambda support for concurrency. I suspect he&#039;s serious about adding the support soon.&lt;br /&gt;
&lt;br /&gt;
There have been many times when I&#039;ve desperately wanted to avoid defining a one-off functor or function in my code. In fact, there have been times when I&#039;ve been desperate enough to actually use &lt;a href=&quot;http://www.boost.org/doc/libs/1_35_0/doc/html/lambda.html&quot;&gt;Boost.Lambda&lt;/a&gt;! This standard is a clear win over Boost&#039;s attempts to deal with the limitations of C++03. &lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/04/27/C++0x-The-Lambda-Expression-Debate/#extended&quot;&gt;Continue reading &quot;C++0x: The Lambda Expression Debate&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 27 Apr 2008 12:00:00 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/04/27/168/</guid>
    
</item>
<item>
    <title>The Next JavaScript...</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/04/23/The-Next-JavaScript.../</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/04/23/The-Next-JavaScript.../#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=180</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=180</wfw:commentRss>
    

    <author>nospam@example.com (fred.bertsch)</author>
    <content:encoded>
    &lt;br /&gt;
ECMAScript 4.0 (ES4) is on its way. This will be the next standard for JavaScript. It&#039;s not going to be usable on web pages for a while, though. In fact, I suspect I won&#039;t be using it on my web page for at least 5 years. The problem is simple: as long as people still use older browsers, you won&#039;t be able to assume that people have it.&lt;br /&gt;
&lt;br /&gt;
However, the features in it are an interesting look at what the standards committee thinks is wrong with the current JavaScript. This is not a minor patch release. This is a dramatically overhaul of  the current JavaScript (ES3). Oh, they&#039;ve included a lot of minor things that are simply broken in ES3. These changes are certainly interesting, but today I&#039;m going to talk about their major focus. They want to make it easier to develop large applications in JavaScript. Clearly, they understand that people are starting to develop large applications for web browsers, and they feel that there are problems with the currently available technologies for this.&lt;br /&gt;
&lt;br /&gt;
I don&#039;t have any experience with developing what I&#039;d call a large JavaScript application, but we are starting to develop an extension of PC-Doctor for Windows that uses JavaScript in numerous places to control its behavior. In my dreams, I imagine that it will eventually become a large application made up of plugins that run on JavaScript. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s go through the major features that the committee thinks I&#039;ll need as our technology gets bigger...&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/04/23/The-Next-JavaScript.../#extended&quot;&gt;Continue reading &quot;The Next JavaScript...&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 23 Apr 2008 21:12:00 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/04/23/180/</guid>
    
</item>
<item>
    <title>The Cost of Complexity</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/04/15/The-Cost-of-Complexity/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/04/15/The-Cost-of-Complexity/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=167</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=167</wfw:commentRss>
    

    <author>nospam@example.com (fred.bertsch)</author>
    <content:encoded>
    This article is going to have more questions in it than answers. It&#039;s about a problem in software development that I&#039;m not sure I&#039;ve worried about enough. I&#039;ve certainly thought about it for specific cases, but this is the first time I&#039;ve tried to think about the problem in general. &lt;br /&gt;
&lt;br /&gt;
My main question revolves around the cost of complexity in software. There is certainly a large cost in making software more complex. Maintenance becomes more difficult. Teaching new employees about the project becomes harder. In the end, you will get fewer engineers who understand a complex project than a simple one. &lt;br /&gt;
&lt;br /&gt;
Unfortunately, almost any non-refactoring work will add to the complexity of a project. However, some changes can have a large effect on the complexity in a short period of time. Adding a new library or technique to the code base, for example, will make it so that the new technology will have to be understood by people working on the project. &lt;br /&gt;
&lt;br /&gt;
What I really want to know is how much can this cost of complexity be mitigated? Besides switching libraries to add, what can be done to decrease the cost? My question is based on the assumption that some complexity is essential. So, given that you&#039;re going to add a new library to the code base, for example, what can be done to reduce the cost?  &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/04/15/The-Cost-of-Complexity/#extended&quot;&gt;Continue reading &quot;The Cost of Complexity&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 15 Apr 2008 12:38:00 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/04/15/167/</guid>
    
</item>
<item>
    <title>Running Rails on Debian Etch</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/04/07/Running-Rails-on-Debian-Etch/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/04/07/Running-Rails-on-Debian-Etch/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=174</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=174</wfw:commentRss>
    

    <author>nospam@example.com (Andy Koch)</author>
    <content:encoded>
    As the company Rails evangelist one of my challenges has been working out a consistent and understandable deployment strategy.  One of the biggest challenges is that I may not have access to the root user acct.  Additionally we are generally required to stay within the Etch distro, going with Lenny (testing) requires special approval.  A final challenge is that compilers are not allowed on the production server.&lt;br /&gt;
&lt;br /&gt;
The &quot;Ruby gem problem&quot; is the result of not having access to the root user acct.  On development servers Ruby gems are easily managed using the root acct with the &quot;gem&quot; command.  But without root on the production server, how do get our gems installed?  Well, you might think we can just request the owner of the root acct to install gems, but not so fast - the gem command does not place files in accordance with the Linux FHS (see &lt;a href=&quot;http://www.pathname.com/fhs/pub/fhs-2.3.html&quot; target=&quot;_blank&quot;&gt;http://www.pathname.com/fhs/pub/fhs-2.3.html&lt;/a&gt;).  And furthermore, the manager of the server has no interest in keeping track of Ruby gems and managing them seperately.  If it&#039;s not related to &quot;apt&quot;, you&#039;ve got some explaining to do.   &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/04/07/Running-Rails-on-Debian-Etch/#extended&quot;&gt;Continue reading &quot;Running Rails on Debian Etch&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 07 Apr 2008 19:44:10 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/04/07/174/</guid>
    
</item>
<item>
    <title>The Visitor Pattern as an Alternative to OOP</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/04/07/The-Visitor-Pattern-as-an-Alternative-to-OOP/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/04/07/The-Visitor-Pattern-as-an-Alternative-to-OOP/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=160</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.pcdoctor-community.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=160</wfw:commentRss>
    

    <author>nospam@example.com (fred.bertsch)</author>
    <content:encoded>
    The &lt;a title=&quot;Gang of Four&#039;s visitor pattern&quot; href=&quot;http://www.amazon.com/gp/reader/0201633612/ref=sib_dp_srch_pop?v=search-inside&amp;keywords=visitor+semantic+abstract+syntax+tree&amp;go.x=0&amp;go.y=0&amp;go=Go%21&quot;&gt;visitor pattern from the GoF&lt;/a&gt; is frequently overlooked by programmers who are used to object oriented programming. However, in some cases, it is significantly cleaner and easier to use than an overridden function. Unfortunately, it&#039;s easier to misuse as well, and, when it is used poorly, it can be a real mess. &lt;br /&gt;
&lt;br /&gt;
I was going to tell you about my &lt;a title=&quot;static analysis project&quot; href=&quot;http://www.pcdoctor-community.com/blog/index.php?serendipity%5Baction%5D=search&amp;serendipity%5BsearchTerm%5D=%22static+analysis%22&amp;serendipity%5BsearchButton%5D=%3E&quot;&gt;static analysis project&lt;/a&gt; and how I&#039;m using the visitor pattern there. Then I took a glance at the &lt;a title=&quot;visitor pattern&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=Visitor_pattern&amp;oldid=202712548&quot;&gt;wikipedia article on the visitor pattern&lt;/a&gt;. It&#039;s clearly written by a OOP fanatic who&#039;s never seen the alternatives, so I&#039;m going to contrast my implementation of visitor with the one there. &lt;br /&gt;
&lt;br /&gt;
The contrast is useful because wikipedia&#039;s implementation is written using object oriented principles. Part of my goal with this post is to explain about OO alternatives. My implementation is written using compile time polymorphism rather than runtime polymorphism. As we&#039;ll see, this is significantly prettier and more flexible than runtime polymorphism. &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/04/07/The-Visitor-Pattern-as-an-Alternative-to-OOP/#extended&quot;&gt;Continue reading &quot;The Visitor Pattern as an Alternative to OOP&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 07 Apr 2008 17:04:00 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/04/07/160/</guid>
    
</item>

</channel>
</rss>