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

<channel>
	<title></title>
	<atom:link href="http://www.thycotic.com/blog.php" rel="self" type="application/rss+xml" />
	<link>http://www.thycotic.com</link>
	<description></description>
	<pubDate>Fri, 18 Apr 2008 22:47:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Secret Server on the Treo 700</title>
		<link>http://www.thycotic.com/secret-server-on-the-treo-700</link>
		<comments>http://www.thycotic.com/secret-server-on-the-treo-700#comments</comments>
		<pubDate>Fri, 18 Apr 2008 22:47:00 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[General Software Development]]></category>

		<category><![CDATA[ISV]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/04/18/secret-server-on-the-treo-700.aspx</guid>
		<description><![CDATA[ 
Secret Server has supported a &#8220;Mobile Edition&#8221; for over a year now but it is always tricky making sure that it works correctly on all devices.
Our approach was to bake mobile support into the base product (ASP.NET based) so it simply scales down to the capability of the device.&#160; That sounds simple but unfortunately [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/SecretServerontheTreo700_10824/image_2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 0px 0px; border-right-width: 0px" height="244" alt="image" src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/SecretServerontheTreo700_10824/image_thumb.png" width="173" align="left" border="0" /></a> </p>
<p>Secret Server has supported a &#8220;Mobile Edition&#8221; for over a year now but it is always tricky making sure that it works correctly on all devices.</p>
<p>Our approach was to bake mobile support into the base product (ASP.NET based) so it simply scales down to the capability of the device.&#160; That sounds simple but unfortunately it depends on making sure that functionality will work with all the limitations of various devices.</p>
<p>My own favorite BlackBerry 8820 does a reasonable job of helping me get to the password I need in emergencies but it is hardly a pleasant browsing experience.&#160; In fairness, no browsing on the device is particularly pleasant since it is slow, struggles with most layouts and has a small screen.&#160; That said, I love it dearly and browsing has never been a core requirement for me since email, contacts and calendar are definitely my most essential.</p>
<p>Today we had a customer ask about the Treo 700 so I tried out the emulator from the Palm website.&#160; It seems to work fine with Secret Server and I was able to browse around and access passwords.</p>
<p><strong>Do your web applications support mobile devices and if so how do you test them?</strong></p>
<p><strong></strong></p>
<p><em>Jonathan Cogley is the CEO and founder of Thycotic Software, a .NET consulting company and ISV in Washington DC.&#160; Our product, </em>Secret Server <em>is a <a href="http://thycotic.com/products_secretserver_overview.html">enterprise password manager</a> system for teams to secure their passwords.&#160; <strong>Is your team still storing passwords in Excel?</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/secret-server-on-the-treo-700/feed</wfw:commentRss>
		</item>
		<item>
		<title>A sign that you are no longer a startup.</title>
		<link>http://www.thycotic.com/a-sign-that-you-are-no-longer-a-startup</link>
		<comments>http://www.thycotic.com/a-sign-that-you-are-no-longer-a-startup#comments</comments>
		<pubDate>Fri, 11 Apr 2008 03:20:09 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[Fun]]></category>

		<category><![CDATA[General Software Development]]></category>

		<category><![CDATA[ISV]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/04/10/a-sign-that-you-are-no-longer-a-startup.aspx</guid>
		<description><![CDATA[
Ok, so it is a really bad pun.&#160; It is tough writing blog post titles sometimes.  
Anyway, we finally got a beautiful metallic official sign for our office after inhabiting our office space for almost two years.&#160; (Now if we could just do something about that door!).&#160; 
&#160;
&#160;
In our first office suite in Vienna [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/Asignthatyouarenolongerastartup_14827/100_0455.jpg"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="184" alt="100_0455" src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/Asignthatyouarenolongerastartup_14827/100_0455_thumb.jpg" width="244" align="left" border="0" /></a>
<p>Ok, so it is a really bad pun.&#160; It is tough writing blog post titles sometimes. <img src='http://www.thycotic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Anyway, we finally got a <a href="http://www.behrendsbronze.com/">beautiful metallic official sign</a> for our office after inhabiting our office space for almost two years.&#160; (Now if we could just do something about that door!).&#160; </p>
<p>&#160;</p>
<p>&#160;</p>
<p>In our first office suite in Vienna (VA) we had a good excuse for not having a sign since it was shared space and we weren&#8217;t allowed sign-age.</p>
<p>In our current space, we actually lasted almost two years with this paper sign.&#160; Not exactly glamorous but it did the job.</p>
<p><a href="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/Asignthatyouarenolongerastartup_14827/100_0453_1.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="100_0453" src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/Asignthatyouarenolongerastartup_14827/100_0453_thumb_1.jpg" width="244" border="0" /></a> </p>
<p>This got me thinking &#8230; when is the moment that you are no longer a startup?&#160; </p>
<p>A few facts about Thycotic&#8217;s beginnings:</p>
<ul>
<li>We were profitable from day one.</li>
<li>Our software development consulting business has always been a stable, profitable area.</li>
<li>On the product side, Secret Server is self funded, started small and has slowly built a solid customer base.</li>
<li>The company was officially formed in 1996 but only hired its first employee other than me in 2004.</li>
</ul>
<p><strong>So how do we identify a change from startup to mature company?      <br /></strong>(if it is has even really happened to us yet)</p>
<p>Could it be?</p>
<ul>
<li>The day you finally turn off the email that tells you when someone bought your product.</li>
<li>The day the founder can take more than one consecutive week of vacation.</li>
<li>The day you don&#8217;t know how many employees are in the company (this has already happened but that is just because I have a hard time figuring it out on the fly).</li>
<li>The day that the company hires someone the founder didn&#8217;t hire or even meet.</li>
<li>The day you walk by someone in the hall you have seen often but have no idea who they are.</li>
<li>The day you are bought out by some monster corporation. (assuming you want to be bought out &#8230; which we don&#8217;t)</li>
</ul>
<p><strong>What would you define as the tipping point?</strong>&#160; In the meantime, we are going to continue admiring our new sign. <img src='http://www.thycotic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#160;</p>
<p><em>Jonathan Cogley is the CEO and founder of Thycotic Software, a .NET consulting company and ISV in Washington DC.&#160; Our product, </em>Secret Server <em>is a <a href="http://thycotic.com/products_secretserver_overview.html">enterprise password manager</a> system for teams to secure their passwords.&#160; <strong>Is your team still storing passwords in Excel?</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/a-sign-that-you-are-no-longer-a-startup/feed</wfw:commentRss>
		</item>
		<item>
		<title>Code Camps this weekend!</title>
		<link>http://www.thycotic.com/code-camps-this-weekend</link>
		<comments>http://www.thycotic.com/code-camps-this-weekend#comments</comments>
		<pubDate>Fri, 11 Apr 2008 02:54:04 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[Code Camp]]></category>

		<category><![CDATA[General Software Development]]></category>

		<category><![CDATA[Refactoring]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/04/10/code-camps-this-weekend.aspx</guid>
		<description><![CDATA[ There are two code camps this weekend:

CMAP Code Camp in Maryland
Pittsburgh Code Camp in Pennsylvania

I will be speaking at the Pittsburgh Code Camp on Refactoring - a topic that is very dear to me.
Register now and come along to talk code.
&#160;
We are hiring!&#160; Do you want to write beautiful code in a Test Driven, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/CodeCampsthisweekend_14205/CodeCampLogo_2.png"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="53" alt="CodeCampLogo" src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/CodeCampsthisweekend_14205/CodeCampLogo_thumb.png" width="244" align="right" border="0" /></a> There are two code camps this weekend:</p>
<ul>
<li><a href="http://www.cmap-online.org/home/Code%20Camps/Default.aspx">CMAP Code Camp</a> in Maryland</li>
<li><a href="http://www.pghdotnet.org/CodeCamp/">Pittsburgh Code Camp</a> in Pennsylvania</li>
</ul>
<p>I will be speaking at the Pittsburgh Code Camp on <strong>Refactoring</strong> - a topic that is very dear to me.</p>
<p>Register now and come along to talk code.</p>
<p>&#160;</p>
<p><strong>We are hiring!&#160; Do you want to write beautiful code in a </strong><a href="http://www.thycotic.com/"><strong>Test Driven, Refactored, Agile .NET software company</strong></a><strong> in the heart of Washington DC and work on </strong><a href="http://thesecretserver.com/"><strong>cool products</strong></a><strong>?&#160; Take the <a href="http://www.thycotic.com/codetest.txt">code test</a> and send your resume along with why you want to join Thycotic to </strong><a href="mailto:tddjobs@thycotic.com"><strong>tddjobs@thycotic.com</strong></a><strong>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/code-camps-this-weekend/feed</wfw:commentRss>
		</item>
		<item>
		<title>When you apply for a job, read the job posting!</title>
		<link>http://www.thycotic.com/when-you-apply-for-a-job-read-the-job-posting</link>
		<comments>http://www.thycotic.com/when-you-apply-for-a-job-read-the-job-posting#comments</comments>
		<pubDate>Tue, 08 Apr 2008 02:48:00 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[General Software Development]]></category>

		<category><![CDATA[ISV]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/04/07/when-you-apply-for-a-job-read-the-job-posting.aspx</guid>
		<description><![CDATA[I am constantly amazed by the number of job candidates who apply for a position without reading the job posting. We are currently hiring for three positions: 

Agile .NET Developer
Agile .NET Developer Internship 
Graphics Designer

All three involve *doing* something in order to be considered for the position - for the developer positions it requires completing [...]]]></description>
			<content:encoded><![CDATA[<p>I am constantly amazed by the number of job candidates who apply for a position without reading the job posting. We are currently hiring for three positions: </p>
<ul>
<li>Agile .NET Developer</li>
<li>Agile .NET Developer Internship </li>
<li>Graphics Designer</li>
</ul>
<p>All three involve *doing* something in order to be considered for the position - for the developer positions it requires completing a code sample and sending it in with your resume. For the graphics designer position, it requires putting together a fun design and sending it in with resume.</p>
<p><a href="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/Whenyouapplyforajobreadthejobposting_14136/image_2.png" mce_href="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/Whenyouapplyforajobreadthejobposting_14136/image_2.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 0px 10px 0px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=150 alt=image src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/Whenyouapplyforajobreadthejobposting_14136/image_thumb.png" width=150 align=left border=0 mce_src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/Whenyouapplyforajobreadthejobposting_14136/image_thumb.png"></a> I have not kept accurate numbers (since we have run the postings for a while now with lots of applicants) but roughly 1 out 2 candidates for the developer positions and a whopping4 out of 5 candidates for the graphics designer position do not submit their design/code. If I receive 20 applications in two days and your application is canned and does not include the design/code - then guess what happens to yours? &#8230; it gets <strong><u>DELETED</u></strong>. Can you believe that there are many applicants who just send a resume without even a cover letter?</p>
<p>If you can&#8217;t bother to read a job posting, why do you expect someone else to bother reading your resume?</p>
<p>It is truly amazing that some people believe their resume alone will make them stand out - I imagine many companies don&#8217;t even open the resume if the applicant hasn&#8217;t met the requirements of the job posting - I know we don&#8217;t.</p>
<p>A job is an significant part of our lives and should be treated with importance.</p>
<p>When you next apply for a job:</p>
<ol>
<li>Read the job posting entirely.</li>
<li>Submit any additional samples/code as required.</li>
<li>Research the company, understand what they do and <u>why</u> you might want to work there.</li>
<li>Write a good cover letter explaining what you find interesting about the company, team or position.</li>
</ol>
<p>Take these simple steps and you will stand out.</p>
<p><strong>We are hiring! Do you want to write beautiful code in a </strong><a href="http://www.thycotic.com/" mce_href="http://www.thycotic.com"><strong>Test Driven, Refactored, Agile .NET software company</strong></a><strong> in the heart of Washington DC and work on </strong><a href="http://thesecretserver.com/" mce_href="http://thesecretserver.com"><strong>cool products</strong></a><strong>? Take the <a href="http://www.thycotic.com/codetest.txt" mce_href="http://www.thycotic.com/codetest.txt">code test</a> and send your resume along with why you want to join Thycotic to </strong><a href="mailto:tddjobs@thycotic.com" mce_href="mailto:tddjobs@thycotic.com"><strong>tddjobs@thycotic.com</strong></a><strong>. (don&#8217;t forget to read the job posting! :))</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/when-you-apply-for-a-job-read-the-job-posting/feed</wfw:commentRss>
		</item>
		<item>
		<title>Secret Server at FOSE 2008</title>
		<link>http://www.thycotic.com/secret-server-at-fose-2008</link>
		<comments>http://www.thycotic.com/secret-server-at-fose-2008#comments</comments>
		<pubDate>Fri, 04 Apr 2008 01:59:57 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[General Software Development]]></category>

		<category><![CDATA[ISV]]></category>

		<category><![CDATA[TechEd]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/04/03/secret-server-at-fose-2008.aspx</guid>
		<description><![CDATA[ We took the Secret Server booth to the FOSE 2008 Conference this week.&#160; FOSE is the largest IT event for US Government.&#160; It wasn&#8217;t really a very long trip for us &#8230; about 12 blocks east from our offices in Dupont Circle in Washington DC to the DC Convention Center.  
This was a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/SecretServeratFOSE2008_131D2/100_0447.jpg"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="184" alt="Jonathan, Dan, Ken and Kevin, Eddie (absent today)" src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/SecretServeratFOSE2008_131D2/100_0447_thumb.jpg" width="244" align="left" border="0" /></a> We took the Secret Server booth to the <a href="http://www.fose.com">FOSE 2008 Conference</a> this week.&#160; FOSE is the largest IT event for US Government.&#160; It wasn&#8217;t really a very long trip for us &#8230; about 12 blocks east from our offices in Dupont Circle in Washington DC to the DC Convention Center. <img src='http://www.thycotic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This was a very different conference for us since the audience varied widely in their roles compared to a conference such as Microsoft TechEd.&#160; We met lots of IT managers and also our core audience of System Administrators and Network Administrators.&#160; If you have an Excel spreadsheet of passwords that you share across your team &#8230; then Secret Server is a no brainer for you.</p>
<p>My favorite part of tradeshows is hearing where your product falls short and learning to better understand your customer&#8217;s needs.&#160; Secret Server has come a long way in the last year and most the requests we heard were already met within the product.</p>
<p>The next stop for the Secret Server booth will be the <a href="http://www.microsoft.com/events/teched2008/default.mspx">Microsoft TechEd 2008 Conference</a> (IT Pro week) in Orlando, Florida in June.&#160; If you are going, please stop by our booth to say hi.</p>
<p>&#160;</p>
<p><em>Jonathan Cogley is the CEO and founder of Thycotic Software, a .NET consulting company and ISV in Washington DC.&#160; Our product, </em>Secret Server <em>is a <a href="http://thycotic.com/products_secretserver_overview.html">enterprise password manager</a> system for teams to secure their passwords.&#160; <strong>Is your team still storing passwords in Excel?</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/secret-server-at-fose-2008/feed</wfw:commentRss>
		</item>
		<item>
		<title>Don&#8217;t miss the Nova Code Camp South this weekend!</title>
		<link>http://www.thycotic.com/don-t-miss-the-nova-code-camp-south-this-weekend</link>
		<comments>http://www.thycotic.com/don-t-miss-the-nova-code-camp-south-this-weekend#comments</comments>
		<pubDate>Fri, 28 Mar 2008 12:34:07 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Code Camp]]></category>

		<category><![CDATA[General Software Development]]></category>

		<category><![CDATA[Refactoring]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/03/28/don-t-miss-the-nova-code-camp-south-this-weekend.aspx</guid>
		<description><![CDATA[
The NoVa CodeCamp South v1 will be held on March 29th 2008 in Woodbridge VA.&#160; The speaker schedule has been posted here.
&#160;
I am presenting two sessions:
9:00-10:15:&#160;&#160;&#160;&#160; Refactoring in C#

1:00-2:15:&#160;&#160;&#160;&#160;&#160;&#160;&#160; Web Application Testing in Watin

Register now!

&#160;
We are hiring!&#160; Do you want to write beautiful code in a Test Driven, Refactored, Agile .NET software company in the [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 10px 0px 0px" height="188" src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/NoVaCodeCampSouthv1speakingschedulehasbe_14EE6/novacodecampsouth_2.jpg" width="150" align="left" /></p>
<p>The <a href="http://novacodecamp.org/">NoVa CodeCamp South v1</a> will be held on March 29th 2008 in Woodbridge VA.&#160; The speaker schedule has been posted <a href="http://novacodecamp.org/CodeCamps/NoVaCodeCampSouthv1/Sessions/tabid/140/Default.aspx">here</a>.</p>
<p>&#160;</p>
<p>I am presenting two sessions:</p>
<blockquote><p><strong>9:00-10:15:&#160;&#160;&#160;&#160; Refactoring in C#</strong></p>
</blockquote>
<p><strong>1:00-2:15:&#160;&#160;&#160;&#160;&#160;&#160;&#160; Web Application Testing in Watin</strong></p>
<p><strong></strong></p>
<p><a href="https://www.clicktoattend.com/invitation.aspx?code=125096"><strong>Register now</strong></a><strong>!</strong></p>
<p><strong></strong></p>
<p>&#160;</p>
<p><strong>We are hiring!&#160; Do you want to write beautiful code in a </strong><a href="http://www.thycotic.com"><strong>Test Driven, Refactored, Agile .NET software company</strong></a><strong> in the heart of Washington DC and work on </strong><a href="http://thesecretserver.com"><strong>cool products</strong></a><strong>?&#160; <br />Take the <a href="http://www.thycotic.com/codetest.txt">code test</a> and send your resume along with why you want to join Thycotic to </strong><a href="mailto:tddjobs@thycotic.com"><strong>tddjobs@thycotic.com</strong></a><strong>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/don-t-miss-the-nova-code-camp-south-this-weekend/feed</wfw:commentRss>
		</item>
		<item>
		<title>Can you find the bug in this code? (THE FIX)</title>
		<link>http://www.thycotic.com/can-you-find-the-bug-in-this-code-fixed</link>
		<comments>http://www.thycotic.com/can-you-find-the-bug-in-this-code-fixed#comments</comments>
		<pubDate>Wed, 26 Mar 2008 16:30:35 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Fun]]></category>

		<category><![CDATA[General Software Development]]></category>

		<category><![CDATA[Refactoring]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/03/26/can-you-find-the-bug-in-this-code-fixed.aspx</guid>
		<description><![CDATA[Thanks to everyone for contributing!&#160; It was really neat to read everyone&#8217;s ideas and see the discussion and review (talking about code is always fun!).&#160; Here is a summary of responses and the &#8220;fixed&#8221; code.&#160; 
If you are interested in the original problem, go here.
&#160;
@drakiula: The idea with the Response.Redirect is that it will stop [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to everyone for contributing!&#160; It was really neat to read everyone&#8217;s ideas and see the discussion and review (talking about code is always fun!).&#160; Here is a summary of responses and the &#8220;fixed&#8221; code.&#160; </p>
<p><strong>If you are interested in the original problem, </strong><a href="http://weblogs.asp.net/jcogley/archive/2008/03/25/can-you-find-the-bug-in-this-code.aspx"><strong>go here</strong></a><strong>.</strong></p>
<p>&#160;</p>
<p>@drakiula: The idea with the Response.Redirect is that it will stop processing so the else is not needed on line 23. </p>
<p>@JV: Yes, this code could definitely be refactored! <img src='http://www.thycotic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   <br />And your suggestion would squish the bug. </p>
<p>@rajbk: Nice. Yes, the ThreadAbortException is definitely part of the bug but I don&#8217;t think the Redirect(url, false) is the best way to go. </p>
<p>@Basgun: Changing line 17-23 as you suggest would make it cleaner but wouldn&#8217;t fix the bug. </p>
<p>@cibrax,Lee:&#160; Nice. Yes, the ThreadAbortException will cause the catch to fire everytime and redirect the user to the same page. </p>
<p>@Thomas Eyde: Nice. Yes, the refactoring into separate responsibilities would make it much cleaner and also would somewhat inadvertently fix the bug since the redirect would happen outside the catch. </p>
<p>@Zack Jones:&#160; Nice suggestions.&#160; Thanks! </p>
<p>@Hosam Kamel: Yes, good point - there are several ways those method calls could fail (lots of encryption and authentication done within them) so the catch is there as a simple default &#8220;then send them here&#8221;. </p>
<p><strong><u>Summary:</u></strong>    </p>
<p>If you call Response.Redirect(string) or Response.Redirect(string, true), it will throw a ThreadAbortException.&#160; So if you do the redirect inside a generic try/catch then your catch will fail everytime.&#160; As pointed out by several people above, the code could be refactored so the responsibilities are separated out - this means that the Redirect should probably only be done in one place which would mitigate the issue. </p>
<p>I was surprised to see that Response.Redirect throws this exception especially since this exception is not thrown up the Application_Error event so some &#8220;magic&#8221; must happen within ASP.NET to issue the HTTP location header but not allow the exception to continue as a real exception.&#160; This seems like a misuse of exceptions since a Response.Redirect is hardly an &#8220;exceptional&#8221; case and in many applications happens somewhere on every page!   <br />That said, it is reasonable to see how Microsoft uses this mechanism to prevent further execution in the page. </p>
<p>Either way, it is a good gotcha to remember! </p>
<p><strong><u>Here is the &#8220;fixed&#8221; code:</u></strong>&#160; (although this could still be seriously refactored)    </p>
<p>01: private void Page_Load(object sender, EventArgs e)   <br />02: {    <br />03: string redirectUrl = null;    <br />04: try </p>
<p>05: { </p>
<p>06:&#160;&#160;&#160;&#160; AuthenticationInfo authenticationInfo = GetAuthenticationInfo(Request.QueryString["t"]); </p>
<p>07:&#160;&#160;&#160;&#160; Authenticator authenticator = new Authenticator(new LoginProvider()); </p>
<p>08:&#160;&#160;&#160;&#160; AuthenticationStatus authenticationStatus = authenticator.Authenticate(authenticationInfo); </p>
<p>09:&#160;&#160;&#160;&#160; if (authenticationStatus.Authenticated) </p>
<p>10:&#160;&#160;&#160;&#160; { </p>
<p>11:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IUser user = </p>
<p>12:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; BLUser.Load(authenticationInfo.UserName, authenticationInfo.OrganizationCode, aut   <br />henticationInfo.DomainId); </p>
<p>13:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; user.SetNewSessionId(); </p>
<p>14:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; AuthenticationTokenParser authenticationTokenParser = new AuthenticationTokenParser(); </p>
<p>15:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; string authenticationToken = authenticationTokenParser.Create(user.UserName, user.OrganizationId, </p>
<p>user.DomainId); </p>
<p>16:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; FormsAuthentication.SetAuthCookie(authenticationToken, true); </p>
<p>04:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; redirectUrl = FormsAuthentication.GetRedirectUrl(authenticationToken, true); </p>
<p>04:&#160;&#160;&#160;&#160; } </p>
<p>16: } </p>
<p>17: catch </p>
<p>18: { </p>
<p>19:&#160;&#160;&#160;&#160; // If anything goes wrong (encryption error, etc) then just let it fall through to the redirect. </p>
<p>20: } </p>
<p>21: if (redirectUrl == null || redirectUrl.Trim().Length == 0) </p>
<p>22: { </p>
<p>23:&#160;&#160;&#160;&#160; redirectUrl = &#8220;~/Home.aspx&#8221;; </p>
<p>24: } </p>
<p>25: // NOTE: If you do the Redirect inside the try/catch it will get a ThreadAbortException! </p>
<p>26: Response.Redirect(redirectUrl, true); </p>
<p>27: } </p>
<p>&#160;</p>
<p><strong>We are hiring!&#160; Do you want to write beautiful code in a </strong><a href="http://www.thycotic.com"><strong>Test Driven, Refactored, Agile .NET software company</strong></a><strong> in the heart of Washington DC and work on </strong><a href="http://thesecretserver.com"><strong>cool products</strong></a><strong>?&#160; <br />Take the <a href="http://www.thycotic.com/codetest.txt">code test</a> and send your resume along with why you want to join Thycotic to </strong><a href="mailto:tddjobs@thycotic.com"><strong>tddjobs@thycotic.com</strong></a><strong>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/can-you-find-the-bug-in-this-code-fixed/feed</wfw:commentRss>
		</item>
		<item>
		<title>For once, not blogging wasn&#8217;t my fault</title>
		<link>http://www.thycotic.com/for-once-not-blogging-wasn-t-my-fault</link>
		<comments>http://www.thycotic.com/for-once-not-blogging-wasn-t-my-fault#comments</comments>
		<pubDate>Tue, 25 Mar 2008 12:09:35 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[Blogging]]></category>

		<category><![CDATA[Fun]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/03/25/for-once-not-blogging-wasn-t-my-fault.aspx</guid>
		<description><![CDATA[For the last couple of days, the weblogs.asp.net website has been unable to accept posts from Windows Live Writer.&#160; For the first time in the history of this blog, I can blame someone else for not posting.&#160; In fact, I even started queueing up draft blog posts!  
Kudos to the weblogs.asp.net team for fixing [...]]]></description>
			<content:encoded><![CDATA[<p>For the last couple of days, the weblogs.asp.net website has been unable to accept posts from Windows Live Writer.&#160; For the first time in the history of this blog, I can blame someone else for not posting.&#160; In fact, I even started queueing up draft blog posts! <img src='http://www.thycotic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Kudos to the weblogs.asp.net team for fixing the issue quickly.</p>
<p>&#160;</p>
<p><strong>We are hiring!&#160; Do you want to write beautiful code in a </strong><a href="http://www.thycotic.com"><strong>Test Driven, Refactored, Agile .NET software company</strong></a><strong> in the heart of Washington DC and work on </strong><a href="http://thesecretserver.com"><strong>cool products</strong></a><strong>?&#160; <br />Take the <a href="http://www.thycotic.com/codetest.txt">code test</a> and send your resume along with why you want to join Thycotic to </strong><a href="mailto:tddjobs@thycotic.com"><strong>tddjobs@thycotic.com</strong></a><strong>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/for-once-not-blogging-wasn-t-my-fault/feed</wfw:commentRss>
		</item>
		<item>
		<title>Can you find the bug in this code?</title>
		<link>http://www.thycotic.com/can-you-find-the-bug-in-this-code</link>
		<comments>http://www.thycotic.com/can-you-find-the-bug-in-this-code#comments</comments>
		<pubDate>Tue, 25 Mar 2008 12:04:28 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Fun]]></category>

		<category><![CDATA[General Software Development]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/03/25/can-you-find-the-bug-in-this-code.aspx</guid>
		<description><![CDATA[This is a real bug that I came across yesterday in some code I had written about a week before.&#160; I was a little surprised at the mechanics but it makes sense once you understand what is happening &#8230;

   1:  private void Foo()
   2:  {
   3:  [...]]]></description>
			<content:encoded><![CDATA[<p>This is a real bug that I came across yesterday in some code I had written about a week before.&#160; I was a little surprised at the mechanics but it makes sense once you understand what is happening &#8230;</p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span><span class="kwrd">private</span> <span class="kwrd">void</span> Foo()</pre>
<pre><span class="lnum">   2:  </span>{</pre>
<pre><span class="lnum">   3:  </span>    <span class="kwrd">try</span></pre>
<pre><span class="lnum">   4:  </span>    {</pre>
<pre><span class="lnum">   5:  </span>        AuthenticationInfo authenticationInfo = GetAuthenticationInfo(Request.QueryString[<span class="str">"t"</span>]);</pre>
<pre><span class="lnum">   6:  </span>        Authenticator authenticator = <span class="kwrd">new</span> Authenticator(<span class="kwrd">new</span> LoginProvider());</pre>
<pre><span class="lnum">   7:  </span>        AuthenticationStatus authenticationStatus = authenticator.Authenticate(authenticationInfo);</pre>
<pre><span class="lnum">   8:  </span>        <span class="kwrd">if</span> (authenticationStatus.Authenticated)</pre>
<pre><span class="lnum">   9:  </span>        {</pre>
<pre><span class="lnum">  10:  </span>            IUser user =</pre>
<pre><span class="lnum">  11:  </span>                BLUser.Load(authenticationInfo.UserName, authenticationInfo.OrganizationCode, authenticationInfo.DomainId);</pre>
<pre><span class="lnum">  12:  </span>            user.SetNewSessionId();</pre>
<pre><span class="lnum">  13:  </span>            AuthenticationTokenParser authenticationTokenParser = <span class="kwrd">new</span> AuthenticationTokenParser();</pre>
<pre><span class="lnum">  14:  </span>            <span class="kwrd">string</span> authenticationToken = authenticationTokenParser.Create(user.UserName, user.OrganizationId, user.DomainId);</pre>
<pre><span class="lnum">  15:  </span>            FormsAuthentication.SetAuthCookie(authenticationToken, <span class="kwrd">true</span>);</pre>
<pre><span class="lnum">  16:  </span>            <span class="kwrd">string</span> redirectUrl = FormsAuthentication.GetRedirectUrl(authenticationToken, <span class="kwrd">true</span>);</pre>
<pre><span class="lnum">  17:  </span>            <span class="kwrd">if</span> (redirectUrl == <span class="kwrd">null</span> || redirectUrl.Trim().Length == 0)</pre>
<pre><span class="lnum">  18:  </span>            {</pre>
<pre><span class="lnum">  19:  </span>                redirectUrl = <span class="str">&#8220;~/Home.aspx&#8221;</span>;</pre>
<pre><span class="lnum">  20:  </span>            }</pre>
<pre><span class="lnum">  21:  </span>            Response.Redirect(redirectUrl, <span class="kwrd">true</span>);</pre>
<pre><span class="lnum">  22:  </span>        }</pre>
<pre><span class="lnum">  23:  </span>        Response.Redirect(<span class="str">&#8220;~/Home.aspx&#8221;</span>);</pre>
<pre><span class="lnum">  24:  </span>    }</pre>
<pre><span class="lnum">  25:  </span>    <span class="kwrd">catch</span></pre>
<pre><span class="lnum">  26:  </span>    {</pre>
<pre><span class="lnum">  27:  </span>        Response.Redirect(<span class="str">&#8220;~/Home.aspx&#8221;</span>);</pre>
<pre><span class="lnum">  28:  </span>    }</pre>
<pre><span class="lnum">  29:  </span>}</pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>&#160;</p>
<p>I will post the answer soon if no-one gets it. <img src='http://www.thycotic.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#160;</p>
<p><em>Jonathan Cogley is the CEO and founder of Thycotic Software, a .NET consulting company and ISV in Washington DC.&#160; Our product, </em>Secret Server <em>is a <a href="http://thycotic.com/products_secretserver_overview.html">enterprise password manager</a> system for teams to secure their passwords.&#160; <strong>Is your team still storing passwords in a text file?</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/can-you-find-the-bug-in-this-code/feed</wfw:commentRss>
		</item>
		<item>
		<title>Learning from your Burn Down chart</title>
		<link>http://www.thycotic.com/learning-from-your-burn-down-chart</link>
		<comments>http://www.thycotic.com/learning-from-your-burn-down-chart#comments</comments>
		<pubDate>Tue, 18 Mar 2008 04:36:53 +0000</pubDate>
		<dc:creator>jcogley</dc:creator>
		
		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Extreme Programming]]></category>

		<category><![CDATA[General Software Development]]></category>

		<category><![CDATA[ISV]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">/jcogley/archive/2008/03/18/learning-from-your-burn-down-chart.aspx</guid>
		<description><![CDATA[ 
The chart to the left represents the Burn Down chart for the Secret Server 4.1 release which shipped on March 14th 2008.&#160; We have always shipped Secret Server on the published date (or in the early hours of morning the next day!) but this release pushed things a little too close for our liking.&#160; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/LearningfromyourBurnDownchart_8A1/image_6.png"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="169" alt="image" src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/LearningfromyourBurnDownchart_8A1/image_thumb_2.png" width="244" align="left" border="0" /></a> </p>
<p>The chart to the left represents the Burn Down chart for the <a href="http://www.thycotic.com">Secret Server 4.1</a> release which shipped on March 14th 2008.&#160; We have always shipped Secret Server on the published date (or in the early hours of morning the next day!) but this release pushed things a little too close for our liking.&#160; What was the problem?&#160; Did we take on too much?&#160; Did we trade off scope like we are supposed to?</p>
<p>Looking at the Burn Down we can see that our velocity was really low in the early stages of the release.&#160; This was mostly due to some support issues that drained our development resources and also some staff shuffling on projects which lead to inefficiencies.&#160; We were able to make up for this with a phenomenal increase in velocity in the final iterations.&#160; Unfortunately this was achieved by using more team resources to accomplish the tasks.&#160; While the increased velocity is good, it also means there was a greater rate of change in the codebase at a point where quality assurance was trying to stabilize the product.&#160; <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test Driven Development</a> certainly helps by allowing us to lean on our regression suite of tests but it is still not ideal.</p>
<p>So what went wrong?&#160; We will be having a recap meeting later this week to determine how to improve our planning for future releases. We need to get back on track to our usual release schedule where we are ready for the actual release days before the release date (not bad for a small team with frequent releases!).&#160; I think part of the problem was not planning properly for reducing scope.&#160; We left one of the larger features of the release until the end (the Role Based Security feature) - then we didn&#8217;t recognize that this feature could be thinned out to reduce scope but rather implemented most of the originally specified functionality.&#160; </p>
<p><a href="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/LearningfromyourBurnDownchart_8A1/image_8.png"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="84" alt="image" src="http://weblogs.asp.net/blogs/jcogley/WindowsLiveWriter/LearningfromyourBurnDownchart_8A1/image_thumb_3.png" width="93" align="left" border="0" /></a> </p>
<p>Typically our team cannot easily change resources (cost) since most team members are committed to projects and cannot easily shift responsibilities.&#160; We also can&#8217;t change the date since customers are expecting a release on a particular date because sales and support have been giving this date out for a few weeks.&#160; This only leaves scope as the final equalizer to make timely releases possible.&#160; In future, we will need to be more careful to ensure that scope can always still be reduced if necessary.</p>
<p><strong>What does your Burn Down Chart tell you?</strong></p>
<p>&#160;</p>
<p><strong>We are hiring!&#160; Do you want to write beautiful code in a </strong><a href="http://www.thycotic.com"><strong>Test Driven, Refactored, Agile .NET software company</strong></a><strong> in the heart of Washington DC and work on </strong><a href="http://thesecretserver.com"><strong>cool products</strong></a><strong>?&#160; <br />Take the <a href="http://www.thycotic.com/codetest.txt">code test</a> and send your resume along with why you want to join Thycotic to </strong><a href="mailto:tddjobs@thycotic.com"><strong>tddjobs@thycotic.com</strong></a><strong>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thycotic.com/learning-from-your-burn-down-chart/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
