<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>glennCarney's blog</title>
	<atom:link href="http://glenncarney.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://glenncarney.wordpress.com</link>
	<description>...the Forties files...</description>
	<lastBuildDate>Sat, 15 Aug 2009 23:46:07 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='glenncarney.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/8f9519f3fe1a92fe13f5d316be0ea8ef?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>glennCarney's blog</title>
		<link>http://glenncarney.wordpress.com</link>
	</image>
			<item>
		<title>Windows 7</title>
		<link>http://glenncarney.wordpress.com/2009/08/15/windows-7/</link>
		<comments>http://glenncarney.wordpress.com/2009/08/15/windows-7/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 23:46:07 +0000</pubDate>
		<dc:creator>Glenn Carney</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows 7;  Windows7; Simplify; Technology]]></category>

		<guid isPermaLink="false">http://glenncarney.wordpress.com/?p=38</guid>
		<description><![CDATA[I've been developing an increasing dislike for Microsoft products over the last few years.  This is my first positive experience since XP replaced 98. <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=38&subd=glenncarney&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I just purchased a new desktop for home and decided to go Windows 7 RC (64bit) for fun.  Wow.  I think our friends in Redmond may have gotten it right this time.  I like <em>Seven</em> so far and hope I keep liking it.  I&#8217;ve been developing an increasing dislike for Microsoft products over the last few years.  This is my first positive experience since XP replaced 98. </p>
<p>Stay Tuned.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenncarney.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenncarney.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenncarney.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenncarney.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenncarney.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenncarney.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenncarney.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenncarney.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenncarney.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenncarney.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=38&subd=glenncarney&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://glenncarney.wordpress.com/2009/08/15/windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd36c634ab22e132e35097c48583b428?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">GlennCarney</media:title>
		</media:content>
	</item>
		<item>
		<title>Press Release: Trend Micro Licenses Copier Technology to Detect Urgency and Automatically Malfunction.</title>
		<link>http://glenncarney.wordpress.com/2009/01/14/news-flash-trend-micro-licenses-copier-technology-that-detects-user-anxiety-to-schedule-malfunctions/</link>
		<comments>http://glenncarney.wordpress.com/2009/01/14/news-flash-trend-micro-licenses-copier-technology-that-detects-user-anxiety-to-schedule-malfunctions/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 04:31:39 +0000</pubDate>
		<dc:creator>Glenn Carney</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Trend Micro]]></category>

		<guid isPermaLink="false">http://glenncarney.wordpress.com/?p=21</guid>
		<description><![CDATA[My recommendation to anyone considering purchasing Trend Micro Internet Security 2008.  

RUN AWAY!!!   
<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=21&subd=glenncarney&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Warning &#8211; this post is a rant (sorry).</p>
<p>I&#8217;ve had it with Trend Micro.  For several years I have been a fan of this often overlooked player in the anti-virus and  security space. </p>
<p>Like a lot of techies, I often get to play the role of family or neighborhood tech support guy.  Usually, these episodes begin with a friend saying something like this:  &#8220;man my (our) computer is really slow.  It&#8217;s got a bad virus and I can&#8217;t get rid of it.&#8221;</p>
<p>My typical response is to tell them to bring the offending PC over for the weekend.  I usually purchase a new hard drive and install the old drive as a secondary &#8211; re-install Windows &#8211; then my favorite and recommended anti-virus software (formerly Trend Micro) and then proceed to copy files, desktop settings and other user profile preferences to the new OS.   In the past, every machine that I&#8217;ve performed surgery on has gone back to the owner with a copy of Trend Micro PCcillian or more lately, Trend Micro Internet Security with instructions to activate the software and maintain the subscription.   Again &#8211; in the past &#8211; accompanied by my recommendation of Trend Micro as the best value in anti-virus and internet security.</p>
<p>Never Again!  </p>
<p>After 5 years of being a fan of  Trend and their products - I&#8217;m done. </p>
<p>The latest incarnation of Trend&#8217;s software &#8211; well &#8211; it just sucks.   It takes too long to load and update and Trend has become too hard to do business with.</p>
<p>My machines (6 at home) can take as much as 20 minutes to load the latest Trend software after log in.  And the machine is unusable during this time.   Who knows what it&#8217;s doing?  For the most part there is no drive activity, but I am entertained by the groovy animated icon in my system tray with the little grey Trend logo spinning and spinning.   Doing nothing that I can determine.  Just spinning.   20 minutes to load.  Really? </p>
<p>That&#8217;s not all.   Since I have so many PCs at home, each year (in the past) I have purchased a multi-user license from Trend.  The price has been economical and the products (until this one) good.   But this year, when my subscription expired and it came time to re-up.  Guess what!   The link on the pop-up box from Trend&#8217;s product took me to a page where I was NOT ABLE to purchase the product or renew my subscription.    I got only cryptic errors about my software key being invalid.</p>
<p>Took me about two weeks and multiple calls to Trend to figure out that they had changed their business model and that Trend would not longer condescend to sell a multi-user license to me directly. It must have been too much trouble for them to update their software to not offer me the link!   It turns out Trend decided to stop selling multi-user licenses (not single user licenses, just the multi-user ones), directly.  I had to purchase from a re-seller.   Okay&#8230;</p>
<p>In hindsight, I should have stopped right there.  But purchasing from reseller was not such a big deal for me because &#8211; at the time &#8211; I was till convinced that this was the security package for me and couple of dozen people I&#8217;ve recommended it to since 2005. </p>
<p>Never Again!</p>
<p>After making my purchase I waited, then waited, and then waited some more.  In fairness, the reseller told me when I made my purchase that &#8220;it sometimes takes Trend a while to ship orders.&#8221;   How long could it take I thought.  All I need is some download instructions and a key.  Just wait for the email.   Right!</p>
<p>Never Again!</p>
<p>After two weeks of waiting (without current virus protection on my PC), I called the reseller back and insisted that I get my product or a refund.  After a few calls, an apology, and a reminder about the aformentioned warning about Trend&#8217;s responsiveness to paying customers &#8211; the reseller was able to get Trend to respond and I finally got my download info and keys.</p>
<p>The the fun really began.</p>
<p>Installing Trend Micro Internet Security 2008 required a manual uninstall of the previous Trend product (you remember the one that was offering me an upgrade link in a pop-up window), followed by an install of the new product &#8211; which &#8211; incredibily enough &#8211; requried tech support.   Ever heard of InstallShield there at Trend?  </p>
<p>But I&#8217;m still optomistic, I guess because of the 4-5 years of history I have with this product.   Read On.</p>
<p>After installation my, PC pretty much stopped being a useful tool.  Trend Micro Internet Security slows down a re-boot so much that I&#8217;m afraid to reboot my laptop and have to use Standby as my default mode of transportation.   A re-boot requires at least 30 minutes of waiting (after log in) for the crappy Trend software to finish loading.  The PC is unusable during this mystery process.   But that&#8217;s not all.</p>
<p>Once the software has finally gotten it&#8217;s act together, I get 4-5 prompts to download updates each day.  Usually in the middle of something important or with a critical deadline.  I guess I can&#8217;t blame Trend for that.   Keeping updates current when it comes to virus software is key.   I have to say however that for the last several years, 1 update per day seemed to keep my PCs safe enough.</p>
<p>The really frustrating part is that everytime I get an update prompt, my hope is that this update will be the one that cures the 30 minute delay in using my PC after login.   No such luck.  It&#8217;s good to have a dream I guess.</p>
<p>My conclusion from all of this is that Trend has completely lost sight of what their product is for and what their former customers wanted.  A good, reasonably priced security suite that does not render their PC a paper weight.</p>
<p>My recommendation to anyone considering purchasing Trend Micro Internet Security 2008. </p>
<p>RUN AWAY!!!  </p>
<p>Trend Micro Internet Security 2008 is apparently a poorly architected product from an company that has lost sight of the purpose of it&#8217;s products.</p>
<p>Never Again</p>
<p>PS.   I bet they went offshore.</p>
<p>Glenn Carney<br />
Former Trend Micro customer and endorser.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenncarney.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenncarney.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenncarney.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenncarney.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenncarney.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenncarney.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenncarney.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenncarney.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenncarney.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenncarney.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=21&subd=glenncarney&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://glenncarney.wordpress.com/2009/01/14/news-flash-trend-micro-licenses-copier-technology-that-detects-user-anxiety-to-schedule-malfunctions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd36c634ab22e132e35097c48583b428?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">GlennCarney</media:title>
		</media:content>
	</item>
		<item>
		<title>Updated C# Application Settings Utility Class</title>
		<link>http://glenncarney.wordpress.com/2007/10/13/updated-c-application-settings-utility-class/</link>
		<comments>http://glenncarney.wordpress.com/2007/10/13/updated-c-application-settings-utility-class/#comments</comments>
		<pubDate>Sat, 13 Oct 2007 20:01:42 +0000</pubDate>
		<dc:creator>Glenn Carney</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Application Settings]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Reflection]]></category>
		<category><![CDATA[Serialization]]></category>
		<category><![CDATA[Settings]]></category>

		<guid isPermaLink="false">http://glenncarney.wordpress.com/2007/10/13/updated-c-application-settings-utility-class/</guid>
		<description><![CDATA[This is a revised version of my original post (C# Application Settings Utility Class).  Thanks to a comment received I have revised this code to make the class inheritable.    Please see below:
Revised code for appSettings class (note the addition of the abstract keyword in class declaration):
    public abstract [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=11&subd=glenncarney&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This is a revised version of my original post (<a href="http://glenncarney.wordpress.com/2007/10/06/c-application-settings-utility-class/" title="C# Application Settings Utility Class" target="_blank">C# Application Settings Utility Class</a>).  Thanks to a comment received I have revised this code to make the class inheritable.    Please see below:</p>
<p>Revised code for appSettings class (note the addition of the abstract keyword in class declaration):<span id="more-11"></span></p>
<pre>    public abstract class appSettings
    {
        public delegate void AppSettingsEventHander(object o, AppSettingsEventArgs e);

        // Declare Class Events
        public event AppSettingsEventHander SettingsEvent;

        private string _myPath;
        public string myPath
        {
            get { return _myPath; }
            set { _myPath = value; }
        }

        private StringCollection _myLocations;

        public StringCollection MyLocations
        {
            get { return _myLocations; }
            set { _myLocations = value; }
        }

        // Additional Application specific setting properties can be added here as needed...

        public appSettings()
        {
            InitAppSettings();
        }

        public appSettings(string sPath)
        {
            InitAppSettings();
            this.Load(sPath);
        }

        private void InitAppSettings()
        {
            this._myLocations = new StringCollection();
        }

        public bool SaveAppSettings(string thePath)
        // Returns True if Saved successfully, False otherwise.
        // Raises Event that includes exception and reason if case of error
        {
            try
            {
                XmlSerializer xs = new XmlSerializer(this.GetType());
                FileStream fs = new FileStream(thePath, FileMode.Create);
                xs.Serialize(fs, this);
                fs.Close();
            }
            catch (FileNotFoundException fex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.FileNotFound, fex);
                SettingsEvent(this, e);
                return false;
            }
            catch (Exception ex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, ex);
                SettingsEvent(this, e);
                return false;
            }
            return true;
        }

        public appSettings GetAppSettings(string thePath)
        {
            // Returns new appSettings object if successfull, null appSettings otherwise
            // Raises Event that includes exception and reason if case of error

            try
            {
                appSettings appSet;
                XmlSerializer xs = new XmlSerializer(this.GetType());
                FileStream fs = new FileStream(thePath, FileMode.Open);
                appSet = (appSettings)xs.Deserialize(fs);
                fs.Close();
                return appSet;
            }

            catch (FileNotFoundException fex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, fex);
                SettingsEvent(this, e);
                return (appSettings)null;
                ;
            }
            catch (Exception ex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, ex);
                SettingsEvent(this, e);
                return (appSettings)null;
            }
        }

        public bool Load(string thePath)
        {
            // This function loads the settings file directly to "this" instance of appSettings
            // instead of returning the appSettings Object
            // Returns true on success, false otherwise
            // Raises Event that includes exception and reason if case of error

            try
            {
                appSettings appSet;
                XmlSerializer xs = new XmlSerializer(this.GetType());
                FileStream fs = new FileStream(thePath, FileMode.Open);
                appSet = (appSettings)xs.Deserialize(fs);
                foreach (System.Reflection.PropertyInfo pi in this.GetType().GetProperties())
                {
                    if (pi.CanWrite)
                    {
                        try
                        {
                            pi.SetValue(this, pi.GetValue(appSet,null),null);
                        }
                        catch (Exception ex)
                        {
                            pi.SetValue(this, null, null);
                        }
                    }
                }
                fs.Close();
            }

            catch (FileNotFoundException fex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, fex);
                SettingsEvent(this, e);
                return false;
                ;
            }
            catch (Exception ex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, ex);
                SettingsEvent(this, e);
                return false;
            }
            return true;
          }

    }  //  &lt;/class appSettings&gt;

    public class AppSettingsEventArgs : EventArgs
    {
        // Constructor
        public AppSettingsEventArgs(settingsEventReason reason, object objInfo)
        {
            this._settingsEvent = reason;
            this._objInfo = objInfo;
        }

        private object _objInfo;
        private settingsEventReason _settingsEvent;

        // Public Property(s) to return value(s)
        public object objInfo
        {
            get { return _objInfo; }
        }

        public settingsEventReason eventReason
        {
            get { return (settingsEventReason)_settingsEvent; }
        }
    }   // &lt;/ ChangeEventArgs&gt; 

    public enum settingsEventReason
    {

        FileNotFound = 1,
        // Add additional event reasons to enum here
        OtherException = 99
    }</pre>
<p>Here is how you would reference the revised class in your application code:</p>
<pre>    public class appSettingsInheritedClass : appSettings
    {</pre>
<pre>    }</pre>
<p>Using this approach, you can then simply add new application settings properties to this declaration as shown below:</p>
<pre>    public class appSettingsInheritedClass : appSettings
    {
        public int iSetting1;
        public string sSetting2;
    }</pre>
<p>Any properties you add in this way are automatically saved and loaded when you call SaveSettings or Load respectively.</p>
<p>Thanks.</p>
<p>G</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenncarney.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenncarney.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenncarney.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenncarney.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenncarney.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenncarney.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenncarney.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenncarney.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenncarney.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenncarney.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenncarney.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenncarney.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=11&subd=glenncarney&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://glenncarney.wordpress.com/2007/10/13/updated-c-application-settings-utility-class/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd36c634ab22e132e35097c48583b428?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">GlennCarney</media:title>
		</media:content>
	</item>
		<item>
		<title>C# Application Settings Utility Class</title>
		<link>http://glenncarney.wordpress.com/2007/10/06/c-application-settings-utility-class/</link>
		<comments>http://glenncarney.wordpress.com/2007/10/06/c-application-settings-utility-class/#comments</comments>
		<pubDate>Sun, 07 Oct 2007 05:20:07 +0000</pubDate>
		<dc:creator>Glenn Carney</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Application Settings]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Reflection]]></category>
		<category><![CDATA[Serialization]]></category>
		<category><![CDATA[Settings]]></category>

		<guid isPermaLink="false">http://glenncarney.wordpress.com/2007/10/06/c-application-settings-utility-class/</guid>
		<description><![CDATA[Please note that a revised version of this code is now located here .
I wanted to create a self-contained (I&#8217;ll explain what I mean by this later) and re-usable template class that I could add to any C# application for the purpose of saving and loading application settings (user preferences, path names, etc.) in XML.
My [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=10&subd=glenncarney&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><font color="#ff0000">Please note that a revised version of this code is now located </font><a href="http://glenncarney.wordpress.com/2007/10/13/updated-c-application-settings-utility-class/" title="Updated C# Application Settings Utility Class">here</a> .</p>
<p>I wanted to create a self-contained (I&#8217;ll explain what I mean by this later) and re-usable template class that I could add to any C# application for the purpose of saving and loading application settings (user preferences, path names, etc.) in XML.</p>
<p>My goal was to be able to add new properties to the class without having to write additional code to have them load.      This way, I would only need to add the necessary private variable and the associated public property (e.g. get &amp; set) for each new applicatoin setting.</p>
<p>Yes, I know that .NET 2.0 and Visual Studio 2005 have a similar function built in, but I prefer to have full control of my application.   Also I wanted to customize an event that could notify my application if/when the settings did not save or were not loaded successfully.</p>
<p>I wanted the class to be &#8220;self-contained&#8221;, that is, I wanted all of the code necessary to load and save the settings built into the class.  That way, I could just add the appSettings class to my project and go.</p>
<p>This solution uses XML Serialization to store my application settings in an XML document.  On retrieval, in the <strong>Load</strong><span id="more-10"></span><strong> </strong>method, it uses Reflection to enumerate the properties of the class and assign their values to the local &#8220;this&#8221; instance of the class.</p>
<p>For illustration purposes, I also included a <em>GetAppSettings </em>method.  This method loads the settings into a <u>new</u> instance of the class.  But this method has a disadvantage:  Because <em>GetAppSettings </em>returns a new instance of the appSettings class, to use it I would first have to instantiate an instance of the class.   For example, to use <em>GetAppSettings </em>my application&#8217;s code would look something like this:</p>
<pre>appSettings thowAwaySettings = new appSettings();</pre>
<pre>appSettings theRealSettings = throwAwaySettings.GetSettings("C:\some path");</pre>
<pre>thowAwaySettings = null;	// dispose of the first class</pre>
<p>I was not satisfied with the <em>GetAppSettings </em>approach because of the need for an initial &#8220;helper&#8221; instance of the class which would be thown away.  I also thought that this approach diminished the &#8220;self-contained&#8221; aspect I was trying to achieve.</p>
<p>A better approach would be have the class be able to &#8220;self load&#8221;.   Eliminating the need for the second instance.  I implemented the self load using Reflection in the <strong>Load </strong>method.</p>
<p>Using the <strong>Load </strong>method my application code can look like this:</p>
<pre>appSettings appSet = new appSettings();</pre>
<pre>appSet.Load("C:\Some Path");</pre>
<p>But wait, yet another enhancement is a custom constructor for the class that accepts a path parameter.  When called with a valid path, the class could automatically <strong>Load</strong> itself.  So then my applications code can look like this:</p>
<pre>appSettings appSet = new appSettings("C:\Some Path");</pre>
<p>Much better I think.</p>
<p>Here&#8217;s my code.  Feel free to use and re-distribute.  Comments welcome.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<pre>
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml.Serialization;

namespace foo
{

    public class appSettings
    {
        public delegate void AppSettingsEventHander(object o, AppSettingsEventArgs e);

        // Declare Class Events
        public event AppSettingsEventHander SettingsEvent;

        private string _myPath;
        public string myPath
        {
            get { return _myPath; }
            set { _myPath = value; }
        }

        // Additional Application specific setting properties can be added here as needed...

        public appSettings(string sPath)
        {
            this.Load(sPath);
        }

        public bool SaveAppSettings(string thePath)
        // Returns True if Saved successfully, False otherwise.
        // Raises Event that includes exception and reason if case of error
        {
            try
            {
                XmlSerializer xs = new XmlSerializer(this.GetType());
                FileStream fs = new FileStream(thePath, FileMode.Create);
                xs.Serialize(fs, this);
                fs.Close();
            }
            catch (FileNotFoundException fex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.FileNotFound, fex);
                SettingsEvent(this, e);
                return false;
            }
            catch (Exception ex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, ex);
                SettingsEvent(this, e);
                return false;
            }
            return true;
        }

        public appSettings GetAppSettings(string thePath)
        {
            // Returns new appSettings object if successfull, null appSettings otherwise
            // Raises Event that includes exception and reason if case of error

            try
            {
                appSettings appSet;
                XmlSerializer xs = new XmlSerializer(this.GetType());
                FileStream fs = new FileStream(thePath, FileMode.Open);
                appSet = (appSettings)xs.Deserialize(fs);
                return appSet;
                fs.Close();
            }

            catch (FileNotFoundException fex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, fex);
                SettingsEvent(this, e);
                return (appSettings)null;
                ;
            }
            catch (Exception ex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, ex);
                SettingsEvent(this, e);
                return (appSettings)null;
            }
        }

        public bool Load(string thePath)
        {
            // This function loads the settings file directly to "this" instance of appSettings
            // instead of returning the appSettings Object
            // Returns true on success, false otherwise
            // Raises Event that includes exception and reason if case of error

            try
            {
                appSettings appSet;
                XmlSerializer xs = new XmlSerializer(this.GetType());
                FileStream fs = new FileStream(thePath, FileMode.Open);
                appSet = (appSettings)xs.Deserialize(fs);
                foreach (System.Reflection.PropertyInfo pi in this.GetType().GetProperties())
                {
                    if (pi.CanWrite)
                    {
                        try
                        {
                            pi.SetValue(this, pi.GetValue(appSet,null),null);
                        }
                        catch (Exception ex)
                        {
                            pi.SetValue(this, null, null);
                        }
                    }
                }
                fs.Close();
            }

            catch (FileNotFoundException fex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, fex);
                SettingsEvent(this, e);
                return false;
                ;
            }
            catch (Exception ex)
            {
                AppSettingsEventArgs e = new AppSettingsEventArgs(settingsEventReason.OtherException, ex);
                SettingsEvent(this, e);
                return false;
            }
            return true;
          }

    }  //  &lt;/class appSettings&gt;

    public class AppSettingsEventArgs : EventArgs
    {
        // Constructor
        public AppSettingsEventArgs(settingsEventReason reason, object objInfo)
        {
            this._settingsEvent = reason;
            this._objInfo = objInfo;
        }

        private object _objInfo;
        private settingsEventReason _settingsEvent;

        // Public Property(s) to return value(s)
        public object objInfo
        {
            get { return _objInfo; }
        }

        public settingsEventReason eventReason
        {
            get { return (settingsEventReason)_settingsEvent; }
        }
    }   // &lt;/ ChangeEventArgs&gt; 

    public enum settingsEventReason
    {

        FileNotFound = 1,
        // Add additional event reasons to enum here
        OtherException = 99
    }

} // &lt;/namespace&gt;</pre>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<h6>Glenn Carney is a software developer, trainer, consultant and leader based in Overland Park, Kansas.</h6>
<pre></pre>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenncarney.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenncarney.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenncarney.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenncarney.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenncarney.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenncarney.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenncarney.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenncarney.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenncarney.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenncarney.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenncarney.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenncarney.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=10&subd=glenncarney&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://glenncarney.wordpress.com/2007/10/06/c-application-settings-utility-class/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd36c634ab22e132e35097c48583b428?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">GlennCarney</media:title>
		</media:content>
	</item>
		<item>
		<title>I think I want a Mac</title>
		<link>http://glenncarney.wordpress.com/2007/10/05/i-think-i-want-a-mac/</link>
		<comments>http://glenncarney.wordpress.com/2007/10/05/i-think-i-want-a-mac/#comments</comments>
		<pubDate>Fri, 05 Oct 2007 03:24:51 +0000</pubDate>
		<dc:creator>Glenn Carney</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[middle-age]]></category>
		<category><![CDATA[outside-in]]></category>
		<category><![CDATA[PC]]></category>

		<guid isPermaLink="false">http://glenncarney.wordpress.com/2007/10/05/i-think-i-want-a-mac/</guid>
		<description><![CDATA[OK, I&#8217;ll admit it.  Those commercials on TV with the young, cool Mac guy and the not-so-cool, (some would say fat &#8211; but not me),  PC guy might be to blame.    And yes, maybe my mid-life crisis is showing.    Or maybe it&#8217;s because I&#8217;m getting tired of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=8&subd=glenncarney&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>OK, I&#8217;ll admit it.  Those commercials on TV with the young, cool Mac guy and the not-so-cool, (some would say fat &#8211; but not me),  PC guy might be to blame.    And yes, maybe my mid-life crisis is showing.    Or maybe it&#8217;s because I&#8217;m getting tired of waiting for my Windows XP laptop to boot and load all the necessary security add-on software.   Or maybe it&#8217;s that I&#8217;ve given Microsoft enough of my money over the years.   Or maybe it&#8217;s that I&#8217;m so impressed  with my first iPod.</p>
<p>But I&#8217;m considering buying a Mac for the first time.</p>
<p>Now this may not sound to you like a subject worthy of a blog, but for me it is.  You see, not only have I give the good folks in Redmond a ton of money in my life (and career), but I&#8217;ve also made a good living for many years by developing software for Windows.  I&#8217;ve been a loyal defender of the Windows world &#8211; despite all it&#8217;s warts &#8211; and a career-long &#8220;eschewer&#8221; of the Mac as a plaything for those too cool or obtuse to give in to the pull of gravity.</p>
<p>But I think I want a Mac.</p>
<p>Not for work &#8211; yet.  But for home.   Unless I&#8217;m working remotely and need Windows Remote Desktop to get into the office, at home I mostly read and send email, edit photos and rip, organize and burn music.</p>
<p>First, the design of the iMac is very impressive.   The large, high-definition screen is reason enough to want one.  Add to that the simplicity of the OS,  the a attention to how &#8211; and for what &#8211; most of us use a computer in our daily lives and the argument for the change begins to get legs.</p>
<p>The iMac, (like the iPod and iPhone), is a fine example of <em>outside-in</em> design.   <em>Outside-in</em> design first takes into consideration the needs of the the person using the device or system.   The relatively large HD screen, relatively small desktop footprint are the most obvious examples.   The <em>outside-in</em> approach extends in to the operating system software, where most of the applications that I will use are thoughtfully and conveniently accessible from the desktop.  I&#8217;ve learned a few things about interface design over the years.    20 years developing software will do that.   And let me tell you, the folks at Apple have got interface design nailed.</p>
<p>Don&#8217;t take my word for it.  Do the research yourself check out some information on excellence in design and then compare the concepts you find with the iPod or iPhone.   Then take a look at an iMac the next time you are at the electronics store.</p>
<p>Here are a few good places to start:</p>
<ul>
<li>The work of Edward Tufte at <a href="http://www.edwardtufte.com" title="Edward Tufte's Website" target="_blank">www.edwardtufte.com</a></li>
<li><u>The Design of Everyday Things</u> by Donald Norman</li>
</ul>
<p>I think I want a Mac</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/glenncarney.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/glenncarney.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/glenncarney.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/glenncarney.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/glenncarney.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/glenncarney.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/glenncarney.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/glenncarney.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/glenncarney.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/glenncarney.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/glenncarney.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/glenncarney.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=glenncarney.wordpress.com&blog=1847973&post=8&subd=glenncarney&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://glenncarney.wordpress.com/2007/10/05/i-think-i-want-a-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bd36c634ab22e132e35097c48583b428?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">GlennCarney</media:title>
		</media:content>
	</item>
	</channel>
</rss>