<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>.NET</title>
        <link>http://www.drowningintechnicaldebt.com/DennisBottjer/category/1.aspx</link>
        <description>.NET Framework</description>
        <language>en-US</language>
        <copyright>Dennis Bottjer</copyright>
        <generator>Subtext Version 2.1.2.2</generator>
        <item>
            <title>Tulsa Visual Studio 2008 InstallFest</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/12/04/tulsa-visual-studio-2008-install-fest.aspx</link>
            <description>&lt;p&gt;Tonight (12/03/2007) I attended the Tulsa, OK .NET User Group's Visual Studio InstallFest organized by David Walker.  The event had an amazing turnout with over 150 people in attendance.  We had a great time networking and installing Visual Studio 2008.&lt;/p&gt;&lt;a href="http://technorati.com/tag/[Community]" rel="tag" mce_href="http://technorati.com/tag/[Community]"&gt;[Community]&lt;/a&gt; | &lt;a href="http://technorati.com/tag/[.NET]" rel="tag" mce_href="http://technorati.com/tag/[.NET]"&gt;[.NET]&lt;/a&gt; | &lt;a href="http://technorati.com/tag/[InstallFest]" rel="tag" mce_href="http://technorati.com/tag/[InstallFest]"&gt;[InstallFest]&lt;/a&gt; &lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/84.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/12/04/tulsa-visual-studio-2008-install-fest.aspx</guid>
            <pubDate>Tue, 04 Dec 2007 08:08:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/84.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/12/04/tulsa-visual-studio-2008-install-fest.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/84.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/84.aspx</trackback:ping>
        </item>
        <item>
            <title>PEX Dynamic Test Generation</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/11/14/pex-dynamic-test-generation.aspx</link>
            <description>&lt;p&gt;Found this project, &lt;a title="http://research.microsoft.com/Pex/" href="http://research.microsoft.com/Pex/"&gt;http://research.microsoft.com/Pex/&lt;/a&gt; from MS Research which apparently dynamically generates tests and code analysis during active development.  Interesting way to enforce code quality and just prove requirements are being met. &lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/79.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/11/14/pex-dynamic-test-generation.aspx</guid>
            <pubDate>Wed, 14 Nov 2007 17:16:29 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/79.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/11/14/pex-dynamic-test-generation.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/79.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/79.aspx</trackback:ping>
        </item>
        <item>
            <title>Mind Mapping with Bookvar</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/11/08/mind-mapping-with-bookvar.aspx</link>
            <description>&lt;p mce_keep="true"&gt;Bookvar &lt;a href="http://www.bookvar.net/Default.aspx"&gt;http://www.bookvar.net/Default.aspx&lt;/a&gt; is a free Mind Mapping Windows Application built on the .NET 3.5 Beta Framework.  It highlights some amazing UI features available in WPF.  The application can be easily extended via add-ins.  The development team plans to make monthly releases.&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/76.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/11/08/mind-mapping-with-bookvar.aspx</guid>
            <pubDate>Thu, 08 Nov 2007 13:29:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/76.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/11/08/mind-mapping-with-bookvar.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/76.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/76.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET Debug=true Performance Considerations</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/10/10/asp-net-debug-true-performance-considerations.aspx</link>
            <description>&lt;p&gt;I'm sure, like me, you've seen plenty of production web.config files with debug=true set.  Most senior ASP.NET developers will recognize that debug should be set to false for the production build.  However, this small detail is often over looked.  So what does this setting really do and does it have any significant impact on a production site?&lt;/p&gt;
&lt;p&gt;When &lt;b&gt;debug&lt;/b&gt; is set to &lt;b&gt;true&lt;/b&gt;, the following occurs: 
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Pages are not batch compiled. 
&lt;/li&gt;&lt;li&gt;Pages do not time out. When a problem occurs, such as a problem with a Web service call, the Web server may start to queue requests and stop responding. 
&lt;/li&gt;&lt;li&gt;Additional files are generated in the Temporary &lt;a href="http://asp.net/" mce_href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; Files folder. 
&lt;/li&gt;&lt;li&gt;The &lt;b&gt;System.Diagnostics.DebuggableAttribute&lt;/b&gt; attribute is added to generated code. This causes the CLR to track extra information about generated code, and it also disables certain optimizations. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Source of Information: &lt;a title="http://msdn2.microsoft.com/en-us/library/ms998549.aspx" href="http://msdn2.microsoft.com/en-us/library/ms998549.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms998549.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms998549.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/75.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/10/10/asp-net-debug-true-performance-considerations.aspx</guid>
            <pubDate>Wed, 10 Oct 2007 13:36:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/75.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/10/10/asp-net-debug-true-performance-considerations.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/75.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/75.aspx</trackback:ping>
        </item>
        <item>
            <title>Thoughts On Recursion</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/07/10/thoughts-on-recursion.aspx</link>
            <description>&lt;p&gt;Recursion is a computer science concept in which a method / function essentially calls itself until some condition is met.  Recursion can be an elegant solution to some logic problems.  However, I believe there are some potential dangers in using recursion that should carefully be consider.  Recursion is not an impossible concept to grasp it is just one that takes some thought.  The skill level of those maintaining an application should be considered before implementing recursion as it is a more advanced programming concept and could lead to serious performance issues of not implement correctly. &lt;/p&gt;&lt;pre&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;namespace&lt;/span&gt; RecursionTest
{
    &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;class&lt;/span&gt; Program
    {
        &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;void&lt;/span&gt; Main(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;string&lt;/span&gt;[] args)
        {
               System.Console.WriteLine(calcFactorial(4));
               System.Console.ReadLine();	
         }


        &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;int&lt;/span&gt; calcFactorial(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;int&lt;/span&gt; n)
        {
            &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;return&lt;/span&gt; n &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;*&lt;/span&gt; calcFactorial(n &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;-&lt;/span&gt; 1);
        }

    }
}&lt;/pre&gt;
&lt;p&gt;Did you spot the bug in the code above? The code never stops when the factorial is complete resulting in an infinite loop.  To fix the code we need to add a simple constraint or check. &lt;/p&gt;&lt;pre&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;namespace&lt;/span&gt; RecursionTest
{
    &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;class&lt;/span&gt; Program
    {
        &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;void&lt;/span&gt; Main(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;string&lt;/span&gt;[] args)
        {
            Console.WriteLine(calcFactorial(4));
            Console.ReadLine();
        }


        &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;int&lt;/span&gt; calcFactorial(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;int&lt;/span&gt; n)
        {
            &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;if&lt;/span&gt; (n == 1)
            {
                &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;return&lt;/span&gt; 1;
            }
            &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;else&lt;/span&gt;
            {
                &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;return&lt;/span&gt; n &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;*&lt;/span&gt; calcFactorial(n &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;-&lt;/span&gt; 1);
            }
        }
    }
}&lt;/pre&gt;The recursive code above is very clean however as demonstrated it is easy to forget the constraint and introduce an infinite loop. I would also like to point out that from a performance standpoint recursion may not be the best choice.  It is often faster to use a looping structure where possible.  Finally, one must consider the impact recursion has on the managed stack in .NET.  Basically the deeper a thread's stack becomes the more difficult it becomes for the Garbage Collector to determine what should be collected and what is still in use.&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/69.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/07/10/thoughts-on-recursion.aspx</guid>
            <pubDate>Tue, 10 Jul 2007 10:45:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/69.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/07/10/thoughts-on-recursion.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/69.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/69.aspx</trackback:ping>
        </item>
        <item>
            <title>Office Business Applications Architecture Talk With Colin Cole</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/24/office-business-applications-architecture-talk-with-colin-cole.aspx</link>
            <description>&lt;p&gt;The following conversation is a conversation with Microsoft Financial Services Sr. Architect Colin Cole discussing Office Business Applications (OBA).  This is a new type of blog post for me and a &lt;a href="http://www.drowningintechnicaldebt.com/" mce_href="http://www.drowningintechnicaldebt.com/"&gt;Drowning In Technical Debt&lt;/a&gt; first.  I hope to conduct similar conversations in the future.  Finally, I would like to thank Colin for making time to have this conversation with me.&lt;br /&gt;&lt;br /&gt;dbottjer says: So I figured a good place to start would be with a definition.  What is OBA?  I did some research and here is what I came up with. Office Business Applications (OBA) use the Microsoft Office Suite of programs (Outlook, Word, Excel, etc) as a presentation layer for connecting line of business applications and executing business processes.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Cool, I have a few more things. &lt;br /&gt;&lt;br /&gt;dbottjer says: Ok great.&lt;br /&gt;&lt;br /&gt;Colin Cole says: OBA is kind of the centerpiece of what we call a "people ready" solution. &lt;br /&gt;&lt;br /&gt;Colin Cole says: It’s really about designing a solution to give the end user more control and agility to interact with the application.  Rather than having the IT defined screens with text boxes and validation. &lt;br /&gt;&lt;br /&gt;dbottjer says: The user has more control to personalize.&lt;br /&gt;&lt;br /&gt;Colin Cole says: You get instead something that brings data down to the tools you're familiar with (as you state), but also have server piece as well and that's where office server (SharePoint) comes in.  By exposing data through something like a SharePoint the business user can define their own reports bring the data down to a cube and open it up in excel.  Slice and Dice.  Create a dashboard. &lt;br /&gt;&lt;br /&gt;dbottjer says: Right&lt;br /&gt;&lt;br /&gt;Colin Cole says: Define their own KPI's.  Etc.  So like you state -- leveraging familiar tools, but also interacting with the solution data as appropriate for their role. &lt;br /&gt;&lt;br /&gt;dbottjer says: So this leads to the Problem. I thought that a good problem definition is: a fundamental inconsistency between how business systems work and how people work.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Agreed&lt;br /&gt;&lt;br /&gt;dbottjer says: Basically applications today are very rigid&lt;br /&gt;&lt;br /&gt;Colin Cole says: Absolutely, take an investment scenario for example.  The investor interacts with the canned application to analyze their portfolio.  But there's always 5-6 things they want to know to make business decisions that aren't available.  So what do they do?  They call IT and ask for a new report.  2 months later they get their report.  But by that time the need is totally different.  &lt;br /&gt;&lt;br /&gt;dbottjer says: Exactly.&lt;br /&gt;&lt;br /&gt;Colin Cole says: So the reality is they don't even bother....and just create their own one-off spreadsheets that aren't reused, etc.&lt;br /&gt;&lt;br /&gt;dbottjer says: So if they have an export feature they could export to Excel and do some quick processing there.&lt;br /&gt;&lt;br /&gt;dbottjer says: But that is an one-off.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Right.&lt;br /&gt;&lt;br /&gt;dbottjer says: So the idea of OBA is just to allow users to work in tools like Excel to begin with an augment excel with the missing services necessary for the problem domain.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Right, as well as interacting with dashboard/reporting type functionality bringing down tasks into Outlook, --like I showed you guys with our lending solution. Stuff like that.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;dbottjer says: I guess this leads us to why use OBA? OBA's offer a familiar interface – Most business users are familiar with at least one or more programs within the Microsoft Office Suite.  For example, Outlook is commonly used groupware that remains open throughout the business day on many corporate desktops.  It would seem like a win-win situation to take advantage of a program that users are already familiar with and that is running on their desktops.  Excel.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Exactly, why not plug a CRM tool into Outlook, since the sales folks are already familiar with the paradigm?&lt;br /&gt;&lt;br /&gt;dbottjer says: OBA integrates line of business applications such as Enterprise Resource Planning (ERP), Customer Relationship Management (CRM), and Supply Chain Management (SCM) in a presentation layer the user is already familiar with and productive in.  For example, a sales associate may depend heavily on Outlook to communicate with his/her clients.  The associate keeps To Do lists within Outlook and a calendar of all meetings.  Integrating the sales associate’s Outlook with CRM would centralize all the company’s customer information.  This would give the sales associate a place to add customer notes and perhaps a way to look up additional customer information such as support cases.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Exactly.&lt;br /&gt;&lt;br /&gt;dbottjer says: So it seems like an efficient model for developing line of business applications? &lt;br /&gt;&lt;br /&gt;Colin Cole says: Right, obviously not for everything, but some % of apps it's a better fit.&lt;br /&gt;&lt;br /&gt;dbottjer says: Something else I noticed is that OBA is a great reuse story. For example, to implement an OBA solution you use an office product like Word, Excel, Outlook, SharePoint, etc. You also can use existing web services. Furthermore, you use VSTO and .NET.&lt;br /&gt;&lt;br /&gt;Colin Cole says: InfoPath plays nicely as well.  Especially the server forms stuff.  Very cool, each InfoPath form can have C# Code Behind, just like aspx.  It makes for a simple model to build professional looking web pages.&lt;br /&gt;&lt;br /&gt;dbottjer says: So OBA is a culmination of technologies to provide a business solution designed for how people work. It seems like OBA's have the potential to have a big impact in the line of business application space. &lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/67.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/24/office-business-applications-architecture-talk-with-colin-cole.aspx</guid>
            <pubDate>Thu, 24 May 2007 23:27:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/67.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/24/office-business-applications-architecture-talk-with-colin-cole.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/67.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/67.aspx</trackback:ping>
        </item>
        <item>
            <title>.NET 2.0 FailFast Method</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/08/failfast-method.aspx</link>
            <description>&lt;p&gt;[Dave] copied me on an email a few months back from a colleauge regarding the FailFast method.  This method was added to the .NET 2.0 framework and basically terminates a process without executing the any application Try-Finally or finalizer code.  Additionally, this method creates a memory dump for your application and writes a log entry to the Windows Application Event Log.&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/62.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/08/failfast-method.aspx</guid>
            <pubDate>Wed, 09 May 2007 01:07:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/62.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/08/failfast-method.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/62.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/62.aspx</trackback:ping>
        </item>
        <item>
            <title>WPF Views for CAB</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/04/12/wpf-views-for-cab.aspx</link>
            <description>Found this project &lt;a href="http://www.codeplex.com/wpfcab"&gt;http://www.codeplex.com/wpfcab&lt;/a&gt; on codeplex.  It strives to add WPF Views to the CAB.  This solution doesn't use crossbow and isn't using interop with WinForms. &lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/56.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/04/12/wpf-views-for-cab.aspx</guid>
            <pubDate>Thu, 12 Apr 2007 09:39:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/56.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/04/12/wpf-views-for-cab.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/56.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/56.aspx</trackback:ping>
        </item>
        <item>
            <title>Delegate Timers In ASP.NET</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/02/27/delegate-timers-in-asp.net.aspx</link>
            <description>&lt;p&gt;Windows Services are similar to UNIX daemons. They are applications that start when Windows boots and continue running until Windows shuts down. A Windows Service might be used to implement a timer that continually polls a source looking for new data. When new data is found an import process might be kicked off. .NET has made developing Windows Services much easier than past methods. As mentioned above a Windows Service is an application and as such requires installation. In the remainder of this post I would like to propose an alternative to developing a Windows Services for cases when an ASP.NET Application has already been developed. Including code within the Global.ASAX of an ASP.NET application to replace the task a Windows Service would perform eliminates the need to deploy two separate applications. In a large corporate environment keeping deployments as simple as possible is generally a good idea. The following code demonstrates how a delegate based server side timer can be implemented within the Global.asax of an ASP.NET application. &lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;table style="BORDER-RIGHT: #e5e5e5 1px solid; BORDER-TOP: #e5e5e5 1px solid; BORDER-LEFT: #e5e5e5 1px solid; BORDER-BOTTOM: #e5e5e5 1px solid; BACKGROUND-COLOR: #f2f2f2" cellspacing="0" cellpadding="0" width="100%" border="0"&gt;
&lt;tbody&gt;
&lt;tr style="VERTICAL-ALIGN: top; LINE-HEIGHT: normal"&gt;
&lt;td style="WIDTH: 40px; TEXT-ALIGN: right"&gt;&lt;pre style="BORDER-RIGHT: #e7e7e7 1px solid; PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 11px; PADDING-BOTTOM: 2px; MARGIN: 0px; COLOR: gray; PADDING-TOP: 2px; FONT-FAMILY: courier new"&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;31&lt;br /&gt;32&lt;br /&gt;33&lt;br /&gt;34&lt;br /&gt;35&lt;br /&gt;36&lt;br /&gt;37&lt;br /&gt;38&lt;br /&gt;39&lt;br /&gt;40&lt;br /&gt;41&lt;br /&gt;42&lt;br /&gt;43&lt;br /&gt;44&lt;br /&gt;45&lt;br /&gt;46&lt;br /&gt;47&lt;br /&gt;48&lt;br /&gt;49&lt;br /&gt;50&lt;br /&gt;51&lt;br /&gt;52&lt;br /&gt;53&lt;br /&gt;54&lt;br /&gt;55&lt;br /&gt;56&lt;br /&gt;57&lt;br /&gt;58&lt;br /&gt;59&lt;br /&gt;60&lt;br /&gt;61&lt;br /&gt;62&lt;br /&gt;63&lt;br /&gt;64&lt;br /&gt;65&lt;br /&gt;66&lt;br /&gt;67&lt;br /&gt;68&lt;br /&gt;69&lt;br /&gt;70&lt;br /&gt;71&lt;br /&gt;72&lt;br /&gt;73&lt;br /&gt;74&lt;br /&gt;75&lt;br /&gt;76&lt;br /&gt;77&lt;br /&gt;78&lt;br /&gt;79&lt;br /&gt;80&lt;br /&gt;81&lt;br /&gt;82&lt;br /&gt;83&lt;br /&gt;84&lt;br /&gt;85&lt;br /&gt;86&lt;br /&gt; &lt;/pre&gt;&lt;/td&gt;
&lt;td&gt;&lt;pre style="PADDING-RIGHT: 2px; PADDING-LEFT: 8px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-TOP: 2px"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;using&lt;/span&gt; System.Collections.Specialized;&lt;br /&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;using&lt;/span&gt; System.Threading;&lt;br /&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;using&lt;/span&gt; AIS.Configuration;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;namespace&lt;/span&gt; AIS.Reporting&lt;br /&gt;{&lt;br /&gt;    &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/span&gt; partial &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;class&lt;/span&gt; Global : HttpApplication&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;#region&lt;/span&gt; Private Members&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/span&gt; ReportingService reportingService;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;int&lt;/span&gt; minutes &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; 1;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;static&lt;/span&gt; Timer reportTimer;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;int&lt;/span&gt; seconds &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; -1;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;bool&lt;/span&gt; enableReportProcessing;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;#region&lt;/span&gt; Methods: Timer&lt;br /&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;/// Creates the timer and sets the callback if it is enabled&lt;/span&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;void&lt;/span&gt; InitializeTimer()&lt;br /&gt;        {&lt;br /&gt;            NameValueCollection appSettings &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; DynamicConfigurationManager.AppSettings;&lt;br /&gt;            enableReportProcessing &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;bool&lt;/span&gt;.Parse(appSettings[&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"ReportTimerEnabled"&lt;/span&gt;]);&lt;br /&gt;            seconds &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;int&lt;/span&gt;.Parse(appSettings[&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"ReportTimerSecondsInterval"&lt;/span&gt;]);&lt;br /&gt;            AutoResetEvent autoEvent &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; AutoResetEvent(&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;false&lt;/span&gt;);&lt;br /&gt;            &lt;br /&gt;            &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (reportTimer == &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; enableReportProcessing)&lt;br /&gt;            {&lt;br /&gt;                reportTimer &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; Timer(&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; TimerCallback(reportTimer_Callback), autoEvent, Interval, Interval);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;/// Internal call back which is responsible for firing IJob.Execute()&lt;/span&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;/// &amp;lt;param name="state"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;void&lt;/span&gt; reportTimer_Callback(&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;object&lt;/span&gt; state)&lt;br /&gt;        {&lt;br /&gt;            ProcessReport();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;/pre&gt;&lt;pre style="PADDING-RIGHT: 2px; PADDING-LEFT: 8px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-TOP: 2px"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent" /&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;void&lt;/span&gt; ProcessReport()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (reportingService == &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                reportingService &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; ReportingService();&lt;br /&gt;            }&lt;br /&gt;                reportingService.ProcessReport();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;/pre&gt;&lt;pre style="PADDING-RIGHT: 2px; PADDING-LEFT: 8px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-TOP: 2px"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;        &lt;/span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;protected&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;int&lt;/span&gt; Interval&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (seconds &amp;gt; 0)&lt;br /&gt;                    &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; seconds &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; 1000;&lt;br /&gt;                &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; Minutes &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; 60000;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;#region&lt;/span&gt; Public Properities&lt;br /&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;int&lt;/span&gt; Minutes&lt;br /&gt;        {&lt;br /&gt;            get { &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; minutes; }&lt;br /&gt;            set { minutes &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;bool&lt;/span&gt; EnableReportProcessing&lt;br /&gt;        {&lt;br /&gt;            get { &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; enableReportProcessing; }&lt;br /&gt;            set { enableReportProcessing &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;/pre&gt;&lt;pre style="PADDING-RIGHT: 2px; PADDING-LEFT: 8px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-TOP: 2px"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;        public&lt;/span&gt; &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;bool&lt;/span&gt; IsRunningProcessReport&lt;br /&gt;        {&lt;br /&gt;            get { &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; isRunningProcessReport; }&lt;br /&gt;            set { isRunningProcessReport &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;void&lt;/span&gt; Application_Start(&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            InitializeTimer();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/52.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/02/27/delegate-timers-in-asp.net.aspx</guid>
            <pubDate>Tue, 27 Feb 2007 12:45:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/52.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/02/27/delegate-timers-in-asp.net.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/52.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/52.aspx</trackback:ping>
        </item>
        <item>
            <title>Visual Log Parser On Code Plex</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/02/23/visual-log-parser.aspx</link>
            <description>&lt;p&gt;Microsoft has a nifty command line utility known as Log Parser which can parse many common log file formats such as IIS, SMTP, and FTP logs.  I found this &lt;a href="http://www.codeplex.com/visuallogparser"&gt;http://www.codeplex.com/visuallogparser&lt;/a&gt; project on Code Plex which is a Smart Client front end to the Log Parser.  Visual Log Parser is a great way to query event logs, IIS Logs, etc.&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/51.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/02/23/visual-log-parser.aspx</guid>
            <pubDate>Fri, 23 Feb 2007 11:11:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/51.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/02/23/visual-log-parser.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/51.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/51.aspx</trackback:ping>
        </item>
    </channel>
</rss>