<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://eduncan911.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Eric Duncan : Geek Stuff, Computer Programming</title><link>http://eduncan911.com/archive/tags/Geek+Stuff/Computer+Programming/default.aspx</link><description>Tags: Geek Stuff, Computer Programming</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Managed Extensibility Framework (MEF) - Microsoft's Official Inversion of Control Container</title><link>http://eduncan911.com/blog/managed-extensibility-framework-mef-microsofts-official-inversion-of-control-container.aspx</link><pubDate>Tue, 16 Feb 2010 00:50:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6964</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>5</slash:comments><comments>http://eduncan911.com/comments/6964.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6964</wfw:commentRss><description>&lt;p&gt;This new Microsoft feature in .NET Framework 4 is a programming model for reusing components, very similar to those Inversion of Control container frameworks out there that we all know and love (Castle Windsor, Structured Map, their own Unity from the Patterns and Practices team and etc).&amp;nbsp; Now, they have built their own to address the pain points of these frameworks called the Managed Extensibility Framework, or MEF for short.&lt;/p&gt; &lt;p&gt;I was pleasantly surprised this weekend when reading the February 02010's issue of MSDN Magazine.&amp;nbsp; Getting up-to-speed on some new features in .NET Framework 4, I saw the headline "&lt;a href="http://msdn.microsoft.com/en-us/magazine/ee291628.aspx" target="_blank"&gt;Building Composable Apps in .NET 4 with the Managed Extensibility Framework&lt;/a&gt;" by Glenn Block.&amp;nbsp; Yeah, it just rolls off your tongue eh?&amp;nbsp; So I decided I had a few minutes while waiting for the water to boil and scanned the article.&amp;nbsp; I am glad I did.&lt;/p&gt; &lt;p&gt;In this post, I will try to give a very brief overview on how to use MEF coming from a background of using other Inversion of Control (IoC) containers, including some of the gotchas that you must be aware of during the switch.&amp;nbsp; Yeah, you will want to make the switch - the switch away from those other bulky frameworks.&amp;nbsp; I, for one, am officially announcing my abandonment of Castle and Unity for all future projects.&amp;nbsp; Because once you add-in .NET 4's new data annotations for seriously improved validation, mixed with MEF, the only other 3rd party component I am left with is Castle's Logger abstraction - which I am hoping I can find a replacement for with .NET 4's new features.&lt;/p&gt; &lt;h2&gt;MEF Terminology&lt;/h2&gt; &lt;p&gt;First and fore-most for those of you already using an IoC container, it's time for a quick review on what MEF calls a few things and concepts.&amp;nbsp; Below is a table I whipped up to help compare the two terminologies (the MEF portions largely taken from Glenn's excellent article).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="2-15-2010 10-41-32 PM" border="0" alt="2-15-2010 10-41-32 PM" src="http://eduncan911.com/blog/thumbnail/ManagedExtensibilityFrameworkMicrosoftsO_A9C4/2152010104132PM_3.png" width="832" height="649"&gt; &lt;/p&gt; &lt;p&gt;Below is an image from Glenn's article that helps visualize the concepts above of MEF.&lt;/p&gt; &lt;p&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="ee291628_Block_Fig1(en-us,MSDN_10)" border="0" alt="ee291628_Block_Fig1(en-us,MSDN_10)" src="http://eduncan911.com/blog/thumbnail/ManagedExtensibilityFrameworkMicrosoftsO_A9C4/ee291628_Block_Fig1enusMSDN_10.png" width="413" height="288"&gt; &lt;/p&gt; &lt;p&gt;You can see that the overall concept is called Composition.&amp;nbsp; A 'part' is the type or service you want to export.&amp;nbsp; The part (or parts) is marked for Export via Contracts (which are automatic).&amp;nbsp; And other parts that want to ask for another part can do so by Importing.&lt;/p&gt; &lt;h2&gt;Managed Extensibility Framework - Why they built it&lt;/h2&gt; &lt;p&gt;Glenn mentions in the article that they needed a way to compose of reusable types or components in the up coming Visual Studio 2010, Oslo, Acropolis and I am sure many more.&amp;nbsp; What is important to note is why they created one themselves, instead of using Unity or alike.&amp;nbsp; Glenn mentions some key points:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Third-party Extensibility (allowing vendors to generate plug-ins for Visual Studio, or your own application, with minimal work on your part now)  &lt;li&gt;Other frameworks were too heavyweight for a simple programming model.&amp;nbsp; &lt;li&gt;Or other frameworks required too much effort on the part of either the host or the extension developer. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Those last two is what struck a cord with me, and got my attention.&amp;nbsp; Try to sit back and think about how you would allow your applications to be extended with Castle, StructureMap or even Unity.&amp;nbsp; That's a lot of work, a lot of 3rd party assemblies to wire up and configure properly.&amp;nbsp; Especially if you want runtime changes, which MEF supports out of the box with no configuration.&lt;/p&gt; &lt;p&gt;That last point is particularly interesting.&amp;nbsp; All too often I see a released developer framework or contrib project by a group of inspired individuals.&amp;nbsp; This is great and all, but those projects quickly grow to be a large project requiring documentation, support, and even refactorings for performance.&lt;/p&gt; &lt;p&gt;It got me thinking a lot about what I see wrong with Castle - only two things, it's learning curve and size.&amp;nbsp; While Unity was very well documented, it comes with some significant bloat and only what I can refer to as hoop-jumping.&amp;nbsp; The earlier versions of Unity violated Dependency Injection pricipals and concepts (no ctor injection!).&amp;nbsp; Perfect example of refactoring.&lt;/p&gt; &lt;p&gt;MEF really strives to resolve all of these issues, with some extremely simple programming models that I will show you below.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;h2&gt;MEF Programming Models - Straight Attributed Declarations&lt;/h2&gt; &lt;p&gt;Another rip from Glenn's article.&amp;nbsp;&amp;nbsp; But he did it so well.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Developers consume MEF through a programming model.&amp;nbsp; A programming model provides a means to declare components as MEF parts.&amp;nbsp; Out of the box, MEF provides an attributed programming model, which will be the main focus of this article.&amp;nbsp; That model is just one of many possible programming models that MEF enables.&amp;nbsp; MEF's core API is completely agnostic to attributes.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Yep, you heard that right.&amp;nbsp; MEF supports Attributes - for out-of-the-box functionality.&amp;nbsp; No configuration, no setup, nothing.&amp;nbsp; This is so much easier than you are even thinking.&amp;nbsp; So much so, I feel guilty by writing all of this text.&amp;nbsp; Let's just show you how it's done now.&lt;/p&gt; &lt;h2&gt;The Blog "Hello World" Snippets&lt;/h2&gt; &lt;p&gt;As what seems to be an invasion, the common Hello World for websites these days &lt;a href="http://invalidlogic.com/2008/12/22/blogging-apps-are-the-new-hello-world/" target="_blank"&gt;are blogs&lt;/a&gt;.&amp;nbsp; So without further delay, here's some code snippets.&lt;/p&gt; &lt;p&gt;The post object&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
public partial class Post
{
	public Int32 PostId { get; set; }
	public String Title { get; set; }
	public String Description { get; set; }
	public String Body { get; set; }
	public Guid AuthorId { get; set; }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And the PostService that will service the post.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
[Export(typeof(IPostService))]
public class PostService : IPostService
{
	[Import]
	public IPostRepository PostRepository { get; set; }

	public Post FetchById(Int32 postId)
	{
		return
			(from p in PostRepository.GetAll()
			 where p.PostId == postId
			 select p as Post).FirstOrDefault();
	}
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Please note that the above code is not production-code.&amp;nbsp; You should always provide proper cache, concurrency and disposable patterns.&amp;nbsp; This code has been cleaned up for easier reading.&lt;/p&gt;
&lt;p&gt;Notice that the PostService has been marked to be exportable, using a specific contract type for IPostService. Now, you do not have to specify the contract type or name. You can simply use [Export]. But remember, we do want to allow for simply extensibility in the future by plugging in different components to be served during composition.&amp;nbsp; How to do that?&amp;nbsp; Easy, just specify the interface type as the contract.&amp;nbsp; Now how easy was that?&lt;/p&gt;
&lt;p&gt;Also, notice that we have a dependency on IPostRepository. This is marked with the simple [Import] attribute.&amp;nbsp; It does exactly as you think.&amp;nbsp; MEF composes the first part that matches the contract for IPostRepository and supplies it &lt;/p&gt;
&lt;p&gt;Now, some will cry fowl here since I am not directly injecting IPostRepository, or not demanding it in the constructor. Yes, MEF fully supports constructor injection. But, there is a few gotchas you have to be aware of with MEF and constructor composition that I get into a little further down. There's also a new pattern I am designing, when mixed with .NET 4 and some nifty T4 templates I'm tinkering with. That's another article I'll write though. Check the comments, or leave a comment for more information on, "Managing BDD Contexts and Mocks Automatically with .NET 4, MEF, and T4 Templates." Nice. I just named my next blog post. &lt;/p&gt;
&lt;h2&gt;Constructor Dependency Injection - MEF Gotcha&lt;/h2&gt;
&lt;p&gt;As mentioned above, constructor injection is a bit tricky with MEF.&amp;nbsp; There are some rules to follow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MEF assumes all parameters are imports, making the import attribute unnecessary.&amp;nbsp; I leave it up to the reader to figure out how to get around this. 
&lt;li&gt;Recomposition is not supported on constructor parameters.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;That last one is almost a deal breaker for me.&amp;nbsp; Recomposition is a feature of MEF that allows parts to automatically have their imports updated as new matching exports appear in the system.&amp;nbsp; Given, this isn't the case with most websites out there.&amp;nbsp; It's an issue for websites and applications that want to support dynamic (e.g. downloadable) plugins.&amp;nbsp; The plugins would overwrite, at runtime, certain contracts and therefore allow the parts to automatically be updated with the new plugin versions - all without an application restart!&lt;/p&gt;
&lt;p&gt;So with that said (and you will never be developing plugins right?), you can use constructor injection with MEF as follows.&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;&lt;code&gt;
[Export(typeof(IPostService))]
public class PostService : IPostService
{
	private IPostRepository _postRepo;
	private IUserRepository _userRepo

	[ImportingConstructor]
	public PostService(IPostRepository postRepo, IUserRepository userRepo)
	{
		_postRepo = postRepo;
		_userRepo = userRepo;
	}

	public Post FetchById(Int32 postId)
	{
		return
			(from p in _postRepo.GetAll()
			 where p.PostId == postId
			 select p as Post).FirstOrDefault();
	}
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Don't fret too much though about the all-or-nothing constructor.&amp;nbsp; You have a Factory option later on in this post.&lt;/p&gt;
&lt;h2&gt;Bootstrapping MEF for Application Startup&lt;/h2&gt;
&lt;p&gt;Glenn nailed it right on the head when he called this procedure "bootstrapping."&amp;nbsp; I've always struggled with the proper terminology for this composition process with other Inversion of Control containers.&amp;nbsp; Bootstrapping.&amp;nbsp; Yep, just like my hacked MP3 players have.&lt;/p&gt;
&lt;p&gt;To get things up and running, you will need to to insert some bootstrapping code for your application.&amp;nbsp; This code is required with any type of IoC container, and with MEF as well.&lt;/p&gt;
&lt;p&gt;Below is a small code snippet from a typical ASP.NET MVC 2 global.asax file.&amp;nbsp; Notice I added the two using blocks at the end of the Application_Start().&amp;nbsp; This process would be the same for any type of application you have.&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;&lt;code&gt;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;

protected void Application_Start()
{
	AreaRegistration.RegisterAllAreas();

	RegisterRoutes(RouteTable.Routes);

	using (var catalog = new DirectoryCatalog(@".\"))
	{
		using (var container = new CompositionContainer(catalog))
		{
			container.ComposeParts(this);
		}
	}
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Now, this code is running from with the website assembly.&amp;nbsp; If you, like me, create a seperate assembly to hold your Domain and Repository models, then you simply reference the assembly by replacing the 'this' keyword with Assembly.GetAssembly(typeof(MyProject.Domain)).&amp;nbsp; And yes, you can reference multiple catalogs and assemblies and build up your list as well.&lt;/p&gt;
&lt;p&gt;Note that I included the namespaces here.&amp;nbsp; This is important as normally this bootstrapping code is in the Hosting namespace.&amp;nbsp; What they don't tell you is there is an extension in the namespace one higher for CompositionContainer, that enables the ComposeParts() extension method in the System.ComponentModel.Composition namespace.&lt;/p&gt;
&lt;p&gt;There are tons of options here with the composition containers.&amp;nbsp; Please refer to the .NET 4 documentation on MEF, as well as Glenn's article for a few more tips.&amp;nbsp; You can specify an assembly to reference for the catalog.&amp;nbsp; You can have aggregated catalogs for grouping/namespacing purposes.&amp;nbsp; And yet, you can still have that aged-old configuration file if you really really really want to manually register (export) each type.&lt;/p&gt;
&lt;h2&gt;All Parts are Singletons, out of the box&lt;/h2&gt;
&lt;p&gt;Yep.&amp;nbsp; All of your part's instances are composed and referenced throughout all of your code as singletons (or "statics").&amp;nbsp; This is a great solution for that stubborn developer you may have working in your group that just won't let go of static managers.&amp;nbsp; Make it instance based, and slap an [Export] on it.&amp;nbsp; Done, now use [Import] wherever you like.&lt;/p&gt;
&lt;p&gt;This is important to note because Castle and StructuredMap both default to transient composition (Unity uses whatever you configured the container to use as default).&amp;nbsp; So, make sure you are coding to be thread-safe if you are making the switch over to MEF.&lt;/p&gt;
&lt;p&gt;But do not fret, it's easy to specify the lifestyle within the contract definitions.&amp;nbsp; There are three possible configurations you can set with the [PartCreationPolicy()] attribute:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CreationPolicy.Shared (singleton, default) 
&lt;li&gt;CreationPolicy.NonShared (transient) 
&lt;li&gt;CreationPolicy.Any&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The "Any" option is interesting as it leaves it up to the context configuration of the host and/or the configuration of the [Import] contract to specify.&amp;nbsp; You can use RequiredCreationPolicy on the [Import] contract definition to specify the preference.&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;&lt;code&gt;
[PartCreationPolicy(CreationPolicy.Any)]
[Export(typeof(IUserAccountService))]
public class UserAccountService : IUserAccountService
{
	...
}

public class Post
{
	public Int32 PostId { get; set; }
	public String Title { get; set; }
	...

	[Import(RequiredCreationPolicy=CreationPolicy.NonShared]
	public IUserService UserService { get; set; }
}

&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;There is a problem with this concept though.&amp;nbsp; With a current project we are working on at the moment, we identified the need to have a security context around our services to ensure the current WebRequest has the correct security credentials.&amp;nbsp; With this, we elected to use Castle's WebRequest lifestyle feature.&amp;nbsp; Sadly, this is not possible (yet) with the PartCreationPolicy.&amp;nbsp; So it is left up to the implementer to handle custom composition on their own with a Factory pattern (see below).&lt;/p&gt;
&lt;h2&gt;Lazy Loading within Entities&lt;/h2&gt;
&lt;p&gt;Those of you that are wanting Lazy Loading within your entities, but are struggling with a solution that is compatible with Inversion of Control, fear not!&amp;nbsp; The answer is now possible with MEF.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
public partial class Post
{
	[Range(0, Int32.MaxValue)]
	public Int32 PostId { get; set; }
	
	[Required, StringLength(64, MinimumLength = 5)]
	public String Title { get; set; }

	[Required, StringLength(1024, MinimumLength = 5)]
	public String Description { get; set; }

	[Required, StringLength(Int32.MaxValue, MinimumLength = 5)]
	public String Body { get; set; }

	[Required]
	public Guid AuthorId { get; set; }

	[Import]
	public IUserService UserService { get; set; }

	private User _user;
	public User Author
	{
		get
		{
			if (_user == null)
				_user = UserService.FetchById(this.AuthorId);
			return _user;
		}
	}
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With our updated Post entity, notice we now have a dependency on IUserService marked with the [Import] attribute.&amp;nbsp; Yep, MEF composes that for you, and you have the UserService to access your lazy objects as needed.&lt;/p&gt;
&lt;h2&gt;Using MEF as a Static Wrapper&lt;/h2&gt;
&lt;p&gt;Time and time again I find myself writing wrapper classes around static members of a 3rd party component, just so I can unit test my code without having to rely on that static class.&amp;nbsp; Using MEF, if you haven't guesses already, is just as easy as you might think.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
public class Loggerpart
{
	[Export]
	public ILogger Logger
	{
		get
		{
			return LogManager.GetLogger("LoggerInstance", "config");
		}
	}
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This pattern allows you to make a wrapper around any 3rd party or legacy code.&lt;/p&gt;
&lt;h2&gt;MEF Composition with a Factory Pattern&lt;/h2&gt;
&lt;p&gt;Here's another one not in Glenn's article.&amp;nbsp; How to use MEF with a factory pattern to initiate a complex type.&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;&lt;code&gt;
public class UserService : IUserService
{
	public UserService(ISecurityContext securityContext)
	{
		...
	}
}

public class UserServiceFactory
{
	[Export(typeof(IUserService))]
	[PartCreationPolicy(CreationPolicy.Shared)]
	public IUserService Instance
	{
		get
		{
			var context = HttpContext.Current;
			var securityContext = 
				SecurityContextProvider.Setup(context)
			return new UserService(securityContext);
		}
	}
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Notice how the UserService is not exported?&amp;nbsp; Instead, we designate a property member of UserServiceFactory called Instance as the Export composition location.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Remember, you are only Exporting for Composition at runtime.&amp;nbsp; Nothing gets composed during your unit tests, as you are mocking them.&amp;nbsp; So anywhere you use [Import] will be still be mockable for any of your unit tests with this pattern.&lt;/p&gt;
&lt;h2&gt;Exporting with Multiple Contracts&lt;/h2&gt;
&lt;p&gt;Here's a nice trick, you can specify multiple Export contracts for multiple types.&amp;nbsp; Why would you do this?&amp;nbsp; If you are a big DDD follower, you may be using IUserService and IAccountService combined to give you an UserAccountService part.&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;&lt;code&gt;
[Export(typeof(IUserService))]
[Export(typeof(IAccountService))]
public class UserAccountService : IUserService, IAccountService
{
	...
}&lt;/code&gt;&lt;code&gt;
&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;MEF Does Not Blow Up on Rejection&lt;/h2&gt;
&lt;p&gt;This one is going to take some getting used to.&amp;nbsp; As Glenn mentions, MEF does not throw exceptions if a part cannot be satisfied.&amp;nbsp; It simply will not exist in the object graph for MEF to return - you'll get a null, and will most likely see a NullReferenceException in your containing code that is trying to use the part you wanted to import.&lt;/p&gt;
&lt;p&gt;MEF will simply reject the request for the Import of a part for a number of reasons.&amp;nbsp; For example, if there is no part defined as the correct Export contract type.&amp;nbsp; Say you wanted to import IUserService, but only exported UserService with [Export] and no contract type of IUserService was defined.&amp;nbsp; That was the typical one I found myself forgetting to do.&amp;nbsp; As recommended above, always include the Contract Type when designated a part as Export with [Export(typeof(IUserService))].&lt;/p&gt;
&lt;p&gt;I agree that MEF's Rejection policy is a power feature because it stabilizes the code and allows debugging.&amp;nbsp; Glenn links to a good article on why to ensure application stability: &lt;a title="http://blogs.msdn.com/gblock/archive/2009/08/02/stable-composition-in-mef-preview-6.aspx" href="http://blogs.msdn.com/gblock/archive/2009/08/02/stable-composition-in-mef-preview-6.aspx"&gt;http://blogs.msdn.com/gblock/archive/2009/08/02/stable-composition-in-mef-preview-6.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But in short, if you get Rejection happening quite often, check your Export contract definition on your part.&lt;/p&gt;
&lt;h2&gt;In Summary&lt;/h2&gt;
&lt;p&gt;As you can see, it is dead simple to use MEF.&amp;nbsp; The Export functionality is what was missing with Unity, and completely with all other IoC containers.&amp;nbsp; And, it's what gives MEF such great, simplistic power.&amp;nbsp; I highly recommend reading through Glenn's complete article, as he covers a few other concepts such as using the new &lt;strong&gt;Lazy&amp;lt;T&amp;gt;&lt;/strong&gt; for importing lazy exports and metadata.&lt;/p&gt;
&lt;p&gt;Some additional things Glenn covers is the very strong support for debugging and tracing, things you want to be aware of if you use MEF even moderately.&amp;nbsp; He also hints at the up-n-coming support for MEF with IronRuby.&amp;nbsp; He also covers some external links, which I will list here (for my own archiving purposes):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://codebetter.com/blogs/glenn.block/archive/2009/05/14/customizing-container-behavior-part-2-of-n-defaults.aspx" target="_blank"&gt;Customizing Container Behavior Part 2 of N - Defaults&lt;/a&gt; for Facilities 
&lt;li&gt;&lt;a href="http://mef.codeplex.com/releases/view/33536" target="_blank"&gt;MEF Analysis Tool (mefx) for .NET 4.0&lt;/a&gt; for debugging those contracts in large projects 
&lt;li&gt;&lt;a href="http://blogs.msdn.com/dsplaisted/archive/2009/06/08/a-crash-course-on-the-mef-primitives.aspx" target="_blank"&gt;A Crash Course on the MEF Primitives&lt;/a&gt; for the underlying "quantum universe of MEF, its über extensibility points" as Glenn says&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Once concept I am tinkering with is utilizing the [Import] attribute in the attributed programming model of MEF to define the complete contexts of my BDD tests for me with all dependencies already mocked up and ready, with T4 templates largely driving that effort.&lt;/p&gt;
&lt;p&gt;MEF wacked me upside the head.&amp;nbsp; It does everything right, and even allowed me to step back and realized, "Dang. I was bloating my code."&amp;nbsp; Yes, they have done it right.&amp;nbsp; So right that the next project I am starting this week will be on Visual Studio 2010 RC - not even released yet.&amp;nbsp; &lt;/p&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6964" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Asp.Net+Mvc/default.aspx">Asp.Net Mvc</category><category domain="http://eduncan911.com/archive/tags/MSpec/default.aspx">MSpec</category><category domain="http://eduncan911.com/archive/tags/Inversion+of+Control/default.aspx">Inversion of Control</category><category domain="http://eduncan911.com/archive/tags/MEF/default.aspx">MEF</category></item><item><title>Windows Azure SDK for Microsoft Visual Studio November 2009</title><link>http://eduncan911.com/blog/windows-azure-sdk-for-microsoft-visual-studio-november-2009.aspx</link><pubDate>Mon, 16 Nov 2009 18:38:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6870</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>0</slash:comments><comments>http://eduncan911.com/comments/6870.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6870</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://eduncan911.com/blogs/eduncan911/productsoverviewinfographic_677ADB3A.gif"&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;WIDTH:637px;DISPLAY:inline;HEIGHT:191px;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=products-overview-infographic border=0 alt=products-overview-infographic src="http://eduncan911.com/blog/thumbnail/products-overview-infographic.gif" width=637 height=191&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Over this past weekend, Microsoft released an updated Windows Azure SDK dated November 2009 for Visual Studio 2008 and 2010 Beta 2.&amp;nbsp; It is great to hear this since my tinkering with with the old CTP release was a bit buggy (had to download a few hot-fixes).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Officially this SDK is known as version 20091111.1401, and released on November 13th, 2009.&amp;nbsp; &lt;A href="http://go.microsoft.com/fwlink/?LinkID=128752" target=_blank&gt;You can go straight to the SDK download here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I have compiled a list of improvements and details about this release.&amp;nbsp; For those new to Windows Azure, the SDK add-on for Visual Studio 2008/2010 includes the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;C# and VB Project creation support for creating a Windows Azure Cloud Service solution with multiple roles.&lt;/LI&gt;
&lt;LI&gt;Tools to add and remove roles from the Cloud Service.&lt;/LI&gt;
&lt;LI&gt;Tools to configure each Role.&lt;/LI&gt;
&lt;LI&gt;Integrated local development via the Development Fabric and Development Storage services.&lt;/LI&gt;
&lt;LI&gt;Running and Debugging a Cloud Service in the Development Fabric.&lt;/LI&gt;
&lt;LI&gt;Building and packaging of Cloud Service Packages.&lt;/LI&gt;
&lt;LI&gt;Browsing to the Windows Azure Developer Portal.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This updated includes a large number of enhancements and compatibility updates.&amp;nbsp; The overview reads:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows Azure Service Runtime managed library: The latest version of the Service Hosting Runtime API includes support for enhanced communication between roles and for runtime notification of service configuration changes. Direct communication between role instances enables new application development scenarios, including applications that distribute state across role instances. Service configuration changes include an increase or decrease in the number of request role instances and changes to the values of configuration settings.&lt;/LI&gt;
&lt;LI&gt;Windows Azure Diagnostics managed library: The new Diagnostics API enables logging using standard .NET APIs. The Diagnostics API provides built-in support for collecting standard logs and diagnostic information, including the Windows Azure logs, IIS 7.0 logs, Failed Request logs, crash dumps, Windows Event logs, performance counters, and custom logs. &lt;/LI&gt;
&lt;LI&gt;Certificate Management: Enhanced support for SSL certificates in Windows Azure and in the Windows Azure SDK enables the secure automated deployment of certificates to services hosted on Windows Azure. &lt;/LI&gt;
&lt;LI&gt;Variable-size Virtual Machines : Developers may now specify the size of the virtual machine to which they wish to deploy a role instance, based on the role's resource requirements. The size of the VM determines the number of CPU cores, the memory capacity, and the local file system size allocated to a running instance. &lt;/LI&gt;
&lt;LI&gt;External endpoints for worker roles. A worker role may now define any number of external endpoints for HTTP, HTTPS, and TCP, and specify the desired port number for any external endpoint. &lt;/LI&gt;
&lt;LI&gt;Persistent local resource storage: Developers can now choose to persist data written to a local storage resource at runtime when the role is recycled. &lt;/LI&gt;
&lt;LI&gt;Windows Azure Storage Client managed library: The Storage Client library provides a .NET API for accessing the Windows Azure storage services. &lt;/LI&gt;
&lt;LI&gt;Improved Development Storage: Development storage provides a high-fidelity simulation of the Windows Azure storage services in the cloud. Tables can now be created dynamically in the development storage Table service and are no longer required to be generated in advance. &lt;/LI&gt;
&lt;LI&gt;Updated samples: The samples included with the Windows Azure SDK have been updated to demonstrate new features. The samples now include both C# and Visual Basic versions.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The actual technical updates are listed below.&amp;nbsp; Some interesting parts such as ASP.NET MVC 2 support are now included.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Service Model UI: A redesigned and significantly more complete interface for manipulating Role configuration information. To access, double-click on a role node in the Solution Explorer.&lt;/LI&gt;
&lt;LI&gt;Additional role templates: Support for ASP.NET MVC 2 (2010 only), F# worker roles (2010 only), and WCF Service Application web roles.&lt;/LI&gt;
&lt;LI&gt;VS2010 Beta2 Support: Support for Visual Studio 2010 Beta 2 and VWD Express 2010 Beta 2.&lt;/LI&gt;
&lt;LI&gt;Support for dynamically creating tables: The Create Tables functionality is now performed automatically; there is no longer a need to right-click and select Create Tables… on the project after your table definitions have changed.&lt;/LI&gt;
&lt;LI&gt;Full support for and installation of the November Windows Azure SDK release (in short, similar to the above list):&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;The sample storage client has been replaced by a new production quality library.&lt;/LI&gt;
&lt;LI&gt;New Diagnostics library enables logging using .NET APIs and enables the collection of diagnostic information from the service.&lt;/LI&gt;
&lt;LI&gt;Service Runtime library updated to support inter-role communication and notification of configuration changes . &lt;/LI&gt;
&lt;LI&gt;Support for input endpoints on Worker Roles. &lt;/LI&gt;
&lt;LI&gt;Higher fidelity simulation of Development Storage: supports all current cloud storage features, including dynamically creating tables. &lt;/LI&gt;
&lt;LI&gt;Ability to choose the size of the VM for a role instance. &lt;/LI&gt;
&lt;LI&gt;Ability to persist data in local storage even after the role is recycled. &lt;/LI&gt;
&lt;LI&gt;Ability to manage certificates to install to the role VMs. &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6870" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Support Ticket Severity vs Priority</title><link>http://eduncan911.com/blog/support-ticket-severity-vs-priority.aspx</link><pubDate>Mon, 05 Oct 2009 02:16:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6809</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>0</slash:comments><comments>http://eduncan911.com/comments/6809.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6809</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://eduncan911.com/blog/thumbnail/SupportTicketSeverityvsPriority_11E83/ARG1329_pvw.jpg"&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;MARGIN:0px 20px 0px 0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=ARG1329_pvw border=0 alt=ARG1329_pvw align=left src="http://eduncan911.com/blog/thumbnail/SupportTicketSeverityvsPriority_11E83/ARG1329_pvw_thumb.jpg" width=244 height=236&gt;&lt;/A&gt; All too often, I get involved with ticketing systems that have these set incorrectly.&amp;nbsp; Or, they utilize them in a different manner than what they were intended for.&amp;nbsp; Tonight, I am setting up another system and thought I would document the differences here for future references (and for my buddies that could tweak their systems).&lt;/P&gt;
&lt;P&gt;I understand there is a movement to get away from setting both of these.&amp;nbsp; I myself like a system without the severity part, as it is much faster just to run down the priority list.&amp;nbsp; But, I feel that the more formal the QA process is (e.g. you have a dedicated QA member or team or outsourced group), the more you need to separate the two.&amp;nbsp; This post should help with that.&lt;/P&gt;
&lt;H2&gt;Definitions of Severity and Priority&lt;/H2&gt;
&lt;P&gt;The definitions, in terms of a ticketing system are as follows:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Severity&lt;/STRONG&gt; : The level of impact the defect has on the system, overall.&amp;nbsp; Basically, &lt;EM&gt;how serious the bug is&lt;/EM&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Priority&lt;/STRONG&gt; : The developers order in which to attack, address, or fix the tickets.&amp;nbsp; Ranked usually from Highest to Lowest.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Before going any further, let’s setup the Severity to match what Microsoft uses (&lt;A href="http://c2.com/cgi/wiki?DifferentiatePriorityAndSeverity" target=_blank&gt;sourced from this article&lt;/A&gt;, with my spin on it).&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;1 - Exception or Crash &lt;/STRONG&gt;: A system crash or anything that loses persistent data.&amp;nbsp; Often times referred to as Show Stoppers.&amp;nbsp; Most of the time your overall exceptions that users see (or get the generic “and error has occurred” page) would fall into this category.&amp;nbsp; Unless related to a new feature being QA’d (see #2 below).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2 - New Feature Incomplete&lt;/STRONG&gt; : A &lt;EM&gt;new&lt;/EM&gt; feature that does not work at all or has exceptions.&amp;nbsp; The word &lt;EM&gt;new&lt;/EM&gt; being import there, as broken new feature bugs do not belong in #1 above.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3 - Release Feature Bug&lt;/STRONG&gt; : A completed feature that can be released, but has some rough edges to iron out further.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4 - Cosmetic (UI)&lt;/STRONG&gt; : Purely cosmetic, css, html, and spelling issues.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I usually take it a little further by adding a 5th option.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;5 - Feature Request&lt;/STRONG&gt; : Usually a placeholder for feature notes and feature development / feedback to the reporter.&amp;nbsp; Some organizations prefer to keep a separate list of these.&amp;nbsp; I find they are too often forgotten about.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;It is easier to think of severities as categories of the defect itself.&amp;nbsp; Also if you notice, I prefixed the severities with numbers.&amp;nbsp; This has a two effects by giving users an instant “what level is this bug” resolve, as well as a trick to get several ticket systems to order the DropDownList by the number (yeah, lame, but works!).&lt;/P&gt;
&lt;H2&gt;Who sets Severity and Priority?&lt;/H2&gt;
&lt;P&gt;This is a good one.&amp;nbsp; A few employees at my last company nearly went to war over who gets to set these.&amp;nbsp; But, the answer is simple:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;It’s the tester/bug reporter’s job to set the severity.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The person in charge of QAing the system knows the severity of the bug they are reporting.&amp;nbsp; They know how it impacts the users on the other end.&amp;nbsp; But, this person should not be given the power to set the priority.&amp;nbsp; Else, everything would be set to High Priority (usually the case).&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Priority should be set by the project manager or dispatcher.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;During the weekly standup, the project manager decides on what order the tickets are addressed in and this, in turn, dictates the priority of the tickets.&amp;nbsp; This is done by examining the severity of the bug reported (yep, there it is - examine the severity here!).&amp;nbsp; After reviewing the severity, the PM estimates the time to resolve the bug for the next milestone or release and decides if it is acceptable.&amp;nbsp; If so, a priority is set on the ticket and it is moved to the appropriate milestone.&lt;/P&gt;
&lt;H2&gt;Severity and Priority Examples&lt;/H2&gt;
&lt;P&gt;Let’s take an example of an css issue in which the overflow property is not set correctly, and the text the user sees is being obscured by this issue.&amp;nbsp; But, this css issue is part of a new feature that is going out in the next build.&amp;nbsp; What do you set it to?&amp;nbsp; Is it #2, a feature incomplete?&amp;nbsp; Or #3, a feature bug because the user cannot set the text of this “new” feature?&amp;nbsp; Or, #4, an UI issue?&lt;/P&gt;
&lt;P&gt;Personally, this is to each his own.&amp;nbsp; I would examine the context of the text being hidden.&amp;nbsp; If this text is the balance of your bank account being hidden, then that is a #2.&amp;nbsp; If it is part of the help text, then #3 and can be released to be tweaked later.&amp;nbsp; If it is just a few words not needed for any operation or description of the page’s purpose, then, it’s #4 and can wait for more sever issues to be addressed.&lt;/P&gt;
&lt;P&gt;Basically, the severity dictates rather that bug must be completed before release.&amp;nbsp; I usually set the rule that the release does not go out with any #1 and #2s in the list.&amp;nbsp; Or, I may release some #2s if I can quickly follow-up with a patch within a day or two.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Number 3s and 4s often time get pushed back until the next release, unless the priority has been bumped (i.e. how old a ticket is).&amp;nbsp; The #3s and #4s are great gap fillers for those "let's run through the tickets and attack as many as we can" days.&lt;/P&gt;
&lt;P&gt;If you need more examples, feel free to hit me up or leave a comment.&lt;/P&gt;
&lt;H2&gt;Summary&lt;/H2&gt;
&lt;P&gt;Hopefully you have a better idea of severity and how it fits into your project management.&amp;nbsp; Again, I have to stress that smaller projects may never use severity.&amp;nbsp; But, if you have any type of format QA process, it makes sense to stick it in there to have the extra level of communications.&lt;/P&gt;
&lt;P&gt;In case you are wondering, I personally use Unfuddle at my companies and personal projects.&amp;nbsp; You can’t beat the web version of diffmerge in the browser!&amp;nbsp; GitHub is very good as well for those diffmerges.&amp;nbsp; GitHub is best suited for public projects and very small teams, and is only for Git.&amp;nbsp; Where Unfuddle supports both Git and SVN, and is more privatized. &lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6809" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>Html.RenderAction for ASP.NET MVC 1.0</title><link>http://eduncan911.com/blog/html-renderaction-for-asp-net-mvc-1-0.aspx</link><pubDate>Thu, 24 Sep 2009 16:04:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6792</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>8</slash:comments><comments>http://eduncan911.com/comments/6792.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6792</wfw:commentRss><description>&lt;P&gt;The &lt;A href="http://eduncan911.com/blog/type-safety-with-asp-net-mvc-futures.aspx"&gt;ASP.NET MVC 1.0 Futures assembly&lt;/A&gt; (that is not included with ASP.NET MVC 1.0) has a powerful HtmlHelper extension method called RenderAction().&amp;nbsp;&amp;nbsp; It sounds similar to the Html extension method called RenderPartial() for a good reason.&amp;nbsp; RenderAction() executes an action on a controller, allowing you to move your logic out of the views.&lt;/P&gt;
&lt;H2&gt;The problem with Html.RenderPartial()&lt;/H2&gt;
&lt;P&gt;There is no direct problem with this.&amp;nbsp; It is just that developers are left with only the ability to render a Partial View.&amp;nbsp; What if you want that partial view to act on model properties you pass into that partial view?&amp;nbsp; What if you need to access the ambient values in the Routes collection to render some specifics?&amp;nbsp; Unfortunately, developers are only left with RenderPartial() which only gives you access to a partial view.&amp;nbsp; If you really need this logic, you have no choice but to put it into the partial view.&amp;nbsp; Or, to put it into your controller’s action method that calls the view that calls the partialviews.&amp;nbsp; Needless to say, that’s a bit hokey.&lt;/P&gt;
&lt;H2&gt;What Html.RenderAction&amp;lt;TController&amp;gt;() Resolves&lt;/H2&gt;
&lt;P&gt;It gives you the power of moving that complex View and Partial View logic to a Controller’s Action, where it belongs!&amp;nbsp; Think of it as a “Render Partial Action” method of where you can call back into a controller to render some logic. This gives you the ability to clean up your partial views now by removing that logic and placing it on a controller’s action, that renders the partial view when done. The syntax looks like:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;% Html.RenderAction&amp;lt;ProductController&amp;gt;(c =&amp;gt; c.RenderProductResults()); %&amp;gt;&lt;BR&gt;&lt;/CODE&gt;&lt;CODE&gt;&amp;lt;!-- Or... //--&amp;gt;&lt;BR&gt;&amp;lt;%= Html.RenderAction("RenderPartialResults", "Product"); %&amp;gt; &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Put simply, this renders an action on a controller directly in your view.&amp;nbsp; You may be thinking “big deal”, but I assure you this is a big deal in large complex MVC sites.&amp;nbsp; Having the power to abstract or breakup your controller’s actions into multiple &lt;EM&gt;partial-actions&lt;/EM&gt; and multiple views is very powerful.&amp;nbsp; Instead of relying on the 1 controller' action to wire up all of the data for all of the views, partial views, and logic for the views.&amp;nbsp; Now, you can just focus on that one section - and abstract the rest into reusable parts.&lt;/P&gt;
&lt;P&gt;You may be wondering where this extension method is with your ASP.NET MVC project.&amp;nbsp; As mentioned above, it is part of the &lt;A href="http://eduncan911.com/blog/type-safety-with-asp-net-mvc-futures.aspx"&gt;Futures extension of the ASP.NET MVC project at codeplex&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;ASP.NET MVC Sidebar Widget Example&lt;/H2&gt;
&lt;P&gt;The current pattern suggests you use Html.RenderPartial to render those partial views as your sidebar widgets.&amp;nbsp; What if you want those widgets to be more complex?&amp;nbsp; What if you want those widgets to act on the the current Route?&amp;nbsp; Well, you are left with little options with RenderPartial.&amp;nbsp; Instead, you want to use RenderAction to call an action on a controller to handle that logic.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Assume we are viewing a blog post entry and on the right, we want a sidebar widget for related posts. To do this, first create an action on a controller called RelatedPosts().&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;public ActionResult RelatedPosts(Int32 postID)
{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;  // some complex logic, or simple logic, can go here now…&lt;BR&gt;  //&lt;BR&gt;  &lt;BR&gt;  if (postID &amp;lt; 1)&lt;BR&gt;    return PartialView(“NoRelatedPosts”);&lt;BR&gt;&amp;nbsp; var relatedPosts =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _postService.FetchRelatedPosts(postID);&lt;BR&gt;  &lt;BR&gt;&amp;nbsp; if (relatedPosts.Count &amp;gt; 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp; return PartialView("RelatedPosts", relatedPosts);&lt;BR&gt;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return PartialView(“NoRelatedPosts”);
}&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Notice how the logic here accounts for empty or no results, and returns an a different partial view?&amp;nbsp; Using RenderPartial(), this is logic could only be reflected with inline IF ELSE brackets within your PartialView - and ugly spaghetti mess.&amp;nbsp; Also, how would you even retrieve the related posts collection?&amp;nbsp; You have no choice but to obtain that collection back on the post entry view action - which should not be concerned about our little sidebar widget.&amp;nbsp; All it should do is wire up the post.&amp;nbsp; But, that is not the case with RenderPartial() - you have to wire up all of your data ahead of time in one large ViewModel with multiple entities dangling off of it.&lt;/P&gt;
&lt;P&gt;No no.&amp;nbsp; Let’s do it with RenderAction() and instead put this logic into the Controller (where it belongs, so we can test for it); and then, we can call it with the RenderAction() extension.&amp;nbsp; We can do this now with a simple call within our larger post view like so:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;% Html.RenderAction&amp;lt;PostController&amp;gt;(c =&amp;gt; c.RelatedPosts(Model.PostID)); %&amp;gt; &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;We instead kind of render a &lt;EM&gt;partial action&lt;/EM&gt; by calling an action on a controller that handles the logic that we would otherwise have to put in the view.&amp;nbsp; Now, our main post view action doesn’t have to be concerned about wiring up our sidebar partial view.&amp;nbsp; We can just call RenderAction() in the view.&lt;/P&gt;
&lt;H2&gt;ASP.NET MVC AJAX Example using RenderAction&lt;/H2&gt;
&lt;P&gt;Taking an example from the book &lt;A href="http://www.amazon.com/gp/product/0470384611?ie=UTF8&amp;amp;tag=eduncan911com-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0470384611"&gt;Profressional ASP.NET MVC 1.0&lt;/A&gt;, we’ll use the submitting a Form Using Ajax example to replace the limited RenderPartial() function with a richer RenderAction() from a Controller’s action to process the results more finely.&lt;/P&gt;
&lt;P&gt;In the ProductController, you would add a new method with the signature RenderProductResults(IList&amp;lt;Product&amp;gt; products):&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;public ActionResult RenderProductResults(IList&amp;lt;Product&amp;gt; products)
{
    // insert some custom logic here, maybe even switch partial views, etc
    //
    if (products.Count &amp;gt; 0)
        return PartialView("ProductSearchResults", products);
    else
        return EmptyResult();
}    &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now, you can update their ajax example to render this new action instead of the RenderPartial() from their example:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;h1&amp;gt;Product Search - jQuery&amp;lt;/h1&amp;gt;
&amp;lt;form action="&amp;lt;%= Url.Action("ProductSearch") %&amp;gt;" method="post" id="jform"&amp;gt;

  &amp;lt;%= Html.TextBox("query", null, new { size=40 }) %&amp;gt;
  &amp;lt;input type="submit" id="jsubmit" value="go" /&amp;gt; 

&amp;lt;/form&amp;gt;

&amp;lt;div id="results2"&amp;gt;
  &amp;lt;% Html.RenderAction&amp;lt;ProductController&amp;gt;(c =&amp;gt; c.RenderProductResults(Model.Results)); %&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;script src="http://eduncan911.com/Scripts/jquery-1.3.2.js" type="text/javascript"&amp;gt; &amp;lt;/script&amp;gt;&lt;BR&gt;&amp;lt;script src="http://eduncan911.com/Scripts/jquery-form.js" type="text/javascript"&amp;gt; &amp;lt;/script&amp;gt;&lt;BR&gt;&amp;lt;script&amp;gt; &lt;BR&gt;  $(function() { &lt;BR&gt;    $('#jform').submit(function(){ &lt;BR&gt;      $('#jform').ajaxSubmit({ target: '#results2' }); &lt;BR&gt;      return false; &lt;BR&gt;    }); &lt;BR&gt;  });&lt;BR&gt;&amp;lt;/script&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Look for the Html.RenderAction line above.&amp;nbsp; What this does is instead of rendering a partial view in the id=”results2” location, you can now render a “partial Action” with the Html.RenderAction() call.&amp;nbsp; Notice that how we are also passing strongly typed parameters directly into the method?&amp;nbsp; Yep, fully supported.&lt;/P&gt;
&lt;P&gt;By using the RenderAction instead of RenderPartial, you have much more control over what happens with that rendering of the partial (now, rendering of the action).&amp;nbsp; &lt;EM&gt;&lt;U&gt;This gives you an excellent opportunity to remove that complex view logic you may have, and place it in an Action where it belongs&lt;/U&gt;&lt;/EM&gt;!&lt;/P&gt;
&lt;H2&gt;Custom ViewEngines and Extensions&lt;/H2&gt;
&lt;P&gt;Now, you can also resolve this logic issue by creating custom ViewEngines, or extensions that expand upon the ViewEngine, HtmlHelper, or UrlHelper.&amp;nbsp; But, I see those methods as more application-wide common logic (like pagers and server controls for display name).&amp;nbsp; I do not see that as a solution for your one-off partial view for the ajax response to something.&amp;nbsp; Think of how bloated your ViewEngine would get, or how many different ViewEngines you’d have to choose from.&amp;nbsp; No, ViewEngine extensions have a place which I will post about as well.&lt;/P&gt;
&lt;H2&gt;Summary&lt;/H2&gt;
&lt;P&gt;When your views start getting complex and messy, it may be time to switch to a RenderAction to handle that logic.&amp;nbsp; I know I have cleaned up quite a lot using it.&amp;nbsp; Also, custom view engines have a place in their own right to abstract more global/common logic across the entire site.&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6792" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Asp.Net+Mvc/default.aspx">Asp.Net Mvc</category><category domain="http://eduncan911.com/archive/tags/Type+Safety/default.aspx">Type Safety</category></item><item><title>Microsoft announces WebsiteSpark</title><link>http://eduncan911.com/blog/microsoft-announces-websitespark-program.aspx</link><pubDate>Thu, 24 Sep 2009 14:31:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6791</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>0</slash:comments><comments>http://eduncan911.com/comments/6791.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6791</wfw:commentRss><description>&lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;margin:0px 20px 0px 0px;display:inline;border-top:0px;border-right:0px;" title="g_home" border="0" alt="g_home" align="left" src="http://eduncan911.com/blog/thumbnail/MicrosoftannouncestheWebsiteSparkProgram_8A1B/g_home.png" width="244" height="184" /&gt; For the first time, Microsoft is licensing a number of software and servers to startups, small businesses, and actual independent web developers - for free.&amp;#160; And, it lasts for three years.&amp;#160; &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/09/24/announcing-the-websitespark-program.aspx" target="_blank"&gt;Scott Guthrie tweeted today&lt;/a&gt; about the new &lt;a href="http://www.microsoft.com/web/websitespark/" target="_blank"&gt;WebsiteSpark Program&lt;/a&gt;, which is what this program is called.&amp;#160; Why not call it WebSpark?&amp;#160; I dunno.&lt;/p&gt;  &lt;p&gt;I was shocked to see it comes with a 3rd party tool called DotNetPanel, a great Server Control Panel for hosting websites.&amp;#160; But, I am guessing the free version - not the upgraded ones.&amp;#160; ;)&lt;/p&gt;  &lt;h2&gt;Microsoft WebsiteSpark Features&lt;/h2&gt;  &lt;p&gt;Now, don’t get too excited.&amp;#160; Here’s the list so far:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;3 licenses of Visual Studio 2008 Professional Edition &lt;/li&gt;    &lt;li&gt;1 license of Expression Studio 3 (which includes Expression Blend, Sketchflow, and Web) &lt;/li&gt;    &lt;li&gt;2 licenses of Expression Web 3 &lt;/li&gt;    &lt;li&gt;4 processor licenses of Windows Web Server 2008 R2 &lt;/li&gt;    &lt;li&gt;4 processor licenses of SQL Server 2008 Web Edition &lt;/li&gt;    &lt;li&gt;DotNetPanel control panel (enabling easy remote/hosted management of your servers)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Some may say, “It doesn’t come with Enterprise editions?!?&amp;#160; Blah!” Don’t be discouraged at the power being given away here.&amp;#160; This is targeting two key business groups:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Independent contractors building websites for others.&lt;/li&gt;    &lt;li&gt;Small companies of 10 employees or less building websites for others.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Being in one of these two categories means you really do not have a need for Enterprise editions.&amp;#160; If your website(s) actually do need that level of licensing to run on larger hardware, then Microsoft sees that you can afford the $25/mo licensing fee for Standard or $119/mo for Enterprise because of the traffic, of volume of sites you have running.&amp;#160; &lt;/p&gt;  &lt;p&gt;I kind of agree.&amp;#160; Why do startups need to setup these large and expensive 4 webserver, 2 SQL DBs in a high-end failover environment with massive hardware - for the 6 month to 1 year it will take to develop the software?&amp;#160; Scale back, let your developers develop it. And 30 days before you launch, then get your massive setup and migrate over to it.&amp;#160; You reap the benefits of saving the costs during that time.&amp;#160; If you application(s) are too embedded to be migrated quickly to another set of servers, find a new architect or developer.&amp;#160; &lt;/p&gt;  &lt;h2&gt;Microsoft and Open-Source&lt;/h2&gt;  &lt;p&gt;I actually have a history with these start-up programs.&amp;#160; It was back in 2006 when I worked on a new Microsoft site called &lt;a href="http://www.microsoftstartupzone.com"&gt;www.microsoftstartupzone.com&lt;/a&gt; at Telligent.&amp;#160; It was going to be a new low-cost initiative to compete with the free open-source market (LAMP).&lt;/p&gt;  &lt;p&gt;One of the first programs to come out of this site was the BizSpark program that we all know and love.&amp;#160; We got BizSpark at GlobalGrind, and I helped setup BizSpark at my former gig as well.&amp;#160; It really is a powerful and inexpensive way to get a company up and going.&lt;/p&gt;  &lt;p&gt;And now, we have this WebsiteSpark to get things kicked off.&amp;#160; Excellent.&lt;/p&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6791" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Type Safety with ASP.NET MVC Futures</title><link>http://eduncan911.com/blog/type-safety-with-asp-net-mvc-futures.aspx</link><pubDate>Tue, 22 Sep 2009 17:02:29 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6788</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>3</slash:comments><comments>http://eduncan911.com/comments/6788.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6788</wfw:commentRss><description>&lt;p&gt;In this post, I will show you how to strongly type some parts of MVC to get rid of those “magic strings.”&amp;#160; I will also publish a few extension methods that expand upon this concept later on.&amp;#160; So, this is a continuation of my &lt;a href="http://eduncan911.com/blog/asp-net-mvc.aspx"&gt;Mvc series&lt;/a&gt; that you can subscribe to.&lt;/p&gt;  &lt;h2&gt;ASP.NET MVC 1.0 Futures&lt;/h2&gt;  &lt;p&gt;You can download ASP.NET MVC 1.0 RTM from codeplex.&amp;#160; You can even download the source code and step through what the framework is doing.&amp;#160; What a lot of people overlook is an additional assembly available for download at these locations called ASP.NET MVC 1.0 Futures.&amp;#160; You can download it from Codeplex from below:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471" target="_blank"&gt;Download ASP.NET MVC 1.0 Futures from CodePlex&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is a darling of an assembly using the namespace &lt;strong&gt;Microsoft.Web.Mvc&lt;/strong&gt;.&amp;#160; Usually these Microsoft “Futures” releases are developer code that did not get approved for RTM release.&amp;#160; This assembly is no exception and includes a plethora of strongly typed extensions.&amp;#160; The reason some of this code did not get approved was because some of it did not conform to Medium Trust requirements for the 1.0 release.&amp;#160; So if you have a strict medium trust application, you may not be able to use the some of the code contained within the assembly.&lt;/p&gt;  &lt;p&gt;I am not going to cover all of the extensions within this assembly.&amp;#160; You can do that on your own with &lt;a href="http://www.red-gate.com/products/reflector/index.htm" target="_blank"&gt;.NET Reflector&lt;/a&gt;.&amp;#160; Instead, I am going to cover just a couple that you will be using on a daily basis.&lt;/p&gt;  &lt;p&gt;To get started, go ahead and added a reference to the Microsoft.Web.Mvc assembly to your project.&amp;#160; In addition, to make things a lot easier, go ahead and add a few namespaces to your web.config.&lt;/p&gt;  &lt;pre&gt;&lt;code&gt;&amp;lt;namespaces&amp;gt;
  &amp;lt;add namespace=&amp;quot;System.Web.Mvc&amp;quot;/&amp;gt;  
  &amp;lt;add namespace=&amp;quot;System.Web.Mvc.Ajax&amp;quot;/&amp;gt;
  &amp;lt;add namespace=&amp;quot;System.Web.Mvc.Html&amp;quot;/&amp;gt;
  &amp;lt;add namespace=&amp;quot;System.Web.Routing&amp;quot;/&amp;gt;
  &amp;lt;add namespace=&amp;quot;System.Linq&amp;quot;/&amp;gt;
  &amp;lt;add namespace=&amp;quot;System.Collections.Generic&amp;quot;/&amp;gt; 

  &amp;lt;add namespace=&amp;quot;AspNetMvcTypeSafety.Controllers&amp;quot;/&amp;gt;
  &amp;lt;add namespace=&amp;quot;AspNetMvcTypeSafety.Models&amp;quot;/&amp;gt;
  &amp;lt;add namespace=&amp;quot;Microsoft.Web.Mvc&amp;quot;/&amp;gt; &amp;lt;!-- Add this assembly --&amp;gt;  
&amp;lt;/namespaces&amp;gt;&lt;/code&gt;&lt;p&gt;&lt;/p&gt;&lt;/pre&gt;

&lt;p&gt;Hit CTRL-SHIFT-B to do a quick compile of your code (so the assembly is copied to your /bin). ASP.NET MVC 1.0 Futures is now available for your project.&amp;#160; You’ll also note that I add my controllers and models’ namespaces.&amp;#160; This is because you want them available from your views and controllers.&lt;/p&gt;

&lt;h2&gt;Strong Typed Html ActionLink&amp;lt;TController&amp;gt;&lt;/h2&gt;

&lt;p&gt;If you are already coding in ASP.NET MVC, you are using strings to reference controllers, actions, and views.&amp;#160; An example to access to the MostRecent() action on a PostController would be something like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%-- // Old way--%&amp;gt; &lt;br /&gt;&amp;lt;%= Html.ActionLink(Model.DisplayName, &amp;quot;MostRecent&amp;quot;, new { Controller=&amp;quot;Post&amp;quot; }) %&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You have to create an anonymous type and reference a controller with “Post”, for the action method “MostRecent”.&amp;#160; Using the Futures assembly, you’ll see a few new extension overloads for Html.ActionLink:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Html.ActionLink&amp;lt;TController&amp;gt;(&lt;br /&gt;    Expression&amp;lt;Action&amp;lt;TController&amp;gt;&amp;gt; action, String linkText)
Html.ActionLink&amp;lt;TController&amp;gt;(&lt;br /&gt;    Expression&amp;lt;Action&amp;lt;TController&amp;gt;&amp;gt; action, String linkText, object attributes)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So, now you can re-write the first example to get the MostRecent() action like so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%-- // New way --%&amp;gt;&lt;/code&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;%= Html.ActionLink&amp;lt;PostController&amp;gt;(c =&amp;gt; c.MostRecent(), Model.DisplayName)%&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Isn’t that much tidier?&amp;#160; To break it down, TController is the controller you want to access an action method for.&amp;#160; With it assigned as the generic type, now you have intellisense for your controller as the image below demonstrates.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eduncan911.com/blog/thumbnail/StronglyTypedMVCwithASP.NETFutures_C956/923200981403PM.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="9-23-2009 8-14-03 PM" border="0" alt="9-23-2009 8-14-03 PM" src="http://eduncan911.com/blog/thumbnail/StronglyTypedMVCwithASP.NETFutures_C956/923200981403PM_thumb.png" width="664" height="239" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;This pattern even supports the parameters on your controller’s actions!&amp;#160; For example, say you want to pass in a username property for a PostController action with the signature of MyPosts(String username).&amp;#160; Using the old method, you have to pass it an anonymous type like so (again, using strings):&lt;/p&gt;

&lt;pre&gt;&amp;lt;%-- // Old way --%&amp;gt;&lt;code&gt;&lt;br /&gt;&amp;lt;%= Html.ActionLink(Model.DisplayName, &amp;quot;MyPosts&amp;quot;, new { Controller=&amp;quot;Post&amp;quot;, id=Model.Username }) %&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With the Futures assembly, it’s a simple as this:&lt;/p&gt;

&lt;pre&gt;&amp;lt;%-- // New way --%&amp;gt;&lt;code&gt;&lt;br /&gt;&amp;lt;%= Html.ActionLink&amp;lt;PostController&amp;gt;(c =&amp;gt; c.MyPosts(Model.Username), Model.DisplayName)%&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Notice that you pass the Model.Username parameter directly into the method c.MyPosts(), instead as an anonymous type like the old way. You even get the intellisense as well, as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eduncan911.com/blog/thumbnail/StronglyTypedMVCwithASP.NETFutures_C956/923200982013PM.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="9-23-2009 8-20-13 PM" border="0" alt="9-23-2009 8-20-13 PM" src="http://eduncan911.com/blog/thumbnail/StronglyTypedMVCwithASP.NETFutures_C956/923200982013PM_thumb.png" width="631" height="121" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Html RenderAction&amp;lt;TController&amp;gt;&lt;/h2&gt;

&lt;p&gt;This new function works exactly like the ActionLink&amp;lt;TController&amp;gt; above.&amp;#160; No surprises.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;%-- // new way %&amp;gt;
&amp;lt;% Html.RenderAction&amp;lt;PostController&amp;gt;(c =&amp;gt; c.MyPosts(Model.Username));%&amp;gt;&lt;code&gt; &lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can &lt;a href="http://eduncan911.com/blog/html-renderaction-for-asp-net-mvc-1-0.aspx"&gt;read more about RenderAction&amp;lt;TController&amp;gt; here&lt;/a&gt;.&amp;#160; &lt;/p&gt;

&lt;h2&gt;Strong Typed Html BeginForm&amp;lt;TController&amp;gt;&lt;/h2&gt;

&lt;p&gt;Again, using the ASP.NET MVC Futures assembly, this is already done for you.&amp;#160; This one is a bit tricky though.&amp;#160; You want to pass your values within the form’s scope, not the BeginForm method itself.&amp;#160; But, if you leave the parameters blank for your method, the view will not render and you will be an exception.&amp;#160; Intelliense actually gives you a hint by the red underline.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eduncan911.com/blog/thumbnail/StronglyTypedMVCwithASP.NETFutures_C956/923200990142PM.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="9-23-2009 9-01-42 PM" border="0" alt="9-23-2009 9-01-42 PM" src="http://eduncan911.com/blog/thumbnail/StronglyTypedMVCwithASP.NETFutures_C956/923200990142PM_thumb.png" width="504" height="93" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;To get by this, you have to trick it and pass in some default values like so:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://eduncan911.com/blog/thumbnail/StronglyTypedMVCwithASP.NETFutures_C956/923200990258PM.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="9-23-2009 9-02-58 PM" border="0" alt="9-23-2009 9-02-58 PM" src="http://eduncan911.com/blog/thumbnail/StronglyTypedMVCwithASP.NETFutures_C956/923200990258PM_thumb.png" width="536" height="101" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Yes, you can still pass a direct value into the method.&amp;#160; And just like normal, if a route’s parameter does not match the name, it will be tacked on as a querystring.&amp;#160; &lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;That’s it for now.&amp;#160; There are more to capitalize on within the Futures assembly such as the &lt;strong&gt;FileCollectionModelBinder&lt;/strong&gt; for multiple files, the &lt;strong&gt;CookieTempDataProvider&lt;/strong&gt; for setting a temp cookie only for the next request, or even the HtmlHelper extensions for &lt;strong&gt;Mailto()&lt;/strong&gt; that wraps those ever daunting subject, body, multiple emails, etc all into a neat HtmlHelper.&lt;/p&gt;

&lt;p&gt;For my next project, I will be developing heavy in Mvc across multiple sites.&amp;#160; At that point, I am sure I will have more strongly typed extensions for things like RedirectToAction() at the controller level.&amp;#160; I will post them as I run across them.&lt;/p&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6788" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Asp.Net+Mvc/default.aspx">Asp.Net Mvc</category><category domain="http://eduncan911.com/archive/tags/Type+Safety/default.aspx">Type Safety</category></item><item><title>ASP.NET MVC</title><link>http://eduncan911.com/blog/asp-net-mvc.aspx</link><pubDate>Tue, 22 Sep 2009 17:02:13 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6787</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>1</slash:comments><comments>http://eduncan911.com/comments/6787.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6787</wfw:commentRss><description>&lt;p&gt;&lt;img style="border-right-width:0px;margin:0px 0px 0px 20px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="funny-pictures-cat-does-not-like-puppies" border="0" alt="funny-pictures-cat-does-not-like-puppies" align="right" src="http://eduncan911.com/blog/thumbnail/ASP.NETMVC_C748/funnypicturescatdoesnotlikepuppies.jpg" width="364" height="484" /&gt; I am starting a new series that will be focusing on ASP.NET MVC design patterns.&amp;#160; What I will be focusing on is enterprise-ready patterns and practices that scales across cloud computing, coding with type safety, and abstractions of WebForms-like server controls – using the MVC pattern.&amp;#160;&amp;#160; &lt;a href="http://blog.codeville.net/" target="_blank"&gt;Steve Sanders&lt;/a&gt; and &lt;a href="http://haacked.com/" target="_blank"&gt;Phil Haack&lt;/a&gt; have about a year head start on everything-mvc, so I highly recommend reading up on their blogs for the basics and advanced solutions.&amp;#160; &lt;/p&gt;  &lt;p&gt;I will keep updating this post with each post for future references.&amp;#160; So, bookmark it or &lt;a href="http://eduncan911.com/archive/tags/asp.net+mvc/default.aspx" target="_blank"&gt;you can subscribe to the series here&lt;/a&gt;.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://eduncan911.com/blog/type-safety-with-asp-net-mvc-futures.aspx"&gt;Type Safety with ASP.NET MVC Futures&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://eduncan911.com/blog/html-renderaction-for-asp-net-mvc-1-0.aspx"&gt;Html.RenderAction&amp;lt;TController&amp;gt; for ASP.NET MVC 1.0&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can also follow me on Twitter via eduncan911, if you can weed out my random thoughts from these postings.&lt;/p&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6787" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Asp.Net+Mvc/default.aspx">Asp.Net Mvc</category><category domain="http://eduncan911.com/archive/tags/Type+Safety/default.aspx">Type Safety</category></item><item><title>HiPE’s voice-operated Drive-N car PC w/Vista</title><link>http://eduncan911.com/blog/hipe-voice-operated-drive-n-car-pc-vista.aspx</link><pubDate>Mon, 21 Sep 2009 06:55:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6786</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>0</slash:comments><comments>http://eduncan911.com/comments/6786.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6786</wfw:commentRss><description>&lt;P&gt;This old &lt;A href="http://www.engadget.com/2007/04/24/hipe-intros-voice-operated-drive-n-car-pcs-with-vista-mce/" target=_blank&gt;Engadget post&lt;/A&gt; reminds me of my Dell mini-pc I hacked up to fit in a block of foam and fans to run my XP on 12V with 80GB of MP3s and videos, with wireless (to sync from outside in the car).&amp;nbsp; Too bad I never finished the project; but, I did sell it on eBay for a few hundred bucks.&amp;nbsp; That guy wrote some flash interface for it.&amp;nbsp; Nice.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://eduncan911.com/blog/thumbnail/HiPEsvoiceoperatedDriveNcarPCwVista_28F7/hipedriven.jpg"&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:block;FLOAT:none;MARGIN-LEFT:auto;BORDER-TOP:0px;MARGIN-RIGHT:auto;BORDER-RIGHT:0px;" title=hipe-drive-n border=0 alt=hipe-drive-n src="http://eduncan911.com/blog/thumbnail/HiPEsvoiceoperatedDriveNcarPCwVista_28F7/hipedriven_thumb.jpg" width=444 height=226&gt;&lt;/A&gt; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;“The units, ranging in price from $799 for a barebones Via C7 in an amp-style chassis up to $2199 for a tricked-out double-DIN touchscreen monster, all run Windows Vista MCE with the One Voice command system, and can be outfitted with GPS, WiFi, Bluetooth, XM, and even a rearview camera. The machines can also interface with your car's OBD II unit to let you monitor vehicle diagnostics, as well as clear out some of those annoying error messages you usually have to let the dealer handle.”&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The ODB-II connection is nice.&amp;nbsp; But still, $2k?&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6786" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Automotive/default.aspx">Automotive</category><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Car+Audio/default.aspx">Car Audio</category><category domain="http://eduncan911.com/archive/tags/Car+PC/default.aspx">Car PC</category></item><item><title>8 Steps to SEO Quickly</title><link>http://eduncan911.com/blog/8-steps-to-seo-quickly.aspx</link><pubDate>Sun, 20 Sep 2009 05:11:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6785</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>0</slash:comments><comments>http://eduncan911.com/comments/6785.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6785</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://eduncan911.com/blog/thumbnail/7StepstoSEOQuickly_14B2E/willseoforfood.jpg"&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;MARGIN:0px 20px 10px 0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=will-seo-for-food border=0 alt=will-seo-for-food align=left src="http://eduncan911.com/blog/thumbnail/7StepstoSEOQuickly_14B2E/willseoforfood_thumb.jpg" width=204 height=172&gt;&lt;/A&gt; SEO stands for Search Engine Optimizations.&amp;nbsp; It is a term used to reference a website’s HTML source code and related metadata and url for search engine rankings.&amp;nbsp; I recently was involved with interviewing and working with a number of SEO firms here in New York City and picked up a number of quick tips that anyone fimilar with html and css can knock out.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I prefix this post that my own weblog can’t follow these rules 100% because of limitations with CommunityServer and how it bakes-in a number of HTML rendering elements that I have no control over – without editing the source code and deploying new assemblies – more than I care to do at this time.&amp;nbsp; But, I have gotten it &lt;EM&gt;almost&lt;/EM&gt; there.&amp;nbsp; This is why I love ASP.NET MVC -&amp;nbsp;full control over all markup even if it requires more UI work.&lt;/P&gt;
&lt;H2&gt;H1 SEO&lt;/H2&gt;
&lt;P&gt;These have the most impact on your blog’s ranking (at this time).&amp;nbsp; The words you chose to insert into these, their repetition throughout the site (and what H* they fall into), and their correlation to your metadata on the page, and their position on your site all weigh heavily for ranking your site.&lt;/P&gt;
&lt;P&gt;Several of these tips below center around the H1 and other H* tags and how to optimize them.&lt;/P&gt;
&lt;H2&gt;1. The first rule about SEO Club is you talk about SEO Club, with H1 being first.&lt;/H2&gt;
&lt;P&gt;Here’s a quick test.&amp;nbsp; Open an article or weblog post on your site and go to File –&amp;gt; Print Preview (or just print it).&amp;nbsp; What is the first “text” you see at the very top?&amp;nbsp; Is it the title of your post?&amp;nbsp; If not, you fall down the list of rankings.&amp;nbsp; Now, do the same here on my blog.&amp;nbsp; Go to File –&amp;gt; Print Preview and see what it looks like.&amp;nbsp; You will notice it is the title of this page (8 steps to SEO Quickly), and then content after that.&amp;nbsp; Nice and neat.&amp;nbsp; Now, did you notice the header and navbar links are the very bottom?&lt;/P&gt;
&lt;P&gt;This “print view” is pretty much what the search engine sees when it is trying to determine what text to index.&amp;nbsp; If you have a large and complicated header, well your content – and H1 – get pushed way down the page.&lt;/P&gt;
&lt;P&gt;To accomplish this takes a bit of CSS magic.&amp;nbsp; First, wrap your header html in a div.&amp;nbsp; &lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;div id=”header”&amp;gt;…&amp;lt;/div&amp;gt;&lt;/PRE&gt;&lt;/CODE&gt;
&lt;P&gt;The next step is to wrap your content in another dedicated div.&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;div id=”content”&amp;gt;…&amp;lt;/div&amp;gt;&lt;/PRE&gt;&lt;/CODE&gt;
&lt;P&gt;Now, move the entire header div down below your content div.&amp;nbsp; The final step is to use CSS to render a large “space” for your content div, allowing room for the header to be “positioned” to the top of the page.&amp;nbsp; It should look something like this (using inline style definitions for easier reading).&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;html&amp;gt;&lt;BR&gt;&amp;lt;header&amp;gt;&lt;BR&gt;  &amp;lt;title&amp;gt;My SEO post&amp;lt;/title&amp;gt;&lt;BR&gt;  &amp;lt;style type=”text/css”&amp;gt;&lt;BR&gt;    #content &lt;BR&gt;    { &lt;BR&gt;      margin-top: 100px;&lt;BR&gt;    }&lt;BR&gt;    #header &lt;BR&gt;    {&lt;BR&gt;      position: absolute;&lt;BR&gt;      top: 0; &lt;BR&gt;      left: 0;&lt;BR&gt;    }&lt;BR&gt;  &amp;lt;/style&amp;gt;&lt;BR&gt;&amp;lt;/header&amp;gt;&lt;BR&gt;&amp;lt;body&amp;gt;&lt;BR&gt;  &amp;lt;div id=”content”&amp;gt;&lt;BR&gt;    &amp;lt;h1&amp;gt;My SEO post&amp;lt;/h1&amp;gt;&lt;BR&gt;    &amp;lt;p&amp;gt;Search engines should love me now!&amp;lt;/p&amp;gt;&lt;BR&gt;  &amp;lt;/div&amp;gt;&lt;BR&gt;  &amp;lt;div id=”header”&amp;gt;&lt;BR&gt;    &amp;lt;a href=”/”&amp;gt;Home&amp;lt;/a&amp;gt; &amp;lt;a href=”/about”&amp;gt;About&amp;lt;/a&amp;gt;&lt;BR&gt;&lt;/CODE&gt;&lt;CODE&gt;  &amp;lt;/div&amp;gt;&lt;BR&gt;&amp;lt;/body&amp;gt;&lt;BR&gt;&amp;lt;/html&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Notice how the content html comes before the header html?&amp;nbsp; And did you notice that the CSS styles will “push down” the content 100px, while absolute positioning the header above the content?&amp;nbsp; This is the magic that is needed to “make the H1 the first text the search engine sees.”&lt;/P&gt;
&lt;H2&gt;2. The second rule about SEO Club is you talk about SEO Club, with H1 being first.&lt;/H2&gt;
&lt;P&gt;There is more to just moving the H1 up higher in your page.&amp;nbsp; It must be the first text the engine sees!&amp;nbsp; Some clients had difficulty with this because their H1 is buried down deep in a number of divs and sub-titles, tooltips, javascript inline, etc.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The general rule is, refactor your code so that the &amp;lt;h1&amp;gt; is immediately after the &amp;lt;body&amp;gt;.&amp;nbsp; I know, this is near impossible.&amp;nbsp; Especially with ASP.NET Forms’ inline javascript and script references just after the &amp;lt;form&amp;gt; tag.&amp;nbsp; Also, you may want some “Recent Posts” or something above the &amp;lt;h1&amp;gt; location.&lt;/P&gt;
&lt;P&gt;It basically boils down to, refactor your code to push the H1 as the first text.&amp;nbsp; If you cannot, your fall down in rankings.&amp;nbsp; Something so trivial, I know.&amp;nbsp; But every SEO provider we looked into was hard pressed about this priority.&amp;nbsp; So, I am stressing it here with you.&lt;/P&gt;
&lt;H2&gt;3. Use all H1 through H6, on every page.&lt;/H2&gt;
&lt;P&gt;Search engines love these “header” tags.&amp;nbsp; They are perfect for pointing them to your relevant content.&amp;nbsp; So, you should encapsulate as much text as possible with H tags.&amp;nbsp; Just one sticky point, generally you should use all tags, but do not use the H1 tag more than once.&amp;nbsp; Google will even give you errors for pages that use the same H1 title – it must be unique for each page of your entire site.&lt;/P&gt;
&lt;P&gt;This is a bit difficult for me to follow in designing blogs.&amp;nbsp; But, it can be done.&amp;nbsp; Let me point you to a few ways you can use all H1 tags on your blog:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;H1 for the Title of your blog post 
&lt;LI&gt;H2 for post headers/highlights.&amp;nbsp; Like I am doing in this post, in bold. 
&lt;LI&gt;H3 for each Tag for your blog post 
&lt;LI&gt;H4 for sub-titles or sub-topics 
&lt;LI&gt;H5 for related posts 
&lt;LI&gt;H6 for each navbar element (i.e., mine are additional tags or group tags)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Yeah, a lot to break down for each post.&amp;nbsp; But, every time you do will score higher with search engines.&lt;/P&gt;
&lt;H2&gt;4. Concentrate on what content goes into those H tags.&lt;/H2&gt;
&lt;P&gt;Now this is when you concentrate on what “term” you want to brand for your website.&amp;nbsp; You really get only one shot at this, per search engine crawl.&amp;nbsp; You can change it for the next time, but it will change your rankings.&lt;/P&gt;
&lt;P&gt;Now is the time to pause and go use some of these SEO tools to find what phrase you can target.&amp;nbsp; Look for something with a ranking that you can break into.&amp;nbsp; Obviously, “Top Blog” is going to be out of touch for your small site, with 10,000+ links to some of the worlds top blogs.&amp;nbsp; Instead, focus on something more tangible.&amp;nbsp; Like, “Atlanta Bakery” or “NYC Wireless Cafe”.&lt;/P&gt;
&lt;P&gt;The H1 on your homepage is the most important text on your entire site.&amp;nbsp; Higher than metadata, higher than its content, and so on.&amp;nbsp; This is your chance to focus on a word or phrase you want your users to search, and find you!&amp;nbsp; So, insert your phrase you want to focus on for your site here in the H1, without variation, as is.&amp;nbsp; You can also use little tricks with CSS to pull over something more meaningful to your users, while getting the H1 hit.&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;h1 class=”nolinebreak”&amp;gt;NYC Wireless Cafe&amp;lt;/h1&amp;gt;&amp;lt;span class=”h1-like”&amp;gt;s in NoHo&amp;lt;/span&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Let’s take my blog for example.&amp;nbsp; I want to focus on “Eric Duncan” and I want people to search on that, and find me.&amp;nbsp; Right now, I am battling an AAA baseball player for rankings on my name.&amp;nbsp; Since Google ranks pages higher on links and ESPN and 100s of sites link to this baseball player, I am down to like 6 or 7.&amp;nbsp; But on Bing, that looks at the actual content, I am number 2.&amp;nbsp; Woot!&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Now, technically you are to pick that one phrase, and implement it throughout your site with other H tags.&amp;nbsp; For example, if I was hardcore I would want to update my tags to be H3 and worded something like:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Personal &lt;STRONG&gt;Duncan&lt;/STRONG&gt; 
&lt;LI&gt;&lt;STRONG&gt;Duncan’s&lt;/STRONG&gt; Automotive 
&lt;LI&gt;&lt;STRONG&gt;Eric&lt;/STRONG&gt; on Geek Stuff&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Or, going back to the wireless cafe above:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Cafe&lt;/STRONG&gt; Drinks 
&lt;LI&gt;&lt;STRONG&gt;NYC&lt;/STRONG&gt; Favorites 
&lt;LI&gt;&lt;STRONG&gt;Wireless&lt;/STRONG&gt; Hours&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Notice how I am working in parts of the target H1 in each tag?&amp;nbsp; This is what gets ranked very very well.&amp;nbsp; Before, the cafe would have had “Drinks – Favorites – Hours” as tags or navbar elements.&amp;nbsp; But, by adding in parts of the target phrase for the H1 on the homepage, and making each navbar element an H tag, you now have much more ranking power.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Say if you have “Best” in your homepage H1, such as “Best NYC Cafe”, you would want to use “Best” in just about every H2 on&amp;nbsp; your site going forward.&amp;nbsp; “Best Dinners”, “Best Drinks”, “Best Menu”, etc.&lt;/P&gt;
&lt;H2&gt;5. H1 –&amp;gt; Title –&amp;gt; Metadata –&amp;gt; H2-H6 –&amp;gt; url text&lt;/H2&gt;
&lt;P&gt;That is the secret formula, that about 3/5ths of seo firms agreed on.&amp;nbsp; Several of them gave variations.&amp;nbsp; But more or less, that is what they say.&lt;/P&gt;
&lt;P&gt;So, by those rankings, you should now focus on your &amp;lt;title&amp;gt; tag in the header.&amp;nbsp; The rule is, the H1 should exactly match your Title.&amp;nbsp; So, on your blog post page, your &amp;lt;h1&amp;gt; is the title of your post.&amp;nbsp; Well, your &amp;lt;title&amp;gt; should exactly match that as well.&amp;nbsp; It should NOT be prefixed with your site name.&amp;nbsp; This is the mistake people tend to miss.&amp;nbsp; “I want the site name in every &amp;lt;title&amp;gt;, so when it is bookmarked…”&amp;nbsp; Well, that is the problem.&amp;nbsp; If the H1 is different than your Title, then it isn’t a match.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Now some said you can suffix the title with your site’s short-name (just a little text).&amp;nbsp; But there was debates to rather even this was acceptable.&amp;nbsp; I would change my site here for it, but CS is limited in that regard.&lt;/P&gt;
&lt;P&gt;Next is the Metadata.&amp;nbsp; Yep, that thing that we were all taught back in the 90s was the “key” to searching.&amp;nbsp; Well, it still is to a point.&amp;nbsp; It can’t contain more than 10 keywords (or might get ignored completely).&lt;/P&gt;
&lt;H2&gt;6. Friendly Urls or SEO Urls&lt;/H2&gt;
&lt;P&gt;This is what a lot of people think gets ranked high.&amp;nbsp; “Converting my post.aspx?PostID=523 to /archive/2009/09/20/my-cool-post/ is the best thing you can do!”&amp;nbsp; Well, no.&amp;nbsp; That is why it is #6.&amp;nbsp; It is of a lower priority than the rest above, because as mentioned in #5, it goes H1 –&amp;gt; Title –&amp;gt; Metadata –&amp;gt; H2-H6.&amp;nbsp; And THEN it gets to Url.&lt;/P&gt;
&lt;P&gt;And for those that don’t know, “SEO Friendly Urls” does not mean removing the querystring.&amp;nbsp; Search engines are smart enough to analyze the querystrings and follow them.&amp;nbsp; Google even found the ?p= and logged it as a “Page Index” variable on my site.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;No, SEO Friend Urls mean removing the integer from the PostID= and making it something legible, and indexable.&amp;nbsp; Like, the post title.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;This works well for Wordpress blogs that want an SEO url, but does not have access to mod_rewrite.&amp;nbsp; Just change the url to be http://domain.com/?p=%postname% and you should be SEO friendly going forward, without mod_rewrite.&lt;/P&gt;
&lt;H2&gt;7. XHTML Compliancy&lt;/H2&gt;
&lt;P&gt;It may seem frivolous, but search engines really are just computer programs with 100s of rules to follow when reading your page.&amp;nbsp; One of those is it attempt to select these H* tags from your page and process them.&amp;nbsp; If you have some funky text, broken html tags, and just general messy html, several of their rules will fail – and you fail to rank higher.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Go hit-up a validator to see how your site does: &lt;A title=http://validator.w3.org/ href="http://validator.w3.org/"&gt;http://validator.w3.org/&lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;8. Off-page SEO&lt;/H2&gt;
&lt;P&gt;Everything else above covers what we call “on-page” SEO, which is the SEO you can control from your site’s markup.&amp;nbsp; Off-page SEO is what Google’s entire ranking system is based on – &lt;EM&gt;how many websites link to your website&lt;/EM&gt;.&amp;nbsp; So, commission a dozen college students to go out and talk about your site on a few hundred websites to get those “off-page seo” links.&amp;nbsp; Yeah, this is shady and is what causes those, “Oh man, cool post!&amp;nbsp; Check out similar similar here at…” comments and forum posts you see.&amp;nbsp; This is generating off-page SEO for those websites with spam comments.&amp;nbsp; But, it’s what they do – and Google rewards them for it.&lt;/P&gt;
&lt;H2&gt;Summary&lt;/H2&gt;
&lt;P&gt;To sum things up, SEO is more than just a pretty url.&amp;nbsp; It is about changing your markup and thinking before you do things.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Also, this is what the rules are as of 2009.&amp;nbsp; In 1999, it was all about metadata.&amp;nbsp; Who knows what it will be in 2019.&amp;nbsp; Maybe it will be what images are being shown and how often you should images in each post (I get an image in each one for me).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Good luck!&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6785" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/SEO/default.aspx">SEO</category></item><item><title>Google Chrome popups gets jiggy with it</title><link>http://eduncan911.com/blog/google-chrome-popups-gets-jiggy-with-it.aspx</link><pubDate>Mon, 15 Sep 2008 20:15:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6108</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>1</slash:comments><comments>http://eduncan911.com/comments/6108.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6108</wfw:commentRss><description>&lt;P&gt;&lt;IMG style="WIDTH:110px;HEIGHT:110px;" align=left src="http://i.cmpnet.com/infoweek/graphics_library/110x110/google_chrome_noshadow.jpg" width=110 height=110&gt;There are dozens of reviews for Google Chrome out there. So I will not bore you with any (except I am really liking&amp;nbsp;the isolated tabs, besides the alpha issues).&amp;nbsp;But, as I am doing Google Chrome testing today I noticed something interesting on how Google Chrome handles popups.&amp;nbsp;Check out the video I recorded today.&lt;/P&gt;
&lt;P&gt;Interesting how Google does not block the popup.&amp;nbsp; But instead, they&amp;nbsp;animate the window by moving it down and across the bottom of the screen!&lt;/P&gt;
&lt;P&gt;I have not isolated the exact reason to why&amp;nbsp;as Chrome does not&amp;nbsp;move other window.open popups such as Facebook's Share on YouTube.&amp;nbsp; But the one fact I have found is the Facebook Connect uses XSS (cross-site scripting) which we have had to configure to allow them to run scripts.&amp;nbsp; If someone wants to test it on other sites that are using XSS, please let me know your results.&amp;nbsp; The Facebook development team was also able to reproduce it, which removes my machine as a possible source (or virus).&lt;/P&gt;
&lt;P&gt;&lt;p align="center" id="video_6108"&gt;&lt;a href="http://eduncan911.com/downloads/fbconnect-moving.wmv"&gt;&lt;img src="/Themes/default/images/video.gif" border = "0" width="920" height="640"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href = "http://eduncan911.com/downloads/fbconnect-moving.wmv"&gt;View Video&lt;/a&gt;&lt;br /&gt;Format: wmv&lt;br /&gt;Duration: --:--&lt;/p&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://eduncan911.com/downloads/fbconnect-moving.wmv" target=_blank&gt;(direct download, right-click and save-as - 3 MB)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;&lt;/DIV&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6108" width="1" height="1"&gt;</description><enclosure url="http://eduncan911.com/downloads/fbconnect-moving.wmv" length="0" type="video/x-ms-wmv" /><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>Getting GoDaddy SSLs working in Firefox on IIS</title><link>http://eduncan911.com/blog/getting-godaddy-ssls-working-in-firefox-on-iis.aspx</link><pubDate>Fri, 09 May 2008 05:15:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:6004</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>5</slash:comments><comments>http://eduncan911.com/comments/6004.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=6004</wfw:commentRss><description>&lt;P&gt;Upon installing your SSL certificate purchased through GoDaddy, and your Firefox users get prompted with a certificate warning of "Unauthorized Authority", read on for a fix using Windows 2003 Server (and R2).&amp;nbsp; This also works for any other authority that is not authorized by default in any browser.&amp;nbsp; In this article, I provide links to GoDaddy's Intermediate Certificates.&amp;nbsp; If you obtained your SSL certificate through another party, ask them for their "Intermediate Certificates" to download for IIS.&lt;/P&gt;
&lt;H3&gt;Overview&lt;/H3&gt;
&lt;P&gt;&lt;A href="http://en.wikipedia.org/wiki/Secure_Sockets_Layer" target=_blank&gt;SSL certificates&lt;/A&gt; are commonly known to secure a channel of communications, such as the web and email.&amp;nbsp; The problem when installing GoDaddy SSL certificates on a server is Firefox may prompt you stating that the certificate is from an "Unauthorized Authority".&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Why is GoDaddy an unauthorized authority on SSL certificates?&amp;nbsp; &lt;A href="http://bloggit.livejournal.com/26595.html" target=_blank&gt;Bloggit&lt;/A&gt; has a good definition over on his blog, as well as a resolution for &lt;A href="http://www.stunnel.org/" target=_blank&gt;stunnel&lt;/A&gt; and apache systems.&amp;nbsp; But, we are using IIS so things change a bit for us.&amp;nbsp; The bottom-line is a simple quote from his blog post:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;In practice, while &lt;/EM&gt;&lt;A href="http://www.opera.com/products/desktop/"&gt;&lt;EM&gt;Opera&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; and &lt;/EM&gt;&lt;A href="http://www.newadvent.org/cathen/05649a.htm"&gt;&lt;EM&gt;Internet Explorer&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; come [installed] knowing about GoDaddy [as an authorized authority], Firefox and Thunderbird do not. And therefore presumably several other devices also don't. They gripe that GoDaddy is an "Unknown Authority"... rather than silently accepting it.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;To better describe what is happening, think of how an SSL certificate gets authorized by your browser.&amp;nbsp; I am going to take a stab on how I think it works (feel free to correct me in the comments).&amp;nbsp; The browser receives the header information for the SSL certificate upon the first communication to the web server.&amp;nbsp; Within the header of this request is the complete information and public key of the SSL certificate information.&amp;nbsp; But also included in the SSL certificate header information is the reference chain of the issuer, which is GoDaddy (or whomever issued your SSL certificate).&amp;nbsp; If the client's browser does not have GoDaddy listed as a known and authorized issuer of SSL certificates (i.e. Firefox and Thunderbird do not, but IE7 does), the browser will prompt the user of the Unknown Authority.&amp;nbsp; So the fix is to add a known issuer of SSL certificates that is "linked" to GoDaddy's (better known as Intermediate Certificates) at the server level.&amp;nbsp; &lt;/P&gt;
&lt;H3&gt;Resolution&lt;/H3&gt;
&lt;P&gt;The fix is to get GoDaddy added to the list of companies that are authorized to issue SSL certificate.&amp;nbsp; And, this is performed on the web server serving up your custom SSL certificate.&amp;nbsp; We will need to add the GoDaddy company to the reference chain of authorized issuers of SSL certificates.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Basically we want to say, "GoDaddy is known as a child of the bigger company Starfield".&amp;nbsp; Starfield is GoDaddy's parent company and is in Firefox and Thunderbird's list of authorized authorities.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;And just like SSL certificates that must be issued by GoDaddy to be authorized, Starfield must issue a similar certificate that describes GoDaddy as a known authorized authority of SSL certificates.&lt;/P&gt;
&lt;P&gt;I am going to list the steps first outlined by &lt;A href="http://www.alagad.com/go/blog-entry/getting-rid-of-web-site-certified-by-an-unknown-authority-messages" target=_blank&gt;Doug Hughes&lt;/A&gt;, with some modifications and pictures.&amp;nbsp; Below are the set of instructions to get your new GoDaddy SSL certificate installed first.&amp;nbsp; We will tackle the Starfield GoDaddy Intermediate Certificate later.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Copy your GoDaddy certificate into a file named domainname.cer on your web server.&amp;nbsp; The name is arbitrary, but let it end in .cer for simplicity.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Click Start -&amp;gt; Run and type &lt;FONT face=System&gt;mmc&lt;/FONT&gt; and press Enter.&amp;nbsp; This opens the Microsoft Management Console.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Click File -&amp;gt; Add Remove Snap-In.&amp;nbsp; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Click Add to open the Add Standalone Snap-In Window&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Scroll to find the &lt;FONT face=System&gt;Certificates&lt;/FONT&gt; snap-in as shown below.&amp;nbsp; Select it and click Add.&lt;BR&gt;&lt;BR&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border=0 alt=step5 src="http://eduncan911.com/blog/thumbnail/GettingGoDaddySSLsworkinginFirefox_13F76/step5.jpg" width=702 height=492&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;In the corresponding wizard, select &lt;FONT face=System&gt;Computer account&lt;/FONT&gt; and click Next.&lt;BR&gt;&lt;BR&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border=0 alt=step6 src="http://eduncan911.com/blog/thumbnail/GettingGoDaddySSLsworkinginFirefox_13F76/step6.jpg" width=700 height=492&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Select &lt;FONT face=System&gt;Local computer&lt;/FONT&gt; and click Finish.&lt;BR&gt;&lt;BR&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border=0 alt=step7 src="http://eduncan911.com/blog/thumbnail/GettingGoDaddySSLsworkinginFirefox_13F76/step7.jpg" width=699 height=492&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Click Close and then Ok.&amp;nbsp; Now you will see the &lt;FONT face=System&gt;Certificates&lt;/FONT&gt; snap-in in the MMC.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Expand the &lt;FONT face=System&gt;Certificates&lt;/FONT&gt; node, right-click on &lt;FONT face=System&gt;Trusted Root Certification Authorities&lt;/FONT&gt; and select &lt;FONT face=System&gt;All Tasks -&amp;gt; Import&lt;/FONT&gt; as shown below.&lt;BR&gt;&lt;BR&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border=0 alt=step9 src="http://eduncan911.com/blog/thumbnail/GettingGoDaddySSLsworkinginFirefox_13F76/step9.jpg" width=700 height=490&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Click Next and then select the domainname.cer you created in step 1 above.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;The next step in the wizard should indicate that the certificates will be placed in the &lt;FONT face=System&gt;Trusted Root Certification Authorities&lt;/FONT&gt;.&amp;nbsp; If it does not, you will need to select it by clicking Browse...&amp;nbsp; Once it looks like the below, click Next.&lt;BR&gt;&lt;BR&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border=0 alt=step11 src="http://eduncan911.com/blog/thumbnail/GettingGoDaddySSLsworkinginFirefox_13F76/step11.jpg" width=700 height=490&gt; &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Click Finish on the final page.&amp;nbsp; You should be prompted with a dialog that states the import was successful.&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Finally, you will need to stop and restart the website that the SSL certificate belongs to for the changes to take affect.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Final Procedure to install the Intermediate Certificate authority&lt;/H3&gt;
&lt;P&gt;Unfortunately, you are not done.&amp;nbsp; The above only installs the GoDaddy certificate in the root trusted root certificates.&amp;nbsp; The client's browser will not authorize it just yet.&amp;nbsp; To finish the process, you will need to install GoDaddy's Starfield version of their Intermediate Certificate.&amp;nbsp; Here is the all important link to go download it:&lt;/P&gt;
&lt;P&gt;&lt;A title=https://certs.godaddy.com/Repository.go href="https://certs.godaddy.com/Repository.go"&gt;https://certs.godaddy.com/Repository.go&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;If you obtained your SSL certificate through another party, such as the discounted VeriSign type, you will need to obtain the Intermediate Certificate from your provider.&amp;nbsp; But the steps are identical to resolve.&lt;/P&gt;
&lt;P&gt;There are a number of certificates available in the link above.&amp;nbsp; So for simplicity, I downloaded the bundled package that includes all of them named &lt;FONT face=System&gt;Go Daddy PKCS7 Certificate Intermediates Bundle (for Windows IIS)&lt;/FONT&gt;.&lt;/P&gt;
&lt;P&gt;Note: Take a special notice that this will download a file with the extension of .p7b.&lt;/P&gt;
&lt;P&gt;The final step is to get the bundle of certificates installed.&amp;nbsp; You do this by following exactly the steps I outlined above, 1 through 13 all over again.&amp;nbsp; Except on step 10, you will need to filter the Files of type drop-down as shown below.&lt;/P&gt;
&lt;P&gt;Note: You only need to perform this process once per server, as it will be installed at the root level of all certificates for the server.&amp;nbsp; So any further GoDaddy SSL certificates installed will pickup the Starfield SSL certificate as the parent company of GoDaddy.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Step 10 change:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border=0 alt=step10 src="http://eduncan911.com/blog/thumbnail/GettingGoDaddySSLsworkinginFirefox_13F76/step10.jpg" width=703 height=550&gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This will now let you browse to the gd_iis_intermediates.p7b file you downloaded from GoDaddy.&amp;nbsp; Follow the rest of the steps exactly.&lt;/P&gt;
&lt;H3&gt;Final thoughts&lt;/H3&gt;
&lt;P&gt;That is it.&amp;nbsp; Make sure to stop and restart the web site that your new SSL is to take effect on.&amp;nbsp; Or you can do an IISRESET to force an update to all websites.&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=6004" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>PostIcon CS Bug Fix</title><link>http://eduncan911.com/blog/posticon-cs-bug-fix.aspx</link><pubDate>Mon, 03 Sep 2007 18:59:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:5895</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>8</slash:comments><comments>http://eduncan911.com/comments/5895.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=5895</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:10pt;"&gt;&lt;IMG style="WIDTH:380px;HEIGHT:253px;" align=right src="http://www1.istockphoto.com/file_thumbview_approve/2369292/2/istockphoto_2369292_software_bug_03.jpg" width=380 height=253&gt;With the previous release of The MiXX Collection, it&amp;nbsp;was updated to work with CS 2007.&amp;nbsp; Well there is a bug in CS 2007's CSModule that no longer allows updating the ExtendedAttributes after a post is created.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:10pt;"&gt;In other words, the bug in the PostIcon that was introduced with 1.0 release caused a 0.jpg&amp;nbsp;PostIcon to be saved at times and not propertly updating the WeblogPost object.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:10pt;"&gt;&lt;STRONG&gt;Download:&lt;/STRONG&gt; As always, you can&amp;nbsp;download the latest version and source&amp;nbsp;from &lt;A href="http://eduncan911.com/files/folders/communityserver/tags/The+MiXX+Collection/default.aspx" target=_blank&gt;the file gallery&lt;/A&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:10pt;"&gt;This release, version 1.1, resolves this issue with a&amp;nbsp;performance penalty&amp;nbsp;work-around.&amp;nbsp; But due to the changes and protection in the CSModules, there isn't any other way.&amp;nbsp; The work-around is during a CreatePost event, we don't write the ExtendedAttributes on the PrePost&amp;nbsp;CSModule event&amp;nbsp;(since we do not have the PostID any longer).&amp;nbsp; Instead, I hook into the AfterPost event that fires, after&amp;nbsp;the post has been created, to obtain the PostID.&amp;nbsp; This fires off an UpdatePost method to&amp;nbsp;write the entire post to the DB - again.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:10pt;"&gt;Don't worry, this is only during the first&amp;nbsp;initial CreatePost event.&amp;nbsp; If you go back and Update a post, it fires normally&amp;nbsp;- that is&amp;nbsp;only 1 time because we now have a PostID during the PrePost event to write to the ExtendedAttributes.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:10pt;"&gt;I'm open to suggestions if someone else has a cleaner solution.&amp;nbsp;&amp;nbsp;It all comes down to not being able to&amp;nbsp;update/write&amp;nbsp;to the&amp;nbsp;ExtendedAttributes during the AfterPost (PostPost) CSModule event.&amp;nbsp; I've mentioned it for years, there should be a method to save the ExtendedAttributes without having to update the entire object.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:'Arial','sans-serif';FONT-SIZE:10pt;"&gt;And as always, bookmark this link for updates: &lt;A href="http://eduncan911.com/archive/tags/The+MiXX+Collection/default.aspx"&gt;http://eduncan911.com/archive/tags/The+MiXX+Collection/default.aspx&lt;/A&gt;&amp;nbsp; You can also access the RSS option in there to subscribe via RSS as well.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=5895" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://eduncan911.com/archive/tags/PostIcon/default.aspx">PostIcon</category><category domain="http://eduncan911.com/archive/tags/The+MiXX+Collection/default.aspx">The MiXX Collection</category></item><item><title>Living with Subversion (Part 4)</title><link>http://eduncan911.com/blog/living-with-subversion-part-4.aspx</link><pubDate>Sat, 14 Jul 2007 18:14:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:5880</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>2</slash:comments><comments>http://eduncan911.com/comments/5880.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=5880</wfw:commentRss><description>&lt;P&gt;In the forth and final part of my series, &lt;EM&gt;&lt;A href="http://eduncan911.com/archive/2007/07/14/living-with-subversion-part-1.aspx"&gt;Living with Subversion&lt;/A&gt;&lt;/EM&gt;, I cover a number of performance tips and some Dos and Don'ts.&lt;/P&gt;
&lt;H2&gt;Improving performance of TortoiseSVN&lt;/H2&gt;
&lt;P&gt;The performance improvement aspect of this article targets those mainly on laptops that want to save battery life&amp;nbsp;and/or slower HDD machines, or simply have just too many projects (&amp;gt;50) within repositories.&amp;nbsp; It is quite simple really, TortoiseSVN's&amp;nbsp;folder icon overlays are very cool as a quick visual indication of what has changed recently.&amp;nbsp; The problem with the icon overlays is TortoiseSVN constantly updates the status of these, especially if you are using Windows Explorer to view the folder tree no matter if you are playing a game, surfing the web, etc.&lt;/P&gt;
&lt;P&gt;Still not on par with what I am explaining?&amp;nbsp; Check out TortoiseSVN's &lt;A href="http://tortoisesvn.net/node/267" target=_blank&gt;Optimize Performance&lt;/A&gt; page.&amp;nbsp; But they have left out one key improvement: Disable the Status Cache (icon overlays).&amp;nbsp; &lt;/P&gt;
&lt;P align=center&gt;&lt;A title=TortoiseSVN-IconOverlays href="http://www.flickr.com/photos/10018165@N02/804223283/"&gt;&lt;IMG border=0 alt=TortoiseSVN-IconOverlays src="http://static.flickr.com/1235/804223283_0dfb0aebc5.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;Icon Overlays Dialog&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Icon Overlays&lt;/STRONG&gt;&lt;BR&gt;I set mine Status Cache overlays to "none".&amp;nbsp; This effectively disables the Status Cache all together.&amp;nbsp; Just like SGV Client, you'll have to perform an Update before starting your work everyday as this will pull down&amp;nbsp;the latest copy to start with.&amp;nbsp; If you like the red X effect, you'll want to leave this on Default.&amp;nbsp; I personally don't want my HDD going in insane (like it did with the dozen+ repositories and icon overlays).&amp;nbsp; So I disable mine, period.&lt;/P&gt;
&lt;P&gt;Also be sure to uncheck "Show overlays only in explorer".&amp;nbsp; This will keep the icons out of the standard Windows dialog popups, and only show them in the Windows Explorer.&amp;nbsp; Again if you want to see when something is out-of-sync immediately, you'll want to skip this part but sacrifice performance.&lt;/P&gt;
&lt;P&gt;Our final performance increase greatly effects Windows' users.&amp;nbsp; Setting the include paths text box.&amp;nbsp; As described in the Optimize Performance page by TortoiseSVN, you will want to specify the directory of where your projects are stored.&amp;nbsp; This keeps TortoiseSVN from snooping around your Windows directory for hidden svn folders - constantly snooping.&lt;/P&gt;
&lt;H2&gt;Common TortoiseSVN mistakes&lt;/H2&gt;
&lt;P&gt;As mentioned above, TortoiseSVN uses hidden directories to store the Subversion versioning information for that directory and files.&amp;nbsp; So a mistake several of us have made is while working with an existing repository is&amp;nbsp;we use Windows Explorer&amp;nbsp;to copy an existing directory to a new directory (i.e. Theme copying).&amp;nbsp; The problem with this logic is that the hidden svn directories are still there.&amp;nbsp; This causes versioning whoas and most likely will force your updates into the previous version of that directory (or an Update will override your changes without a merge).&amp;nbsp; This is because TortoiseSVN is using the path information stored within the hidden svn folders.&lt;/P&gt;
&lt;P&gt;Simple fix really but you have to use your head to remember: Always right-click the new directory after copying, click Search and search for the .svn or _svn directories and delete them.&amp;nbsp; Then the next time you go to check in, the directories will appear to be new to TortoiseSVN and allow you to add them.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;An easier&amp;nbsp;fix would be to just use the Rep-browser to perform the action(s), and do an Update when done on your local machine.&amp;nbsp; This will copy/pull down&amp;nbsp;everything properly.&lt;/P&gt;
&lt;P&gt;Another common task is if you need to move a directory, as with SGV Client, you will have to move it within the Repo-browser or suffer similar issues noted above.&lt;/P&gt;
&lt;P&gt;Bottom-line: use the Repo-browser for most of your copy and/or moving of folders.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And that concludes this four-part series.&amp;nbsp; Lot of reading for just a few options, eh?&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=5880" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>Living with Subversion (Part 3)</title><link>http://eduncan911.com/blog/living-with-subversion-part-3.aspx</link><pubDate>Sat, 14 Jul 2007 18:13:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:5879</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>2</slash:comments><comments>http://eduncan911.com/comments/5879.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=5879</wfw:commentRss><description>&lt;P&gt;In part three of &lt;EM&gt;&lt;A href="http://eduncan911.com/archive/2007/07/14/living-with-subversion-part-1.aspx"&gt;Living with Subversion&lt;/A&gt;&lt;/EM&gt;, we cover one of the biggest reason of this series: Using a different Merge Tool.&lt;/P&gt;
&lt;H2&gt;Merging conflicts&amp;nbsp;using SourceGear Vault Client's DiffMerge&lt;/H2&gt;
&lt;P&gt;Now onto one of the most useful tidbits of this article, using the trusty SGDM tool that is included with SourceGear Vault Client installation.&amp;nbsp; I have been using SourceGear Vault Client 3.1.9 for a while now, so I am writing using that version.&amp;nbsp; I know 3.5.x and 4.0 has been released, but our last version of SGV was 3.1.x so that's what I am used to.&lt;/P&gt;
&lt;P&gt;Once installed, you do not have to do anything to the client.&amp;nbsp; Instead, it's all about setting up Tortoise to use it as the merge tool.&lt;/P&gt;
&lt;P&gt;Note: TortoiseSVN does come with its own DiffMerge tool.&amp;nbsp; Maybe it is me too busy coding, or not spending enough time resolving conflicts, but I just cannot stand TortoiseSVN's version.&amp;nbsp; Hence this topic.&amp;nbsp; I am very use to SGV's robust version.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;A title=TortoiseSVN-DiffViewer href="http://www.flickr.com/photos/10018165@N02/804466189/"&gt;&lt;IMG border=0 alt=TortoiseSVN-DiffViewer src="http://static.flickr.com/1012/804466189_5fda7f8a80.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;Diff Viewer Dialog&lt;/P&gt;
&lt;P&gt;First, click the Diff Viewer on the left and&amp;nbsp;select the "External" option.&amp;nbsp; Next find/note the location of your Vault Client directory.&amp;nbsp; There should be a sgdm.exe file here.&amp;nbsp;&amp;nbsp;Change the Diff Viewer (you will want to keep the quotation marks too) location&amp;nbsp;to:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;"C:\Program Files\SourceGear\Vault Client\sgdm.exe" %mine %base&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Making sure the path matches obviously.&amp;nbsp; This will put your local copy in the left panel and the repository's version in the right panel.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;A title=TortoiseSVN-MergeTool href="http://www.flickr.com/photos/10018165@N02/804507399/"&gt;&lt;IMG border=0 alt=TortoiseSVN-MergeTool src="http://static.flickr.com/1175/804507399_4a22b60ec4.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;Merge Tool Dialog&lt;/P&gt;
&lt;P&gt;Next click the Merge Tool on thee left and select External once again.&amp;nbsp; Using the same location of the sgdm.exe as above, paste it in.&amp;nbsp; But this time, the command-line arguments are a good bit longer:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;"C:\Program Files\SourceGear\Vault Client\sgdm.exe" /result:%merged /title1:%yname /title2:%mname /title3:%tname %mine %merged %theirs&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This will put your working version on the left panel, the repository's version in the right panel, and the TortoiseSVN's merged version in the center.&lt;/P&gt;
&lt;P&gt;The trick is that now you can use SGV's DiffMerge tool, easy color coding and replace options that you are used to, overriding the TortoiseSVN's merged (and often broken) result area highlighted in bright yellow as shown below.&lt;/P&gt;
&lt;P align=center&gt;&lt;A title=TortoiseSVN-DiffViewer href="http://www.flickr.com/photos/eduncan911/810062741/"&gt;&lt;IMG border=0 alt=TortoiseSVN-DiffViewer src="http://farm2.static.flickr.com/1351/810062741_d9f3baa6fb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;SGV Client's SDMG.exe opened by TortoiseSVN after a conflict&lt;/P&gt;
&lt;P&gt;The Unified Diff Viewer is a viewer for CVS patch files.&amp;nbsp; By default on Windows, TortoiseSVN uses Notepad.&amp;nbsp; Tip: Upgrade to Notepad2 for you local notepad.exe in windows.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://eduncan911.com/archive/2007/07/14/living-with-subversion-part-4.aspx"&gt;Continue to Part 4&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=5879" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>Living with Subversion (Part 2)</title><link>http://eduncan911.com/blog/living-with-subversion-part-2.aspx</link><pubDate>Sat, 14 Jul 2007 18:09:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:5878</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>4</slash:comments><comments>http://eduncan911.com/comments/5878.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=5878</wfw:commentRss><description>&lt;P&gt;This is part duex in the series &lt;EM&gt;&lt;A class="" href="http://eduncan911.com/archive/2007/07/14/living-with-subversion-part-1.aspx"&gt;Living with Subversion&lt;/A&gt;&lt;/EM&gt;, starting to get into the nit-n-gritty.&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Configure your software&lt;/H2&gt;
&lt;P&gt;After you install TortoiseSVN and SGV's Client, you will want to configure TortoiseSVN for a number of things.&amp;nbsp; You will access this by right-clicking on your empty desktop, going to TortoiseSVN, and then to Settings.&lt;/P&gt;
&lt;P align=center&gt;&lt;A title=TortoiseSVN-ContextMenu href="http://www.flickr.com/photos/10018165@N02/803978941/"&gt;&lt;A title=TortoiseSVN-ContextMenu href="http://www.flickr.com/photos/10018165@N02/803978941/"&gt;&lt;IMG alt=TortoiseSVN-ContextMenu src="http://static.flickr.com/1327/803978941_48530121f7.jpg" border=0&gt;&lt;/A&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;TortoiseSVN's Context Menu for Settings&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Exclude files you do not want to check-in&lt;BR&gt;&lt;/STRONG&gt;These includes directories to ignore such as /bin, /obj, /_sgbak, and files such as *.suo, *.pdb, *.bak and so on.&amp;nbsp; Basically, you do not want to check-in these types of files.&lt;/P&gt;
&lt;P&gt;Go to the TortoiseSVN's&amp;nbsp;Settings&amp;nbsp;dialog and click Edit.&lt;/P&gt;
&lt;P align=center&gt;&lt;A title=TortoiseSVN-Settings href="http://www.flickr.com/photos/10018165@N02/803979123/"&gt;&lt;IMG alt=TortoiseSVN-Settings src="http://static.flickr.com/1298/803979123_cc0eb1e013.jpg" border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;TortoiseSVN's Settings Dialog&lt;/P&gt;
&lt;P&gt;This should open a Notepad window displaying a lot of options.&amp;nbsp; Around line 71, replace the line for # global-ignores with the following:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;global-ignores = bin Bin&amp;nbsp;obj cache storage _sgbak *.suo *.pdb *.bak *.user *.db&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;And make sure to remove the "# " at the beginning.&amp;nbsp; Save it and&amp;nbsp;it should take effect immediately.&amp;nbsp; The "cache" and "storage" folders are there because of working with CommunityServer.&amp;nbsp; With CommunityServer, the cache and storage sub-folders are used for images and attachments for most applications.&amp;nbsp; We don't want to check in those images, attachments, nor the thumbnails.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Using underscores to prefix the hidden directories&lt;/STRONG&gt;&lt;BR&gt;TortoiseSVN stores the versioning information of a directory and files in a hidden svn folder, usually prefixed with a dot ".".&amp;nbsp; This can reek havok on a few developer applications.&amp;nbsp; So&amp;nbsp;I check &lt;EM&gt;&lt;STRONG&gt;Use "_svn" instead of ".svn" directories&lt;/STRONG&gt;&lt;/EM&gt; on the same dialog shown above.&amp;nbsp; Visual Studio 6.0's Interdev did not like files starting with a dot ".", and I've seen some funkiness with VS 2003.&amp;nbsp; VS 2005 may be ok, but it is just a force of habit to use underscores instead of periods for the hidden directories.&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://eduncan911.com/archive/2007/07/14/living-with-subversion-part-3.aspx"&gt;Continue to Part 3&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=5878" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>Living with Subversion (Part 1)</title><link>http://eduncan911.com/blog/living-with-subversion-part-1.aspx</link><pubDate>Sat, 14 Jul 2007 18:02:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:5877</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>6</slash:comments><comments>http://eduncan911.com/comments/5877.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=5877</wfw:commentRss><description>&lt;P&gt;Friends of mine&amp;nbsp;ask a lot about my custom settings for TortoiseSVN.&amp;nbsp; To make it play nicer with Visual Studio, easier (or should I say dumb-proofing) the auto-merging,&amp;nbsp;performance tweaks especially on laptops, and overall tips to ensure you don't duplicate the mistakes my friends and I at Telligent have found through trial-n-error.&amp;nbsp; I occasionally forget these myself and have to dig around a previous machine or image snapshot to find the settings.&amp;nbsp;&amp;nbsp;So here is a post to archive it all off for my records&amp;nbsp;as well as for you to use for your reference.&lt;/P&gt;
&lt;H2&gt;Introduction&lt;/H2&gt;
&lt;P&gt;This four-part series targets the Microsoft .NET developer looking for a clean and stress-free environment utilizing Subversion for the first time, or even seasoned veterans by tweaking their installs and usability.&amp;nbsp; It especially targets those with SourceGear Vault experience and want that clean and easy experience with Subversion.&lt;/P&gt;
&lt;P&gt;So with that in mind, we will be covering a number of applications to install.&amp;nbsp; Each with custom settings documented here that will help you get the most out of each, especially those with laptops.&lt;/P&gt;
&lt;H2&gt;A few definitions and what we will be using&lt;/H2&gt;
&lt;P&gt;First on&amp;nbsp;this agenda targets those new to Subversion and its tools.&amp;nbsp; I'm not going to bore you with the details of the history of Subversion and &lt;A href="http://en.wikipedia.org/wiki/Concurrent_Versions_System" target=_blank&gt;CVS&lt;/A&gt; definitions or even how to use SubVersion.&amp;nbsp; All of that information is available in the docs for these.&amp;nbsp; Instead this is just a quick overview to help those moving to Subversion and what parts make it work that is out of the norm.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://subversion.tigris.org/" target=_blank&gt;Subversion&lt;/A&gt; is an open-source product as you&amp;nbsp;may already know.&amp;nbsp; A quick misnomer to those looking to switch is that&amp;nbsp;you do not&amp;nbsp;have to download and install Subversion itself.&amp;nbsp; Yes it is a client and server package that does it all, but it is not needed for&amp;nbsp;your client (developer) machine since you are connecting remotely.&amp;nbsp;&amp;nbsp;Why?&amp;nbsp; It's all command-line based.&amp;nbsp; Those server admins looking for tips and&amp;nbsp;tricks - I'll cover ya'll in another post.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;What you want instead is an Subversion-compatible GUI client and there are a few out there.&amp;nbsp; Telligent's IT guru immediately adopted &lt;A href="http://tortoisesvn.tigris.org/" target=_blank&gt;TortoiseSVN&lt;/A&gt; as the client for all when they switched to Subversion (i.e. only one they will support).&amp;nbsp; I've used a few others like &lt;A href="http://rapidsvn.tigris.org/" target=_blank&gt;RapidSVN&lt;/A&gt;&amp;nbsp;and will have to agree that Tortoise, while being a Windows Shell Extension (yes, cringe), is the most feature-full version so far.&amp;nbsp; But feel free to write your own and drop me a line to beta test.&amp;nbsp; RapidSVN is coming along nicely and I continue to keep my eye on it.&amp;nbsp; Think RapidSVN = SourceGear Vault for Subversion, a stand-alone application that doesn't integrate with Windows Explorer.&amp;nbsp; But for now, we'll stick to TortoiseSVN until RapidSVN matures a bit more.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.sourcegear.com/" target=_blank&gt;SourceGear's Vault&lt;/A&gt; (SGV)&amp;nbsp;is a very robust code repository system which can be configured for CVS or VSS.&amp;nbsp; Most of us developers have fallen in&amp;nbsp;love with SGV, but I have come to recognize&amp;nbsp;its inability to scale with a large number of repositories,&amp;nbsp;check-ins, and branching within a single MSSQL install.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The &lt;A href="http://www.sourcegear.com/vault/downloads2.html" target=_blank&gt;SGV Client&lt;/A&gt; is what&amp;nbsp;I install to use&amp;nbsp;as my TortoiseSVN&amp;nbsp;merge and diff tool.&amp;nbsp; The SGV Client includes a nifty tool called SGDM.exe (SourceGear DiffMerge) that can be command-line driven.&amp;nbsp; So I have been cheating by installing the SGV Client 3.1.9 (I have not used a newer version yet), linking only to&amp;nbsp;sgdm.exe, and ignoring the rest of the install.&amp;nbsp; And before you ask, yes the EULA for the Vault Client states a license is required to connect to a SGV repository.&amp;nbsp; We are not connecting to a repository, just using a tool which I could not find anything the EULA preventing that or by running it in a stand-alone environment.&lt;/P&gt;
&lt;P&gt;Interestingly enough&amp;nbsp;SourceGear has released a&amp;nbsp;&lt;A href="http://www.sourcegear.com/diffmerge/index.html" target=_blank&gt;DiffMerge&lt;/A&gt;&amp;nbsp;tool that is available for free, but I do not like this version.&amp;nbsp; I noticed the command-line arguments are&amp;nbsp;much different.&amp;nbsp; I&amp;nbsp;have installed it&amp;nbsp;and tested a few merges, but&amp;nbsp;the color-coding I did not like as much as the&amp;nbsp;client's version of this tool.&amp;nbsp; So for now, I am sticking to the SGV Client 3.1.9's DiffMerge tool as it is tried and true.&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://eduncan911.com/archive/2007/07/14/living-with-subversion-part-2.aspx"&gt;Continue to Part 2&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=5877" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>Dynamic Instance Names of TextFields - A work around</title><link>http://eduncan911.com/blog/dynamic-instance-names-of-textfields-a-work-around.aspx</link><pubDate>Wed, 07 Mar 2007 20:08:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:5694</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>1</slash:comments><comments>http://eduncan911.com/comments/5694.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=5694</wfw:commentRss><description>&lt;P&gt;As I am starting to get back into heavy Flash development&amp;nbsp;after my 5+ year hiatus, I see that Macromedia has added quite a lot of interesting concepts to the newer versions of ActionScript.&lt;/P&gt;
&lt;P&gt;But the purpose of this post is to outline that Macromedia (err now Adobe) still has a lot of work to do on their ActionScript engine, specifically with Dynamic Instance naming conventions (and new-object intellisense would really be nice by now, after all of these years).&amp;nbsp;&amp;nbsp;I am assuming you know flash, a little bit.&amp;nbsp; At least to the level of knowing that you need set an InstanceName of a Symbol, in order to be able to edit its properties at runtime.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I just spent too much time today trying to figure out why my code wasn't working.&amp;nbsp; I am creating numerous dynamic TextFields, but I need to be able to access them for updates in code.&amp;nbsp; And to complicate things, the TextFields will be loaded from different XML files - meaning they will have different InstanceNames.&lt;/P&gt;
&lt;P&gt;You usually can create a dynamic instance name by using the old-school method of&amp;nbsp;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;"&gt;hardCodedName[variable]&lt;/SPAN&gt; or the even older&amp;nbsp;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;"&gt;eval("hardCodedName" + variable)&lt;/SPAN&gt; method.&amp;nbsp; For example, say I want to create a new movie into a dynamic variable made up of an integer I have in a for i++ loop:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;for (int i = 0; i &amp;lt; total; i++)
{
  loadMovie( "myMovie" + i + ".swf", _root.myMovie[ i ] );
}
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Or...&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;for (int i = 0; i &amp;lt; total; i++)
{
  loadMovie( "myMovie" + i + ".swf", _root.eval("myMovie" + i) );
}
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Both of these examples should result in loading myMovie0.swf into the dynamic variable name of /level0/myMovie0 (or _root.myMovie0 per dot-syntax).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;What&amp;nbsp;I found today is that when using some of the newer ActionScript 2.0 and 3.0 functions, they do not honor these methods completely.&amp;nbsp; I had to use a mixture of the two examples above to get it work, and actually could not use either method when creating the object!&amp;nbsp; This is the craziest thing I've seen to where eval() works in referencing the object, but does not work in the creation of the object.&amp;nbsp; &lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;var _root.totalCount:Number = 0;
function CreateMenuItem(Text:String, Href:String, Title:String, Spacer:Boolean)
{
    // create the symbol at the last Y position we are tracking
    this.createTextField("movFlyoutText" + _root.totalCount
        , _root.totalCount, _root.textXpos, _root.lastYpos, _root.textWidth, _root.textHeight);
    eval("movFlyoutText" + _root.totalCount).wordWrap = true;
    eval("movFlyoutText" + _root.totalCount).multiline = true;
    eval("movFlyoutText" + _root.totalCount).border = false;
    eval("movFlyoutText" + _root.totalCount).type = "dynamic";
    eval("movFlyoutText" + _root.totalCount).antiAliasType = "advanced";
    
    textFormat = new TextFormat();
    textFormat.color = 0xffffff;
    textFormat.size = 12;
    textFormat.font = "Futura Condensed";
    
    if (Spacer != true)
    {
      formatText.url = Href;
    }
    
    if (Text.length &amp;gt; 0)
    {
        eval("movFlyoutText" +  _root.totalCount).text = Text;
    }
    else
    {
        eval("movFlyoutText" + _root.totalCount).text = " ";
    }
    
    eval("movFlyoutText" + _root.totalCount).setTextFormat(textFormat);
    
    // reset some vars
    var tmp:Number = eval("movFlyoutText" + _root.totalCount)._height;
    _root.lastYpos = _root.lastYpos + tmp;
    
    _root.totalCount++;
}

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Above is the code I wrote today, to where I can not use [] reference or the eval() reference to get the TextField created properly using the newer &lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;"&gt;createTextField&lt;/SPAN&gt;method.&amp;nbsp; But in other methods throughout my code, using the [] reference works at the baseline.&amp;nbsp; Go figure.&lt;/P&gt;
&lt;P&gt;And as mentioned above, I can not use brackets[] when referencing the object either to set its properties!&amp;nbsp; I had to use eval().&amp;nbsp; Man, how ugly is this code?&amp;nbsp; I'm open to other suggestions.&lt;/P&gt; &lt;img src="http://eduncan911.com/aggbug.aspx?PostID=5694" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Flash/default.aspx">Flash</category></item><item><title>Interesting String.GetHashCode() issue between ASP.NET 1.1 and 2.0</title><link>http://eduncan911.com/blog/gethashcode-issue.aspx</link><pubDate>Thu, 01 Feb 2007 16:50:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:4166</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>9</slash:comments><comments>http://eduncan911.com/comments/4166.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=4166</wfw:commentRss><description>&lt;P&gt;Today a fellow co-worker, &lt;A class="" href="http://sqladvice.com/blogs/dpenton/" target=_blank&gt;David Penton&lt;/A&gt;,&amp;nbsp;ran into an interesting issue about a background&amp;nbsp;ASP.NET&amp;nbsp;thread using ASP.NET 2.0, instead of ASP.NET 1.1 when the individual website was set to run under 1.1.&lt;/P&gt;
&lt;P&gt;First a little background.&amp;nbsp; The internal staging server is Windows 2003 R2.&amp;nbsp; In the past&amp;nbsp;Windows 2003 would throw an exception at the web application level when two or more websites were sharing the same application pool, and they were set to different versions of ASP.NET.&amp;nbsp; The R2 release seems to have resolved this issue, hence our IT Administrator running most sites under the common Default Application Pool.&lt;/P&gt;
&lt;P&gt;We have a client that requires an ASP.NET 1.1 build of the website.&amp;nbsp; So&amp;nbsp;the developer&amp;nbsp;was working within VS2k3.&amp;nbsp; The background processes in question of the web application is to process the searching algorithm we use for an out-of-the-box CommunityServer install (nicknamed the SearchBarrel).&amp;nbsp; We have an Enterprise Search addon available that uses &lt;FONT size=2&gt;Lucene&lt;/FONT&gt;.NET, but for this client they are using the search barrel.&amp;nbsp; The SearchBarrel breaks up a post into individual words, then issues a ToLower() and then GetHashCode() on the string for each word.&amp;nbsp; We store this Int32 hash in the database as number matching is faster to index than string matching.&lt;/P&gt;
&lt;P&gt;The String.GetHashCode() method is different between .NET 1.1 and .NET 2.0.&amp;nbsp; So when you are upgrading an application from 1.1 to 2.0, and you are storing the HashCode for strings somewhere, you'll have to generate new HashCodes in .NET 2.0.&lt;/P&gt;
&lt;P&gt;The issue the developer ran into was very odd.&amp;nbsp; The post was&amp;nbsp;using a mix of English and Chinese, so we are dealing with an extended character set as well.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;(The word we are trying to hash)&lt;BR&gt;ps3对蓝光技术的采用也是令大家称道的原因之一&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;When a single word mixed English and binary characters without spaces (i.e. Chinese Simplified as above), the background SearchBarrel CSJob (the thread) would generate an ASP.NET&amp;nbsp;2.0 HashCode for the above word!&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;(.NET 2.0 HashCode of the word above)&lt;BR&gt;-309760669&lt;BR&gt;&lt;BR&gt;(.NET 1.1 HashCode of the word above)&lt;BR&gt;&lt;FONT size=2&gt;1104497610&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Yes, the website was set to ASP.NET 1.1.&amp;nbsp; Yes, the binaries were built under .NET 1.1.&amp;nbsp; But yet, we were getting an .NET 2.0 hashcode.&amp;nbsp; The only thing&amp;nbsp;that came to my mind was&amp;nbsp;that it was using the default application pool, which was shared with many other staging websites - mostly ASP.NET 2.0 sites I'm guessing (since most of our clients have moved to ASP.NET 2.0).&lt;/P&gt;
&lt;P&gt;It gets even odder.&amp;nbsp; If the developer was to edit the post, change that one word of mixed English and Chinese characters to insert a space between the two different languages, clearing the search barrel and letting the background thread re-hash the post - it would then use ASP.NET 1.1 to generate the HashCode!&lt;/P&gt;
&lt;P&gt;Very very odd.&amp;nbsp; And we could re-produce it consistently by adding and removing that space and forcing the searchbarrel to rebuild.&lt;/P&gt;
&lt;P&gt;The only thing we could guess is that .NET 1.1 choked on the English + Chinese character mix when encoding the hashcode and somehow reverted back to&amp;nbsp;ASP.NET 2.0 to generate the GetHashCode() method.&lt;/P&gt;
&lt;P&gt;The fix?&amp;nbsp; Move the website to its own dedicated Application Pool.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=4166" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>PostIcon Updated</title><link>http://eduncan911.com/blog/posticon-updated.aspx</link><pubDate>Sat, 16 Dec 2006 21:38:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:2614</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>24</slash:comments><comments>http://eduncan911.com/comments/2614.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=2614</wfw:commentRss><description>&lt;P&gt;You can download&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;The MiXX Collection&lt;/STRONG&gt;&lt;/EM&gt;&amp;nbsp;that includes the updated PostIcon AddOn from these urls:&lt;/P&gt;
&lt;P&gt;(install only)&lt;BR&gt;&lt;A href="http://eduncan911.com/files/folders/2611/download.aspx"&gt;http://eduncan911.com/files/folders/2611/download.aspx&lt;/A&gt;&lt;A href="http://eduncan911.com/Downloads/MiXXCollection-CS30-v1.0.zip"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;(source code-must compile)&lt;BR&gt;&lt;A href="http://eduncan911.com/files/folders/5894/download.aspx"&gt;http://eduncan911.com/files/folders/5894/download.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Change Log: &lt;BR&gt;&lt;/STRONG&gt;&lt;STRONG&gt;2006-12-16 (v0.9.3.25764)&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;- Changed from throwing exceptions to just logging exceptions, to &lt;BR&gt;&amp;nbsp;&amp;nbsp; allow the rest of the page/site to load without redirecting to an&lt;BR&gt;&amp;nbsp;&amp;nbsp; error.&amp;nbsp; To debug, look in your CSExceptions for UnknownError and&lt;BR&gt;&amp;nbsp;&amp;nbsp; FileNotFound errors logged.&amp;nbsp; &lt;BR&gt;&amp;nbsp;- Added in parsing of the regex groups in the config file. This&lt;BR&gt;&amp;nbsp;&amp;nbsp; allows for custom regex patterns to be used, and you can&lt;BR&gt;&amp;nbsp;&amp;nbsp; explicitly set what group this module will parse the needed values&lt;BR&gt;&amp;nbsp;&amp;nbsp; for.&lt;BR&gt;&amp;nbsp;- Fixed a small issue to where the PostIconModule was using the last&lt;BR&gt;&amp;nbsp;&amp;nbsp; used AnchorPosition specified in a post as the default for the &lt;BR&gt;&amp;nbsp;&amp;nbsp; time the AppPool was running.&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://eduncan911.com/archive/2006/12/11/mixx-posticon-released-to-the-public.aspx"&gt;Updated previous version&lt;/A&gt;, and deleted old files.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=2614" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://eduncan911.com/archive/tags/PostIcon/default.aspx">PostIcon</category><category domain="http://eduncan911.com/archive/tags/The+MiXX+Collection/default.aspx">The MiXX Collection</category></item><item><title>The MiXX Collection for Community Server</title><link>http://eduncan911.com/blog/The-MiXX-Collection.aspx</link><pubDate>Sat, 16 Dec 2006 21:30:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:2613</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>4</slash:comments><comments>http://eduncan911.com/comments/2613.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=2613</wfw:commentRss><description>&lt;P&gt;Today I package up my MiXX tools into a collection of addons for Community Server.&amp;nbsp; Right now, it only includes the PostIcon addon.&amp;nbsp; At the end of this weekend, it should include a new MiXXVideoModule that is a major overhaul of the existing CS VideoModule.&lt;/P&gt;
&lt;P&gt;(install only)&lt;BR&gt;&lt;A href="http://eduncan911.com/files/folders/2611/download.aspx"&gt;http://eduncan911.com/files/folders/2611/download.aspx&lt;/A&gt;&lt;A href="http://eduncan911.com/Downloads/MiXXCollection-CS30-v1.0.zip"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;(source code-must compile)&lt;BR&gt;&lt;A href="http://eduncan911.com/files/folders/5894/download.aspx"&gt;http://eduncan911.com/files/folders/5894/download.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This is the first of a number of major updates, finally releasing enhancements to Community Server I have sought after for many years.&amp;nbsp;&amp;nbsp;You can use the &lt;A class="" href="http://eduncan911.com/archive/tags/The+MiXX+Collection/default.aspx"&gt;&lt;IMG style="WIDTH:18px;HEIGHT:18px;" height=18 src="http://eduncan911.com/utility/images/feedicon.png" width=18 border=0&gt;&amp;nbsp;RSS Tag link&amp;nbsp;to subscribe&amp;nbsp;to the tag &lt;STRONG&gt;&lt;EM&gt;The MiXX Collection&lt;/EM&gt;&lt;/STRONG&gt;&lt;/A&gt; for the latest news of this tool.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=2613" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://eduncan911.com/archive/tags/PostIcon/default.aspx">PostIcon</category><category domain="http://eduncan911.com/archive/tags/The+MiXX+Collection/default.aspx">The MiXX Collection</category></item><item><title>MiXX.PostIcon released to the public</title><link>http://eduncan911.com/blog/mixx-posticon-released-to-the-public.aspx</link><pubDate>Mon, 11 Dec 2006 05:48:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:2503</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>25</slash:comments><comments>http://eduncan911.com/comments/2503.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=2503</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;EDIT 6/05/2007: Changed links to CS 3.0 version.&amp;nbsp; Subscribe to here for updates: &lt;/STRONG&gt;&lt;A href="http://eduncan911.com/archive/tags/The+MiXX+Collection/default.aspx"&gt;&lt;STRONG&gt;http://eduncan911.com/archive/tags/The+MiXX+Collection/default.aspx&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Some of you might have noticed my new homepage over the last month.&amp;nbsp; Those of you using an RSS reader to read this, go check out my homepage for the new PostIcon module I'm talking about.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://eduncan911.com/files/folders/5894/download.aspx"&gt;&lt;/A&gt;&lt;/P&gt;&lt;STRONG&gt;What is it?&lt;BR&gt;&lt;/STRONG&gt;The purpose of this Server Control and CSModule is to automatically&lt;BR&gt;create a small lightweight PostIcon with little to no work on your part.&lt;BR&gt;Just embed a normal image, bam, you have a PostIcon automatically. 
&lt;P&gt;This module creates the PostIcon for a Weblog Post during its creation &lt;BR&gt;and/or update physically on disk. It will connect to your image source, &lt;BR&gt;load into memory, crop, resize, compress, and save the tiny ~2 KB file &lt;BR&gt;to disk. It then adds the full pathname to an ExtendedAttribute for that&lt;BR&gt;post called "PostIcon", allowing for the skin to render where required. &lt;BR&gt;This storage-to-disk method greatly speeds up the homepage rendering as &lt;BR&gt;we do not access the photo gallery.&lt;/P&gt;
&lt;P&gt;To use, simply create a blog post with at least one &amp;lt;img&amp;gt; embedded.&amp;nbsp; &lt;BR&gt;That's it.&amp;nbsp; The default logic above will take the first &amp;lt;img&amp;gt; in your&lt;BR&gt;post and process it to disk.&lt;/P&gt;
&lt;P&gt;Optionally, you can specify a particular image to use as your PostIcon.&lt;BR&gt;Say if you had multple embedded &amp;lt;img&amp;gt;s, or if you don't have an image at&lt;BR&gt;all but wanted a PostIcon for the post. &lt;/P&gt;
&lt;P&gt;You can use the BBCode format of:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;[PostIcon Anchor = "Center"]http://domain.com/image.gif[/PostIcon]&lt;/P&gt;
&lt;P&gt;This will allow you to specify an Anchor position, if you want to crop&lt;BR&gt;in a certain region.&amp;nbsp; The Anchor attribute is optional.&amp;nbsp; See the&lt;BR&gt;module's config file for more information on Anchor.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How does it work?&lt;/STRONG&gt;&lt;BR&gt;There are two parts to make this work.&amp;nbsp; The backend uses the PostIconModule&amp;nbsp;to download into memory, crop, resize, compress, and save the selected image to disk.&lt;/P&gt;
&lt;P&gt;And the frontend UI uses the PostIcon server control to rendered the saved image, with smart logic.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What is the logic to determine what gets downloaded, cropped, and saved or even displayed if none is set?&lt;BR&gt;&lt;/STRONG&gt;There are two methods of logic.&amp;nbsp; The first is which image, if any at all, is processed on the initial PostCreation process.&amp;nbsp; And the other logic is in the PostIcon server control that renders, if there is no image saved from the module.&lt;/P&gt;
&lt;P&gt;The PostIconModule determines what url gets written to the post, if any.&amp;nbsp; It does this by following the order below:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Does the [PostIcon] BBCode exist?&amp;nbsp;If so, parse the image specified.&lt;/LI&gt;
&lt;LI&gt;Is there an &amp;lt;img&amp;gt; declaration somewhere in the post?&amp;nbsp; If so, parse the first &amp;lt;img&amp;gt; and use it as the PostIcon.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;If the PostIconModule fails to parse the image, no url is written.&amp;nbsp; In which case, the PostIcon server control determines what gets displayed with the logic below:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Is there a DefaultImageUrl specified?&amp;nbsp; If so, link directly to it.&lt;/LI&gt;
&lt;LI&gt;Is the UseAnonymousAvatar set to true?&amp;nbsp; If so, link directly to it.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;Why are you saving to disk and writing a direct url?&amp;nbsp; Isn't the Photo Gallery built for that?&lt;/STRONG&gt;&lt;BR&gt;Yes, it is but&amp;nbsp; I wanted speed on my homepage.&amp;nbsp; And loading the Weblog posts + 20 to 50 images on the homepage is a bit more processing then I care for.&lt;/P&gt;
&lt;P&gt;So with the PostIconModule I load the image into a MemoryStream, crop the image based on the Anchor set, resize the image to what is specified in the config, compress it as a JPG (tests showed 60% quality compared to Gif 89a and PNG is smaller then all), and finally save it to disk.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The PostIcon server control loads only the direct Url that is stored for the post, therefore generating a very quick homepage load time.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Where's the source code?&lt;/STRONG&gt;&lt;BR&gt;With the rest of the files below.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Where do I get this wonderful tool?&lt;/STRONG&gt;&lt;BR&gt;Here ya go:&lt;/P&gt;
&lt;P&gt;(install only)&lt;BR&gt;&lt;A href="http://eduncan911.com/files/folders/2611/download.aspx"&gt;http://eduncan911.com/files/folders/2611/download.aspx&lt;/A&gt;&lt;A href="http://eduncan911.com/Downloads/MiXXCollection-CS30-v1.0.zip"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;(source code-must compile)&lt;BR&gt;&lt;A href="http://eduncan911.com/files/folders/5894/download.aspx"&gt;http://eduncan911.com/files/folders/5894/download.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Future Releases&lt;BR&gt;&lt;/STRONG&gt;If by popular demand, I might add in rendering of the User's Avatar if multiple people are posting to a single blog.&amp;nbsp; But since this is rare, I skipped it for now.&lt;/P&gt;
&lt;P&gt;Also if by popular demand, I may add in some type of Email detection (i.e. MetaBlog API posts) and display a custom image (if the image logic fails to save one).&amp;nbsp; For example, I might want to display a common PostIcon for all posts &lt;A class="" href="http://www.blogmailr.com/blog/archive/2006/11/07/blogmailr-com-is-live.aspx" target=_blank&gt;made by Blogmailr&lt;/A&gt;.&amp;nbsp; Such as this one:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.interest.co.nz/images/email-icon.gif"&gt; &lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=2503" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://eduncan911.com/archive/tags/PostIcon/default.aspx">PostIcon</category><category domain="http://eduncan911.com/archive/tags/The+MiXX+Collection/default.aspx">The MiXX Collection</category></item><item><title>Hooray!!  I saw *******</title><link>http://eduncan911.com/blog/laughfactory-launch.aspx</link><pubDate>Wed, 06 Dec 2006 05:01:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:2448</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>4</slash:comments><comments>http://eduncan911.com/comments/2448.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=2448</wfw:commentRss><description>&lt;p&gt;&lt;img align="left" alt="Laugh Factory" height="476" src="http://cs.laughfactory.com/themes/default/images/lf/block-title-bg_blogs.gif" style="width:133px;height:476px;" title="Laugh Factory" width="133" /&gt;Telligent and IMG World joined forces to develop I think one of the best designed Community Server sites to date.&lt;/p&gt;&lt;p&gt;Today IMG launches the Insultatorium - Laugh Factory&amp;#39;s Community site.&amp;nbsp;&amp;nbsp;Their welcome message says it all:&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;quot;An uncensored place to share videos, photos, and jokes with comedy enthusiasts around the world.&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://cs.laughfactory.com/"&gt;http://cs.laughfactory.com/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I very much praise sites that make it a point to be uncensored.&amp;nbsp; Too many censor, and for such BS these days, that I hardly visit any forums any longer.&amp;nbsp; I&amp;#39;m sure the admins of those previous sites don&amp;#39;t miss me at all, but the users do miss my knowledge&amp;nbsp;&amp;nbsp; &amp;lt;- No that was not bragging.&amp;nbsp; I&amp;#39;m a&amp;nbsp;Ford ASSET&amp;nbsp;graduate and have a lot of knowledge to give and help others.&amp;nbsp; But I be censored?&amp;nbsp;&amp;nbsp;I no go to that site.&lt;/p&gt;&lt;p&gt;Anyhoot, check out the site above.&amp;nbsp; I&amp;nbsp;was commissioned to&amp;nbsp;wrap up phase 1 development&amp;nbsp;with Deryl Dorsett&amp;nbsp; But a warning, it&amp;#39;s NWS.&amp;nbsp; But that makes it more fun don&amp;#39;t it?&amp;nbsp; :)&lt;/p&gt;&lt;p&gt;Phase two will be kick ass (current site x100), but under wraps at this time so shhh.&amp;nbsp; First rule of Fight Club is no one talks about Fight Club.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=2448" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://eduncan911.com/archive/tags/Telligent/default.aspx">Telligent</category></item><item><title>Tracking a hacker (in reference to recent FairUse4WM posts)</title><link>http://eduncan911.com/blog/Tracking-a-hacker-_2800_in-reference-to-recent-FairUse4WM-posts_2900_.aspx</link><pubDate>Thu, 28 Sep 2006 03:39:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:1932</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>1</slash:comments><comments>http://eduncan911.com/comments/1932.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=1932</wfw:commentRss><description>&lt;P&gt;&lt;IMG height=240 src="http://www.blogsmithmedia.com/www.engadget.com/media/2006/09/unknown_portrait.jpg" width=220 align=left&gt;During the recent &lt;A href="http://www.engadget.com/2006/09/26/microsoft-sues-viodenta-for-copyright-infringement/" target=_blank&gt;FairUse4WM lawsuits that Microsoft&lt;/A&gt; is heading up recently, I've started to learn more and more about the&lt;A href="http://engadget.com/tag/PlaysForSure" target=_blank&gt;PlaysForSure&lt;/A&gt; DRM answer that Microsoft has created to try to satisfy the DMCA bitches (think BMI, Universal - anything DVD of CD Audio related).&lt;/P&gt;
&lt;P&gt;What I found interesting is the age-old techniques I've used to track down hackers (and prosecute them in court, via companies that have hired me in the past) has become so commonly understood these days that they explain it in their recent lawsuit against &lt;A href="http://engadget.com/tag/viodentia" target=_blank&gt;Viodentia&lt;/A&gt; - and people understand exactly the process.&lt;/P&gt;
&lt;P&gt;See, back in the day (late 80s, early 90s) no one had a clue how to track down a hacker.&amp;nbsp; I made some side cash tracking down these guys so long ago cause no one knew the technology enough.&amp;nbsp; Now someone makes a post, and it amazes me how common-knowledge it has become.&lt;/P&gt;
&lt;P&gt;Now don't get me wrong.&amp;nbsp; I've done my fair-share of cracks and hacks, and knew enough about re-writing the tcp stack to hide my tracks.&amp;nbsp; So don't get pissed if it was me that testified against you way back then.&amp;nbsp; Did I do it&amp;nbsp;against the underground pirate groups?&amp;nbsp; No.&amp;nbsp; It was for those guys that would hack into computers of friends of mine to do nothing more then destroy their networks.&lt;/P&gt;
&lt;P&gt;Aren't the best Security Experts the best hackers?&amp;nbsp; Was always my sales pitch in the&amp;nbsp; past for such jobs.&amp;nbsp; :)&lt;/P&gt;
&lt;P&gt;Err, off the point.&amp;nbsp; &lt;A href="http://www.engadget.com/2006/09/26/microsoft-sues-viodenta-for-copyright-infringement/" target=_blank&gt;The post above&lt;/A&gt; clearly outlines one of the most common methods for tracking a hacker.&lt;/P&gt;
&lt;P&gt;ISPs will not talk to you unless you have a court order.&amp;nbsp; So create a suit (as MS did above), then talk to the ISPs.&amp;nbsp; They will gladly hand over any and all records.&amp;nbsp; Which most of the time you can track to a single IP and MAC address at that time of the email/file submission/port connectivity/logs/etc.&amp;nbsp; MACs on broadband are linked to a physical&amp;nbsp;address on file for that user that is being billed, which will be handed over via the ISP.&amp;nbsp; Either have the feds ask for the warrant, or contact the local courts for the area to obtain one - and have the local PD/fbi unit conduct the search/arrest.&lt;/P&gt;
&lt;P&gt;Rest is normal process.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;There are dozens of way to get around the above, that most hackers don't even attempt.&amp;nbsp; Like accessing a computer&amp;nbsp;has been hacked, then a remote hacker would piggy back everything they do off of that machine.&amp;nbsp; That's just one of many ways.&lt;/P&gt;
&lt;P&gt;Now in this case, &lt;A href="http://engadget.com/tag/viodentia" target=_blank&gt;Viodentia&lt;/A&gt; claims to live outside of the United States.&amp;nbsp; That's good and bad, depending on his country.&amp;nbsp; This adds an extra (and extra thick) layer of law process, as you now must go through federal courts to obtain an extradition.&amp;nbsp; Now this I have never been involved with, so I'll leave that part up to the lawyers.&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=1932" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>Blogs complicated?</title><link>http://eduncan911.com/blog/IE7-_2B00_-RSS-_2B00_-NewsGator-_3D00_-Harmony.aspx</link><pubDate>Sun, 24 Sep 2006 23:53:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:1862</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>9</slash:comments><comments>http://eduncan911.com/comments/1862.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=1862</wfw:commentRss><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I&amp;#39;m going to touch on a few applications and concepts to help my friends and family that are just learning&amp;nbsp;blogs&amp;nbsp;get started.&amp;nbsp; If you need any help, just email me.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Writing Blog Posts&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;This is my first post using &lt;a href="http://ideas.live.com/programpage.aspx?versionId=4372c8c2-b76f-4d44-aea1-9835b61d8dc1" target="_blank"&gt;Windows Live Writer&lt;/a&gt;, a remote Blogging tool.&amp;nbsp; Woot!&amp;nbsp; This should really ease your ability to blog - you just need a blog setup somewhere first.&amp;nbsp; It&amp;#39;s an application that you download and run.&amp;nbsp; Click Publish, and it&amp;#39;s online!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Reading Everyone&amp;#39;s Blogs&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;It&amp;#39;s been years - years that I have searched for a lightweight, easy-to-read and manage, RSS reader.&amp;nbsp; I&amp;#39;ve tried them all, but nothing was just seamless enough.&amp;nbsp; Until I played with Vista Beta2, where I got to use the underlying&amp;nbsp;&lt;a href="http://blogs.msdn.com/rssteam/archive/2006/02/02/522642.aspx" target="_blank"&gt;Windows RSS Platform&lt;/a&gt;&amp;nbsp;built-into Vista and Internet Explorer 7.&amp;nbsp; Very nice!&amp;nbsp; Even better in&amp;nbsp;IE7 RC1 is that has the finalized version of the Windows RSS Platform to allow developers to finally get busy with tools using this platform.&lt;/p&gt;&lt;p&gt;IE7 has a great RSS reader built-in.&amp;nbsp; And finally, a clean XSL stylesheet applied to the output!&amp;nbsp; So I now browse my friend&amp;#39;s and family&amp;nbsp;RSS Feeds in IE7 at all times, as shown below.&amp;nbsp; &lt;/p&gt;&lt;p&gt;So to my friends and family that are just now learning blogging, this is a great method of staying up-to-date on the blogs (MySpace or alike)&amp;nbsp;you want to read.&amp;nbsp; Like, uh, mine.&amp;nbsp; :)&amp;nbsp; Just look for a button or link that says RSS on the blog you want to&amp;nbsp;sync.&amp;nbsp;&amp;nbsp;If you need more help,&amp;nbsp;ping me.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This is just too damn easy, sweet, and seamless.&amp;nbsp; Download IE7 and be done.&lt;/p&gt;&lt;p&gt;&lt;a href="http://eduncan911.com/photos/geek_stuff/IE7RSSNewsGatorHarmony_108E1/NewsGator5.gif"&gt;&lt;/a&gt;&lt;img height="392" src="http://eduncan911.com/photos/geek_stuff/images/1863/original.aspx" style="width:409px;height:392px;" width="409" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Keeping your PC sync&amp;#39;d - NewsGator&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;Now why would I mention &lt;a href="http://eduncan911.com/controlpanel/blogs/www.newsgator.com" target="_blank"&gt;NewsGator&lt;/a&gt; with IE7 and RSS when I am talking about using IE7 for all of my RSS reading?&amp;nbsp; Well, Nick Harris at NewsGator published a nice synchronizing tool to &lt;a href="http://blogs.newsgator.com/inbox/2006/09/newsgator_deskt.html" target="_blank"&gt;sync the underlying Windows RSS Platform with your NewsGator account&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This is&amp;nbsp;perfect because anything that uses the Windows RSS Platform (i.e. Internet Explorer 7) automatically gets sync&amp;#39;d!&amp;nbsp; &lt;/p&gt;&lt;p&gt;I don&amp;#39;t know how many times I&amp;#39;ve had to setup RSS feeds, re-setup, format a laptop - setup again, format desktop, setup again - over and over.&amp;nbsp; So troublesome and I know I&amp;#39;ve forgotten a few I tried to add.&lt;/p&gt;&lt;p&gt;Well, no more!&amp;nbsp; NewsGator holds all of my RSS Feeds.&amp;nbsp; And now with the sync tool, I keep my desktop and laptop sync&amp;#39;d.&lt;/p&gt;&lt;p&gt;Now only if someone would take the time and write a sync tool for the RSS Platform for Community Server.&amp;nbsp; Humm.&lt;/p&gt;&lt;p&gt;Finally.&lt;/p&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=1862" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Personal/default.aspx">Personal</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>HowTo: Move a File to another FileGallery</title><link>http://eduncan911.com/blog/move-file-to-filegallery.aspx</link><pubDate>Fri, 22 Sep 2006 23:04:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:1846</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>10</slash:comments><comments>http://eduncan911.com/comments/1846.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=1846</wfw:commentRss><description>&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;I&amp;#39;m going to start posting a lot of my old Duncan Nuggets (as &lt;a href="http://dbvt.com/blog/" target="_blank"&gt;&lt;font color="#666666"&gt;Dave Burke&lt;/font&gt;&lt;/a&gt; likes to call them) here for others to start reading.&amp;nbsp; This is the first of a lot&amp;nbsp;to come.&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font size="4"&gt;How to move a file from one FileGallery to another&lt;/font&gt;&lt;/span&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;NOTE: This script was written for Community Server 2.1 RTM.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;This method uses a stored procedure to move a single file (aka Post) to another File Gallery (aka Section).&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;Attached&amp;nbsp;is an SQL script file named &lt;strong&gt;move_file_to_filegallery.zip&lt;/strong&gt;&amp;nbsp;that when executed, will create a stored procedure named &lt;/font&gt;&lt;/span&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;strong&gt;_move_file_to_filegallery&lt;/strong&gt; in your database.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;After the sproc is created, you can execute it by running the following command:&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Courier New" size="2"&gt;&lt;font color="#ff0000"&gt;EXEC _move_file_to_filegallery @PostID, @toSectionID, @ClearTags&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font color="#ff0000" face="Courier New"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;You need two bits of information beforing executing:&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;strong&gt;@PostID&lt;/strong&gt; - This is the PostID of the file you want to move.&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;You can find this&amp;nbsp;in the URL&amp;nbsp;by viewing the file in CS&amp;#39; normal File view.&amp;nbsp; For example, if we look up the SDK for CS 2.1 the link is: &lt;a href="http://communityserver.org/files/folders/communityserver/entry543125.aspx"&gt;&lt;font color="#000000"&gt;http://communityserver.org/files/folders/communityserver/entry&lt;strong&gt;543125&lt;/strong&gt;.aspx&lt;/font&gt;&lt;/a&gt;.&amp;nbsp; So the PostID of this file is &lt;strong&gt;&lt;font size="3"&gt;543125&lt;/font&gt;&lt;/strong&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;strong&gt;@toSectionID&lt;/strong&gt; - This is the SectionID of the File Gallery you want to move the file to.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;You can find this in the URL by going into the Control Panel, Files, and selecting that File Gallery to manage.&amp;nbsp; For example, the URL for managing the CommunityServer Current Releases folder is: &lt;a href="http://communityserver.org/controlpanel/files/default.aspx?sectionid=234"&gt;&lt;font color="#000000"&gt;http://communityserver.org/controlpanel/files/default.aspx?sectionid=&lt;strong&gt;234&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;.&amp;nbsp; So this SectionID that I want to move the file to is &lt;strong&gt;&lt;font size="3"&gt;234&lt;/font&gt;&lt;/strong&gt;.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;Following the examples above now that we have the two required integers, we can now execute the sproc to move the file.&amp;nbsp; The line would read:&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font size="2"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Courier New" size="2"&gt;&lt;font color="#ff0000"&gt;EXEC _move_file_to_filegallery @PostID = 234, @toSectionID = 543125, @ClearTags = 1&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;span class="366342421-22092006"&gt;NOTE: It is recommended to always clear the Tags, since they only exist in the previous FileGallery and not the new one.&amp;nbsp; So leave it @ClearTags&amp;nbsp;= 1.&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;span class="366342421-22092006"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;span class="366342421-22092006"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span class="366342421-22092006"&gt;&lt;font face="Arial" size="2"&gt;There is also error checking built in, so view the Messages for any errors that may have occurred.&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=1846" width="1" height="1"&gt;</description><enclosure url="http://eduncan911.com/blogs/files/3/1846/move_file_to_filegallery.zip" length="928" type="application/x-zip-compressed" /><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category><category domain="http://eduncan911.com/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>Where did MP4 come from?</title><link>http://eduncan911.com/blog/Where-did-MP4-come-from_3F00_.aspx</link><pubDate>Fri, 07 Jul 2006 19:18:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:1027</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>1</slash:comments><comments>http://eduncan911.com/comments/1027.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=1027</wfw:commentRss><description>&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;Over the last few months, I've been seeing an increase of clients attempting to use MP4 files on their websites for videos.&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;It's actually become an alarming amount, as the client may not be aware of the technical limitations in using this format.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;I wanted to announce to everyone how Microsoft and Telligent handles this format.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;First I know that MP4 is a good format is attempting to copyright your material.&amp;nbsp; It's just that it hasn't caught on enough to be widely supported.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Microsoft and MP4&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;First, a snippet from Microsoft on how they will not support the MP4 format in Windows Media Player or alike.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;Source KB: &lt;SPAN class=129081917-07072006&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;&lt;A title=http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316992 href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316992"&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316992&lt;/A&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN class=129081917-07072006&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN class=129081917-07072006&gt;============&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN class=129081917-07072006&gt;
&lt;H4 id=tocHeadRef&gt;&lt;SPAN&gt;&lt;A id=34&gt;&lt;/A&gt;&lt;/SPAN&gt;MPEG-4 (.mp4)&lt;/H4&gt;
loadTOCNode(3, 'summary');
MPEG-4 is an International Standards Organization (ISO) specification that covers many aspects of multimedia presentation including compression, authoring and delivery. Although video compression and file container definition are two separate and independent entities of the MPEG-4 specification, many people incorrectly believe that the two are interchangeable. You can implement only portions of the MPEG-4 specification and remain compliant with the standard. &lt;BR&gt;&lt;BR&gt;The MPEG-4 file format, as defined by the MPEG-4 specification, contains MPEG-4 encoded video and Advanced Audio Coding (AAC)-encoded audio content. It typically uses the .mp4 extension. Windows Media Player does not support the playback of the .mp4 file format. You can play back .mp4 media files in Windows Media Player when you install DirectShow-compatible MPEG-4 decoder packs. DirectShow-compatible MPEG-4 decoder packs include the Ligos LSX-MPEG Player and the EnvivioTV.&lt;BR&gt;&lt;BR&gt;For more information about the Ligos LSX-MPEG Player, visit the following Ligos Web site: 
&lt;DIV class=indent&gt;&lt;A title=http://www.ligos.com/ href="http://www.ligos.com/" target=_blank&gt;http://www.ligos.com&lt;/A&gt;&lt;SPAN class=pLink&gt; (http://www.ligos.com)&lt;/SPAN&gt;&lt;/DIV&gt;For more information about EnvivioTV , visit the following Envivio Web site: 
&lt;DIV class=indent&gt;&lt;A title=http://www.envivio.com/products href="http://www.envivio.com/products" target=_blank&gt;http://www.envivio.com/products/&lt;/A&gt;&lt;SPAN class=pLink&gt; (http://www.envivio.com/products)&lt;/SPAN&gt;&lt;/DIV&gt;Microsoft has chosen to implement the video compression portion of the MPEG-4 standard. Microsoft has currently produced the following MPEG-4-based video codecs: 
&lt;TABLE class="list ul"&gt;

&lt;TR&gt;
&lt;TD class=bullet&gt;•&lt;/TD&gt;
&lt;TD class=text&gt;Microsoft MPEG-4 v1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=bullet&gt;•&lt;/TD&gt;
&lt;TD class=text&gt;Microsoft MPEG-4 v2&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=bullet&gt;•&lt;/TD&gt;
&lt;TD class=text&gt;Microsoft MPEG-4 v3&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=bullet&gt;•&lt;/TD&gt;
&lt;TD class=text&gt;ISO MPEG-4 v1&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;MPEG-4 video content can be encoded and stored in an .asf file container by using Windows Media Tools and Windows Media Encoder. You can then play these files in Windows Media Player. For more information about Microsoft and MPEG-4 support, visit the following Microsoft Web site: 
&lt;DIV class=indent&gt;&lt;A title=http://www.microsoft.com/windows/windowsmedia/WM7/mpeg4.aspx href="http://www.microsoft.com/windows/windowsmedia/WM7/mpeg4.aspx"&gt;http://www.microsoft.com/windows/windowsmedia/WM7/mpeg4.aspx&lt;/A&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN class=129081917-07072006&gt;============&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial&gt;&lt;STRONG&gt;Telligent and MP4&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;And what does Telligent do for our clients?&amp;nbsp; We'll easily support it, but it requires an server-side IIS change as well as their End-Users to know how to install the proper encoder.&amp;nbsp; So if you are setting a client, and they will be using MP4, please ensure to setup the server to support raw MP4 file downloads.&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;By default, MP4 files are not even recognized by Microsoft IIS.&amp;nbsp; So&amp;nbsp;you'll have to enable it.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;It is called a "&lt;FONT face="Courier New"&gt;MIME Extension&lt;/FONT&gt;" to add to the IIS website for the .MP4 extension.&amp;nbsp; In addition, you'll have to know the ContentType to associate to it.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;Now the only ContentType I found most reliable with most 3rd party plug-in decoders out on the web is:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;BLOCKQUOTE dir=ltr&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;ContentType: video/&lt;B&gt;mp4&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;But again, being how it isn't mixed support some clients may require specific overrides of this.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;I wanted to rehash on why this may not be the best idea for your clients.&amp;nbsp; It's because the end user will require to install a 3rd party decoder to view it.&amp;nbsp; Can you say DivX all over again?&amp;nbsp; I still don't use DivX.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;Consider using a more widely support format, such as MPEG v2 or v3 or a compressable AVI.&amp;nbsp; No, these are not the most efficient.&amp;nbsp; But you will be able to view them on any platform with just about any type of player.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN class=429430619-07072006&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=1027" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>[Fixed] Click to activate and use this control</title><link>http://eduncan911.com/blog/_5B00_Fixed_5D00_-Click-to-activate-and-use-this-control.aspx</link><pubDate>Wed, 31 May 2006 03:11:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:896</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>3</slash:comments><comments>http://eduncan911.com/comments/896.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=896</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Update 2006-08-25:&lt;/STRONG&gt; In the comments below&amp;nbsp;I mentioned a 2nd method that loops through all objects on the page and "re-injects" them.&amp;nbsp; This actually works very well and lets you use the&amp;nbsp;&amp;lt;object&amp;gt; tags normally without worrying about the javascript below&amp;nbsp;(if placed in the correct location in CS).&amp;nbsp; It works with Windows Media Player, Flash, and any other &amp;lt;object&amp;gt; tag.&amp;nbsp; Here's the link:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.mix-fx.com/flash-prompt.htm" target=_blank rel=nofollow&gt;http://www.mix-fx.com/flash-prompt.htm&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The downside is it is only supported in newer browsers that support the document.getElementsByTagName - which most do these days.&amp;nbsp; But I like to code for old 4.0 and above browsers (my JS is all 4.0+, including Netscape 4.08).&amp;nbsp; I might modify his code to do this when I get back from vacation.&lt;/P&gt;
&lt;P&gt;You can continue read the history of this issue below.&lt;/P&gt;
&lt;P&gt;--------------------&lt;/P&gt;
&lt;P&gt;So with a recent Internal Explorer patch (automatic update), you might start noticing that you have to click a Flash, Quicktime, Realplayer, or WMV in order to "use" the control.&amp;nbsp; Annoying right?&lt;/P&gt;
&lt;P&gt;The mouse-over presents the text, "&lt;EM&gt;Click to activate and use this control&lt;/EM&gt;".&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is due to a recent court battle that MS lost in the way IE deals with &amp;lt;object&amp;gt; and &amp;lt;embed&amp;gt; tags.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;The Fix&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR&gt;Recently I am working on my building's website at &lt;A href="http://www.2220cantonlofts.com/"&gt;www.2220cantonlofts.com&lt;/A&gt;.&amp;nbsp; Now the new page isn't online yet, give me until the end of June to complete it.&amp;nbsp; And yes I know what is currently&amp;nbsp; there sucks ass.&amp;nbsp; That's why I am overhauling it.&amp;nbsp; Anyhoot...&amp;nbsp; I'm using two flash movies and noticed this problem - and it ticking me off.&lt;/P&gt;
&lt;P&gt;To fix this it&amp;nbsp;took some playing with the HTML and object tags.&amp;nbsp; Basically I found that if you render the HTML after the page has rendered (i.e. InsertHtml), it does not require you to click to activate.&lt;/P&gt;
&lt;P&gt;Appearently &lt;A href="http://www.adobe.com/devnet/activecontent/articles/devletter.html"&gt;Macromedia&lt;/A&gt; found out about this and posted an "IE" fix.&amp;nbsp; But&amp;nbsp;I believe it needs a little tweaking because most of use querystrings and have multiple flash versions on our site.&lt;/P&gt;
&lt;P&gt;I'll sum it up for you in full.&lt;/P&gt;
&lt;P&gt;The fix is insert the&amp;nbsp;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&amp;lt;object/embed&amp;gt; &lt;/FONT&gt;&lt;/FONT&gt;text&amp;nbsp;while the page is rendering/being interpreted by the browser.&amp;nbsp; So long as it doesn't exist in the source/html file.&amp;nbsp; It&amp;nbsp;must be&amp;nbsp;rendered outside of the source file.&lt;/P&gt;
&lt;P&gt;Instructions to install:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Download the attachment to this blog post, place it somewhere on&amp;nbsp; your website. 
&lt;LI&gt;Insert this text into your &amp;lt;head&amp;gt; portion (it's a check to ensure the file loaded, this prevents JS errors if the file doesn't load) 
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;script&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="text/javascript"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;language&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="javascript"&amp;gt;&lt;/FONT&gt;AC_FL_RunContent = 0;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;script&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;script&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="text/javascript"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;src&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;AC_RunActiveContent.js"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;language&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="javascript"&amp;gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;script&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;The last would be to replace your entire&amp;nbsp;&amp;lt;object&amp;gt;&amp;lt;/object&amp;gt; text with the following script: 
&lt;UL&gt;
&lt;LI&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#800000&gt;script&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="text/javascript"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;language&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="javascript"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New" color=#0000ff&gt;if&lt;/FONT&gt;&lt;FONT face="Courier New"&gt; (AC_FL_RunContent == 0) {&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; alert(&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000&gt;"This page requires AC_RunActiveContent.js"&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;);&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;} &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff&gt;else&lt;/FONT&gt;&lt;FONT face="Courier New"&gt; {&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; AC_FL_RunContent(&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;'codebase'&lt;/FONT&gt;,&lt;BR&gt;&amp;nbsp;&lt;FONT color=#800000&gt;&amp;nbsp;&amp;nbsp; 'https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'width'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'745'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'height'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'171'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'src'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'menu.swf'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'quality'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'high'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'pluginspage'&lt;/FONT&gt;,&lt;BR&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'https://www.macromedia.com/go/getflashplayer'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'align'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'middle'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'play'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'true'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'loop'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'false'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'scale'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'noscale'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'wmode'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'window'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'devicefont'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'false'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'id'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'flash-animations'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'name'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'menu'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'menu'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'false'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'allowScriptAccess'&lt;/FONT&gt;,&lt;FONT color=#800000&gt;'sameDomain'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'movie'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;'menu.swf?page=&amp;lt;%=&amp;nbsp;HttpContext.Current.Request.QueryString["page"] %&amp;gt;'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;,&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#800000&gt;&amp;nbsp; &amp;nbsp; 'salign'&lt;/FONT&gt;, &lt;FONT color=#800000&gt;''&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; );&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#800000&gt;script&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;noscript&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;noscript&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;That's it.&lt;/P&gt;
&lt;P&gt;Now the attached JS is slightly modified then the version you can download from Macromedia.&amp;nbsp; I simply had too many .swf files with querystring as attributes.&amp;nbsp; The script at Macromedia's site requires you to remove the .swf - it's annoying to remove that from all of my code.&amp;nbsp; So I edited their code.&lt;/P&gt;
&lt;P&gt;Check out &lt;A href="http://www.2220cantonlofts.com/"&gt;www.2220cantonlofts.com&lt;/A&gt; to see it working.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=896" width="1" height="1"&gt;</description><enclosure url="http://eduncan911.com/blogs/files/3/896/AC_RunActiveContent.zip" length="1148" type="application/x-zip-compressed" /><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>Mount ISOs in XP - for free!</title><link>http://eduncan911.com/blog/mount-isos-in-xp-for-free.aspx</link><pubDate>Tue, 08 Nov 2005 01:40:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:220</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>0</slash:comments><comments>http://eduncan911.com/comments/220.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=220</wfw:commentRss><description>&lt;P&gt;I just found the coolest little download from Microsoft.&amp;nbsp;&amp;nbsp;A free download to mount ISO files as drive letters (think MAC here).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://download.microsoft.com/download/7/b/6/7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe"&gt;Virtual CD-ROM Control Panel for Windows XP&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Now THIS needs to be included in Vista, if it is not already.&amp;nbsp; As the source of where I found it said, it's a little bit of a manual process and it's UnSupproted by MS (use at your own risk).&amp;nbsp; It's got an ugly interface, but for Vista it should be a built-in right-click.&lt;/P&gt;
&lt;P&gt;But we all know how slow VirtualPC is to install an OS from a CDROM.&amp;nbsp; Using this tool I was able to load up W2K3 Server very quickly.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Tip: When running the virtual PC, make sure to go to CD -&amp;gt; Use Physical Drive Z to enable the ISO to boot from.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Very very nice...&lt;/P&gt;
&lt;P&gt;Thanks to &lt;A href="http://weblogs.asp.net/pleloup/archive/2004/01/15/58918.aspx"&gt;pleloup&lt;/A&gt;&amp;nbsp;for finding this.&amp;nbsp; &lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=220" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>A QuickLaunch Technique</title><link>http://eduncan911.com/blog/a-quicklaunch-technique.aspx</link><pubDate>Fri, 04 Nov 2005 21:12:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:215</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>0</slash:comments><comments>http://eduncan911.com/comments/215.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=215</wfw:commentRss><description>&lt;p&gt;&lt;img height="334" src="http://eduncan911.com/photos/geek_stuff/images/210/original.aspx" width="707" /&gt;&lt;/p&gt;&lt;p&gt;A lot of people don&amp;#39;t even use the QuickLaunch (XP comes with it hidden by default), but over the years (think back to IE4 for Windows98)&amp;nbsp;I have been using this QuickLaunch technique to quickly launch my programs.&lt;/p&gt;&lt;p&gt;My Start Menu is just as neat, but requires an extra click and more navigation/movment of the mouse&amp;nbsp;to find what I am looking for.&amp;nbsp; I need it quicker then that!&amp;nbsp; This is more useful then it looks.&amp;nbsp; Instead of clicking Start-&amp;gt;All Programs and then hunting through the Mountain of shortcuts and folders; 3 clicks and I have Enterprise Manager open immediately.&amp;nbsp; And with very little movement of the mouse.&lt;/p&gt;&lt;p&gt;Once you do it, you&amp;#39;ll&amp;nbsp;be addicted to it.&amp;nbsp; Go ahead and try it above.&amp;nbsp; Real fast, click the Double Arrows in the QuickLaunch, then Development, then Enterprise Manager.&amp;nbsp; Click, Click, Bam.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step One&lt;br /&gt;&lt;/strong&gt;Unlock your Taskbar. If you don&amp;#39;t have the QuickLaunch already showing, right click on the Taskbar and select Toolbars-&amp;gt;QuickLaunch.&lt;/p&gt;&lt;p&gt;&lt;a href="http://eduncan911.com/photos/geek_stuff/picture211.aspx" target="_blank"&gt;&lt;img height="236" src="http://eduncan911.com/photos/geek_stuff/images/211/500x236.aspx" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step Two&lt;/strong&gt;&lt;br /&gt;After Unlocking your Taskbar, right click again but within the QuickLaunch bar.&amp;nbsp; Important - Do not right click on icons.&amp;nbsp; Move the mouse to where you are between icons to get this menu, usually all the way to the end of the icons -&amp;nbsp;you may&amp;nbsp;need to resize like I did below.&amp;nbsp; Then select Open Folder.&lt;/p&gt;&lt;p&gt;&lt;a href="http://eduncan911.com/photos/geek_stuff/picture212.aspx" target="_blank"&gt;&lt;img height="236" src="http://eduncan911.com/photos/geek_stuff/images/212/500x236.aspx" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step Three&lt;/strong&gt;&lt;br /&gt;Create your Directories that you want and/or place the exact shortcuts you want here.&amp;nbsp; Notice I only placed the icons I use most often (not everything for Visual Studio is in my quicklaunch, just the minimal).&lt;/p&gt;&lt;p&gt;&lt;a href="http://eduncan911.com/photos/geek_stuff/picture213.aspx" target="_blank"&gt;&lt;img height="236" src="http://eduncan911.com/photos/geek_stuff/images/213/500x236.aspx" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step Four&lt;br /&gt;&lt;/strong&gt;Resize the QuickLaunch to hide the icons you do not want.&amp;nbsp; Tip: Move all of the icons before the folders as shown in Step Two&amp;#39;s picture above.&amp;nbsp; This will mean only folders get displayed when you click the Double Arrows.&lt;/p&gt;&lt;p&gt;&lt;a href="http://eduncan911.com/photos/geek_stuff/picture214.aspx" target="_blank"&gt;&lt;img height="236" src="http://eduncan911.com/photos/geek_stuff/images/214/500x236.aspx" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Notice my MSN Money icon is hidden in the screenshot above?&amp;nbsp; Once you &amp;quot;lock&amp;quot; the toolbar, it will re-appear.&amp;nbsp; This is a funky thing XP does when locking and unlocking and resizing the viewable area.&amp;nbsp; But you&amp;#39;ll see what I mean cause one of your folders will show up here if you don&amp;#39;t resize it as such.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=215" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>IE Developer Toolbar</title><link>http://eduncan911.com/blog/ie-developer-toolbar.aspx</link><pubDate>Wed, 21 Sep 2005 14:36:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:190</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>0</slash:comments><comments>http://eduncan911.com/comments/190.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=190</wfw:commentRss><description>&lt;P&gt;Xander gave us a heads-up about a new Developer&amp;nbsp;Toolbar for Internet Explorer.&amp;nbsp; People have been using a similar toolbar in FireFox for developing webpages (which I never used, so can't say how nice it was).&lt;/P&gt;
&lt;P&gt;Well, over the last week I've been using this developer toolbar and it's awesome!&lt;/P&gt;
&lt;P&gt;Here's the MS link: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=190" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>Get a Blog into your Inbox (RSS)</title><link>http://eduncan911.com/blog/Get-a-Blog-into-your-Inbox-_2800_RSS_2900_.aspx</link><pubDate>Thu, 25 Aug 2005 16:23:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:182</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>2</slash:comments><comments>http://eduncan911.com/comments/182.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=182</wfw:commentRss><description>&lt;p&gt;Today I wanted to get more friendly with RSS feeds from my friends and family.&amp;nbsp; What is RSS?&amp;nbsp; RSS are data (news) feeds from websites that have those XML and/or RSS buttons.&amp;nbsp; It&amp;#39;s a way for you to subscribe to a webpage/blog/gallery and get updates.&lt;/p&gt;&lt;p&gt;There are several (likes dozens and dozens) of stand-alone RSS Readers out there.&amp;nbsp; And plugins for applications.&amp;nbsp; &lt;a href="http://www.newsgator.com"&gt;www.newsgator.com&lt;/a&gt; seems to be the most popular one, as it houses all of your feeds into one website you can login remotely and read.&lt;/p&gt;&lt;p&gt;Say you want to subscribe to my blog, but&amp;nbsp;you don&amp;#39;t want to hear about my computer or automotive exploits.&amp;nbsp;&amp;nbsp;You just want to subscribe to my Friend&amp;#39;s and Family news/posts.&amp;nbsp; Look at the Categories section here in my Blog.&amp;nbsp; Notice the little (rss) next to it?&amp;nbsp; :)&amp;nbsp; You can subscribe to just certain Categories if you wish.&amp;nbsp; All CommunityServer websites have this option.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Not ever having the time (or thought) over the last year or so, I tried the following three plugins for Outlook today:&lt;/p&gt;&lt;p&gt;BlogBot - &lt;a href="http://www.blogbot.com/out/"&gt;http://www.blogbot.com/out/&lt;/a&gt; &lt;br /&gt;Attensa - &lt;a href="http://www.attensa.com/"&gt;http://www.attensa.com/&lt;/a&gt;&lt;br /&gt;RSS Popper - &lt;a href="http://rsspopper.blogspot.com/"&gt;http://rsspopper.blogspot.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;[GeekAlert]&lt;br /&gt;I don&amp;#39;t like how Attensa (and I think BlogBot)&amp;nbsp;runs background apps.&amp;nbsp; I guess this is for DDE for those apps?&lt;/p&gt;&lt;p&gt;Well, RSS Popper gets away without a background app.&amp;nbsp; :)&amp;nbsp; I just rightclick any XML button/link in IE and click &amp;quot;Add to RSS Popper&amp;quot;.&amp;nbsp; Bam, it&amp;#39;s added to my Outlook.&amp;nbsp;&amp;nbsp;It has a very low overhead.&amp;nbsp; RSS Popper is also open-source (well, as soon as the guy figures how where to host it), as well as being .NET.&amp;nbsp; Those are all pluses in my book as I have some ideas to extend RSS Popper (create an XSL file for these emails for some default formatting right now).&lt;/p&gt;&lt;p&gt;Tip: If you are connecting to an Exchange server, you might want to create a seperate PST (Personal Folder file) and configure RSS Popper to write to it.&amp;nbsp; This way you won&amp;#39;t fill up your Exchange account, and there has been issues with Attensa&amp;#39;s plugin for Outlook for such things.&amp;nbsp; I can&amp;#39;t say about RSS Popper as I do not use my Exchange inbox (deliver everything locally for now, on my raid drives).&lt;br /&gt;[/GeekAlert]&lt;/p&gt;&lt;p&gt;RSS Popper gets my vote.&amp;nbsp; &lt;/p&gt;&lt;p&gt;So if you want to subscribe to my blog here, first install RSS Popper.&amp;nbsp; Then&amp;nbsp;look for the &amp;quot;RSS 2.0&amp;quot; or &amp;quot;Atom&amp;quot; links at the bottom left of my blog.&amp;nbsp; Right-click on the link and click &amp;quot;Add to RSS Popper&amp;quot;.&amp;nbsp; You&amp;#39;re done and will get updates to your Outlook.&amp;nbsp; :)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=182" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item><item><title>GoogleSearch MODs</title><link>http://eduncan911.com/blog/googlesearch-mods.aspx</link><pubDate>Mon, 08 Aug 2005 14:00:00 GMT</pubDate><guid isPermaLink="false">3cbf8099-f611-4197-a0f5-c5a9f8954971:174</guid><dc:creator>Eric A. Duncan</dc:creator><slash:comments>0</slash:comments><comments>http://eduncan911.com/comments/174.aspx</comments><wfw:commentRss>http://eduncan911.com/commentrss.aspx?PostID=174</wfw:commentRss><description>&lt;P&gt;I&amp;nbsp;stumbled across&amp;nbsp;a blog&amp;nbsp;post the other day where someone modified the GoogleSearch and GoogleIndex binaries to get additional files indexed.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Larry Gadea has wrapped those changes, and more, into some nice easy plugins to the Google Desktop Search.&amp;nbsp; &lt;A href="http://www.trivex.net/"&gt;http://www.trivex.net/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Also, for those unaware Google has opened most of their downloaded features to the public:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://code.google.com/"&gt;http://code.google.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://eduncan911.com/aggbug.aspx?PostID=174" width="1" height="1"&gt;</description><category domain="http://eduncan911.com/archive/tags/Geek+Stuff/default.aspx">Geek Stuff</category><category domain="http://eduncan911.com/archive/tags/Computer+Programming/default.aspx">Computer Programming</category></item></channel></rss>