<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Paul Sheriff's Outer Circle Blog</title><link>http://weblogs.asp.net/psheriff/default.aspx</link><description>This blog is for my ramblings and to share my tips, tricks and advice garnered over 20+ years in the IT industry. I will be pulling a lot of the best questions from my Inner Circle and bring you those answers here as well.</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/PaulSheriffsOuterCircleBlog" type="application/rss+xml" /><item><title>Confused about which Data Access Technology to use?</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/26vSFDp5VHs/confused-about-which-data-access-technology-to-use.aspx</link><pubDate>Mon, 18 May 2009 16:54:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7092148</guid><dc:creator>psheriff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=7092148</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2009/05/18/confused-about-which-data-access-technology-to-use.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Well, you are not alone. Even the experts do not agree on which data technology you should use. However, you will find a common theme among each of the panelists in this lively video: &lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;A href="http://www.msteched.com/online/view.aspx?tid=fa50fd2a-05f3-41d9-aaa6-110daea9dce2"&gt;&lt;STRONG&gt;The Data Access Menu: Making Intelligent Choices&lt;/STRONG&gt;&lt;/A&gt;. (&lt;A href="http://www.msteched.com/online/view.aspx?tid=fa50fd2a-05f3-41d9-aaa6-110daea9dce2"&gt;http://www.msteched.com/online/view.aspx?tid=fa50fd2a-05f3-41d9-aaa6-110daea9dce2&lt;/A&gt;)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Panelists include Rocky Lhotka, Stephen Forte, Paul Sheriff, Jeffrey Palermo, Kent Alstadt and Richard Campbell. Watch as these heavy weights in the industry talk about the various Microsoft Data Access technologies and how you should best approach each one.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;This video is only about 35 minutes long, and is a lot of fun to listen to. I sure had a great time doing this panel!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Paul&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7092148" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/Tech+Ed+2009/default.aspx">Tech Ed 2009</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/Data+Access/default.aspx">Data Access</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2009/05/18/confused-about-which-data-access-technology-to-use.aspx</feedburner:origLink></item><item><title>The Incredible Race Condition</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/X1anWpJ6gF8/the-incredible-race-condition.aspx</link><pubDate>Wed, 13 May 2009 04:51:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7084666</guid><dc:creator>psheriff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=7084666</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2009/05/13/the-incredible-race-condition.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;OK all you folks at Tech Ed. Here is my special code for my "Race": &lt;/P&gt;
&lt;DIV&gt;&lt;A href="https://mail.pdsa.com/owa/redir.aspx?C=e5ab92e7a6fe492eaad787dd48e18b12&amp;amp;URL=http%3a%2f%2ftr.im%2ftheregion_2361" target=_blank&gt;http://tr.im/theregion_2361&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;DIV&gt;You can get more information about the "Race" at &lt;A href="http://tr.im/race_condition" target=_blank&gt;http://tr.im/race_condition&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Paul&lt;/DIV&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7084666" width="1" height="1"&gt;</description><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2009/05/13/the-incredible-race-condition.aspx</feedburner:origLink></item><item><title>Tech Ed Panel Now Viewable</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/azk5m_U6LcE/tech-ed-panel-now-viewable.aspx</link><pubDate>Wed, 13 May 2009 04:42:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7084663</guid><dc:creator>psheriff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=7084663</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2009/05/13/tech-ed-panel-now-viewable.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Hello All,&lt;/P&gt;
&lt;P mce_keep="true"&gt;Are you&amp;nbsp;looking to strike out on your own and create your own software consulting business?&amp;nbsp;If you have ever thought about doing so, you might want to check out this panel entitled: "Let's Talk About Software Consulting as a Business". This panel was presented at Tech&amp;nbsp;Ed on May 11, 2009. &amp;nbsp;You can view this panel at: &lt;A href="http://www.msteched.com/online/view.aspx?tid=bb81bae0-320a-4bda-9146-12f0b20a8733" mce_href="http://www.msteched.com/online/view.aspx?tid=bb81bae0-320a-4bda-9146-12f0b20a8733"&gt;http://www.msteched.com/online/view.aspx?tid=bb81bae0-320a-4bda-9146-12f0b20a8733&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;In this panel are panelists, myself included, that have had many years of experience running a consulting business.&amp;nbsp;You are sure to pick up some wisdom from those of&amp;nbsp;us that have "been there". The topics covered are managing client expectations, fixed price versus time and material and lots of other great tips and tricks.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Hope you enjoy.&lt;/P&gt;
&lt;P&gt;Thanks,&lt;BR&gt;Paul&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7084663" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/IT+Professional/default.aspx">IT Professional</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/Management/default.aspx">Management</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/Tech+Ed+2009/default.aspx">Tech Ed 2009</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2009/05/13/tech-ed-panel-now-viewable.aspx</feedburner:origLink></item><item><title>I Love the File/Directory Classes in .NET!</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/WJr5QHGqCjA/i-love-the-file-directory-classes-in-net.aspx</link><pubDate>Fri, 15 Jun 2007 21:53:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2828420</guid><dc:creator>psheriff</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=2828420</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/06/15/i-love-the-file-directory-classes-in-net.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;I just had a situation where a potential client gave me a zip file of about 200 files. They wanted us to give them an estimate on how long it would take us to recreate each screen in ASP.NET 2.0. I did not relish the thought of typing in all those file names into an Excel spreadsheet so I could assign hours to each one. So I wrote a simple little utility to grab each file in the folder, and add that file name to a StringBuilder object. I separated each file name with a CRLF. Once I had all of the files in the StringBuilder object, I simply copied the text to the Clipboard. Then I opened up Excel and pasted the contents of the Clipboard into an Excel column. Bingo! I now had all those file names into Excel, ready for me to assign hours to!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;C# Code&lt;/STRONG&gt;&lt;BR&gt;private void GetFiles()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; System.Text.StringBuilder sb = new System.Text.StringBuilder(1024);&lt;BR&gt;&amp;nbsp; System.IO.FileInfo fil;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp; foreach (string strFile in System.IO.Directory.GetFiles(@"D:\Customers\ASP"))&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fil = new System.IO.FileInfo(strFile);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(fil.Name.Replace(".asp", "") + Environment.NewLine);&lt;BR&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp; Clipboard.SetText(sb.ToString());&lt;BR&gt;}&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;VB.NET Code&lt;BR&gt;&lt;/STRONG&gt;Private Sub GetFiles()&lt;BR&gt;&amp;nbsp; Dim sb As New System.Text.StringBuilder(1024)&lt;BR&gt;&amp;nbsp; Dim fil As System.IO.FileInfo&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp; For Each strFile As String In System.IO.Directory.GetFiles("D:\Customer\ASP")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fil = New System.IO.FileInfo(strFile)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(fil.Name.Replace(".asp", "") &amp;amp; Environment.NewLine)&lt;BR&gt;&amp;nbsp; Next&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp; Clipboard.SetText(sb.ToString())&lt;BR&gt;End Sub&lt;/P&gt;
&lt;P mce_keep="true"&gt;I hope this little tip helps you the next time you have to do something like this!&lt;/P&gt;
&lt;P mce_keep="true"&gt;Paul&lt;BR&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2828420" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/File+IO/default.aspx">File IO</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/06/15/i-love-the-file-directory-classes-in-net.aspx</feedburner:origLink></item><item><title>Code Audits: Not just for beginners!</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/kBv58K8ol64/code-audits-not-just-for-beginners.aspx</link><pubDate>Thu, 03 May 2007 12:51:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:2487003</guid><dc:creator>psheriff</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=2487003</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/05/03/code-audits-not-just-for-beginners.aspx#comments</comments><description>&lt;p&gt;When is the last time you had one of your peers or an external consultant evaluate your coding? If you have not done this in awhile, you should seriously consider it. While I am sure you are a great programmer, different people have other ideas as well. In the IT business, it is all about learning. If you are not sharing ideas, or talking with others about your coding, then you are probably not learning as much as you could. &lt;/p&gt;&lt;p&gt;Now, I know reading articles and google-ing for code is a great way to learn as well, but everyone can bring fresh ideas to you. Never pass up a chance to &amp;quot;put yourself out there&amp;quot; and ask for some help. &lt;/p&gt;&lt;p&gt;At my company, PDSA, Inc. (www.pdsa.com) we actively encourage (actually, we enforce) code reviews on everyone. In fact, we have developed a set of checklists that we use to do a code review. For our security review, for example, we have over 144 points that we go over. This checklist not only covers code, but also security from an organizational standpoint. Our Application Design review covers about another 100 points and our SQL Server review also covers about 100 items. &lt;/p&gt;&lt;p&gt;I would encourage you to come up with your own checklist that you can use for doing reviews of code, organizational structure, databases and security. If you do not know where to start, you could join my Paul Sheriff&amp;#39;s Inner Circle (www.PaulSheriffInnerCircle.com). IT Professional members on my Inner Circle have access to all of my checklists. &lt;/p&gt;&lt;p&gt;Just recently, I performed code and security audits at two separate companies. These were companies that thought they had developed secure, well-written and performant applications. However, they had never had anyone audit their code before. As a result, I wrote a 16 page report for one company and a 20 page report for the other of improvements that could be made in their applications. Just an example of what can be learned by having someone else look at your code. The next steps for these companies will be a training session to talk about the findings in these reports. &lt;/p&gt;&lt;p&gt;I hope this inspires you to come up with your own code review process at your company. &lt;/p&gt;&lt;p&gt;Paul&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=2487003" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/Management/default.aspx">Management</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/Code+Reviews/default.aspx">Code Reviews</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/05/03/code-audits-not-just-for-beginners.aspx</feedburner:origLink></item><item><title>Watch out for Daylight Savings Time this Sunday!!!</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/tHsgYqwGRVQ/watch-out-for-daylight-savings-time-this-sunday.aspx</link><pubDate>Thu, 08 Mar 2007 19:42:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1967457</guid><dc:creator>psheriff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1967457</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/03/08/watch-out-for-daylight-savings-time-this-sunday.aspx#comments</comments><description>&lt;p&gt;There are serious potential problems with the upcoming switch to Daylight Savings Time this Sunday. While MSFT is working on a fix, so far it is not perfect. Check out these entries.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;&lt;a href="http://support.microsoft.com/gp/cp_dst" title="http://support.microsoft.com/gp/cp_dst"&gt;http://support.microsoft.com/gp/cp_dst&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;&lt;a href="http://support.microsoft.com/gp/dst_prodlist" title="http://support.microsoft.com/gp/dst_prodlist"&gt;http://support.microsoft.com/gp/dst_prodlist&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;&lt;a href="http://support.microsoft.com/kb/933146" title="http://support.microsoft.com/kb/933146"&gt;http://support.microsoft.com/kb/933146&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;The network company we work with, CSI (&lt;a href="http://www.csiteks.com/"&gt;www.csiteks.com&lt;/a&gt;), has discovered the following:&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;1.) If a client [like Outlook, entourage, palm or windows mobile] gets the update first, there will be a 1 hour disparity.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;2.) If the workstation gets the update before the mobile device, it can hose and duplicate appointments!!!&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;3.) If the user changes his/her clock forward on Tuesday [instead of the system administrator changing the time on the server or applying the patches across all machines] that user will be locked out of Active Directory until someone logs on as a local administrator.&amp;nbsp; This particular scenario we can almost count on as most of our users are local administrators of their machines!&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;Hopefully MSFT will give us a fix before this Sunday.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;Paul&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;&lt;a href="http://www.pdsa.com/"&gt;www.pdsa.com&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;&lt;a href="http://www.paulsheriffinnercircle.com/"&gt;www.PaulSheriffInnerCircle.com&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/span&gt;&lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1967457" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/Daylight+Savings+Time/default.aspx">Daylight Savings Time</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/03/08/watch-out-for-daylight-savings-time-this-sunday.aspx</feedburner:origLink></item><item><title>Deborah Kurata's new book is out!</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/NSyguH871qM/deborah-kurata-s-new-book-is-out.aspx</link><pubDate>Mon, 05 Mar 2007 18:19:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1916070</guid><dc:creator>psheriff</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1916070</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/03/05/deborah-kurata-s-new-book-is-out.aspx#comments</comments><description>&lt;p&gt;Hi All,&lt;/p&gt;&lt;p&gt;Just wanted to let you know that my good friend, Deborah Kurata, has just released the updated version to her popular book &amp;quot;Doing Objects in VB&amp;quot; for VS.NET 2005. Check it out if you get a chance!&lt;/p&gt;&lt;p&gt;Title: Doing Objects in Visual Basic 2005 &lt;br /&gt;Author: Deborah Kurata &lt;br /&gt;ISBN: 0321320492 &lt;br /&gt;More Info: &lt;a href="http://www.insteptech.com/home/books.htm"&gt;http://www.insteptech.com/home/books.htm&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Paul&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1916070" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/OOP/default.aspx">OOP</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/03/05/deborah-kurata-s-new-book-is-out.aspx</feedburner:origLink></item><item><title>Finding Machine.Config</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/iqA9qpAdrkI/finding-machine-config.aspx</link><pubDate>Tue, 27 Feb 2007 18:18:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1823938</guid><dc:creator>psheriff</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1823938</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/02/27/finding-machine-config.aspx#comments</comments><description>&lt;p&gt;OK, this is just a quick little tip. I need to be able to programmatically locate the Machine.Config file. Instead of hard-coding the path where I know it is, I used the new ConfigurationManager class in .NET 2.0 to perform this. Here is the code.&lt;/p&gt;&lt;p&gt;C#&lt;br /&gt;using System.Configuration;&lt;/p&gt;&lt;p&gt;Configuration cnf;&lt;/p&gt;&lt;p&gt;cnf = ConfigurationManager.OpenMachineConfiguration();&lt;/p&gt;&lt;p&gt;MessageBox.Show(cnf.FilePath);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;VB.NET&lt;br /&gt;Imports System.Configuration&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Dim cnf As Configuration&lt;/p&gt;&lt;p&gt;cnf = ConfigurationManager.OpenMachineConfiguration()&lt;/p&gt;&lt;p&gt;MessageBox.Show(cnf.FilePath)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;You will need to add a reference to the System.Configuration.dll to be able to use this, but then you can use File IO or XmlDocument methods to open and affect the Machine.Config.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Hope this helps someone out.&lt;/p&gt;&lt;p&gt;Paul&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1823938" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/Machine_2E00_Config/default.aspx">Machine.Config</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/02/27/finding-machine-config.aspx</feedburner:origLink></item><item><title>Are you still writing Add/Edit/Delete code?</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/GUAziyw9-9E/are-you-still-writing-add-edit-delete-code.aspx</link><pubDate>Fri, 23 Feb 2007 16:25:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1769797</guid><dc:creator>psheriff</dc:creator><slash:comments>9</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1769797</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/02/23/are-you-still-writing-add-edit-delete-code.aspx#comments</comments><description>&lt;p&gt;Recently one of my programmers came to me after having visited with a PDSA client. He told me one of the programmers at this client was creating a new .NET application and had about 5 add, edit, delete screens created. He had spent, on average, about 7 hours creating, testing, debugging and tweaking the code on each screen. He wrote a little over 200 lines of code for each screen and at least 5 stored procedures for each screen as well. Even though he was able to copy and paste a lot of the code from one screen to another, he still had to fully debug and regression test all the add, edit and delete routines on each screen. This was in addition to the business rule logic that he had to test.&lt;/p&gt;&lt;p&gt;So, what is the point of all of this?&lt;/p&gt;&lt;p&gt;Why was this programmer (and maybe you?) not using some sort of code generator and Framework to generate all of this CRUD (Create/Read/Update/Delete) logic? If you are not using a code generator to create add, edit, delete and simple business rule logic for data, in my opinion, you are spending WAY TOO MUCH TIME CODING and NOT ENOUGH TIME SOLVING the business problem.&lt;/p&gt;&lt;p&gt;The problem with hand-written add, edit, delete code can be summed up fairly succinctly:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It may not be standards based (give a CRUD screen to 10 developers and you will most likely get 10 different versions).&lt;/li&gt;&lt;li&gt;It is difficult to reuse for the next application.&lt;/li&gt;&lt;li&gt;When it needs updating, someone will have to search through all those lines of code looking for locations to update.&amp;nbsp; Guess what?&amp;nbsp; They won&amp;#39;t find all of them, resulting in high error rates.&lt;/li&gt;&lt;li&gt;This code will be harder to maintain over the life of the application, as new team members replace the original coding team.&lt;/li&gt;&lt;li&gt;It has to be written and re-written any place you need to add, edit, delete the same table, even on different forms.&lt;/li&gt;&lt;li&gt;If you change the table schema, you will need to find all the places where the add, edit, delete code for that table is and modify all those locations. This is a very error prone process.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You can eliminate every one of these consequences if you take advantage of a good Framework and Code Generator.&lt;/p&gt;&lt;p&gt;NOTE:&amp;nbsp; Many frameworks are NOT worth the hassle.&amp;nbsp; Microsoft&amp;#39;s Enterprise Library, for example, has so many downsides (no support, high learning curve, bad documentation, no upgrade path, way over-engineered, hard to use just one block by itself), it is used at the peril of any developer.&lt;/p&gt;&lt;p&gt;So which Framework should you use? It depends! I know, not a very good answer, but there are so many different frameworks and code generators out there that it is hard to find a one-size-fits-all. As far as code generators go you can&amp;#39;t go wrong with CodeSmith (&lt;a href="http://www.codesmithtools.com/"&gt;www.codesmithtools.com&lt;/a&gt;). This will help you generate CRUD logic quickly and simply. &lt;/p&gt;&lt;p&gt;As far as Frameworks, some are good and some aren&amp;#39;t. What you need to look for are the ones that do not lock you into their way of doing things:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Once a Framework generates code how customizable is it?&lt;/li&gt;&lt;li&gt;Can you inherit from their base classes?&lt;/li&gt;&lt;li&gt;Can you override their methods?&lt;/li&gt;&lt;li&gt;Can you add your own code to the generated code?&lt;/li&gt;&lt;li&gt;Do they separate their business logic from their data access code so you can add on your own business logic and not have it wiped out when your database schema changes and you need to regenerate?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So many questions, and so few answers. You will need to ask these questions before purchasing a Framework.&lt;/p&gt;&lt;p&gt;Many people have asked me what we use here at my consulting company PDSA, Inc. (&lt;a href="http://www.pdsa.com/"&gt;www.pdsa.com&lt;/a&gt;). We built our .NET Framework and Code Generator from scratch! I know, a lot of work, but it was worth it. We now have a process in place that is consistent from developer to developer. We have all CRUD logic generated in literally a few seconds. This includes all stored procedures. The code generated is also 100% bug free! This means we do not need to test any of this code. We only need to test the custom business logic we need for those particular screens that we are coding. This eliminates hours and hours of work. If the table schema changes, we simply regenerate, and since our business logic is separated from the CRUD logic, our custom code is preserved.&lt;/p&gt;&lt;p&gt;So, how does our Framework and Code Generator work? I do a monthly webcast that shows you our Framework. Sign up at &lt;a href="http://www.pdsa.com/webcasts"&gt;www.pdsa.com/webcasts&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Please understand I am not on this blog to promote our stuff. I happen to believe in Frameworks, any Framework, and I believe you owe it to yourself to check out the myriad of Frameworks that are on the market. I have been developing and designing Frameworks since I worked on COBOL on the mainframe. When I was doing Clipper programming I designed a code generator, screen painter, and a process for creating CRUD logic. In VB 3.0 I created a code generator and starting with VB 4.0 I have had a more complete framework. That has then led into our PDSA .NET Productivity Framework that we sell today. So stop writing so much code and focus on the business problem at hand. This will make you a better developer and one that is more demand by employers.&lt;/p&gt;&lt;p&gt;Paul&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1769797" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/Framework/default.aspx">Framework</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/02/23/are-you-still-writing-add-edit-delete-code.aspx</feedburner:origLink></item><item><title>Check out DNR TV!</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/qKcUGCYeiEc/check-out-dnr-tv.aspx</link><pubDate>Wed, 07 Feb 2007 01:11:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1565360</guid><dc:creator>psheriff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1565360</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/02/06/check-out-dnr-tv.aspx#comments</comments><description>&lt;p&gt;Last month I recorded an episode of DNR TV on creating custom providers. Carl and I go through a lot of code showing how to create your own custom providers. Enjoy!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.dnrtv.com/"&gt;http://www.dnrtv.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1565360" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/Providers/default.aspx">Providers</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/.NET/default.aspx">.NET</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/02/06/check-out-dnr-tv.aspx</feedburner:origLink></item><item><title>Migrating to .NET, simple to do</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/3auL2r05DaM/migrating-to-net-simple-to-do.aspx</link><pubDate>Tue, 06 Feb 2007 16:18:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1562205</guid><dc:creator>psheriff</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1562205</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/02/06/migrating-to-net-simple-to-do.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;In my travels, I have noticed many companies are sitting on legacy applications that are good candidates to migrate to .NET.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;While many of these applications run fine right now, eventually they will become obsolete due to changing business requirements, new operating systems, missing source code, etc. &lt;span&gt;&amp;nbsp;&lt;/span&gt;Upgrading to .NET offers significant advantages, but the time to start upgrading these applications is *before* they become obsolete.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4 style="margin: auto 0in"&gt;&lt;span style="font-family: Georgia"&gt;Planning for Obsolescence&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;Planning for the end of an application&amp;#39;s life should be a part of your overall IT strategy in your company. Does this mean you lose all the investment you put into this application? Not necessarily. Hopefully the application&amp;nbsp;has provided value to&amp;nbsp;your company.&amp;nbsp; There are plenty of business rules, screen elements and other valuable assets in the existing application that can be leveraged in the migration to .NET.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4 style="margin: auto 0in"&gt;&lt;span style="font-family: Georgia"&gt;Starting the Migration Process&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;One of the first steps in any migration process is to identify which applications should be migrated first. Once you decide on this, you should find any old specifications or requirements documents that describe the old system. If you can not find any, then create new ones. The goal is to create a new document that describes what the new application will do, what its goals are, and&amp;nbsp;what the value proposition (ROI) will be to the company.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;The next step is to &lt;strong&gt;&lt;span style="font-family: Georgia"&gt;prototype&lt;/span&gt;&lt;/strong&gt; the screens in the new technology. Either ASP.NET web forms, or maybe Windows Forms. This step should be fairly easy since you have an existing application that you are designing from. However, you might want to the opportunity now to update the look and feel of the application to some of the newer ways people like to view applications.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;When you are doing the prototyping, you should look around on the Internet for any tools that might help you migrate the screens and/or code to the newer platform. While the code may not migrate perfectly, it can be a help to identify business rules.&amp;nbsp;We always recommend re-writing code as opposed to using code that is converted, but&amp;nbsp;we&amp;nbsp;need to&amp;nbsp;find all the buried business rules in the existing code.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;As you prototype the new application, you should also be &lt;strong&gt;&lt;span style="font-family: Georgia"&gt;updating&lt;/span&gt;&lt;/strong&gt; the &lt;strong&gt;&lt;span style="font-family: Georgia"&gt;specifications and requirements document&lt;/span&gt;&lt;/strong&gt; with any new business rules, fields and additional screens that will be added to the new system.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4 style="margin: auto 0in"&gt;&lt;span style="font-family: Georgia"&gt;Using a Framework&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;Before you begin any serious coding, you should have a Framework in place. As most of you know PDSA is&amp;nbsp;a strong proponent of&amp;nbsp;Frameworks. We believe that if you don&amp;#39;t have a Framework in place, you should purchase one (&lt;/font&gt;&lt;a href="http://www.pdsa.com/products"&gt;&lt;strong&gt;&lt;span style="font-size: 10pt; font-family: Tahoma"&gt;&lt;font color="#0066cc"&gt;preferably ours&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;font size="3"&gt;!), or create one. A proper Framework is essential to ensuring your application development is done correctly, quickly, efficiently, consistently and ensures a lower Total Cost of Ownership over the life of an application.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;If you look at&amp;nbsp;many of your&amp;nbsp;legacy applications you will most likely find the same routines written in each one. Take the time now to find/create a Framework that creates these routines in one DLL and can then just be re-used as you migrate each application.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4 style="margin: auto 0in"&gt;&lt;span style="font-family: Georgia"&gt;Write the New Code&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;Now that you have created the prototype, created a specification document, consulted with the users of the system, convinced management of the ROI of the application, put your Framework into place, you are finally ready to start coding! Now is the time to look at other tools that can help make your job more efficient. For example, are there third-party tools that will make your UI design better, quicker, more efficient, and take you less code to write? Use CodeSmith, or the PDSA DACGen (from the PDSA Framework)&amp;nbsp;code generators&amp;nbsp;to develop the CRUD (create, read, update, delete) logic for your database calls.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;The goal of developers today should be to reduce the amount of code you write and to focus on the business rules of the application. How the application manages the business is&amp;nbsp;most important, not how many cool, wiz-bang routines you wrote. Those programmers that&amp;nbsp;write applications to save the company money or reduce costs are the programmers that are most valuable to the company.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4 style="margin: auto 0in"&gt;&lt;span style="font-family: Georgia"&gt;Summary&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;While migrating legacy applications does take time, money and resources, the upsides are tremendous. You will keep your programmers skills up to date, you will get better documentation, you will get a better, more robust system that is able to grow with your business, you will get a chance to put standards and a framework in place that will help with all other applications you migrate and create from scratch.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Georgia"&gt;&lt;font size="3"&gt;My company (&lt;a href="http://www.pdsa.com/"&gt;www.pdsa.com&lt;/a&gt;) have done many migrations over the last few years. While it is never a &amp;quot;slam-dunk&amp;quot;, once it is complete, the upsides for our clients have been huge. I have posted&amp;nbsp;many samples that can help developers migrate their applications up on my Inner Circle at &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Georgia"&gt;&lt;a href="http://www.paulsheriffinnercircle.com/"&gt;&lt;strong&gt;&lt;span&gt;&lt;font color="#800080" size="3"&gt;www.paulsheriffinnercircle.com&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;font size="3"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1562205" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/Migration/default.aspx">Migration</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/02/06/migrating-to-net-simple-to-do.aspx</feedburner:origLink></item><item><title>Not Estimating and Tracking your Projects? Expect Failure</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/oQ0qvI7BZHg/not-estimating-and-tracking-your-projects-expect-failure.aspx</link><pubDate>Sat, 20 Jan 2007 00:24:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1436722</guid><dc:creator>psheriff</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1436722</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/01/19/not-estimating-and-tracking-your-projects-expect-failure.aspx#comments</comments><description>&lt;p class="MsoNormal" style="margin: 6pt 0in"&gt;&lt;font face="Times New Roman" size="3"&gt;Estimating software development projects is one of the hardest things to do. &lt;strong&gt;First&lt;/strong&gt;, programmers just don&amp;rsquo;t like doing it. And why should they? They are usually incorrect and may feel the heat when their estimates slip. &lt;strong&gt;Secondly&lt;/strong&gt;, most programmers just don&amp;rsquo;t have a method or process by which to develop an estimate. I will lay out some simple steps to follow to help you on your way to actually &amp;ldquo;loving&amp;rdquo; to provide estimates. Yes, loving it. Because if you can be right most of the time, wouldn&amp;rsquo;t you love it too? If you come up with a process for estimating, you will be on your way to being right a large percentage of the time!&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 6pt 0in"&gt;&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;&lt;strong&gt;If you ask three programmers to give you an estimate for a project, you will have three different answers&lt;/strong&gt;. Why? Each one used their own backgrounds, experiences, and checklists to derive an estimate. So what do you do? Leverage those experiences in a structured approach and document it. What we did at my company PDSA, Inc.&amp;nbsp;(&lt;a href="http://www.pdsa.com/"&gt;http://www.pdsa.com/&lt;/a&gt;) is develop an estimating model and approach to estimating. We built and defined an estimating process. Remember: you can never improve an estimate if it is in someone&amp;rsquo;s mind. But if you build an estimating process and document it, you can improve the process and measure the process. Once you have done that, you can begin to build solid and more predictable estimates. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;em&gt;Step 1: Build an estimating model.&lt;/em&gt;&lt;/h2&gt;&lt;p class="MsoNormal" style="margin: 6pt 0in"&gt;&lt;font face="Times New Roman" size="3"&gt;What are all the elements to an estimate? Collect your teammates together and brainstorm all the elements of a project. There are many books out in the market, and&amp;nbsp;I am sure your teammates&amp;nbsp;will have some ideas to. Here are some sample elements: logical database design, physical database design, unit testing, integrated testing, prototyping, requirements meetings, coding, etc. You will likely have a list of over a hundred items. Classify them into categories like: requirements, development, testing, customer buyoff, etc.&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;em&gt;Step 2: Use the estimating model&lt;/em&gt;&lt;/h2&gt;&lt;p class="MsoNormal" style="margin: 6pt 0in"&gt;&lt;font face="Times New Roman" size="3"&gt;Does that sound silly? Why did I just go through all the work in Step 1 only to not use it in Step 2? That is because your customers or upper management will want a quick answer. The problem is that they will remember your quick &amp;ldquo;answer.&amp;rdquo; Try and resist. Once you start using your estimating model and you can show how successful you are, they will trust and believe in you. Now that is something &lt;strong&gt;new&lt;/strong&gt; for IT!&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;em&gt;Step 3: Track your work&lt;/em&gt;&lt;/h2&gt;&lt;p class="MsoNormal" style="margin: 6pt 0in"&gt;&lt;font face="Times New Roman" size="3"&gt;An estimate is only just an estimate unless you have time tracking in place. I don&amp;rsquo;t mean the kind where I track whether you went to lunch or not, but the kind of tracking that captures for every single task in your estimating model how many actual hours are spent. This is important. You have no idea how good your estimate really is unless you track actuals against it. You must do this and I can&amp;rsquo;t impress this point upon you more. By understanding your actuals you can refine your estimating model. Refining your model may include changing the number of hours you think a task really takes, or it could be that you forgot several tasks. Now you can add those new tasks back into your model. It is imperative to leverage your lessons learned and improve your model. Better models enable you to better predict project results, which yields in projects coming in on time and your customer&amp;rsquo;s appreciating it.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 6pt 0in"&gt;&lt;font face="Times New Roman" size="3"&gt;Once you have estimated and tracked several projects, you will begin building up a repository of estimating information. Another benefit is that at times a custom may ask for a quick estimate. You don&amp;rsquo;t have time to do much if any analysis, but they need that magic &amp;ldquo;number&amp;rdquo; to put into their budget. You could mine that data to find projects roughly similar to the new project. You could then at least provide a range of estimates based on some very high level project criteria. The estimate certainly is not perfect and should come with the usual disclaimers, but at least you have used real data based on your experience. At PDSA, we have over&amp;nbsp;9 years of tracked data and it has been extremely valuable in helping our clients in the initial planning and budgeting phase.&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;em&gt;Estimating &amp;ldquo;Rules of thumb&amp;rdquo;&lt;/em&gt;&lt;/h2&gt;&lt;p class="MsoNormal" style="margin: 6pt 0in"&gt;&lt;font face="Times New Roman" size="3"&gt;Estimates must be created using a standard, repeatable process. But when developing your estimating model, your model should produce reasonable estimates. If your model produces estimates that are unreachable, your development team will not work within your process. So your estimates need to be reasonable (within the context of your company, skill sets, leadership, etc.). On the other hand, make sure your estimates are a bit of a stretch. Each person should be challenged and your software development process should be challenged as well. As you challenge your team and processes you will find a wonderful outcome: innovation! You will innovate and discover new or different ways to do things better, faster, and cheaper. It may sound like a clich&amp;eacute;, but it works.&lt;/font&gt;&lt;/p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size: 14pt; font-family: Arial"&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;h2&gt;&lt;em&gt;Summary&lt;/em&gt;&lt;/h2&gt;&lt;p class="MsoNormal" style="margin: 6pt 0in"&gt;&lt;font face="Times New Roman" size="3"&gt;Estimating is an important skill that can be learned and improved. It is not a scientific process unless you let it become one. Accurate and consistent estimating builds customer loyalty and team confidence. Tracking provides real time feedback to not only your team members to see exactly where they are, but also to your customers. In October of 2006, I did a Webcast on Estimating on my Paul Sheriff&amp;#39;s Inner Circle (&lt;a href="http://www.paulsheriffinnercircle.com/"&gt;http://www.paulsheriffinnercircle.com/&lt;/a&gt;). On January&amp;nbsp;26, 2007 we are having another Webcast on the &lt;strong&gt;Top 10 Best Project Management Practices&lt;/strong&gt; that will also talk about estimating and time tracking.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1436722" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/Estimating/default.aspx">Estimating</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/Project+Management/default.aspx">Project Management</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/01/19/not-estimating-and-tracking-your-projects-expect-failure.aspx</feedburner:origLink></item><item><title>5 Things you did not know about me...</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/0Q47E1GYvp0/5-things-you-did-not-know-about-me.aspx</link><pubDate>Wed, 17 Jan 2007 21:11:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1426380</guid><dc:creator>psheriff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1426380</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/01/17/5-things-you-did-not-know-about-me.aspx#comments</comments><description>&lt;p&gt;Thanks to&amp;nbsp;&lt;a href="http://dotnetjunkies.com/WebLog/craigshoemaker/archive/2007/01/11/five_things_2007.aspx" title="Craig Shoemaker" target="_blank"&gt;Craig&amp;nbsp;Shoemaker&lt;/a&gt;&amp;nbsp;for tagging me on the &amp;quot;Five Things&amp;quot;&amp;lt;g&amp;gt;. So, here we go, here are five things you probably didn&amp;#39;t know about me: &lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. I grew up in Iowa&lt;/strong&gt;. I love the Midwest and I try to get back there to see friends whenever I can. I try to speak at the Des Moines, Iowa .NET User Group once a year, since that is where I have a lot of friends. I will be speaking there on March 7, 2007, so if you are in the area, stop by! (&lt;span class="a"&gt;&lt;font color="#008000"&gt;&lt;a href="http://www.iowadnug.org/"&gt;www.&lt;strong&gt;iowa&lt;/strong&gt;dnug.org&lt;/a&gt;) &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. I snow ski.&lt;/strong&gt; I try to go a few times a year to Mammoth with my friend, and the VP of my company,&amp;nbsp;Michael. I love being out in the fresh air and getting exercise. I am an intermediate skiier. I tried snowboarding once, but I prefer skiing.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. I play drums in a progressive rock band called Evolve (&lt;/strong&gt;&lt;a href="http://www.musicevolve.com/"&gt;&lt;strong&gt;www.MusicEvolve.com&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;).&lt;/strong&gt; We are an all-original music band. We have created about 20 songs so far and are working on our first CD which we hope to release in about 1 month. I picked up drums in January of 2004 after not having played for 20 years! Took awhile to get the chops back, but thanks to some good instructors, I am improving all the time. In fact, I am fortunate to have a local guy who is a Gene Krupa impersonator give me some lessons. Check out Randy Caputo if you are interested (&lt;a href="http://www.randycaputo.com/"&gt;www.RandyCaputo.com&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4. I was going to become a theatre major before I discovered computers.&lt;/strong&gt; While in college I was working in the school theatre doing lighting and stagecraft and we used an old Apple II+ to run the lights for the productions. I really enjoyed playing with the computer, and that is how I decided I liked computers better than theatre. However, to this day, I still love live theatre and go whenever I have a chance.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5. I have an 8 year old daughter named Maddie.&lt;/strong&gt;&amp;nbsp;She and I are like two peas in a pod. We love roller blading together, and in fact, we go 2 times a week to a local skating rink. We enjoying walking with the dog, going to movies, and just laughing and being together.&amp;nbsp;Being recently divorced has cut down a little of our time together, but we still have some great quality time together. &lt;/p&gt;&lt;p&gt;Hopefully, this gives you a little insight to my life. I hope you find it interesting. &lt;/p&gt;&lt;p&gt;So, if I were to pick on 3 other people, here is who I would like to know more about.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sqljunkies.com/WebLog/brianr/" title="Brian Randell" target="_blank"&gt;Brian Randell&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mcwtech.com/CS/blogs/keng/" title="Ken Getz" target="_blank"&gt;Ken Getz&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.lhotka.net/weblog/"&gt;Rocky Lhotka&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Paul&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1426380" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/Personal/default.aspx">Personal</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/01/17/5-things-you-did-not-know-about-me.aspx</feedburner:origLink></item><item><title>Use Close and Finally</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/z5mmW7UmRmM/use-close-and-finally.aspx</link><pubDate>Tue, 16 Jan 2007 20:50:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1419699</guid><dc:creator>psheriff</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1419699</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/01/16/use-close-and-finally.aspx#comments</comments><description>&lt;p&gt;In the last 2 weeks I have had two different clients complain that there are &amp;quot;memory leaks&amp;quot; in .NET. I tell them very politely, that most likely it is their code!&amp;lt;g&amp;gt; In both cases it was their code. The first case had to do with the programmers using a DataReader and not closing them when they were done with them, or they put the Close() method call within their Try block and not in a Finally. The second case involved the StreamWriter in the File.IO namespace where once again the file was not always being closed correctly due to the programmer not putting the close in the Finally block. Below is what the original code looked like:&amp;nbsp;&lt;/p&gt;&lt;p&gt;using System.IO;&lt;br /&gt;private void CreateLogFile()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; try&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StreamWriter sw = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new StreamWriter(@&amp;quot;D:\Samples\Test.txt&amp;quot;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; true, System.Text.UTF8Encoding.UTF8);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;This is some text&amp;quot;);&lt;br /&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Close();&lt;br /&gt;&lt;/strong&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; catch(Exception ex)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw ex;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&lt;br /&gt;You can see in the above code that the sw.Close() method is within the Try block. If an exception occurs when trying to open or write to the file, the code would go immediately to the Catch block and the Close would never execute. If this method is being called many times, this can cause and &amp;quot;apparent&amp;quot; memory leak. With just a little re-factoring the code was fixed to close the file in the Finally block.&lt;/p&gt;&lt;p&gt;private void CreateLogFile()&lt;br /&gt;{&lt;br /&gt;&lt;strong&gt;&amp;nbsp; StreamWriter sw = null;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; try&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw = new StreamWriter(@&amp;quot;D:\Samples\Test.txt&amp;quot;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; true, System.Text.UTF8Encoding.UTF8);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.WriteLine(&amp;quot;This is some text&amp;quot;);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; finally&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sw != null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/strong&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;Notice that there are three items that we had to fix up here. First, the declaration of the StreamWriter was moved out of the Try block. If we did not do this, then the variable &amp;quot;sw&amp;quot; would not able to be accessed from within the Finally block since it would have block-level scope only within the Try portion. Secondly, we created a Finally block, checked the &amp;quot;sw&amp;quot; variable for null, and if it was not null then we closed it. Thirdly, since nothing was happening with the catch, we eliminated it all together.&lt;/p&gt;&lt;p&gt;Watch these types of scenarios as this can cause hard-to-find bugs in your code.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1419699" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/File+IO/default.aspx">File IO</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/01/16/use-close-and-finally.aspx</feedburner:origLink></item><item><title>Beware of Encoding Types when saving to a File</title><link>http://feedproxy.google.com/~r/PaulSheriffsOuterCircleBlog/~3/zFr9x5stbKo/beware-of-encoding-types-when-saving-to-a-file.aspx</link><pubDate>Tue, 16 Jan 2007 01:12:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1417161</guid><dc:creator>psheriff</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/psheriff/rsscomments.aspx?PostID=1417161</wfw:commentRss><comments>http://weblogs.asp.net/psheriff/archive/2007/01/15/beware-of-encoding-types-when-saving-to-a-file.aspx#comments</comments><description>&lt;p&gt;I learned something today... I was doing some Encryption of strings using DPAPI and converting them to a Base64 string and&amp;nbsp;everything worked fine when I was encrypting and decrypting. However, when I saved the Base64 string to a file, then re-read the data and tried to decrypt the data, it would not work. It took me quite awhile to figure out what was going on. &lt;/p&gt;&lt;p&gt;I&amp;nbsp;realized that when&amp;nbsp;saving text using the &lt;em&gt;WriteAllText&lt;/em&gt; method on the &lt;em&gt;File&lt;/em&gt; class,&amp;nbsp;you&amp;nbsp;need to specify the Encoding type. For example:&lt;/p&gt;&lt;p&gt;File.WriteAllText(C:\Temp\Test.txt, &amp;quot;This is some text&amp;quot;, &lt;strong&gt;System.Text.Encoding.UTF8&lt;/strong&gt;)&lt;/p&gt;&lt;p&gt;Now the above example uses just plain text, but when you are using&amp;nbsp;doing encryption and decryption and you&amp;nbsp;are translating a string to an array of bytes, you use&amp;nbsp;one of the encoding mechanisms to do the&amp;nbsp;conversion. For example:&lt;/p&gt;&lt;p&gt;bytArray = &lt;strong&gt;Encoding.UTF8&lt;/strong&gt;.GetBytes(strValue)&lt;/p&gt;&lt;p&gt;So in this case&amp;nbsp;if you use&amp;nbsp;UTF encoding to translate a string into an array of bytes prior to doing the encryption,&amp;nbsp;you need to make sure that&amp;nbsp;you store these characters to a file using the same encoding mechanism.&lt;/p&gt;&lt;p&gt;I hope this helps someone else, so you won&amp;#39;t have to go through the same agony I did!&lt;/p&gt;&lt;p&gt;Paul&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=1417161" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/psheriff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/psheriff/archive/tags/File+IO/default.aspx">File IO</category><feedburner:origLink>http://weblogs.asp.net/psheriff/archive/2007/01/15/beware-of-encoding-types-when-saving-to-a-file.aspx</feedburner:origLink></item></channel></rss>
