<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6869999</id><updated>2011-07-08T00:58:48.135Z</updated><title type='text'>Snippets and info</title><subtitle type='html'>A collection of useful bits of code, advice and informative advice</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6869999.post-113941062263281653</id><published>2006-02-08T14:55:00.000Z</published><updated>2006-02-08T14:57:02.643Z</updated><title type='text'>Compilier directive attributes.</title><content type='html'>Add the attribute [MethodImplAttribute(MethodImplOptions.NoInlining)]

to a c# method to stop the compiler inlining it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-113941062263281653?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/113941062263281653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=113941062263281653' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/113941062263281653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/113941062263281653'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2006/02/compilier-directive-attributes.html' title='Compilier directive attributes.'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-112438344409076740</id><published>2005-08-18T16:44:00.000Z</published><updated>2005-08-18T16:50:33.103Z</updated><title type='text'>How to create an event for a ASP.Net Page</title><content type='html'>&lt;p&gt;
 To create an Event for a Asp.Net Page or Control you need the following elements:
&lt;/p&gt;
&lt;p&gt;
 1. The event object
&lt;/p&gt;
private static readonly object EventFoo = new object();
&lt;p&gt;
 2. The EventHandler (that you will add delegates to)&lt;br/&gt;
&lt;span style="font-family:courier;"&gt;
  [Description(""), Category("Action")]&lt;br/&gt;
  public event EventHandler Foo &lt;br/&gt;
  {&lt;br/&gt;
   add&lt;br/&gt;
   {&lt;br/&gt;
    base.Events.AddHandler  (FooPage.EventFoo, value);&lt;br/&gt;
   }&lt;br/&gt;
   remove&lt;br/&gt;
   {&lt;br/&gt;
    base.Events.RemoveHandler (FooPage.EventFoo, value);&lt;br/&gt;
   }&lt;br/&gt;
  }&lt;br/&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
3. OnFoo is the method that will be invoked whenever the event is to be fired.
&lt;span style="font-family:courier;"&gt;
  protected virtual  void  OnFoo (EventArgs e)&lt;br/&gt;
  {&lt;br/&gt;
   if (this.Events != null)&lt;br/&gt;
   {&lt;br/&gt;
    EventHandler handler = (EventHandler) Events[FooPage.EventFoo];&lt;br/&gt;
    if (handler != null)&lt;br/&gt;
    {&lt;br/&gt;
     handler(this, e);&lt;br/&gt;
    }&lt;br/&gt;
   }&lt;br/&gt;  
  }&lt;br/&gt;
&lt;/span&gt;
&lt;br/&gt;
Now you can add handlers to Foo as you would with any other Event (for example Page_Load)&lt;br/&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-112438344409076740?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/112438344409076740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=112438344409076740' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/112438344409076740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/112438344409076740'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2005/08/how-to-create-event-for-aspnet-page.html' title='How to create an event for a ASP.Net Page'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-111627841967762320</id><published>2005-05-16T21:20:00.000Z</published><updated>2005-05-16T21:20:19.713Z</updated><title type='text'>Slashdot | Could Microsoft Buy Red Hat?</title><content type='html'>Spotted on the Slashdot blog

&lt;a href="http://linux.slashdot.org/article.pl?sid=05/05/16/1758249&amp;amp;from=rss"&gt;Slashdot | Could Microsoft Buy Red Hat?&lt;/a&gt;: "Re:GPL? (Score:5, Funny) &lt;br/&gt;
by Anonymous Coward on Monday May 16, @02:37PM (#12545816) 
&lt;p&gt;
&lt;i&gt;If Microsoft bought Red Hat, wouldn't this mean that Microsoft would be under the GPL when it comes to releasing software?&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;I'm glad you asked that, because I collect stupid questions and I hadn't seen that one before.&lt;/b&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-111627841967762320?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/111627841967762320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=111627841967762320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/111627841967762320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/111627841967762320'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2005/05/slashdot-could-microsoft-buy-red-hat.html' title='Slashdot | Could Microsoft Buy Red Hat?'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-111416244177645190</id><published>2005-04-22T09:34:00.000Z</published><updated>2005-04-22T09:34:01.776Z</updated><title type='text'>Stock, Fonts and more...</title><content type='html'>Just some links...
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://sxc.hu/"&gt;stock.xchng&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://fontleech.com/"&gt;fontleech.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.w3schools.com/xhtml/xhtml_reference.asp"&gt;XHTML Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.csscreator.com/"&gt;Css Creator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://subimage.com/sublog/subModal"&gt;DHTML Modal Dialogs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.activewidgets.com/javascript.forum.200.4/input-fields.html"&gt;Active Widgets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-111416244177645190?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/111416244177645190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=111416244177645190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/111416244177645190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/111416244177645190'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2005/04/stock-fonts-and-more.html' title='Stock, Fonts and more...'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-110250537722332840</id><published>2004-12-08T11:29:00.000Z</published><updated>2004-12-08T11:32:33.540Z</updated><title type='text'>Showing background colors in Internet Explorer via CSS</title><content type='html'>&lt;p&gt;A common question is how to force background colors to show when printing web sites. Normally the answer is; you can't but by using an IE filter such as the following the desired effect can be reached:&lt;/p&gt;
&lt;br/&gt;
&lt;i&gt;filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff6600,endColorStr=#ff6600);&lt;/i&gt;

&lt;div style="filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff6600,endColorStr=#ff6600);color:#ffffff;height:20px;"&gt;
	This background will be visible in Print Preview 
&lt;/div&gt;
&lt;div style="background-color:#ff6600;color:#ffffff;height:20px;"&gt;
	This background will &lt;u&gt;Not&lt;/u&gt; be visible in Print Preview
&lt;/div&gt;
&lt;br/&gt;
&lt;p&gt;
	Some things to remember:
	&lt;ul&gt;
		&lt;li&gt;
		It's IE only (but then that is 9 out of 10 browsers overall and for most non techie commercial sites even higher).
		&lt;/li&gt;
		&lt;li&gt;
		You may need to define a height to the container tag (via the tag or css).
		&lt;/li&gt;
		&lt;li&gt;
		This will not work on all tags, for example div, p, h1 etc..., table all work but tr's will not.
		&lt;/li&gt;
	&lt;/ul&gt;
&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-110250537722332840?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/110250537722332840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=110250537722332840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/110250537722332840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/110250537722332840'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/12/showing-background-colors-in-internet.html' title='Showing background colors in Internet Explorer via CSS'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-110112106846136279</id><published>2004-11-22T10:57:00.000Z</published><updated>2004-11-22T15:16:02.090Z</updated><title type='text'>Migrate SQL Server Script</title><content type='html'>Here's a nice script that a colleague found takes the grunt work out of transfering data from one database to another. After running this (and changing the SourceDatabase and TargetDatabase variables) you'll get a set of insert scripts that you can copy n' paste (with a little clean up if there were any schema changes between the two databases) and run on your server (at your own risk ;) ).&lt;br/&gt;
&lt;br/&gt;
Certainly takes the grunt work out of migrating a database.&lt;br/&gt;
&lt;br/&gt;
DECLARE @data_source varchar(8000)&lt;br/&gt;
DECLARE @data_target varchar(8000)&lt;br/&gt;
&lt;br/&gt;
SELECT	@data_source = 'SourceDataBase'&lt;br/&gt;
SELECT	@data_target = 'TargetDataBase'&lt;br/&gt;
&lt;br/&gt;
DECLARE @table_name 	varchar(8000)&lt;br/&gt;
DECLARE table_cursor 	CURSOR FOR&lt;br/&gt;
SELECT	sysobjects.name FROM sysobjects WHERE sysobjects.xtype = 'U' AND sysobjects.name &lt;&gt; 'dtproperties'&lt;br/&gt;
	&lt;br/&gt;
OPEN table_cursor&lt;br/&gt;
FETCH NEXT FROM table_cursor INTO @table_name&lt;br/&gt;
WHILE @@FETCH_STATUS = 0&lt;br/&gt;
BEGIN&lt;br/&gt;
	DECLARE @column_list varchar(8000)&lt;br/&gt;
	SELECT	@column_list = ''&lt;br/&gt;

	DECLARE @column_identity bit&lt;br/&gt;
	SELECT	@column_identity = 0&lt;br/&gt;
&lt;br/&gt;
	DECLARE @column_name varchar(8000)&lt;br/&gt;
	DECLARE @column_status tinyint&lt;br/&gt;
&lt;br/&gt;
	DECLARE column_cursor CURSOR FOR&lt;br/&gt;
	SELECT syscolumns.name, syscolumns.status FROM sysobjects INNER JOIN syscolumns ON sysobjects.id = syscolumns.id WHERE sysobjects.xtype = 'U' AND sysobjects.name = @table_name&lt;br/&gt;
&lt;br/&gt;
	OPEN column_cursor&lt;br/&gt;
	FETCH NEXT FROM column_cursor INTO @column_name, @column_status&lt;br/&gt;
	WHILE @@FETCH_STATUS = 0&lt;br/&gt;
	BEGIN&lt;br/&gt;
		SELECT @column_list = (@column_list + '[' + @column_name + '], ')&lt;br/&gt;
		IF ((@column_status &amp; 128) = 128) SELECT @column_identity = 1&lt;br/&gt;
		FETCH NEXT FROM column_cursor INTO @column_name, @column_status&lt;br/&gt;
	END&lt;br/&gt;
	&lt;br/&gt;
	CLOSE column_cursor&lt;br/&gt;
	DEALLOCATE column_cursor&lt;br/&gt;

	IF (@column_identity = 1) PRINT 'SET IDENTITY_INSERT ['+ @table_name + '] ON'
	PRINT 'INSERT INTO [' + @data_target + ']..[' + @table_name + '] (' + LEFT(@column_list, LEN(@column_list) - 1) + ') SELECT ' + LEFT(@column_list, LEN(@column_list) - 1) + ' FROM [' + @data_source + ']..[' + @table_name + ']'&lt;br/&gt;
	IF (@column_identity = 1) PRINT 'SET IDENTITY_INSERT ['+ @table_name + '] OFF'&lt;br/&gt;
	FETCH NEXT FROM table_cursor INTO @table_name&lt;br/&gt;
END&lt;br/&gt;
CLOSE table_cursor&lt;br/&gt;
DEALLOCATE table_cursor&lt;br/&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-110112106846136279?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/110112106846136279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=110112106846136279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/110112106846136279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/110112106846136279'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/11/migrate-sql-server-script.html' title='Migrate SQL Server Script'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109892393049787657</id><published>2004-10-28T00:38:00.000Z</published><updated>2004-10-28T00:38:50.496Z</updated><title type='text'>Korby Parnell's WebLog - Visual SourceSafe</title><content type='html'>Interesting site on Visual Sourcesafe - hopefully will be useful to the 'Bugaloo' project.

&lt;a href="http://blogs.msdn.com/korbyp/category/2365.aspx?Show=All"&gt;Korby Parnell's WebLog - Visual SourceSafe&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109892393049787657?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109892393049787657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109892393049787657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109892393049787657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109892393049787657'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/10/korby-parnells-weblog-visual.html' title='Korby Parnell&apos;s WebLog - Visual SourceSafe'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109888853342302518</id><published>2004-10-27T14:48:00.000Z</published><updated>2004-10-27T14:48:53.423Z</updated><title type='text'>.NET XML Web Services</title><content type='html'>An amazing collection of Web services (although perhaps they should have used the spellcheck webservice on their site content ;) ).

&lt;a href="http://www.xmlwebservices.cc/index_Samples.htm"&gt;.NET XML Web Services Repertory&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109888853342302518?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109888853342302518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109888853342302518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109888853342302518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109888853342302518'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/10/net-xml-web-services.html' title='.NET XML Web Services'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109862078648731133</id><published>2004-10-24T12:26:00.000Z</published><updated>2004-10-24T12:26:26.486Z</updated><title type='text'>NASA World Wind</title><content type='html'>Every so often you see a really good idea done well - here's one of them:
&lt;br/&gt;
&lt;a href="http://learn.arc.nasa.gov/worldwind/index.html"&gt;NASA World Wind&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109862078648731133?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109862078648731133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109862078648731133' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109862078648731133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109862078648731133'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/10/nasa-world-wind.html' title='NASA World Wind'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109072202640416479</id><published>2004-07-25T00:00:00.000Z</published><updated>2004-07-26T17:36:55.906Z</updated><title type='text'>Visual Studio / C# Express Tweaks Part 2: Project Assembly Settings</title><content type='html'>&lt;p&gt;
Following on from earlier where I talked about using FXCop with Visual C# Express (or indeed any other version of Visual Studio), I'm now going to quickly run through the top issues that FXCop will report with newly made assemblies (and indeed most mature assemblies). Specifically I'm talking about these: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CriticalError : Assemblies should have the CLSCompliantAttribute.&lt;/li&gt;
&lt;li&gt;CriticalError : Assemblies should be marked with the ComVisible attribute.&lt;/li&gt;
&lt;li&gt;CriticalError : Assemblies should have Permission Requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Where the rain gets in&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
So what are these issues and why do you get them free with your new projects? Well tackling them in order "CLSCompliant" does what it says on the tin - it enforces the Common Language Specification rules that allow an assembly to produce valid Common Language Runtime code (or IL - Intermediate Language). You might now be thinking: "Isn't C# built on top of the CLR , why does it need to say it's compliant?", well the answer is that C# isn't&amp;nbsp;hundred percent compliant and in fact allows you to do&amp;nbsp;some CLR no-nos. By specifying CLS Compliance Visual Studio (or at least your Compiler) will enforce the slightly stricter rules of the CLS. 
&lt;/p&gt;
&lt;p&gt;
Next up; ComVisible, basically this deals with Net objects in the Win32 world and to be honest if you don't know anything about this you should simply declare the attribute as false, as is indeed the Microsoft recommendation (it recommends marking the Assembly invisible and individual 'known good' Methods Visible). 
&lt;/p&gt;
&lt;p&gt;
Lastly Permission Requests; this is the implementation of an underused feature of the .Net Framework; the ability to declare the permissions that a program requires in order to run properly. Let me explain; in normal execution a .Net program will be constantly monitored by the framework, if your program attempts to execute a command it does not have sufficient rights for (due to where the program was run from or the user's security settings etc...) the framework will step in a stop execution. So do Permission Requests get you round this? No, but they allow you to declare up front what you want to be able to do and give the user an opportunity to trust your application and grant those rights (which is infinitely better than your program failing mid process). Now this is a very simple way of looking at security and the subject deserves a proper understanding (which I'm not going to do here), especially when you get to the cases of denying rights to third party code and of course "Click Once" (the .Net internet deployment platform).
&lt;/p&gt;
&lt;p&gt;
So why aren't these preset for your new application? Short answer because the alternative is for Microsoft to second guess what you want from your program (think- "It looks like you're writing a letter?"), long answer - well that's what the &lt;a href="http://msdn.microsoft.com/"&gt;MSDN&lt;/a&gt; is for. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Fixing a Hole.&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
So how do I sort these issues out? Well firstly ensure that they are issues. Occasionally you may wish to produce non CLS compliant code etc... Assuming this is not the case we can easily knock these off of FXCop's list. 
&lt;/p&gt;
&lt;p&gt;
The first thing to realise is that all of these settings are contained within your AssemblyInfo file that will be either in your project root or within the project Properties subfolder depending on your version (C# Express 2005 uses the Properties subfolder). AssemblyInfo contains metadata about the DLL or EXE that will be produced by your code you will see that it is prefilled with values regarding version numbering and such like. Now to the 'fixes': 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Marking an Assembly as CLSCompliant:&lt;/strong&gt;&lt;br/&gt;
[assembly: System.CLSCompliant(true)] 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Marking an Assembly invisible to Com services:&lt;/strong&gt;&lt;br/&gt;
[assembly:System.Runtime.InteropServices.ComVisible(false)] 
&lt;/p&gt;
&lt;p&gt;
Finally Assembly Permissions; to properly set security permissions you must work out every time you use a framework feature that relies upon a such a permission. So how do you work that out? Well fortunately Microsoft supply a tool called PermCalc with studio (there is an application called PermView for earlier versions), that will do the hard work for you. Less good is the fact it is a command line tool, but if you've read my previous article you'll know the goodness that is the External Tools section of the Visual Studio/C# Express Tool's menu: 
&lt;/p&gt;
&lt;p&gt;
Fire up Tools&gt;ExternalTools... and fill in the following: 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Title&lt;/strong&gt;&lt;br/&gt;
Get&amp;nbsp;Debug Permissions 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Command*:&lt;/strong&gt;&lt;br/&gt;
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PermCalc.exe 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Argument**:&lt;/strong&gt;&lt;br/&gt;
 $(TargetDir)$(TargetName)$(TargetExt) -nologo -library
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Check the "Use Output Window" option&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;*Change paths to reflect your own folder structure this is the default location 
&lt;br/&gt;
**If you're are setting permissions for a library rather than an exe add -Library to the command (you may want two commands, one for each mode)
&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Also note you'll need to do an initial 'build' for this to work (so that the assemblies are compilied). 
&lt;/p&gt;
&lt;p&gt;
Security permissions are complicated by the nature of what they do however once we know what permissions are needed they are easy enough to apply. Here are some examples of permissions set in the assemblyInfo.cs:
&lt;/p&gt;
&lt;b&gt;First add this using directive (with the others at the top of the file)&lt;/b&gt;
&lt;br/&gt;
using System.Security.Permissions
&lt;p&gt;
Now we can add some permissions, lets use File IO permissions as an example.
&lt;/p&gt;
&lt;b&gt;Add request to access C:\&lt;/b&gt;&lt;br/&gt;
[assembly:FileIOPermissionAttribute(SecurityAction.RequestMinimum, Read="c:\\")]
&lt;p&gt;
Some quick notes: RequestMinimum states that for this program to run we need this permission (i.e. we can't run without it), other settings are RequestOptional (which states we can optionally run without the permission - note if you allow code that relies on this permission to be run when the request was denied a SecurityException will be thrown) also there is the RequestRefuse which will stop a assembly from having a permission even if it would normally be granted.
&lt;/p&gt;
&lt;p&gt;
Also note the: Read="c:\\" section this is called a flag. Flags are present on many security permissions and allow for fine grain control of permissions (IOPermissions also feature the Write flag but visit the &lt;a href="http://msdn.microsoft.com"&gt;msdn&lt;/a&gt; for details on other flags). If you're wondering why the value is "c:\\" not "c:\" its because '\' is an escape character and thus needs itself to be escaped (confusing eh? again MSDN is your friend).
&lt;/p&gt;
&lt;p&gt;
Now in addition to specific security permissions there are also PermissionSets which allow you to specify permissions on a large scale basis. Three main categories are available; Nothing, Execution, FullTrust. I'm not going to go into these in detail but here is how to request that you application is fully trusted at runtime.
&lt;/p&gt;
&lt;b&gt;A request for full permissions&lt;/b&gt;&lt;br/&gt;
[assembly:PermissionSetAttribute(SecurityAction.RequestMinimum, Name="FullTrust")]
&lt;p&gt;
Due to the user's security settings this code may or may not run; typically code marked "FullTrust" will run from local machines, but not from Intranets and never from the Internet (unless that user is a very trusting individual).
&lt;/p&gt;
&lt;p&gt;
Remember these settings are on a assembly by assembly basis i.e. for each project in your solution (if you made an empty project and thus don't have a AssemblyInfo.cs simply copy another one to the project, edit the appropriate settings and include it in the project). &lt;/p&gt;
&lt;p&gt;
In closing, this advice is equally valid for those using VB.net just remember to alter the syntax to reflect language differences. I hope this helps those with difficulties or those who are just curious about the inner workings of .Net assemblies. 
&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109072202640416479?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109072202640416479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109072202640416479' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109072202640416479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109072202640416479'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/07/visual-studio-c-express-tweaks-part-2.html' title='Visual Studio / C# Express Tweaks Part 2: Project Assembly Settings'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109071764993223723</id><published>2004-07-24T23:30:00.000Z</published><updated>2004-07-25T14:26:19.176Z</updated><title type='text'>Visual Studio / C# Express Tweaks Part 1: Microsoft FXCop</title><content type='html'>&lt;p&gt;
	Well I've been playing with Visual C# Express for a few days now - and I'm sold, generics, partial classes and the new IDE features are great (especially refactoring). One thing that is unfortunate with the Express release is that FXCop isn't integrated like it is for it's bigger brother (VS2005). However the trick of adding FXCop to the External Tools list (in the tools window) still works.
&lt;/p&gt;
&lt;p&gt;
	For those who don't know you can simply add it via Tools&gt;ExternalTools... then filling the details as below&lt;br/&gt;&lt;br/&gt;
	&lt;b&gt;Title:&lt;/b&gt;&lt;br/&gt;
	FXCop Project&lt;br/&gt;
	&lt;b&gt;Command:&lt;/b&gt;&lt;br/&gt;
	C:\Program Files\Microsoft FxCop 1.30\FxCopCmd.exe&lt;br/&gt;
	&lt;b&gt;Arguments:&lt;/b&gt;&lt;br/&gt;
	/f:$(TargetPath) /c /s&lt;br/&gt;
	&lt;b&gt;Finally check the "Use Output Window" option&lt;/b&gt;&lt;br/&gt;
&lt;/p&gt;
&lt;p&gt;
	More interestingly, You can also target FXCop projects from the command line. This approach offers some distinct advantages over targetting specific assemblies; namely, the abilty to target multiple assemblies, track new issues from build to build and being able to refresh your main FXCop project file without leaving the comfort of your IDE.
&lt;/p&gt;
&lt;p&gt;
	To do this simply add a new External Tool entry with arguements like:
	&lt;b&gt;Arguments:&lt;/b&gt;&lt;br/&gt;
	/p:$(SolutionDir)FXCop\$(SolutionFileName)_Analysis.fxcop  /u /c /s
&lt;/p&gt;
&lt;p&gt;
	These arguments will look for the main FXCop with in a FXCop subfolder within the solution's folder so for the solution "Application" it would look for "Application.sln_Analysis.fxcop" within "\FXCop". I've made a small exe that will build a FXCop project for the current solution but you can simply build it via the main FXCop program then changing the filepath arguments accordingly.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109071764993223723?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109071764993223723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109071764993223723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109071764993223723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109071764993223723'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/07/visual-studio-c-express-tweaks-part-1.html' title='Visual Studio / C# Express Tweaks Part 1: Microsoft FXCop'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109070242142913463</id><published>2004-07-24T20:38:00.000Z</published><updated>2004-07-24T20:53:41.430Z</updated><title type='text'>Channel 9 Previews MS User Interface Research</title><content type='html'>&lt;p&gt;
Microsoft's VIBE team have been featured on Channel9 (MS's new community channel for it's employee's); there's some very interesting features previewed here which I hope will be appearing on my desktop soon!
&lt;/p&gt;
&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=14275"&gt;VIBE Video&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109070242142913463?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109070242142913463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109070242142913463' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109070242142913463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109070242142913463'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/07/channel-9-previews-ms-user-interface.html' title='Channel 9 Previews MS User Interface Research'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109067151614395481</id><published>2004-07-24T11:42:00.000Z</published><updated>2004-07-24T12:18:36.143Z</updated><title type='text'>Agile Development answers to criticisms.</title><content type='html'>There is a good article on Agile methods, it touches on a lot of things I haven’t seen before might be of interest.
&lt;br/&gt;&lt;br/&gt;
&lt;a href="http://dotnetjunkies.com/WebLog/darrell.norton/archive/2003/09/30/1947.aspx"&gt;Answers to a Sceptics view of Agile Programming&lt;/a&gt;

While it won't answer every objection to Agile methods you come across, it is interesting and provides a good begining for justifying agile methods to management.

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109067151614395481?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109067151614395481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109067151614395481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109067151614395481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109067151614395481'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/07/agile-development-answers-to.html' title='Agile Development answers to criticisms.'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109057758750980889</id><published>2004-07-23T10:08:00.000Z</published><updated>2004-07-23T10:24:12.323Z</updated><title type='text'>Unit Tests For the Databases</title><content type='html'>First WebForms get them now databases! Interesting stuff: 

&lt;a href="http://weblogs.asp.net/rosherove/articles/dbunittesting.aspx"&gt;Database Unit testing using Enterprise Services&lt;/a&gt; 

Edit:&amp;nbsp;

On the same site &lt;a href="http://weblogs.asp.net/rosherove/articles/29038.aspx"&gt;Unit Tests for abstract classes&lt;/a&gt;


&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109057758750980889?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109057758750980889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109057758750980889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109057758750980889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109057758750980889'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/07/unit-tests-for-databases.html' title='Unit Tests For the Databases'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109057716427777149</id><published>2004-07-23T10:06:00.000Z</published><updated>2004-07-23T10:06:04.276Z</updated><title type='text'>Test First Development - the 'Killer Feature'</title><content type='html'>&lt;p&gt;
I've been using Unit Testing for some time now and after some protesting I've eventually come round to being something of an advocate of Unit Testing. The thing that finally sold me was the usefulness and productiveness of unit tests when used with a Test-First methodology. 
&lt;/p&gt;
&lt;p&gt;
Test-First development itself was born out of the whole Xtreme Programming/Agile programming wave of a few years ago, and basically says that you don't code then test, but write your tests then implement the features needed to make them pass. This to me is a great example of what Agile Programming does best; namely to be practical in approach yet retain empathy with the developer real world situation. So, how does it do that? Well, quite simply developers hate doing tests, sure it's something that most developers will agree is a worthwhile endeavour but even developers who advocate proper testing procedures and QA baulk at actually doing those same tests themselves (can you say NIMBY?); mainly because its tedious, it isn’t any sort of ‘challenge’, I've got a deadline &amp; this won't help me hit it and anyway “shouldn’t we have a tester who does this?”
&lt;/p&gt;
&lt;p&gt;
Now, in test driven development we write the tests up front, before a line of proper code has been written, you might think this is worse but actually writing test frameworks first gives you several real advantages; you to fully understand what you are going to do to implement a feature or a piece of business logic – questions such as: what properties does a class need to expose and what granularity is needed for the methods available to the end user are sometimes only obvious when you actually try and use it from the outside. But the killer feature of testing up front and the one that sells it the test lazy developer is that up front testing adds value to your work; the ability to use those tests to help YOUR work rather than prove that your work is good enough to your 'friendly' QA representative. Test-first leverages the effort invested in tests when you need it most, i.e. when your code is experiencing churn (modifying/adding/refactoring code), and there are few times where code experiences more churn then when it is first being written. The ability to write a method, run the tests and know immediately that your code fulfils it’s requirements (and can handle exceptional circumstances) is a great boost to personal morale &amp; productivity and implicitly leads to good quality code and importantly provides a great way of debugging those issues that do crop up.
&lt;/p&gt;
&lt;p&gt;
It’s nice to see that development tools are finally reflecting the new methodologies that have appeared over the last few years and giving real improvements after a realatively dry spell and (especially in Visual Studio’s case) reliance on improvements in the underlying platform rather than new thinking in the IDE. Thinking of Visual Studio specifically, the 2005 edition’s Team features include a NUnit like testing framework (although as you may imagine it’s more tightly integrated into the IDE than NUnit). This enhanced framework facilitates Test first programming by allowing tests to refer to non-existent member (merely failing the test with a “member not found”), and for that member’s implementation stub to be generated by Studio’s refactor options. It’s just a shame that those features aren’t available in the lower end Studio options (and the new Express editions).
&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109057716427777149?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109057716427777149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109057716427777149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109057716427777149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109057716427777149'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/07/test-first-development-killer-feature.html' title='Test First Development - the &apos;Killer Feature&apos;'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-109031559890498417</id><published>2004-07-20T09:26:00.000Z</published><updated>2004-07-20T09:30:24.110Z</updated><title type='text'>Array and ArrayList Properties</title><content type='html'>Often you want to expose a typed array, but also want the flexibility of an ArrayList underneath, with c# we can easily do this via these few lines: 

private ArrayList myIntArray = new ArrayList(); 

public int MyIntArray 

{ 
get{ return (int[])myIntArray.ToArray(typeof(int));} 
} 

But beware, for efficency you shouldn't do this too often (each call will create a new Array - unless you do some caching logic) and also you shouldn't add a 'set' method for the same reason (the hit with a set is generally worse), instead I'd recommend exposing the functionality needed (perhaps Add() and Clear()). As soon as you start needing more of the functionality of the ArrayList you should consider exposing the actual ArrayList itself. 

Of course this should be a moot point once Generics are part of the released (non beta) Framework, then you can expose what are effectively typed ArrayLists. 
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-109031559890498417?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/109031559890498417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=109031559890498417' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109031559890498417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/109031559890498417'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/07/array-and-arraylist-properties.html' title='Array and ArrayList Properties'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108817096505028210</id><published>2004-06-25T13:42:00.000Z</published><updated>2004-06-25T13:53:03.366Z</updated><title type='text'>Sealed By Default or not?</title><content type='html'>&lt;p&gt;There was a question on &lt;a href="http://blogs.msdn.com/ericgu/archive/2004/05/17/133570.aspx"&gt;Eric Gunnerson's C# Compendium&lt;/a&gt; as to whether c# classes should be sealed by default - here's my take on it.&lt;/p&gt;
&lt;p&gt;
They appear similar in concept but to me its about making your intentions as a class designer clear: what your saying when you declare a virtual? and compare that to the statement your making when you declare a class sealed.&lt;/p&gt;
&lt;p&gt;
By declaring a virtual you are stating a granular level of behaviour in a very specific way. This is different to what you state when using the same concept at class level. &lt;/p&gt;

&lt;p&gt;If you could declare a class 'extensible' you could be implying that the class as a whole is implicitly overridable - which clearly isn't the case in C# (this of course is different to Java). Furthermore you are stating your extensibility level twice (if method A is virtual then the class X must also be extensible).&lt;/p&gt; 

&lt;p&gt;By having a class explicitly declared as sealed you imply that the class is a final implementation and cannot be extended (which is true). You aren't doubling your extensibility declaration and your intentions are therefore made clear to the user of your class. &lt;/p&gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108817096505028210?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108817096505028210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108817096505028210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108817096505028210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108817096505028210'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/06/sealed-by-default-or-not.html' title='Sealed By Default or not?'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108635313544806079</id><published>2004-06-04T12:45:00.000Z</published><updated>2004-06-25T13:50:56.543Z</updated><title type='text'>The right way to do an javascript Anchor  tag</title><content type='html'>I was wondering what the current consensus was so had a look around, the result - confused but after sifting around I got this:&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&amp;lt;a href="#" onclick="javascript:function()"&amp;gt;
&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
This means you get your onclick for browsers that support javascript and the return false stops the href been called for those that don't. Aditionally you can navigate to a page that offers alternate functionality by setting the href (i.e. a serverside page: href="function.aspx"). 
&lt;br/&gt;&lt;br/&gt;
Additionally you should at the end of the onclick statement return a boolean which determines whether a default action should be performed or not (i.e should the href be  followed). In most cases you won't want the default action to be performed so you would return false (some people recommend returning nothing - which is treated as false but I don't know if this behaviour is guarenteed to be true in all implementations now or in the future).
&lt;br/&gt;&lt;br/&gt;
So the final result is &amp;lt;a href="#" onclick="javascript:function();return false;"&amp;gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108635313544806079?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108635313544806079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108635313544806079' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108635313544806079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108635313544806079'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/06/right-way-to-do-javascript-anchor-tag.html' title='The right way to do an javascript Anchor &lt;a&gt; tag'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108443781622890322</id><published>2004-05-13T08:43:00.000Z</published><updated>2004-05-13T08:43:36.226Z</updated><title type='text'>Tools for C#</title><content type='html'>Possibly fed up with the old 'dogfood' arguement here's a nice listing of c# tools from the people who should know... &lt;a href="http://msdn.microsoft.com/vcsharp/team/tools/default.aspx"&gt;-C# Tools-&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108443781622890322?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108443781622890322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108443781622890322' title='29 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108443781622890322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108443781622890322'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/tools-for-c.html' title='Tools for C#'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108437493474418362</id><published>2004-05-12T15:15:00.000Z</published><updated>2004-05-22T13:53:04.623Z</updated><title type='text'>SQL transaction example (especially for facades)</title><content type='html'>This is the bare bones of a transaction wrapper for a series of database access methods you'll need a connection string from somewhere, some real methods (instead of the dummy MyMethods) - but this shows the usage of SqlTransaction and the necessary cleanup code (to do a rollback and release resources).
&lt;br/&gt;
&lt;br/&gt;
//these are declared outside of the try so they are available in the ctach/finally blocks&lt;br/&gt;
SqlConnection  sqlConnection  = null;&lt;br/&gt;
SqlTransaction sqlTransaction = null;&lt;br/&gt;
try&lt;br/&gt;
{&lt;br/&gt;
        /*put all your connection opening code (connection string etc in one place - I call mine GetDataConnection)*/&lt;br/&gt;
	sqlConnection  = GetDataConnection() ;&lt;br/&gt;
        sqlTransaction = sqlConnection.BeginTransaction(); &lt;br/&gt;
	&lt;br/&gt;
	MyMethod(fooInput, sqlConnection, sqlTransaction)&lt;br/&gt;
	MyMethod2(fooInput, sqlConnection, sqlTransaction)&lt;br/&gt;
	&lt;br/&gt;
	sqlTransaction.Commit();&lt;br/&gt;
}&lt;br/&gt;
catch(Exception e)&lt;br/&gt;
{&lt;br/&gt;
	if (sqlTransaction!=null) {sqlTransaction.Rollback()};&lt;br/&gt;
	throw new Exception("Failure in method x", e) ;&lt;br/&gt;
}&lt;br/&gt;
finally&lt;br/&gt;
{&lt;br/&gt;
	if(sqlConnection!=null &amp;&amp; sqlConnection.State==ConnectionState.Open)&lt;br/&gt;
	{sqlConnection.Close();}&lt;br/&gt;
} &lt;br/&gt;
&lt;br/&gt;
those 'MyMethod' methods will usually use SqlCommand in some manner such as:&lt;br/&gt;

GetProductSales(int productId, SqlConnection, SqlCommand)&lt;br/&gt;
{&lt;br/&gt;
const string sql_GetProductName = ("SELECT ProductSales          " +&lt;br/&gt;
                                   "FROM   Products              " +&lt;br/&gt;
                                   "WHERE  ProductId = {0}       " ;&lt;br/&gt;
&lt;br/&gt;
string sqlString      = string.Format(sql_GetProductName, productId );&lt;br/&gt;
SqlCommand sqlCommand = new SqlCommand(sqlString, sqlConnection, sqlTransaction) &lt;br/&gt;&lt;br/&gt;
return Convert.ToInt32(sqlCommand.ExecuteScalar());&lt;br/&gt;
&lt;br/&gt;
}&lt;br/&gt;

Once you are more comfortable with what's going on you can (and should) use Parameters, DataReaders and if your not object mapping DataSets and DataAdapters. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108437493474418362?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108437493474418362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108437493474418362' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108437493474418362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108437493474418362'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/sql-transaction-example-especially-for.html' title='SQL transaction example (especially for facades)'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108419161087554568</id><published>2004-05-10T12:20:00.000Z</published><updated>2004-05-10T12:20:10.876Z</updated><title type='text'>Managing BLOB Data Fields</title><content type='html'>Get a bunch of really smart guys together build a complex advanced database system - then what do they do? name a core datatype 'Blob' *sigh* &lt;a href="http://www.ftponline.com/vsm/2003_08/magazine/columns/qa/page2.aspx"&gt;Managing BLOB Data Fields in ADO&lt;/a&gt; (warning: this example includes VB code).  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108419161087554568?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108419161087554568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108419161087554568' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108419161087554568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108419161087554568'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/managing-blob-data-fields.html' title='Managing BLOB Data Fields'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108418876864128867</id><published>2004-05-10T11:32:00.000Z</published><updated>2004-05-10T11:32:48.640Z</updated><title type='text'>Build a Quick Visual Studio.NET Search Macro</title><content type='html'>Want something that can save you at least ten minutes a day? (well for me at least) &lt;a href="http://www.eggheadcafe.com/articles/20040423.asp"&gt;-Build a Quick Visual Studio.NET Search Macro-&lt;/a&gt; This puppy saves the usual copy paste to google that most of us go through - although I'd recommend losing the error Message Box (why thank you for pointing out I'm wrong...), and customising the search string to suit your tastes (i.e. choose your region's google page etc...). I'm now gonna have a cup of tea to celebrate my extra ten minutes - productivity lives!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108418876864128867?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108418876864128867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108418876864128867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108418876864128867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108418876864128867'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/build-quick-visual-studionet-search.html' title='Build a Quick Visual Studio.NET Search Macro'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108392244281714802</id><published>2004-05-07T09:34:00.000Z</published><updated>2004-05-07T09:40:21.610Z</updated><title type='text'>RegEx Tag Matching</title><content type='html'>RegEx (Regular Expressions) aren't the most fun in the world but they are powerful and surprisingly quick - here's one I made matches multiple white space characters and html/xml etc tags from a string (i use it in replace mode to strip html to unformatted text for things like on the fly word counts).&lt;br/&gt;&lt;br/&gt;
(\s\s.*?\s)|&amp;amp;nbsp|&amp;lt;(.|\n)*?&amp;gt;|&amp;amp;(.|\n)*?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108392244281714802?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108392244281714802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108392244281714802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108392244281714802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108392244281714802'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/regex-tag-matching.html' title='RegEx Tag Matching'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108391772169341764</id><published>2004-05-07T08:15:00.000Z</published><updated>2004-05-07T08:19:49.373Z</updated><title type='text'>Lutz Roeder's Programming.NET C# VB CLR WinFX</title><content type='html'>&lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;Lutz Roeder's Programming.NET&lt;/a&gt; site has something for any .Net designer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108391772169341764?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108391772169341764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108391772169341764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108391772169341764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108391772169341764'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/lutz-roeders-programmingnet-c-vb-clr.html' title='Lutz Roeder&apos;s Programming.NET C# VB CLR WinFX'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108385890576082655</id><published>2004-05-06T15:48:00.000Z</published><updated>2004-05-07T09:51:48.810Z</updated><title type='text'>Maintaining an arraylist through viewstate (plus auto databinding)</title><content type='html'>Here's how to add an arraylist, in c#, to a UserControl so you expose a Items property to the parent (which they can iterate through etc...). It uses viewstate to maintain the list and this example also shows how you can sync changes to the arraylist to a DataGrid called dataGrid (whenever a change is made to the arraylist the DataGrid is refreshed and rebound).&lt;br/&gt;
&lt;br/&gt;
/// &lt;summary&gt;&lt;br/&gt;
/// ArrayList of Items.&lt;br/&gt;
/// &lt;/summary&gt;&lt;br/&gt;
public ArrayList Items&lt;br/&gt;
{&lt;br/&gt;
&lt;br/&gt;
get {return (ArrayList) ViewState["Items"];}&lt;br/&gt;
&lt;br/&gt;
set &lt;br/&gt;
    {&lt;br/&gt;
        ViewState["Items"]	= value;&lt;br/&gt;
        dataGrid.DataSource	= Items;&lt;br/&gt;
        dataGrid.DataBind();}&lt;br/&gt;
}&lt;br/&gt;
&lt;br/&gt;
Note: don't put heavyweight objects into the arraylist or you'll end up with huge client html pages, also this could be adapted to use normal arrays or even better generic data stores.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108385890576082655?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108385890576082655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108385890576082655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108385890576082655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108385890576082655'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/maintaining-arraylist-through.html' title='Maintaining an arraylist through viewstate (plus auto databinding)'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108385111319032600</id><published>2004-05-06T13:45:00.000Z</published><updated>2004-05-07T09:46:55.843Z</updated><title type='text'>Other Character Codes</title><content type='html'>I mentioned whitespace character codes earlier but see &lt;a href="http://hotwired.lycos.com/webmonkey/reference/special_characters/"&gt;Web Monkey's Character Reference&lt;/a&gt; for a fuller list of other special character codes (XHTML, XSLT, XML and HTML) check this list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108385111319032600?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108385111319032600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108385111319032600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108385111319032600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108385111319032600'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/other-character-codes.html' title='Other Character Codes'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108384387804306955</id><published>2004-05-06T11:34:00.007Z</published><updated>2004-05-07T09:45:19.360Z</updated><title type='text'>Got no space?</title><content type='html'>Ever needed whitespace in an xslt? While the &amp;nbsp (non-breaking space) name tag  doesn't exist in xslt's there are alternatives: 

You can use a literal space like this (bit clunky but possibly more correct than the following method).
&amp;#60;xsl:text&amp;#62; &amp;#60;/xsl:text&amp;#62;

Alternatively use the decimal versions of spaces just like your old &amp;nbsp (you could make a new &amp;nbsp tag mapping to these values but I wouldn't recommend it):

Non-breaking space character is  &amp;#xA0&amp;#59;
Tab character is &amp;#x9&amp;#59;
Newline character	is &amp;#xA&amp;#59;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108384387804306955?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108384387804306955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108384387804306955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108384387804306955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108384387804306955'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/got-no-space.html' title='Got no space?'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108383148461256365</id><published>2004-05-06T08:18:00.000Z</published><updated>2004-05-07T09:50:17.966Z</updated><title type='text'>JavaScript Library</title><content type='html'>&lt;a href="http://javascriptkit.com/"&gt;JavaScript Kit&lt;/a&gt; some good scripts on here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108383148461256365?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108383148461256365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108383148461256365' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108383148461256365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108383148461256365'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/javascript-library.html' title='JavaScript Library'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108376807276414822</id><published>2004-05-05T14:41:00.000Z</published><updated>2004-05-07T13:47:49.466Z</updated><title type='text'>DataGrids Anonymous</title><content type='html'>Anybody who has started using knows the pain they can cause but they are a powerful tool if you know what to do with them - this tutorial should certainly help to that end -&lt;a href="http://aspnet.4guysfromrolla.com/articles/040502-1.aspx"&gt;An Examination of the DataGrid &lt;/a&gt; &lt;br/&gt; You could also find this from the MSDN handy with pesky ASP.Net DataGrids &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchTopQuestionsAboutASPNETDataGridServerControl.asp"&gt;Top Questions about the DataGrid Web Server Control&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108376807276414822?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108376807276414822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108376807276414822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108376807276414822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108376807276414822'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/05/datagrids-anonymous.html' title='DataGrids Anonymous'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108333135171966562</id><published>2004-04-30T13:20:00.000Z</published><updated>2004-05-07T09:49:00.576Z</updated><title type='text'>Web Service Method's with Session</title><content type='html'>Trying to use session with an ASP.Net Web Service - won't work? Well you need to add (EnableSession=true) to you Web Method Attribute i.e. [ WebMethod(EnableSession=true)] .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108333135171966562?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108333135171966562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108333135171966562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108333135171966562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108333135171966562'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/04/web-service-methods-with-session.html' title='Web Service Method&apos;s with Session'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6869999.post-108333089296056173</id><published>2004-04-30T13:09:00.000Z</published><updated>2004-05-07T09:49:50.030Z</updated><title type='text'>Snippets and info</title><content type='html'>This is really a dumping ground for useful bits I'd otherwise forget but if anything helps you - so much the better. Here's a few links to start with.&lt;br/&gt;
&lt;a href="http://www.jaggersoft.com/pubs/AProgrammersOverviewOfCSharp.htm"&gt;A good clear start in C# for anyone (well almost)&lt;/a&gt;&lt;br/&gt;&lt;a href="http://adamgilmore.blogspot.com/"&gt;Adam's Blog&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.joelonsoftware.com/index.html"&gt;Joel On Software: Some good advice to be found here.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6869999-108333089296056173?l=alexmitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alexmitchell.blogspot.com/feeds/108333089296056173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6869999&amp;postID=108333089296056173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108333089296056173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6869999/posts/default/108333089296056173'/><link rel='alternate' type='text/html' href='http://alexmitchell.blogspot.com/2004/04/snippets-and-info.html' title='Snippets and info'/><author><name>Lex</name><uri>http://www.blogger.com/profile/09573189826238915405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
