Testing your Website with different browsers

If you are like me, when you have generated your website you’ll need to make sure it works in all the Web Browsers.

My normal approach would be to fire up all my different Virtual Machines, each with a virgin copy of each web browser.  This process works fine and it is a very good way of making sure all your site works in different browsers.

However I came across a site today, Browser Shots, with thanks to Guy, that will run your website in a host of different browsers, and return back a screen shot of what it looks like, this is the fastest way to see if your site works in a lot of Browsers.  Just enter your website and let it do all the work for you.

 

How to determine is a Plugin implements an interface

The problem is you have a number of PlugIns in your application, however how do you know which plugins have implemented an interface for a task you need to perform?

Following on from my last article, Plugin Model, I will create a new interface, implement that interface and then find the Plugin that implments that interface.

First lets create a simple Interface

Next implement the interface to a plugin controller class

You can see it here as HelloWorld()

Okay now we need to find which plugins inplement that interface

As you can see above we go over the collection of plugins and check to see if the plugs has a TypeOf IInterface1, if it does then the plugin supports that interface. 

So we can now convert the plugin in to the Interface type and use its interfaces.

I then took this a little further and implemented a Generic method that gets a list of support objects that support a given interface

Plugin Model

I’ve been working with a Plugin model for a few weeks now and I thought it was time I should document the model.

Task is to build an application that you can plugin models via the .config file, and provide a level of configuration for each plugin via the .config file.

This example is for the purposes of example and you should perform more checks to perform validation to ensure that the application is more rebust.  Oh, and you can now do all of this using IoC containers, which I may cover another day.  But I have found serious issues with IoC containers and VB.NET, as VB.NET does not support implicit interface implementation whereas C# does, but that is another issue for another day.

First lets create the interfaces that will be required for a Plugin to work

The PlugInName and Version are just so we can hold general information about the Plugins.

The Initialise method will be called to start the plugin up and when you are finished you must call the Finalise method.

I have included InstalledPlugInElement, which will hold all the configuration information for the plugin that can be stored in the .config file.

Lets have a quick look at the InstalledPlugInElement class

Here are hold the assembly name and a configuration parameter for to enable the Cache for the plugin

Next we need to handle the .config file and the section where the plugs are to be configured, this will be held in the InstalledPlugInSectionHandler, this inherits the ConfigurationSection, as seen below

Okay that’s it for now with what we need for the plugins, next we need to be able to load the plugins, with the help of a PlugInLoader

Okay this is quite a lot of code for one method.

What we are going to do in this method is get a list of plugins that are supplied in the .config file, and when we create a new instance of the plugin we’ll pass in the Installed plugin Elements that are in the .config file.

The section of the .config that holds the plugin information is “plug_ins”, and we get a list of said plugins from the .config file.

You will also require InstalledPlugInCollection, which you’ll find in the source at the bottom of this article.

The PlugIn

Of now lets create our PlugIn, generate a new project and add a controller class

 

Of course this controller class implments the IPlugIn interface we created earlier.

We set the Plugin Name and Version number.

What you will also see is we can set the Cache Enabled, which is pulled in from the .config file

Now we can load the plugins in to a collection of plugins

 

That’s it for plugins, in another article I will go over how the determine if a plugin implements an interface that you may wish to use.

PlugInExample.zip (42.28 kb)

Collection of Tools

Here is a list of best kept secrets that developers keep under their hats for looking in to what your Windows system is doing:

svchost Viewer – A program to see what all those svchost.exe are running.

AutoHotKey

Launchy

Notepad2

GhostDoc – Make those comments and documenting classes, methods and properties so much easier

SysInternals 
  ProcMonitor

Paint.Net – it goes without saying, probably the best free image editor around

Unlocker – Got a file locked, free that lock 

TestDriven.Net

MSBuild Extension Pack – If you are building a Continuous Integration server, you are going to have to have these tools

Portable Apps – A must when you are working on clients site, means you have all the tools on your portable drive that you can load without the need to install anything on the clients machine

Picasa photos in your BlogEngine site

I’ve been having a play with Picasa API, and come up with this Extension for BlogEngine.

All you have to do is pake the picture.cs file and place it in “\App_Code\Extensions” folder, and it takes care of everything for you.

Picture.zip (1.92 kb)

How it works

First the extension will use the admin email address and then add all the newletter e-mail address to a user list, then check with Picasa to see if they have an account.  The extension then has a list of user with valid Picasa Albums.

When you open an article the extension will go over all the Tags and see if any of the Picasa Albums in your user list has the same tags, if it does then the photos will be added to the article.

I do Cache the objects, so once the initial load of the article has taken place it is stored in Cache, as it can take some time to compile the list of photos depending how many active user Picasa Albums you have.

One enhancement I would like to include is for the loading of the photos to happen behind the scenes and show a wait icon while the extension goes and gets the photos from Picasa.  But I’m not sure how to do this in an Extension, if you know please let me know too.

I’ve got it working on my Village Website

http://www.bromham.org.uk/

Caching from a non Web applications

Okay you are developing a WinForm application and you are looking at performance, one area is Caching of information, but wait a minute I’ve been using caching in my web applications for sometime, but how do you do it from a WinForm application as you don’t have a host to store your cache.

Would you know it you can use the web cache too, just you have to take a few extra steps to retain your cache, either in memory or in temporary files.

You can use the HttpRequest to store the System.Web.Cache objects in your application, and this works well.

I also came across any Blog, providing another method to Caching, however I have a little concern over this method of caching in files as you are likely to get file locking.

Using System.Web.Caching From The Console Or Windows Forms

I’ve written my own simple VB.NET application to show it working and just holding the Cache in memory for the life of the application.

WinFormCache.zip (17.73 kb)

Of course you could run a Windows Service which holds all the Cache information, this way it will be available to all your WinForm applications should you require it.