<?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>Harold.DeArmas - Dr. Blip's PC-Doctor Blog</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.3 - http://www.s9y.org/</generator>
    <pubDate>Tue, 20 May 2008 19:52:52 GMT</pubDate>

    <image>
        <url>http://www.pcdoctor-community.com/blog/templates/competition/img/s9y_banner_small.png</url>
        <title>RSS: Harold.DeArmas - Dr. Blip's PC-Doctor Blog - 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>Anonymous Methods in C# are Your Friend</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/05/20/Anonymous-Methods-in-C-are-Your-Friend/</link>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/05/20/Anonymous-Methods-in-C-are-Your-Friend/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=211</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=211</wfw:commentRss>
    

    <author>nospam@example.com (Harold.DeArmas)</author>
    <content:encoded>
    A previous post warned of some of the dangers of using Anonymous methods in C#.  Yes, it&#039;s true you can get yourself into serious trouble with these C# treats.  But as you play with them some more, you can actually see that they are much more fun and less scary than you might first think.&lt;br /&gt;
&lt;br /&gt;
One of the first things you need to realize when anonymous methods are created is that they capture / hijack variables that are used in that anonymous method from the scope that they were originally in.  So yes, modifying the variable from a particular scope is going to change its value for everyone else within that same scope as well, regardless of which block it is executed from.  This is very different from the Java way of doing things (as I understand) where a variable that is accessed from an inner class must be declared as final, read-only, uninteresting.  That&#039;s not to say that you can&#039;t do the same thing in Java, but one dimensional arrays are such a pain.  I digress. &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2008/05/20/Anonymous-Methods-in-C-are-Your-Friend/#extended&quot;&gt;Continue reading &quot;Anonymous Methods in C# are Your Friend&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 20 May 2008 13:38:00 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/05/20/211/</guid>
    
</item>
<item>
    <title>How to Change keyboard Language in Windows</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2008/01/15/How-to-Change-keyboard-Language-in-Windows/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2008/01/15/How-to-Change-keyboard-Language-in-Windows/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=133</wfw:comment>

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

    <author>nospam@example.com (Harold.DeArmas)</author>
    <content:encoded>
    I just wanted to share a bit of useful information with the masses of XP users out there. I have been testing out some new languages for PC Doctor, so I have all of the possible language packs installed, some keyboards enabled, and I even let the language bar stay open every once in a while. Usually I&#039;m pretty diligent about keeping the keyboard in English though, considering I don&#039;t know how to type the languages I&#039;m testing.&lt;br /&gt;
&lt;br /&gt;
Today I wasn&#039;t paying attention and I locked my computer, like ya do, when I walked away for a minute. When I came back, I typed my password in and hit &quot;OK&quot;, like ya do. Incorrect Password. I just figured that my fat fingers were flyin&#039; too fast and I might have messed up. Incorrect Password. Maybe caps lock, shift key, num lock, something wasn&#039;t working right. Incorrect Password. Okay, so my password is right, let&#039;s check the domain... Wait a minute, why am I typing in Hebrew!?!&lt;br /&gt;
&lt;br /&gt;
As fate would have it, clicking on the &quot;extended&quot; options button, let me know that my domain was correct, but I had been typing likely gibberish into the password field. In case you were wondering, asterisks look the same in Hebrew as they do in English and quite a few other languages. So what I expected: whenever a blue box with a language code in it is displayed, you can click on the box and a drop down will let you pick the language you want to type in. Blue box does nothing.&lt;br /&gt;
&lt;br /&gt;
So now only can I not change the language, I can&#039;t log in to figure out how to change the language to log in to... Well, you get the point. So I got onto my fellow developer&#039;s machine and did a quick little search and found the following page:&lt;br /&gt;
&lt;br /&gt;
How to change keyboard language in Windows&lt;br /&gt;
&lt;br /&gt;
On it, there&#039;s a very obscure shortcut to change keyboard languages: ALT-SHIFT. I never would have thought pressing two modifier keys would have an effect. So there you go, if you ever find stuck at a login box and the only choice you have is to type in Korean and your password is in Russian, hit ALT-SHIFT a few times and you should see the &quot;blue box&quot; rotate among the enabled input languages.&lt;br /&gt;
&lt;br /&gt;
Note: If you don&#039;t already have multiple languages set up / installed, the shortcut doesn&#039;t work. 
    </content:encoded>

    <pubDate>Tue, 15 Jan 2008 09:30:08 -0500</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2008/01/15/133/</guid>
    
</item>
<item>
    <title>&quot;Found Cake&quot;</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2007/11/09/Found-Cake/</link>
            <category>Grab Bag</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2007/11/09/Found-Cake/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=103</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=103</wfw:commentRss>
    

    <author>nospam@example.com (Harold.DeArmas)</author>
    <content:encoded>
    There have been many ways to describe a common office phenomenon.  Some call it a gift, others litter, but I think most apt is &quot;Found Cake.&quot; To understand this definition, please refer to the following web comic.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.penny-arcade.com/comic/2005/07/29&quot;&gt;Penny Arcade - It Looks Delicious&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now, coming across &quot;found cake&quot; on the street is one thing.  I&#039;m not sure how interested I would be in picking up that treat.  In an office though, it&#039;s a treat.  No one knows exactly where it comes from, they only know they got there just in time.&lt;br /&gt;
&lt;br /&gt;
In fact if I&#039;m not mistaken, there&#039;s an economic theory that the utility derived from &quot;found cake&quot; is inversely proportional to the amount left after you have taken your piece.  In layman&#039;s terms, if you&#039;re the last person to get a piece, you ultimately end up enjoying it the most.  I find this is true regardless of the size of the piece you do end up getting.  Mostly because if you get the last piece, you also get the implied right to gloat to others about your feat.  It&#039;s just polite.&lt;br /&gt;
&lt;br /&gt;
I wonder if any &quot;found cake&quot; studies have been performed.  I bet you they&#039;ll find that the first slice is the largest and the last slice lasts the longest.  Maybe that&#039;s what we were just subjected to, a &quot;Found Cake Study.&quot;  I think in either case, it is a win / win.  Free cake in the name of science.  Keep the found cake coming. 
    </content:encoded>

    <pubDate>Fri, 09 Nov 2007 10:26:16 -0500</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2007/11/09/103/</guid>
    
</item>
<item>
    <title>This Code is Your Code, This Code is my Code</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2007/08/31/This-Code-is-Your-Code,-This-Code-is-my-Code/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2007/08/31/This-Code-is-Your-Code,-This-Code-is-my-Code/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=79</wfw:comment>

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

    <author>nospam@example.com (Harold.DeArmas)</author>
    <content:encoded>
    Upon running my daily blogging circuit, I came across this article that really hit home with me and I feel compelled to share.  Go ahead and read it, and if you&#039;d like, read my comments on it.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blogs.msdn.com/oldnewthing/archive/2007/08/21/4486197.aspx&quot; target=&quot;_blank&quot;&gt;http://blogs.msdn.com/oldnewthing/archive/2007/08/21/4486197.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2007/08/31/This-Code-is-Your-Code,-This-Code-is-my-Code/#extended&quot;&gt;Continue reading &quot;This Code is Your Code, This Code is my Code&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 31 Aug 2007 14:58:23 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2007/08/31/79/</guid>
    
</item>
<item>
    <title>C++ Code Spell Checker</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2007/08/15/C++-Code-Spell-Checker/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2007/08/15/C++-Code-Spell-Checker/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=63</wfw:comment>

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

    <author>nospam@example.com (Harold.DeArmas)</author>
    <content:encoded>
    I&#039;m not sure that this is in great demand.  Assuming you have a compiler worth its salt, then you&#039;ll know if you spell a variable name incorrectly or swapped a couple of letters in a function call.  But imagine if you did indeed have a code spell checker, how would you implement it?&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.pcdoctor-community.com/blog/posts/2007/08/15/C++-Code-Spell-Checker/#extended&quot;&gt;Continue reading &quot;C++ Code Spell Checker&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Wed, 15 Aug 2007 13:46:34 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2007/08/15/63/</guid>
    
</item>
<item>
    <title>Cruise Control</title>
    <link>http://www.pcdoctor-community.com/blog/posts/2007/07/10/Cruise-Control/</link>
            <category>Software</category>
    
    <comments>http://www.pcdoctor-community.com/blog/posts/2007/07/10/Cruise-Control/#comments</comments>
    <wfw:comment>http://www.pcdoctor-community.com/blog/wfwcomment.php?cid=18</wfw:comment>

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

    <author>nospam@example.com (Harold.DeArmas)</author>
    <content:encoded>
    Cruisecontrol is an example of a continuous integration tool. In theory, these are amazingly useful development tools.  The idea is to have a tool with the sole job of getting the newest code, compile it, test it, and give some results.  This way whenever a change is made, within a short amount of time, we know if it broke something else, even if it wasn&#039;t intended to.  This is great for those Windows developers stomping all over the Linux guys, or the Asapi guys breaking the UI, again.&lt;br /&gt;
&lt;br /&gt;
The way Cruisecontrol is currently shipped, it is ideal for one machine, one project, one repository.  Unfortunately when you have 10 different targets you want to run, differentiate between build failed and tests failed, compile on different machines, architectures, and operating systems... etc.  This is where Cruisecontrol starts to slow down.  It&#039;s still top notch, and modifying it is a cinch, but all these modifications can add up.&lt;br /&gt;
&lt;br /&gt;
So far Cruisecontrol here consists of 4 machines, 2 Windows build machines, 1 Linux build machine, and a Windows web server.  The build machines are all accessing an existing Perforce repository, and they FTP the necessary results to the web server for display.  So far, this is out of the box behavior.  Cruisecontrol can automatically check Perforce for changes, sync the local client, and there are build in FTP classes for sending logs and build status files.&lt;br /&gt;
&lt;br /&gt;
Trying to get Cruisecontrol to play nice with existing build and test products was the first challenge.  When running the build system from the command line, alot of output is generated, and almost none of the useful stuff is distinguishable.  Cruisecontrol does the nice thing and parses all of the warnings and errors out of the logs for you.  The build scripts used had a lot of unnecessary warning level messages, so the first step was to change those to info level messages.  Next, the web interface was just poor looking.  I mean, it&#039;s great to have it out of the box, but everything just ran together.  So with a little added style and a few changes to the xslts, the errors and warnings all stood out by target, file, everything.&lt;br /&gt;
&lt;br /&gt;
Next were the tests.  Needless to say, of course we don&#039;t use JUnit here, the default test suite that Cruisecontrol supports.  So the test results aren&#039;t going to match up.  Luckily there was another xslt that transformed our results into JUnit style xml.  Not all of the data was Cruisecontrol expects was present, and Cruisecontrol obviously had a bunch of contingency cases built in when they designed their xslts to get the test results web ready.  Since our company uses our results, I scrapped the Cruisecontrol xslts and wrote a simple transform that does the trick.  If anything new comes up, which I doubt, I&#039;ll worry about that then.&lt;br /&gt;
&lt;br /&gt;
Now we need to deal with our 45+ minute build times.  It would be nice to know what part of the build we are on, just as a general estimate on how much further we need to go.  It&#039;s also nice to know if maybe the build crashed and needs to be restarted.  There is a very handy plugin already provided that overrides the default ant logger.  All it does is override the &quot;target started&quot; event to append the target name to the build status file.  This way whenever a target is started, we can see the time and name of that target on the project web screen.  Well, we could if this was uploaded to the web server.&lt;br /&gt;
&lt;br /&gt;
Like I mentioned, our configuration is unique in its needs with separate build machines from web servers.  The remote web server can&#039;t (yet) use the build machine&#039;s JMX console to manage the builds.  It also can&#039;t read the minds of the build machines to know of there has been any updates.  The build machines have to send everything to the web server in order for it to post the results.&lt;br /&gt;
&lt;br /&gt;
Cruisecontrol was nice because it offered FTP support for the built in reporting functionality, but this doesn&#039;t automatically extend to the upgraded logger mentioned above.  It&#039;s also another pickle because technically the FTP classes extend to be Cruisecontrol plugins, but the logger is an Ant plugin.  This is where Frankenstein becomes my good friend.  I took a direct copy of the logger extended class and called it an FTP class.  There already existed an &quot;AbstractFTPClass&quot; in Cruisecontrol.  Only problem is my one class couldn&#039;t extend from the logger class AND the ftp class, too bad.  So I ended up having to write a GenericFTPClass that fakes all of the parts that are needed.  Put a generic into my new logger class, and we&#039;re golden.  I&#039;m downplaying all that of course, but you get the idea.&lt;br /&gt;
&lt;br /&gt;
Next is to possibly add some features to the new FTP class to slow down the transfers a bit.  On every new target, there is an FTP send.  I can imagine this traffic skyrocketing with multiple builds, etc.  So maybe adding an &quot;updatenum&quot; or &quot;updatetime&quot; that will specify a number of updates or seconds before FTPing.  The next thing is to also get this better incorporated into the web interface.  Our typical build has well over 300 targets before it&#039;s done, more if running tests.  Having all of these displayed at once is WAY too vertical.&lt;br /&gt;
&lt;br /&gt;
Lastly, there&#039;s the cool things that other houses do with CITs.  Whenever a build breaks here, (almost) everyone gets an e-mail if they are on the changelist for that broken build.  If you&#039;re unfortunate enough to have submitted something after it broke, you&#039;re getting an e-mail too.  Soon everyone, every change, until a change fixes the build.  I&#039;ve seen online different lights that can be triggered, alarms, etc.  Lava lamps even that not only tell you the status of the build, but how long it&#039;s been there.  We&#039;ve even talked about hooking up a text reader that will periodically announce the names of the people on the changelist and politely remind them to fix the build.&lt;br /&gt;
&lt;br /&gt;
Hopefully this little (really?) blurb helps everyone understand how useful these continuous integration tools (cit) are. 
    </content:encoded>

    <pubDate>Tue, 10 Jul 2007 06:02:32 -0400</pubDate>
    <guid isPermaLink="false">http://www.pcdoctor-community.com/blog/posts/2007/07/10/18/</guid>
    
</item>

</channel>
</rss>