<?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>YTechie.com &#187; productivity</title>
	<atom:link href="http://www.ytechie.com/category/productivity/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ytechie.com</link>
	<description>Productive software development using ASP.NET, C#, Adobe Flex, and other technologies and tools.</description>
	<lastBuildDate>Fri, 06 Nov 2009 21:16:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Maintaining Consistent Line Lengths</title>
		<link>http://www.ytechie.com/2009/04/maintaining-consistent-line-lengths.html</link>
		<comments>http://www.ytechie.com/2009/04/maintaining-consistent-line-lengths.html#comments</comments>
		<pubDate>Mon, 06 Apr 2009 14:10:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2009/04/maintaining-consistent-line-lengths.html</guid>
		<description><![CDATA[Today&#8217;s tip comes from the “Anally Retentive” department. In the .NET CLR team likes to keep their lines of code under 110 characters long. I’m assuming that they’re trying to maintain consistency and readability. I often try to maintain an imaginary line length limit, but I doubt I’m very consistent.
 
Fortunately, Visual Studio provides a [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s tip comes from the “Anally Retentive” department. In the <a href="http://blogs.msdn.com/shawnfa/archive/2006/07/07/659281.aspx" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/blogs.msdn.com/shawnfa/archive/2006/07/07/659281.aspx?referer=');">.NET CLR team likes to keep their lines of code under 110 characters long</a>. I’m assuming that they’re trying to maintain consistency and readability. I often try to maintain an imaginary line length limit, but I doubt I’m very consistent.</p>
<p><img title="Vertical line in Visual Studio" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="272" alt="Vertical line in Visual Studio" src="http://www.ytechie.com/post-images/2009/04/image.png" width="483" border="0" /> </p>
<p>Fortunately, Visual Studio provides a hidden feature that lets you draw a vertical line in the text editor to show you where a certain line length would end. Fire up your registry editor and find this key:</p>
<p><strong>HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Text Editor</strong></p>
<p>If you’re using a version of Visual Studio before 2008, you’ll need to decrement the 9.0 version number in the path above.</p>
<p>Then, add the following value (as a string or REG_SZ) with the name of “<strong>Guides</strong>”:</p>
<p><strong>RGB(192,192,192) 110</strong></p>
<p>The first part is the color, and the second part is the line length. Personally, I use a line length of 110 to stay consistent with how Microsoft has chosen to do it. I like the color listed above because it’s faint, but visible. Since the line is almost impossible to see in the screenshot above, here is an un-scaled screenshot of the line itself:</p>
<p align="center"><img title="Vertical Line" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="68" alt="Vertical Line" src="http://www.ytechie.com/post-images/2009/04/image1.png" width="213" border="0" /> </p>
<p align="left">To further enforce the 110 character limit, you could also resize the code portion of your Visual Studio window so that it’s near the line. This will make the line itself a little less annoying, while allowing you to use the rest of the window for other information. For example, take a look at how much room I have on a 1920&#215;1200 screen when I horizontally resize my code window:</p>
<p align="left"><img title="Utilizing a large monitor in Visual Studio" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="291" alt="Utilizing a large monitor in Visual Studio" src="http://www.ytechie.com/post-images/2009/04/image2.png" width="467" border="0" />&#160;</p>
<p align="left">Obviously this tip isn’t for everyone. You may be working with legacy code with long lines, or you might work on a team that doesn’t mind long lines. The great news is that Visual Studio is pretty accommodating to however you like to work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2009/04/maintaining-consistent-line-lengths.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Convenient Synchronization with Mesh and DropBox</title>
		<link>http://www.ytechie.com/2009/02/convenient-synchronization-with-mesh-and-dropbox.html</link>
		<comments>http://www.ytechie.com/2009/02/convenient-synchronization-with-mesh-and-dropbox.html#comments</comments>
		<pubDate>Sat, 14 Feb 2009 04:27:33 +0000</pubDate>
		<dc:creator>superjason</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2009/02/convenient-synchronization-with-mesh-and-dropbox.html</guid>
		<description><![CDATA[A couple of weeks ago, I finally signed up for DropBox. If you&#8217;re unfamiliar with the service, it&#8217;s a file synchronization service. You install a client on multiple machines, and you get a special folder (aka a dropbox). When you make changes on any computer, it&#8217;s synchronized with a central server, as well as the [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago, I finally signed up for <a href="https://www.getdropbox.com/" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/www.getdropbox.com/?referer=');">DropBox</a>. If you&#8217;re unfamiliar with the service, it&#8217;s a file synchronization service. You install a client on multiple machines, and you get a special folder (aka a dropbox). When you make changes on any computer, it&#8217;s synchronized with a central server, as well as the other clients.</p>
<p align="center"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="214" alt="image" src="http://www.ytechie.com/post-images/2009/02/image.png" width="423" border="0"/> </p>
<p>Now that I&#8217;ve gotten the chance to put DropBox through its paces, I have to say that I&#8217;m very impressed. I&#8217;ve done a lot of operations that can sometimes choke file monitoring software like moving and renaming files, copying files while synchronizing, and in-use files. DropBox powered through like a champ, never giving me any errors, and without any noticeable mistakes.</p>
<p>In addition to simply synchronizing your files, their service also keeps a copy of your files on their server. Better yet, it automatically revisions the files. It seems to be fairly efficient, even considering all my files and revisions. Right now I&#8217;m only using 7.8% of the 2GB of space they give you for free.</p>
<p>One of the applications that I use the most is OneNote. Pretty much all of my disconnected thoughts go into OneNote until I can get them organized. I figured it was a great application to test the responsiveness of DropBox. I opened OneNote on two different computers. When I changed the text on one machine, the changes showed up on the other in 10-15 seconds. Perfect for keeping my notes in sync!</p>
<p>My one and only complaint about DropBox is that I can&#8217;t create multiple DropBoxes. A single DropBox is simple and efficient, but it would be nice to have a little more flexibility.</p>
<p><strong>Live Mesh</strong></p>
<p>A few nights ago, I got a demo of the Azure platform by a Microsoft Evangelist. Azure is a huge blank term for a group of confusing technologies. Even the name itself is confusing, since Azure is a cloud computing platform and is also the color of the sky when there are no clouds.</p>
<p align="center"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="194" alt="image" src="http://www.ytechie.com/post-images/2009/02/image1.png" width="412" border="0"/></p>
<p>More importantly, one great thing to come out of the &#8220;Live Services&#8221; portion, is a free product called &#8220;Live Mesh&#8221;. It&#8217;s essentially a competitor to DropBox. The nice thing about Live Mesh is it&#8217;s flexibility. I can make any number of synchronized folders, and they all seem to be as reliable as DropBox. Thanks to a sophisticated permissions system, you can even share folders with other people. For example, you can have a folder set up to distribute your photos to your family.</p>
<p>The Microsoft Azure Evangelist showed us a demo with the client installed on his laptop, and another client installed on his Windows Mobile phone. When he takes a picture on his phone, it&#8217;s immediately pushed over to the other clients. It&#8217;s a neat trick, and does make my mobile device more useful.</p>
<p align="center"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="319" alt="image" src="http://www.ytechie.com/post-images/2009/02/image2.png" width="223" border="0"/><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="318" alt="image" src="http://www.ytechie.com/post-images/2009/02/image3.png" width="222" border="0"/> </p>
<p>As far as I can tell, Live Mesh doesn&#8217;t have plans to support a revision system like DropBox. I think this is a horrible, horrible mistake. Having a file on multiple machines provides nice redundancy, yet if you accidentally delete a file on one computer, Live Mesh will happily delete every copy of it. <a href="http://www.hanselman.com/blog/TechnicalPresentationsBePreparedForAbsoluteChaos.aspx" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/www.hanselman.com/blog/TechnicalPresentationsBePreparedForAbsoluteChaos.aspx?referer=');">It even happened to Scott Hanselman</a>. In my opinion, this completely destroys any hope it has of competing with DropBox (at least for me). I&#8217;m hoping that they&#8217;ll add a backup feature, or someone will use their API to add it for them.</p>
<p><strong>Others</strong></p>
<p>One service I have yet to try is <a href="http://www.sugarsync.com/" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/www.sugarsync.com/?referer=');">SugarSync</a>. It looks promising because it syncs multiple folders, stores revisions, and even has a Windows Mobile version (although it&#8217;s missing real-time sync). On paper, it looks like it has all the options you would expect from this type of service.</p>
<p><a href="http://syncplicity.com" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/syncplicity.com?referer=');">Syncplicity</a> looks respectable, but with so many alternatives, I&#8217;m just not sure if they have anything unique that sets them apart.</p>
<p><strong>Conclusion</strong></p>
<p>I think this type of application is going to have a huge market. This is one of those few killer app&#8217;s that if done well, will be on everyone&#8217;s computer. Obviously Microsoft&#8217;s offering will be positioned to dominate, but we all know that they don&#8217;t always have the absolute best product.</p>
<p>For now, I&#8217;ll be using DropBox for my main document folder. It suits my needs, and until it messes up, I won&#8217;t need to look elsewhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2009/02/convenient-synchronization-with-mesh-and-dropbox.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tip for success &#8211; Track your accomplishments</title>
		<link>http://www.ytechie.com/2009/01/tip-for-success-track-your-accomplishments.html</link>
		<comments>http://www.ytechie.com/2009/01/tip-for-success-track-your-accomplishments.html#comments</comments>
		<pubDate>Sun, 01 Feb 2009 03:27:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2009/01/tip-for-success-track-your-accomplishments.html</guid>
		<description><![CDATA[When it’s time for your yearly performance reviews, how do you convey all of the great ideas you’ve had, the money you’ve saved the company, and the customers you’ve delighted? My suggestion is to start keeping track of your accomplishments. I think this is especially important in the software business where you may be seen [...]]]></description>
			<content:encoded><![CDATA[<p>When it’s time for your yearly performance reviews, how do you convey all of the great ideas you’ve had, the money you’ve saved the company, and the customers you’ve delighted? My suggestion is to start keeping track of your accomplishments. I think this is especially important in the software business where you may be seen as the guy that sits around at a computer all day.</p>
<p><a href="http://www.ytechie.com/post-images/2009/01/accomplishmenttarget.jpg"><img title="Accomplishment-Target" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="239" alt="Accomplishment-Target" src="http://www.ytechie.com/post-images/2009/01/accomplishmenttarget-thumb.jpg" width="240" border="0" /></a> </p>
<p>I used to work for an incredibly huge (read: bureaucratic) company that required everyone to fill out a form every year, which was basically a resume. You were essentially going through the process of re-applying for your own job to determine your performance, and subsequently, your raise. Everyone hated doing it, but in hindsight I believe it was a good exercise. If I had been keeping a running list of my accomplishments, the process would have been much less painful.</p>
<p>In an ideal world, your boss would really understand your job and would know exactly how great you are. In fact, if you’re a development manager reading this, I suggest you start keeping track of those types of things somewhere other than your head. It will help you evaluate your employees that don’t listen to me!</p>
<p>If you’re not keeping track of all of the amazing things you’re doing throughout the year, there are a couple of obvious problems. First, there is usually a “dead” period right after a review in which your accomplishments are so distant from your next review that they slowly fade from everyone&#8217;s mind. Second, you’re just one of many employees that your boss has to manage. How likely is he or she to notice everything that you make look so easy? Not only that, but your career is more than just the accomplishments you had from the last year.</p>
<p>What should this list look like? Each line should be in the same format as an <a href="http://www.google.com/search?q=resume+accomplishments" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?q=resume+accomplishments&amp;referer=');">accomplishment on your resume</a>. After all, you’re trying to sell yourself just as you would when applying for a job.</p>
<p><font color="#808080">Feb 09</font></p>
<ul>
<li>
<p><font color="#808080">Implemented a new CMS system for the finance department saving $5300 annually.</font></p>
</li>
<li>
<p><font color="#808080">Shortened the project planning process by removing duplicate steps, allowing projects to be delivered an average of 10% faster.</font></p>
</li>
</ul>
<p><font color="#000000">Personally, I’ve already starting tracking my accomplishments. The next time I have a performance review coming up, I can send my boss the highlights for the past year, keeping them fresh in his mind. I hope I can motivate as least one other person to do the same. If I ever want to make a career move, I believe the list will also be very useful when updating my resume.</font></p>
<p><font color="#000000">Do you already keep a list of your accomplishments? How have you found it useful?</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2009/01/tip-for-success-track-your-accomplishments.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Advantages of a 3rd party diff/compare tool</title>
		<link>http://www.ytechie.com/2008/12/advantages-of-a-3rd-party-diffcompare-tool.html</link>
		<comments>http://www.ytechie.com/2008/12/advantages-of-a-3rd-party-diffcompare-tool.html#comments</comments>
		<pubDate>Fri, 26 Dec 2008 15:23:57 +0000</pubDate>
		<dc:creator>superjason</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2008/12/advantages-of-a-3rd-party-diffcompare-tool.html</guid>
		<description><![CDATA[I recently spent nearly an hour trying to figure out why all of my unit tests stopped working in a particular class. It turns out that I had accidentally deleted a single character in one of my strings, but the built in diff tool that comes with Team Foundation Server is very simplistic. Learn how [...]]]></description>
			<content:encoded><![CDATA[<p>I recently spent nearly an hour trying to figure out why all of my unit tests stopped working in a particular class. It turns out that I had accidentally deleted a single character in one of my strings, but the built in diff tool that comes with Team Foundation Server is very simplistic. Learn how and why you can replace your stock compare tool with something a little more powerful.</p>
<p>Here is a screenshot of what you&#8217;ll see in the stock Team Foundation Server compare tool:</p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="74" alt="Default TFS Compare Tool" src="http://www.ytechie.com/post-images/2008/12/image4.png" width="484" border="0"/> </p>
<p>See how hard it is to spot the difference? The problem is, ANY change on the entire line causes it to show up as &#8220;changed&#8221;. That includes whitespace changes. For this reason, I frequently end up with extra full lines that are colored as having been changed, making it harder to see the actual code changes. For the most part, I really don&#8217;t care about whitespace changes because they deal with the formatting of the document, and I&#8217;m more concerned with functional changes to my code.</p>
<p>The good news is that those smart guys at Microsoft make it easy to integrate a third party compare tool right into their tools. James Manning was even kind enough to include <a href="http://blogs.msdn.com/jmanning/articles/535573.aspx" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/blogs.msdn.com/jmanning/articles/535573.aspx?referer=');">detailed instructions and the exact settings needed</a> for every major compare tool. You can even use them for merging if you like.</p>
<p>Since my background is in Subversion and TortoiseSVN specifically, I pulled out my trusty <a href="http://kdiff3.sourceforge.net/" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/kdiff3.sourceforge.net/?referer=');">KDiff3</a> (SourceForge) compare tool. It&#8217;s a common alternative for TortoiseSVN&#8217;s own diff tool.</p>
<p>After wiring up KDiff3, here is what I saw when I compared revisions:</p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="110" alt="KDiff3 Character Difference" src="http://www.ytechie.com/post-images/2008/12/image5.png" width="484" border="0"/> </p>
<p>Notice how easy it is to see that I changed a single letter (it&#8217;s obviously easier when it&#8217;s full-size).</p>
<p>There are other good reasons to use a third party compare tool (which vary by tool obviously):</p>
<ul>
<li>Easily compare entire file structures (folder diff)</li>
<li>Inline editing</li>
<li>Easy to use outside of Visual Studio &#8211; often with an explorer context menu</li>
</ul>
<p>I recommend giving a few of the compare tools a try and see which works best for you. I don&#8217;t really see any risk in using a third party compare tool, but there are certainly a lot of advantages that you may not even know you&#8217;re missing right now. I suggest also taking a look at <a href="http://winmerge.org/" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/winmerge.org/?referer=');">WinMerge</a> in addition to <a href="http://kdiff3.sourceforge.net/" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/kdiff3.sourceforge.net/?referer=');">KDiff3</a>, since it seems to be fairly popular and feature-rich as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2008/12/advantages-of-a-3rd-party-diffcompare-tool.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ClearType in Remote Desktop with XP</title>
		<link>http://www.ytechie.com/2008/12/cleartype-in-remote-desktop-with-xp.html</link>
		<comments>http://www.ytechie.com/2008/12/cleartype-in-remote-desktop-with-xp.html#comments</comments>
		<pubDate>Tue, 23 Dec 2008 21:39:58 +0000</pubDate>
		<dc:creator>superjason</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2008/12/cleartype-in-remote-desktop-with-xp.html</guid>
		<description><![CDATA[A new feature in XP SP3 that should of particular interest to developers is ClearType over RDP (remote desktop protocol). If you occasionally use remote desktop to work from home, or work remotely to your development machine, please read on.
If you&#8217;re not familiar with ClearType, you can head over to Wikipedia for a full explanation. [...]]]></description>
			<content:encoded><![CDATA[<p>A new feature in XP SP3 that should of particular interest to developers is ClearType over RDP (remote desktop protocol). If you occasionally use remote desktop to work from home, or work remotely to your development machine, please read on.</p>
<p>If you&#8217;re not familiar with ClearType, you can head over to Wikipedia for a <a href="http://en.wikipedia.org/wiki/ClearType" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/ClearType?referer=');">full explanation</a>. In a nutshell, it takes advantage of the fact that each pixel in an LCD screen actually has 3 sub-pixels. They can be &#8220;hacked&#8221; to improve the anti-aliasing of text displayed on the screen. I&#8217;ve been a huge fan of the feature, especially for source code, and I have a hard time living without it. In XP (locally), it&#8217;s turned <strong>off</strong> by default, but turned <strong>on</strong> in Vista.</p>
<p align="center"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="183" alt="ClearType Effects Dialog" src="http://www.ytechie.com/post-images/2008/12/image3.png" width="425" border="0"/> </p>
<p>I had always noticed the remote desktop would not give me ClearType. However, I became curious when I found the following options on my Vista machine. Apparently ClearType over RDP is now supported in the client, and is also supported when using Vista as the RDP server (no hacking needed).</p>
<p align="center"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="326" alt="RDP Experience Options" src="http://www.ytechie.com/post-images/2008/12/image2.png" width="290" border="0"/> </p>
<p>Unfortunately, these options have no effect when using XP. If you want ClearType over RDP with XP SP3 (sorry, only SP3+), add the following registry key:</p>
<p>
<div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:fb4c1216-6343-4bb0-a4ea-b87b0ee5266b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="c">Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations]
"AllowFontAntiAlias"=dword:00000001</pre>
</div>
<p>After you add that registry key, simply reboot the server (XP), and reconnect. From what I can tell, the client options no longer matter. Even if I uncheck the &#8220;Font Smoothing&#8221; option, it still uses ClearType. It&#8217;s not a big deal, but I thought it was worth mentioning.</p>
<p>So far, after using this option for a while, I haven&#8217;t seen a significant performance impact over a VPN on the Internet.</p>
<p>If you want to take this a step further, install <a href="http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&amp;displaylang=en" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3_amp_displaylang=en&amp;referer=');">Consolas</a>, it&#8217;s a font designed specifically for software development, and to take advantage of ClearType. It&#8217;s a free download from Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2008/12/cleartype-in-remote-desktop-with-xp.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>.NET Development Perf Testing in a Cloud VM (EC2)</title>
		<link>http://www.ytechie.com/2008/11/net-development-perf-testing-in-a-cloud-vm-ec2.html</link>
		<comments>http://www.ytechie.com/2008/11/net-development-perf-testing-in-a-cloud-vm-ec2.html#comments</comments>
		<pubDate>Tue, 18 Nov 2008 15:33:19 +0000</pubDate>
		<dc:creator>superjason</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[virtualization]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2008/11/net-development-perf-testing-in-a-cloud-vm-ec2.html</guid>
		<description><![CDATA[If you haven&#8217;t heard, Amazon&#8217;s EC2 service provides cloud-hosted virtual machines. Initially, they just supported Linux machine images, but recently have allowed Windows machine images. This means that you can create on-demand hosted virtual machines accessible from anywhere.
 
I decided to do some simple, informal performance testing. To do development performance testing, I like to [...]]]></description>
			<content:encoded><![CDATA[<p>If you haven&#8217;t heard, Amazon&#8217;s EC2 service provides cloud-hosted virtual machines. Initially, they just supported Linux machine images, but recently have allowed Windows machine images. This means that you can create on-demand hosted virtual machines accessible from anywhere.</p>
<p align="center"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="271" alt="image" src="http://www.ytechie.com/post-images/2008/11/image3.png" width="350" border="0"/> </p>
<p>I decided to do some simple, informal performance testing. To do <strong>development</strong> performance testing, I like to run a build process and time it, since compiling is typically the bottleneck on a development machine (other than the IDE and the developer).</p>
<p>I downloaded the source code for <a href="http://www.icsharpcode.net/OpenSource/SD/" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/www.icsharpcode.net/OpenSource/SD/?referer=');">SharpDevelop</a>, since I knew it would be a fairly large, yet automated build process. The only thing I needed to install was .NET 3.5 SP1. As a baseline, I ran the build on my personal laptop, with these specs: 2.0GHz Core 2 Duo, 3GB RAM, 250GB 5400RPM hard drive. To test the performance of the build, I ran it once, ran a &#8220;clean&#8221; operation, then ran the build a second time, timing it only on the second run.</p>
<ul>
<li>My laptop:&nbsp; 1 minute, 37 seconds  </li>
<li>EC2 Small Instance: 2 minutes  </li>
<li>EC2 Medium Instance: 41 seconds</li>
</ul>
<p>As you can see, the EC2 &#8220;medium&#8221; instance, was over twice as fast as my local machine.</p>
<p>To continue my testing, I installed Visual Studio 2008 Professional, ReSharper, TortoiseSVN, and the Silverlight toolkit. My initial impression was very positive, and I could certainly see myself using it on a regular basis. From a professional standpoint, I would probably prefer a dedicated development machine. However, <strong>for an occasional hobby development environment, this might be a viable alternative</strong>.</p>
<p>EC2 has many advantages over running <a href="http://www.vmware.com" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/www.vmware.com?referer=');">VMware</a> or <a href="http://en.wikipedia.org/wiki/Microsoft_Virtual_PC" target="_blank" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Microsoft_Virtual_PC?referer=');">Virtual PC</a> on your own computer:</p>
<ul>
<li>Can take snapshots of drives  </li>
<li>Doesn&#8217;t use resources from your computer  </li>
<li>CPU can be upgraded/downgraded as needed  </li>
<li>Theoretically ultra-stable host  </li>
<li>Very fast Internet connection (I downloaded 800mb in less than 30s!)  </li>
<li>Theoretically updated virtual hardware as time goes on </li>
<li>Potentially faster (especially if you use a laptop)</li>
</ul>
<p>However, there are a few obvious disadvantages:</p>
<ul>
<li>Pay-per-hour can get expensive if you use it full-time  </li>
<li>Can&#8217;t drag and drop in and out of the VM like desktop virtualization can  </li>
<li>Need to remote connect using something like remote desktop so graphics performance isn&#8217;t the best  </li>
<li>Only available when you have access to the Internet  </li>
<li>Not necessarily great multi-monitor support  </li>
<li>Virtual machines take a while to start and snapshot</li>
</ul>
<p><strong>Pricing</strong></p>
<p>Right now, Windows based machines are priced starting at $.15/hr (medium for $.30/hr). For a machine that runs 24/7, this can get expensive compared to dedicated hosting. However, for a machine that&#8217;s used for only a couple of hours each day, the pricing is very reasonable.</p>
<p>As an example, if you run a medium instance machine for 8 hours/day, 20 business days/month, you&#8217;ll end up paying $48/month.</p>
<p><strong>Conclusion</strong></p>
<p>Having virtual, dedicated computers available on-demand for pennies per hour is very exciting. <a href="http://www.ytechie.com/2008/11/cloud-computing-and-azure-right-for-your-site.html" target="_blank">This is half of the cloud computing equation</a>, and I believe it&#8217;s going to be an important <em>part</em> of the future of the web.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2008/11/net-development-perf-testing-in-a-cloud-vm-ec2.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Design your classes for their consumer</title>
		<link>http://www.ytechie.com/2008/08/design-your-classes-for-their-consumer.html</link>
		<comments>http://www.ytechie.com/2008/08/design-your-classes-for-their-consumer.html#comments</comments>
		<pubDate>Mon, 11 Aug 2008 19:44:30 +0000</pubDate>
		<dc:creator>superjason</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2008/08/design-your-classes-for-their-consumer.html</guid>
		<description><![CDATA[I&#8217;m going to describe a methodology that will help you save time by writing better classes, and will help simplify your life by allowing you to solve problems with a top-down approach.
Developers such as myself often have a tendency to just focus on the class we&#8217;re currently working on. Of course I believe this is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to describe a methodology that will help you save time by writing better classes, and will help simplify your life by allowing you to solve problems with a top-down approach.</p>
<p>Developers such as myself often have a tendency to just focus on the class we&#8217;re currently working on. Of course I believe <a href="http://www.ytechie.com/2008/07/programming-for-someone-with-blinders.html">this is a good thing</a>, because we all know <a href="http://www.ytechie.com/2008/05/focus-is-the-key-to-success.html">the importance of focus</a>. However, you should never forget the reason you&#8217;re actually writing that class. It is because <strong>other code will be consuming it</strong>.</p>
<p><a href="http://www.ytechie.com/post-images/2008/08/consumer-approach.gif"><img height="76" alt="Consumer-Approach" src="http://www.ytechie.com/post-images/2008/08/consumer-approach-thumb.gif" width="484" border="0"/></a> </p>
<p>There have been far too many instances where I would figure out which pieces I needed to build, and then build each one, from the bottom up. The problem is that I would write the class in the most short-sighted and <strong>easiest</strong> way possible, which is usually not the best way to use it.</p>
<p>Now, when there is a question of what a class interface should look like, I ask myself what it <em>should</em> look like to make the life of the consumer as easy as possible.</p>
<p>Sometimes we can even take code usability to an extreme. For example, <a href="http://en.wikipedia.org/wiki/Fluent_interface" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Fluent_interface?referer=');">Fluent interfaces</a>, which allow you to chain together multiple calls. In many instances, this makes the code much easier to <em>call</em>, potentially at the expense of making the <em>called</em> code more complicated.</p>
<p>I&#8217;ve come up with a simple example to help illustrate. Suppose I need to process a list of x,y coordinates. Here are a couple of potential signatures:</p>
<ul>
<li>ProcessData(double[] xData, double[] yData);</li>
<li>ProcessData(PointF[] points);</li>
<li>ProcessData(IDictionary&lt;double, double&gt; points);</li>
</ul>
<p>For now, just ignore the performance implications (<a href="http://en.wikipedia.org/wiki/Big_O_notation#Orders_of_common_functions" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Big_O_notation_Orders_of_common_functions?referer=');">they&#8217;re going to be linear in this case</a>, or close to it anyway). To choose the correct signature, we need to know who the caller is.</p>
<p>Of course there is a good chance that we&#8217;ll have a slight intentional leaky abstraction. In the previous example, we may have been able to use the <a href="http://msdn.microsoft.com/en-us/library/9eekhta0.aspx" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/library/9eekhta0.aspx?referer=');">IEnumerable generic</a> to be more flexible. That&#8217;s a topic for another day.</p>
<p>Thankfully, this problem is minimized, although not always eliminated when you follow the <a href="http://en.wikipedia.org/wiki/Single_responsibility_principle" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Single_responsibility_principle?referer=');">single responsibility principle</a>. The better you can follow that principle, the simpler each piece will be. That tends to minimize the potential for the consumer to need the interface to look different than it would naturally be.</p>
<p>Another way to look at your classes from the consumers point of view is to practice test-driven development. In fact, I see this as one of the strongest arguments for test driven design. For each layer in your code, you&#8217;re creating code by consuming it before writing it. Every layer acts as an API to the layer above it.</p>
<p>In conclusion, I&#8217;m simply recommending that you don&#8217;t lose sight of <strong>why</strong> you&#8217;re writing that piece of code. You&#8217;re not just writing code for the sake of writing code, you&#8217;re writing it to be used!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2008/08/design-your-classes-for-their-consumer.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to get the best customer service for free</title>
		<link>http://www.ytechie.com/2008/07/how-to-get-the-best-customer-service-for-free.html</link>
		<comments>http://www.ytechie.com/2008/07/how-to-get-the-best-customer-service-for-free.html#comments</comments>
		<pubDate>Thu, 24 Jul 2008 20:22:57 +0000</pubDate>
		<dc:creator>superjason</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2008/07/how-to-get-the-best-customer-service-for-free.html</guid>
		<description><![CDATA[Today&#8217;s tip is a hack for getting awesome tech support from a company for a product that you may or may not have purchased. It may not be polite, but it may be a method of last resort.
 
We all knows what happens if you buy a product and then call for support. If you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s tip is a hack for getting awesome tech support from a company for a product that you may or may not have purchased. It may not be polite, but it may be a method of last resort.</p>
<p align="center"><a href="http://www.ytechie.com/post-images/2008/10/helpful-crowd.jpg"><img height="180" alt="Helpful-Crowd" src="http://www.ytechie.com/post-images/2008/10/helpful-crowd-thumb.jpg" width="230" border="0" /></a> </p>
<p align="left">We all knows what happens if you buy a product and then call for support. If you&#8217;re lucky, you get put on hold. If you&#8217;re unlucky, you&#8217;ve called outside of their business hours of 1am to 3am. When you do talk to someone, you&#8217;re treated like an idiot (in their defense, it&#8217;s a learned behavior).</p>
<p align="left">If you want great service, call their <strong>sales department</strong>. Tell them you&#8217;re evaluating their product, but ran into an issue. You&#8217;ll be talking to someone that actually wants your business. They&#8217;re typically very helpful, and remind us of the benefit of good customer service.</p>
<p align="left">Just today a coworker <a href="http://www.focalmedia.net/fmsitesearchpro.html" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/www.focalmedia.net/fmsitesearchpro.html?referer=');">sent me a link</a> (unrelated site) that had a link to a page called &quot;Pre-Sales Questions&quot;. They&#8217;re openly distinguishing between potential customers, and paying customers. The problem is that they make the pre-sales question form easy to use, but the paying customer form is not. Customer service is in a bad state.</p>
<p align="left">My official recommendation is to to fully try out their product during a trial, so that when do you <em>do</em> talk to their sales team, they can at least earn a sale from it. Like I said, this is a method of last resort.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2008/07/how-to-get-the-best-customer-service-for-free.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming for someone with blinders</title>
		<link>http://www.ytechie.com/2008/07/programming-for-someone-with-blinders.html</link>
		<comments>http://www.ytechie.com/2008/07/programming-for-someone-with-blinders.html#comments</comments>
		<pubDate>Tue, 22 Jul 2008 12:29:17 +0000</pubDate>
		<dc:creator>superjason</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2008/07/programming-for-someone-with-blinders.html</guid>
		<description><![CDATA[One of your goals as a developer should be to make your code as readable as possible, both for yourself, and for the other developers you work with.
 
One great way to determine if your code is well written, is to ask yourself if the code you&#8217;re writing is readable by itself. Another developer should [...]]]></description>
			<content:encoded><![CDATA[<p>One of your goals as a developer should be to make your code as readable as possible, both for yourself, and for the other developers you work with.</p>
<p align="center"><a href="http://www.ytechie.com/post-images/2008/07/image9.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="189" alt="Horse with Blinders" src="http://www.ytechie.com/post-images/2008/07/image-thumb.png" width="155" border="0" /></a> </p>
<p>One great way to determine if your code is well written, is to ask yourself if the code you&#8217;re writing is readable by itself. Another developer should be able to jump into a module, and have a fairly easy time seeing what&#8217;s going on. They shouldn&#8217;t have to sift through thousands of lines of interweaved code to figure out what&#8217;s going on.</p>
<p>Of course, what I&#8217;m talking about is simply a test for the <a href="http://en.wikipedia.org/wiki/Single_responsibility_principle" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Single_responsibility_principle?referer=');">single responsibility principle</a>. If you&#8217;ve written a huge &quot;do it all&quot; class with thousands of lines of code, you&#8217;re ensuring that you&#8217;re the only one that will be able to maintain it. That that type of code usually suffers from <a href="http://en.wikipedia.org/wiki/Coupling_(computer_science)#Low_coupling" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Coupling_computer_science_Low_coupling?referer=');">high coupling</a> to the other modules in the program.</p>
<p>I used to organize code into classes based on the type of functionality being provided. I used them more as containers for related functionality. At the time, I didn&#8217;t see a reason to split it apart. <em>I was very wrong</em>.</p>
<p>In a recent article by Jimmy Bogard, he walks through <a href="http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/07/17/separation-of-concerns-by-example-part-5.aspx" onclick="pageTracker._trackPageview('/outgoing/www.lostechies.com/blogs/jimmy_bogard/archive/2008/07/17/separation-of-concerns-by-example-part-5.aspx?referer=');">creating classes with a separation of concerns</a>. In the conclusion is my favorite part:</p>
<blockquote><p>Now we have many more classes (4 vs. 1) and interfaces (3 vs. 0).&#160; For those who don&#8217;t like more classes, GET OVER IT.</p>
</blockquote>
<p>That is an excellent point. Why should you be afraid of creating more classes and interfaces? It&#8217;s really not more code to write, in fact, it&#8217;s often less. Refactoring tools remove many of the obstacles of maintaining the interface, class, and method structure </p>
<p>When someone looks at your code and you have 4 classes instead of 1, and those classes are very specific and short enough to process by our tiny brains, it will be much easier to maintain and modify (or even better, extend).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2008/07/programming-for-someone-with-blinders.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Using objects or repository interface in constructor</title>
		<link>http://www.ytechie.com/2008/07/using-objects-or-repository-interface-in-constructor.html</link>
		<comments>http://www.ytechie.com/2008/07/using-objects-or-repository-interface-in-constructor.html#comments</comments>
		<pubDate>Tue, 08 Jul 2008 18:48:33 +0000</pubDate>
		<dc:creator>superjason</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://www.ytechie.com/2008/07/using-objects-or-repository-interface-in-constructor.html</guid>
		<description><![CDATA[I&#8217;ve been really trying to use the Single Responsibility Pattern in all of the classes I design. Recently, I needed to create code to query a list of holidays from the database, and then create a method that allows you to get the number of holidays between two given dates.
Here was my first stab at [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been really trying to use the <a href="http://www.ytechie.com/2008/06/agile-patterns-practices-and-the-developer-divide.html">Single Responsibility Pattern</a> in all of the classes I design. Recently, I needed to create code to query a list of holidays from the database, and then create a method that allows you to get the number of holidays between two given dates.</p>
<p>Here was my first stab at the constructor:</p>
<pre class="c#" name="code">public HolidayCalculator(IEnumerable&lt;DateTime&gt; holidays)</pre>
<p>It&#8217;s simple and easy to understand. Then I started thinking about some of the dependency injected examples I&#8217;ve seen. For example, <a href="http://www.springframework.net/doc-latest/reference/html/quickstarts.html" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/www.springframework.net/doc-latest/reference/html/quickstarts.html?referer=');">one of the Spring.NET IoC quickstarts</a> has a similar example, except that they&#8217;re trying to list movies. In their example, they use an IMovieFinder interface. That interface has a single method that retrieves a list of movies. Using this concept, my constructor would look like (and what I ultimately changed it to):</p>
<pre class="c#" name="code">public HolidayCalculator(IHolidayRepository holidayRepository)</pre>
<p>That example originally seemed unnecessarily complex to me. Why separate something so simple and disconnected into an interface? Well, it turns out there are a couple of good reasons that you might want to do this.</p>
<p><strong>Delay loading</strong></p>
<p>With my original constructor, I had to load all of the holidays from the repository (ultimately a database in the production environment) to even create an instance of this class. This is certainly less than ideal when I want to use this class as a singleton that may get created early in the application.</p>
<p><strong>Single Responsibility</strong></p>
<p>In my original design, I was accepting in a list that would get cached in my holiday calculator. My class now has two responsibilities. It has to calculate holidays, and it has to cache the holiday list. What if I wanted to change how the list was cached? I would have to change the class, which is not ideal.</p>
<p><a href="http://www.ytechie.com/post-images/2008/07/holiday-calculator-design.gif"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="97" alt="Holiday-Calculator-Design" src="http://www.ytechie.com/post-images/2008/07/holiday-calculator-design-thumb.gif" width="361" border="0" /></a></p>
<p>Ideally, this class would load the holiday list each time it needs to perform a calculation. The implementation passed into the constructor would be responsible for caching. In fact, we can now easily separate out the caching feature, and the holiday loading feature. Both classes would implement the IHolidayRepository interface and would be chained together. The caching class would take an IHolidayRepository.</p>
<p><strong>Incremental Coding</strong></p>
<p>Following the Agile philosophy, I can now deliver code faster. I don&#8217;t <em>need</em> to add a caching layer. I can have a working application in less time, and then later evaluate if I need to cache the holiday data.</p>
<p><strong>Conclusion</strong></p>
<p>Overall, this design is a little more work, but I think the benefits outweigh the extra classes and interface I needed to create. This design makes it easy to test, and each class has almost no code in it. Reading it and understanding it is extremely simple.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ytechie.com/2008/07/using-objects-or-repository-interface-in-constructor.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
