<?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>All Things IT Blog &#187; Microsoft .NET 3.0 / WinFX</title>
	<atom:link href="http://www.enusbaum.com/blog/category/microsoft-net-30-winfx/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.enusbaum.com/blog</link>
	<description>My little nerded out corner of the Internets!</description>
	<lastBuildDate>Tue, 18 Oct 2011 20:22:58 +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>.NET StringBuilder &#8212; Fast, but not as fast as you think!</title>
		<link>http://www.enusbaum.com/blog/2009/05/net-stringbuilder-fast-but-not-as-fast-as-you-think/</link>
		<comments>http://www.enusbaum.com/blog/2009/05/net-stringbuilder-fast-but-not-as-fast-as-you-think/#comments</comments>
		<pubDate>Thu, 28 May 2009 20:18:47 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[C# Programming]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Optimization]]></category>
		<category><![CDATA[.NET Profiler]]></category>
		<category><![CDATA[.NET Profiling]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[C# Optimization]]></category>
		<category><![CDATA[C# String Concatenation]]></category>
		<category><![CDATA[C# String Manipulation]]></category>
		<category><![CDATA[C# Strings]]></category>
		<category><![CDATA[StringBuilder]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/?p=294</guid>
		<description><![CDATA[StringBuilder: Friend or Foe?]]></description>
			<content:encoded><![CDATA[<p>I recently ran into a situation where I was tasked to profile some .NET code and do some optimizations anywhere hot spots popped up. I was amazed to find out that one of the BIGGEST offenders in our code block was a simple call to <strong>StringBuilder.Append(char)</strong>. I had to take a step back and scratch my head and wonder if my profiler was confused.</p>
<p>I re-ran some tests using the <strong>StopWatch</strong> class to hard code some metrics into the application and they also confirmed the findings. What&#8217;s up? How could a class that everyone says you can use to your hearts content when it came to string concatenation was failing me?</p>
<p>Turns out, it was a mix of misuse and a common misconception about the <a title="MSDN Documentation -- StringBuilder Class" href="http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx" target="_blank">StringBuilder Class</a>.</p>
<p><span id="more-294"></span></p>
<p>One of the first things you learn while picking up .NET is that the <a title="MSDN Documentation -- StringBuilder Class" href="http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx" target="_blank">StringBuilder Class</a> is your friend when it comes to concatenating large strings in memory. It beats the pants off of <a title="MSDN Documentation -- String.Concat Method" href="http://msdn.microsoft.com/en-us/library/system.string.concat.aspx" target="_blank">String.Concat</a> and <a title="MSDN Documentation -- String.Format Method" href="http://msdn.microsoft.com/en-us/library/system.string.format.aspx" target="_blank">String.Format</a>, while also being a mutable object in the Framework utilizing an in-memory buffer.</p>
<p>I used <a title="Homepage -- JetBrains dotTrace Profiler" href="http://www.jetbrains.com/profiler/" target="_blank">JetBrains dotTrace</a> to help profile the application and it was very evident from the get-go that StringBuilder was causing the whole process to slow down.</p>
<p>The nature of my application was basically reading in a text buffer 1 character as a time, and using the <strong>StringBuilder</strong> as an output buffer. So for a 1k file, The method <strong>Append(char)</strong> would be called 1024 times. A 600k file would call <strong>Append(char)</strong> 614,400 times.</p>
<p>So why was I getting burned in execution time? The issue turned out to be two fold.</p>
<p>First, there&#8217;s overhead cost to the call. I don&#8217;t care how lightweight your method is, if you&#8217;re calling it <span style="text-decoration: underline;"><strong>SIX HUNDRED THOUSAND TIMES</strong></span>, it&#8217;s going to take a bit. Let alone a method who handles a string buffer in memory and string manipulation. So basically, no matter how fast StringBuilder actually is, it&#8217;s not a free call and you should consider the fact that the call still has overhead when architecting your solution.</p>
<p>Architecture brings me to my second point. While writing each character individually made sense initally, it seems that it was just lazy <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  The optimized route would have been calling Append with a SUBSTRING of the input buffer, this way we avoid the overhead of multiple calls by writing all the neccisary data in one big blob.</p>
<p>So 600,000 calls to <strong>StringBuilder.Append(char)</strong> becomes only a few hundred calls to <strong>StringBuilder.Append(string.Substring(start, count))</strong>. Sure, the Substring Virtual Method itself has overhead, but it&#8217;s still less than the thousands of calls to <strong>Append(char)</strong> that we&#8217;re saving ourself <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Conclusion?</p>
<p>StringBuilder is fast, but it&#8217;s not free. Take this into consideration when utilizing it while appending large data sets in small chunks. <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Cheers!</p>
<div class="su-linkbox" id="post-294-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2009/05/net-stringbuilder-fast-but-not-as-fast-as-you-think/&quot;&gt;.NET StringBuilder &#8212; Fast, but not as fast as you think!&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2009/05/net-stringbuilder-fast-but-not-as-fast-as-you-think/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WWWinamp v4.2 Build 2948 (Beta)</title>
		<link>http://www.enusbaum.com/blog/2008/01/wwwinamp-v42-build-2948-beta/</link>
		<comments>http://www.enusbaum.com/blog/2008/01/wwwinamp-v42-build-2948-beta/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 20:26:26 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[WWWinamp]]></category>
		<category><![CDATA[.NET Framework 3.5]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2008/01/27/wwwinamp-v42-build-2948-beta/</guid>
		<description><![CDATA[The new version of WWWinamp has finally arrived! This version of WWWinamp requires that you have the Microsoft .NET Framework 3.5 installed. You can get this from Microsoft.com by clicking here. I&#8217;m calling it beta because a -lot- has changed behind the scenes and I did my best to test every feature but I might [...]]]></description>
			<content:encoded><![CDATA[<p>The new version of WWWinamp has finally arrived!</p>
<p>This version of WWWinamp requires that you have the Microsoft .NET Framework 3.5 installed. You can get this from Microsoft.com by clicking <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=333325FD-AE52-4E35-B531-508D977D32A6&amp;displaylang=en" title="Microsoft.com -- Microsoft .NET Framework 3.5" target="_blank">here</a>.</p>
<p>I&#8217;m calling it beta because a -lot- has changed behind the scenes and I did my best to test every feature but I might have missed a few bugs here and there. If you&#8217;re not comfortable running unstable version of software, then I suggest you install the previous release of WWWinamp v4.1 Build 2809. You can get it from <a href="http://www.enusbaum.com/blog/2007/09/10/wwwinamp-v41-build-2809/" title="WWWinamp v4.1 Build 2809" target="_blank">here</a>.</p>
<p>What&#8217;s new in this version of WWWinamp?</p>
<ul>
<li>[HTTP] Recoded processing of inbound HTTP Requests</li>
<li>[HTTP] Fixed Defect #46: Processing HTTP Auth header even if one isn&#8217;t present</li>
<li>[WCF] Small Optimizations</li>
<li><strong>Requires Microsoft .NET Framework 3.5</strong></li>
<li>Autoupdate Checks for new release on startup of WWWinamp (can be disabled in config)</li>
<li>Minor UI Fixes</li>
</ul>
<p>This version of WWWinamp is mostly a code cleanup and conversion to the .NET Framework 3.5. The source code now weighs in at a 300+ lines of code lighter than the previous version, while still maintaining the same functionality. I&#8217;m currently working on a Silverlight skin for WWWinamp which interfaces with the WCF endpoint for greater control and seamless use. Expect that to be out in the next month or so&#8230; well, perhaps longer <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I&#8217;m not too good with graphics and UI stuff, so I&#8217;ll do the best I can.</p>
<p>I also took the time and added a lot of comments to the WWWinamp CONFIG file. This should help users figure out what each configuration option means and their different settings. Hopefully this should help lower the amount of e-Mail I get from people who are getting errors because WWWinamp isn&#8217;t configured properly <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Again, this is a BETA version and might not work 100% properly&#8230; it could have some personality <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  But I believe it&#8217;s stable enough for release.</p>
<p>Share and enjoy!</p>
<p><strong>WWWinamp v4.2 Build 2948</strong> &#8211; <a href="http://www.enusbaum.com/wwwinamp/WWWinamp42_build2948.zip" target="_blank" title="WWWinamp v4.2 Build 2948">Download</a> (56k)</p>
<div class="su-linkbox" id="post-79-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2008/01/wwwinamp-v42-build-2948-beta/&quot;&gt;WWWinamp v4.2 Build 2948 (Beta)&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2008/01/wwwinamp-v42-build-2948-beta/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>A new version of WWWinamp is coming&#8230; I SWEAR!</title>
		<link>http://www.enusbaum.com/blog/2008/01/a-new-version-of-wwwinamp-is-coming-i-swear/</link>
		<comments>http://www.enusbaum.com/blog/2008/01/a-new-version-of-wwwinamp-is-coming-i-swear/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 04:00:42 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[C# Programming]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[WWWinamp]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2008/01/21/a-new-version-of-wwwinamp-is-coming-i-swear/</guid>
		<description><![CDATA[Hello Everyone! I&#8217;m currently working on the latest version of WWWinamp after taking another hiatus from the project in order to clear my head and work on some other fun things such as the previously mentioned XNA projects The next version of WWWinamp will be targeted for the .NET 3.5 Framework and you will need [...]]]></description>
			<content:encoded><![CDATA[<p>Hello Everyone!</p>
<p>I&#8217;m currently working on the latest version of WWWinamp after taking another hiatus from the project in order to clear my head and work on some other fun things such as the <a href="http://www.enusbaum.com/blog/2007/12/28/2d-wndrpong-using-the-microsoft-xna-game-studio-v20/" title="2D WndrPong! using the Microsoft XNA Game Studio v2.0!" target="_blank">previously mentioned</a> XNA projects  <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The next version of WWWinamp will be targeted for the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=333325FD-AE52-4E35-B531-508D977D32A6&amp;displaylang=en" title="Microsoft .NET Framework 3.5" target="_blank">.NET 3.5 Framework</a> and you will need to have it installed on your machine in order to run WWWinamp. Most of the changes in this version are behind the scenes and will probably be transparent to you, the user. BUT, some visible changes in the upcoming version of WWWinamp 4.2 will be:</p>
<ul>
<li><strong>Automatic Version Checking for new releases of WWWinamp </strong></li>
<li><strong>Ability to enable or disable Automatic Version Checking  </strong></li>
<li><strong>Ability to enable or disable Windows Vista warning message<br />
</strong></li>
<li><strong>Improved performance under load</strong></li>
</ul>
<p>I know, nothing earth shattering on the horizon. &#8220;Why is this?&#8221; you might as. Well, the honest reason is that I haven&#8217;t received any bug reports with issues that weren&#8217;t related to a misconfiguration or user error. This is a good thing! It means that WWWinamp is stable and there aren&#8217;t any horrible bugs that continue to nag users. The downside to this is that because WWWinamp is pretty feature rich as is, I&#8217;m running low on ideas that could be implemented.</p>
<p>An idea I&#8217;ve tossed about and am thinking about trying out is creating a WWWinamp .NET assembly for user within your own Windows or ASP.NET applications developed using the .NET framework. The assembly would handle the media library and searching of the library so you wouldn&#8217;t have to code your own database and file searching routines, as well as handling the unmanaged code required to interface with <a href="http://www.winamp.com/" title="WinAmp -- It really whips the llamas ass!" target="_blank">Winamp</a> (if it&#8217;s running locally on the WWWinamp machine) or communicating via WCF to a remote instance of WWWinamp running the WCF daemon.</p>
<p>I think that between the WWWinamp Server and my proposed WWWinamp Assembly, that&#8217;d give both advanced and novice users full control over their setup. <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>As I mentioned in a <a href="http://www.enusbaum.com/blog/2007/12/05/wwwinamp-is-being-converted-to-net-framework-v35/" title="WWWinamp is being converted to .NET Framework v3.5!" target="_blank">previous post</a>, I&#8217;ve moved WWWinamp into Visual Studio 2008 with Team Foundation Server. Within the latest version of Visual Studio 2008 there is a set of <a href="http://blogs.msdn.com/fxcop/archive/2007/02/28/announcing-visual-studio-code-metrics.aspx" title="Announcing Visual Studio Code Metrics!" target="_blank">code analysis tools</a> which calculate such items as Code Maintainability and Cyclomatic Complexity. I ran it on WWWinamp and it scored the following:</p>
<p><strong>Maintainability Index:</strong> 83 (out of 100)</p>
<p><strong>Cyclomatic Complexity:</strong> 636</p>
<p><strong>Depth of Inheritance:</strong> 7</p>
<p><strong>Class Coupling:</strong> 151</p>
<p><strong>Lines of Code:</strong> 1,829 (!!)</p>
<p>After over a year, I think WWWinamp has gotten better and continues to improve with every version!</p>
<p>Big thanks to everyone for their support and keep your eyes peeled here for the latest version of WWWinamp!</p>
<div class="su-linkbox" id="post-73-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2008/01/a-new-version-of-wwwinamp-is-coming-i-swear/&quot;&gt;A new version of WWWinamp is coming&#8230; I SWEAR!&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2008/01/a-new-version-of-wwwinamp-is-coming-i-swear/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Update on WWWinamp and my life in general</title>
		<link>http://www.enusbaum.com/blog/2007/11/update-on-wwwinamp-and-my-life-in-general/</link>
		<comments>http://www.enusbaum.com/blog/2007/11/update-on-wwwinamp-and-my-life-in-general/#comments</comments>
		<pubDate>Sat, 03 Nov 2007 05:54:02 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[C# Programming]]></category>
		<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[WWWinamp]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2007/11/02/update-on-wwwinamp-and-my-life-in-general/</guid>
		<description><![CDATA[Hello Everyone! I thought I&#8217;d post a small update on what&#8217;s going on in my little world as well as the status of WWWinamp and other associated projects. I hope that everyone is enjoying WWWinamp and the work I&#8217;ve put into it! I enjoy providing it as much as I love hearing from my users. [...]]]></description>
			<content:encoded><![CDATA[<p>Hello Everyone!</p>
<p>I thought I&#8217;d post a small update on what&#8217;s going on in my little world as well as the status of WWWinamp and other associated projects.</p>
<p>I hope that everyone is enjoying WWWinamp and the work I&#8217;ve put into it! I enjoy providing it as much as I love hearing from my users. So please, if you have any feedback or questions, send them to <strong>WWWINAMP AT</strong><em>nospam</em><strong> ENUSBAUM.COM</strong> (you know what I mean). I try to reply to each user request as quickly as time allows.</p>
<p>So where do things stand? Well, things have been at a bit of a stand still for the last month or so. On top of my wife and I moving into a new place, we were also impacted by the wildfires that swept through San Diego county in October. Because of this, I haven&#8217;t been able to dedicate too much time to development projects.</p>
<p>Now that things are starting to settle back down, I&#8217;ve picked up the code base and started to tinker away once again. I&#8217;m currently working on a WWWinamp WPF XBAP using XAML. Lots of acronyms, I know. But basically it&#8217;ll be as if you&#8217;re running WinAmp within the browser, and then have that browser copy of WinAmp control WWWinamp using it&#8217;s WCF endpoint. This would be another real world use of the WCF endpoint.</p>
<p>I know some people use Mac as well (I&#8217;m included, I&#8217;ve been using my PowerPC Notebook now for a couple years), so I&#8217;m going to try to write a class or two using Coaca and Objective-C to interface with the WCF endpoint in WWWinamp using SOAP. This way, it might be possble to write native OSX applications that can also control WWWinamp remotely.</p>
<p>So anyways, that&#8217;s a quick status update. I hope to have an updated build of WWWinamp out by the end of next week which will include some bug fixes and a couple new features which are from the v3.0 branch. These are being added at the request of user e-Mails. So keep &#8216;em coming!</p>
<p>Cheers!</p>
<div class="su-linkbox" id="post-48-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2007/11/update-on-wwwinamp-and-my-life-in-general/&quot;&gt;Update on WWWinamp and my life in general&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2007/11/update-on-wwwinamp-and-my-life-in-general/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Getting an error every time you start WWWinamp v4.1?</title>
		<link>http://www.enusbaum.com/blog/2007/10/getting-an-error-every-time-you-start-wwwinamp-v41/</link>
		<comments>http://www.enusbaum.com/blog/2007/10/getting-an-error-every-time-you-start-wwwinamp-v41/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 16:08:31 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[C# Programming]]></category>
		<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[WWWinamp]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2007/10/12/getting-an-error-every-time-you-start-wwwinamp-v41/</guid>
		<description><![CDATA[Are you getting the following error every time you start WWWinamp? [csharp] System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize &#8212;> System.Configuration.ConfigurationErrorsException: Unrecognized configuration section system.serviceModel. (C:\WWWinamp\WWWinamp.exe.Config line 67) at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal) at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors) at System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) &#8212; End of inner exception stack trace &#8212; at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) at System.Configuration.ConfigurationManager.GetSection(String sectionName) at System.Configuration.ConfigurationManager.get_AppSettings() at [...]]]></description>
			<content:encoded><![CDATA[<p>Are you getting the following error every time you start WWWinamp?<br />
[csharp]<br />
System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize &#8212;> System.Configuration.ConfigurationErrorsException: Unrecognized configuration section system.serviceModel. (C:\WWWinamp\WWWinamp.exe.Config line 67)<br />
at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)<br />
at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors)<br />
at System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()<br />
at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)<br />
&#8212; End of inner exception stack trace &#8212;<br />
at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)<br />
at System.Configuration.ConfigurationManager.GetSection(String sectionName)<br />
at System.Configuration.ConfigurationManager.get_AppSettings()<br />
at ENusbaum.Applications.WWWinamp.Classes.AppConfiguration.get_configWWWinampStartHTTP()<br />
at ENusbaum.Applications.WWWinamp.Forms.frmMain.Form1_Load(Object sender, EventArgs e)<br />
[/csharp]</p>
<p>This is WWWinamp&#8217;s friendly way of saying that you do not have the Microsoft .NET Framework v3.0 installed. You can download it from Microsoft <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=10CC340B-F857-4A14-83F5-25634C3BF043&#038;displaylang=en" target="_blank" title="Microsoft -- Download link for the Microsoft .NET Framework v3.0">here</a>.</p>
<p>Cheers! <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="su-linkbox" id="post-46-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2007/10/getting-an-error-every-time-you-start-wwwinamp-v41/&quot;&gt;Getting an error every time you start WWWinamp v4.1?&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2007/10/getting-an-error-every-time-you-start-wwwinamp-v41/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WWWinamp v4.1 WCF Client Example (Update for Build 2809)</title>
		<link>http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-wcf-client-example-update-for-build-2809/</link>
		<comments>http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-wcf-client-example-update-for-build-2809/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 03:32:22 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[C# Programming]]></category>
		<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[WWWinamp]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2007/09/10/wwwinamp-v41-wcf-client-example-update-for-build-2809/</guid>
		<description><![CDATA[This is an update to the original WWWinamp WCF Client Example (please read the original post for configuration and help). This update adds support for the new WWWinampGetStatus() method. This method was added so the WCF could could easily access information on WinAmp and WWWinamp including the current configuration values. Supported values: CommandName &#8220;CURRENT_SONG&#8221; CommandValue [...]]]></description>
			<content:encoded><![CDATA[<p>This is an update to the original <a title="WWWinamp WCF Client Example" target="_blank" href="http://www.enusbaum.com/blog/2007/08/25/wwwinamp-v41-wcf-client-example/">WWWinamp WCF Client Example</a> (please read the original post for configuration and help).</p>
<p>This update adds support for the new <strong>WWWinampGetStatus</strong>() method. This method was added so the WCF could could easily access information on WinAmp and WWWinamp including the current configuration values.<br />
Supported values:</p>
<ul>
<li><strong>CommandName</strong></li>
<ul>
<li><em>&#8220;CURRENT_SONG&#8221;</em></li>
<ul>
<li><strong>CommandValue</strong></li>
<ul>
<li><em>&#8220;TITLE&#8221;</em> &#8211; Returns Title of Current Song</li>
<li><em>&#8220;NUMBER&#8221;</em> &#8211; Returns Playlist Number or Current Song</li>
<li><em>&#8220;BITRATE&#8221;</em> &#8211; Returns Bitrate of Current Song</li>
<li><em>&#8220;SAMPLERATE&#8221;</em> &#8211; Returns Sample Rate of Current Song</li>
<li><em>&#8220;LENGTH&#8221;</em> &#8211; Returns Length of Current Song (in Milliseconds)</li>
<li><em>&#8220;ELAPSED&#8221;</em> &#8211; Returns Elapsed Time of current Song (in Milliseconds, -1 if Stopped)</li>
<li><em>&#8220;STATUS&#8221;</em> &#8211; Returns Playing Status of Current Song (Playing, Paused, Stopped)</li>
</ul>
</ul>
<li><em>&#8220;LIBRARY&#8221;</em></li>
<ul>
<li><strong>CommandValue</strong></li>
<ul>
<li><em>&#8220;SIZE&#8221;</em> &#8211; Returns the size of the Library (Number of Files)</li>
</ul>
</ul>
<li>&#8220;PLAYLIST&#8221;</li>
</ul>
<ul>
<ul>
<li><strong>CommandValue</strong></li>
<ul>
<li><em>&#8220;SIZE&#8221;</em> &#8211; Returns the size of the Playlist (Number or Files)</li>
<li><em>&#8220;POSITION&#8221;</em> &#8211; Returns the current position of WinAmp in the Playlist</li>
</ul>
</ul>
<li>&#8220;CONFIG&#8221;</li>
<ul>
<li><strong>CommandValue</strong></li>
<ul>
<li>WWWinamp Config Value Defined in WWWinamp.config (i.e. <em>&#8220;WWWinamp.Media.HomeDirectory&#8221;</em>)</li>
</ul>
</ul>
</ul>
</ul>
<p>Please let me know if you encounter any errors while testing this new method!</p>
<p>Cheers!</p>
<p>WWWinamp WCF Client Example for WWWinamp Build 2809 &#8211; <a title="WWWinamp WCF Client Example" target="_blank" href="http://www.enusbaum.com/wwwinamp/WWWinamp_WCF_WindowsClient_b2809.zip">Download</a> (14k)</p>
<div class="su-linkbox" id="post-41-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-wcf-client-example-update-for-build-2809/&quot;&gt;WWWinamp v4.1 WCF Client Example (Update for Build 2809)&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-wcf-client-example-update-for-build-2809/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WWWinamp v4.1 Build 2809</title>
		<link>http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-build-2809/</link>
		<comments>http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-build-2809/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 03:12:11 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[WWWinamp]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2007/09/10/wwwinamp-v41-build-2809/</guid>
		<description><![CDATA[Hello Everyone! The latest build of WWWinamp is good to go. I&#8217;ve been trying to expand out the WCF Endpoint to include as much information to the client as possible. This should allow a remote application access to every resource that WWWinamp has available locally. WWWinamp v4.1 Build 2809 includes the following fixes/changes: [WCF] Added [...]]]></description>
			<content:encoded><![CDATA[<p>Hello Everyone!</p>
<p>The latest build of WWWinamp is good to go. I&#8217;ve been trying to expand out the WCF Endpoint to include as much information to the client as possible. This should allow a remote application access to every resource that WWWinamp has available locally.</p>
<p>WWWinamp v4.1 Build 2809 includes the following fixes/changes:</p>
<ul>
<li>[WCF] Added WWWinampGetStatus() Method to retrieve information on WinAmp and the current file</li>
<li>[HTTP] Fixed script parsing issue when a file contained multiple HTML comment tags</li>
<li>[HTTP] Added optional Google AdWords to help support program</li>
<li>Minor UI Fixes</li>
</ul>
<p>One of the small changes to this version is a small Google AdWords banner on the playlist screen. This is an optional script tag which can be removed. Leaving in this small banner will help support WWWinamp.</p>
<p>I&#8217;m also going to release an updated WWWinamp WCF Client Example program which includes the additional functionality which is included in Build 2809.</p>
<p>Again, I ask users of WWWinamp to submit their Error Logs so we can make WWWinamp a better product!<br />
Cheers!</p>
<p><strong>WWWinamp v4.1 Build 2809</strong> &#8211; <a href="http://www.enusbaum.com/wwwinamp/WWWinamp41_build2809.zip" target="_blank" title="Download WWWinamp v4.1 Build 2809">Download </a>(57k)</p>
<p><strong>UPDATE:</strong> The new WCF Example Client can be found <a href="http://www.enusbaum.com/blog/2007/09/10/wwwinamp-v41-wcf-client-example-update-for-build-2809/" title="WWWinamp WCF Example Client (Build 2809 Update)">here</a>. It includes examples on how to use the new method <strong>WWWinampGetStatus()</strong> as well as a few bug fixes. The C# source code for this example is provided. For development environment prerequisites and setup help, please read <a href="http://www.enusbaum.com/blog/2007/08/25/wwwinamp-v41-wcf-client-example/" target="_blank" title="WWWinamp WCF Example Client Setup and Help">this</a> post.</p>
<div class="su-linkbox" id="post-40-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-build-2809/&quot;&gt;WWWinamp v4.1 Build 2809&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-build-2809/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WWWinamp v4.1 Build 2800</title>
		<link>http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-build-2800/</link>
		<comments>http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-build-2800/#comments</comments>
		<pubDate>Sun, 02 Sep 2007 01:59:45 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[WWWinamp]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2007/09/01/wwwinamp-v41-build-2800/</guid>
		<description><![CDATA[A big THANKS to all who submitted their WWWinamp Error Logs to me. I was able to track down a couple of nagging issues for this minor bug-fix build. Bugs fixed in Build 2800 are: Fixed error when trying to generate playlist when the playlist was empty Fixed error when trying to generate playlist and [...]]]></description>
			<content:encoded><![CDATA[<p>A big <strong>THANKS</strong> to all who submitted their WWWinamp Error Logs to me. I was able to track down a couple of nagging issues for this minor bug-fix build.</p>
<p>Bugs fixed in Build 2800 are:</p>
<ul>
<li>Fixed error when trying to generate playlist when the playlist was empty</li>
<li>Fixed error when trying to generate playlist and winamp.m3u can&#8217;t be found</li>
</ul>
<p>I&#8217;m working on getting the WinAmp Status script tags worked into the WCF endpoint. They should be ready to rock with the next release.</p>
<p><strong>WWWinamp v4.1 Build 2800</strong> &#8211; <a target="_blank" title="WWWinamp v4.1 Build 2800" href="http://www.enusbaum.com/wwwinamp/WWWinamp41_build2800.zip">Download</a> (55k)</p>
<p>Cheers!</p>
<div class="su-linkbox" id="post-37-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-build-2800/&quot;&gt;WWWinamp v4.1 Build 2800&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2007/09/wwwinamp-v41-build-2800/feed/</wfw:commentRss>
		<slash:comments>-3</slash:comments>
		</item>
		<item>
		<title>WWWinamp v4.1 WCF Client Example</title>
		<link>http://www.enusbaum.com/blog/2007/08/wwwinamp-v41-wcf-client-example/</link>
		<comments>http://www.enusbaum.com/blog/2007/08/wwwinamp-v41-wcf-client-example/#comments</comments>
		<pubDate>Sat, 25 Aug 2007 20:37:57 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[C# Programming]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[WWWinamp]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2007/08/25/wwwinamp-v41-wcf-client-example/</guid>
		<description><![CDATA[Along with this new version of WWWinamp, I am also releasing with it a small example of how to interact with WWWinamp using WCF from another application. This example is a Windows Forms application written in C#. Because this is a WCF application which uses .NET 3.0, you will need the following items installed in [...]]]></description>
			<content:encoded><![CDATA[<p>Along with this new version of WWWinamp, I am also releasing with it a small example of how to interact with WWWinamp using WCF from another application. This example is a Windows Forms application written in C#. Because this is a WCF application which uses .NET 3.0, you will need the following items installed in order to use/develop from this example:</p>
<ul>
<li>Microsoft Visual Studio 2005 with SP1</li>
<li>Microsoft .NET Framework 3.0 (<a target="_blank" title="Microsoft .NET 3.0 Framework.. 4tw!" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=10CC340B-F857-4A14-83F5-25634C3BF043&#038;displaylang=en">link</a>)</li>
<li>Visual Studio 2005 extensions for .NET Framework 3.0 (<a target="_blank" title="You need this or Visual Studio won't work right" href="http://www.microsoft.com/downloads/details.aspx?familyid=F54F5537-CC86-4BF5-AE44-F5A1E805680D&#038;displaylang=en">link</a>)</li>
</ul>
<p>Once you load up the C# project in visual studio, you need to make a couple updates to the URI&#8217;s used to access the service:</p>
<ol>
<li>Start WWWinamp and start the WCF Service. Make note of the URI that WWWinamp displays, as this is the URI that your WCF client will need to connect to. It will look like the following:</li>
<ul>
<li><strong> WCF Service Started at http://10.0.1.212:8080/WCFService</strong></li>
</ul>
<li>Update the URI&#8217;s that are listed in <strong>WWWinampWCF.map</strong> and <strong>app.config</strong></li>
<ul>
<li>These files are located:</li>
<li><strong><img alt="Example of which files to update for WWWinamp WCF Example Client" id="image33" src="http://www.enusbaum.com/blog//blog/wp-content/uploads/2007/08/wwwinamp_wcf_example1.gif" /></strong></li>
<li>The values you need to update in <strong>WWWinampWCF.map</strong> are:</li>
<ul>
<li>ServiceReferenceURI</li>
<li>Address</li>
</ul>
<li>The value you need to update in <strong>app.config</strong> is:</li>
<ul>
<li>Address</li>
</ul>
</ul>
</ol>
<p>Once you&#8217;ve updated the Service URI references, you should be able to launch the Example Client.</p>
<p>The WCF password that is used to secure the WCF Endpoint in WWWinamp is stored in the <strong>WWWinamp.config</strong> file under the option WWWinamp.WCF.Authentication. Enter this password in the &#8220;WCF Password&#8221; field and you should be able to communicate with WWWinamp now using WCF!<br />
<img alt="Example of the WWWinamp WCF Client in Action" id="image34" src="http://www.enusbaum.com/blog//blog/wp-content/uploads/2007/08/wwwinamp_wcf_example2.jpg" /></p>
<p>Using this example, you can create your own &#8216;frontend&#8217; for WWWinamp using C#, VB.NET, Java, JSP, you name it!</p>
<p>If you have any questions about the WCF endpoint or bugs that you run into during your development, please let me know!</p>
<p>Cheers!</p>
<p><strong>WWWinamp WCF Client Example</strong> &#8211; <a target="_blank" title="WWWinamp WCF Client Example" href="http://www.enusbaum.com/wwwinamp/WWWinamp_WCF_WindowsClient.zip">Download</a> (14k)</p>
<div class="su-linkbox" id="post-32-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2007/08/wwwinamp-v41-wcf-client-example/&quot;&gt;WWWinamp v4.1 WCF Client Example&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2007/08/wwwinamp-v41-wcf-client-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WWWinamp v4.1 Build 2793</title>
		<link>http://www.enusbaum.com/blog/2007/08/wwwinamp-v41-build-2793/</link>
		<comments>http://www.enusbaum.com/blog/2007/08/wwwinamp-v41-build-2793/#comments</comments>
		<pubDate>Sat, 25 Aug 2007 20:23:16 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[General Software]]></category>
		<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[WWWinamp]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2007/08/25/wwwinamp-v41-build-2793/</guid>
		<description><![CDATA[This is the first version of WWWinamp v4.1 that I feel is somewhat safe for use. I&#8217;m not ready to say it will replace the current version available (4.0 Alpha 13) because this version was completely restructured as far as how the code interacts and operates internally. A lot of the HTTP Daemon was re-written [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first version of WWWinamp v4.1 that I feel is somewhat safe for use. I&#8217;m not ready to say it will replace the current version available (4.0 Alpha 13) because this version was completely restructured as far as how the code interacts and operates internally. A lot of the HTTP Daemon was re-written and major new features, such as the WCF endpoint were added.</p>
<p>So I&#8217;ll just keep updates of v4.1 isolated to my little blog here until I feel it&#8217;s ready to take it&#8217;s rightful place on the front page.</p>
<p>There are a couple changes I think users should take note of before installing this new version of WWWinamp:</p>
<ol>
<li><strong>The new .CONFIG file for storing WWWinamp configuration options</strong></li>
<ul>
<li>This new file is used to store the configuration options that were previously kept within the WWWinamp.XML file. I&#8217;ve moved the options to this file as to utilize the built in Application Configuration Manager native to .NET and replace the custom XML parser I was using to load the options. This allows me better control and error handling when perhaps an invalid option is found or one is completely missing. I&#8217;ve tried to keep the configuration VALUES the same, but even so, <strong>please use caution</strong> when copying your configuration options over from the previous WWWinamp.xml file.</li>
</ul>
<li><strong>The .MANIFEST file included with WWWinamp</strong></li>
<ul>
<li>This file allows WWWinamp to run as Administrator in Windows Vista. It will cause Vista to prompt that WWWinamp would like to run as Administrator. I&#8217;ve left this as an optional file for now. I&#8217;ll see how you guys like it before I sign the EXE with the manifest making it permanently part of the program. If you do not like WWWinamp running as administrator, just delete the file. <strong>WWWinamp has to be running as Administrator in Windows Vista for the WCF endpoint to work.</strong></li>
</ul>
<li><strong>THE MICROSOFT .NET FRAMEWORK 3.0 IS NOW REQUIRED</strong></li>
<ul>
<li>The .NET 3.0 Framework is now required to run WWWinamp. This is due to the addition of WCF support. I&#8217;m sure users will piss and moan about this, but too bad. WCF was too sweet of an addition not to include only because some people refuse to live in the now <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
</ol>
<p>I&#8217;m sure you&#8217;ll find some few new things here or there to play with. Please submit any errors as you get them by simply e-Mailing me your <strong>error.log</strong> file.<br />
Cheers!</p>
<p><strong>WWWinamp v4.1 Build 2793</strong> &#8211; <a target="_blank" title="WWWinamp v4.1 Build 2793" href="http://www.enusbaum.com/wwwinamp/WWWinamp41_build2793.zip">Download</a> (56k)</p>
<div class="su-linkbox" id="post-31-linkbox"><div class="su-linkbox-label">Link to this post!</div><div class="su-linkbox-field"><input type="text" value="&lt;a href=&quot;http://www.enusbaum.com/blog/2007/08/wwwinamp-v41-build-2793/&quot;&gt;WWWinamp v4.1 Build 2793&lt;/a&gt;" onclick="javascript:this.select()" readonly="readonly" style="width: 100%;" /></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2007/08/wwwinamp-v41-build-2793/feed/</wfw:commentRss>
		<slash:comments>-4</slash:comments>
		</item>
	</channel>
</rss>

