Just found a great LINQ tool for quering any database LINQPad, is so useful I almost fell off my chair when I found it.
If you're using LINQ then this is a must on a list of tool you need to have.
When I was using it I thought it would be nice to have Autocompletion, and it does, so long as you register the product.
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.
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
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.
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)
Finally found a link to enable you to be able to use Google fully on your iPhone
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
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.
Found a nice post from Chris Blankenship's blog about generating a Random Password, the code is just one line of code and is quite simple
string password = Membership.GeneratePassword(12, 1);
Console.Writeline("Random Password: " + password);
I've come across two issues with the Entity Framework, one that effects any language and one just for VB.NET
It's quite simple, the Entity Framework generates edmx files, however that Inherits Global.System.Data.Objects.DataClasses.EntityObject, which means when you create your Partial class you can not Inherit from your own base class.
The second issue is related to VB.NET, as if you are intending to use Dependence Injection or IoC you need to have an Interface defined and to implement an Interface in VB.NET you must add Implements after each Property and Method, which you can not do as the framework generates it's own code.
I've attached both C# and VB.NET examples, none of which compile
Entity Framework Issues.zip (42.58 kb)