<?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>Tamir Khason - Just code &#187; Search Results  &#187;  disappointed</title>
	<atom:link href="http://khason.net/search/disappointed/feed/rss2/" rel="self" type="application/rss+xml" />
	<link>http://khason.net</link>
	<description>Take care of the sense, and the sounds will take care of themselves.</description>
	<lastBuildDate>Wed, 25 Jan 2012 16:37:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Self installable and runnable service or how to make generic service and console hybrid</title>
		<link>http://khason.net/dev/self-installable-and-runnable-service-or-how-to-make-generic-service-and-console-hybrid/</link>
		<comments>http://khason.net/dev/self-installable-and-runnable-service-or-how-to-make-generic-service-and-console-hybrid/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 11:08:13 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[DEV]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://khason.net/?p=2192</guid>
		<description><![CDATA[Frankly, I thought that one of basic things in windows development, such as “debagability” and “installability” of services,&#160; were changed for the last 10 years in development environments. However I was disappointed to discover, that nothing actually changed. You still cannot build easy to debug (in command line) service, which is also can be installed [...]
Related posts:<ol>
<li><a href='http://khason.net/dev/rsa-private-key-import-from-pem-format-in-c/' rel='bookmark' title='RSA private key import from PEM format in C#'>RSA private key import from PEM format in C#</a></li>
<li><a href='http://khason.net/dev/video-encoder-and-metadata-reading-by-using-windows-media-foundation/' rel='bookmark' title='Video encoder and metadata reading by using Windows Media Foundation'>Video encoder and metadata reading by using Windows Media Foundation</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Frankly, I thought that one of basic things in windows development, such as “debagability” and “installability” of services,&#160; were changed for the last 10 years in development environments. However I was disappointed to discover, that nothing actually changed. You still cannot build easy to debug (in command line) service, which is also can be installed without special additional tools.</p>
<p><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://khason.net/images/2012/01/image.png" width="397" height="273" /></p>
<p>Even <a href="http://stackoverflow.com/questions/4144019/self-install-windows-service-in-net-c-sharp" target="_blank">ServiceName/ServiceNameInstaller trick</a>, is specific for the current assembly and cannot be used if your base class is not the one you are really using. This is not the only approach. Also, <a href="http://geekswithblogs.net/BlackRabbitCoder/archive/2011/03/01/c-toolbox-debug-able-self-installable-windows-service-template-redux.aspx" target="_blank">there are other methods</a>, which are too complicated to use in the simple project.</p>
<p>So, I decided to write quick basic service which is can be used as common base for self-installable and debugable service development. Let’s start.</p>
<p>First of all we need an abstract service base:</p>
<blockquote><p>public abstract class ServiceProvider : ServiceBase</p>
</blockquote>
<p>Then it identification for derived classes</p>
<blockquote><p>public static string Name;      <br />public static string ProviderKind;</p>
<p>public ServiceProvider(string name) {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ProviderKind = name;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Name = &quot;MagicService.&quot; + ProviderKind;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ServiceName = Name;       <br />&#160;&#160;&#160;&#160;&#160; }</p>
</blockquote>
<p>Now method to start it from the hosting application (e.g. command prompt) or run it if installed.</p>
<blockquote><p>/// &lt;summary&gt;Starts the provider service in interactive mode.&lt;/summary&gt;      <br />public void Start(string[] args) {       <br />&#160;&#160; if (Environment.UserInteractive) {       <br />&#160;&#160;&#160;&#160;&#160; OnStart(args);       <br />&#160;&#160; } else {       <br />&#160;&#160;&#160;&#160;&#160; ServiceBase.Run(this);       <br />&#160;&#160; }       <br />}       </p>
</blockquote>
<p>But how to install it? Normally, if you’ll put class derived from <a href="http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.aspx" target="_blank">Installer</a> and marked as <a href="http://msdn.microsoft.com/en-us/library/2ya9dxy9.aspx" target="_blank">RunInstaller</a>, Installutil.exe can initialize it and install or uninstall the service. </p>
<blockquote><p>public class ServiceProviderInstaller : Installer {      <br />&#160;&#160; private static readonly string ServiceName = ServiceProvider.Name;       <br />&#160;&#160; <br />&#160;&#160; public ServiceProviderInstaller() {       <br />&#160;&#160;&#160;&#160;&#160; var processInstaller = new ServiceProcessInstaller {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Account = ServiceAccount.LocalSystem       <br />&#160;&#160;&#160;&#160;&#160; };</p>
<p>&#160;&#160;&#160;&#160;&#160; var serviceInstaller = new ServiceInstaller {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; DisplayName = &quot;Magic Server &quot; + ServiceProvider.ProviderKind + &quot; Provider&quot;,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Description = &quot;Process the interface to the Magic service &quot; + ServiceProvider.ProviderKind + &quot; provider.&quot;,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ServiceName = ServiceName,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; StartType = ServiceStartMode.Automatic,       <br />&#160;&#160;&#160;&#160;&#160; };       <br />&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160; this.Installers.Add(processInstaller);       <br />&#160;&#160;&#160;&#160;&#160; this.Installers.Add(serviceInstaller);       <br />&#160;&#160; }</p>
</blockquote>
<p>But it works only if installer is defined in the same assembly as service and the service itself can be run. In our case, this is not true. Service is abstract and we allow to run service from any other assembly which is referenced to the base one. So what to do? Simple! Let’s create our own installer. We will create the private instance of installer inside the actual service itself and pass it as additional installer to basic <a href="http://msdn.microsoft.com/en-us/library/system.configuration.install.transactedinstaller.aspx" target="_blank">TransactedInstaller</a>. Also we’ll use calling (the actual running) assembly as the service reference.</p>
<blockquote><p>/// &lt;summary&gt;Installs the provider service in interactive mode.&lt;/summary&gt;      <br />public void Install() {       <br />&#160;&#160; if (Environment.UserInteractive) {       <br />&#160;&#160;&#160;&#160;&#160; var ti = new TransactedInstaller();       <br />&#160;&#160;&#160;&#160;&#160; var spi = new ServiceProviderInstaller();       <br />&#160;&#160;&#160;&#160;&#160; ti.Installers.Add(spi);       <br />&#160;&#160;&#160;&#160;&#160; var path = &quot;/assemblypath=&quot; + Assembly.GetEntryAssembly().Location;       <br />&#160;&#160;&#160;&#160;&#160; var ctx = new InstallContext(&quot;&quot;, new string[] { path });       <br />&#160;&#160;&#160;&#160;&#160; ti.Context = ctx;       <br />&#160;&#160;&#160;&#160;&#160; ti.Install(new Hashtable());       <br />&#160;&#160; }       <br />}       </p>
</blockquote>
<p>The same way we’ll do uninstaller</p>
<blockquote><p>/// &lt;summary&gt;Uninstalls the provider service in interactive mode.&lt;/summary&gt;      <br />public void Uninstall() {       <br />&#160;&#160; if (Environment.UserInteractive) {       <br />&#160;&#160;&#160;&#160;&#160; var ti = new TransactedInstaller();       <br />&#160;&#160;&#160;&#160;&#160; var spi = new ServiceProviderInstaller();       <br />&#160;&#160;&#160;&#160;&#160; ti.Installers.Add(spi);       <br />&#160;&#160;&#160;&#160;&#160; var path = &quot;/assemblypath=&quot; + Assembly.GetEntryAssembly().Location;       <br />&#160;&#160;&#160;&#160;&#160; var ctx = new InstallContext(&quot;&quot;, new string[] { path });       <br />&#160;&#160;&#160;&#160;&#160; ti.Context = ctx;       <br />&#160;&#160;&#160;&#160;&#160; ti.Uninstall(null);       <br />&#160;&#160; }       <br />}       </p>
</blockquote>
<p>We almost done, the only problem is Component Designer which wants to be run when you click on any class derived from ServiceBase. I know that Visual Studio developers wanted to do our life easier, but this designer (especially one cannot initialize abstract classes) is very annoying. In in order to get rid of this thing we can override <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.designercategoryattribute.aspx" target="_blank">DesignerCategory</a> of the class and tell VS that it is not SeriviceComponent anymore. To do this all we need is one small attribute set on classes</p>
<blockquote><p>[System.ComponentModel.DesignerCategory(&quot;&quot;)]      <br />public abstract class ServiceProvider : ServiceBase {       <br />…       </p>
<p>[RunInstaller(true), System.ComponentModel.DesignerCategory(&quot;&quot;), SerializableAttribute]      <br />public class ServiceProviderInstaller : Installer {       </p>
</blockquote>
<p>&#160;</p>
<p>Take into account that it should be full reference pass in order to help Visual Studio with fast resolving of references.</p>
<p>We done, let’s put everything together and see what we have and how to use it</p>
<blockquote><p>/// &lt;summary&gt;Provides service class to respond to service control manager (all responses are defaults).&lt;/summary&gt;      <br />[System.ComponentModel.DesignerCategory(&quot;&quot;)]       <br />public abstract class ServiceProvider : ServiceBase {</p>
<p>&#160;&#160; public static string Name;      <br />&#160;&#160; public static string ProviderKind;</p>
<p>&#160;&#160; public ServiceProvider(string name) {      <br />&#160;&#160;&#160;&#160;&#160; ProviderKind = name;       <br />&#160;&#160;&#160;&#160;&#160; Name = &quot;Magic.Provider.&quot; + ProviderKind;       <br />&#160;&#160;&#160;&#160;&#160; ServiceName = Name;       <br />&#160;&#160; }</p>
<p>&#160;&#160; /// &lt;summary&gt;Starts the provider service in interactive mode.&lt;/summary&gt;       <br />&#160;&#160; public void Start(string[] args) {       <br />&#160;&#160;&#160;&#160;&#160; if (Environment.UserInteractive) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; OnStart(args);       <br />&#160;&#160;&#160;&#160;&#160; } else {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ServiceBase.Run(this);       <br />&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160; }</p>
<p>&#160;&#160; /// &lt;summary&gt;Installs the provider service in interactive mode.&lt;/summary&gt;      <br />&#160;&#160; public void Install() {       <br />&#160;&#160;&#160;&#160;&#160; if (Environment.UserInteractive) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var ti = new TransactedInstaller();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var spi = new ServiceProviderInstaller();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ti.Installers.Add(spi);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var path = &quot;/assemblypath=&quot; + Assembly.GetEntryAssembly().Location;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var ctx = new InstallContext(&quot;&quot;, new string[] { path });       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ti.Context = ctx;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ti.Install(new Hashtable());       <br />&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160; }</p>
<p>&#160;&#160; /// &lt;summary&gt;Uninstalls the provider service in interactive mode.&lt;/summary&gt;      <br />&#160;&#160; public void Uninstall() {       <br />&#160;&#160;&#160;&#160;&#160; if (Environment.UserInteractive) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var ti = new TransactedInstaller();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var spi = new ServiceProviderInstaller();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ti.Installers.Add(spi);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var path = &quot;/assemblypath=&quot; + Assembly.GetEntryAssembly().Location;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var ctx = new InstallContext(&quot;&quot;, new string[] { path });       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ti.Context = ctx;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ti.Uninstall(null);       <br />&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160; }       <br />}</p>
<p>[RunInstaller(true), System.ComponentModel.DesignerCategory(&quot;&quot;), SerializableAttribute]      <br />public class ServiceProviderInstaller : Installer {       <br />&#160;&#160; private static readonly string ServiceName = ServiceProvider.Name;       <br />&#160;&#160; <br />&#160;&#160; public ServiceProviderInstaller() {       <br />&#160;&#160;&#160;&#160;&#160; var processInstaller = new ServiceProcessInstaller {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Account = ServiceAccount.LocalSystem       <br />&#160;&#160;&#160;&#160;&#160; };</p>
<p>&#160;&#160;&#160;&#160;&#160; var serviceInstaller = new ServiceInstaller {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; DisplayName = &quot;Magic Service &quot; + ServiceProvider.ProviderKind + &quot; Provider&quot;,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Description = &quot;Process the interface to the Magic service &quot; + ServiceProvider.ProviderKind + &quot; provider.&quot;,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ServiceName = ServiceName,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; StartType = ServiceStartMode.Automatic,       <br />&#160;&#160;&#160;&#160;&#160; };       <br />&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160; this.Installers.Add(processInstaller);       <br />&#160;&#160;&#160;&#160;&#160; this.Installers.Add(serviceInstaller);       <br />&#160;&#160; }</p>
<p>&#160;&#160; protected override void OnCommitted(IDictionary savedState) {      <br />&#160;&#160;&#160;&#160;&#160; base.OnCommitted(savedState);       <br />&#160;&#160;&#160;&#160;&#160; var c = new ServiceController(ServiceName);       <br />&#160;&#160;&#160;&#160;&#160; c.Start();       <br />&#160;&#160; }       <br />}       </p>
</blockquote>
<p>In order to use it, just reference to the hosting assembly and inherit this class</p>
<blockquote><p>&#160;&#160; public abstract class SampleService : ServiceProvider {</p>
<p>&#160;&#160;&#160;&#160;&#160; /// &lt;summary&gt;Creates a new &lt;see cref=&quot;SampleService&quot;/&gt; instance.&lt;/summary&gt;      <br />&#160;&#160;&#160;&#160;&#160; public SampleService()       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : base(&quot;Sample&quot;) {       <br />&#160;&#160;&#160;&#160;&#160; }       <br />}</p>
</blockquote>
<p>And run it from command prompt:</p>
<blockquote><p>class Program {      <br />&#160;&#160; static void Main(string[] args) {       <br />&#160;&#160;&#160;&#160;&#160; var p = new SampleService();       <br />&#160;&#160;&#160;&#160;&#160; if (args.Length &gt; 0) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (args[0] == &quot;/i&quot;){       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; p.Install();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (args[0] == &quot;/u&quot;) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; p.Uninstall();       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160; p.Start(null);       <br />&#160;&#160;&#160;&#160;&#160; Console.Read();       <br />&#160;&#160;&#160;&#160;&#160; p.Stop();       <br />&#160;&#160; }       <br />}       </p>
</blockquote>
<p>We done. The only remaining thing is how to prevent component designer appearance on derived (SampleService) class. As for now I found no way to do this and <a href="http://stackoverflow.com/questions/8984683/how-to-disable-designer-in-derived-classes-in-following-generations" target="_blank">asked collective intelligence to help me with it</a>. Once I’ll have an answer I will update it here.</p>
<p>Be good people and have a good day!</p>
<p><strong>UPD</strong> (25th Jan): The reason for this strange behavior is cached reference assemblies. If you reference your base assembly <strong>before</strong> setting <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.designercategoryattribute.aspx" target="_blank">DesignerCategory</a> attribute, you’ll have to remove it and reference again on all consuming projects after you set it. Another evidence of Visual Studio developers laziness.</p>
<p>Related posts:<ol>
<li><a href='http://khason.net/dev/rsa-private-key-import-from-pem-format-in-c/' rel='bookmark' title='RSA private key import from PEM format in C#'>RSA private key import from PEM format in C#</a></li>
<li><a href='http://khason.net/dev/video-encoder-and-metadata-reading-by-using-windows-media-foundation/' rel='bookmark' title='Video encoder and metadata reading by using Windows Media Foundation'>Video encoder and metadata reading by using Windows Media Foundation</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/dev/self-installable-and-runnable-service-or-how-to-make-generic-service-and-console-hybrid/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Visual Studio Face-to-Face battle</title>
		<link>http://khason.net/tech/visual-studio-face-to-face-battle/</link>
		<comments>http://khason.net/tech/visual-studio-face-to-face-battle/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 12:05:56 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[.NET 4.0]]></category>
		<category><![CDATA[DEV]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[VSTS]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://khason.net/tech/visual-studio-face-to-face-battle/</guid>
		<description><![CDATA[Yesterday Visual Studio 2010 was released. This is very exciting, however from the moment I played with very first preview versions I had concerns regarding the performance of it code editor. So today I had some time to perform small face-to-face battle between different versions of Visual Studio – 2005, 2008 and 2010 (Sorry, I [...]<p/>]]></description>
			<content:encoded><![CDATA[<p>Yesterday Visual Studio 2010 <a href="http://blogs.msdn.com/somasegar/archive/2010/04/11/announcing-visual-studio-2010-and-net-framework-4.aspx" target="_blank">was released</a>. This is very exciting, however from the moment I played with very first preview versions I had concerns regarding the performance of it code editor. So today I had some time to perform small face-to-face battle between different versions of Visual Studio – 2005, 2008 and 2010 (Sorry, I did not found VS2002 to test).</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://khason.net/images/2010/04/image.png" width="398" height="302" /></p>
<h3>Environment</h3>
<p>I used very slow machine with 256Mb of RAM running Windows XP as a reference for comparison. First of all I installed each one of those programs. I used customized installation to install only C# programming modules.</p>
<p>Then I tested cold start (first application start) and hot start (average of 5 forecoming starts), creation and opening of new console application project. And finally the real world test. Typing in, compilation and run of “Hello World” sample. This includes opening of context menus, tools and options.</p>
<p>I used <a href="http://msdn.microsoft.com/en-us/library/aa288463(VS.71).aspx" target="_blank">“Hello World” sample from MSDN</a> for type-in experience. Just for reference, I used small program I wrote to calculate typing speed (this takes into account that most of text is generated by the same macros and shortcuts e.g. “cw”)</p>
<h3>Comparison</h3>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top">&#160;</td>
<td valign="top">VS2005</td>
<td valign="top">VS2008</td>
<td valign="top">VS2010</td>
</tr>
<tr>
<td valign="top">Installation</td>
<td valign="top">10 min</td>
<td valign="top">20 min</td>
<td valign="top">40 min</td>
</tr>
<tr>
<td valign="top">Cold start</td>
<td valign="top">1.2 sec</td>
<td valign="top">3.9 sec</td>
<td valign="top">28 sec</td>
</tr>
<tr>
<td valign="top">Hot start</td>
<td valign="top">0.3 sec</td>
<td valign="top">1.3 sec</td>
<td valign="top">4.5 sec</td>
</tr>
<tr>
<td valign="top">Start new project (Ctrl-Shift-N)</td>
<td valign="top">0.2 sec</td>
<td valign="top">3.2 sec</td>
<td valign="top">2 sec</td>
</tr>
<tr>
<td valign="top">Create new Console Application</td>
<td valign="top">16 sec</td>
<td valign="top">3 sec</td>
<td valign="top">24 sec</td>
</tr>
<tr>
<td valign="top">Clear working screen (Ctrl-A + Del)</td>
<td valign="top">0.4 sec</td>
<td valign="top">0.2 sec</td>
<td valign="top">1.2 sec</td>
</tr>
<tr>
<td valign="top">Type in “Hello World”</td>
<td valign="top">41 sec</td>
<td valign="top">56 sec</td>
<td valign="top">1 min 43 sec</td>
</tr>
<tr>
<td valign="top">Average type rate</td>
<td valign="top">93 wpm</td>
<td valign="top">68 wpm</td>
<td valign="top">35 wpm</td>
</tr>
<tr>
<td valign="top">Average UI response (how long it takes to open menu/hint)</td>
<td valign="top">0.7 sec</td>
<td valign="top">1.6 sec</td>
<td valign="top">3.5 sec</td>
</tr>
<tr>
<td valign="top">Installation/Uninstallation disk delta</td>
<td valign="top">40Mb</td>
<td valign="top">60Mb</td>
<td valign="top">2.3Gb*</td>
</tr>
<tr>
<td valign="top">Memory footprint (for this project)</td>
<td valign="top">6Mb</td>
<td valign="top">17Mb</td>
<td valign="top">65Mb</td>
</tr>
<tr>
<td valign="top">Disk space required</td>
<td valign="top">1.4Gb</td>
<td valign="top">2.6Gb</td>
<td valign="top">3.9Gb</td>
</tr>
</tbody>
</table>
<p>* Can anybody from DevDiv, please, explain me why when I want to install only C# (this is the only checkbox marked during custom installation), you install for me:    <br /><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Untitled" border="0" alt="Untitled" src="http://khason.net/images/2010/04/Untitled.png" width="595" height="571" /></p>
<h3>Conclusion</h3>
<p>There are some new and pretty eye-candies for VS2010, also support for newer compilers and interpreter. However, my final verdict is “<a href="http://khason.net/?s=disappointed">I disappointed</a>”…</p>
<p>I feel a big degradation of productivity between following versions of Visual Studio. In terms of speed, responsiveness and ability to perform everyday developers’ tasks. That’s right, that there are new features, but we should remember that the main purpose of this program is to support writing code.</p>
<p>I hope that MS DevDiv will take this into account and review it understanding of how development environment should be. I, personally, stay with VS2008 without .NET 4.0 (I have my special opinion about this version of .NET, which worse separate post)</p>
<p>If you old enough, you should remember <a href="http://www.adobe.com/products/homesite/" target="_blank">HomeSite</a>. It was beaten by editor named Notepad.exe (or it variants and alternatives) for HTML developers because of it unresponsiveness and unnecessary cumbersomeness of this program. Running after features killed the main purpose – write effective code fast and correct. This how I forecast the future of Visual Studio. Pity me…</p>
<p>&#160;<img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="My hopes" border="0" alt="My hopes" src="http://khason.net/images/2010/04/image1.png" width="439" height="285" /></p>
<p><em>P.S. Sorry, I did not write here for a while. This because of </em><a href="http://khason.net/blog/finally-i-can-reveal-stuff-i-working-for-last-half-year/"><em>a lot of exiting things</em></a><em> I did for the last two years. I promise to write more. Frankly! I swear, I will try to!</em></p>
<p><strong>UPD 14-Apr: </strong>For all people have comments about my production environment and a validity of my measurements there, please see how it looks on my work machine (E8400, 8Gb RAM and NVIDIA GeForce 9600 GT)</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:d96e2dde-a0be-4dea-aafc-98fa2e0fa61e" class="wlWriterEditableSmartContent">
<div><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/12L4qqNdaQo&amp;hl=en"></param><embed src="http://www.youtube.com/v/12L4qqNdaQo&amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"></embed></object></div>
</div>
<p/>]]></content:encoded>
			<wfw:commentRss>http://khason.net/tech/visual-studio-face-to-face-battle/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>TechEd is over – last TechEd related post</title>
		<link>http://khason.net/blog/teched-is-over-%e2%80%93-last-teched-related-post/</link>
		<comments>http://khason.net/blog/teched-is-over-%e2%80%93-last-teched-related-post/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 18:19:00 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[teched]]></category>
		<category><![CDATA[TechedIsrael2008]]></category>
		<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://khason.net/blog/teched-is-over-%e2%80%93-last-teched-related-post/</guid>
		<description><![CDATA[I know, that I made you tired of all those TechEd related posts. So this is the last one (I’ll post full presentation and demo sources later), I promise. Unfortunately, I’ll be unable to attend bloggers’ lunch (my flight is at 8:20 pm), so I want to tell thank to all bloggers, that rapidly posted [...]<p/>]]></description>
			<content:encoded><![CDATA[<p>I know, that I made you tired of <a href="/blogs/tamir/archive/tags/TechedIsrael2008/default.aspx" mce_href="/blogs/tamir/archive/tags/TechedIsrael2008/default.aspx">all those TechEd related posts</a>. So this is the last one (I’ll post full presentation and demo sources later), I promise. Unfortunately, I’ll be unable to attend <a href="http://blogs.microsoft.co.il/blogs/michalnis/archive/2008/04/08/19-00.aspx" mce_href="http://blogs.microsoft.co.il/blogs/michalnis/archive/2008/04/08/19-00.aspx" target="_blank">bloggers’ lunch</a> (my flight is at 8:20 pm), so I want to tell thank to all bloggers, that rapidly posted <a href="http://blogs.microsoft.co.il/tags/TechEdIsrael2008/default.aspx" mce_href="http://blogs.microsoft.co.il/tags/TechEdIsrael2008/default.aspx" target="_blank">TechEd related stuff</a>, to all those who worked hard to prepare such event, to all presenters and visitors (do not forget to fill the survey). The event was good. I’d give it 9 of 10. The point missing point for some, who <a href="http://khason.net/blog/teched-eilat-%e2%80%93-day-two-%e2%80%93-i-disappointed/" mce_href="http://khason.net/blog/teched-eilat-%e2%80%93-day-two-%e2%80%93-i-disappointed/" target="_blank">worked not hard enough</a> to prepare and lectures’ start and end punctuality of some presenters. Overall experience was great. You did it! Thank you and see you on next event. </p>
<p/>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/teched-is-over-%e2%80%93-last-teched-related-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TechEd Eilat 08 – It’s turns better</title>
		<link>http://khason.net/blog/teched-eilat-08-%e2%80%93-it%e2%80%99s-turns-better/</link>
		<comments>http://khason.net/blog/teched-eilat-08-%e2%80%93-it%e2%80%99s-turns-better/#comments</comments>
		<pubDate>Mon, 07 Apr 2008 13:47:47 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[teched]]></category>
		<category><![CDATA[TechedIsrael2008]]></category>

		<guid isPermaLink="false">http://khason.net/blog/teched-eilat-08-%e2%80%93-it%e2%80%99s-turns-better/</guid>
		<description><![CDATA[Referring my last post. TechEd turns to be better for me. It seemed, like I simple choose wrong sessions. Last one I attended was really great 9-9. It returns me to the original idea, that I have really serious competitors for my session See you there tomorrow 10:45@Hilton.<p/>]]></description>
			<content:encoded><![CDATA[<p>Referring <a href="http://khason.net/blog/teched-eilat-%e2%80%93-day-two-%e2%80%93-i-disappointed/" target="_blank">my last post</a>. TechEd turns to be better for me. It seemed, like I simple choose wrong sessions. Last one I attended was really great 9-9. It returns me to the original idea, that I have really serious competitors for <a href="http://khason.net/blog/teched-is-over-the-corner-and-we-are-ready-what-about-you/" target="_blank">my session</a> <img src='http://khason.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  See you there tomorrow 10:45@Hilton.</p>
<p/>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/teched-eilat-08-%e2%80%93-it%e2%80%99s-turns-better/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TechEd Eilat – Day two – I DISAPPOINTED!</title>
		<link>http://khason.net/blog/teched-eilat-%e2%80%93-day-two-%e2%80%93-i-disappointed/</link>
		<comments>http://khason.net/blog/teched-eilat-%e2%80%93-day-two-%e2%80%93-i-disappointed/#comments</comments>
		<pubDate>Mon, 07 Apr 2008 09:44:52 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[blogging general]]></category>
		<category><![CDATA[teched]]></category>
		<category><![CDATA[TechedIsrael2008]]></category>
		<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://khason.net/blog/teched-eilat-%e2%80%93-day-two-%e2%80%93-i-disappointed/</guid>
		<description><![CDATA[TechEd, Eilat, Day two and I&#8217;m very disappointed of what&#8217;s going on here. I cannot give more, then five of ten to any session I attended. I DISAPPOINTED! I do not want to tell the names of those sessions, however it looks like nether of presenters worked too hard to prepare it. I DISAPPOINTED. I [...]<p/>]]></description>
			<content:encoded><![CDATA[<p>TechEd, Eilat, Day two and I&#8217;m very disappointed of what&#8217;s going on here. I cannot give more, then five of ten to any session I attended. <strong>I DISAPPOINTED!</strong> I do not want to tell the names of those sessions, however it looks like nether of presenters worked too hard to prepare it. <strong>I DISAPPOINTED</strong>. I worked more then two weeks to <a href="http://khason.net/blog/teched-is-over-the-corner-and-we-are-ready-what-about-you/" target="_blank">prepare my presentation</a> (incl. repetitions, rewriting, fixing and touching), I have to work two hours more to prepare it finally and I do not know today why I did and will do it. <strong>I DISAPPOINTED</strong>. </p>
<p>The other huge problem, that neither of sessions stared and finished in time and there are voices in coridors about leaving TechEd today&#8230; <strong>I DISAPPOINTED DEEPLY DISAPPOINTED</strong>.</p>
<p><img border="0" alt="200488557-001" src="http://khason.net/images/2008/12/200488557-001-dc53a697-a8ed-45bf-a3c7-714612295520.jpg" width="506" height="337" /></p>
<p/>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/teched-eilat-%e2%80%93-day-two-%e2%80%93-i-disappointed/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>TechEd day 1 – keynotes – nice presentation, in spite of some bugs</title>
		<link>http://khason.net/blog/teched-day-1-%e2%80%93-keynotes-%e2%80%93-nice-presentation-in-spite-of-some-bugs/</link>
		<comments>http://khason.net/blog/teched-day-1-%e2%80%93-keynotes-%e2%80%93-nice-presentation-in-spite-of-some-bugs/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 15:33:11 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[teched]]></category>
		<category><![CDATA[TechedIsrael2008]]></category>
		<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://khason.net/blog/teched-day-1-%e2%80%93-keynotes-%e2%80%93-nice-presentation-in-spite-of-some-bugs/</guid>
		<description><![CDATA[I&#8217;m in Eilat, in TechEd event. First impression &#8211; very good arrangements. Upon by arrival, the room was ready and it was big and clean. First I couch by some of partners and friends. Then, I was in bloggers meeting, where received some&#160; nice toys to play with. Now, let&#8217;s speak about first significant event [...]<p/>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m in Eilat, in TechEd event. First impression &#8211; very good arrangements. Upon by arrival, the room was ready and it was big and clean. First I couch by some of partners and friends. Then, I was in bloggers meeting, where received some&#160; nice toys to play with. Now, let&#8217;s speak about first significant event &#8211; the keynotes. Yochai was good, in spite of some technical problem. However, the most problematic one was the fact, that he completely forgot about <a href="http://khason.net/blog/teched-is-over-the-corner-and-we-are-ready-what-about-you/" target="_blank">our promo</a>. Actually, I understand him &#8211; 3.5 hours. Second thing in his presentation was IIS7. I have some problem with this stuff. One of them is how it works on Windows Vista (see the live image about how real TechEd Vista looks like)</p>
<p><img border="0" alt="Real vista from TechEd" src="http://khason.net/images/2008/12/imag0014-53d2b0a4-bc83-4357-a618-921c8f618dd2.jpg" width="640" height="480" /> </p>
<p>Now to our presentation. Actually, after more then 3 days of working to make IIS on Vista work fluently, I was very disappointed and thus, just recompile IIS asapi filter for Apache on Linux. Do not believe me? <a href="http://0x15.net/files/DEV335%20-%20Game%20Development%20Using%20Microsofts%20Latest%20Technologies%20%28Tamir%20Khason%20A.ics" target="_blank">Come to see it live</a>.</p>
<p>So by now, I&#8217;m going to business center to sit with some partners. If you want to, you&#8217;re welcome to catch me there for next hour. See ya and wait for upcoming updates.</p>
<p/>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/teched-day-1-%e2%80%93-keynotes-%e2%80%93-nice-presentation-in-spite-of-some-bugs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VS2005 SP1 update for Vista is rather pity</title>
		<link>http://khason.net/blog/vs2005-sp1-update-for-vista-is-rather-pity/</link>
		<comments>http://khason.net/blog/vs2005-sp1-update-for-vista-is-rather-pity/#comments</comments>
		<pubDate>Thu, 08 Mar 2007 11:45:48 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[help]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[VSTS]]></category>

		<guid isPermaLink="false">http://khason.net/blog/vs2005-sp1-update-for-vista-is-rather-pity/</guid>
		<description><![CDATA[I was rather disappointed by the new patch for Visual Studio 2005 SP1 for Windows Vista. WTF, the most significant problems such as re-rendering, JIT and elevated account requirement were addressed, but not solved. So what the patch is really for?<p/>]]></description>
			<content:encoded><![CDATA[<p>I was rather disappointed by the <a href="http://blogs.microsoft.co.il/blogs/dudub/archive/2007/03/07/Visual-Studio-2005-Service-Pack-1-Update-for-Windows-Vista.aspx" target="_blank">new patch for Visual Studio 2005 SP1 for Windows Vista</a>. WTF, the most significant problems such as <a href="http://support.microsoft.com/default.aspx?scid=929470" target="_blank">re-rendering, JIT and elevated account requirement</a> were addressed, but not solved. So what the patch <a href="http://msdn2.microsoft.com/en-us/vstudio/aa948853.aspx" target="_blank">is really for</a>?</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="265" src="http://khason.net/images/2008/12/studiorender5b25d.jpg" width="693" border="0"/></p>
<p/>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/vs2005-sp1-update-for-vista-is-rather-pity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Good Icons editor</title>
		<link>http://khason.net/blog/good-icons-editor/</link>
		<comments>http://khason.net/blog/good-icons-editor/#comments</comments>
		<pubDate>Fri, 02 Mar 2007 13:17:44 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[My tools]]></category>
		<category><![CDATA[promo]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://khason.net/blog/good-icons-editor/</guid>
		<description><![CDATA[Lack of VS icon editor? You are not alone. Recently I looked for freeware program to create and edit icons and I found one. Let me introduce IcoFX. Sufficient features and&#160;useful interface. I was disappointed, that the program has installer, but it can run from Disk-On-Key as well (either open msi and pick it out [...]<p/>]]></description>
			<content:encoded><![CDATA[<p>Lack of VS icon editor? You are not alone. Recently I looked for freeware program to create and edit icons and I found one. Let me introduce <a href="http://icofx.xhost.ro/" target="_blank">IcoFX</a>. Sufficient features and&nbsp;useful interface. I was disappointed, that the program has installer, but it can run from Disk-On-Key as well (either open msi and pick it out or install-copy exe-uninstall)</p>
<p>Here is the list of this soft features:</p>
<ul>
<li>Vista support</li>
<li>Alpha channel support</li>
<li>Bach processing</li>
<li>Some effects (not really useful)</li>
<li>Support for icons upto 255X255X32bit</li>
<li>Import/Export (from assemblies as well with transparency support)</li>
<li>Blur or Sharp brush edges (this one is extremely important for icons creation)</li>
<li>Rotatings</li>
<li>File types conversion (with PNG support)</li>
</ul>
<p>The really missing future &#8211; stroke, but anyhow, the program is great. <a href="http://icofx.xhost.ro/files/icofxsetup.zip" target="_blank">Download</a> and use it</p>
<p/>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/good-icons-editor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

