<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Struggling With My Inner Code Nazi</title>
        <link>http://geekswithblogs.net/mlflory/Default.aspx</link>
        <description>Mark Flory</description>
        <language>en-US</language>
        <copyright>Mark Flory</copyright>
        <managingEditor>mlflory@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Struggling With My Inner Code Nazi</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/mlflory/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>How a code nazi responds to the build breaking</title>
            <link>http://geekswithblogs.net/mlflory/archive/2009/04/15/how-a-code-nazi-responds-to-the-build-breaking.aspx</link>
            <description>Check it out on&lt;a href="http://www.codesqueeze.com/hitlers-nightly-build-breaks/"&gt; {codesqueeze}&lt;/a&gt;.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131220"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=131220" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mlflory/aggbug/131220.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mark Flory</dc:creator>
            <guid>http://geekswithblogs.net/mlflory/archive/2009/04/15/how-a-code-nazi-responds-to-the-build-breaking.aspx</guid>
            <pubDate>Wed, 15 Apr 2009 15:39:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mlflory/comments/131220.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mlflory/archive/2009/04/15/how-a-code-nazi-responds-to-the-build-breaking.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/mlflory/comments/commentRss/131220.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mlflory/services/trackbacks/131220.aspx</trackback:ping>
        </item>
        <item>
            <title>Safari Books Online Review</title>
            <link>http://geekswithblogs.net/mlflory/archive/2009/03/26/safari-books-online-review.aspx</link>
            <description>In August of 2006 I was listening to the radio and stumbled across a guy named Dave Ramsey.  The simplest way to distill Dave Ramsey down is: Get out of debt, stay out of debt, live beneath your means.&lt;br /&gt;
&lt;br /&gt;
Before long my wife and I were both on board with it and we were budgeting and cutting our expenses.  This created a really big problem for me because my wife had been waiting for a long time to intervene on my addiction.  The budget gave her the perfect excuse.&lt;br /&gt;
&lt;br /&gt;
My drug of choice...Technology books.&lt;br /&gt;
&lt;br /&gt;
I used to go the library and just peruse the Technology section and ponder what book will be my choice.  I bought at least one a month, and usually two.  I almost always read them.&lt;br /&gt;
&lt;br /&gt;
My wife hated that I "wasted" money on them.  But all that knowledge in one place, hard bound, and shiny was impossible for me to resist.  &lt;br /&gt;
&lt;br /&gt;
But now I had a problem.  Our agreed upon personal spending limit was going to be severely damaged by my book habit.  If I continued on this track it was going to damage my other spending habit, eating out for lunch.  There had to be a way.&lt;br /&gt;
&lt;br /&gt;
At first, I tried the used book store. &lt;br /&gt;
&lt;br /&gt;
The used book store is a great place to get cheap books on any subject, as long as that subject is a little out of date.  In our world a little out of date is a lot out of date, bordering on useless.  For example, I found a really great Prolog book, which I bought (I am not an addict, I do not have a problem), but try finding a good .Net 3.x book and you are going to be out of luck.&lt;br /&gt;
&lt;br /&gt;
This was not the answer.&lt;br /&gt;
&lt;br /&gt;
So I tried the library.&lt;br /&gt;
&lt;br /&gt;
It was as bad or worse than the used bookstore.  You trade free against cheap but you add on a time limit.&lt;br /&gt;
&lt;br /&gt;
Still not an answer.&lt;br /&gt;
&lt;br /&gt;
But then I remembered a trial I had done of O'Reilly Safari Books online.  I had signed up for the trial, perused one book, and then went back to my hard back ways.  But maybe Safari could be the methadone to my heroin a good substitute.&lt;br /&gt;
&lt;br /&gt;
I was wrong.  It was better.&lt;br /&gt;
&lt;br /&gt;
Compared to the original drug it was more flexible, far cheaper, and does not take up nearly as much room in my basement.&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;I now have thousands of titles to choose from and 75-100 new ones every month.  &lt;/li&gt;
    &lt;li&gt;I could dabble in a book, taking just the pieces I needed, without having to pay for the whole thing.  &lt;/li&gt;
    &lt;li&gt;Once I was done I could jettison the book from my shelf (after a month) and put another in its slot.  It did not sit around and gather dust.&lt;/li&gt;
    &lt;li&gt;I could search through tons of books and quickly pull up sources from one book to another.&lt;/li&gt;
    &lt;li&gt;I no longer had to haul all of my "core" books with me to work.&lt;/li&gt;
    &lt;li&gt;I could explore into other areas without worrying that I might not like what I find.&lt;/li&gt;
&lt;/ul&gt;
The only negative:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;It is not as easy to read while you are taking a bath.  I like a nice hot bath and a good book.  And yes, I prefer bubbles.&lt;/li&gt;
&lt;/ul&gt;
I have survived though (I read fiction instead).&lt;br /&gt;
&lt;br /&gt;
Some would make the argument that all the information you could want is available somewhere on the Internet.  &lt;br /&gt;
&lt;br /&gt;
Now, I consider Google a close, personal friend but I have to say he has some shortcomings.   The main one is, although he does know everything, he keeps that knowledge flung all over the place.  It is difficult and time consuming to get it all together in one place.  Even if you do, the resulting information is often less than coherent. &lt;br /&gt;
&lt;br /&gt;
So, for my money nothing beats a book, especially for learning something new.  A Book will concentrate on one subject and do so with, generally, a unified voice.&lt;br /&gt;
&lt;br /&gt;
Except for my money I don't want a book, I want access to thousands.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130454"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=130454" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mlflory/aggbug/130454.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mark Flory</dc:creator>
            <guid>http://geekswithblogs.net/mlflory/archive/2009/03/26/safari-books-online-review.aspx</guid>
            <pubDate>Thu, 26 Mar 2009 18:06:37 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mlflory/comments/130454.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mlflory/archive/2009/03/26/safari-books-online-review.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/mlflory/comments/commentRss/130454.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mlflory/services/trackbacks/130454.aspx</trackback:ping>
        </item>
        <item>
            <title>Specification of My Garage Door</title>
            <link>http://geekswithblogs.net/mlflory/archive/2009/01/29/specification-of-my-garage-door.aspx</link>
            <description>&lt;p&gt;This morning I got up in the bitter cold to walk our new puppy.  I did not want to do it, but if he does not get his exercise in he turns into a total spaz by the end of the day (instead of just a partial spaz).  &lt;/p&gt;  &lt;p&gt;When we were done walking I opened up my garage door to get back into the house using the keypad.  Because it was so cold I was not patient enough for the door to go up completely before I went inside.  Because it was so cold I had my hood pulled up so that my peripheral vision was completely shot.  Add the two things together and you end up banging your head into the garage door.  &lt;/p&gt;  &lt;p&gt;Somewhat like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/mlflory/WindowsLiveWriter/SpecificationofMyGarageDoor_94F8/Stormtrooper-Bumps-His-Head_2.jpg"&gt;&lt;img title="Stormtrooper-Bumps-His-Head" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="201" alt="Stormtrooper-Bumps-His-Head" src="http://geekswithblogs.net/images/geekswithblogs_net/mlflory/WindowsLiveWriter/SpecificationofMyGarageDoor_94F8/Stormtrooper-Bumps-His-Head_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;One thing I noticed is that when I broke the beam of the safety sensor it did not stop the door.  If the door had been going down and I had done the same thing it would have stopped.  For some reason this gave me a pause and made me think about the way software is specified.&lt;/p&gt;  &lt;p&gt;I began to imagine a meeting long ago in some garage door manufacturing companies corporate office.   It was your typically design meeting, guys in suits sitting around talking to a bunch of guys in Dockers.&lt;/p&gt;  &lt;p&gt;“Look fellas”, said the main guy in a suit “we have this problem.”  Here he would have paused to make sure he had their attention.&lt;/p&gt;  &lt;p&gt;“People keep getting squashed by our doors.  It’s a real issue.  The shut the door and then walk under them, or their idiot kids do, or their idiot dogs, or their idiot Subaru hatchbacks do.”&lt;/p&gt;  &lt;p&gt;“Or their grandmothers”, pipes up one of the guys in suits, the obvious suck up.&lt;/p&gt;  &lt;p&gt;“Right”, says the main suit “So what we want you to do is to work up some kind of laser that when it gets broken it causes the door to go into reverse and stop squashing people.”&lt;/p&gt;  &lt;p&gt;“Like bugs”, adds the suck up.&lt;/p&gt;  &lt;p&gt;“A laser?”, asks one of the Docker’s kids.&lt;/p&gt;  &lt;p&gt;“Yeah, you know, like in the movies where they rob the art gallery and cross the laser and the whole thing comes crashing down.”&lt;/p&gt;  &lt;p&gt;“Like Entrapment”, says suck up, who then glazes over as he thinks about Catherine Zeta Jones.&lt;/p&gt;  &lt;p&gt;“Exactly!”, says Mr. Main.&lt;/p&gt;  &lt;p&gt;At this point a lot of the Docker's brigade is mad because the suits are trying to tell them how to solve the problem.  Of course, it is pretty much exactly how they are going to do it, but still where do these guys get off telling them how to do that.  And it is not a laser, it is an optical beam.  But for all the grumbling they get to it.&lt;/p&gt;  &lt;p&gt;On the first iteration the Docker crew does exactly what is asked.  The plane of the “laser” gets crossed and the door throws itself into reverse.  Except sometimes the plane gets crossed when the door is going down, which is great because it caused the door to go back up.  However, when the door is going up crossing the plane causes it to shut without any way to stop it.  So they go back to the drawing board and decide that what it really should do is just stop.  &lt;/p&gt;  &lt;p&gt;And then one brilliant engineer says “You know, there really is no reason to stop the door if the door is going up.”&lt;/p&gt;  &lt;p&gt;And thus instead of giving myself a violent whack and knocking my storm trooper helmet all askew, I really just got a glancing blow.  And even better the door did not reverse itself and squish me and/or the dog (although at this point I might have been ok with the latter).&lt;/p&gt;  &lt;p&gt;I guess my point is: Specification is hard, let’s go shopping.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129079"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129079" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mlflory/aggbug/129079.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mark Flory</dc:creator>
            <guid>http://geekswithblogs.net/mlflory/archive/2009/01/29/specification-of-my-garage-door.aspx</guid>
            <pubDate>Thu, 29 Jan 2009 21:09:07 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mlflory/comments/129079.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mlflory/archive/2009/01/29/specification-of-my-garage-door.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/mlflory/comments/commentRss/129079.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mlflory/services/trackbacks/129079.aspx</trackback:ping>
        </item>
        <item>
            <title>Security by Obscurity</title>
            <link>http://geekswithblogs.net/mlflory/archive/2009/01/28/security-by-obscurity.aspx</link>
            <description>&lt;p&gt; &lt;/p&gt;  &lt;p&gt;If you read enough about security in general you will hear the often touted principle of do not rely on security by obscurity.  It even has its own &lt;a href="http://en.wikipedia.org/wiki/Security_through_obscurity"&gt;Wikipedia page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;You see this advice thrown out a lot when somebody does something like embedding encryption keys in their code.  The developers assumption is that the code will never be read by anyone and thus the key is safe.  I have personally seen that one cracked in about one minute.&lt;/p&gt;  &lt;p&gt;So the advice is good, you should not RELY on security by obscurity.  It cannot be counted on.&lt;/p&gt;  &lt;p&gt;However, does that mean you should never use obscurity at all?&lt;/p&gt;  &lt;p&gt;A common example is code obfuscation.  A lot of people will tell you there is no point because someone determined enough, or good enough, or who just has a lot of time to waste will be able to break it down.  So absolutely, you should not rely on obfuscation to secure your application (i.e. key hiding).&lt;/p&gt;  &lt;p&gt;But my immediate thought is: Why make it easy for them?&lt;/p&gt;  &lt;p&gt;Why not cause them more hassle, even if it is not all that much.  What is more, the additional hassle onto itself will serve as a deterrent for the less determined, or talented, or patient.&lt;/p&gt;  &lt;p&gt;So I believe you should assume that any information you obscure will end up in the attacker’s hands no matter what you do.  But, if there is nothing you can do about it (such as somebody reverse engineering your code), then you should obscure it anyway just to be a pain in their ass.  It is not like they are going to thank you for making it easier for them.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129032"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=129032" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mlflory/aggbug/129032.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mark Flory</dc:creator>
            <guid>http://geekswithblogs.net/mlflory/archive/2009/01/28/security-by-obscurity.aspx</guid>
            <pubDate>Wed, 28 Jan 2009 15:25:48 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mlflory/comments/129032.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mlflory/archive/2009/01/28/security-by-obscurity.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/mlflory/comments/commentRss/129032.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mlflory/services/trackbacks/129032.aspx</trackback:ping>
        </item>
        <item>
            <title>Finding a performance issue with dynaTrace</title>
            <category>Performance</category>
            <link>http://geekswithblogs.net/mlflory/archive/2008/12/29/finding-a-performance-issue-with-dynatrace.aspx</link>
            <description>Recently, I was asked to look into a performance issue we are having with a particular windows service when it is being communicated with a MMC snap-in we have developed.  Essentially the snap-in communicates with the service using WCF to get the data that populates a particular form.  When the form was loaded it could take between 10-30 seconds depending upon the data storage mechanisms on the backend.&lt;br /&gt;
&lt;br /&gt;
Normally, figuring out what is going on with a Windows service can be a huge pain in the ass.  Everything is being tossed out on a seperate thread and you have to figure out what causes it to do what and what else is going on.&lt;br /&gt;
&lt;br /&gt;
Fortunately, I have &lt;a href="javascript:void(0);/*1230580899157*/"&gt;dynaTrace &lt;/a&gt;on my side!&lt;br /&gt;
&lt;br /&gt;
So first thing I need to do is select my applications for instrumentation using the .Net Configuration Tool:&lt;br /&gt;
&lt;br /&gt;
&lt;img height="390" alt="" width="776" src="/images/geekswithblogs_net/mlflory/dynaTraceAgentConfig.JPG" /&gt;&lt;br /&gt;
&lt;br /&gt;
This basically lists every piece of managed code ever JIT'ed on my box.  What was interesting to me is that I do not think the Microsoft Management Console (mmc.exe) is managed code.  But, because it loads up my managed code it shows up in the list.  Because of this I could see what is happening on the console side.&lt;br /&gt;
&lt;br /&gt;
I also chose to instrument the Windows Service as well.  The next thing you need to is determine the specific set of methods that are interesting in this scenario.  Doing this is no small trick and deserves a post onto itself so in the end I had this being reported in dynaTrace.&lt;br /&gt;
&lt;br /&gt;
&lt;img height="200" alt="" width="755" src="/images/geekswithblogs_net/mlflory/Methods.JPG" /&gt;&lt;br /&gt;
&lt;br /&gt;
The big contributed here was the code in the namespace that took 39 seconds to execute, but that is not what I am going to focus on for this article.  While the developers were chunking on the code causing those issues I also noticed the GetDefaultCertificate code was taking 3 seconds or so.&lt;br /&gt;
&lt;br /&gt;
The code is basically something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;link href="file:///C:\DOCUME~1\mflory\LOCALS~1\Temp\msohtmlclip1\01\clip_filelist.xml" rel="File-List" /&gt;
&lt;link href="file:///C:\DOCUME~1\mflory\LOCALS~1\Temp\msohtmlclip1\01\clip_themedata.thmx" rel="themeData" /&gt;
&lt;link href="file:///C:\DOCUME~1\mflory\LOCALS~1\Temp\msohtmlclip1\01\clip_colorschememapping.xml" rel="colorSchemeMapping" /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:WordDocument&gt;
&lt;w:View&gt;Normal&lt;/w:View&gt;
&lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
&lt;w:TrackMoves /&gt;
&lt;w:TrackFormatting /&gt;
&lt;w:PunctuationKerning /&gt;
&lt;w:ValidateAgainstSchemas /&gt;
&lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
&lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
&lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
&lt;w:DoNotPromoteQF /&gt;
&lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
&lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
&lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
&lt;w:Compatibility&gt;
&lt;w:BreakWrappedTables /&gt;
&lt;w:SnapToGridInCell /&gt;
&lt;w:WrapTextWithPunct /&gt;
&lt;w:UseAsianBreakRules /&gt;
&lt;w:DontGrowAutofit /&gt;
&lt;w:SplitPgBreakAndParaMark /&gt;
&lt;w:DontVertAlignCellWithSp /&gt;
&lt;w:DontBreakConstrainedForcedTables /&gt;
&lt;w:DontVertAlignInTxbx /&gt;
&lt;w:Word11KerningPairs /&gt;
&lt;w:CachedColBalance /&gt;
&lt;/w:Compatibility&gt;
&lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
&lt;m:mathPr&gt;
&lt;m:mathFont m:val="Cambria Math" /&gt;
&lt;m:brkBin m:val="before" /&gt;
&lt;m:brkBinSub m:val="&amp;#45;-" /&gt;
&lt;m:smallFrac m:val="off" /&gt;
&lt;m:dispDef /&gt;
&lt;m:lMargin m:val="0" /&gt;
&lt;m:rMargin m:val="0" /&gt;
&lt;m:defJc m:val="centerGroup" /&gt;
&lt;m:wrapIndent m:val="1440" /&gt;
&lt;m:intLim m:val="subSup" /&gt;
&lt;m:naryLim m:val="undOvr" /&gt;
&lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
&lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267"&gt;
&lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal" /&gt;
&lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /&gt;
&lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 1" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 2" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 3" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 4" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 5" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 6" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 7" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 8" /&gt;
&lt;w:LsdException Locked="false" Priority="39" Name="toc 9" /&gt;
&lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /&gt;
&lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title" /&gt;
&lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /&gt;
&lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /&gt;
&lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong" /&gt;
&lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /&gt;
&lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /&gt;
&lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /&gt;
&lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /&gt;
&lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /&gt;
&lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /&gt;
&lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /&gt;
&lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title" /&gt;
&lt;w:LsdException Locked="false" Priority="37" Name="Bibliography" /&gt;
&lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /&gt;
&lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style type="text/css"&gt;&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--&gt;&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;            &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: rgb(43,145,175)"&gt;X509Certificate2&lt;/span&gt; GetDefaultCertificate()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;            {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;                  &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; certString = GetCertificateSetting();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;                  &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(certString))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;                  {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;                        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;                  }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;                  &lt;span style="COLOR: blue"&gt;byte&lt;/span&gt;[] bytes = &lt;span style="COLOR: rgb(43,145,175)"&gt;Convert&lt;/span&gt;.FromBase64String(certString);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;                  &lt;span style="COLOR: rgb(43,145,175)"&gt;X509Certificate2&lt;/span&gt; cert = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: rgb(43,145,175)"&gt;X509Certificate2&lt;/span&gt;(bytes, &lt;span style="COLOR: rgb(163,21,21)"&gt;""&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;                  &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; cert;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;            }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
My code Nazi alarm goes off immediately because this code should definitely be a property (if your method is named Getwhatever that is usually your first clue).  &lt;br /&gt;
&lt;br /&gt;
Leaving that be though, the thing I now know, because of dynaTrace, is that this psuedo-property is accessed 56 times, but does it really need to new'ed up each time?&lt;br /&gt;
&lt;br /&gt;
Turns out that it does not.  That the certString never changes through the course of an execution (it is held in an App.Config which cannot change).  So this values should be set once and just referred to again and again like so:&lt;br /&gt;
&lt;br /&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red163\green21\blue21;}??\fs20         \cf3 internal\cf0  \cf3 static\cf0  \cf4 X509Certificate2\cf0  GetDefaultCertificate\par ??        \{\par ??            \cf3 get\par ??\cf0             \{\par ??                \cf3 if\cf0  (m_certification == \cf3 null\cf0 )\par ??                \{\par ??                    \cf3 string\cf0  certString = GetCertificateSetting();\par ??\par ??                    \cf3 if\cf0  (\cf3 string\cf0 .IsNullOrEmpty(certString))\par ??                    \{\par ??                        \cf3 return\cf0  \cf3 null\cf0 ;\par ??                    \}\par ??\par ??                    \cf3 byte\cf0 [] bytes = \cf4 Convert\cf0 .FromBase64String(certString);\par ??\par ??                    m_certification = \cf3 new\cf0  \cf4 X509Certificate2\cf0 (bytes, \cf5 ""\cf0 );\par ??\par ??                \}\par ??                \cf3 return\cf0  m_certification;\par ??            \}\par ??\par ??        \}}
--&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red43\green145\blue175;\red163\green21\blue21;}??\fs20         \cf3 internal\cf0  \cf3 static\cf0  \cf4 X509Certificate2\cf0  GetDefaultCertificate\par ??        \{\par ??            \cf3 get\par ??\cf0             \{\par ??                \cf3 if\cf0  (m_certification == \cf3 null\cf0 )\par ??                \{\par ??                    \cf3 string\cf0  certString = GetCertificateSetting();\par ??\par ??                    \cf3 if\cf0  (\cf3 string\cf0 .IsNullOrEmpty(certString))\par ??                    \{\par ??                        \cf3 return\cf0  \cf3 null\cf0 ;\par ??                    \}\par ??\par ??                    \cf3 byte\cf0 [] bytes = \cf4 Convert\cf0 .FromBase64String(certString);\par ??\par ??                    m_certification = \cf3 new\cf0  \cf4 X509Certificate2\cf0 (bytes, \cf5 ""\cf0 );\par ??\par ??                \}\par ??                \cf3 return\cf0  m_certification;\par ??            \}\par ??\par ??        \}}
--&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;internal&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: rgb(43,145,175)"&gt;X509Certificate2&lt;/span&gt; GetDefaultCertificate&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (m_certification == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; certString = GetCertificateSetting();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(certString))&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    &lt;span style="COLOR: blue"&gt;byte&lt;/span&gt;[] bytes = &lt;span style="COLOR: rgb(43,145,175)"&gt;Convert&lt;/span&gt;.FromBase64String(certString);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                    m_certification = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: rgb(43,145,175)"&gt;X509Certificate2&lt;/span&gt;(bytes, &lt;span style="COLOR: rgb(163,21,21)"&gt;""&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; m_certification;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;quot;Courier New&amp;quot;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;
A very minor code change.  But one that would have been very difficult to see as necessary without dynaTrace pointing it out to me.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128225"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128225" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mlflory/aggbug/128225.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mark Flory</dc:creator>
            <guid>http://geekswithblogs.net/mlflory/archive/2008/12/29/finding-a-performance-issue-with-dynatrace.aspx</guid>
            <pubDate>Mon, 29 Dec 2008 20:30:30 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mlflory/comments/128225.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mlflory/archive/2008/12/29/finding-a-performance-issue-with-dynatrace.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/mlflory/comments/commentRss/128225.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mlflory/services/trackbacks/128225.aspx</trackback:ping>
        </item>
        <item>
            <title>Diagnostic tracing your application with dynaTrace</title>
            <category>Performance</category>
            <link>http://geekswithblogs.net/mlflory/archive/2008/12/24/diagnostic-tracing-your-application-with-dynatrace.aspx</link>
            <description>&lt;p&gt;My company recently purchased a software called dynaTrace to be used for performance diagnosis.  It primarily started as a Java tool but they do support .Net as well.  Since my company is entirely .Net based I will explain the product from that point of view.&lt;/p&gt;
&lt;p&gt;The application works by using MSIL injection to put essentially a header and footer into each method you have instrumented in an application.  If you do not know what MSIL Injection is &lt;a href="http://www.postsharp.org/aop.net/msil-injection/"&gt;here &lt;/a&gt;is a great overview on the PostSharp website, and &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc188743.aspx"&gt;here&lt;/a&gt; is a more detailed but not as accessible explanation of how to do it.&lt;/p&gt;
&lt;p&gt;So as your applicaiton is running each instrumented method reports back to a diagnostic server which collects all the method calls and then strings them together.  There is a client application that connects up to the server and lets you see what is going on in a particular execution.  Each seperate transaction flow in your application, what dynaTrace calls a purepath, is knitted together so you can follow it all the way through.&lt;/p&gt;
&lt;p&gt;The product can follow across web service, MSMQ, and remoting calls so that everything is seen together as one transaction.  The current version cannot do WCF but their next release (hopefully 1st quarter 2009) will.&lt;/p&gt;
&lt;p&gt;So, let's say you had an instrumented ASP.Net website that when some user makes a request, it calls a web service which is also instrumented, which then contacts the database.  With dynaTrace we would see that as one request, it would be relatively transparent when the code executed across to the web service.  The calls the web service makes to the database are seen because ADO.Net is instrumented, but the database server itself is not directly instrumented.&lt;/p&gt;
&lt;p&gt;So now I can see the total time of the web request , all the pieces of it, and what database calls are made.  With that information you can figure out what the big contributers are very easily. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128155"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=128155" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mlflory/aggbug/128155.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mark Flory</dc:creator>
            <guid>http://geekswithblogs.net/mlflory/archive/2008/12/24/diagnostic-tracing-your-application-with-dynatrace.aspx</guid>
            <pubDate>Wed, 24 Dec 2008 15:48:50 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mlflory/comments/128155.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mlflory/archive/2008/12/24/diagnostic-tracing-your-application-with-dynatrace.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/mlflory/comments/commentRss/128155.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mlflory/services/trackbacks/128155.aspx</trackback:ping>
        </item>
        <item>
            <title>SafeCode's Fundamental Practices for Secure Software Development</title>
            <category>Security</category>
            <link>http://geekswithblogs.net/mlflory/archive/2008/12/09/safecodes.aspx</link>
            <description>&lt;p&gt;Several blogs I follow have mentioned that SafeCode has released there &lt;a href="http://www.safecode.org/publications/SAFECode_Dev_Practices1008.pdf"&gt;Fundamental Practices for Secure Software Development&lt;/a&gt; guide.  I had thought that this was released a while ago actually and the document is dated October 8th.  Oh well, it is a good reference regardless.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.safecode.org/mission_faqs.php"&gt;mission &lt;/a&gt;of SafeCode.org is "SAFECode is dedicated to increasing trust in information and communications technology products and services through the advancement of proven software assurance methods."  They have a number of different organizations contributing to this effort, like Microsoft, EMC, Symantic and others.&lt;/p&gt;
&lt;p&gt;I got to it by reading this article &lt;a href="http://searchsoftwarequality.techtarget.com/news/article/0,289142,sid92_gci1340940,00.html"&gt;Secure Software Development Practices 'not rocket science'&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127764"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127764" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mlflory/aggbug/127764.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mark Flory</dc:creator>
            <guid>http://geekswithblogs.net/mlflory/archive/2008/12/09/safecodes.aspx</guid>
            <pubDate>Tue, 09 Dec 2008 15:23:28 GMT</pubDate>
            <comments>http://geekswithblogs.net/mlflory/archive/2008/12/09/safecodes.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/mlflory/comments/commentRss/127764.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mlflory/services/trackbacks/127764.aspx</trackback:ping>
        </item>
        <item>
            <title>Microsoft's SDL Optimization Model</title>
            <category>Security</category>
            <link>http://geekswithblogs.net/mlflory/archive/2008/12/08/microsofts-sdl-optimization-model.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/security/dd221356.aspx"&gt;Microsoft's SDL Optimization model&lt;/a&gt; is for moving your organization along in their &lt;a href="http://msdn.microsoft.com/en-us/security/cc448177.aspx"&gt;Security Development Lifecycle&lt;/a&gt;.  The SDL is really born out of a lot of lesson's learned and pain realized by Microsoft over the years.  The idea is to build into your development process a more security centric focus throughout the lifecycle.&lt;/p&gt;
&lt;p&gt;The Optimization Model follows this diagram:&lt;/p&gt;
&lt;p&gt;&lt;img height="220" alt="Microsofts Security Development Lifecycle Optimization Model" width="176" src="/images/geekswithblogs_net/mlflory/SDL Opt Model.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The idea here is to first determine where your organization is at, figure out where you want to be, and determine how to get there.  You start with an introduction document and move from there to a self-assessment.  Depending up on the assessment you will move on to an implementer's guide.&lt;/p&gt;
&lt;p&gt;What I find helpful about this is it is difficult to figure out how to move an organization towards more secure development.  It is very helpful to have a demonstrable process that worked for somebody.  The fact that it came from Microsoft's own experiences and they are very enthusiastic about their success with it helps a lot.&lt;/p&gt;
&lt;p&gt;It also hurts a little because they have already lined up a number of vendors, their SDL Pro Network, to evangelize the process (i.e. sell services and training).  Don't get me wrong I am all for making a buck but sometimes it can get a little tedious how much they are promoting it within their documentation.&lt;/p&gt;
&lt;p&gt;I believe at some point it will be almost a requirement for software vendors (of whatever stripe) to have a demonstrable secure development process (for example the &lt;a href="https://www.pcisecuritystandards.org/pdfs/11-07-07.pdf"&gt;PA-DSS&lt;/a&gt;).  Too much money is being lost, too much information is at risk, and something definitely has to be done.  I am not positive that Microsoft's SDL will emerge as the solution for this but at this point it is better than nothing.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127740"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=127740" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mlflory/aggbug/127740.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mark Flory</dc:creator>
            <guid>http://geekswithblogs.net/mlflory/archive/2008/12/08/microsofts-sdl-optimization-model.aspx</guid>
            <pubDate>Mon, 08 Dec 2008 18:49:14 GMT</pubDate>
            <comments>http://geekswithblogs.net/mlflory/archive/2008/12/08/microsofts-sdl-optimization-model.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/mlflory/comments/commentRss/127740.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mlflory/services/trackbacks/127740.aspx</trackback:ping>
        </item>
        <item>
            <title>Using closed Generics (or hey, everyone, this is how I am crazy)</title>
            <category>Code Analysis</category>
            <link>http://geekswithblogs.net/mlflory/archive/2008/08/26/using-closed-generics-or-hey-everyone-this-is-how-i.aspx</link>
            <description>&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font face="Arial"&gt;I was reviewing some code the other day that was violating one of our metrics and I saw something like this:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;font face="Verdana"&gt;&lt;strong&gt;&lt;span class="GramE"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;internal&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="COLOR: #2b91af"&gt;UtilityClass&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;strong&gt;&lt;font face="Verdana"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; &lt;span class="SpellE"&gt;SomeUtilityMethod&lt;/span&gt;(&lt;span class="SpellE"&gt;&lt;span style="COLOR: #2b91af"&gt;IList&lt;/span&gt;&lt;/span&gt;&amp;lt;&lt;span class="SpellE"&gt;&lt;span style="COLOR: #2b91af"&gt;SomeClass&lt;/span&gt;&lt;/span&gt;&amp;gt; &lt;span class="SpellE"&gt;someStuff&lt;/span&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font face="Arial"&gt;The thing that struck me is this was an internal class and this was the only public method.  So the only purpose this class serves is to perform one operation on this closed generic IList.  &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font face="Arial"&gt;To me it is more natural and far oop-ier to have that code be part of the collection itself.  That may have been the natural instinct of the developer as well but they felt stuck because they are using generics.  The more I thought about it using closed generics like this seems problematic.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font face="Arial"&gt;For example, if I have two lists say:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font face="Arial"&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Verdana"&gt;IList &lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;String&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;gt;&lt;font color="#000000"&gt; blah&lt;/font&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Verdana"&gt;IList &amp;lt;&lt;font color="#2b91af"&gt;&lt;font color="#2b91af"&gt;String&lt;/font&gt;&lt;/font&gt;&amp;gt; &lt;font color="#000000"&gt;someOtherThings;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;And this method:&lt;/font&gt;&lt;/p&gt;
&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Verdana"&gt;public &lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/font&gt; &lt;font color="#000000"&gt;BlahProcessor&lt;/font&gt;(&lt;font color="#2b91af"&gt;&lt;font color="#2b91af"&gt;IList&lt;/font&gt;&lt;/font&gt;&amp;lt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/font&gt;&amp;gt;&lt;font color="#000000"&gt; blahStrings&lt;/font&gt;)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;Are those two lists the same thing?  Can we treat them the same?  Is the list &lt;strong&gt;someOtherThings&lt;/strong&gt; meant to be sent to the method &lt;strong&gt;BlahProcessor&lt;/strong&gt;?&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;The code as written cannot answer these questions.  Someone looking at this kind of code would have to make a determination and, of course, they could make a mistake when doing so.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;So what I should be doing instead is creating a new class that inherits from the closed generic that I am using, like so:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Verdana"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/font&gt; &lt;font color="#2b91af"&gt;&lt;font color="#2b91af"&gt;BlahCollection&lt;/font&gt;&lt;/font&gt; : &lt;font color="#2b91af"&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/font&gt;&amp;lt;&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/font&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;And now my method will look like this instead:&lt;/font&gt;&lt;/p&gt;
&lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Verdana"&gt;public &lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/font&gt; &lt;font color="#000000"&gt;BlahProcessor&lt;/font&gt;(&lt;font color="#2b91af"&gt;&lt;font color="#2b91af"&gt;BlahCollection&lt;/font&gt;&lt;/font&gt; &lt;font color="#000000"&gt;blahStrings&lt;/font&gt;)&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;Now I know that the method is meant to only work on a specific collection of strings.  &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: 'Times New Roman'"&gt;Yes, we did create an extra bit of code but that code is now definitive and purposeful in a way that it previously was not.&lt;/span&gt;  &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;I imagine if this was how the original collection had been stated this way in the code then the problematic utility method would never have been created.  The developer would have just realized that the collection itself should encaspulate this operation.  &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;Hey look, at least one other person thinks the same thing as me: &lt;/font&gt;&lt;a title="blocked::http://aspadvice.com/blogs/rbirkby/archive/2004/05/10/2405.aspx" href="http://aspadvice.com/blogs/rbirkby/archive/2004/05/10/2405.aspx"&gt;&lt;font color="#000000"&gt;http://aspadvice.com/blogs/rbirkby/archive/2004/05/10/2405.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;font face="Arial"&gt;&lt;font color="#2b91af"&gt;&lt;font color="#2b91af"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124697"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=124697" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/mlflory/aggbug/124697.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mark Flory</dc:creator>
            <guid>http://geekswithblogs.net/mlflory/archive/2008/08/26/using-closed-generics-or-hey-everyone-this-is-how-i.aspx</guid>
            <pubDate>Tue, 26 Aug 2008 16:12:13 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/mlflory/comments/124697.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/mlflory/archive/2008/08/26/using-closed-generics-or-hey-everyone-this-is-how-i.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/mlflory/comments/commentRss/124697.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/mlflory/services/trackbacks/124697.aspx</trackback:ping>
        </item>
    </channel>
</rss>