<?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-8835063</id><updated>2012-02-02T12:05:01.735+01:00</updated><title type='text'>Runi Thomsen Code Thoughts</title><subtitle type='html'>This is my blog on programming issues and my life as an Systems Developer.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8835063.post-6787975458957176482</id><published>2011-09-15T16:36:00.001+02:00</published><updated>2011-09-15T16:36:05.413+02:00</updated><title type='text'>Quick Tip: Accessing MapPath method When HttpContext.Current is null</title><content type='html'>&lt;p&gt;If you ever tried to use the HttpContext.Current.Server.MapPath method from a thread or within a Sitecore EventHandler, you will notice, that the HttpContext.Current is null. &lt;/p&gt; &lt;p&gt;How do you get the absolute path of a file when you only know the relative path? Well, you can’t use HttpContext.Current.Server but you can use the alternative:&lt;/p&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HostingEnvironment&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.MapPath(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"~/App_Config/MailTalkServices.config"&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Arial"&gt;Located in the namespace:&lt;/font&gt; &lt;/pre&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt" color="#000000"&gt;System.Web.Hosting;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-6787975458957176482?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/6787975458957176482/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=6787975458957176482' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/6787975458957176482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/6787975458957176482'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2011/09/quick-tip-accessing-mappath-method-when.html' title='Quick Tip: Accessing MapPath method When HttpContext.Current is null'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-7829810486562222742</id><published>2009-12-17T23:12:00.001+01:00</published><updated>2009-12-17T23:12:18.751+01:00</updated><title type='text'>.NET Developer on a Macbook Pro running Windows 7</title><content type='html'>&lt;p&gt;Yes I know, It is strange but very true. &lt;/p&gt; &lt;p&gt;I am a Microsoft .NET programmer and I use a 17” Unibody Macbook Pro Mid 2009 model, with a 2.66 GHz CPU, 8 GB RAM, and a Intel X-25m 160GB SSD hard drive. On top of that, I'm running Windows 7 as my primary OS spending 99% of my time on it, and using 90% of my time in Visual Studio 2008, Outlook 2010 Beta or Google Chrome.&lt;/p&gt; &lt;p&gt;And I am happy. Well now I am, but it has been a hassle. For a little over a year, I have been struggling to make this baby perform under Windows 7, and I has not been easy. I must have used 100 hours reading blogs, discussion forums and reading web pages on the subject.&amp;nbsp; &lt;/p&gt; &lt;p&gt;This is actually my second Unibody Macbook Pro. My first was a 15" but I sold that one and bought the 17” model instead. This proved to be a good decision. The 17” has a marvelous battery life and a fantastic screen compared to the 15” model. It is also a lot more silent and not as hot during intensive use.&lt;/p&gt; &lt;p&gt;I am besides being a .NET developer also a consultant. It has been quite funny to see how my customers make funny faces when I sit down around the conference table, introducing myself as a Microsoft specialist, pulling a Macbook Pro from my briefcase. However, some of them have told me that they actually had the same idea and I made a promise to one of them to explain how I made it perform under Windows 7. What better way of doing that than writing a series of blog posts. &lt;/p&gt; &lt;p&gt;I will over the next few days write about what I did to make it perform, and describe the one issue that remains to be solved: How to enable AHCI and thus SATA2 speeds in Windows 7. But more on that later. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-7829810486562222742?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/7829810486562222742/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=7829810486562222742' title='4 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/7829810486562222742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/7829810486562222742'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2009/12/net-developer-on-macbook-pro-running.html' title='.NET Developer on a Macbook Pro running Windows 7'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8835063.post-8291770028239247619</id><published>2008-08-29T13:03:00.003+02:00</published><updated>2008-08-29T13:23:44.428+02:00</updated><title type='text'>Sitecore and .NET 3.5 SP1</title><content type='html'>Sitecore 6 was the victim of a bug in Microsoft .NET 3.5 SP1 – which meant that Sitecore 6 developers could not use Visual Studio 2008 SP1 or .NET Framwork 3.5 SP1.&lt;br /&gt;&lt;br /&gt;You can read alle about it at &lt;a href="http://alexeyrusakov.com/sitecoreblog/2008/08/14/Donrsquot+Install+NET+35+Service+Pack+1+On+Sitecore+Servers+Yet.aspx"&gt;Alexey Rusakov's&lt;/a&gt; blog&lt;br /&gt;&lt;br /&gt;However, I just discovered that Sitecore just now released a patch addressing this very problem. I tested it, and it seems to work.&lt;br /&gt;&lt;br /&gt;What you want to do, is download Update rev.080820 from sdn5.sitecore.net&lt;br /&gt;&lt;br /&gt;Good work Sitecore :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-8291770028239247619?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/8291770028239247619/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=8291770028239247619' title='3 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/8291770028239247619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/8291770028239247619'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2008/08/sitecore-and-net-35-sp1.html' title='Sitecore and .NET 3.5 SP1'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-4360695785467376006</id><published>2007-11-30T12:57:00.001+01:00</published><updated>2007-11-30T13:03:19.564+01:00</updated><title type='text'>Sitecore on .NET 3.5</title><content type='html'>&lt;p&gt;&lt;br /&gt;I can report that using Sitecore with .NET 3.5 and C# 3.0 truly is a seamless transition. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;This is especially good news for us developers who tried to upgrade from .NET 1.1 to .NET 2.0.&lt;br /&gt;Back in the day, the transition supposed to be seamless, but surely was not. There was always some strange library containing some braking change, or a project model&lt;br /&gt;who was removed - only to make life difficult for us developers.&lt;br /&gt;This is by my experience NOT the case when upgrading from .NET 2.0 to 3.5. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;I have been running a production environment of Sitecore in .NET 3.5 for a couple of weeks now (since we&lt;br /&gt;Microsoft Gold Partners got VS2008) – and there have been no problems so far.&lt;br /&gt;But why is that?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well:&lt;br /&gt;&lt;br /&gt;– There has been no change what so ever in the CLR runtime. It’s still 2.0. This was not the case coming from 1.1 to 2.0. MS had to update the CLR to include generics (parametric polymorphism)&lt;br /&gt;&lt;br /&gt;– The C# Compiler has changed, but the target of the compiler remains.&lt;br /&gt;&lt;br /&gt;– The library changes are purely additive. Meaning, that things you used in&lt;br /&gt;.NET 2.0 remain the same - and all the new features have been added in new&lt;br /&gt;.dlls, not changing the old ones.&lt;br /&gt;&lt;br /&gt;So - Happy coding using C# 3.0 for Sitecore.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To finnish of, lets reflect on the different way to bind children of an Item to a repeater control in Sitecore:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Wich one do you like the most ?)&lt;br /&gt;&lt;br /&gt; &lt;span style="color:green;"&gt;//The sitecore way&lt;/span&gt;&lt;/p&gt;&lt;div style="BACKGROUND: white;font-family:Consolas;font-size:10pt;color:black;"   &gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;br /&gt; childrenRepeater.DataSource = Context.Database.SelectItems(&lt;span style="color:#a31515;"&gt;"/sitecore/content/home/*[@@templatename='DisplayBox']"&lt;/span&gt;);&lt;/p&gt;&lt;p style="MARGIN: 0px"&gt;&lt;br /&gt; &lt;span style="color:green;"&gt;//C# 1.0 way, using a standard foreach loop&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;br /&gt; &lt;span style="color:#2b91af;"&gt;ArrayList&lt;/span&gt; list = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArrayList&lt;/span&gt;();&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Item&lt;/span&gt; item &lt;span style="color:blue;"&gt;in&lt;/span&gt; Sitecore.&lt;span style="color:#2b91af;"&gt;Context&lt;/span&gt;.Item.Children) {&lt;br /&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (item.TemplateName == &lt;span style="color:#a31515;"&gt;"DisplayBox"&lt;/span&gt;)&lt;br /&gt;   list.Add(item);&lt;br /&gt; }&lt;br /&gt; childrenRepeater.DataSource = list;&lt;/p&gt;&lt;p style="MARGIN: 0px"&gt;&lt;br /&gt; &lt;span style="color:green;"&gt;//C# 2.0 way, using the iterator pattern (yield statement),and anonomouse delegate&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0px"&gt;&lt;br /&gt; childrenrepeater.DataSource = &lt;span style="color:blue;"&gt;delegate&lt;/span&gt; {&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;br /&gt; &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;Item&lt;/span&gt; child &lt;span style="color:blue;"&gt;in&lt;/span&gt; Sitecore.&lt;span style="color:#2b91af;"&gt;Context&lt;/span&gt;.Item.Children) {&lt;br /&gt;         &lt;span style="color:blue;"&gt;if&lt;/span&gt; (child.TemplateName == &lt;span style="color:#a31515;"&gt;"DisplayBox"&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:blue;"&gt;            yield&lt;/span&gt; &lt;span style="color:blue;"&gt;return&lt;/span&gt; child;&lt;br /&gt;         }&lt;br /&gt;     };&lt;/p&gt;&lt;p style="MARGIN: 0px"&gt;&lt;br /&gt; &lt;span style="color:green;"&gt;//C# 3.0 way using the query syntax&lt;/span&gt;&lt;br /&gt;  childrenRepeater.DataSource = &lt;span style="color:blue;"&gt;from&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Item&lt;/span&gt; child &lt;span style="color:blue;"&gt;in&lt;/span&gt; Sitecore.&lt;span style="color:#2b91af;"&gt;Context&lt;/span&gt;.Item.Children&lt;br /&gt;                                                          &lt;span style="color:blue;"&gt;where&lt;/span&gt; child.TemplateName ==&lt;span style="color:#a31515;"&gt;"DisplayBox"&lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0px"&gt;&lt;span style="color:blue;"&gt;                                                          select&lt;/span&gt; child;&lt;/p&gt;&lt;br /&gt;&lt;p style="MARGIN: 0px"&gt;&lt;br /&gt;childrenRepeater.DataBind();&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;!--EndFragment--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-4360695785467376006?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/4360695785467376006/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=4360695785467376006' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/4360695785467376006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/4360695785467376006'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2007/11/sitecore-on-net-35.html' title='Sitecore on .NET 3.5'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-8321357854041107432</id><published>2007-11-29T12:19:00.002+01:00</published><updated>2008-11-23T15:45:46.722+01:00</updated><title type='text'>MailMonitor Sitecore Edition</title><content type='html'>I have been working on a product called Mail Monitor for years now. It is my pet project and has been for the last 3-4 years or so.&lt;br /&gt;&lt;br /&gt;Mail Monitor is an E-mail /SMS campaign tool written in C# hosted on ASP.NET and uses all the cool stuff released from Microsoft within the last years. (Except Silverlight, for now). It is a tool written by a super nerd (me) and is therefore highly extendable using Providers, web-services, Remoting and GoF patterns.&lt;br /&gt;&lt;br /&gt;But MailMonitor is not new – but the fact that I made a version for Sitecore is.&lt;br /&gt;&lt;br /&gt;For now check out &lt;a href="http://www.mailmonitor.dk/en/Sitecore%20Edition/Sitecore%20Edition/Screenshoots.aspx"&gt;these screenshots.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mailmonitor.dk/Sitecore%20Edition/Sitecore%20Edition/Screenshoots/Screenshoot%205.aspx"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://www.mailmonitor.dk/Sitecore%20Edition/Sitecore%20Edition/Screenshoots/~/media/Images/Mailmonitor/screenshoots/6.ashx" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-8321357854041107432?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mailmonitor.eu' title='MailMonitor Sitecore Edition'/><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/8321357854041107432/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=8321357854041107432' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/8321357854041107432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/8321357854041107432'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2007/11/mailmonitor-sitecore-edition.html' title='MailMonitor Sitecore Edition'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-1156771479878857519</id><published>2007-04-29T16:02:00.000+02:00</published><updated>2007-04-29T16:17:47.193+02:00</updated><title type='text'>.NET Remoting Removed from Sitecore</title><content type='html'>Some time ago I &lt;a href="http://runithomsen.blogspot.com/2006/04/net-remoting-in-sitecore.html"&gt;blogged about how Sitecore would include .NET Remoting&lt;/a&gt;, a feature that would make Sitecore more scalable and flexible.&lt;br /&gt;&lt;br /&gt;Introducing Remoting support was a fundament for creating integration to Sitecore from applications that would not be hosted on the same process as the CMS – a scenario that is very likely in the enterprise. It would also open up the possibility of creating custom tools that could be run from any machine not running Sitecore, even supporting the creation of a Windows Power Shell client.&lt;br /&gt;&lt;br /&gt;In essence, the only big different was the all classes in Sitecore.Kernel ultimately would implement MarshallByRefObject something that does not have any impact on the performance of the system, the rest was configuration. It means that supporting .NET Remoting is nearly effortless and free, whereas the benefits are great and powerful.&lt;br /&gt;&lt;br /&gt;I just realized, to my great surprise, that none of the classes that used to implement MarshallByRefObject during the Beta period of Sitecore 5.3 still do.&lt;br /&gt;I simply do not understand why Sitecore made this change, and would love to hear their input on this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-1156771479878857519?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/1156771479878857519/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=1156771479878857519' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/1156771479878857519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/1156771479878857519'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2007/04/net-remoting-removed-from-sitecore.html' title='.NET Remoting Removed from Sitecore'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-3144996591348661744</id><published>2007-01-14T12:55:00.000+01:00</published><updated>2007-01-14T13:06:34.943+01:00</updated><title type='text'>Using the ObjectDataSource with Singleton and/or Interface instances</title><content type='html'>&lt;p&gt;&lt;span&gt;When using Visual Studio 2005 to configure the ObjectDataSource, you will only be presented the option to bind against classes that implement the class System.Web.UI.WebControls.ObjectDataSource. The ObjectDataSource will pr. default create its own instance of your ObjectDataSource class using reflection and use this that instance to retrieve objects that are to be bounded to you data control (for example the GridView).&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span&gt;As a consultant I often see developers having their own data retrieval classes, but when they want to use them in an ObjectDataSource, the class is wrapped in another class implementing the System.Web.UI.WebControls.ObjectDataSource only to satisfy Visual Studio. This leads to twice the complexity – and replication of code. The technique cowered in this blog post might be trivial to some, but I believe that the point cannot be made clear enough. &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span&gt;A better approach is to configure the ObjectDataSource tag to make use of the already present data retrieval class and tell the ObjectDataSource to use exact the instance of you class that you want it to use. This can be necessary if you have decided to only expose interfaces to you client, or if you data access class is implemented as a GoF Singleton or Factory design pattern (thus not letting the ObjectDataSource create an instance of your data retrieval class).&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas"&gt;asp&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas"&gt;ObjectDataSource&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: red"&gt;ID&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="_transactionData"&lt;/span&gt; &lt;span style="COLOR: red"&gt;runat&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="server"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;&lt;span style="COLOR: red"&gt;TypeName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="MailMonitorServer.Locator.ITransactionLocator"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;&lt;span style="COLOR: red"&gt;DataObjectTypeName&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="LinkTrackerServer.ITransaction"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;&lt;span style="COLOR: red"&gt;SelectMethod&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="Find"&lt;/span&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;&lt;span style="COLOR: red"&gt;OnObjectCreating&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ObjectDataSource_ObjectCreating"&lt;/span&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;&lt;span style="COLOR: red"&gt;OnSelecting&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="ObjectDataSource_Selecting"&lt;/span&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;&lt;span style="COLOR: red"&gt;EnableCaching&lt;/span&gt;&lt;span style="COLOR: blue"&gt;="false"&lt;/span&gt; &lt;span style="COLOR: blue"&gt;&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;asp&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ObjectDataSource&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span&gt;This code shows how I use the ITransactionLocator to locate transactions. The thing to notice here is that the ITransactionLocator (&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;TypeName&lt;/span&gt; attribute of the &lt;span style="FONT-SIZE: 10pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ObjectDataSource&lt;/span&gt;) is in fact an interface (we cannot create instances of it from the client application) and the only way of getting an instance of this interface is through a Singleton pattern (more about that later). &lt;/p&gt;&lt;br /&gt;&lt;p&gt;The &lt;span style="FONT-SIZE: 10pt; COLOR: red; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;DataObjectTypeName&lt;/span&gt; defines that the type of the objects that are returned by the &lt;span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ITransactionLocator&lt;/span&gt; are of type &lt;span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ITransaction&lt;/span&gt;. In order to instruct the &lt;span style="FONT-SIZE: 10pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ObjectDataSource&lt;/span&gt; to use exactly your instance of the &lt;span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ITransactionLocator&lt;/span&gt;&lt;span&gt;, and therefore not use reflection to create its own instance, I hook into the &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;OnObjectCreating&lt;/span&gt; event. &lt;/p&gt;&lt;br /&gt;&lt;p style="LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;protected&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ObjectDataSource_ObjectCreating(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #2b91af; FONT-FAMILY: Consolas"&gt;ObjectDataSourceEventArgs&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt; e) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;e.ObjectInstance = &lt;span style="COLOR: #2b91af"&gt;InstanceHelper&lt;/span&gt;.Instance.TransactionLocator;&lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Here I assign the singleton instance of my locator class to the arguments &lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ObjectInstance &lt;/span&gt;property. This way the &lt;span style="FONT-SIZE: 10pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ObjectDataSource&lt;/span&gt; uses only this instance. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;In this case the &lt;span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ITransactionLocator&lt;/span&gt;’s Find method needs a special parameter (not covered by the standard &amp;lt;selectparameter&amp;gt; tags. To customize the parameter sent to the Find method I hook into the &lt;span style="FONT-SIZE: 10pt; COLOR: red; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;OnSelecting&lt;/span&gt; event. &lt;/p&gt;&lt;br /&gt;&lt;p style="LINE-HEIGHT: normal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;&lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; ObjectDataSource_Selecting(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: #2b91af"&gt;ObjectDataSourceSelectingEventArgs&lt;/span&gt; e) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #2b91af; FONT-FAMILY: Consolas"&gt;IDealer&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt; dealer = (&lt;span style="COLOR: #2b91af"&gt;IDealer&lt;/span&gt;) Session[&lt;span style="COLOR: #a31515"&gt;"dealer"&lt;/span&gt;];&lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.InputParameters.Add(&lt;span style="COLOR: #a31515"&gt;"account"&lt;/span&gt;, dealer.Account);&lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In this manner I also have complete control of the parameters that are sent to my &lt;span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: Consolas"&gt;ITransactionLocator&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I hope this little code will give you a new idea of now flexible the ObjectDataSource implantation really&amp;nbsp;is. &lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-3144996591348661744?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/3144996591348661744/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=3144996591348661744' title='5 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/3144996591348661744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/3144996591348661744'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2007/01/using-objectdatasource-with-singleton.html' title='Using the ObjectDataSource with Singleton and/or Interface instances'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8835063.post-116351587326003290</id><published>2006-11-14T15:48:00.000+01:00</published><updated>2006-11-14T16:46:03.310+01:00</updated><title type='text'>Visual Studio 2005 Build Performance</title><content type='html'>I had some performance issues with my Visual Studio 2005, where one of my C# ASP.NET web sites simply took forever to build and compile. I knew that there was an issue in VS 2005 with large Visual Basic projects due to a compiler error in the Visual Basic compiler(&lt;a href="http://blogs.msdn.com/webdevtools/archive/2006/07/24/677180.aspx"&gt;http://blogs.msdn.com/webdevtools/archive/2006/07/24/677180.aspx&lt;/a&gt;) but I am not using VB!&lt;br /&gt;&lt;br /&gt;Then it hit me, ASP.NET web sites can run with both C# and VB code mixed so the Visual Basic compiler must run each time you build your website. To test this, I simply removed Visual Basic from my installation (seldom use it anyway) and bang ! – My website builds lightning fast again.&lt;br /&gt;&lt;br /&gt;The lesson learned is this:&lt;br /&gt;- Performance problems with compiling your website?&lt;br /&gt;- Remove Visual Basic from your Visual Studio installation! (or apply the MS hotfix)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-116351587326003290?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/116351587326003290/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=116351587326003290' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116351587326003290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116351587326003290'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/11/visual-studio-2005-build-performance.html' title='Visual Studio 2005 Build Performance'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-116349639959278789</id><published>2006-11-14T10:25:00.000+01:00</published><updated>2007-03-09T14:16:12.366+01:00</updated><title type='text'>Resume of a lecture</title><content type='html'>I attended Anders Hejlsberg’s guest lecture at ITU Copenhagen last Friday and want to share with all of you the information he revealed.&lt;br /&gt;&lt;br /&gt;First of all – it was a great lecture. He showed how all the language features of C# 3.0 together made LINQ possible and explained how they implemented LINQ using every one of these new language features. I must say that C# 3.0 is innovation on a high level, surely a something I will be waiting for with anticipation.&lt;br /&gt;&lt;br /&gt;Besides from a great lecture, Anders revealed some information I want to share with you. (I hope MS don’t mind)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Concurrent Programming&lt;/strong&gt;&lt;br /&gt;The next step, after the release of C# 3.0 and LINQ – the language team will probably focus on concurrent programming. Anders believes that the available constructs for concurrent programming simply are to complex for the average programmer (Threads and so fourth) Therefore they will look at how they can improve the runtime and/or the language to better support concurrent programming, making it easier for developers to take advantage of multiple CPU’s that are getting more and more common in standard PC.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Release of C# 3.0 and LINQ&lt;/strong&gt;&lt;br /&gt;Anders revealed that the language team currently is improving some details of the compiler for C# 3.0 and we (the general public) will have a beta version of the next Visual Studio codename “Orcas” in about six months. He also ensured that there will be no more CTP – only Betas from now on.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;UPDATE&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;2007-03-09&lt;/span&gt;&lt;br /&gt;-----&lt;br /&gt;Seams that Anders Hejlsberg was wrong :-)Last week a new CTP (March CTP) was released after all. I wonder if the Beta still will be available six months after the lecture ?&lt;br /&gt;------------&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Last note&lt;/strong&gt;&lt;br /&gt;There will finally be a Set collection implementation available in Orcas. Jubii.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-116349639959278789?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/116349639959278789/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=116349639959278789' title='3 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116349639959278789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116349639959278789'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/11/resume-of-lecture.html' title='Resume of a lecture'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-116228624867705594</id><published>2006-10-31T10:01:00.000+01:00</published><updated>2006-10-31T10:18:57.373+01:00</updated><title type='text'>Anders Hejlsberg in Copenhagen (IT University)</title><content type='html'>I just learned from my former professor (Peter Sestoft) that Anders Hejlsberg will host a guest lecture at ITU, Copenhagen on November 10th at 14:00 hours.&lt;br /&gt;&lt;br /&gt;As you probably already know, Anders is the man behind C# and this lecture will contain a walkthrough of the new language features of C# 3.0 as well as his reasons for including these language features in this future release of C#.&lt;br /&gt;&lt;br /&gt;C# 3.0 will include really cool features like:&lt;br /&gt;- Implicitly typed local variable declaration: (for example var i = 42)&lt;br /&gt;- Extension methods (the possibility to extend existing types with additional methods)&lt;br /&gt;- Lambda expressions (cool SML like syntax for methods: x=&gt; x + 42 )&lt;br /&gt;- Greater type inference&lt;br /&gt;- Object and collection initializers ( shorter syntax for creating instances)&lt;br /&gt;- Anonymous types (like: new{Name = “Runi”, Language=”C sharp”})&lt;br /&gt;- Implicity types arrays&lt;br /&gt;- And the LINQ (declarative type safe access to query relational and hieratical data)&lt;br /&gt;&lt;br /&gt;To register for this FREE event, register here:&lt;br /&gt;&lt;a href="http://www.microsoft.dk/MSDN/Hejlsberg@ITU"&gt;http://www.microsoft.dk/MSDN/Hejlsberg@ITU&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will surely be there - see you all.&lt;br /&gt;&lt;br /&gt;/Runi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-116228624867705594?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/116228624867705594/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=116228624867705594' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116228624867705594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116228624867705594'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/10/anders-hejlsberg-in-copenhagen-it.html' title='Anders Hejlsberg in Copenhagen (IT University)'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-116192858932588466</id><published>2006-10-27T07:55:00.000+02:00</published><updated>2006-10-27T07:56:30.060+02:00</updated><title type='text'>Sitecore Instructur at last</title><content type='html'>I have yesterday reached the level of higher existence (or competence) - Sitecore V5 Certified Instructor, Level 2.&lt;br /&gt;&lt;br /&gt;I just completed my first instruction in the Sitecore API course. It was actually quite giving and interesting to teach Sitecore on a lower level, surely something I want to do again. &lt;br /&gt;&lt;br /&gt;Actually, if everything goes well, my next instruction session will be in Holland sometime late next month.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-116192858932588466?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/116192858932588466/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=116192858932588466' title='5 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116192858932588466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116192858932588466'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/10/sitecore-instructur-at-last.html' title='Sitecore Instructur at last'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8835063.post-116178031770355504</id><published>2006-10-25T14:43:00.000+02:00</published><updated>2006-10-25T14:52:58.630+02:00</updated><title type='text'>Dont trust your debugger</title><content type='html'>&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="COLOR: blue"&gt;&lt;font face=Verdana color=#000000&gt;I just waisted a couple of hours because of a strange behaviour in the Visual Studio debugger. &lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="COLOR: blue"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;Consider the following code: &lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;/font&gt;object&lt;/span&gt; obj = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; String('a',1); &lt;span style="COLOR: green"&gt;//"a" &lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; str = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; String('a',1); &lt;span style="COLOR: green"&gt;//"a" &lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;Console.Out.WriteLine(obj == str); &lt;span style="COLOR: green"&gt;//ln1 &lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;Console.Out.WriteLine(str == obj); &lt;span style="COLOR: green"&gt;//ln2&lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;Console.Out.WriteLine((&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)obj == str);&lt;span style="COLOR: green"&gt;//ln3 &lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;Console.Out.WriteLine(str ==(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;)obj); &lt;span style="COLOR: green"&gt;//ln4&lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;Console.Out.WriteLine(obj.Equals(str)); &lt;span style="COLOR: green"&gt;//ln5&lt;br&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;Console.Out.WriteLine(str.Equals(obj)); &lt;span style="COLOR: green"&gt;//ln6&lt;br&gt;&lt;br&gt;&lt;font face=Verdana color=#000000&gt;Now, add breakpoints in Visulal Studio on line 1 to 6 - and make the debugger evaluate the expression before it is printet to the console. &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="COLOR: green"&gt;&lt;font face=Verdana color=#000000&gt;What would you (the debugger) expect the output to be? The Visual Studio Debugger says: &lt;br&gt;true &lt;br&gt;true &lt;br&gt;true &lt;br&gt;true &lt;br&gt;true &lt;br&gt;true &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="COLOR: green"&gt;&lt;font face=Verdana color=#000000&gt;This is however not the case. The actual output is: &lt;br&gt;false &lt;br&gt;false &lt;br&gt;true &lt;br&gt;true &lt;br&gt;true &lt;br&gt;true &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="COLOR: green"&gt;&lt;font face=Verdana color=#000000&gt;There is really nothing strange about the result. The == operator does not just call the Equals method blindly and virtually as one might expect. It is actually an operator that compares references unless overridden.&lt;br&gt;&lt;br&gt;By default the == operator compares for reference equality. So if == tests for reference equality, this would explain the behavior of the result of ln1 and ln2, but not ln 3 and 4. This is because the == operator has been overridden in the String class to call the Equals method, thus comparing the value of the string rather than its reference. (this explains ln 3 and 4). &lt;br&gt;&lt;br&gt;The runtime system determines which operator to call based on the runtime type (the type of the reference rather than the type of the instance). In ln 1 and 2 the == operator of the Object class is used, where in ln3 and ln4 the operator as defined in the String class is used.&lt;br&gt;&lt;br&gt;So much for the == operator. The strange thing however, is that the Visual Studio debugger does not seam to get this. (VS2003). I used a lot of time debugging an expression inside an 'if' statement, which evaluated to false (by the debugger) but the if - statement - body was entered anyway. Grrr – I’m a bit pissed at the debugger.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-116178031770355504?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/116178031770355504/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=116178031770355504' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116178031770355504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/116178031770355504'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/10/dont-trust-your-debugger.html' title='Dont trust your debugger'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-115702168682100030</id><published>2006-08-31T12:51:00.000+02:00</published><updated>2006-08-31T12:54:47.710+02:00</updated><title type='text'>Media Library Posts Removed</title><content type='html'>Sitecore has asked me to remove my Sitecore 5.3 Media Library Part 1 - 5 blog posts which gave a preview of the Media Library in Sitecore 5.3 beta because of changes in the final version. I will of course honor this request, whereas these posts no longer are available.  For info on Sitecore – contact Sitecore&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-115702168682100030?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/115702168682100030/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=115702168682100030' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/115702168682100030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/115702168682100030'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/08/media-library-posts-removed.html' title='Media Library Posts Removed'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-115701818665424226</id><published>2006-08-31T11:34:00.000+02:00</published><updated>2006-08-31T11:56:27.166+02:00</updated><title type='text'>A Sitecore Core Developer goes solo</title><content type='html'>I made a decision a couple of months ago of going back to my old discipline of software consulting. This means that I have resigned my position at Sitecore as a Core Developer and QA manager, and have created a Software Consultancy firm called “Delegate ApS” (I know, quite C#’ish)&lt;br /&gt;&lt;br /&gt;My decision has been a hard one and has nothing to do with me not being happy with working on this amazing product. I simply missed the kick of being around real customers and following projects through.&lt;br /&gt;&lt;br /&gt;During the time of employment at Sitecore I have learned allot of hardcore stuff. Specially working with Ole and Jacob (Core Developers and innovators of Sitecore) has been extremely giving. Before working at Sitecore, I was a consultant and have therefore worked with allot of developers through the years. Without comparison, the guys at Sitecore are the most competent. I will truly miss the high level of abstraction there guys are able to discuss architecture on.&lt;br /&gt;&lt;br /&gt;However, this will not be the end of my work with Sitecore. Sitecore will make sure that I become a Sitecore Certified Trainer as soon as possible and I have decided that my new firm (Delegate ApS ) is to become a certified Sitecore Partner within a month or so. This means that I will finally sit on the other end of the table and experience actually working with the product, instead of creating the product.&lt;br /&gt;&lt;br /&gt;All the luck in the world to Sitecore here at the end of my voyage as an Sitecore employee.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-115701818665424226?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/115701818665424226/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=115701818665424226' title='4 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/115701818665424226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/115701818665424226'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/08/sitecore-core-developer-goes-solo.html' title='A Sitecore Core Developer goes solo'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8835063.post-114657030919441789</id><published>2006-05-02T13:41:00.000+02:00</published><updated>2006-05-02T13:47:52.490+02:00</updated><title type='text'>InPlaceEditExtender for April CTP release of ATLAS</title><content type='html'>Nikhil Kothari created a fine ATLAS control named InPlaceEditExtender. The control does not work on the April CTP of ATLAS, so I modified the javascript to comply with the April CTP release, as well as added some support for dropdowns. &lt;br/&gt;Download the control from &lt;a href="http://www.nikhilk.net/AtlasInPlaceEditSample.aspx"&gt;Nikhil's blog&lt;/a&gt;, and replace the javascript with the following javascript and you will have the InPlaceEditExtender control for April CTP:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;p style="margin: 0px;"&gt;Type.registerNamespace('nStuff.Samples.InPlaceEdit');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;nStuff.Samples.InPlaceEdit.InPlaceEditBehavior = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; nStuff.Samples.InPlaceEdit.InPlaceEditBehavior.initializeBase(&lt;span style="color: blue;"&gt;this&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _labelCssClass;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _labelHoverCssClass;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _labelElement;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _isEditing = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _isInputControl = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _textBoxBlurHandler;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _labelFocusHandler;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _labelMouseOverHandler;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _labelMouseOutHandler;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; _validatedHandler;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.get_isEditing = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; _isEditing;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.get_labelCssClass = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; _labelCssClass;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.set_labelCssClass = &lt;span style="color: blue;"&gt;function&lt;/span&gt;(value) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelCssClass = value;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.get_labelHoverCssClass = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; _labelHoverCssClass;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.set_labelHoverCssClass = &lt;span style="color: blue;"&gt;function&lt;/span&gt;(value) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelHoverCssClass = value;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.beginEdit = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_isEditing) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; textBoxElement = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.control.element;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; textBoxElement.style.display = '';&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.style.display = 'none';&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt;(!textBoxElement.disabled)&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; textBoxElement.focus();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _isEditing = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.raisePropertyChanged('isEditing');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.dispose = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_labelElement) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.detachEvent('onfocus', _labelFocusHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.detachEvent('onmouseover', _labelMouseOverHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.detachEvent('onmouseout', _labelMouseOutHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelFocusHandler = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelMouseOverHandler = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelMouseOutHandler = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_textBoxBlurHandler) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; textBoxElement = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.control.element;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; textBoxElement.detachEvent('onblur', _textBoxBlurHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _textBoxBlurHandler = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_validatedHandler) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.control.validated.remove(_validatedHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _validatedHandler = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nStuff.Samples.InPlaceEdit.InPlaceEditBehavior.callBaseMethod(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, 'dispose');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.endEdit = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!_isEditing) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_isInputControl &amp;amp;&amp;amp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.control.get_isInvalid()) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; textBoxElement = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.control.element;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.innerHTML = textBoxElement.value;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.style.display = 'block';&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; textBoxElement.style.display = 'none';&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _isEditing = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.raisePropertyChanged('isEditing');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.getDescriptor = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; td = nStuff.Samples.InPlaceEdit.InPlaceEditBehavior.callBaseMethod(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, 'getDescriptor');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; td.addProperty('isEditing', Boolean, &lt;span style="color: green;"&gt;/* readOnly */&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; td.addProperty('labelCssClass', String);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; td.addProperty('labelHoverCssClass', String);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; td.addMethod('beginEdit');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; td.addMethod('endEdit');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; td;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.initialize = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nStuff.Samples.InPlaceEdit.InPlaceEditBehavior.callBaseMethod(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, 'initialize');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement = document.createElement('LABEL');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; textBoxElement = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.control.element;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; textBoxBounds = Sys.UI.Control.getBounds(textBoxElement);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; containerElement = document.createElement('SPAN');&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; textBoxElement.parentNode.insertBefore(containerElement, textBoxElement);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; containerElement.appendChild(textBoxElement);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; containerElement.appendChild(_labelElement);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; textBoxElement.style.display = 'none';&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt;(textBoxElement.tagName == 'SELECT')&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.innerHTML= textBoxElement.options[textBoxElement.selectedIndex].text;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.innerHTML = textBoxElement.value;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.tabIndex = textBoxElement.tabIndex;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.className = _labelCssClass;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.style.display = 'block';&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.style.width = textBoxBounds.width + 'px';&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.style.height = textBoxBounds.height + 'px';&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _textBoxBlurHandler = Function.createDelegate(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onTextBoxBlur);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelFocusHandler = Function.createDelegate(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onLabelFocus);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelMouseOverHandler = Function.createDelegate(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onLabelMouseOver);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelMouseOutHandler = Function.createDelegate(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onLabelMouseOut);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; textBoxElement.attachEvent('onblur', _textBoxBlurHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Sys.Runtime.get_hostType() == Sys.HostType.InternetExploreJ) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.attachEvent('onfocus', _labelFocusHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt; {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.attachEvent('onclick', _labelFocusHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.attachEvent('onmouseover', _labelMouseOverHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _labelElement.attachEvent('onmouseout', _labelMouseOutHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Sys.UI.InputControl.isInstanceOfType(&lt;span style="color: blue;"&gt;this&lt;/span&gt;.control)) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _isInputControl = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _validatedHandler = Function.createDelegate(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onValidated);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.control.validated.add(_validatedHandler);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onLabelFocus = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_labelHoverCssClass &amp;amp;&amp;amp; _labelHoverCssClass.length) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sys.UI.Control.removeCssClass(_labelElement, _labelHoverCssClass);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.beginEdit();&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onLabelMouseOut = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_labelHoverCssClass &amp;amp;&amp;amp; _labelHoverCssClass.length) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sys.UI.Control.removeCssClass(_labelElement, _labelHoverCssClass);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onLabelMouseOver = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_labelHoverCssClass &amp;amp;&amp;amp; _labelHoverCssClass.length) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sys.UI.Control.addCssClass(_labelElement, _labelHoverCssClass);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onTextBoxBlur = &lt;span style="color: blue;"&gt;function&lt;/span&gt;() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.endEdit();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;._onValidated = &lt;span style="color: blue;"&gt;function&lt;/span&gt;(sender, eventArgs) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;this&lt;/span&gt;.control.get_isInvalid()) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.beginEdit();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;//Type.registerSealedClass('nStuff.Samples.InPlaceEdit.InPlaceEditBehavior', Sys.UI.Behavior);&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;nStuff.Samples.InPlaceEdit.InPlaceEditBehavior.registerSealedClass('nStuff.Samples.InPlaceEdit.InPlaceEditBehavior', Sys.UI.Behavior); &lt;/p&gt;&lt;p style="margin: 0px;"&gt;Sys.TypeDescriptor.addType('nk', 'inPlaceEdit', nStuff.Samples.InPlaceEdit.InPlaceEditBehavior);&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-114657030919441789?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/114657030919441789/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=114657030919441789' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/114657030919441789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/114657030919441789'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/05/inplaceeditextender-for-april-ctp.html' title='InPlaceEditExtender for April CTP release of ATLAS'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-114474185956899137</id><published>2006-04-11T09:45:00.000+02:00</published><updated>2006-04-11T09:51:50.803+02:00</updated><title type='text'>Sitecore performance</title><content type='html'>ScottGu posted a blog entry where he explains the danger of setting debug=true in production enviroments.&lt;br /&gt;&lt;br /&gt;The consequenses include:&lt;br /&gt;&lt;br /&gt;1) Compilation of pages takes longer&lt;br /&gt;2) Code executes slower&lt;br /&gt;3) More memory is used at runtime&lt;br /&gt;4) Scripts and images from WebResources.axd are not cached.&lt;br /&gt;&lt;br /&gt;This is specially Sitecore relevant.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;compilation debug="false"&gt;debug="false" is our friend&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;For details, see Scott's blog post.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-114474185956899137?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/114474185956899137/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=114474185956899137' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/114474185956899137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/114474185956899137'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/04/sitecore-performance.html' title='Sitecore performance'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-114443427846601838</id><published>2006-04-07T20:20:00.000+02:00</published><updated>2006-04-11T10:38:56.963+02:00</updated><title type='text'>.NET Remoting in Sitecore</title><content type='html'>The upcoming release of Sitecore (I guess it will be named Sitecore V5.3) will include a lot of new cool features. One of my favorite new features Im working on is remote invocation of Sitecore objects through .NET Remoting - giving you remote access to almost the entire Sitecore API (SitecoreKernel.dll) from any .NET client.&lt;br /&gt;&lt;br /&gt;Hopefully the Remoting features will be stable enough to make the final release.&lt;br /&gt;&lt;br /&gt;To enable your non-sitecore project (for example a Forms application) to use Sitecore Remoting, simply add a reference to Sitecore.Kernel.dll and you are good to go.&lt;br /&gt;&lt;br /&gt;Access to Sitecore API is achieved through the new Sitecore.Remoting namespace, where you will have to know about two new types: The RemoteFactory and RemotingClientConfigurator. Only one line of code is necessary in order to get a remote reference to Sitecore:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;p style="margin: 0px;"&gt;Sitecore.Remoting.RemotingClientConfigurator.Configure(_sitecoreurl, "admin", "");&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This snippet sets up the connection to Sitecore at a given url, with the username 'admin' and the empty password.&lt;br /&gt;&lt;br /&gt;To access Sitecore objects, simply use the new RemoteFactory object (a remoting enabled version of the Factory class):&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;p style="margin: 0px;"&gt;RemoteFactory factory = &lt;span style="color: blue;"&gt;new&lt;/span&gt; RemoteFactory();&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You now have access to all Sitecore objects. For example:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;p style="margin: 0px;"&gt;factory.GetDatabase("master").GetRootItem()&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This will get you the root item of the master database.&lt;br /&gt;&lt;br /&gt;In a later post, I will show how Sitecore can be managed and scripted through Microsofts new shell: MONAD using the new Remoting features.&lt;br /&gt;&lt;br /&gt;Hopefully other more or less useful programs will be developed as a result of the introduction of .NET Remoting in Sitecore. I talked to Alexy Rusakov (Sitecore developer from our Ukraine division) about creating an addin to the Google toolbar showing a list of items who's workflow step is assigned to a specific user.&lt;br /&gt;&lt;br /&gt;Only your imagination is the limit :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Regards&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-114443427846601838?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/114443427846601838/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=114443427846601838' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/114443427846601838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/114443427846601838'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/04/net-remoting-in-sitecore.html' title='.NET Remoting in Sitecore'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-114356735993990103</id><published>2006-03-28T19:24:00.001+02:00</published><updated>2006-03-28T20:34:06.016+02:00</updated><title type='text'>Atlas StopableTimer</title><content type='html'>I tried out the March CTP release of Microsofts new Ajax implementation &lt;a href="http://atlas.asp.net"&gt;Atlas&lt;/a&gt;. The library now has a "go live" license making it even more interesting for us real life programmers.&lt;br /&gt;&lt;br /&gt;The TimerControl included in Atlas March CTP has a problem. It cannot be stopped ones started. I guess that this is intentional (that’s what the &lt;a href="http://atlas.asp.net/docs/Server/Microsoft.Web.UI.Controls/TimerControl/P_Enabled.aspx"&gt;documentation &lt;/a&gt;says) but the fact remains. You often want to be able to update a page, only while some task is run on the server.&lt;br /&gt;&lt;br /&gt;A user on the Atlas forum named Rama Krishna (that’s his username) came up with a clean and great solution to create a stopable timer control (see the post &lt;a href="http://forums.asp.net/thread/1239938.aspx"&gt;here&lt;/a&gt;). However, the posted control only worked on the January CTP release.&lt;br /&gt;&lt;br /&gt;I took his control and modified and updated it for the March CTP release (All credit to Rama).&lt;br /&gt;&lt;br /&gt;The control emits a client-side timer control (xml) and assigns an id to it. (The base TimerControl does not). Then a small piece of java script is registered to handle enabling and disabling the timer at startup.&lt;br /&gt;&lt;br /&gt;First put the following in the App_Code folder:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; Microsoft.Web.UI.Controls;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; CustomControls {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; StopableTimer : TimerControl {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; StopableTimer() {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnPreRender(EventArgs e) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnPreRender(e);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Page.IsPostBack) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Page.ClientScript.RegisterStartupScript(&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Page.GetType(), "TimerStop",&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "Sys.Application.findObject('" + &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; UniqueID + &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "').set_enabled(" + &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (Enabled ? "true" : "false") + &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ");"&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; , &lt;span style="color: blue;"&gt;true&lt;/span&gt;); &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; RenderScript(Microsoft.Web.Script.ScriptTextWriter writer) {&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteStartElement("timer");&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteAttributeString("id", UniqueID);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteAttributeString("interval", &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Interval.ToString(System.Globalization.CultureInfo.InvariantCulture));&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteAttributeString("enabled", Enabled.ToString());&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteStartElement("tick");&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteStartElement("postBack");&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteAttributeString("target", UniqueID);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteAttributeString("eventArgument", &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty);&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteEndElement();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteEndElement();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; writer.WriteEndElement();&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;When you have created the control, you only need to register it on you aspx page - and use it as you would use a TimerControl&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="background: yellow;"&gt;&amp;lt;%@ Register Assembly="App_Code" Namespace="CustomControls" TagPrefix="AppCode" %&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-114356735993990103?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/114356735993990103/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=114356735993990103' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/114356735993990103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/114356735993990103'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2006/03/atlas-stopabletimer.html' title='Atlas StopableTimer'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-113594036563967905</id><published>2005-12-30T11:58:00.000+01:00</published><updated>2005-12-30T11:59:25.650+01:00</updated><title type='text'>Sitecore ASP.NET 2.0 final version released</title><content type='html'>We will release Sitecore version 5.2.0.2  today. This is the ASP.NET 2.0 version of Sitecore version 5.1.1.8&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-113594036563967905?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/113594036563967905/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=113594036563967905' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113594036563967905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113594036563967905'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2005/12/sitecore-aspnet-20-final-version.html' title='Sitecore ASP.NET 2.0 final version released'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-113525270760577657</id><published>2005-12-22T12:58:00.000+01:00</published><updated>2005-12-22T13:00:26.980+01:00</updated><title type='text'>Sitecore Portal</title><content type='html'>This post is a draft of how to use the build in portal functionality in Sitecore V5.1.1.x. Please provide input on its content so that this post can become an article in time.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Using the ”Sitecore Today” portal in you own applications.&lt;/strong&gt;&lt;br /&gt;Sitecore has build in a simple portal framework used in some applications in the Sitecore GUI client. It is possible to use this framework in your own applications by the means of creating some XML (XAML like) controls and some code. This is an instruction on how to get started.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1) Create the Portal Layout&lt;/strong&gt;&lt;br /&gt;The first thing you need to do is to create the layout that defines the portal. To create such layout, start the layout studio and click File -&amp;gt; new -&amp;gt; XML Layout. The “Create XML Layout wizard” appears.&lt;br /&gt;&lt;br /&gt;Press next and name the layout what you like. For this example the layout is called “Portal Demo”. Press next two times to place the layout in the layouts folder, and finish the wizard.&lt;br /&gt;&lt;br /&gt;The layout studio opens the newly created xml layout and displays its content in a window. Delete the content of the editor, and replace it with the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;control xmlns:def="Definition" xmlns="http://schemas.sitecore.net/Visual-Studio-Intellisense"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;PortalDemo&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;FormPage Scroll="yes"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;CodeBeside Type="Example.PortalDemo,MyDll"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;Stylesheet Src="/sitecore/portal/tech/tech.css"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;Portal ID="PortalDemo" DataSource="/sitecore/content/Home/PortalDemo/Portal" RefreshPageOnRedraw="true"&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;Border Class="Portal"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;GridPanel Columns="3" Width="100%" Height="100%" CellSpacing="4" CellPadding="4"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;PortalZone ID="Left" GridPanel.Width="33%" GridPanel.Class="PortalColumn" GridPanel.VAlign="top" GridPanel.Height="100%"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;PortalZone ID="Mid" GridPanel.Width="33%" GridPanel.Class="PortalColumn" GridPanel.VAlign="top"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;PortalZone ID="Right" GridPanel.Width="33%" GridPanel.Class="PortalColumn" GridPanel.VAlign="top"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;/GridPanel&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;/Border&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;/Portal&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;Frame ID="Sidebar" Width="6" Height="100%" Style="position:absolute; left:expression(parentNode.clientWidth-6); top:0"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;/FormPage&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;/PortalDemo&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;/control&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The fist element defines that this is a control and the second element &lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;PortalDemo&amp;gt; &lt;/span&gt;defines the name of the layout. The portal uses the FormPage &lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;FormPage Scroll="yes"&amp;gt; &lt;/span&gt;with scrolling and has a codeBeside class type of PortalDemo located in the dynamic linked library MyDll.&lt;br /&gt;The creation of the codeBeside type will be explained in the next step. The &lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;Stylesheet/&amp;gt; &lt;/span&gt;element points to the same style sheet that is used for the “Sitecore Today” application found in the Sitecore client, but can just as well be replaced by our own custom style sheet to achieve you own look and feel.&lt;br /&gt;&lt;br /&gt;The next element &lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;Portal&amp;gt; &lt;/span&gt;defines the actual portal and it defines where in the content tree its portlets (Sitecore items) are to be found. We will create these items shortly.&lt;br /&gt;&lt;br /&gt;The portal element defines the portalZones where portlets can be placed by Id. In this example we have defined tree zones named Left, Mid and Right.&lt;br /&gt;&lt;br /&gt;The last element &lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;Frame&amp;gt; &lt;/span&gt;defines a sidebar users can invoke to add and remove portlets to their portal.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2) Create the layout code beside class&lt;/strong&gt;&lt;br /&gt;As seen, the portal defines a code beside class, with the sole purpose of adding portlets to the sidebar.&lt;br /&gt;&lt;br /&gt;Create a new class Named PortalDemo in the namespace Example. The source should look like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;using System;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;using Sitecore;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;using Sitecore.Text;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;using Sitecore.Web.UI.HtmlControls;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;using Sitecore.Web.UI.Sheer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;namespace MyPortal {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;public class RuniPortal : BaseForm {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;protected Frame Sidebar;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;protected override void OnLoad(EventArgs e) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;base.OnLoad(e); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;if (!Sitecore.Context.ClientPage.IsEvent) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;UrlString url = new UrlString(UIUtil.GetUri("control:PortalSidebar"));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;url.Add("pid", "Sidebar");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;url.Add("pds", "/sitecore/content/Home/Portal sidebar");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;url.Add("pt", "/sitecore/content/Home/PortalDemo/Portal");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;url.Add("pn", "PortalDemo");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Sidebar.SourceUri = url.ToString();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The PortalSidebar control is used to contain portlets and requires some url parameters as setup. The first parameter defines the control to use, the second the id of the control, the third the location of the Sitecore items defining the sidebar and the fourth the path of the portal and the last the name of the portal.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3) Creating a portlet&lt;/strong&gt;&lt;br /&gt;Portlets can be created with any control, as long as the items that are defining it are based on the portlet template. However, to support moving and adding new portlets from the portlet itself, a special control must be created.&lt;br /&gt;&lt;br /&gt;To create a portlet which basically wraps the document control, create a new xmlcontrol from the layout studio and paste the following xml into it (same procedure as in step 1):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;control xmlns:def="Definition" xmlns="http://schemas.sitecore.net/Visual-Studio-Intellisense"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;DocumentPortlet ID="DocumentPortlet" def:inherits="DocumentPortletXmlControl,Sitecore.Client" &amp;gt; &amp;lt;!--The id is used for moving between columns--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;DefaultPortletWindow def:ID="Window" Header="Document" Icon="Applications/16x16/star_yellow.png"&amp;gt; &amp;lt;!-- The id is used for the context menu popup --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;Document def:ID="document"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;/DefaultPortletWindow&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;/DocumentPortlet&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&amp;lt;/control&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;The newly defined controls is called “DocumentPortlet” and uses the DefaultPortletWindow control to render the portlets surrounding frame, giving it support for moving it from portalzone to portalzone and showing and hiding it. This DocumentPortlet must also have a code beside file which we will create afterwards.&lt;br /&gt;&lt;br /&gt;Inside the DocumentPortlet, the Document control is used to render the item’s content. Now create the codebeside class:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;using System;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;using Sitecore.Web.UI.XmlControls;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;public class DocumentPortletXmlControl : XmlControl {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;protected XmlControl Window;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;protected override void OnLoad(EventArgs e) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;base.OnLoad(e);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;if (!Sitecore.Context.ClientPage.IsEvent) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Window.ID = ID + "_window";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a required step in order to make sure that the id of the control is valid.&lt;br /&gt;&lt;br /&gt;When this step is completed, it is time to create the Sitecore items to support the Portal, and the Portal sidebar.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4) Creating the Portal Items &lt;/strong&gt;&lt;br /&gt;Create a new Item in the content editor based on the Document template. The name of this item should be the same as defined in the PortalDemo layout created in previous step.&lt;br /&gt;&lt;br /&gt;Choose the PortalDemo as the default layout in the layout window in the content editor, and save it.&lt;br /&gt;&lt;br /&gt;As a child of the newly created PortalDemo item, create a new item based on the Portal template.&lt;br /&gt;&lt;br /&gt;Under the new item, create another item named “Test” based on the template portlet, and fill in the description, and ID. In the “Control name” field add the name of the portlet control we just created: “DocumentPortlet”. In the zone filed, write for example: “Right” to place the portlet in the portal zone named Right.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;5) Creating the sidebar Items&lt;/strong&gt;&lt;br /&gt;Create a new Item under the Home item named Portal sidebar. The Item must be based on the Portal template.&lt;br /&gt;&lt;br /&gt;Create a new Item under the “Portal sidebar” based on the Portlet template named “Configurator”. Give it the Item ID: “PortalConfiguratorPortlet” and the Name “PortalConfiguratorPortlet” In the Zone field write “DefaultZone” and in the Order field write “10”. Check the “Default” checkbox.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;6) Displaying the Portal&lt;/strong&gt;&lt;br /&gt;The portal should now be configured with one portlet, and can be seen in the client. Navigate to &lt;a href="http://yourserver/PortalDemo.aspx"&gt;http://yourserver/PortalDemo.aspx&lt;/a&gt; to display the newly created portal. You can invoke the sidebar by moving the mouse towards the right of the browser.&lt;br /&gt;&lt;br /&gt;Good luck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-113525270760577657?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/113525270760577657/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=113525270760577657' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113525270760577657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113525270760577657'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2005/12/sitecore-portal_22.html' title='Sitecore Portal'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-113284103640700265</id><published>2005-11-24T15:00:00.000+01:00</published><updated>2005-11-24T15:04:35.850+01:00</updated><title type='text'>Sitecore Database Installer Wars</title><content type='html'>I created a small tool some time ago called "Sitecore database Installer". It was created as a personal utility, but was release as a official tool for partner to use. &lt;br /&gt;&lt;br /&gt;Now I just learned that Anders Dreyer (http://sitecore.blogspirit.com/) created a enhansed version of my small widget. Good work ! - but now I have to make a eaven better version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-113284103640700265?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/113284103640700265/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=113284103640700265' title='3 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113284103640700265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113284103640700265'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2005/11/sitecore-database-installer-wars.html' title='Sitecore Database Installer Wars'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-113274191814379698</id><published>2005-11-23T11:26:00.000+01:00</published><updated>2005-11-23T11:31:58.153+01:00</updated><title type='text'>Sitecore ASP.NET 2.0 BETA released</title><content type='html'>We have just released a BETA version of Sitecore for asp.net 2.0. (Version 5.2.0.1) The release is a direct port of version 5.1.1.5 to asp.net 2.0, and the purpose of this BETA period is to find the best way of deploying Sitecore.&lt;br /&gt;&lt;br /&gt;So, please install and knock you self out using all the new features of asp.net 2.0. I would love to hear your comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-113274191814379698?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/113274191814379698/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=113274191814379698' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113274191814379698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113274191814379698'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2005/11/sitecore-aspnet-20-beta-released.html' title='Sitecore ASP.NET 2.0 BETA released'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-113041131404136775</id><published>2005-10-27T13:01:00.000+02:00</published><updated>2005-10-27T13:10:24.716+02:00</updated><title type='text'>ASP.NET 2.0 compiled version of Sitecore</title><content type='html'>I Guess the rumors about a RTM release of VS 2005 were false. However, I have now completed a fully functional build of Sitecore V5 for ASP.NET 2.0 based on the RC version of .VS2005.  &lt;br /&gt;&lt;br /&gt;I will probably ship the .NET 2.0 version to our test center in Ukraine tomorrow and a BETA release hopefully will be released soon after that. I am now confident (unofficially confident) that you Sitecore developers will be able to write C# 2.0 code for Sitecore on November 7th on at least a Beta version of Sitecore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-113041131404136775?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/113041131404136775/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=113041131404136775' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113041131404136775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/113041131404136775'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2005/10/aspnet-20-compiled-version-of-sitecore.html' title='ASP.NET 2.0 compiled version of Sitecore'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-112918963564605097</id><published>2005-10-13T09:39:00.000+02:00</published><updated>2005-10-13T09:47:15.650+02:00</updated><title type='text'>Releasedate for VS 2005</title><content type='html'>Ole found a blog where it states that the VS 2005 RTM (Release To Manufacturing) allready will be awailable for MSDN Universal Subscribers on the 15th of October  http://codebetter.com/blogs/jeffrey.palermo/archive/2005/10/11/132969.aspx&lt;br /&gt;&lt;br /&gt;And final release is on 7th of November http://www.eweek.com/article2/0,1895,1850408,00.asp&lt;br /&gt;&lt;br /&gt;This means that I was 10 days off in my previous blog post ... sorry.&lt;br /&gt;&lt;br /&gt;Guess I need to work harder on converting Sitecore to ASP.NET 2.0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-112918963564605097?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/112918963564605097/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=112918963564605097' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/112918963564605097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/112918963564605097'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2005/10/releasedate-for-vs-2005.html' title='Releasedate for VS 2005'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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-8835063.post-112842237020025050</id><published>2005-10-04T12:29:00.000+02:00</published><updated>2005-10-04T13:11:14.953+02:00</updated><title type='text'>Test of Sitecore V5 for ASP.NET 2.0</title><content type='html'>I used the last couple of days to make a test build of Sitecore for ASP.NET 2.0 and the results are looking very positive. The overall performance seams to have increased significantly and, of course, C#2.0 and VS2005 are a blast to work with. There are still some issues before a BETA release can be build including some cryptographic problems. However, it should be possible to have a working final release of Sitecore V5 for ASP.NET 2.0 at the same date as Microsoft releases .NET 2.0 (think it was on November the 14th.) and a BETA version mid October. These estimates are of course &lt;strong&gt;not official&lt;/strong&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8835063-112842237020025050?l=runithomsen.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://runithomsen.blogspot.com/feeds/112842237020025050/comments/default' title='Kommentarer til indlægget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8835063&amp;postID=112842237020025050' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/112842237020025050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8835063/posts/default/112842237020025050'/><link rel='alternate' type='text/html' href='http://runithomsen.blogspot.com/2005/10/test-of-sitecore-v5-for-aspnet-20.html' title='Test of Sitecore V5 for ASP.NET 2.0'/><author><name>Runi Thomsen</name><uri>http://www.blogger.com/profile/10425985159804355124</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></feed>
