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

<channel>
	<title>thomasnguyen.com &#187; secure vantage</title>
	<atom:link href="http://thomasnguyen.com/blog/tag/secure-vantage/feed/" rel="self" type="application/rss+xml" />
	<link>http://thomasnguyen.com/blog</link>
	<description>hi, i&#039;m tom</description>
	<lastBuildDate>Wed, 28 Mar 2012 13:46:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Setting the Right Expectations</title>
		<link>http://thomasnguyen.com/blog/2011/01/setting-the-right-expectations/</link>
		<comments>http://thomasnguyen.com/blog/2011/01/setting-the-right-expectations/#comments</comments>
		<pubDate>Sat, 01 Jan 2011 19:13:07 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[lesson learned]]></category>
		<category><![CDATA[secure vantage]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=311</guid>
		<description><![CDATA[I had a conversation a while back with a good old friend, Sonal, about how awesome Modern Family is and catching up with each other&#8217;s lives. It sparked a reason for me to share something that has been on my mind for quite some time, but could not figure out how to organize my thoughts. [...]]]></description>
			<content:encoded><![CDATA[<p>I had a conversation a while back with a good old friend, Sonal, about how awesome <a href="http://www.imdb.com/title/tt1442437/" target="_blank">Modern Family</a> is and catching up with each other&#8217;s lives. It sparked a reason for me to share something that has been on my mind for quite some time, but could not figure out how to organize my thoughts. With a little discussion with her and some time to <strike>sound</strike> <em>type out</em> my thoughts, here is the breakdown:</p>
<ol>
<li>Learning <strong>when</strong> to say, &#8220;no&#8221;</li>
<li>Learning <strong>how</strong> to say, &#8220;no&#8221;</li>
<li>Learning how to get them to say, &#8220;no,&#8221; even before you do</li>
</ol>
<p>Over the past six months, I&#8217;ve been learning a lot about setting the right expectations within the development team, with coworkers, and how it affects our customers.</p>
<h3>The Dark Past</h3>
<p>As discussed in my <a href="http://thomasnguyen.com/blog/2010/09/audit-manager-2010-released/" target="_blank">previous post</a>, we weren&#8217;t (until recently) in a position to make decisions to have a positive impact in our daily development lives. We knew about the &#8220;fire-of-the-day&#8221; that we had to take care of while interrupting our current work and just had to buffer enough time to make sure we got things done in time and sacrificing quality. Readjusting the project plan, timelines, priorities, and resources wasn&#8217;t a part of our process.</p>
<p>Something had to change.</p>
<h3>Saying, &#8220;NO&#8221;</h3>
<h4>1. Learning when to say, &#8220;no&#8221;</h4>
<p>I can&#8217;t remember the exact moment I started saying no, but can remember an incident that kind of shocked a coworker who wanted something done. It wasn&#8217;t because I didn&#8217;t want to work on it, I just had way too many other things on my plate and over-promising would end up burning me out or under-delivering. I just kept it simple and said, &#8220;no.&#8221;</p>
<h4>2. Learning how to say, &#8220;no&#8221;</h4>
<p>Saying &#8220;no&#8221; is kind of rough and a little pessimistic, so I&#8217;ve learned to defer work. There was a request to fix the Partner listing because one of the descriptions is wrong. The application based the list on an Excel sheet I was provided, so the only way it could be wrong is if someone gave me wrong information to display. It wouldn&#8217;t take long, but it would interrupt my current stream of thought if I worked on it immediately. I put the request in a list for me to do later.</p>
<p>I really didn&#8217;t say no directly, but I did learn that I could say no for the moment and defer the work to do later. Rather than dropping everything to put out the fire, I just made sure we were all aware of the other issues at hand and I would get to it later.</p>
<h4>3. Learning how to get them to say, &#8220;no,&#8221; even before you do</h4>
<p>There are two ways I&#8217;ve been able to do this. First, is to get you to prove to upper management that your task is more important that what I have to work on. The second way is for me to just point to my Kanban board and ask where the trade off can most effectively ensure no interruption to a previously promised delivery.</p>
<p>Usually the fire-of-the-day task isn&#8217;t important enough to bother upper management with the question, so they&#8217;re happy with just creating a ticket, assigning to me, and holding the responsibility of bringing up the task at the next iteration meeting.</p>
<p>Now, most of the time, I&#8217;m approached not whether to decided if a task can be done, but instead if the ticket someone created makes enough sense for me to look at later on. That is ultimately amazing!</p>
<h3>A Brighter Today</h3>
<p>There has been a complete 180 from what we were earlier this year and today. Significant enough that people open to change and progressive ideas like <a href="http://www.ted.com/talks/jason_fried_why_work_doesn_t_happen_at_work.html" target="_blank">Jason Fried</a>&#8216;s <a href="http://twitter.com/#!/jasonfried/statuses/9287664654098432" target="_blank">no-talk-Thursdays</a> (our are Tuesday and Thursday 8am-11am) which makes our development team very productive which and in the end it helps keeps the Sales/Marketing team honest.</p>
<p>The best part about making sure everyone is on the same page is the positive impact on customers. It gives potential/current customers a good time frame for features/bugs to be delivered and our close partners a good time frame for future products not yet on the market.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2011/01/setting-the-right-expectations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Audit Manager 2010 Released!</title>
		<link>http://thomasnguyen.com/blog/2010/09/audit-manager-2010-released/</link>
		<comments>http://thomasnguyen.com/blog/2010/09/audit-manager-2010-released/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 00:57:02 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=307</guid>
		<description><![CDATA[Just over one year ago, we released Security Auditing SP2. In the last few months of 2009, we were bug fixing and preparing a new product line to present at Microsoft Management Summit 2010. We were at a turning point for development and had a new direction to introduce a structured and formalized processes to [...]]]></description>
			<content:encoded><![CDATA[<p>Just over one year ago, we released <a href="http://thomasnguyen.com/blog/2009/08/security-auditing-sp2-released/" target="_blank">Security Auditing SP2</a>. In the last few months of 2009, we were bug fixing and preparing a new product line to present at <a href="http://www.mms-2010.com/public/home.aspx" target="_blank">Microsoft Management Summit 2010</a>. We were at a turning point for development and had a new direction to introduce a structured and formalized processes to help ensure a solid product delivery.</p>
<p>After a series of releases with this structured and formalized process, I&#8217;ve learned a lot of things that were quite obvious many other software development shops &#8211; I&#8217;ve read about them on many blogs and at <a href="http://altdotnet.org/" target="_blank">ALT.NET</a> events. The hardest part about software development isn&#8217;t the coding or testing. It&#8217;s <strong>finding the right process that fits not just the development team, but the entire company as a whole</strong>. From Sales and Marketing to Customer Support and all the way up to reporting to the investors, there has to be a good team chemistry.</p>
<p>I&#8217;ll highlight a couple things I&#8217;ve learned and things that I&#8217;m hoping to change in order to make sure we can attain a better team chemistry in the upcoming months and hopefully start 2011.</p>
<hr />
<h3>The Right Communication</h3>
<p>No communication is bad and when you&#8217;re working in silos it&#8217;s unbelievably horrible. Even worse is when everyone has their own &#8220;order of importance for communication.&#8221; Here is mine:</p>
<ol>
<li>Face to face</li>
<li>Yelling across the hall</li>
<li>Instant Message</li>
<li>Phone call</li>
<li>E-Mail</li>
<li>Voice Message</li>
<li>Snail Mail</li>
<li>Telepathy</li>
</ol>
<p>Oddly enough, this order also reflects my &#8220;response time&#8221;. The more crap you put between the communication, the longer you&#8217;d better expect to wait for a response from me. Telepathy is just something I&#8217;ve learned to ignore, hehe.</p>
<p><strong>Lesson learned?</strong> The best communication is an open communication. Sharing what was agreed upon with other key players is the best way to ensure understanding and maintain accountability.</p>
<h3>Lack-of and Over Documentation</h3>
<p>When I first started at Secure Vantage, I knew nothing about the requirements for documentation. I just happily went along developing what was asked for me to create and relied on myself for unit testing. It was great since the person QA testing my products sat literally next to me and gave me feedback pretty much immediately. The problem with this is solely due to lack of accounting for my hours and time dedicated to the project. It can be seen as a good thing or bad thing. It was all based on trust, honesty, and openness. </p>
<p>In Q3 of 2009, some changes in staff and management moved in the direction of a less flexible and more structured development process. The first problem we ran into that completely overwhelmed the team was documentation &#8211; something we&#8217;re all unfamiliar with, but still expected to deliver.</p>
<ul>
<li>Change Request Form</li>
<li>Requirements Intake Document</li>
<li>User Requirements</li>
<li>Product Definition Document</li>
<li>Data Analysis Document</li>
<li>Technical Analysis Document</li>
<li>High Level Solutions Document</li>
<li>Cost Estimate Worksheet</li>
<li>Risk Analysis Matrix</li>
<li>Quality Assurance Plan</li>
<li>System Infrastructure Requirements</li>
<li>Software Requirements Specifications</li>
<li>Interface Requirements Specification</li>
<li>Performance Requirements Specifications</li>
<li>Data Development Document</li>
<li>Software Development Plan</li>
<li>Marketing Communications Rollout Plan</li>
<li>Testing Plan Checklist</li>
<li>User Manuals</li>
<li>Project Assurance Signoff Letter</li>
<li>Change Log</li>
<li>Release Notes</li>
<li>Equipment Installation Plan</li>
<li>Deployment Rollout Plan</li>
<li>Support Plan</li>
</ul>
<p>Realistically, all these mean nothing if they aren&#8217;t discussed and reviewed. It&#8217;s great to present this list as something to do, but it is completely pointless if no one takes leadership and ownership of this ginormous list. It&#8217;s even worse if the person responsible for them delegates them without reviewing them once they&#8217;re done. After the first couple documents I created, it seemed like what I delivered was useless. It was quite frustrating &#8211; no one likes making something no one uses.</p>
<p>Looking back, I probably could have stood up and took ownership of these documents, but instead I was tasked to take more of a development lead role and left the documentation responsibilities in the back burner until someone actually reviewed documents I created. <strong>Bad idea</strong>.</p>
<p><strong>Lesson learned?</strong> If you see something wrong, don&#8217;t just push back and question it, <em>change</em> it. I failed to change something I saw  was wrong despite how much I voiced my opinions.</p>
<h3>Meetings Meetings Meetings</h3>
<p>First of all, I hate meetings. It&#8217;s not the concept of a meeting that I hate, it&#8217;s how most people make them: &#8220;Weekly Monday Meetings&#8221;, &#8220;Weekly Status Report Meeting&#8221;. I don&#8217;t believe in creating a meeting based on a recurring time unless each and every meeting has a proper agenda. Whether it&#8217;s a checklist of tasks, a document, an agreement on a decision, or even just a meeting to make sure everyone reviews and agrees on a priority list of work items that will go into the next release, <strong>they all have a resulting deliverable</strong>. </p>
<p>Holding a <em>productive meeting</em> is hard when one of the ten topics goes on a tangent or when you waste 10 minutes waiting for everyone to join because they haven&#8217;t installed the GoToMeeting software on a new machine. Sometimes pushing off side topics for another discussion is necessary to ensure the current list of topics isn&#8217;t forgotten. It prevents the meeting from lasting, what feels like, FOREVER.</p>
<p>Here is my recent favorite article on meetings: <a href="http://www.randsinrepose.com/archives/2010/08/19/how_to_run_a_meeting.html" target="_blank">How to Run a Meeting</a>, by <em>Rands in Repose</em>.</p>
<p><strong>Lesson learned?</strong> If there isn&#8217;t an agenda for a meeting that you&#8217;re required to attend, ask for one when it starts. It will help prevent it from getting sidetracked and in some cases you&#8217;ll find there isn&#8217;t one. If this is the case, you&#8217;ll be able to go back to getting shit done instead of just talking about it.</p>
<hr />
<p>Things aren&#8217;t going quite as I wanted or expected, so you might ask me why am I still here? (A lot of my friends have.) It&#8217;s plain and simple &#8211; I&#8217;ve changed my mentality from, &#8220;<em>follow the rules, hierarchy, and follow the more experienced</em>&#8221; to &#8220;<em>I don&#8217;t give a fuck, I&#8217;m going to do what I think is right unless you can prove me wrong</em>.&#8221; Cocky huh? Yeah, I admit, it&#8217;s pretty ballsy and out of my character, but I can&#8217;t just sit around and watch it fall apart.</p>
<p>I wouldn&#8217;t say it&#8217;s a rebellious move, but instead a determination to help make the Development Team&#8217;s environment better and later down the road a better company as a whole. I&#8217;m hoping to not just learn from the experienced colleagues, but also teach them some new tricks. </p>
<p>It&#8217;s been a couple months now since I&#8217;ve had this mentality and I can confidently say that here at SVT, we&#8217;re getting much better &#8211; proper communication, just enough documentation, and productive meetings. It hasn&#8217;t just reflected in the Development Team alone, but with the Sales Team and Customer Support Team too. Everyone, including our CEO, has seen such a drastic and positive change, <strong>YAY</strong>!</p>
<p>We&#8217;re currently winding down our first really successful iteration and things are going really great! I&#8217;m finding myself looking forward to going to work again, excited to see what we can accomplish at each day&#8217;s end. </p>
<p>The one big thing for us to fix is the epic battle between creating new products and features versus maintaining our old ones with limited development resources. If it were my choice, I&#8217;d follow <a href="http://www.joelonsoftware.com/articles/fog0000000043.html" target="_blank">The Joel Test</a> for being a successful software team: fix bugs first.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2010/09/audit-manager-2010-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patching Virtual Machines Tip</title>
		<link>http://thomasnguyen.com/blog/2010/06/reverting-checkpoints-for-you-virtual-machine/</link>
		<comments>http://thomasnguyen.com/blog/2010/06/reverting-checkpoints-for-you-virtual-machine/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 19:11:35 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[secure vantage]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=297</guid>
		<description><![CDATA[To manage our virtual machines we use Virtual Machine Manager 2008 R2. I have trouble logging into my VM after doing just a couple reverts to checkpoints. The machine drops trusts to the domain, so it won&#8217;t let me log in with my domain account, boo. Here&#8217;s how to avoid it. Thanks, Kevin. For these [...]]]></description>
			<content:encoded><![CDATA[<p>To manage our virtual machines we use Virtual Machine Manager 2008 R2.</p>
<p>I have trouble logging into my VM after doing just a couple reverts to checkpoints. The machine drops trusts to the domain, so it won&#8217;t let me log in with my domain account, boo.</p>
<p>Here&#8217;s how to avoid it. Thanks, <a href="http://k5wtf.blogspot.com/" target="_blank">Kevin</a>.</p>
<hr />
For these steps, log in with a local administrator account:</p>
<h3>Step 1</h3>
<p>Set the registry key below:<br />
<code>HKEY_LOCAL_MACHINES\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters DisablePasswordChange REG_DWORD 1</code><br />
(Reboot and add new Checkpoint A)</p>
<h3>Step 2</h3>
<p>Rejoin the domain<br />
(Reboot and add new Checkpoint B)</p>
<h3>Step 3</h3>
<p>Run all the important Windows Updates<br />
(Reboot and add Checkpoint C)</p>
<p>Step 4: Remove Checkpoints A and B</p>
<hr />
<p>(I hate patching virtual machines&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2010/06/reverting-checkpoints-for-you-virtual-machine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Martin Fowler, a Software Development Soothsayer</title>
		<link>http://thomasnguyen.com/blog/2010/02/martin-fowler-a-software-development-soothsayer/</link>
		<comments>http://thomasnguyen.com/blog/2010/02/martin-fowler-a-software-development-soothsayer/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 07:40:54 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[austin]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=273</guid>
		<description><![CDATA[&#8220;What Agile really means to the future of software development&#8220; Martin will call upon his more than 20 years of software industry experience to talk about how the history of the software also serves as a roadmap for what to expect in the future. Martin had three very drastically different mini talks rather than a [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>&#8220;<a href="http://connect.thoughtworks.com/austinevents/" target="_blank">What Agile really means to the future of software development</a>&#8220;</em><br />
Martin will call upon his more than 20 years of software industry experience to talk about how the history of the software also serves as a roadmap for what to expect in the future.
</p></blockquote>
<p>Martin had three very drastically different mini talks rather than a single long presentation. I really liked this approach since it helped keep my short attention span.</p>
<p><strong>I. Continuous Integration and Continuous Deployment</strong><br />
His presentation comparing Feature Branching and  Continuous Integration was just a regurjitation from his <a href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank">older articles</a>, discussions from other presenters at other events, and a <a href="http://amzn.com/0321336380" target="_blank">book he recommended</a> by Paul M. Duvall. I won&#8217;t bore you with it. </p>
<p>Something that caught my eye was Continuous Deployment and what he called the &#8220;<em>build pipeline</em>.&#8221; He had an awesome flowchart/diagram to explain this, but I&#8217;ll try and do it with a list. I&#8217;ll include the tools I currently use in our development environment at work, if they apply.</p>
<ul>
<li><strong>Commit Task</strong> &#8211; usually kicks off a full build of the main stream on a build server, not a local machine
<ul>
<li>Compile: Visual Studio</li>
<li>Tests: NUnit</li>
<li>Assemble: NAnt</li>
<li>Code Analysis: NCover and FxCop</li>
</ul>
</li>
<li><strong>Artifact Repository</strong> &#8211; this can be a file share to maintain each build version from the Commit task above
<ul>
<li>Binaries: CruiseControl.NET</li>
<li>Reports: NUnit, NCover, and FxCop</li>
<li>Metadata: I have no idea what this is, any ideas?</li>
</ul>
</li>
<li><strong>Acceptance Task</strong> &#8211; of a specific version in the Artifact Repository
<ul>
<li>Configure Environment</li>
<li>Deploy Binaries</li>
<li>Smoke Test</li>
<li>Acceptance Tests (customer focused)</li>
</ul>
</li>
<li><strong>Performance Task</strong> &#8211; of a specific version in the Artifact Repository
<ul>
<li>Configure Environment</li>
<li>Deploy Binaries</li>
<li>Smoke Test</li>
<li>Performance Tests</li>
</ul>
</li>
<li><strong>Deploy Task</strong> &#8211; of a specific version in the Artifact Repository
<ul>
<li>Configure Environment</li>
<li>Deploy Binaries</li>
<li>Smoke Test</li>
<li>Run</li>
</ul>
</li>
</ul>
<p>I&#8217;ve got the Commit Task and Artifact Repository down to a science at my job and it&#8217;s a good reassurance that I&#8217;m doing this right! I&#8217;m going to see what it&#8217;s going to take to get the rest of the &#8220;<em>build pipeline</em>&#8221; implemented. I&#8217;ll also see if <a href="http://www.thoughtworks-studios.com/cruise-release-management" target="_blank">Cruise</a> is something that will work for us.</p>
<p>I already have so many books I&#8217;ve started reading and not finished, but Martin recommended another interesting one that&#8217;s still classified as a &#8220;Rough Cut&#8221;: <a href="http://my.safaribooksonline.com/9780321670250" target="_blank">Continuous Delivery</a> by Dave Farley &amp; Jez Humble.</p>
<p><strong>II. Domain Specific Languages</strong><br />
I forgot my Hydrocodone in the car and my right-bottom part of my mouth was throbbing. The last time I took a pill was lunch and it&#8217;s been the longest stretch. I was a little distracted by that, so sorry for the significantly reduced notes. </p>
<p>Martin had an awesome explanation (<a href="http://martinfowler.com/dslwip/" target="_blank">in his book</a>) about how to get from code configuration to XML configuration and then finally to a DSL configuration represented in Ruby. SO CLEAN! I really need to finish reading my books instead of starting new ones.</p>
<blockquote><p>&#8220;XML is like violence. If it&#8217;s not working, you&#8217;re not using enough.&#8221;</p></blockquote>
<p>Martin as also quite impressed about the possibilities of DSLs and the impact of <a href="http://martinfowler.com/bliki/LanguageWorkbench.html" target="_blank">Language Workbenches</a>. He recommended us to watch <a href="http://msdn.microsoft.com/en-us/data/dd727740.aspx" target="_blank">this video</a> from <a href="http://intentsoft.com/" target="_blank">Intentional Software</a>. </p>
<blockquote><p>&#8220;If you try to solve a problem with regular expressions, you end up with two problems&#8221;</p></blockquote>
<p><strong>III. <em>Controversial Topic</em>: Diversity, Women &amp; African American in Software Development</strong><br />
Although there were no slides, I didn&#8217;t really like this talk and I found it quite inappropriate. It is definitely a heated topic and should be discussed, but I don&#8217;t think this is the right forum. I&#8217;ll leave this topic alone.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2010/02/martin-fowler-a-software-development-soothsayer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deny Yourself Access to a Domain Name.</title>
		<link>http://thomasnguyen.com/blog/2009/11/deny-yourself-access-to-a-domain-name/</link>
		<comments>http://thomasnguyen.com/blog/2009/11/deny-yourself-access-to-a-domain-name/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 17:01:00 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=253</guid>
		<description><![CDATA[Well, why the hell would I want to do that? We&#8217;re moving our hosting to a new hosting provider and just to make sure we don&#8217;t have any absolute URL paths, we want to blackhole ourselves from that domain. With some instructions from Kevin, here&#8217;s what we did:Add one line: 0.0.0.0 www.securevantage.com securevantage.com Yeah, that&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Well, why the hell would I want to do that?</p>
<p>We&#8217;re moving our hosting to a new hosting provider and just to make sure we don&#8217;t have any absolute URL paths, we want to blackhole ourselves from that domain.</p>
<p>With some instructions from <a href="http://k5wtf.blogspot.com/" target="_blank">Kevin</a>, here&#8217;s what we did:Add one line:</p>
<div class="lab_comment1">0.0.0.0 www.securevantage.com securevantage.com</div>
<p>Yeah, that&#8217;s it. Now my local machine goes to a blackhole when accessing the domains above. Awesome. Let the testing begin!</p>
<p>Pretty cool stuff. I just need to remember how to remove it after all this, that&#8217;s why I really posted this.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2009/11/deny-yourself-access-to-a-domain-name/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update Version Number in a File.</title>
		<link>http://thomasnguyen.com/blog/2009/09/update-version-number-in-a-file/</link>
		<comments>http://thomasnguyen.com/blog/2009/09/update-version-number-in-a-file/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 16:42:00 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[nant]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=251</guid>
		<description><![CDATA[No, not an AssemblyInfo.cs file, that&#8217;s really straightforward. C&#8217;mon it&#8217;s a task that does what it says, easy. Something I was trying to do is update the version number in, for all simple purposes, a text file &#8211; something that&#8217;s not xmlpoke-able. So I have the property ready to go and the file I want [...]]]></description>
			<content:encoded><![CDATA[<p>No, not an AssemblyInfo.cs file, that&#8217;s really <a href="http://nant.sourceforge.net/release/0.85/help/tasks/asminfo.html" target="_blank">straightforward</a>. C&#8217;mon it&#8217;s a task that does what it says, easy.</p>
<p>Something I was trying to do is update the version number in, for all simple purposes, a text file &#8211; something that&#8217;s not <a href="http://nant.sourceforge.net/release/0.85/help/tasks/xmlpoke.html" target="_blank">xmlpoke</a>-able. So I have the property ready to go and the file I want to update!</p>
<p>My first thoughts were to use the <a href="http://nant.sourceforge.net/release/0.85/help/tasks/loadfile.html" target="_blank">loadfile</a> to get the file into a property and replace it with the version.</p>
<div class="lab_comment1">&lt;loadfile file=&#8221;some.txt&#8221; property=&#8221;token-file&#8221;&gt;</p>
<div class="lab_commentBlock">&lt;filterchain&gt;</p>
<div class="lab_commentBlock">&lt;replacetokens&gt;</p>
<div class="lab_commentBlock">&lt;token key=&#8221;VERSION&#8221; value=&#8221;${version}&#8221; /&gt;</div>
<p>&lt;/replacetokens&gt;</p>
</div>
<p>&lt;/filterchain&gt;</p>
</div>
<p>&lt;/loadfile&gt;</p>
</div>
<p>Awesome, just like the sample and it echos out just fine&#8230;so now, how do I save my changes? After some digging around, I looked into the <a href="http://nant.sourceforge.net/release/0.85/help/types/filterchain.html" target="_blank">filterchain</a> and read up on the <a href="http://nant.sourceforge.net/release/0.85/help/tasks/copy.html" target="_blank">copy</a> task.</p>
<p>Seriously, copying a file now has the ability to modify the internals? <em>Does not compute!</em> Maybe copy, <em>then</em> modify. Anyway, its works now, so I can&#8217;t really complain anymore besides the hassle of finding the right task to do the job.</p>
<div class="lab_comment1">&lt;copy file=&#8221;some-template.txt&#8221; tofile=&#8221;some.txt&#8221;&gt;</p>
<div class="lab_commentBlock">&lt;filterchain&gt;</p>
<div class="lab_commentBlock">&lt;replacetokens&gt;</p>
<div class="lab_commentBlock">&lt;token key=&#8221;VERSION&#8221; value=&#8221;${version}&#8221; /&gt;</div>
<p>&lt;/replacetokens&gt;</p>
</div>
<p>&lt;/filterchain&gt;</p>
</div>
<p>&lt;/copy&gt;</p>
</div>
<p>Now I know why <a href="http://www.jamesthigpen.com/" target="_blank">James</a> keeps telling me to get out of the XML HELL. Coding tasks in XML is just ass backwards.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2009/09/update-version-number-in-a-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security Auditing SP2 Released</title>
		<link>http://thomasnguyen.com/blog/2009/08/security-auditing-sp2-released/</link>
		<comments>http://thomasnguyen.com/blog/2009/08/security-auditing-sp2-released/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 02:54:00 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=249</guid>
		<description><![CDATA[This is a huge milestone for my career as a software developer. Not because I’m finally releasing code for customers to use in production, but I’ve also been able to introduce some new shiny toys to the development team over the past few years. Since the day I started to what we call our “biggest [...]]]></description>
			<content:encoded><![CDATA[<p>This is a huge milestone for my career as a software developer. Not because I’m finally releasing code for customers to use in production, but I’ve also been able to introduce some new shiny toys to the development team over the past few years. Since the day I started to what we call our “biggest and most complete [release] that we have done to date at Secure Vantage,” we&#8217;ve been introduced to a few tools:</p>
<ul>
<li>Source control – Subversion
<ul>
<li>TortoiseSVN</li>
<li>VisualSVN/AnkhSVN</li>
</ul>
</li>
<li>Continuous Integration – CCNet
<ul>
<li>Build automation</li>
<li>Test automation</li>
<li>Package automation</li>
</ul>
</li>
<li>Bug and Feature Tracker – Mantis
<ul>
<li>Notified using RSS in Outlook</li>
</ul>
</li>
</ul>
<p>You might be thinking, <i>shouldn’t every successful software development team already have this in place to start with?</i> Well, we didn’t and I made it a point to get it setup before I got too deep into code. Now, some of you might be wondering what we used before, but I&#8217;ll leave that to the previous development team to answer that. I joined the team on a green-field development project, most of which is the only C# we have. I was able to introduce new tools in order to help me track my progress and deliver products with confidence. Now, everyone on the development team is onboard with these tools.</p>
<div class="aside">As for Subversion since I have a vivid memory of a project in a Software Engineering course: <a href="http://www2.cs.uh.edu/~svenkat/spring2005SE/project/">Foozy</a>, Team Foo. The project went very well, it worked during the demo and we had it well documented and even added a CD cover with a picture of everyone on the team. After the demo, we sat down with to discuss our process. I didn’t think of it much at the time, but process, tools, and techniques are king! He asked us what we used for source control and I completely freaked. We passed our code around on a USB stick and in his class we learned about all the source control tools available to us. I pulled the USB stick from my pocket and showed him, this is what we used. He definitely didn’t find it as amusing as I did. </div>
<p>Now, if you don&#8217;t know, I took a few courses from Venkat Subramanium, a pretty well known polyglot in the software development world, and I learned a lot about software development, best practices, and even picked up a few books just because of him. Who knew we have such a great asset at the University of Houston? GO COOGS! Anyway, I made it a point to use <i>process, tools, and techniques</i> I learned from his classes for the rest of my software development career.</p>
<p>Since then, and even more so while working at Secure Vantage, I&#8217;ve got pretty anal with software development. Especially about doing things the right way versus just getting things done, but it&#8217;s hard when we as a team have committed to a delivery date. I just follow that cost-quality-time triangle thing (what&#8217;s that called again?) and guess what always gets dropped first. I think I&#8217;ve been able to counteract that out with the <a href="http://en.wikipedia.org/wiki/Pareto_principle" target="_blank">Pareto Principle</a>. On top of that, in the last few weeks I&#8217;ve been able to knock out a lot of those bugs put in the backburner to get where we&#8217;re at today. =)</p>
<p>So that’s cool, but what’s next for me? I definitely know I’m nowhere near complete. I’m going to have to start figuring out a way to manage the branching strategy, but I&#8217;m reading and hearing about so many different things it&#8217;s so overwhelming. For now, I&#8217;m just going to try my best and keep things as simple as possible. This is a new frontier for me, and I hope I&#8217;m ready for it. I need to get back to reading blogs, articles, and books again. I&#8217;ve fallen off that boat for far too long.</p>
<p>Oh, and today is my half-birthday!</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2009/08/security-auditing-sp2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MMS 2009: Round Two.</title>
		<link>http://thomasnguyen.com/blog/2009/04/mms-2009-round-two/</link>
		<comments>http://thomasnguyen.com/blog/2009/04/mms-2009-round-two/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 15:35:00 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[las vegas]]></category>
		<category><![CDATA[mms]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=244</guid>
		<description><![CDATA[I had the great opportunity to attend the Microsoft Management Summit this year. Unlike last year, this year I&#8217;m staying at the Venetian, rather than the MGM. My experience with this kind of event comes with much hesitance for me. I&#8217;m uncomfortable in an environment with a throng of people. Here&#8217;s a crazy fact about [...]]]></description>
			<content:encoded><![CDATA[<p>I had the great opportunity to attend the <a href="https://www1.mms-2009.com/" target="_blank">Microsoft Management Summit</a> this year. Unlike <a href="http://www.thomasnguyen.com/blog/2008/05/mms2008-las-vegas-nv.html" target="_blank">last year</a>, this year I&#8217;m staying at the Venetian, rather than the MGM.</p>
<p>My experience with this kind of event comes with much hesitance for me. I&#8217;m uncomfortable in an environment with a throng of people. Here&#8217;s a crazy fact about me: I learned the word &#8220;throng&#8221; from when I read <a href="http://books.google.com/books?id=2ksS0EimvrYC&amp;printsec=frontcover&amp;dq=scarlet+letter" target="_blank">Scarlet Letter</a>. Many people in this case is about 2,500 people at booths and wandering around trying to sell stuff and ask for advice. It&#8217;s a sales thing, but the reason I&#8217;m going is for the sessions and to challenge my fears. I&#8217;m here to soak in all the information about new features as well as upcoming features for System Center Operations Manager (SCOM) and put myself in front of potential clients or just casual inquirers about our product line.</p>
<p><b>[Saturday]</b><br />I woke up in a mad dash to finish up washing clothes and packing. My flight was at 2:35 PM and I&#8217;m running around like crazy to get my things ready. After my last round of dried clothes are laid out on my bed, I make sure I have everything again and just in time to leave the house to head to the airport. I hate being a procrastinator.</p>
<p>Any way, I land, grab a little snack and met up with Kevin to wander around the strip. We picked up some drinks and checked out the Mirage&#8217;s new Volcano show. It&#8217;s freaking awesome. After little debating, we went to Wolfgang Puck. Everything was just freaking awesome.</p>
<table>
<tr>
<td><a href="http://www.flickr.com/photos/thomasnguyencom/3477261203/" title="Wolfgang Puck. by thomasnguyencom, on Flickr"><img src="http://farm4.static.flickr.com/3316/3477261203_f8febdc540_t.jpg" width="100" height="75" alt="Wolfgang Puck." /></a></td>
<td><a href="http://www.flickr.com/photos/thomasnguyencom/3478068286/" title="Crab Cakes. by thomasnguyencom, on Flickr"><img src="http://farm4.static.flickr.com/3577/3478068286_605f40b65c_t.jpg" width="100" height="75" alt="Crab Cakes." /></a></td>
<td><a href="http://www.flickr.com/photos/thomasnguyencom/3477261297/" title="Popcorn Shrimp. by thomasnguyencom, on Flickr"><img src="http://farm4.static.flickr.com/3580/3477261297_d5b53ae06a_t.jpg" width="100" height="75" alt="Popcorn Shrimp." /></a></td>
</tr>
</table>
<p><b>[Sunday]</b><br />
<table>
<tr>
<td valign="top">Work day. Enough said. The server room was in the bowels of the Venetian. After finding the command center, we went through a backdoor, downstairs to an elevator. After hopping off, we walked down through what looked like a service hallway. There was a door that required a key and that&#8217;s where we were, <i>Floor .5</i>. The Server room. Well after setting up our products to monitor the show&#8217;s network, I was eager to find a television to watch the Rockets play. We went to the AquaKnox and I sat myself directly in view of the game, awesome. it was the 4th quarter and all of the sudden everyone is standing up&#8230;NO!!! Well, good thing we just walked next door to some restaurant. We made a pitstop at the circle bar which is our typical meeting spot. Lavo was our last it stop for the night and for good reason. Waking up at 8:30 AM was not exciting. Thanks Coffee and Advil. Thanks a million.</td>
<td valign="top"><a href="http://www.flickr.com/photos/thomasnguyencom/3478068362/" title="Yes, we were at half a floor. by thomasnguyencom, on Flickr"><img src="http://farm4.static.flickr.com/3366/3478068362_b2d9a78b96_t.jpg" width="100" height="75" alt="Yes, we were at half a floor." /></a></td>
</tr>
</table>
<p><b>[Monday]</b><br />
<table>
<tr>
<td valign="top">I felt really queasy all day, but manageable. Before the Expo opened, we went to Grand Lux Cafe for small bite to eat. I had a small salad and maybe three spoonfuls of soup. Food wasn&#8217;t making me happy. The Expo was great, but like I said before this was something completely out of my comfort zone. Talking to wanderers who wanted to know general knowledge was nice, but the most fun was talking to the guys who wanted to know more about the product I actually develop. After the Expo closed, we went off to grab dinner at Pinot Brasserie. I was ready to pass out from hunger. By all means, I took care of the hunger.</td>
<td valign="top"><a href="http://www.flickr.com/photos/thomasnguyencom/3482773659/" title="Surf n Turf! by thomasnguyencom, on Flickr"><img src="http://farm4.static.flickr.com/3663/3482773659_980c44e7bb_t.jpg" width="100" height="75" alt="Surf n Turf!" /></a></td>
</tr>
</table>
<p><b>[Tuesday]</b><br />The best session today was &#8220;Common Mistakes When Using Operations Manager and How To Avoid Them.&#8221; The speaker, Cameron Fuller from Catapult Systems, was very engaging: kudos to him. Tonight was a chill night with the Rockets. Too bad we lost, but its a home game coming up Thursday!</p>
<p><b>[Wednesday]</b><br />Sessions were good, but it seems like some speakers shouldn&#8217;t be speakers. I know I&#8217;d be horrible at it, so I know I&#8217;d never do it. Speakers need to learn to vocalize, hell it&#8217;s the most important thing to keep your audience awake. Good material can be presented in a monotone voice and makes it completely a bore. I also found it a little interesting that the speakers who loved to take in questions mid-sentence and interact with the audience to be the most effective. Other speakers who wanted to keep Q&amp;A at the end seemed to be really focused, maybe a little too focused about what they were presenting rather than how the audience was taking it in. Any way, dinner with the company at David Burke was awesome. Thanks, Secure Vantage for taking care of us!</p>
<p>I finally hit the slots, up $30. Thanks to Wheel of Fortune and some random penny slots game I found interesting.</p>
<p><b>[Thursday]</b><br />NEVER have a cappuccino after dinner, EVER. I barely slept and was up at 4:00 AM for no reason. I tried going back to bed, but no success until around 6:00 AM. Today&#8217;s session was &#8220;Lousy Network Performance: Top 10 reasons the Network is Slow&#8221; by Laura Chappell. I&#8217;m definitely going to check out the tool she showed off, <a href="http://www.wireshark.org/" target="_blank">Wireshark</a>. I&#8217;m also going to try it out on our network to see how we perform.</p>
<p>GO ROCKETS! Man, 12 years is a long time&#8230;</p>
<p><b>[Friday]</b><br />
<table>
<tr>
<td valign="top">Last day and flight is at 6:25 PM. There are no shows during the day, so all we did was gamble and watch some sports. I was really glad to finally get out of there before I lost any more money.</td>
<td valign="top"><a href="http://www.flickr.com/photos/thomasnguyencom/3495411230/" title="Bye Vegas. by thomasnguyencom, on Flickr"><img src="http://farm4.static.flickr.com/3589/3495411230_571a45edf4_t.jpg" width="100" height="75" alt="Bye Vegas." /></a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2009/04/mms-2009-round-two/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Year on the Job.</title>
		<link>http://thomasnguyen.com/blog/2008/11/first-year-on-the-job/</link>
		<comments>http://thomasnguyen.com/blog/2008/11/first-year-on-the-job/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 15:51:00 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=236</guid>
		<description><![CDATA[First Week on the Job &#124; First Month on the Job(If this ever gets to &#8220;First Decade on the Job&#8221;, then WLOWL.) Anyway, it&#8217;s been about a year now and things are awesome. I&#8217;ve completely changed both as a developer and an employee since I&#8217;ve started. I&#8217;m hoping for another great year with way more [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thomasnguyen.com/blog/2007/11/first-week-on-job.html">First Week on the Job</a> | <a href="http://www.thomasnguyen.com/blog/2007/12/first-month-on-job.html">First Month on the Job</a><br />(If this ever gets to &#8220;First Decade on the Job&#8221;, then <strike>W</strike>LO<strike>W</strike>L.)</p>
<p>Anyway, it&#8217;s been about a year now and things are awesome. I&#8217;ve completely changed both as a developer and an employee since I&#8217;ve started. I&#8217;m hoping for another great year with <b>way</b> more on plate. Consider this an &#8220;end of the year review&#8221; for myself.</p>
<p><b>Accomplishments</b> <i>both development (yay) and non-development related (sigh)</i>
<ul>
<li><a href="http://securevantage.com/Products/AuditCollectionAdmin/Default.aspx" target="_blank">Audit Collection Admin RC</a></li>
<li>Audit Collection Data Miner Beta</li>
<li><a href="http://securevantage.com/Products/AuditCollectionSyslogGateway/Default.aspx" target="_blank">Audit Collection Syslog Gateway</a></li>
<li><a href="http://www.visualsvn.com/server/" target="_blank">Subversion</a> migration (with <a href="http://www.mantisbt.org/" target="_blank">Mantis</a>)</li>
<li>Create MSI Installers (believe me, 32/64bit installers are beasts!)</li>
<li>Email management, developer onboarding, document templating, manage third-party software repositories, website maintenance/updates.</li>
</ul>
<p><b>Things I Have Learned</b>
<ul>
<li><a href="http://www.microsoft.com/systemcenter/operationsmanager/en/us/default.aspx" target="_blank">System Center Operations Manager</a>: what it is and how it is used</li>
<li>Subversion: administration rather than just the <a href="http://tortoisesvn.tigris.org/" target="_blank">TortoiseSVN</a> part, still way more to learn on this</li>
<li>Creating test users under the domain and using &#8220;runas&#8221; helps with testing</li>
<li>32-bit Vista will only recognize 3GB of RAM</li>
<li><a href="http://www.microsoft.com/windowsserver2008/en/us/hyperv.aspx" target="_blank">Windows Server 2008 Hyper-V</a> is awesome!</li>
<li>Having a laptop dock saves seconds of your life a day</li>
<li>I don&#8217;t like <a href="http://silverlight.net/" target="_blank">Silverlight</a>/<a href="http://windowsclient.net/" target="_blank">WPF</a> because of <a href="http://msdn.microsoft.com/en-us/library/ms752059.aspx" target="_blank">XAML</a>. It&#8217;s ugly!</li>
<li><a href="http://nant.sourceforge.net/" target="_blank">NAnt</a> is nice, but MSIs are what the customers want/need</li>
<li>A downed Subversion Server on weekends makes for a really painful commit on Monday</li>
<li>Outlook does not manage emails well nor make support migrating to new machine fun</li>
<li>Sometimes working from home is way more productive</li>
<li>Web and Win development has its own gotchas and fails</li>
<li>Employers who trust trustworthy employees reap ginormous benefits (I think I&#8217;m pretty trustworthy)</li>
<li>The grass is ALWAYS greener on the other side of the fence, but you might end up having to landscape it, weed it, edge it. In the end it will become what you make of it.</li>
</ul>
<p><b>Things I Would Like (to Learn)</b>
<ul>
<li>Common Design Patterns</li>
<li>Enterprise Architecture and Design</li>
<li>One experienced C# developer (who enjoys the <a href="http://altdotnet.org/" target="_blank">alt.net</a> initiative) to brain storm and do code reviews.</li>
<li>Someone creates MSI Installers for us (I hate them)</li>
<li>Daily stand-up meetings with myself (yeah, I&#8217;m a lone developer)</li>
<li>Subversion Administration (helpful hooks, scripts, and processes)</li>
<li>Broadband wifi card (so I can work on the bus or just anywhere)</li>
<li>I need formal, hands on agile training from JP, not just reading blogs</li>
<li>Remove dependence on a cup of coffee a day</li>
</ul>
<p><b>Areas of Improvement</b> <i>end of year reviews always come with this part</i>
<ul>
<li>Provide training for others on Subversion, Mantis, and knowledge sharing</li>
<li>Ask for more feedback and detailed requirements</li>
<li>Improve on product roadmap knowledge</li>
<li>Understand more about customers&#8217; needs and use of products</li>
<li>Attend more User Group meetings to learn from others</li>
</ul>
<p>Something I need to improve on is quality of life. This startup has a lot potential and a lot of things to do, but I need to find something to do outside of this. I have a huge passion for development, but I need to find something to do <u>off</u> the computer. I mean, even my side projects are web-related and I just recently got the Android SDK so I can start making stuff for my brother&#8217;s new G1. I&#8217;ll need to start jogging again to build up some stamina in preparation for our snowboarding trip in December. I CAN&#8217;T WAIT!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2008/11/first-year-on-the-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Review FUN!</title>
		<link>http://thomasnguyen.com/blog/2008/10/code-review-fun/</link>
		<comments>http://thomasnguyen.com/blog/2008/10/code-review-fun/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 15:40:00 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[omgwtf]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=232</guid>
		<description><![CDATA[Legacy code can be fun!How many wrongs make a right? The more the merrier? //VB.NETPublic Function ConvertSDToStringSD(ByVal securityDescriptor() As Byte, ByVal securityInfo As Integer) As String Dim pStringSD As IntPtr Dim stringSDLen As Integer Dim success As Boolean = ConvertSecurityDescriptorToStringSecurityDescriptor(securityDescriptor, 1, securityInfo, pStringSD, stringSDLen) &#8216; The following ensures that the memory allocated to pStringSD by [...]]]></description>
			<content:encoded><![CDATA[<p>Legacy code can be fun!<br />How many wrongs make a right? The more the merrier?</p>
<div class="lab_comment1">//VB.NET<br />Public Function ConvertSDToStringSD(ByVal securityDescriptor() As Byte, ByVal securityInfo As Integer) As String<br /> 
<div class="lab_commentBlock">Dim pStringSD As IntPtr<br />            Dim stringSDLen As Integer<br />            Dim success As Boolean = ConvertSecurityDescriptorToStringSecurityDescriptor(securityDescriptor, 1, securityInfo, pStringSD, stringSDLen)<br />            &#8216; The following ensures that the memory allocated to pStringSD by the unmanaged <br />            &#8216; Win32 API is freed. <br />            Try<br /> 
<div class="lab_commentBlock">If Not success Then<br /> 
<div class="lab_commentBlock">Throw New System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error)</div>
<p>End If<br />                Return Marshal.PtrToStringAuto(pStringSD, stringSDLen)</div>
<p>Finally<br /> 
<div class="lab_commentBlock">If (pStringSD  IntPtr.Zero) Then<br /> 
<div class="lab_commentBlock">Marshal.FreeHGlobal(pStringSD)</div>
<p>End If<br />                pStringSD = IntPtr.Zero</div>
<p>End Try</p></div>
<p>End Function</p></div>
<p>TOM <b>ANGRY</b>, can you guess why?</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2008/10/code-review-fun/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

