<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Blog posts by Rouslan Minasian</title><link href="http://world.optimizely.com" /><updated>2010-11-04T15:25:09.0000000Z</updated><id>https://world.optimizely.com/blogs/Rouslan-Minasian/</id> <generator uri="http://world.optimizely.com" version="2.0">Optimizely World</generator> <entry><title>Custom Property Type and SaveData Method</title><link href="https://world.optimizely.com/blogs/Rouslan-Minasian/Dates/2010/11/Custom-Property-Type-and-SaveData-Method/" /><id>&lt;p&gt;In out project we use PropertyPageReferenceCollection to store references to local pages. It has PageReferenceCollection under the hood and calls its Parse and ToString methods to load and save the data. Evetything was fine until we decided to make some property (let’s call it Links) of this type required. The application started to crash while loading the page with empty Links property.&lt;/p&gt;  &lt;p&gt;I’ve spend a lot of time looking how to prevent LoadData from crash while the error was in SaveData method. When LocalPageProvider loads a page it goes through all the properties from DB calls PropertyData.LoadData method for each property &lt;u&gt;which value is not DBNull.Value&lt;/u&gt;. Since our SaveData implementation used PageReferenceCollection.ToString it returned string.Empty for empty collection and that value was stored in the DB. Then, after we set Links property as required, LoadData started to crash since string.Empty caused PropertyData.Clear to be called for required property. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Moral:&lt;/strong&gt; always implement SaveData property so it returns null if PropertyData.IsNull is true.&lt;/p&gt;</id><updated>2010-11-04T15:25:09.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Use UserControl for Editing Custom Property Types</title><link href="https://world.optimizely.com/blogs/Rouslan-Minasian/Dates/2010/9/Use-UserControl-for-Editing-Custom-Property-Types/" /><id>&lt;p&gt;First of all, read &lt;a href=&quot;http://tedgustaf.com/en/blog/2010/7/custom-properties-in-episerver-using-user-controls/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+episerver+%28Ted+%26+Gustaf+on+EPiServer%29&quot;&gt;this article&lt;/a&gt; by &lt;a href=&quot;http://world.episerver.com/Blogs/Ted-Nyberg/&quot;&gt;Ted Nyberg&lt;/a&gt; about using &lt;a href=&quot;http://etf.codeplex.com/&quot;&gt;ETF&lt;/a&gt;. When I first started using EpiServer (not very long ago) I was wondering why can’t I find any examples of using UserControls in custom properties. I’m pretty sure I’m inventing my own wheel but hopefully my note will be better indexed than existing ones (I found none of them).&lt;/p&gt;  &lt;p&gt;So, let’s create property MyPropertyString extending PropertyString.&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9b9fdfbd-ef82-4877-bd07-58c96f7b9ba3&quot; class=&quot;wlWriterSmartContent&quot;&gt;   &lt;div style=&quot;border-bottom: #000080 1px solid; border-left: #000080 1px solid; font-family: &#39;Courier New&#39;, courier, monospace; color: #000; font-size: 10pt; border-top: #000080 1px solid; border-right: #000080 1px solid&quot;&gt;     &lt;div style=&quot;padding-bottom: 2px; background-color: #ffffff; padding-left: 5px; padding-right: 5px; white-space: nowrap; overflow: auto; padding-top: 2px&quot;&gt;[&lt;span style=&quot;color: #2b91af&quot;&gt;Serializable&lt;/span&gt;]        &lt;br /&gt;[&lt;span style=&quot;color: #2b91af&quot;&gt;PageDefinitionTypePlugIn&lt;/span&gt;]        &lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;MyPropertyString&lt;/span&gt; : &lt;span style=&quot;color: #2b91af&quot;&gt;PropertyString&lt;/span&gt; {        &lt;br /&gt;}&lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Looks like pretty useful property. Let’s add it to some PageType and ensure it’s displayed.&lt;/p&gt;  &lt;p&gt;Then, we’ll add new Web User Control&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:52af11f6-7f6e-4bb2-9912-f761fb6e85b8&quot; class=&quot;wlWriterSmartContent&quot;&gt;   &lt;div style=&quot;border-bottom: #000080 1px solid; border-left: #000080 1px solid; font-family: &#39;Courier New&#39;, courier, monospace; color: #000; font-size: 10pt; border-top: #000080 1px solid; border-right: #000080 1px solid&quot;&gt;     &lt;div style=&quot;padding-bottom: 2px; padding-left: 5px; padding-right: 5px; font-family: verdana, tahoma, arial, sans-serif; background: #000080; color: #fff; font-weight: bold; padding-top: 2px&quot;&gt;Layout&lt;/div&gt;      &lt;div style=&quot;padding-bottom: 2px; background-color: #ffffff; padding-left: 5px; padding-right: 5px; white-space: nowrap; overflow: auto; padding-top: 2px&quot;&gt;&lt;span style=&quot;background: #ffff00&quot;&gt;&amp;lt;%&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;@&lt;/span&gt; &lt;span style=&quot;color: #800000&quot;&gt;Control&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Language&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;AutoEventWireup&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;CodeBehind&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;MyPropertyStringControl.ascx.cs&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Inherits&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;EPiServer1.MyPropertyStringControl&amp;quot;&lt;/span&gt; &lt;span style=&quot;background: #ffff00&quot;&gt;%&amp;gt;&lt;/span&gt;        &lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;asp&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;TextBox&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;runat&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;ID&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;txtValue&amp;quot;&lt;/span&gt;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #ff0000&quot;&gt;&amp;amp;nbsp;&lt;/span&gt;        &lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;Clear&amp;quot;&lt;/span&gt;         &lt;br /&gt;&lt;span style=&quot;color: #ff0000&quot;&gt;onclick&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;document.getElementById(&#39;&lt;/span&gt;&lt;span style=&quot;background: #ffff00&quot;&gt;&amp;lt;%&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&lt;/span&gt; txtValue.ClientID &lt;span style=&quot;background: #ffff00&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&#39;).value = &#39;&#39;; return false;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:90dc7f4f-0773-486c-85cb-960d7b222884&quot; class=&quot;wlWriterSmartContent&quot;&gt;   &lt;div style=&quot;border-bottom: #000080 1px solid; border-left: #000080 1px solid; font-family: &#39;Courier New&#39;, courier, monospace; color: #000; font-size: 10pt; border-top: #000080 1px solid; border-right: #000080 1px solid&quot;&gt;     &lt;div style=&quot;padding-bottom: 2px; padding-left: 5px; padding-right: 5px; font-family: verdana, tahoma, arial, sans-serif; background: #000080; color: #fff; font-weight: bold; padding-top: 2px&quot;&gt;Code-behind&lt;/div&gt;      &lt;div style=&quot;padding-bottom: 2px; background-color: #ffffff; padding-left: 5px; padding-right: 5px; white-space: nowrap; overflow: auto; padding-top: 2px&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;partial&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;MyPropertyStringControl&lt;/span&gt; : &lt;span style=&quot;color: #2b91af&quot;&gt;UserControlBase&lt;/span&gt;, &lt;span style=&quot;color: #2b91af&quot;&gt;IPropertyControl&lt;/span&gt; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; MyPropertyStringControl() {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Enabled = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;; &lt;span style=&quot;color: #008000&quot;&gt;// Do not forget this!&lt;/span&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; SetupControl() {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; txtValue.Text = (&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;)PropertyData.Value;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ApplyChanges() {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PropertyData.Value = txtValue.Text;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; DisplayEditUI {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; PropertyData.DisplayEditUI; }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;PropertyData&lt;/span&gt; PropertyData { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;PropertyDataCollection&lt;/span&gt; Properties { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;RenderType&lt;/span&gt; RenderType { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;TableRowLayout&lt;/span&gt; RowLayout {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;TableRowLayout&lt;/span&gt;.Default; }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ValidationGroup { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }        &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; Enabled { &lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;; }        &lt;br /&gt;}&lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And the last line which this post is about:&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a76b69e6-072d-4dc7-8642-396e54da9d73&quot; class=&quot;wlWriterSmartContent&quot;&gt;   &lt;div style=&quot;border-bottom: #000080 1px solid; border-left: #000080 1px solid; font-family: &#39;Courier New&#39;, courier, monospace; color: #000; font-size: 10pt; border-top: #000080 1px solid; border-right: #000080 1px solid&quot;&gt;     &lt;div style=&quot;padding-bottom: 2px; background-color: #ffffff; padding-left: 5px; padding-right: 5px; white-space: nowrap; overflow: auto; padding-top: 2px&quot;&gt;[&lt;span style=&quot;color: #2b91af&quot;&gt;Serializable&lt;/span&gt;]        &lt;br /&gt;[&lt;span style=&quot;color: #2b91af&quot;&gt;PageDefinitionTypePlugIn&lt;/span&gt;]        &lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;MyPropertyString&lt;/span&gt; : &lt;span style=&quot;color: #2b91af&quot;&gt;PropertyString&lt;/span&gt; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;IPropertyControl&lt;/span&gt; CreatePropertyControl() {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;IPropertyControl&lt;/span&gt;)&lt;span style=&quot;color: #2b91af&quot;&gt;BuildManager&lt;/span&gt;.CreateInstanceFromVirtualPath(&lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;~/MyPropertyStringControl.ascx&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;color: #2b91af&quot;&gt;MyPropertyStringControl&lt;/span&gt;));        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;}&lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Voila – we’ve got ‘clear’ button near our textbox. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;P.S. Guys, is there any good code-pasting plug-in for Live Writer?&lt;/p&gt;</id><updated>2010-09-17T18:43:23.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>EPiServer Certification</title><link href="https://world.optimizely.com/blogs/Rouslan-Minasian/Dates/2010/8/EPiServer-Certification/" /><id>&lt;p&gt;Today I managed to pass EPiServer 6 Certification. The most difficult part is preparing to the exam. The problem is lack of information about the test. Here are two useful posts about EPiServer 5 Certification: &lt;a href=&quot;http://mint.litemedia.se/2008/11/29/episerver-cms-5-certified-developer/&quot;&gt;EPiServer CMS 5 Certified Developer&lt;/a&gt; and &lt;a href=&quot;http://blog.fredrikhaglund.se/blog/2008/11/30/how-to-become-a-episerver-ceritified-developer/&quot;&gt;How to become a EPiServer Ceritified Developer&lt;/a&gt; which are still valid for version 6. So, to help the others who are going to take the exam I decided to write the third note.&lt;/p&gt;  &lt;p&gt;First of all, be prepared that 30% of the questions are not related to development (install/upgrade sites, admin/editor UI, languages etc.). Next 30% are about development regardless of EPiServer (which was very good for me). The other questions were about standard EPiServer classes and controls and configuring your site (I think changes in config files is mostly developer responsibility).&lt;/p&gt;  &lt;p&gt;The list of knowledge areas &lt;a href=&quot;http://mint.litemedia.se/2008/11/29/episerver-cms-5-certified-developer/&quot;&gt;there&lt;/a&gt; is quite good. Here are some steps you should do to prepare yourself to the exam.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Everybody says you need to code for EPiServer for a while to pass the exam. I think that’s not enough. If you don’t use &lt;a href=&quot;http://www.red-gate.com/products/reflector/&quot;&gt;.NET Reflector&lt;/a&gt; you probably don’t know many interesting point. Don’t try to read all the EPiServer dlls using the tool. You just need to be curious how does EPiServer do things when you code another new feature. &lt;/li&gt;    &lt;li&gt;Some people say you need to read Admin and Editor Guides. I would say it’s not required. But you should click every link in Admin mode to see all the screens, notice all the settings and ensure you understand them all. If you have some extra time, read Admin Guide. &lt;/li&gt;    &lt;li&gt;In addition to point 2 you should double-check you understand how Mirroring works and how to configure it. &lt;/li&gt;    &lt;li&gt;Read &lt;a href=&quot;http://world.episerver.com/Documentation/Items/Tech-Notes/EPiServer-CMS-6/EPiServer-CMS-60/OnlineCenter-Developer-Documentation/&quot;&gt;OnlineCenter Developer Documentation&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Install EPiServer 6 web-site. Upgrade EPiServer 5 to EpiServer 6. Read &lt;strong&gt;and understand&lt;/strong&gt; about installing/upgrading the site and licensing. Personally I missed this point. &lt;/li&gt;    &lt;li&gt;Read about &lt;a href=&quot;http://world.episerver.com/Documentation/Items/Tech-Notes/EPiServer-CMS-6/EPiServer-CMS-60/Globalization/&quot;&gt;globalization&lt;/a&gt;. Play with languages in Admin and Edit modes. See how does it work. &lt;/li&gt;    &lt;li&gt;Read ‘Developer Guide’ branch in SDK. &lt;/li&gt;    &lt;li&gt;Read &lt;a href=&quot;http://www.frederikvig.com/tag/episerver-web-controls/&quot;&gt;all of this&lt;/a&gt; even if you don’t use native EPiServer controls. &lt;/li&gt;    &lt;li&gt;Open Visual Studio and create MembershipProvider, RoleProvider, ProfileProvider, PageProvider, VitualPathProvider, PagePlugIn, Scheduled Task, Custom Property Type. All of them can do nothing. You just need to understand how to do it (attributes, base classes, interfaces, required methods). &lt;/li&gt;    &lt;li&gt;Read about &lt;a href=&quot;http://world.episerver.com/Documentation/Items/Tech-Notes/EPiServer-CMS-6/EPiServer-CMS-60/Dynamic-Data-Store/&quot;&gt;Dynamic Data Store&lt;/a&gt; and &lt;a href=&quot;http://world.episerver.com/Documentation/Items/Tech-Notes/EPiServer-CMS-6/EPiServer-CMS-60/Page-Objects/&quot;&gt;Page Objects&lt;/a&gt;. If you don’t use them, just memorize main classes and how-to code snippets. &lt;/li&gt;    &lt;li&gt;Review web.config and episerver.config files. Be sure you understand everything in there (including commended out sections). &lt;/li&gt;    &lt;li&gt;Open the &lt;a href=&quot;http://mint.litemedia.se/2008/11/29/episerver-cms-5-certified-developer/&quot;&gt;list of questions&lt;/a&gt;, check if you can answer all of them, use google on missing topics. Repeat steps 1-12 until your beer is cold enough :) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Than, good luck.&lt;/p&gt;</id><updated>2010-08-27T15:07:08.0000000Z</updated><summary type="html">Blog post</summary></entry></feed>