<?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-6221232065808883107</id><updated>2011-04-22T03:26:41.431+01:00</updated><title type='text'>Sitecore tweaks &amp; tricks</title><subtitle type='html'>In this blog I will describe the tweaks &amp; tricks that I have stumbled upon developing Sitecore solutions</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</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>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6221232065808883107.post-4077865750574157108</id><published>2008-02-26T10:23:00.002+01:00</published><updated>2008-02-26T10:35:14.766+01:00</updated><title type='text'>New times... new blog</title><content type='html'>Recently I was offered a new position in Pentia. The position was as "Core Technology Specialist" in a new department of Pentia (called The Core Team). I accepted and started my new work last week.&lt;br /&gt;The department is responsible for several things stretching from technical presales to architecture to development of tools, that the developers in Pentia can use. As a part of these new task me and my coworker in the Core Team - Thomas Eldblom - decided to create a shared blog. Its placed here: &lt;a href="http://mcore.wordpress.com/"&gt;http://mcore.wordpress.com/&lt;/a&gt;&lt;br /&gt;The goal of this blog is to share our knowledge and findings about Sitecore to other co-workers in Pentia, but also externally to all other Sitecore users. The blog is going to hold our biased opinions on Sitecore, and not as much technical walkthroughs. Take a look...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6221232065808883107-4077865750574157108?l=sitecorejm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/4077865750574157108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6221232065808883107&amp;postID=4077865750574157108' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/4077865750574157108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/4077865750574157108'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/2008/02/new-times-new-blog.html' title='New times... new blog'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</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>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6221232065808883107.post-803049921877423314</id><published>2008-01-22T14:06:00.000+01:00</published><updated>2008-01-22T14:47:22.848+01:00</updated><title type='text'>Logs and performance</title><content type='html'>I was recently assigned to monitor and report on some issues with performance. I was told to log some information about how long different requests on pages took. Here I stumbled upon two things that I didn’t find all that well documented on SDN5.&lt;br /&gt;&lt;br /&gt;1. Logging with log4net. I needed a separate log file, as I didn’t want all my entries to mess up the standard log file.&lt;br /&gt;2. There are performance counters in Sitecore, but I didn’t know where I could find these.&lt;br /&gt;&lt;br /&gt;So I thought I’d just report my findings on my blog to the help of others.&lt;br /&gt;&lt;br /&gt;1:&lt;br /&gt;Creating a separate log in log4net is actually quite simple. Go to the log4net section in the web.config. Here you can add a new appender that writes to a separate file:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appender name="PerformanceFileAppender" type="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;file value="D:/MyPath/Data/logs/Performance.{date}.txt" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;filter type="log4net.Filter.LevelRangeFilter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;levelMin value="DEBUG"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;levelMax value="DEBUG"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;appendToFile value="true" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern value="%-21t %d %-5p %m%n" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/appender&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you look at the LevelRangeFilter, you’ll see, that you can specify a min and max level. There are different levels and you can specify which levels to write to the given logfile. The level ranges from DEBUG to FATAL. There are as default these levels: ALL, DEBUG, INFO, WARN, ERROR, FATAL.&lt;br /&gt;In this case I only want the DEBUG information written and keep that level out of the Sitecores log file. Therefore I changed the Sitecore appender to range from the level INFO to FATAL:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appender name="LogFileAppender" type="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;file value="D:/MyPath/Data/logs/log.{date}.txt" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;filter type="log4net.Filter.LevelRangeFilter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;levelMin value="INFO"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;levelMax value="FATAL"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;appendToFile value="true" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;conversionPattern value="%-21t %d %-5p %m%n" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/layout&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/appender&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I then altered the root element to include my appender and altered the level requirements to ALL:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;root&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;priority value="ALL" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;appender-ref ref="LogFileAppender" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;appender-ref ref="PerformanceFileAppender" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/root&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now I can write to my custom log file by using the ILog interface and use the method Debug:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;ILog perfLog = LogManager.GetLogger("PerformanceFileAppender");&lt;br /&gt;perfLog.Debug(”Hello world!”);&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can read more about it at &lt;a href="http://logging.apache.org/log4net/"&gt;log4nets page&lt;/a&gt;. Here you can also read about different types of appenders and much more.&lt;br /&gt;&lt;br /&gt;2:&lt;br /&gt;So now I had a log I could use for debugging. Now I just needed the performance counters. So I looked at the HttpRequestBegin pipeline. There I found a processor called StartMeasurements. Thanks to &lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;Lutz Roeder’s Reflector&lt;/a&gt; I found that Sitecore starts a timer and stores it like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Context.Items["SC_REQUEST_MEASUREMENT_TIMER"] = new HighResTimer(true);&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;And the requested URL like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Context.Items["SC_REQUEST_MEASUREMENT_URL"] = args.Context.Request.RawUrl;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now all I had to do, was to hook in on the httpRequestEnd pipeline and add my own processor that would log the time elapsed. So I added this just before the StopMeasurements processor:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&amp;lt;processor type="MyNameSpace.MeasurementLogger, MyNameSpace"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;I then created a new class and added the debug logging:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;  public class MeasurementLogger&lt;br /&gt;  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;#region private properties&lt;br /&gt;&amp;nbsp;&amp;nbsp;private static readonly ILog perfLog = LogManager.GetLogger("PerformanceFileAppender");&lt;br /&gt;&amp;nbsp;&amp;nbsp;#endregion&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public class MeasurementLogger&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#region private properties&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private static readonly ILog perfLog = LogManager.GetLogger("PerformanceFileAppender");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endregion&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void Process(HttpRequestArgs args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HighResTimer timer = Sitecore.Context.Items["SC_REQUEST_MEASUREMENT_TIMER"] as HighResTimer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string timeElapsed = timer.Elapsed().ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string requestedUrl = Sitecore.Context.Items["SC_REQUEST_MEASUREMENT_URL"] as string;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;perfLog.Debug("HTTPRequest time: " + timeElapsed + " Url: " + requestedUrl + " Domain: " + args.Context.Request.Url.Host);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And that’s it. Now you’ll write the elapsed time on all requests to the performance.{date}.txt log file.&lt;br /&gt;Some might see this as overkill, as you can use the stats.aspx or IIS log files etc., but none the less this gives an introduction using log4net as well as hooking into a pipeline.&lt;br /&gt;&lt;br /&gt;P.S.&lt;br /&gt;There will come more posts about relational data, I just haven’t finished them yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6221232065808883107-803049921877423314?l=sitecorejm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/803049921877423314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6221232065808883107&amp;postID=803049921877423314' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/803049921877423314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/803049921877423314'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/2008/01/logs-and-performance.html' title='Logs and performance'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</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>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6221232065808883107.post-8456954762223711076</id><published>2007-12-18T13:38:00.000+01:00</published><updated>2007-12-18T18:28:34.505+01:00</updated><title type='text'>Relational Data 1 - Indexing</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;All though a bit late (been quite busy), here is the first post about relational data.&lt;br /&gt;As I described you might want to do some relational operations on data structured as a hierarchy in Sitecore. The example was news which might need to be sorted and listed on the frontpage or similar, is the one I am going to address first.&lt;br /&gt;&lt;br /&gt;Most of the times when I stumble upon issues like this, I solve it with indexing. That is building a relational data set from the hierarchy. When working for clients, most of the times I have solved this issue using Ankiro. However Ankiro cost money, so I thought I would try it out with Lucene. Below you can see an example of how to do this.&lt;br /&gt;&lt;br /&gt;Please note that by default Lucene doesn’t index on publish, but by a scheduled task that as default runs every five minute. However it is possible to customize Lucene to index on the publish event.&lt;br /&gt;&lt;br /&gt;Well here it the technical description:&lt;br /&gt;First of all you need to create the index containing the data you want to use as relational data. This is done pretty easy in web.config. Further reading is available on SDN (&lt;/span&gt;&lt;a href="http://sdn5.sitecore.net/FAQ/API/Indexing%20a%20Database%20with%20Lucene,-d-,NET.aspx"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;http://sdn5.sitecore.net/FAQ/API/Indexing%20a%20Database%20with%20Lucene,-d-,NET.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Basically you define the index in the &amp;lt;indexes&amp;gt; &lt;indexes&gt;element : &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&amp;lt;index id="newsIndex" singleInstance="true" type="Sitecore.Data.Indexing.Index, Sitecore.Kernel"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;param desc="name"&amp;gt;$(id)&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;lt;index id="newsIndex" singleInstance="true" type="Sitecore.Data.Indexing.Index, Sitecore.Kernel"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;param desc="name"&amp;gt;$(id)&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;templates hint="list:AddTemplate"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Enter the id of your news template --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;template&amp;gt;{96479B71-2C0B-4729-8301-080145F28FA6}&amp;lt;/template&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/templates&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;fields hint="raw:AddField"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- add the fields you want in your index --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;field target="created"&amp;gt;__created&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;field target="updated"&amp;gt;__updated&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;field target="author"&amp;gt;__updated by&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;field target="published"&amp;gt;__published&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;field target="name"&amp;gt;@name&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;field target="id"&amp;gt;@id&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;field target="Title"&amp;gt;Title&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;field target="Abstract"&amp;gt;Abstract&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;field target="Release date"&amp;gt;Release date&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/fields&amp;gt;&lt;br /&gt;&amp;lt;/index&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;This defines the index. Now add it to the web database:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;database id="web" singleInstance="true" type="Sitecore.Data.Database, Sitecore.Kernel"&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;indexes hint="list:AddIndex"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;index path="indexes/index[@id='newsIndex']"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/indexes&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;You can now rebuild indexes for the web database through the Control Panel in Sitecore.&lt;br /&gt;&lt;br /&gt;Now that you have the index, you can do you relational operations. For instance you might want to sort by date. Here is some sample code to retrieve an arbitrary number of news items from the index sorted by the “Release date” field. (I don’t like to use the system fields __updated or __created as these might change when you upgrade or similar). &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public Document[] GetLatestNews(int numberOfNews)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Get the Lucene IndexSearcher&lt;br /&gt;&amp;nbsp;&amp;nbsp;Index newsIndex = Sitecore.Configuration.Factory.GetIndex("newsIndex");&lt;br /&gt;&amp;nbsp;&amp;nbsp;Database web = Sitecore.Configuration.Factory.GetDatabase("web");&lt;br /&gt;&amp;nbsp;&amp;nbsp;IndexSearcher searcher = newsIndex.GetSearcher(web);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//I want to sort by the release date&lt;br /&gt;&amp;nbsp;&amp;nbsp;Sort sort = new Sort("Release date",true);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//I want all documents that has the field Release date&lt;br /&gt;&amp;nbsp;&amp;nbsp;Query searchingxml = new WildcardQuery(new Term("Release date", "*"));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Get all the hits sorted&lt;br /&gt;&amp;nbsp;&amp;nbsp;Hits hits = searcher.Search(searchingxml, sort);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//How many documents should be returned&lt;br /&gt;&amp;nbsp;&amp;nbsp;int noOfNews = hits.Length() &gt; numberOfNews ? numberOfNews : hits.Length();&lt;br /&gt;&amp;nbsp;&amp;nbsp;Document[] docs = new Document[noOfNews];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;//Iterate over the hits and return the number of news I want as documents&lt;br /&gt;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; noOfNews; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;docs[i] = hits.Doc(i); &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;return docs; &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;This returns the latest news, which you can list in your spot or whatever you want to do.&lt;br /&gt;&lt;br /&gt;The advantages of using index’ is:&lt;br /&gt;You got the advantages of a hierarchy in the backend.&lt;br /&gt;The end user doesn’t feel or see any other technology then Sitecore.&lt;br /&gt;It is simple and easy to implement and maintain.&lt;br /&gt;&lt;br /&gt;The disadvantages of using index’ is:&lt;br /&gt;It is replicated data. This takes up more space and I often find problems with inconsistency between index’ and Sitecore data.&lt;br /&gt;You got the disadvantages of a hierarchy in the backend.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6221232065808883107-8456954762223711076?l=sitecorejm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/8456954762223711076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6221232065808883107&amp;postID=8456954762223711076' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/8456954762223711076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/8456954762223711076'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/2007/12/relational-data-1-indexing.html' title='Relational Data 1 - Indexing'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</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-6221232065808883107.post-788603493067611354</id><published>2007-09-30T21:30:00.000+01:00</published><updated>2007-09-30T21:44:03.228+01:00</updated><title type='text'>Relational data in Sitecore - Intro</title><content type='html'>Content and data in Sitecore are structured as a hierarchy. This gives a lot of advantages, but sometimes you got some relational data, that you fit into a Sitecore structure. This has some disadvantages. First of all the relational data might not be user friendly and intuitively structured, when saved in a Sitecore database. Secondly some operations that you need to perform on the data might be extremely slow, when structured as a hierarchy.&lt;br /&gt;&lt;br /&gt;A good example of this, is something I have done on almost every solution: News and news lists. This can be structured as a hierarchy in the backend, but often requires operations on the frontend, that only performs, when the data is in a table. Something that is very normal is a front page spot, which lists the X number of latest news of a special type. This would normally require you to iterate over all items in your content structure, which doesn’t perform unless your site consist of very few nodes.&lt;br /&gt;&lt;br /&gt;In a couple of posts on this blog, I will try and show some different solutions to the problem.&lt;br /&gt;&lt;br /&gt;Happy reading!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6221232065808883107-788603493067611354?l=sitecorejm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/788603493067611354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6221232065808883107&amp;postID=788603493067611354' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/788603493067611354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/788603493067611354'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/2007/09/relational-data-in-sitecore-intro.html' title='Relational data in Sitecore - Intro'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6221232065808883107.post-4024432010725392884</id><published>2007-09-12T08:59:00.000+01:00</published><updated>2007-09-12T09:10:57.519+01:00</updated><title type='text'>Getting an items rendering</title><content type='html'>Often you need to get the rendering(s) used to render a given item from a codebehind. You want to get the rendering, that the rendering engines uses. That means, that if there isn't a rendering on the item, you should look at the template and so forth.&lt;br /&gt;I spent some time figuring out, how this is done (I actually ended up asking Sitecore Support), so I thought I would just share it with you:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/*First you need the item you want the renderings from. In this case lets use the current Item&lt;/span&gt; */&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;Sitecore.Data.Items.Item item = Sitecore.Context.Item;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/*We also need the device, so we get the renderings attached to that. */&lt;br /&gt;Sitecore.Data.Items.DeviceItem device = Sitecore.Context.Device;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/*This is how you get the rendering */&lt;br /&gt;Sitecore.Layouts.RenderingReference[] renderings = item.Visualization.GetRenderings(device, true);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is actually pretty simple,which might be the reason for me not figuring it out. ;)&lt;br /&gt;As you now have an array of RenderingReference, you can look up the rendering by its ID or whatever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6221232065808883107-4024432010725392884?l=sitecorejm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/4024432010725392884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6221232065808883107&amp;postID=4024432010725392884' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/4024432010725392884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/4024432010725392884'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/2007/09/getting-items-rendering.html' title='Getting an items rendering'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</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-6221232065808883107.post-5786587504264596579</id><published>2007-07-23T22:23:00.000+01:00</published><updated>2007-07-23T22:43:19.637+01:00</updated><title type='text'>SQL restore/backup script</title><content type='html'>Well I haven't been active on this blog lately. The reason is that I have been working on Sitecore upgrades the last couple of months (well it feel like years), so I haven't stumbled upon any tweaks or tricks.&lt;br /&gt;One thing that has been handy though, is these SQL scripts for back up and restoring Sitecore databases. It seems one will be doing that alot during upgrades. They were made by my collegue Alan Coates.&lt;br /&gt;&lt;br /&gt;Backup:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;BACKUP database &amp;lt;prefix&amp;gt;_Archive&lt;br /&gt;TO DISK = 'E:\backup\&amp;lt;filename&amp;gt;.bak'&lt;br /&gt;;&lt;br /&gt;BACKUP database &amp;lt;prefix&amp;gt;_Core&lt;br /&gt;TO DISK = 'E:\backup\&amp;lt;filename&amp;gt;.bak'&lt;br /&gt;;&lt;br /&gt;BACKUP database &amp;lt;prefix&amp;gt;_Extranet&lt;br /&gt;TO DISK = 'E:\backup\&amp;lt;filename&amp;gt;.bak'&lt;br /&gt;;&lt;br /&gt;BACKUP database &amp;lt;prefix&amp;gt;_Master&lt;br /&gt;TO DISK = 'E:\backup\&amp;lt;filename&amp;gt;.bak'&lt;br /&gt;;&lt;br /&gt;BACKUP database &amp;lt;prefix&amp;gt;_RecycleBin&lt;br /&gt;TO DISK = 'E:\backup\&amp;lt;filename&amp;gt;.bak'&lt;br /&gt;;&lt;br /&gt;BACKUP database &amp;lt;prefix&amp;gt;_Security&lt;br /&gt;TO DISK = 'E:\backup\&amp;lt;filename&amp;gt;.bak'&lt;br /&gt;;&lt;br /&gt;BACKUP database &amp;lt;prefix&amp;gt;_Web&lt;br /&gt;TO DISK = 'E:\backup\&amp;lt;filename&amp;gt;.bak'&lt;br /&gt;;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Restore:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;RESTORE DATABASE &amp;lt;prefix&amp;gt;_Archive FROM DISK = 'E:\Backup\&amp;lt;prefix&amp;gt;_Archive.bak'&lt;br /&gt;WITH&lt;br /&gt;MOVE 'scCore_Data' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Archive.mdf',&lt;br /&gt;MOVE 'scCore_Log' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Archive_log.ldf'&lt;br /&gt;;&lt;br /&gt;RESTORE DATABASE &amp;lt;prefix&amp;gt;_Core FROM DISK = 'E:\Backup\&amp;lt;prefix&amp;gt;_Core.bak'&lt;br /&gt;WITH&lt;br /&gt;MOVE 'scCore_Data' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Core.mdf',&lt;br /&gt;MOVE 'scCore_Log' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Core_log.ldf'&lt;br /&gt;;&lt;br /&gt;RESTORE DATABASE &amp;lt;prefix&amp;gt;_Extranet FROM DISK = 'E:\Backup\&amp;lt;prefix&amp;gt;_Extranet.bak'&lt;br /&gt;WITH&lt;br /&gt;MOVE 'nextOT_Data' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Extranet.mdf',&lt;br /&gt;MOVE 'nextOT_Log' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Extranet_log.ldf'&lt;br /&gt;;&lt;br /&gt;RESTORE DATABASE &amp;lt;prefix&amp;gt;_Master FROM DISK = 'E:\Backup\&amp;lt;prefix&amp;gt;_Master.bak'&lt;br /&gt;WITH&lt;br /&gt;MOVE 'scCore_Data' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Master.mdf',&lt;br /&gt;MOVE 'scCore_Log' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Master_log.ldf'&lt;br /&gt;;&lt;br /&gt;RESTORE DATABASE &amp;lt;prefix&amp;gt;_RecycleBin FROM DISK = 'E:\Backup\&amp;lt;prefix&amp;gt;_RecycleBin.bak'&lt;br /&gt;WITH&lt;br /&gt;MOVE 'scCore_Data' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_RecycleBin.mdf',&lt;br /&gt;MOVE 'scCore_Log' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_RecycleBin_log.ldf'&lt;br /&gt;;&lt;br /&gt;RESTORE DATABASE &amp;lt;prefix&amp;gt;_Security FROM DISK = 'E:\Backup\&amp;lt;prefix&amp;gt;_Security.bak'&lt;br /&gt;WITH&lt;br /&gt;MOVE 'nextOT_Data' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Security.mdf',&lt;br /&gt;MOVE 'nextOT_Log' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Security_log.ldf'&lt;br /&gt;;&lt;br /&gt;RESTORE DATABASE &amp;lt;prefix&amp;gt;_Web FROM DISK = 'E:\Backup\&amp;lt;prefix&amp;gt;_Web.bak'&lt;br /&gt;WITH&lt;br /&gt;MOVE 'scCore_Data' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Web.mdf',&lt;br /&gt;MOVE 'scCore_Log' TO 'E:\&amp;lt;sqldata&amp;gt;\&amp;lt;prefix&amp;gt;_Web_log.ldf'&lt;br /&gt;; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6221232065808883107-5786587504264596579?l=sitecorejm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/5786587504264596579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6221232065808883107&amp;postID=5786587504264596579' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/5786587504264596579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/5786587504264596579'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/2007/07/sql-restorebackup-script.html' title='SQL restore/backup script'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</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-6221232065808883107.post-8760420320524899247</id><published>2007-02-19T07:14:00.000+01:00</published><updated>2007-02-20T20:18:41.666+01:00</updated><title type='text'>Cleanup html with one button click</title><content type='html'>It is possible to create your own buttons in the rich text editor. This can be used to create your own functionality. For instance I recently had to make a button that cleans up the HTML entered in a rich text field. Now this functionallity is allready present in Sitecore, but it is devided into 5 steps. E.g. remove font tags, remove span tags etc.&lt;br /&gt;In this particullar case we wanted a button to perform a cleanup tasks, that included three of these methods. Instead of clicking three times to remove font tags, css styling and word formatting, we needed to create a button that did all of these tasks, by clicking one time only. This can be done by:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 1:&lt;/strong&gt;&lt;br /&gt;Create the button in Sitecore. The buttons for the editor is found in here: Sitecore &gt; System &gt; Settings &gt; Html Editor Profiles &gt; Rich Text Default &gt; Toolbar X.&lt;br /&gt;Now copy an existing button and rename it to what ever you like. In this instance we'll call it CustomCleanup. In the field "Click" you can enter a string, that will be fired when the button is clicked. You can later catch when this message is fired. Put in what ever string you like. In this case we'll enter "CustomCleanupTask".&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 2:&lt;/strong&gt;&lt;br /&gt;Now we need to catch the message. This is done in the javascript file: sitecore/shell/Controls/Rich Text Editor/RichText Commands.js. Now add the following to the file:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;RadEditorCommandList["CustomCleanupTask"] = function(commandName, editor, tool) {&lt;br /&gt;&lt;br /&gt;/* Fire new events */&lt;br /&gt;editor.Fire("CSS",tool);&lt;br /&gt;editor.Fire("FONT",tool);&lt;br /&gt;editor.Fire("WORD",tool);&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;P.s. you can alter the icon on the button, by adjusting the Icon field on the button. This path is taken from /sitecore/shell/RadControls/Editor/Skins/*/Buttons&lt;br /&gt;&lt;br /&gt;Now you have your new functionality. Remember to clear the cache.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6221232065808883107-8760420320524899247?l=sitecorejm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/8760420320524899247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6221232065808883107&amp;postID=8760420320524899247' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/8760420320524899247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/8760420320524899247'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/2007/02/cleanup-html-with-one-button-click.html' title='Cleanup html with one button click'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6221232065808883107.post-632911385506390476</id><published>2007-02-19T06:38:00.000+01:00</published><updated>2007-02-19T22:22:34.883+01:00</updated><title type='text'>Adding password requirements</title><content type='html'>Some administrators may want to add some sort of security requirements to the password a user enters. For instance they may want to require the user to use a strong password. By default this isn't possible in Sitecore, but as with most things, this can be altered fairly easy in Sitecore.&lt;br /&gt;&lt;br /&gt;Step 1:&lt;br /&gt;Create a class in a project called what ever you like. For instance PasswordChanger. Then include Sitecore.Client, Sitecore.Kernel and System.web&lt;br /&gt;&lt;br /&gt;Step 2:&lt;br /&gt;First we need to make sure, that the "change password" will use our code. Do this by copying the change password.xml from "sitecore/shell/Applications/Security/Change password" to the "sitecore\shell\override" catalouge. Then alter this line in the file:&lt;br /&gt;&lt;span style="font-size:80%;"&gt;&lt;br /&gt;&amp;lt;wizardform codebeside="Sitecore.Shell.Applications.Security.ChangePassword.ChangePasswordForm,Sitecore.Client"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;So that it will use your class and dll instead.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Step 3:&lt;br /&gt;Now we're at the fun part... Writing the code. Its really pretty easy. All you have to do is overwrite the ActivePageChanging function. This is called every time the wizard changes pages by clicking "Next","Ok" etc.&lt;br /&gt;&lt;br /&gt;Let your class inherit the class for the current wizard and then test to see if we're at the right page and the test to see if the password is strong. Like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:80%;"&gt;public class MyClass :&lt;br /&gt;Sitecore.Shell.Applications.Security.ChangePassword.ChangePasswordForm&lt;br /&gt;{&lt;br /&gt;//Override the ActivePageChanging method&lt;br /&gt;protected override bool&lt;br /&gt;ActivePageChanging(string page, ref string newpage)&lt;br /&gt;{&lt;br /&gt;//Test to see if were at the right page&lt;br /&gt;if (page == "NewPasswordPage")&lt;br /&gt;{&lt;br /&gt;//Test to see if the password is strong&lt;br /&gt;Regex regEx = new&lt;br /&gt;Regex("(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$");&lt;br /&gt;return&lt;br /&gt;(!regEx.IsMatch(this.NewPassword.Value));&lt;br /&gt;}&lt;br /&gt;//call the base function&lt;br /&gt;return base.ActivePageChanging(page, ref newpage);&lt;br /&gt;}&lt;br /&gt;} &lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;And there you go&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6221232065808883107-632911385506390476?l=sitecorejm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/632911385506390476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6221232065808883107&amp;postID=632911385506390476' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/632911385506390476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/632911385506390476'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/2007/02/adding-password-requirements.html' title='Adding password requirements'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</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-6221232065808883107.post-6212025093728870367</id><published>2007-02-19T06:24:00.000+01:00</published><updated>2007-02-19T06:38:14.087+01:00</updated><title type='text'>Welcome</title><content type='html'>Welcome to my Sitecore blog.&lt;br /&gt;&lt;br /&gt;My name is Jens Mikkelsen and I work for the consulting firm Pentia A/S - located in Denmark.&lt;br /&gt;&lt;br /&gt;I spend most of my time here, developing Sitecore solutions for various customers. I am involved in most stages of the process of building these solutions - stretching from architecture to implementation to test.&lt;br /&gt;&lt;br /&gt;This brings me to the famous "what to expect from this blog". As a developer working close to the customer I might have a more pratical approach to Sitecore, than most of the other Sitecore blogs out there. As the customer often have rather unique requirements for &lt;em&gt;their&lt;/em&gt; solution, I hope, I'm able to share with you, some of the tweaks and tricks used to customize Sitecore, that I stumble on in the process of my work.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6221232065808883107-6212025093728870367?l=sitecorejm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sitecorejm.blogspot.com/feeds/6212025093728870367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6221232065808883107&amp;postID=6212025093728870367' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/6212025093728870367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6221232065808883107/posts/default/6212025093728870367'/><link rel='alternate' type='text/html' href='http://sitecorejm.blogspot.com/2007/02/welcome.html' title='Welcome'/><author><name>Jens Mikkelsen</name><uri>http://www.blogger.com/profile/06899271123061904086</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></feed>
