<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
      <title>Umbraco</title>
      <description>Umbraco community blog posts http://blog.hendyracher.co.uk/umbraco-blogs-and-pipes/</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=8llM7pvk3RGFfPy4pgt1Yg</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=8llM7pvk3RGFfPy4pgt1Yg&amp;_render=rss&amp;page=2"/>
      <pubDate>Sun, 25 Nov 2012 06:10:34 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>A require module pattern in Asp.Net Razor</title>
         <link>http://joeriks.com/2012/11/24/a-require-module-pattern-in-asp-net-razor/</link>
         <description>Did you ever need to load modules dynamically in Razor? Do you like to write function libraries in pure Razor, and be able to use them from other files without placing that function libraries in App_Code, and without forcing the App to restart? Not? Oh, well, anyways &amp;#8211; as a friday evening experiment I hacked [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=joeriks.com&amp;#038;blog=11388728&amp;#038;post=2027&amp;#038;subd=joeriks&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://joeriks.com/?p=2027</guid>
         <pubDate>Sat, 24 Nov 2012 07:02:37 +0000</pubDate>
         <content:encoded><![CDATA[<p><strong>Did you ever need to load modules dynamically in Razor? Do you like to write function libraries in pure Razor, and be able to use them from other files without placing that function libraries in App_Code, and without forcing the App to restart?</p>
<p>Not? Oh, well, anyways &#8211; as a friday evening experiment I hacked together a Razor Require Module sample which worked out pretty good.</strong></p>
<p><i>I do recommend the regular way to add functionality, in .cs-files. I use Razor mostly as a pure View engine, with no logic other than view logic.</p>
<p>But Razor can also be a really fun playground to test some ideas in, and with this I can temporarily add functions to for example an Umbraco site directly from within the online Umbraco UI.</i></p>
<p>Here&#8217;s the usage: </p>
<p>Create a module, SomeModule.cshtml:</p>
<p><pre>@Require.Define(&quot;SomeModule&quot;, (module) =&gt;
{
    module.Exclaim = new Func&lt;string, string&gt;((message) =&gt; { 
    
        return message + &quot;!&quot;; 
    
    });

    module.AddToDatabase = new Func&lt;dynamic, int&gt;((newrecord)=&gt;{
        
        // some code to add the newrecord to the database        
        // return the created id

        return 0;
    
    });
    
});</pre></p>
<p>The code is using lambda syntax to add functions to the module. The module name is defined with a string.</p>
<p>Later you use the module this way:</p>
<p><pre>@Require.File(&quot;~/SomeModule.cshtml&quot;)

@{    
    var newId = App.SomeModule.AddToDatabase(new { name = &quot;foo&quot;, info = &quot;bar&quot; });    
}

&lt;p&gt;New database item added with ID : @newId&lt;/p&gt;</pre></p>
<p>The Require.File function checks if SomeModule has been defined already. If not it will define it and add the code dynamically by loading the SomeModule.cshtml. </p>
<p>Each module is an ExpandoObject, which is added to the global App ExpandoObject. That&#8217;s why we use it with &#8220;App.ModuleName&#8221;.</p>
<p>The Require code needed for this is only a few lines of code in the file Require.Cshtml in App_Code:</p>
<p><pre>@helper File(string fileName) {

    var p = (WebPage)WebPageBase.CreateInstanceFromVirtualPath(fileName);
    var ctx = new WebPageContext(new HttpContextWrapper(HttpContext.Current), p, null);
    p.ExecutePageHierarchy(ctx, new StringWriter());

}
@helper Define(string moduleName, Action&lt;dynamic&gt; definitions, bool alwaysRedefine = false) {
    if (alwaysRedefine || App[moduleName] == null)
    {
        App[moduleName] = new System.Dynamic.ExpandoObject();
        definitions.Invoke(App[moduleName]);
    }
}</pre></p>
<p>If you like to add a function to an already loaded module it&#8217;s possible to do so. You need to add a parameter to the define to make it redefine the module even if its already defined:</p>
<p><pre>@Require.Define(&quot;OtherModule&quot;, (module) =&gt;
{
    @* 
       ...  Existing code ...
    *@

    module.NewFunction = new Func&lt;string&gt;(()=&gt;{
        return &quot;result&quot;;
    });
    
}, true);</pre></p>
<p>A module can require other modules. And, you add modules and their functions dynamically without the need for App restarts.</p>
<p>I got the final piece to this puzzle to this code from this gist by Niels Kühnel: <a rel="nofollow" target="_blank" href="http://pastebin.com/fjXPnzAw">dynamically render a razor file http://pastebin.com/fjXPnzAw</a>, thanks Niels.</p>
<p><strong>Using Require in Umbraco</strong><br />
I do most my coding in Visual Studio, nothing beats it. But I also like to be able to log into an online site and make a few additions to a running (small, not client) site, just when I have five minutes over from wherever I am. And with the Umbraco UI I can do that. However, until now I haven been able to re-use code easily.</p>
<p><a rel="nofollow" target="_blank" href="http://joeriks.files.wordpress.com/2012/11/api-demo.png"><img src="http://joeriks.files.wordpress.com/2012/11/api-demo.png?w=588&#038;h=187" alt="" title="api-demo" width="588" height="187" class="alignleft size-full wp-image-2040"/></a></p>
<p><a rel="nofollow" target="_blank" href="http://joeriks.files.wordpress.com/2012/11/my-module.png"><img src="http://joeriks.files.wordpress.com/2012/11/my-module.png?w=588&#038;h=210" alt="" title="my-module" width="588" height="210" class="alignleft size-full wp-image-2041"/></a></p>
<p>Tip: Change two settings in web.config to be able to run files from within the api folder directly (&#8220;http://mysite.com/macroscripts/api/demo&#8221;):</p>
<p><pre>&lt;appSettings&gt;
...
    &lt;add key=&quot;umbracoReservedPaths&quot; value=&quot;~/umbraco,~/install/,~/macroscripts/api/&quot; /&gt;
...
    &lt;add key=&quot;webpages:Enabled&quot; value=&quot;true&quot; /&gt;
...
</pre></p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/joeriks.wordpress.com/2027/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/joeriks.wordpress.com/2027/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=joeriks.com&#038;blog=11388728&#038;post=2027&#038;subd=joeriks&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/5c1ed377a5b2e96c567e4184a7be70b1?s=96&amp;amp;d=http%3A%2F%2F2.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&amp;amp;r=G">
            <media:title type="html">joeriks</media:title>
         </media:content>
         <media:content medium="image" url="http://joeriks.files.wordpress.com/2012/11/api-demo.png">
            <media:title type="html">api-demo</media:title>
         </media:content>
         <media:content medium="image" url="http://joeriks.files.wordpress.com/2012/11/my-module.png">
            <media:title type="html">my-module</media:title>
         </media:content>
      </item>
      <item>
         <title>Umbraco 4.11.0 released</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/ST8Pmq_D9BM/umbraco-4110-released.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/23/umbraco-4110-released.aspx</guid>
         <pubDate>Fri, 23 Nov 2012 15:39:41 +0000</pubDate>
         <content:encoded><![CDATA[<p><br />Oh happy day! </p><p><a rel="nofollow" target="_blank" href="http://umbraco.codeplex.com/releases/view/98167">Umbraco 4.11.0 is here</a>, fixing a few dozen bugs found in 4.10.0 and including some more pull requests/patches delivered by community members.</p><p>The upgrade couldn't be easier, just overwrite the /bin, /install, /umbraco and /umbraco_client folder and follow the upgrade wizard. You should also change the version number in your ClientDependency.config file. This is to clear the cache so that updates to the backoffice UI (js/css/html) will actually be visible to you and your editors.</p><p>Ther's no breaking changes and no database upgrades since 4.10.0 so if you're on 4.10.x, the installer will only change the version number in your web.config.</p><p>If you're not on 4.10.x yet, make sure to follow the upgrade instructions of the versions between yours and 4.11.0.</p><p>So now it's time to dance the weekend away:</p><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=ST8Pmq_D9BM:VD6cSe0DAVg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=ST8Pmq_D9BM:VD6cSe0DAVg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=ST8Pmq_D9BM:VD6cSe0DAVg:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/ST8Pmq_D9BM" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Easy tiger</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/dEip1xBbdOg/easy-tiger.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/22/easy-tiger.aspx</guid>
         <pubDate>Thu, 22 Nov 2012 15:33:32 +0000</pubDate>
         <content:encoded><![CDATA[<p><span><br />It’s now 4 months after Codegarden and we’re very happy to that version 4.11.0 is eagerly knocking at the door. 4.11.0 delivers what we promised you at Codegarden: a strong comeback of Umbraco 4 with full MVC support. We’re very proud of that. Even better: the reception of 4.10.0 both in- and outside of the community has been very positive.</span><br /><br /><span>Another thing that we’re very happy with is the great number of contributions we’ve received from the community. It’s very satisfying to be accepting bug fixes for things that people have been annoyed by for ages and finally now they feel empowered to try and fix them. We’ve been </span><a rel="nofollow" target="_blank" href="http://our.umbraco.org/contribute/"><span>trying to help everybody</span></a><span> who wants to get involved out and the effect has been an explosion of pull requests and patches. <strong>Thank you, thank you, thank you.</strong> Awesome work!</span><br /><br /><span>With our new (more agile) focus we’re also regularly doing reflection on what works and what doesn’t work. This has led to a few discussions within the core team to see how we can improve our process and we came to a simple conclusion: we’ve been wanting to do too much in too little time, we need to pace ourselves.</span><br /><br /><span>We've also had feedback from the community saying that we’re releasing a bit too often now and people can’t keep up. Very fair feedback and we’ll be releasing less aggressively. </span><br /><br /><img src="http://umbraco.com/media/427794/easytiger.gif"/></p><h2>In short</h2><ul><li>We love that we’ve been able to put out the recent releases with good quality but want to do better</li><li>We’ll soon relax the release schedule so you can keep up again</li><li>No more breaking changes between major versions allow you to upgrade with confidence</li></ul><p>This means that we’re going to change the roadmap a little to adjust for these new insights. In practise, this will lead to a more agile way of doing things, we’ll be putting less work items in each sprint. </p><p><span>We still have an overarching vision of where we want to go, but very specific smaller tasks won’t be set in stone. So the big things that are upcoming are (in order of appearance):</span></p><ul><li><span>New low-level and high-level APIs plus improvements to the MVC bits</span></li><li><span>Project Belle, the new user interface</span></li><li><span>Concorde, Umbraco as a Service</span></li></ul><h2><span>In detail</span></h2><p><span>With regards to the release schedule, we’re relaxing that a little bit after v6.1.0. We’re really eager to get the new API’s in the hands of everybody and deliver all that we promised for v6: new routing, new api’s, new business layer and MVC, which is exactly what we wanted for v5.</span></p><p><span>As of 6.1.0, we’ll still be doing sprints of 2 weeks with the team, leading to a deliverable after each sprint. We’ll be doing actual releases every 8 weeks though, this will be either a major or a minor release.</span><br /><br /><span>Speaking of backwards compatibility, we had so many things that really, really needed to be fixed in v4, that we bended the rules of SemVer a little and introduced some breaking changes in minor releases. We realize that it’s not been very consistent with our own guidelines, and as of v6 we’ll only make breaking changes in major releases, so you will be able to upgrade with ease.</span><br /><br /><span>A lot of people (</span><a rel="nofollow" target="_blank" href="https://twitter.com/j_breuer/status/268746413997973505"><span>especially Jeroen</span></a><span>) actually </span><span>like</span><span> our fast release schedule and don’t want to wait weeks to be able to take advantage of the improvements we’re making. Because we’ll have no breaking changes, it will be safe to upgrade to nightly releases, so that’s what we’ll be recommending from now on.</span><br /><br /><span>As for breaking changes, we’re allowed to break things for v6.0.0. And we will, but we’re trying to keep them minimal. The main changes will be around the database and these will be handled by the installer during the upgrade so it shouldn’t be too painful.</span></p><h2><span>Conclusion</span></h2><p><span>We realize that while our main job is to produce software, you job is to both understand and implement our software. We'll be easier to keep up with, giving you more time to learn, understand and build.</span></p><p>And with that: go forth and make awesome websites!</p><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=dEip1xBbdOg:WdUgQ6rRvqY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=dEip1xBbdOg:WdUgQ6rRvqY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=dEip1xBbdOg:WdUgQ6rRvqY:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/dEip1xBbdOg" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Contour 3.0 is out!</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/dvLWc8EDtw8/contour-30-is-out!.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/22/contour-30-is-out!.aspx</guid>
         <pubDate>Thu, 22 Nov 2012 14:03:08 +0000</pubDate>
         <content:encoded><![CDATA[<div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=dvLWc8EDtw8:RbLcOv4HSxI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=dvLWc8EDtw8:RbLcOv4HSxI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=dvLWc8EDtw8:RbLcOv4HSxI:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/dvLWc8EDtw8" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Organising an Umbraco hackday the Cogworks way</title>
         <link>http://thecogworks.co.uk/blog/posts/2012/november/organising-an-umbraco-hackday-the-cogworks-way/</link>
         <description>A few people have asked me to blog about our experience organising an Umbraco hackday and the approach we took.  The hackday before the Umbraco UK festival was very successful in terms of the total number of bugs fixed in a single day, however that wasn't achieved without a bit of planning and pre-work. So here's my guide to organising a successful hackday.     Go Hackathon team Go!! You can 'Bash those Bugs!'   Focus   We were clear about what we wanted to achieve in the hackday and that meant deciding up front. Our hackday was to fix bugs, but yours could easily be to create a package or work on a new feature in the core.  By being focused it means you can work out some of the not terribly exciting bits before hand (like a list of user stories or bugs to be fixed). This saves a whole heap of time and stops too much discussion about what to do before you get started.   Make it achievable   It's easy to get carried away when setting the focus and coming up with a massive new chunk of functionality that you'd like to work on. However you need to ask yourself, can this be done in a single hackday? By done I mean can you develop it, test it, document it and release it!  If you don't think that can be done in a single hackday then it's probably not a good candidate, because after the hack day the team will disperse and you're much less likely to get the time to finish it.  Of course that doesn't mean you can't have big ambitions but maybe ensure you break the big task into smaller chunks that deliver some benefit, so if you only get 60% of them done there's still a sense of having delivered something of value at the end of the day.   Get help from the Core   We were helped greatly before we started by Sebastiaan Janssen who helped us get a prioritised list of small (achievable) bugs that needed fixing. By involving the core in the pre-planning you will reduce the risk of working on things that are already getting added/fixed or working on something that is unlikely to get accepted into the core.   Make sure you have an expert or two   Although hackdays are for everyone, experienced or not. It really helps if you have someone knowledgeable in the room. We were blessed with 3 core team members but 1 would easily be enough. They can answer questions point people in the right direction and sense check what's being done. They needn't be core devs, but someone who knows Umbraco intimately.   Pico Scrum!   We used a technique during the hackday that I've named &quot;Pico Scrum&quot;. I based it on the principals of Scrum but in a highly compressed manner. The use of this technique helps keep everyone focused and gives regular points where if things are going wrong they can be raised and fixed. I'll blog a bit more about Pico Scrum another time, but here's an overview:   Start with an ordered list (backlog) of bugs/tasks/user stories  Break the room into teams of not more than 7 people (try and ensure one expert per team if possible!)  Ask each table to pick the items off of the backlog they think they can achieve in 1hr  Write the items on post its and stick them on the wall  Set a timer for 1hr and tell everyone to start!  During development any task should be reviewed/tested by another member of the team.&amp;nbsp;Pair programming is easier, but a simple code review will do.  When the hour is up, go round each table and ask: What's done? What are you stuck on (need help with)?, What do you want to drop (if it turned out to be too hard)?  Take 10-15mins to chat about any problems, look through the backlog generally have a break.  Then go back to step 3 and repeat!   Before you start you'll need to decide on a definition of done. This is an agreement on what constitutes that the task is actually complete. For our hack day it was:   Bug fixed Tested/reviewed by another dev  Patch created and attached to the case on umbraco issue tracker.      Tim 'Pico Scrum' Saunders looking jolly pleased with himself   Patch not Pull   One thing bearing in mind is that Sebastiaan recommended that for loads of small bug fixes it was easier to use patches rather than pull requests, as these were easier for the core to review and accept. Obviously for larger chunks a pull request is more appropriate.   People are giving up time to do this   One key thing to remember is people are giving up family, work or spare time to come to your hackday, so it's important that you use that time as productively as possible as no one wants to have a wasted afternoon. That's why we wanted to have a clear focus and rules to what we did so there was a clear benefit at the end of the day.   Have fun   Don't forget in the heat of trying to get stuff done that it's meant to be fun, so it doesn't really matter if people can't get a task complete or want to work in their own way. So above all be flexible and respond to the group as the day progresses.  If you do manage to organise a hackday and use this approach, I'd be really keen to hear how it went and any tweaks you may have made to the process to make it better.  Happy Hacking!  &amp;nbsp;</description>
         <author>Tim Saunders</author>
         <guid isPermaLink="false">http://thecogworks.co.uk/blog/posts/2012/november/organising-an-umbraco-hackday-the-cogworks-way/</guid>
         <pubDate>Wed, 21 Nov 2012 17:54:00 +0000</pubDate>
      </item>
      <item>
         <title>Beta-1 Release now available</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/11/19/beta-1-release-now-available/</link>
         <description>The beta-1 release of Umbraco 4.7.2 for mono is now available on github. I am dedicating this release to my uncle Erik Laksberg, with whom I started my computing journey, and who has sadly passed away last night. The release is fairly stable, and ready for some road testing. If you encounter any issues please [...]</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1856</guid>
         <pubDate>Mon, 19 Nov 2012 01:25:40 +0000</pubDate>
         <content:encoded><![CDATA[<p>The beta-1 release of Umbraco 4.7.2 for mono is now available on <a rel="nofollow" title="Umbraco 4.7.2 for mono" target="_blank" href="https://github.com/m57j75/umbraco-mono">github</a>. I am dedicating this release to my uncle Erik Laksberg,<br /> with whom I started my computing journey, and who has sadly passed away last night.</p>
<p>The release is fairly stable, and ready for some road testing. If you encounter any issues please submit them on <a rel="nofollow" title="Issues" target="_blank" href="https://github.com/m57j75/umbraco-mono/issues">git</a>.</p>
<p>There is one important known issue at this point: Lucene in membership searches do not return anything.<br />Also, there is a mono bug, that will lead to tabs being inserted progressively into any textarea &#8211; this is quite annoying but easily fixed in mono itself. However, I am likely to apply a patch for this before we leave the beta phase.</p>
<p>I will add a wiki page that talks about how to set up a site in the near future.</p>
<p>Binaries are not available at the moment, and the solution will only reliably build in debug mode (requires mono &gt; 2.11)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
      </item>
      <item>
         <title>Most downloaded CMS in 2012</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/Ovmgs61y1IU/most-downloaded-cms-in-2012.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/16/most-downloaded-cms-in-2012.aspx</guid>
         <pubDate>Fri, 16 Nov 2012 11:39:04 +0000</pubDate>
         <content:encoded><![CDATA[<p>Today the Champagne will flow at the Umbraco HQ Office as we passed an incredible milestone - we're now the most downloaded Web CMS on the Microsoft stack! </p><p><img src="http://umbraco.com/media/425905/screen_shot_2012-11-16_at_11.39.31_am_600x206.jpg"/><br /><em>Umbraco download stats from 2006 to 2012</em> </p><p>Ever since the early days of Umbraco, we've seen a steady growth in downloads (and obviously installs) and while the priority always have been around making an awesome product and fostering a friendly community, it does feel incredibly motivating that you can climb to the top with those values in place.</p><p><strong>The math</strong></p><p>Of course stats are a grateful thing and it's said that it's easy to bend them to whatever conclusion you want to achieve. So here's the math:</p><p><img src="http://umbraco.com/media/425923/the-math_600x370.jpg"/><br /><em>Umbraco download stats from 2012 - yellow circle shows ratio of download / visit</em></p><ol><li>Our source is download numbers at Microsofts website for open source projects called "<a rel="nofollow" target="_blank" href="http://codeplex.com">Codeplex</a>".</li><li>When you browse projects on Codeplex you can see statistics if you append /stats to the url - for instance, here's the <a rel="nofollow" target="_blank" href="http://umbraco.codeplex.com/stats">stats for Umbraco</a>.</li><li>We looked at download stats for the year of 2012, but as Codeplex tracks any download - whether it's the product, documentation, starter kit, etc - we had to clean the numbers based on downloads per visit ratio. As in no matter how much you download, at max you download the product once.</li><li>So while we'd love the idea that we were downloaded 341,620 times we need to adjust it based on our ratio of 1.19 downloads per visit. So this means that there's been <span>287,075 downloads of Umbraco in 2012 so far. </span></li><li><span>Then we did the same exercise with other CMS hosted on Codeplex and started dancing when we saw the results.</span></li></ol><p>More than a quarter of a million downloads in 2012 so far. Time to stop blogging and start popping the cork.</p><p>Have a great weekend!</p><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=Ovmgs61y1IU:koyX-F8OTz0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=Ovmgs61y1IU:koyX-F8OTz0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=Ovmgs61y1IU:koyX-F8OTz0:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/Ovmgs61y1IU" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>New Fun Project: YouRock Stickers!  Badges for real life.</title>
         <link>http://www.proworks.com/blog/2012/11/16/new-fun-project-yourock-stickers!-badges-for-real-life/</link>
         <description>&lt;p&gt;&lt;img width=&quot;200&quot; height=&quot;199&quot; alt=&quot;YouRock Logo&quot; class=&quot;border&quot; style=&quot;float:right;&quot;/&gt;Ever wanted to tell someone that they really helped you out or saved your day, but only knew their twitter account?  Ever wanted to give your team &quot;badges&quot; for doing the little things right and ultimately reaching the team goals? &lt;/p&gt;
&lt;p&gt;About a year ago, my answer was: &quot;Yes!&quot; to the second question.&lt;/p&gt;
&lt;p&gt;During Thanksgiving last year I was inspired by the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://h5yr.com/about/&quot;&gt;#h5yr movement in the Umbraco community&lt;/a&gt; (&quot;High Five You Rock&quot; started by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://twitter.com/alexkjerulf&quot;&gt;Alexander Kjerulf&lt;/a&gt; at CodeGarden '10) to give out little &quot;Thank You&quot;s to all my co-workers for being awesome.  As per usual at ProWorks, the idea turned into a web app idea and the idea of You Rock Stickers was born.&lt;/p&gt;
&lt;p&gt;We didn't get to start on it until this summer and even then we wanted to try it internally before spending too much time on it.  So our &quot;Minimum Viable Product&quot; was the whiteboard at the office.  We started giving stickers to each other at our project meetings for jobs well done and documented them on the whiteboard.&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;300&quot; height=&quot;225&quot; alt=&quot;HelmetStickersWhiteboard&quot;/&gt;&lt;/p&gt;
&lt;p&gt;People liked giving and recieving stickers, so we setup a &quot;Startup Day&quot; and built out the site.  Take look at the results and try it out at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://yourock.proworks.com/&quot;&gt;http://yourock.proworks.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Currently, you can sign it through Twitter and give stickers to other Twitter users.  Facebook and plain old Email are on the to do list, but you can share any sticker on Facebook and Google Plus and it looks good.&lt;/p&gt;
&lt;p&gt;Give it a try and let us know what you think about the project and any cool sticker ideas in the comments below!&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/11/16/new-fun-project-yourock-stickers!-badges-for-real-life/</guid>
         <pubDate>Fri, 16 Nov 2012 10:34:00 +0000</pubDate>
      </item>
      <item>
         <title>5 Impressive Umbraco Websites</title>
         <link>http://inaboxdesign.dk/blog/5-impressive-umbraco-websites/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=5-impressive-umbraco-websites</link>
         <description>&lt;p&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://inaboxdesign.dk/blog/5-impressive-umbraco-websites/&quot;&gt;5 Impressive Umbraco Websites&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Very recently I had the chance to see Per Ploug introduce Umbraco 4.9 and it made me want to look back into the CMS. For inspirations, I looked into existing Umbraco sites and here is the most interesting 5 I found. 1. Confio Software Confio&amp;#8217;s website is brilliantly interactive. And despite its complexity, it is easy [...]&lt;/p&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://inaboxdesign.dk/blog&quot;&gt;InaBox Design Blog - All about my work&lt;/a&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://inaboxdesign.dk/blog/?p=842</guid>
         <pubDate>Thu, 15 Nov 2012 08:58:28 +0000</pubDate>
         <content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="http://inaboxdesign.dk/blog/5-impressive-umbraco-websites/">5 Impressive Umbraco Websites</a></p><div style="clear:both;min-height:1px;height:3px;width:100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a rel="nofollow" class='shareaholic-fblike'></a><a rel="nofollow" class='shareaholic-googleplusone'></a><a rel="nofollow" class='shareaholic-tweetbutton'></a></div><div style="clear:both;min-height:1px;height:3px;width:100%;"></div><p>Very recently I had the chance to see Per Ploug introduce Umbraco 4.9 and it made me want to look back into the CMS. For inspirations, I looked into existing Umbraco sites and here is the most interesting 5 I found.</p>
<h4>1. <a rel="nofollow" title="Confio Software" target="_blank" href="http://www.confio.com/">Confio Software</a></h4>
<p>Confio&#8217;s website is brilliantly interactive. And despite its complexity, it is easy to navigate.</p>
<p style="text-align:center;"><a rel="nofollow" target="_blank" href="http://inaboxdesign.dk/blog/?attachment_id=843"><img class="aligncenter size-full wp-image-843" style="border:3px solid black;" title="confio" src="http://inaboxdesign.dk/blog/wp-content/uploads/confio.jpg" alt="Confio Software Website" width="600" height="450"/></a></p>
<h3 style="text-align:left;"></h3>
<h4 style="text-align:left;">2.<a rel="nofollow" title="Hasselblad" target="_blank" href="http://www.hasselblad.com/"> Hasselblad</a></h4>
<p>Another very complex and very well handled website.</p>
<p style="text-align:center;"><a rel="nofollow" target="_blank" href="http://inaboxdesign.dk/blog/?attachment_id=844"><img class="aligncenter size-full wp-image-844" style="border:3px solid black;" title="hasselblad" src="http://inaboxdesign.dk/blog/wp-content/uploads/hasselblad.jpg" alt="Hasselblad website" width="600" height="450"/></a></p>
<h3 style="text-align:left;"></h3>
<h4 style="text-align:left;">3. <a rel="nofollow" title="FXUK" target="_blank" href="http://www.fxuk.com/">FXUK</a></h4>
<p>FXUK is an interesting example of Umbraco in use. Almost the entire content on the website consists of images and videos.</p>
<p style="text-align:center;"><a rel="nofollow" target="_blank" href="http://inaboxdesign.dk/blog/?attachment_id=845"><img class="aligncenter size-full wp-image-845" style="border:3px solid black;" title="fxuk" src="http://inaboxdesign.dk/blog/wp-content/uploads/fxuk.jpg" alt="FXUK website" width="600" height="450"/></a></p>
<h3 style="text-align:left;"></h3>
<h4 style="text-align:left;">4. <a rel="nofollow" title="Education Impact" target="_blank" href="http://www.educationimpact.net/">Education Impact</a></h4>
<p>This page caught my attention because of the way it displays the news. The front-page grid layout attracts users and makes the news prominent.</p>
<p style="text-align:center;"><a rel="nofollow" target="_blank" href="http://inaboxdesign.dk/blog/?attachment_id=846"><img class="aligncenter size-full wp-image-846" style="border:3px solid black;" title="educationImpact" src="http://inaboxdesign.dk/blog/wp-content/uploads/educationImpact.jpg" alt="Education Impact front page" width="600" height="450"/></a></p>
<h3 style="text-align:left;"></h3>
<h4 style="text-align:left;">5. <a rel="nofollow" title="Stephen Kiers Blog" target="_blank" href="http://kiers.me/">Kiers.me</a></h4>
<p>This last website constitutes an interesting counterweight to the previous 4. It is a personal website and a blog by Stephen Kiers and it shows that Umbraco can serve well in any size.</p>
<p style="text-align:center;"><a rel="nofollow" target="_blank" href="http://inaboxdesign.dk/blog/?attachment_id=847"><img class="aligncenter size-full wp-image-847" style="border:3px solid black;" title="Kiers.me" src="http://inaboxdesign.dk/blog/wp-content/uploads/kiers.jpg" alt="Stephen Kiers Blog" width="600" height="450"/></a></p>
<div class="shr-publisher-842"></div><p><a rel="nofollow" target="_blank" href="http://inaboxdesign.dk/blog">InaBox Design Blog - All about my work</a></p>]]></content:encoded>
      </item>
      <item>
         <title>Details of security issue in 4.10</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/naefhAZuYeU/details-of-security-issue-in-410.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/21/details-of-security-issue-in-410.aspx</guid>
         <pubDate>Wed, 14 Nov 2012 17:30:11 +0000</pubDate>
         <content:encoded><![CDATA[<p><span>On Nov 14, 2012 we discovered a security flaw in the Umbraco 4.10.0 codebase which we released a </span><a rel="nofollow" target="_blank" href="http://umbraco.com/follow-us/blog-archive/2012/11/14/security-update-for-4100.aspx" title="4.10 Security Patch">patch for on the same day</a><span>.  The security issue relates to a fix that was addressed in 4.10.0 regarding starter kit installation in which the application domain wasn't restarted properly during install which was causing unexpected results.  The fix applied uses a new REST service to install the starter kit packges but unfortunately this REST service wasn't properly secured and thus exposes this REST service as a public API. This meant that it may be possible for someone to remotely install a package or restart your application domain. </span></p><p>We strongly urge everybody with a 4.10.0 site to upgrade to 4.10.1 <strong>as soon as possible</strong>. Versions OTHER than 4.10.0 are NOT affected at all, so you won't need to take any action for those. Please rest assured that this fix has been merged into the 4.11.0 branch so it will definitely not be an issue moving forward.</p><p>Again, our sincere apologies for the incovenience!</p><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=naefhAZuYeU:EJTTC5Fjcdo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=naefhAZuYeU:EJTTC5Fjcdo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=naefhAZuYeU:EJTTC5Fjcdo:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/naefhAZuYeU" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Security update for 4.10.0</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/vP0Z6pKjfxo/security-update-for-4100.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/14/security-update-for-4100.aspx</guid>
         <pubDate>Wed, 14 Nov 2012 16:37:21 +0000</pubDate>
         <content:encoded><![CDATA[<p><br />Just now, Shannon stumbled upon a bug in the recent 4.10.0 release, that exposes a security issue. </p><p>This security problem <strong>ONLY affects installs of 4.10.0</strong> and is easily fixed by downloading the patch file <a rel="nofollow" target="_blank" href="http://umbraco.codeplex.com/releases/view/91737">on CodePlex to upgrade</a> your site to 4.10.1.</p><p>How to upgrade:</p><ul><li>Download the <a rel="nofollow" target="_blank" href="http://umbraco.codeplex.com/downloads/get/531113">UmbracoCms.Patch.4.10.1.zip</a></li><li><span>If you </span>extract the files using Window's built in compression tool you will need to 'UNBLOCK' the ZIP file<span>from the Properties Dialog before doing so. Otherwise your installation may not include all required files.</span></li><li>Place the dll files you find in the patch zip file in your /bin folder</li><li>Change the version number in your web.config from 4.10.0 to 4.10.1</li><ul><li>Or if you still have the install folder in place, run the installer, it will do the exact same thing (update the version number). There are no database upgrades.</li></ul><li>All done!</li></ul><p>We've update the version checker so anybody running 4.10.0 should see an upgrade message soon.</p><p>We urge everybody with a 4.10.0 site to upgrade to 4.10.1 <strong>as soon as possible</strong>. Versions OTHER than 4.10.0 are NOT affected at all, so you won't need to take any action for those.</p><p>Our sincere apologies for the incovenience!</p><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=vP0Z6pKjfxo:SBQ2PGJwJK8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=vP0Z6pKjfxo:SBQ2PGJwJK8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=vP0Z6pKjfxo:SBQ2PGJwJK8:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/vP0Z6pKjfxo" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Umbraco 4.10.0</title>
         <link>http://www.proworks.com/blog/2012/11/12/umbraco-4100/</link>
         <description>&lt;p&gt;New to Umbraco 4.10.0 is the integration of MVC. Instead of templates using WebForms you can use MVC views. To do this, in the file ~/config/umbracoSettings change the line &lt;/p&gt;
&lt;p&gt;&amp;lt;defaultRenderingEngine&amp;gt;WebForms&amp;lt;/defaultRenderingEngine&amp;gt;&lt;/p&gt;
&lt;p&gt;to &lt;/p&gt;
&lt;p&gt;&amp;lt;defaultRenderingEngine&amp;gt;Mvc&amp;lt;/defaultRenderingEngine&amp;gt;&lt;/p&gt;
&lt;p&gt;and from now on whenever you create a new template you will be using MVC views. If you want to use inheritance on your templates then it is as easy as changing&lt;/p&gt;
&lt;p&gt;@{&lt;br /&gt; Layout = null;&lt;br /&gt;} to&lt;/p&gt;
&lt;p&gt;@{&lt;br /&gt; Layout = &quot;MasterPage.cshtml&quot;; &amp;lt;-- Inherits MasterPage template&lt;br /&gt;} You can also use the drop down menu and set the template you want it to be under.&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;498&quot; height=&quot;115&quot; alt=&quot;templateinheritance&quot;/&gt;&lt;/p&gt;
&lt;p&gt;A few of the tags which are important for your MVC views are &lt;/p&gt;
&lt;p&gt;@RenderSection(&quot;head&quot;, false) which is equivilant to &amp;lt;asp:contentPlaceHolder runat=&quot;server&quot; id=&quot;head&quot;&amp;gt; and @RenderBody() which will render any content from a child template which isn't inside a named section.&lt;/p&gt;
&lt;p&gt;For rendering macros in a MVC view @Umbraco.RenderMacro(&quot;macroAlias&quot;, new { parameterName = &quot;Parameter Value&quot;, secondParameter = &quot;Second Value&quot; }).&lt;/p&gt;
&lt;p&gt;Also important is the new UmbracoHelper, @Umbraco. This is essentially @library. One more feature which I found important is if you have existing WebForms and you want to switch them over then you can create a .cshtml file with the same name as your WebForm and umbraco will automagically use your .cshtml file.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Get it straight from the source! (Where I got my information)&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://umbraco.com/follow-us/blog-archive/2012/11/8/umbraco-4100-released.aspx&quot; title=&quot;Blog post by Sebastiaan Janssen&quot;&gt;Blog Post By S&lt;/a&gt;&lt;span&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://umbraco.com/follow-us/blog-archive/2012/11/8/umbraco-4100-released.aspx&quot; title=&quot;Blog post by Sebastiaan Janssen&quot;&gt;ebastiaan Janssen&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://docs.google.com/document/d/19Ids3S57BGnKbGkG-eWACYa0fgTLKiTohsgcOPHBS8Q/edit#heading=h.bztv091ey11z&quot; title=&quot;Pipeline&quot;&gt;Umbraco new pipeline by &lt;/a&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://docs.google.com/document/d/19Ids3S57BGnKbGkG-eWACYa0fgTLKiTohsgcOPHBS8Q/edit#heading=h.bztv091ey11z&quot; title=&quot;Pipeline&quot;&gt;Stephan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/documentation/Reference/Mvc/&quot; title=&quot;MVC Documentation&quot;&gt;MVC Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://shazwazza.com/post/Native-MVC-support-in-Umbraco-coming-very-soon!.aspx&quot; title=&quot;Shannon Deminick's Blog&quot;&gt;Shannon Deminick's Blog&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://shazwazza.com/post/Using-IoC-with-Umbraco-MVC.aspx&quot; title=&quot;Shannon Deminick's Blog&quot;&gt;A Second &lt;/a&gt;&lt;span&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://shazwazza.com/post/Using-IoC-with-Umbraco-MVC.aspx&quot; title=&quot;Shannon Deminick's Blog&quot;&gt;Shannon Deminick's Blog&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://umbraco.com/follow-us/blog-archive/2012/10/30/getting-started-with-mvc-in-umbraco-410.aspx&quot; title=&quot;New to MVC&quot;&gt;And if you are new to MVC&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/11/12/umbraco-4100/</guid>
         <pubDate>Mon, 12 Nov 2012 10:44:11 +0000</pubDate>
      </item>
      <item>
         <title>Getting started with Contour 3.0 Beta</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/vimwmglKm8s/getting-started-with-contour-30-beta.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/9/getting-started-with-contour-30-beta.aspx</guid>
         <pubDate>Fri, 09 Nov 2012 15:27:30 +0000</pubDate>
         <content:encoded><![CDATA[<div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=vimwmglKm8s:GSDDciZcR3Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=vimwmglKm8s:GSDDciZcR3Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=vimwmglKm8s:GSDDciZcR3Q:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/vimwmglKm8s" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Contour 3.0 Features: Easier to work with lots of forms</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/72ibp0diSKA/contour-30-features-easier-to-work-with-lots-of-forms.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/9/contour-30-features-easier-to-work-with-lots-of-forms.aspx</guid>
         <pubDate>Fri, 09 Nov 2012 10:53:55 +0000</pubDate>
         <content:encoded><![CDATA[<div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=72ibp0diSKA:Zhf7sPlnkvI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=72ibp0diSKA:Zhf7sPlnkvI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=72ibp0diSKA:Zhf7sPlnkvI:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/72ibp0diSKA" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Contour 3.0 Code First, Member registration, profile, login, change password</title>
         <link>http://www.nibble.be/?p=205</link>
         <description>The upcoming Contour 3.0 release features a new code first framework that is outlined in this post on umbraco.com
To add some more examples I’ve updated the example with some additional member forms:
Profile form

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &quot;Courier New&quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd [...]</description>
         <guid isPermaLink="false">http://www.nibble.be/?p=205</guid>
         <pubDate>Fri, 09 Nov 2012 10:25:26 +0000</pubDate>
         <content:encoded><![CDATA[<p>The upcoming <a rel="nofollow" target="_blank" href="http://umbraco.com/follow-us/blog-archive/2012/11/6/contour-30-beta.aspx">Contour 3.0</a> release features a new code first framework that is outlined in this <a rel="nofollow" target="_blank" href="http://umbraco.com/follow-us/blog-archive/2012/11/6/contour-30-features-code-first.aspx">post on umbraco.com</a></p>
<p>To add some more examples I’ve updated the example with some additional member forms:</p>
<h2>Profile form</h2>
<style type="text/css">
.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}</style>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">using</span> System;</pre>
<pre><span class="kwrd">using</span> System.Collections.Generic;</pre>
<pre class="alt"><span class="kwrd">using</span> Umbraco.Forms.CodeFirst;</pre>
<pre><span class="kwrd">using</span> Umbraco.Forms.Core.Providers.FieldTypes;</pre>
<pre class="alt"><span class="kwrd">using</span> umbraco.cms.businesslogic.member;</pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">namespace</span> Contour.CodeFirstExample</pre>
<pre>{</pre>
<pre class="alt">    [Form(<span class="str">&quot;Member/Profile&quot;</span>, ShowValidationSummary = <span class="kwrd">true</span>, MessageOnSubmit = <span class="str">&quot;Profile updated!&quot;</span>)]</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">class</span> Profile: FormBase</pre>
<pre class="alt">    {</pre>
<pre>        [Field(<span class="str">&quot;Profile&quot;</span>, FormFieldsets.Details,</pre>
<pre class="alt">            Mandatory = <span class="kwrd">true</span>,</pre>
<pre>            DefaultValue = <span class="str">&quot;{member.name}&quot;</span>)]</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">string</span> Name { get; set; }</pre>
<pre>&#160;</pre>
<pre class="alt">        [Field(<span class="str">&quot;Profile&quot;</span>, FormFieldsets.Details,</pre>
<pre>            Mandatory = <span class="kwrd">true</span>,</pre>
<pre class="alt">            Regex = <span class="str">@&quot;(&#92;w[-._&#92;w]*&#92;w@&#92;w[-._&#92;w]*&#92;w&#92;.&#92;w{2,3})&quot;</span>,</pre>
<pre>            DefaultValue = <span class="str">&quot;{member.email}&quot;</span>)]</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">string</span> Email { get; set; }</pre>
<pre>&#160;</pre>
<pre class="alt">        [Field(<span class="str">&quot;Profile&quot;</span>, FormFieldsets.Details,</pre>
<pre>            Type = <span class="kwrd">typeof</span>(FileUpload),</pre>
<pre class="alt">            DefaultValue = <span class="str">&quot;{member.avatar}&quot;</span>)]</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">string</span> Avatar { get; set; }</pre>
<pre class="alt">&#160;</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">override</span> IEnumerable&lt;Exception&gt; Validate()</pre>
<pre class="alt">        {</pre>
<pre>            var e = <span class="kwrd">new</span> List&lt;Exception&gt;();</pre>
<pre class="alt">&#160;</pre>
<pre>            var m = Member.GetCurrentMember();</pre>
<pre class="alt">&#160;</pre>
<pre>            <span class="kwrd">if</span> (m != <span class="kwrd">null</span>)</pre>
<pre class="alt">            {</pre>
<pre>                <span class="kwrd">if</span> (m.Email != Email)</pre>
<pre class="alt">                {</pre>
<pre>                    <span class="kwrd">if</span> (Member.GetMemberFromLoginName(Email) != <span class="kwrd">null</span>)</pre>
<pre class="alt">                        e.Add(<span class="kwrd">new</span> Exception(<span class="str">&quot;Email already in use&quot;</span>));</pre>
<pre>                }</pre>
<pre class="alt">            }</pre>
<pre>&#160;</pre>
<pre class="alt">            <span class="kwrd">return</span> e;</pre>
<pre>&#160;</pre>
<pre class="alt">        }</pre>
<pre>&#160;</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Submit()</pre>
<pre>        {</pre>
<pre class="alt">            var m = Member.GetCurrentMember();</pre>
<pre>&#160;</pre>
<pre class="alt">            <span class="kwrd">if</span> (m != <span class="kwrd">null</span>)</pre>
<pre>            {</pre>
<pre class="alt">                m.Email = Email;</pre>
<pre>                m.LoginName = Email;</pre>
<pre class="alt">                m.Text = Name;</pre>
<pre>                <span class="rem">//asign custom properties</span></pre>
<pre class="alt">                <span class="kwrd">if</span> (!<span class="kwrd">string</span>.IsNullOrEmpty(Avatar))</pre>
<pre>                    m.getProperty(<span class="str">&quot;avatar&quot;</span>).Value = Avatar;</pre>
<pre class="alt">            }</pre>
<pre>        }</pre>
<pre class="alt">    }</pre>
<pre>}</pre>
</div>
<style type="text/css">
</style>
<h2>&#160;</h2>
<h2>Change password form</h2>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">using</span> System;</pre>
<pre><span class="kwrd">using</span> System.Collections.Generic;</pre>
<pre class="alt"><span class="kwrd">using</span> Umbraco.Forms.CodeFirst;</pre>
<pre><span class="kwrd">using</span> Umbraco.Forms.Core.Providers.FieldTypes;</pre>
<pre class="alt"><span class="kwrd">using</span> umbraco.cms.businesslogic.member;</pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">namespace</span> Contour.CodeFirstExample</pre>
<pre>{</pre>
<pre class="alt">    [Form(<span class="str">&quot;Member/Change password&quot;</span>, ShowValidationSummary = <span class="kwrd">true</span>, MessageOnSubmit = <span class="str">&quot;Password updated!&quot;</span>)]</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">class</span> ChangePassword: FormBase</pre>
<pre class="alt">    {</pre>
<pre>        [Field(<span class="str">&quot;Change password&quot;</span>, <span class="str">&quot;&quot;</span>,</pre>
<pre class="alt">            Type = <span class="kwrd">typeof</span>(Password),</pre>
<pre>            Mandatory = <span class="kwrd">true</span>)]</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">string</span> Password { get; set; }</pre>
<pre>&#160;</pre>
<pre class="alt">        [Field(<span class="str">&quot;Change password&quot;</span>, <span class="str">&quot;&quot;</span>,</pre>
<pre>            Type = <span class="kwrd">typeof</span>(Password),</pre>
<pre class="alt">            Mandatory = <span class="kwrd">true</span>)]</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">string</span> RepeatPassword { get; set; }</pre>
<pre class="alt">&#160;</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">override</span> IEnumerable&lt;Exception&gt; Validate()</pre>
<pre class="alt">        {</pre>
<pre>            var e = <span class="kwrd">new</span> List&lt;Exception&gt;();</pre>
<pre class="alt">         </pre>
<pre>            <span class="rem">//makes sure the passwords are identical</span></pre>
<pre class="alt">            <span class="kwrd">if</span> (Password != RepeatPassword)</pre>
<pre>                e.Add(<span class="kwrd">new</span> Exception(<span class="str">&quot;Passwords must match&quot;</span>));</pre>
<pre class="alt">&#160;</pre>
<pre>            <span class="kwrd">return</span> e;</pre>
<pre class="alt">        }</pre>
<pre>&#160;</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Submit()</pre>
<pre>        {</pre>
<pre class="alt">            var m = Member.GetCurrentMember();</pre>
<pre>&#160;</pre>
<pre class="alt">            <span class="kwrd">if</span>(m != <span class="kwrd">null</span>)</pre>
<pre>                m.Password = Password;</pre>
<pre class="alt">        }</pre>
<pre>    }</pre>
<pre class="alt">}</pre>
</div>
<style type="text/css">
</style>
<h2>&#160;</h2>
<h2>Login form</h2>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">using</span> System;</pre>
<pre><span class="kwrd">using</span> System.Collections.Generic;</pre>
<pre class="alt"><span class="kwrd">using</span> Umbraco.Forms.CodeFirst;</pre>
<pre><span class="kwrd">using</span> Umbraco.Forms.Core.Providers.FieldTypes;</pre>
<pre class="alt"><span class="kwrd">using</span> umbraco.cms.businesslogic.member;</pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">namespace</span> Contour.CodeFirstExample</pre>
<pre>{</pre>
<pre class="alt">    [Form(<span class="str">&quot;Member/Login&quot;</span>, ShowValidationSummary = <span class="kwrd">true</span>, MessageOnSubmit =<span class="str">&quot;You are now logged in&quot;</span>)]</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">class</span> Login: FormBase</pre>
<pre class="alt">    {</pre>
<pre>        [Field(<span class="str">&quot;Login&quot;</span>, <span class="str">&quot;&quot;</span>,</pre>
<pre class="alt">           Mandatory = <span class="kwrd">true</span>,</pre>
<pre>           Regex = <span class="str">@&quot;(&#92;w[-._&#92;w]*&#92;w@&#92;w[-._&#92;w]*&#92;w&#92;.&#92;w{2,3})&quot;</span>)]</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">string</span> Email { get; set; }</pre>
<pre>&#160;</pre>
<pre class="alt">        [Field(<span class="str">&quot;Login&quot;</span>, <span class="str">&quot;&quot;</span>,</pre>
<pre>            Type = <span class="kwrd">typeof</span>(Password),</pre>
<pre class="alt">            Mandatory = <span class="kwrd">true</span>)]</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">string</span> Password { get; set; }</pre>
<pre class="alt">&#160;</pre>
<pre>&#160;</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> IEnumerable&lt;Exception&gt; Validate()</pre>
<pre>        {</pre>
<pre class="alt">            var e = <span class="kwrd">new</span> List&lt;Exception&gt;();</pre>
<pre>&#160;</pre>
<pre class="alt">            <span class="kwrd">if</span>(Member.GetMemberFromLoginName(Email) == <span class="kwrd">null</span>)</pre>
<pre>                e.Add(<span class="kwrd">new</span> Exception(<span class="str">&quot;No member found with that email address&quot;</span>));</pre>
<pre class="alt">            <span class="kwrd">else</span> <span class="kwrd">if</span> (Member.GetMemberFromLoginNameAndPassword(Email, Password) == <span class="kwrd">null</span>)</pre>
<pre>                e.Add(<span class="kwrd">new</span> Exception(<span class="str">&quot;Incorrect password&quot;</span>));</pre>
<pre class="alt">&#160;</pre>
<pre>            <span class="kwrd">return</span> e;</pre>
<pre class="alt">        }</pre>
<pre>&#160;</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Submit()</pre>
<pre>        {</pre>
<pre class="alt">           var m = Member.GetMemberFromLoginNameAndPassword(Email, Password);</pre>
<pre>           <span class="kwrd">if</span> (m != <span class="kwrd">null</span>)</pre>
<pre class="alt">               Member.AddMemberToCache(m);</pre>
<pre>        }</pre>
<pre class="alt">    }</pre>
<pre>}</pre>
</div>
<style type="text/css">
</style>
<h2>&#160;</h2>
<h2>Registration form</h2>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">using</span> System;</pre>
<pre><span class="kwrd">using</span> System.Collections.Generic;</pre>
<pre class="alt"><span class="kwrd">using</span> Umbraco.Forms.CodeFirst;</pre>
<pre><span class="kwrd">using</span> umbraco.cms.businesslogic.member;</pre>
<pre class="alt"><span class="kwrd">using</span> umbraco.BusinessLogic;</pre>
<pre><span class="kwrd">using</span> Umbraco.Forms.Core.Providers.FieldTypes;</pre>
<pre class="alt">&#160;</pre>
<pre><span class="kwrd">namespace</span> Contour.CodeFirstExample</pre>
<pre class="alt">{</pre>
<pre>    </pre>
<pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">enum</span> FormPages</pre>
<pre>    {</pre>
<pre class="alt">        Registration</pre>
<pre>    }</pre>
<pre class="alt">&#160;</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">enum</span> FormFieldsets</pre>
<pre class="alt">    {</pre>
<pre>        Details</pre>
<pre class="alt">    }</pre>
<pre>&#160;</pre>
<pre class="alt">    [Form(<span class="str">&quot;Member/Registration&quot;</span>, ShowValidationSummary = <span class="kwrd">true</span>, MessageOnSubmit=<span class="str">&quot;You are now registered!&quot;</span>)]</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">class</span> Registration: FormBase</pre>
<pre class="alt">    {</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">const</span> <span class="kwrd">string</span> MemberTypeAlias = <span class="str">&quot;Member&quot;</span>;</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">const</span> <span class="kwrd">string</span> MemberGroupName = <span class="str">&quot;Authenticated&quot;</span>;</pre>
<pre>&#160;</pre>
<pre class="alt">        [Field(FormPages.Registration,FormFieldsets.Details,</pre>
<pre>            Mandatory= <span class="kwrd">true</span>)]</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">string</span> Name { get; set; }</pre>
<pre>&#160;</pre>
<pre class="alt">        [Field(FormPages.Registration, FormFieldsets.Details,</pre>
<pre>            Mandatory = <span class="kwrd">true</span>,</pre>
<pre class="alt">            Regex = <span class="str">@&quot;(&#92;w[-._&#92;w]*&#92;w@&#92;w[-._&#92;w]*&#92;w&#92;.&#92;w{2,3})&quot;</span>)]</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">string</span> Email { get; set; }</pre>
<pre class="alt">&#160;</pre>
<pre>        [Field(FormPages.Registration, FormFieldsets.Details, </pre>
<pre class="alt">            Type = <span class="kwrd">typeof</span>(Password),</pre>
<pre>            Mandatory = <span class="kwrd">true</span>)]</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">string</span> Password { get; set; }</pre>
<pre>&#160;</pre>
<pre class="alt">        [Field(FormPages.Registration, FormFieldsets.Details, </pre>
<pre>            Type = <span class="kwrd">typeof</span>(Password),</pre>
<pre class="alt">            Mandatory = <span class="kwrd">true</span>)]</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">string</span> RepeatPassword { get; set; }</pre>
<pre class="alt">&#160;</pre>
<pre>        [Field(FormPages.Registration, FormFieldsets.Details, </pre>
<pre class="alt">            Type = <span class="kwrd">typeof</span>(FileUpload))]</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">string</span> Avatar { get; set; }</pre>
<pre class="alt">&#160;</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">override</span> IEnumerable&lt;Exception&gt; Validate()</pre>
<pre class="alt">        {</pre>
<pre>            var e = <span class="kwrd">new</span> List&lt;Exception&gt;();</pre>
<pre class="alt">            <span class="rem">//checks if email isn&#8217;t in use</span></pre>
<pre>            <span class="kwrd">if</span>(Member.GetMemberFromLoginName(Email) != <span class="kwrd">null</span>)</pre>
<pre class="alt">                e.Add(<span class="kwrd">new</span> Exception(<span class="str">&quot;Email already in use&quot;</span>));</pre>
<pre>            <span class="rem">//makes sure the passwords are identical</span></pre>
<pre class="alt">            <span class="kwrd">if</span> (Password != RepeatPassword)</pre>
<pre>                e.Add(<span class="kwrd">new</span> Exception(<span class="str">&quot;Passwords must match&quot;</span>));</pre>
<pre class="alt">&#160;</pre>
<pre>            <span class="kwrd">return</span> e;</pre>
<pre class="alt">        }</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Submit()</pre>
<pre class="alt">        {</pre>
<pre>            <span class="rem">//get a membertype by its alias</span></pre>
<pre class="alt">            var mt = MemberType.GetByAlias(MemberTypeAlias); <span class="rem">//needs to be an existing membertype</span></pre>
<pre>            <span class="rem">//get the user(0)</span></pre>
<pre class="alt">            var user = <span class="kwrd">new</span> User(0);</pre>
<pre>            <span class="rem">//create a new member with Member.MakeNew</span></pre>
<pre class="alt">            var member = Member.MakeNew(Name, mt, user);</pre>
<pre>            <span class="rem">//assign email, password and loginname</span></pre>
<pre class="alt">            member.Email = Email;</pre>
<pre>            member.Password = Password;</pre>
<pre class="alt">            member.LoginName = Email;</pre>
<pre>            <span class="rem">//asign custom properties</span></pre>
<pre class="alt">            <span class="kwrd">if</span>(!<span class="kwrd">string</span>.IsNullOrEmpty(Avatar))</pre>
<pre>                member.getProperty(<span class="str">&quot;avatar&quot;</span>).Value = Avatar;</pre>
<pre class="alt">            <span class="rem">//asssign a group, get the group by name, and assign its Id</span></pre>
<pre>            var group = MemberGroup.GetByName(MemberGroupName); <span class="rem">//needs to be an existing MemberGroup</span></pre>
<pre class="alt">            member.AddGroup(group.Id);</pre>
<pre>            <span class="rem">//generate the member xml with .XmlGenerate</span></pre>
<pre class="alt">            member.XmlGenerate(<span class="kwrd">new</span> System.Xml.XmlDocument());</pre>
<pre>            <span class="rem">//add the member to the website cache to log the member in</span></pre>
<pre class="alt">            Member.AddMemberToCache(member);</pre>
<pre>            </pre>
<pre class="alt">        }</pre>
<pre>    }</pre>
<pre class="alt">}</pre>
</div>
<style type="text/css">
</style>

<p>The code assumes there is a membertype called Member with a additional property with the alias avatar and a membergroup called Authenticated</p>
<p>For more member properties the code needs to be updated…</p>
<p>After deploying you should end up with the following forms</p>
<p><a rel="nofollow" target="_blank" href="http://www.nibble.be/wp-content/uploads/2012/11/image.png"><img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.nibble.be/wp-content/uploads/2012/11/image-thumb.png" width="240" height="181"/></a></p>
<p><a rel="nofollow" target="_blank" href="https://bitbucket.org/starfighter83/contour.codefirstexample">Full sourcecode is available here</a></p>]]></content:encoded>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>The ultimate urlReplacing character list for Umbraco</title>
         <link>http://blogs.thesitedoctor.co.uk/tim/2012/11/09/The+Ultimate+UrlReplacing+Character+List+For+Umbraco.aspx</link>
         <description>&lt;p&gt;
If you're not already familiar with the built in character replacing functionality
for urls in Umbraco then I highly recommend you check out the umbracoSettings.config
file's urlReplacing node section:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;urlReplacing&lt;/strong&gt;: List of characters which will be replaced in generated
urls. This ensures that urls does not contain characters that search engines or browsers
do not understand. Umbraco comes with a predefined set of characters and you can add
your own
&lt;/p&gt;
&lt;p&gt;
One thing I find we often forget to update is the default list of characters -which
isn't that conclusive so I thought I would update our default and share it for others
so without further ado, here's the list:
&lt;/p&gt;
&lt;div id=&quot;scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:ebd3ff99-6313-4422-9f47-d61f88c59ea3&quot; class=&quot;wlWriterSmartContent&quot; style=&quot;float:none;padding-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;&quot;&gt;
&lt;pre&gt;&amp;lt;urlReplacing removeDoubleDashes=&amp;quot;true&amp;quot;&amp;gt;
      &amp;lt;char org=&amp;quot; &amp;quot;&amp;gt;-&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;!&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;%&amp;quot;&amp;gt;percent&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;&amp;amp;amp;&amp;quot;&amp;gt;and&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;&amp;amp;gt;&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;&amp;amp;lt;&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;&amp;amp;quot;&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;'&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;(&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;)&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;*&amp;quot;&amp;gt;star&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;+&amp;quot;&amp;gt;plus&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;,&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;.&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;/&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;:&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;;&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;=&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;?&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;@&amp;quot;&amp;gt;at&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;[&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;]&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;^&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;_&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;`&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;{&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;}&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;¦&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;¬&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ß&amp;quot;&amp;gt;ss&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ä&amp;quot;&amp;gt;ae&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;Ä&amp;quot;&amp;gt;ae&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;å&amp;quot;&amp;gt;aa&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;æ&amp;quot;&amp;gt;ae&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ö&amp;quot;&amp;gt;oe&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;Ö&amp;quot;&amp;gt;oe&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ø&amp;quot;&amp;gt;oe&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ü&amp;quot;&amp;gt;ue&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;-&amp;quot;&amp;gt;-&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;'&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;'&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;$&amp;quot;&amp;gt;USD&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;£&amp;quot;&amp;gt;GBP&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;?&amp;quot;&amp;gt;EUR&amp;lt;/char&amp;gt;
&amp;lt;/urlReplacing&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
I hope this is of use to someone. If you have ones that I've missed please let me
know and I'll get them added. In some ways it would be nice if this was a regex rather
than a character replace. Maybe that's a commit to the core I would look at one day.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt; It would appear that my blogging engine/syntax highlighter
is causing issues, the last rule should be a Euro symbol (?) and the quotes need to
be encoded for XML e.g. &amp;amp;quot;. Thanks &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/jbclarke&quot;&gt;@jbclarke&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/greystate&quot;&gt;@greystate&lt;/a&gt; for
spotting those
&lt;/p&gt;
&lt;img width=&quot;0&quot; height=&quot;0&quot; src=&quot;http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=4edc85ce-fa51-4c4a-b7d9-724722b88aff&quot;/&gt;</description>
         <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,4edc85ce-fa51-4c4a-b7d9-724722b88aff.aspx</guid>
         <pubDate>Fri, 09 Nov 2012 08:52:00 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco 4.10.0 released</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/G9Pk4EtRX1k/umbraco-4100-released.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/8/umbraco-4100-released.aspx</guid>
         <pubDate>Thu, 08 Nov 2012 17:19:05 +0000</pubDate>
         <content:encoded><![CDATA[<p>Ladies and gentlemen. The moment you've been waiting for since CodeGarden 2012 has arrived.</p><p>Drumroll please.... : <strong>Umbraco 4.10.0 Final is here, TADA!!</strong></p><p><img src="http://umbraco.com/media/424350/tada.jpg"/></p><p>A summary of the most important points out of the previous blog post (about the release candidate):</p><p>There's an awesome, mind boggling, <a rel="nofollow" target="_blank" href="http://issues.umbraco.org/issues/U4?p=0&amp;q=Due+in+version%3A+4.10.0&amp;f=false">list of changes</a> for this version, including 71 bug fixes 34 of tem are community contributions, a large portion of which were submitted during the recent Hackathon the day before the <a rel="nofollow" target="_blank" href="http://umbracoukfestival.co.uk/">Umbraco UK Festival</a><span>.</span></p><p>Stéphane did an awesome job on the new request pipeline, he also managed to explain what he has done so that he's not the only one to understand it now, go read it here (it's human readable, not technical):<br /><a rel="nofollow" target="_blank" href="https://docs.google.com/document/d/19Ids3S57BGnKbGkG-eWACYa0fgTLKiTohsgcOPHBS8Q/edit">https://docs.google.com/document/d/19Ids3S57BGnKbGkG-eWACYa0fgTLKiTohsgcOPHBS8Q/edit<br /></a><a rel="nofollow" target="_blank" href="https://docs.google.com/document/d/1JEwVCdpIhxBUS7c3hunjaFRAXLQIZnkvErSleVA9zro/edit">https://docs.google.com/document/d/1JEwVCdpIhxBUS7c3hunjaFRAXLQIZnkvErSleVA9zro/edit</a></p><p>Shannon, after adding MVC to Umbraco (like a boss!) has made the most documentation ever made for any Umbraco release on the <a rel="nofollow" target="_blank" href="http://our.umbraco.org/documentation/Reference/Mvc/">subject of the MVC bits in 4.10.0</a>. He's also <a rel="nofollow" target="_blank" href="http://shazwazza.com/post/Native-MVC-support-in-Umbraco-coming-very-soon!.aspx">has done a few</a> <a rel="nofollow" target="_blank" href="http://shazwazza.com/post/Using-IoC-with-Umbraco-MVC.aspx">blog posts</a> and Peter has written up <a rel="nofollow" target="_blank" href="http://umbraco.com/follow-us/blog-archive/2012/10/30/getting-started-with-mvc-in-umbraco-410.aspx">a MVC primer</a> on this blog.</p><p><span>Does that mean you can only use MVC or WebForms, but not both? </span><span>No! You can actually use both, more choice for everybody (iz gooood).</span></p><h2>Since the RC</h2><p>What's new since we released the Release Candidate last week? Well basically nothing but bugfixes Thanks to every one of you out there who's been testing the RC we managed to fix 2 major bugs before the release and plenty of smaller annoyances!</p><p>One thing to note is that we now support <strong>Medium Trust</strong> fully again (we accidentally broke that in 4.9.0). To make sure we don't have any more accidents like that, we will always be developing the core of Umbraco with medium trust turned on. The release version will not be limited in any way, but we've developed everything under medium trust so it should just work on those medtrust-only hosters out there.</p><h2>Work it</h2><p>Needless to say, we are very happy to get this release out the door, it's been highly anticipated and we believe it's an awesomely solid new version of Umbraco. We hope you'll enjoy it too! <br /><a rel="nofollow" target="_blank" href="http://umbraco.codeplex.com/releases/view/91737">Go forth and download</a>.</p><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=G9Pk4EtRX1k:ggT16aL8jzY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=G9Pk4EtRX1k:ggT16aL8jzY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=G9Pk4EtRX1k:ggT16aL8jzY:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/G9Pk4EtRX1k" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Contour 3.0 Features: Full control over form markup</title>
         <link>http://feedproxy.google.com/~r/UmbracoBlog/~3/wjwWjVPA_E0/contour-30-features-full-control-over-form-markup.aspx</link>
         <guid isPermaLink="false">http://umbraco.com/follow-us/blog-archive/2012/11/8/contour-30-features-full-control-over-form-markup.aspx</guid>
         <pubDate>Thu, 08 Nov 2012 10:43:00 +0000</pubDate>
         <content:encoded><![CDATA[<p>Yup you’ve read it right, coming up in <a rel="nofollow" target="_blank" href="http://umbraco.com/follow-us/blog-archive/2012/11/6/contour-30-beta.aspx">Contour 3.0</a> is <strong>full markup control</strong>!</p><p>Contour 3.0 comes with a new macro that uses razor to render the form instead of a .net usercontrol (so you can get rid of the form with runat server attribute too!).</p><p>The main advantage of this new macro is that the razor views used to render the form can be customized to your needs! So the markup that contour generates isn’t fixed anymore and can be altered depending on the code you want to output!</p><p>For a short intro check out this demo:</p><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=wjwWjVPA_E0:DSmgc0dqn6Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/UmbracoBlog?a=wjwWjVPA_E0:DSmgc0dqn6Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/UmbracoBlog?i=wjwWjVPA_E0:DSmgc0dqn6Y:V_sGLiPBpWU" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/UmbracoBlog/~4/wjwWjVPA_E0" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>From 0-to Umbraco using Azure Websites</title>
         <link>http://thecogworks.co.uk/blog/posts/2012/november/from-0-to-umbraco-using-azure-websites/</link>
         <description>Azure has had a major facelift in recent months and is looking more and more compelling by the day. One of the new features is Azure Websites. These are currently in preview but basically you can spin up a new hosted website in a matter of minutes. Not only that you can even select Umbraco as a the type of website you want to create!  Anyway let's take a look at how to do it.  First up head on over to&amp;nbsp; http://www.windowsazure.com and sign up for a free trial.  Once you've done that the first step is to enable the websites feature. It's currently in preview so you have to turn it on.  Click on: Account and the click on: preview features. Scroll down and click the try it now button next to web sites!  It'll whirr away for a bit and email you when the feature is enabled. When it's finished click on the manage link (or go here:&amp;nbsp; https://manage.windowsazure.com ).  You should now see the websites option in the left menu.     Click on that and choose create a website.  Select from gallery (this is where you get to choose an Umbraco site!), scroll down and choose umbraco     Click the next button. You now need to generate a url and configure a few Azure options, such as Region and DB password.     The SQL password needs to be complex. More than 8 characters, wither a mixture of letters numbers casing and special characters i.e. ThisIsAP@ssword123  Click next again and you'll need to tell it to create a new SQL Database Server. Pick a login name and another complex password.     Azure will now create your site! This will take a few minutes.     When it's finished you can click on the URL and....  You'll see the standard Umbrco install screen! Go through the steps as normal (the DB settings are all pre-configured!)  Select your starter kit and Boom! You've gone from 0-Umbraco in minutes!  There's a ton more you can do with Azure sites, such as git deploy and scaling but that's for another blog post!  I'll definately be using it when I need to spin up demo's or to try out Umbraco packages etc. It looks like a real time saver. It may even be the future of small scale Umbraco hosting.</description>
         <author>Tim Saunders</author>
         <guid isPermaLink="false">http://thecogworks.co.uk/blog/posts/2012/november/from-0-to-umbraco-using-azure-websites/</guid>
         <pubDate>Wed, 07 Nov 2012 18:04:00 +0000</pubDate>
      </item>
      <item>
         <title>Debugging with Umbraco</title>
         <link>http://www.enkelmedia.se/blogg/2012/11/7/debugging-with-umbraco.aspx?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=Debugging with Umbraco</link>
         <description>&lt;p&gt;Today I wanted to take a moment and share some experience when it comes to debugging an Umbraco app. There is basicly three things I use the most&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;1. &lt;a rel=&quot;nofollow&quot; href=&quot;#first&quot;&gt;Process debugging with Visual Studio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;2. &lt;a rel=&quot;nofollow&quot; href=&quot;#sec&quot;&gt;The Umbraco Log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;3. &lt;a rel=&quot;nofollow&quot; href=&quot;#three&quot;&gt;The magic query strings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; name=&quot;first&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Process debugging with Visual Studio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I usually have all my macros and custom user controls inside a Visual Studio project and use IIS as the web server. To debug, just go to the Tools menu and click &quot;Attach to process&quot;. In the list choose &quot;w3wp.exe&quot; and Visual Studio will debug the app. You can set breakpoints, step over code and so on. If there is an exception in the code this will be shown in Visual Studio as well.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enkelmedia.se/media/12148/WindowsLiveWriter_DebuggingwithUmbraco_6FE8_attach-to-process_2.png&quot;&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/12153/WindowsLiveWriter_DebuggingwithUmbraco_6FE8_attach-to-process_thumb.png&quot; width=&quot;564&quot; height=&quot;380&quot; alt=&quot;attach-to-process&quot; border=&quot;0&quot; style=&quot;display:inline;border:0px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; name=&quot;sec&quot;&gt;&lt;/a&gt;2. The Umbraco Log&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The log table in the database is a goldmine when it comes to debugging! Almost all exceptions that are thrown will show in this table. If you are having problems with macros, a package or something that runs &quot;inside&quot; Umbraco looking in this table will probably help you.&lt;br /&gt;&lt;br /&gt;There is also a great tool called &quot;F.A.L.M. Housekeeping&quot; that can help you to view this table without having to dig into the db.&lt;br /&gt;&lt;br /&gt;The package can be found here: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/projects/backoffice-extensions/falm-housekeeping&quot; title=&quot;http://our.umbraco.org/projects/backoffice-extensions/falm-housekeeping&quot;&gt;http://our.umbraco.org/projects/backoffice-extensions/falm-housekeeping&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; name=&quot;three&quot;&gt;&lt;/a&gt;3. The magic query strings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you are running your site in debug mode, you can add a “magic query string” to the url to show debug information inside the rendered page.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enkelmedia.se/media/12158/WindowsLiveWriter_DebuggingwithUmbraco_6FE8_screen-referenser-debug_2.jpg&quot;&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/12163/WindowsLiveWriter_DebuggingwithUmbraco_6FE8_screen-referenser-debug_thumb.jpg&quot; width=&quot;564&quot; height=&quot;459&quot; alt=&quot;screen-referenser-debug&quot; border=&quot;0&quot; style=&quot;display:inline;border:0px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;If you want to se all the macro containers just add ?umbDebug=true to the end of the url.&lt;br /&gt;/yada.aspx?umbDebug=true&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;And if you would like to se the trace information for the page, add ?umbDebugShowTrace=true.&lt;br /&gt;/yada.aspx?umbDebugShowTrace=true&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;One thing that is very important when putting the site into production is to disable the debug mode by setting the &quot;umbracoDebugMode&quot; to false in web.config.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enkelmedia.se/media/12168/WindowsLiveWriter_DebuggingwithUmbraco_6FE8_debug-webconfig_2.png&quot;&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/12173/WindowsLiveWriter_DebuggingwithUmbraco_6FE8_debug-webconfig_thumb.png&quot; width=&quot;564&quot; height=&quot;149&quot; alt=&quot;debug-webconfig&quot; border=&quot;0&quot; style=&quot;display:inline;border:0px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.enkelmedia.se/blogg/2012/11/7/debugging-with-umbraco.aspx</guid>
         <pubDate>Wed, 07 Nov 2012 07:57:00 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco UK Festival 2010 - UCommerce</title>
         <link>http://mayflymedia.co.uk</link>
         <description>UCommerce presentation from the Umbraco UK festival</description>
         <guid isPermaLink="false">http://mayflymedia.co.uk/blog/umbraco-uk-festival-2010-ucommerce/</guid>
         <pubDate>Tue, 06 Nov 2012 20:11:29 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco UK Festival 2012 - &quot;uSiteBuilder&quot;</title>
         <link>http://mayflymedia.co.uk</link>
         <description>Article on the uSiteBuilder talk given at the Umbraco Festival 2012 in London</description>
         <guid isPermaLink="false">http://mayflymedia.co.uk/blog/umbraco-uk-festival-2012-usitebuilder/</guid>
         <pubDate>Mon, 05 Nov 2012 11:51:02 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco UK Festival 2012 - &quot;Contributing to the Core&quot;</title>
         <link>http://mayflymedia.co.uk</link>
         <guid isPermaLink="false">http://mayflymedia.co.uk/blog/umbraco-uk-festival-2012-contributing-to-the-core/</guid>
         <pubDate>Mon, 05 Nov 2012 11:28:57 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco UK Festival 2012 - &quot;Project Belle&quot;</title>
         <link>http://mayflymedia.co.uk</link>
         <description>Umbraco's user-interface re-deign presentation from the Umbraco UK festival 2012 in London.</description>
         <guid isPermaLink="false">http://mayflymedia.co.uk/blog/umbraco-uk-festival-2012-project-belle/</guid>
         <pubDate>Mon, 05 Nov 2012 09:23:36 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco UK Festival - This is Automation Sparta</title>
         <link>http://thecogworks.co.uk/blog/posts/2012/november/umbraco-uk-festival-automation-sparta/</link>
         <description>Last week at the&amp;nbsp; Umbraco UK Festival &amp;nbsp;I presented a &quot;no configuration setup&quot; for web development and deployment. The technology has the ability to automate setup and creation of an entire Project Universe&amp;nbsp;(Development, Staging, Live etc environments)&amp;nbsp;in a single click. It also allows developers to download a completely configured Visual Studio solution, and automatically deploy to the various environments.&amp;nbsp;The presentation was titled &quot;This is Automation Sparta&quot;.  In the demonstration of this setup, I created an entire Project Universe, installed Umbraco, and deployed to our Development and Staging servers, all in a matter of minutes. And all of this with no need for any manual configuration.  Over the coming weeks I will be blogging about the concepts and technologies that allowed us (and will allow you) to create a &quot;no configuration setup&quot;.&amp;nbsp;  &amp;nbsp;  &amp;nbsp;</description>
         <author>Anthony Dang</author>
         <guid isPermaLink="false">http://thecogworks.co.uk/blog/posts/2012/november/umbraco-uk-festival-automation-sparta/</guid>
         <pubDate>Fri, 02 Nov 2012 11:40:00 +0000</pubDate>
      </item>
      <item>
         <title>Restricted Upload datatype for Umbraco</title>
         <link>http://www.nibble.be/?p=202</link>
         <description>Another friday another project  , this time an improved upload datatype that will allow you to restrict the upload for your content editor.
The settings will allow you to provide a maximum file size (in KB) and the allowed file extension(s)

When the file isn’t valid the editor will get a notification

That’s it 
 
The package [...]</description>
         <guid isPermaLink="false">http://www.nibble.be/?p=202</guid>
         <pubDate>Fri, 02 Nov 2012 09:26:00 +0000</pubDate>
         <content:encoded><![CDATA[<p>Another friday another project <img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nibble.be/wp-content/uploads/2012/10/wlemoticon-smile2.png"/> , this time an improved upload datatype that will allow you to restrict the upload for your content editor.</p>
<p>The settings will allow you to provide a maximum file size (in KB) and the allowed file extension(s)</p>
<p><a rel="nofollow" target="_blank" href="http://www.nibble.be/wp-content/uploads/2012/10/image2.png"><img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.nibble.be/wp-content/uploads/2012/10/image-thumb2.png" width="537" height="188"/></a></p>
<p>When the file isn’t valid the editor will get a notification</p>
<p><a rel="nofollow" target="_blank" href="http://www.nibble.be/wp-content/uploads/2012/10/image3.png"><img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.nibble.be/wp-content/uploads/2012/10/image-thumb3.png" width="533" height="89"/></a></p>
<p>That’s it <img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nibble.be/wp-content/uploads/2012/10/wlemoticon-smile2.png"/></p>
<p> 
<p>The package is available on <a rel="nofollow" target="_blank" href="http://our.umbraco.org/projects/backoffice-extensions/restricted-upload">our.umbraco.org</a></p>]]></content:encoded>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Umbraco UK Festival Wrap Up</title>
         <link>http://thecogworks.co.uk/blog/posts/2012/november/umbraco-uk-festival-wrap-up/</link>
         <description>Wow, well what a couple of days we've had!  A big thank you to everyone who came along to the Umbraco Hackathon on the 25th and the main Umbraco UK Festival on the 26th October 2012.  So nothing blew up, no-one got hurt and no animals were injured as far as we could tell, which makes the whole event&amp;nbsp;a great success in our book!  Although, admittedly there was a significant lack of coffee and a limited array of sandwiches on the day, but hey…we will learn by our mistakes, and using our own&amp;nbsp;agile development processes, we will review, adapt and improve to make next years festival even better :)   Hackathon   Our first foray into our (trademarked) version of SCRUM, 'Pico Scrum' was a great success if we do say so ourselves. The initial aim was to fix 5 bugs, but in the first hour we had already fixed 6!! By the end of the day the total was 31 which was an immense effort by all involved. I'm please to say that all the fixes are already in the latest Umbraco release too!  We had some great talks during the day. The main highlights were:-   Project Belle   The day started off with the unveiling of 'Belle', the codename for the new Umbraco UI, and as our friends from over the pond would say...'she sure is&amp;nbsp;purdy!'  Niels Hartvig and Per Ploug Hansen, went through a brief history of where the current UI came from and how it got to where it is now. Then he showed off some of the thoughts behind the redesign and the direction they are going. You can see the progress and get involved in the Umbraco UX Google Group .   Contributing to the Core   Newest member of the HQ and Umbraco veteran, Sebastiaan Janssen took us through the best ways of contributing to the Umbraco&amp;nbsp;core&amp;nbsp;either as bug fixes or new features.  He's now going to be very busy keeping up with the flurry of patches and submissions he's likely to get!! In short, you can find all you need to know here -&amp;nbsp; http://our.umbraco.org/contribute    Examiness (Hints and tips from the trenches)   Lucene.NET and general search ninja Ismail Mayat, one of The&amp;nbsp;Cogworks Senior Developers,&amp;nbsp;held an in-depth talk on Umbraco Examine and things he can't do without.  We will be posting many more posts about this, so keep your ears out for those.   Automation Sparta   Our very own Anthony Dang gave some great examples of how, at The Cogworks, we are starting to automate everything from the setup of IIS to build servers and deploying to live. Its automation, automation, automation here!  The plan is to hopefully be so automated that we'll be able to work from home and run the company with a simple 'Next' &amp;gt; 'Next' &amp;gt; 'Finish' wizard process every morning!   SCRUM at The Cogworks   Oh that was me wasn't it! Well I waffled on for an hour or so taking people through how we have setup SCRUM and agile development practices at The Cogworks. I'll be writing about this too over the next few weeks so i'll let you know when they are ready.   Relationships and communities (a designers perspective)   Pete Hotchkin from Red Gate presented a look at relationships, both in open source and in development in general. He went through how some of the Red Gate developer tools such as performance profilers can actually help bridge that gap and get people working more harmoniously together.   Other Highlights    Tea Commerce - Anders introduced some new great features for Tea Commerce  uCommerce - Soren talked though the new version of uCommmerce  uSitebuilder - Pete Duncanson introduced how they use uSitebuilder for developing with Umbraco  Load balancing - Tim Saunders went through the recommended setup scenarios and how other people may have done this as well  uComponents - Lee Kelleher presented some hidden gems    Community Presentations   Due to a key speaker dropping out the day before, we had a slot to fill towards the end of the day. So I decided to open the floor up to the community.  This proved to be a great opportunity for some exciting new developments to be presented. The first was Mentor Digital presenting their Web Blocks concept for editing in the back end. This looks very interesting especially with the new Umbraco UI on the horizon. More can be seen here:-&amp;nbsp; http://t.co/5YUHkX8G   Niels Kühnel presented something he's been working on to allow huge amounts of data to be stored and indexed in Umbraco. I'm not sure exactly how it works, but it looked very exciting!   Q&amp;amp;A   The last session was a&amp;nbsp;brief&amp;nbsp;Q&amp;amp;A with Niels and Per which was a chance to ask them some questions&amp;nbsp;about&amp;nbsp;Umbraco, and also to&amp;nbsp;delate&amp;nbsp;matrimonial wishes…not sure who asked that, but&amp;nbsp;that&amp;nbsp;just shows how&amp;nbsp;friendly&amp;nbsp;the Umbraco community is :)   What next?...   We will be blogging in more depth about the day and some specific talks separately, so keep an eye out for those on twitter and Google+ over the coming weeks.  You can see all the videos on the Umbraco UK Festival website . I am in the process of formatting them all so more will appear shortly. Apologies for the sporadic quality of them. We will make more professional ones next year.  So all in all, the day was a huge success and everyone seemed to get something from it.&amp;nbsp;  I hope to see some of you at Codegarden 2013 and it's (not so) little brother The Umbraco UK Festival 2013. See you next year!!</description>
         <author>Adam Shallcross</author>
         <guid isPermaLink="false">http://thecogworks.co.uk/blog/posts/2012/november/umbraco-uk-festival-wrap-up/</guid>
         <pubDate>Thu, 01 Nov 2012 08:37:00 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco Examiness - Umbraco UK festival</title>
         <link>http://thecogworks.co.uk/blog/posts/2012/october/umbraco-uk-festival-examiness/</link>
         <description>Well, another Umbraco UK festival over and done with and I can't wait for umbukfest13! It was great meeting up with so many old faces and plenty of new ones.  For those of you who attended you will be aware that I presented a session on Umbraco Examine and how we use it at The Cogworks.  There was some great feedback from festival attendees and I've received some additional awesome code examples from Neil Tootell (@toots) who is using the index for a really cool feature, but more about that in a future blog post.  Anyhow I covered quite a few areas in my talk, so over the next few weeks I am going break it down and blog a little about selected topics. &amp;nbsp;   Part 1 will cover some useful tools .</description>
         <author>Ismail Mayat</author>
         <guid isPermaLink="false">http://thecogworks.co.uk/blog/posts/2012/october/umbraco-uk-festival-examiness/</guid>
         <pubDate>Wed, 31 Oct 2012 13:28:00 +0000</pubDate>
      </item>
      <item>
         <title>Using IoC with Umbraco &amp; MVC</title>
         <link>http://feedproxy.google.com/~r/Shazwazza/~3/kDVxg1TZ8nE/post.aspx</link>
         <description>&lt;p&gt;The question was asked on my post yesterday about the upcoming Umbraco 4.10.0 release with MVC support and whether it is possible to use IoC/Dependency Injection with our implementation. The answer is definitely &lt;strong&gt;yes&lt;/strong&gt;! &lt;/p&gt; &lt;p&gt;One of the decisions we’ve made for the code of Umbraco is to not use IoC in the core. This is not because we don’t like IoC (in fact I absolutely love it) but more because things start to get really messy when not 100% of your developers understand it and use it properly. Since Umbraco is open source there are developers from many walks of life committing code to the core and we’d rather not force a programming pattern on them. Additionally, if some developers don’t fully grasp this pattern this leads to strange and inconsistent code and even worse if developers don’t understand this pattern then sometimes IoC can be very difficult to debug.&lt;/p&gt; &lt;p&gt;This ultimately means things are better for you since we won’t get in the way with whatever IoC framework you choose.&lt;/p&gt; &lt;h2&gt;Which frameworks can i use?&lt;/h2&gt; &lt;p&gt;Theoretically you can use whatever IoC framework that you’d like, though I haven’t tested or even tried most of them I’m assuming if they are reasonable frameworks that work with MVC then you should be fine. I’m an Autofac fan and to be honest I’ve only dabbled in other frameworks so all examples in this post and documentation are based on Autofac. Since we don’t use any IoC, it also means that we are not specifying a &lt;em&gt;DependencyResolver&lt;/em&gt; so you are free to set this to whatever you like (I’d assume that most IoC frameworks would integrate with MVC via the &lt;em&gt;DependencyResolver&lt;/em&gt;).&lt;/p&gt; &lt;h2&gt;How do i do it?&lt;/h2&gt; &lt;p&gt;I chucked up some docs on github &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/using-ioc.md&quot;&gt;here&lt;/a&gt; which I’ll basically just reiterate on this post again with some more points. Assuming that you construct your IoC container in your global.asax, the first thing you’ll have to do is to create this class and make sure it inherits from the Umbraco one (otherwise nothing will work). Then just override OnApplicationStarted and build up your container. Here’s an example (using Autofac):&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;rem&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class=&quot;rem&quot;&gt;/// The global.asax class&lt;/span&gt;
&lt;span class=&quot;rem&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; MyApplication : Umbraco.Web.UmbracoApplication
{
    &lt;span class=&quot;kwrd&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; OnApplicationStarted(&lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; sender, EventArgs e)
    {
        &lt;span class=&quot;kwrd&quot;&gt;base&lt;/span&gt;.OnApplicationStarted(sender, e);

        var builder = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; ContainerBuilder();

        &lt;span class=&quot;rem&quot;&gt;//register all controllers found in this assembly&lt;/span&gt;
        builder.RegisterControllers(&lt;span class=&quot;kwrd&quot;&gt;typeof&lt;/span&gt;(MyApplication).Assembly);

        &lt;span class=&quot;rem&quot;&gt;//add custom class to the container as Transient instance&lt;/span&gt;
        builder.RegisterType&amp;lt;MyAwesomeContext&amp;gt;();

        var container = builder.Build();
        DependencyResolver.SetResolver(&lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; AutofacDependencyResolver(container));
    }
}&lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}
&lt;/style&gt;

&lt;p&gt;Notice that I’ve also registered a custom class called MyAwesomeContext in to my container, this is just to show you that IoC is working. Of course you can do whatever you like with your own container :) Here’s the class:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; MyAwesomeContext
{
    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; MyAwesomeContext()
    {
        MyId = Guid.NewGuid();
    }
    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; Guid MyId { get; &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; set; }
}&lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}
&lt;/style&gt;

&lt;p&gt;Next we’ll whip up a custom controller to hijack all routes for any content item that is of a Document Type called ‘Home’ (there’s documentation on github about hijacking routes too):&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; HomeController : RenderMvcController
{
    &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;readonly&lt;/span&gt; MyAwesomeContext _myAwesome;

    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; HomeController(MyAwesomeContext myAwesome)
    {
        _myAwesome = myAwesome;
    }

    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; ActionResult Index(Umbraco.Web.Models.RenderModel model)
    {
        &lt;span class=&quot;rem&quot;&gt;//get the current template name&lt;/span&gt;
        var template = &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.ControllerContext.RouteData.Values[&lt;span class=&quot;str&quot;&gt;&quot;action&quot;&lt;/span&gt;].ToString();
        &lt;span class=&quot;rem&quot;&gt;//return the view with the model as the id of the custom class&lt;/span&gt;
        &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; View(template, _myAwesome.MyId);
    }
}&lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}
&lt;/style&gt;

&lt;p&gt;In the above controller, a new instance of &lt;em&gt;MyAwesomeContext&lt;/em&gt; will be injected into the constructor, in the Index action we’re going to return the view that matches the currently routed template and set the model of the view to the id of the custom &lt;em&gt;MyAwesomeContext &lt;/em&gt;object (This is just an example, you’d probably do something much more useful than this).&lt;/p&gt;
&lt;p&gt;We can also do something similar with SurfaceControllers (or any controller you like):&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; MyTestSurfaceController : SurfaceController
{
    &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;readonly&lt;/span&gt; MyAwesomeContext _myAwesome;

    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; MyTestSurfaceController(MyAwesomeContext myAwesome)
    {
        _myAwesome = myAwesome;
    }

    [ChildActionOnly]
    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; ActionResult HelloWorld()
    {
        &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; Content(&lt;span class=&quot;str&quot;&gt;&quot;Hello World! Here is my id &quot;&lt;/span&gt; + _myAwesome.MyId);
    }
}&lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}
&lt;/style&gt;

&lt;h2&gt;That’s it?&lt;/h2&gt;
&lt;p&gt;Yup, these are just examples of creating controllers with IoC, the actual IoC setup is super easy and should pretty much work out of the box with whatever IoC framework you choose. However, you should probably read the ‘Things to note’ in the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/using-ioc.md&quot;&gt;documentation&lt;/a&gt; in case your IoC engine of choice does something wacky with the controller factory.&lt;/p&gt;</description>
         <author>admin</author>
         <guid isPermaLink="false">http://shazwazza.com/post.aspx?id=c99c154c-c7a5-4438-ad98-06cfc75284a6</guid>
         <pubDate>Tue, 30 Oct 2012 22:08:00 +0000</pubDate>
      </item>
      <item>
         <title>Native MVC support in Umbraco coming very soon!</title>
         <link>http://feedproxy.google.com/~r/Shazwazza/~3/xUohUDjqNqU/post.aspx</link>
         <description>&lt;p&gt;Its been a while since writing a blog post! … but that’s only because I can never find the time since I’m still gallivanting around the globe :P&lt;/p&gt; &lt;p&gt;But this post is about something very exciting, and I’m sure most of you that are reading this already know that with the upcoming Umbraco 4.10.0 release (currently in Beta and downloadable &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://umbraco.codeplex.com/releases/view/96853&quot;&gt;here&lt;/a&gt;) we are natively supporting ASP.Net MVC! What’s more is that I’ve tried to document as much as I could on our GitHub docs. Once my pull request is completed the docs will all be available on the main site but until then you can see them on my fork &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/index.md&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;So where to begin? Well, I’m going to try to keep this really short and sweet because I’m hoping you can find most of the info that you’ll want in the documentation.&lt;/p&gt; &lt;h2&gt;What is supported?&lt;/h2&gt; &lt;p&gt;Everything that you can do in MVC you will be able to do in Umbraco’s MVC implementation. Anything from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/partial-views.md&quot;&gt;Partial Views&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/child-actions.md&quot;&gt;Child Actions&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/forms.md&quot;&gt;form submissions&lt;/a&gt;, data annotations, client validation to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/surface-controllers.md&quot;&gt;Surface Controllers&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/custom-routes.md&quot;&gt;custom routes&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/custom-controllers.md&quot;&gt;hijacking Umbraco routes&lt;/a&gt;.&amp;nbsp; If you have used Razor macros before, we support a very similar syntax &lt;strong&gt;but&lt;/strong&gt; it is not 100% the same. We support most of the dynamic querying that you use in Razor macros with the same syntax but to access the dynamic model is slightly different. What is crazy awesome super cool though is that we support a &lt;strong&gt;strongly typed&lt;/strong&gt; query structure!! :) So yes, you can do strongly typed Linq queries with &lt;strong&gt;intellisense&lt;/strong&gt;, no problemo! &lt;/p&gt; &lt;p&gt;Still using Web forms? not a problem, you can have both Web forms and MVC engines running in tandem on your Umbraco site. However, a config setting will set a default rendering engine which will determine whether Web forms master pages or MVC views are created in the back office.&lt;/p&gt; &lt;h2&gt;What is not supported (yet)&lt;/h2&gt; &lt;p&gt;There’s a few things in this release that we’ve had to push to 4.11.0 due to time constraints. They include: Better tooling support for the View editors in the back office, Partial View Macros and Child Action Macros. Though once you start using this MVC version you’ll quickly discover that the need for macros is pretty small. Perhaps people use macros in different ways but for the most part with the way that MVC works I would probably only use macros for rendering macro content in the WYSIWYG editor.&lt;/p&gt; &lt;p&gt;We support rendering any macros in MVC so you can even render your XSLT macros in your views, but issues will arise if you have User Control or Web form control macros that contain form elements. You will still be able to render these macros but any post backs will not work, and will most likely cause a YSOD. Unfortunately due to the vast differences between how Web forms and MVC work in ASP.Net this is something that we cannot support. The good news is that creating forms in MVC is super easy and makes a whole lot more sense than Web forms…. you can even have more than one &amp;lt;form&amp;gt; element on a page, who’d have thought :P &lt;/p&gt; &lt;h2&gt;Strongly typed queries&lt;/h2&gt; &lt;p&gt;You can find the documentation for this &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/Shandem/Umbraco4Docs/blob/4.8.0/Documentation/Reference/Mvc/querying.md&quot;&gt;here&lt;/a&gt; but I just wanted to point out some of the differences between the strongly typed syntax and the dynamic syntax. First, in your view you have two properties:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;@Model.Content = the strongly typed model for your Umbraco view which is of type: &lt;em&gt;Umbraco.Core.Models.IPublishedContent&lt;/em&gt;  &lt;li&gt;@CurrentPage = the dynamic model representing the current page, this is very very similar to the @Model property in Razor macros&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;An example is to get the current page’s children that are visible, here’s the syntax for both (and of course since the @CurrentPage is dynamic, you will not get intellisense):&lt;/p&gt; &lt;div style=&quot;border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;&quot; id=&quot;codeSnippetWrapper&quot;&gt;&lt;pre style=&quot;border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;&quot; id=&quot;codeSnippet&quot;&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//dynamic access&lt;/span&gt;&lt;br&gt;@CurrentPage.Children.Where(&lt;span style=&quot;color:#006080;&quot;&gt;&quot;Visible&quot;&lt;/span&gt;)&lt;br&gt;&lt;br&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//strongly typed access&lt;/span&gt;&lt;br&gt;@Model.Content.Children.Where(x =&amp;gt; x.IsVisible())&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;
&lt;p&gt;There are also some queries that are just not (yet) possible in the dynamic query structure. In order to get some complex queries to work with dynamic linq, we need to code these in to the parser to create the expression tree. The parser could probably do with more TLC to support things like this but IMHO, we’re just better off using the strongly typed way instead (plus its probably a much faster execution). I’ve listed this as an example in the docs but will use it here again:&lt;/p&gt;
&lt;div style=&quot;border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:courier, monospace;direction:ltr;max-height:365px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;&quot; id=&quot;codeSnippetWrapper&quot;&gt;&lt;pre style=&quot;border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;&quot; id=&quot;codeSnippet&quot;&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//This example gets the top level ancestor for the current node, and then gets &lt;/span&gt;&lt;br&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//the first node found that contains &quot;1173&quot; in the array of comma delimited &lt;/span&gt;&lt;br&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//values found in a property called 'selectedNodes'.&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//NOTE: This is one of the edge cases where this doesn't work with dynamic execution but the &lt;/span&gt;&lt;br&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//syntax has been listed here to show you that its much easier to use the strongly typed query &lt;/span&gt;&lt;br&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//instead&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//dynamic access&lt;/span&gt;&lt;br&gt;var paramVals = &lt;span style=&quot;color:#0000ff;&quot;&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style=&quot;color:#0000ff;&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color:#0000ff;&quot;&gt;object&lt;/span&gt;&amp;gt; {{&lt;span style=&quot;color:#006080;&quot;&gt;&quot;splitTerm&quot;&lt;/span&gt;, &lt;span style=&quot;color:#0000ff;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;char&lt;/span&gt;[] {&lt;span style=&quot;color:#006080;&quot;&gt;','&lt;/span&gt;}}, {&lt;span style=&quot;color:#006080;&quot;&gt;&quot;searchId&quot;&lt;/span&gt;, &lt;span style=&quot;color:#006080;&quot;&gt;&quot;1173&quot;&lt;/span&gt;}};&lt;br&gt;var result = @CurrentPage.Ancestors().OrderBy(&lt;span style=&quot;color:#006080;&quot;&gt;&quot;level&quot;&lt;/span&gt;)&lt;br&gt;    .Single()&lt;br&gt;    .Descendants()&lt;br&gt;    .Where(&lt;span style=&quot;color:#006080;&quot;&gt;&quot;selectedNodes != null &amp;amp;&amp;amp; selectedNodes != String.Empty &amp;amp;&amp;amp; selectedNodes.Split(splitTerm).Contains(searchId)&quot;&lt;/span&gt;, paramVals)&lt;br&gt;    .FirstOrDefault();&lt;br&gt;&lt;br&gt;&lt;span style=&quot;color:#008000;&quot;&gt;//strongly typed&lt;/span&gt;&lt;br&gt;var result = @Model.Content.Ancestors().OrderBy(x =&amp;gt; x.Level)&lt;br&gt;    .Single()&lt;br&gt;    .Descendants()&lt;br&gt;    .FirstOrDefault(x =&amp;gt; x.GetPropertyValue(&lt;span style=&quot;color:#006080;&quot;&gt;&quot;selectedNodes&quot;&lt;/span&gt;, &lt;span style=&quot;color:#006080;&quot;&gt;&quot;&quot;&lt;/span&gt;).Split(&lt;span style=&quot;color:#006080;&quot;&gt;','&lt;/span&gt;).Contains(&lt;span style=&quot;color:#006080;&quot;&gt;&quot;1173&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;br&gt;&lt;/div&gt;

&lt;p&gt;IMHO i much prefer the strongly typed syntax but it’s up to you to decide since we support both structures.&lt;/p&gt;
&lt;h2&gt;UmbracoHelper&lt;/h2&gt;
&lt;p&gt;Another class we’ve introduced is called the &lt;em&gt;Umbraco.Web.UmbracoHelper &lt;/em&gt;which is accessible on your views by using the @Umbraco syntax and is also accessible on any SurfaceController. This class contains a ton of handy methods, it is basically the ‘new’ Umbraco ‘library’ class (you know that static one that has a lower case ‘l’ :P ) Of course the ‘library’ class will still be around and you can still use it in your views… &lt;strong&gt;but you shouldn’t! &lt;/strong&gt;This new helper class should contain all of the methods that you need from querying content/media by ids, rendering macros and rendering field content, to stripping the html from a string. The library class was designed for use in Xslt where everything from c# wasn’t natively given to you, now with Razor views you have the entire world of c# at your fingertips. So you’ll notice things like the date formatting functions that were on ‘library’ are not on the UmbracoHelper, and that is because you can just use the regular c# way. Though, if you feel inclined that these methods should be on UmbracoHelper, another great thing is that this is not a static class so you can add as many extension methods as you like.&amp;nbsp; I’d list all of the methods out here but I said I’d keep it short, your best bet currently is to just have a look at the class in the source code, or just see what great stuff shows up in intellisense in VS.&lt;/p&gt;
&lt;h2&gt;UmbracoContext&lt;/h2&gt;
&lt;p&gt;Though we did have another UmbracoContext class, this one is the new cooler one and the old one has been marked as obsolete. This new one’s full name is &lt;em&gt;Umbraco.Web.UmbracoContext &lt;/em&gt;and it is a singleton so you can access it by UmbracoContext.Current but normally you shouldn’t have to access it by it’s singleton because it is available in all of your views and SurfaceControllers as a property. For example, to access the UmbracoContext in your view you simply use &lt;em&gt;@UmbracoContext. &lt;/em&gt;This class exposes some handy properties like: &lt;em&gt;UmbracoUser, PageId, IsDebug,&lt;/em&gt; etc… &lt;/p&gt;
&lt;h2&gt;Testing&lt;/h2&gt;
&lt;p&gt;If you are interested in MVC and Umbraco, it would be really really appreciated for you to take the time to download the beta, the latest nightlies or source code and give it a shot. Hopefully the docs are enough to get you up and running and if you run into any troubles please log your issues on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://issues.umbraco.org&quot;&gt;tracker&lt;/a&gt;. If you have any question, comments, etc… about the source code we’d love to hear from you on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://groups.google.com/forum/?pli=1#!forum/umbraco-dev&quot;&gt;mail list&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Pete will be putting up an MVC getting started post on the Umbraco blog real soon, so &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://umbraco.com/follow-us.aspx&quot;&gt;watch this space&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Adios!&lt;/p&gt;</description>
         <author>admin</author>
         <guid isPermaLink="false">http://shazwazza.com/post.aspx?id=4a4c9b1a-15f1-40aa-b3da-38b6da17fefb</guid>
         <pubDate>Tue, 30 Oct 2012 04:07:00 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco Document Type</title>
         <link>http://umbraco-home.blogspot.com/2012/10/umbraco-document-type.html</link>
         <description>&lt;br /&gt;&lt;em&gt;Supported by &lt;u&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Umbraco  Development Team&lt;/a&gt;&lt;/u&gt; of &lt;u&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova  Software&lt;/a&gt;&lt;/u&gt;.&lt;/em&gt;&lt;br /&gt;  &lt;br /&gt; If we compare Umbraco Document Type with C# class, we could easily understand  what are Umbraco Document Type.&lt;br /&gt; &lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;color:black;width:400px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;&lt;div align=&quot;center&quot;&gt;&lt;strong&gt;Class&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;&lt;div align=&quot;center&quot;&gt;&lt;strong&gt;Umbraco Document Type&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;Is a logic unit for set of data&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;Is a logic unit for set of data fields&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;Can be created for objects&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;Can be created for contents&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;Have data members&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;Have data fields&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;Have other objects of classes as data members&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;Have children document types defined in document  structure&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Now, we understand that Umbraco document type can be created for contents and  has data fields. The contents of the document type must be edited, saved and  published in Umbraco dashboard prior to  be represented in the front pages.&lt;br /&gt;  &lt;br /&gt; &lt;h3&gt;Data Field of Data Type&lt;/h3&gt;The data field in Umbraco Document type takes a piece of data but is editable  with the data type. For example, the Umbraco Document Type has a data field  naming “Message”. How to edit the message in dashboard? We could select the data  type for this data field, such as textstring, simple editor or rich editor.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear:both;text-align:left;&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://4.bp.blogspot.com/-IpZe7z6k0AE/UI6atlZtapI/AAAAAAAAACI/zQcwA8WY60c/s1600/Umbraco_add_data_type.jpg&quot; style=&quot;margin-left:1em;margin-right:1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-IpZe7z6k0AE/UI6atlZtapI/AAAAAAAAACI/zQcwA8WY60c/s1600/Umbraco_add_data_type.jpg&quot; height=&quot;199&quot; width=&quot;320&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Umbraco ships sufficient data types, such as rich editor,  label, related links,  content picker, media picker and so on. See them in Umbraco/Developer/Data Types  node.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear:both;text-align:left;&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://2.bp.blogspot.com/-B2VKguVMSM0/UI6bDjjtLFI/AAAAAAAAACQ/VcK3fFmKhHw/s1600/Umbraco_data_types.jpg&quot; style=&quot;margin-left:1em;margin-right:1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-B2VKguVMSM0/UI6bDjjtLFI/AAAAAAAAACQ/VcK3fFmKhHw/s1600/Umbraco_data_types.jpg&quot; height=&quot;320&quot; width=&quot;196&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear:both;text-align:left;&quot;&gt;&lt;/div&gt;&lt;h3&gt;Content Structure&lt;/h3&gt;The content structure gives concise logic relationship between contents.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear:both;text-align:left;&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://1.bp.blogspot.com/--5_fI-4CLaw/UI6bmnaf3ZI/AAAAAAAAACY/PNQhx6KVmd4/s1600/Umbraco_content_structure.jpg&quot; style=&quot;margin-left:1em;margin-right:1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/--5_fI-4CLaw/UI6bmnaf3ZI/AAAAAAAAACY/PNQhx6KVmd4/s1600/Umbraco_content_structure.jpg&quot; height=&quot;320&quot; width=&quot;195&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;The content node can only contain the sub content nodes strictly following the  logic in the context. It is defined in the structures in the Umbraco Document  Type. In the preceding screenshot, Home node can contain Mynter-Norge and  ContactUs content but not the item content.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear:both;text-align:left;&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://4.bp.blogspot.com/-u0Edz7KLgQk/UI6cMzdsrVI/AAAAAAAAACg/6Sh53WN68wQ/s1600/Umbraco_content_structure_setting.jpg&quot; style=&quot;margin-left:1em;margin-right:1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-u0Edz7KLgQk/UI6cMzdsrVI/AAAAAAAAACg/6Sh53WN68wQ/s1600/Umbraco_content_structure_setting.jpg&quot; height=&quot;233&quot; width=&quot;320&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In summary, Umbraco Document Type is a absolutely separated layer for  contents definition. Draw the content with data fields in document types and  connect them with logically with structure in document types.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt; &lt;em&gt;Supported by &lt;u&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Umbraco  Development Team&lt;/a&gt;&lt;/u&gt; of &lt;u&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova  Software&lt;/a&gt;&lt;/u&gt;.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4665764591629686889-406810594349446197?l=umbraco-home.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Alan Cao)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-4665764591629686889.post-406810594349446197</guid>
         <pubDate>Mon, 29 Oct 2012 15:13:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://4.bp.blogspot.com/-IpZe7z6k0AE/UI6atlZtapI/AAAAAAAAACI/zQcwA8WY60c/s72-c/Umbraco_add_data_type.jpg" width="72" xmlns:media="http://search.yahoo.com/mrss/"/>
      </item>
      <item>
         <title>Filtering FileZilla Server Connections by Dynamic IP</title>
         <link>http://blog.mattbrailsford.com/2012/10/29/filtering-filezilla-server-connections-by-dynamic-ip/</link>
         <description>I&amp;#8217;ve be using FileZilla Server as my FTP server of choice for some time now and as part of my security measures, I like to ensure that all the users I set up are filtered by IP address. This is a simple way of ensuring the people that connect to my server, are who they [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=blog.mattbrailsford.com&amp;#038;blog=5220074&amp;#038;post=753&amp;#038;subd=mattbrailsford&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blog.mattbrailsford.com/?p=753</guid>
         <pubDate>Mon, 29 Oct 2012 09:50:25 +0000</pubDate>
         <content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="http://mattbrailsford.files.wordpress.com/2012/10/380px-filezilla_logo-svg.png"><img class="alignright size-full wp-image-754" title="FileZilla" alt="" src="http://mattbrailsford.files.wordpress.com/2012/10/380px-filezilla_logo-svg.png?w=460"/></a>I&#8217;ve be using FileZilla Server as my FTP server of choice for some time now and as part of my security measures, I like to ensure that all the users I set up are filtered by IP address. This is a simple way of ensuring the people that connect to my server, are who they say they are. The problem with this though is that I have a dynamic IP which means my external IP will change from time to time and when this happens I have to log into the server and update the filter with the new IP. Having done this for like the 100th time, I decided to spend some time and try an automate this so that I wouldn&#8217;t have to do it anymore. What follows then is my solution.</p>
<p>First thing you&#8217;ll want to do, is sign up to a DNS service that supports dynamic IPs. For this I&#8217;m going to use <a rel="nofollow" target="_blank" href="https://entrydns.net/">EntryDNS</a> as it is free and has an API which will help with the next bit. Once you have signed up, go ahead and create a dynamic host entry. You can choose any name, but be sure to set the TTL to 60 so that when your IP does change, it doesn&#8217;t take too long to propagate those changes.</p>
<p><a rel="nofollow" target="_blank" href="http://mattbrailsford.files.wordpress.com/2012/10/screen1.png"><img class="aligncenter size-full wp-image-757" title="EntryDNS" alt="" src="http://mattbrailsford.files.wordpress.com/2012/10/screen1.png?w=460&#038;h=134" height="134" width="460"/></a>When you have setup the dynamic host, make note of the authentication token created as we will need this shortly.</p>
<p>The next step then is to write something to keep this entry up to date with the correct IP address. For this I decided to use PowerShell running as a scheduled task. The script is as follows.</p>
<p><pre>
# GET EXTERNAL IP
$webClient = new-object System.Net.WebClient
$externalIp = $webClient.DownloadString(&quot;http://ip-addr.es/&quot;).Trim()

# GET LAST KNOWN IP
$lastKnownIp = &quot;&quot;
$tmpFile = $env:temp + &quot;&#92;ip.txt&quot;
if(Test-Path $tmpFile) {
 $lastKnownIp = Get-Content $tmpFile | Select-Object -First 1
}

# EXIT IF IPS ARE THE SAME
if($externalIp -eq $lastKnownIp) {
 exit
}

# IPS ARE DIFFERENT SO UPDATE DNS RECORD
$bytes = [System.Text.Encoding]::ASCII.GetBytes(&quot;ip=&quot; + $externalIp)

$req = [System.Net.WebRequest]::Create(&quot;https://entrydns.net/records/modify/xxxxxxxxxx&quot;)
$req.ContentType = &quot;application/x-www-form-urlencoded&quot;
$req.Method = &quot;PUT&quot;
$req.ContentLength = $bytes.Length
$reqStream = $req.GetRequestStream()
$reqStream.Write($bytes, 0, $bytes.Length)
$reqStream.Close()

$resp = $req.GetResponse()
$reader = new-object System.IO.StreamReader($resp.GetResponseStream())
$respString = $reader.ReadToEnd().Trim();
$reader.Close();

# CACHE NEW IP
if($respString -eq &quot;OK&quot;) {
 $stream = [System.IO.StreamWriter] $tmpFile
 $stream.WriteLine($externalIp)
 $stream.Close()
}
</pre></p>
<p>What this script does then is it checks what my current external IP is by pinging the service <a rel="nofollow" target="_blank" href="http://ip-addr.es/">http://ip-addr.es/</a> and compares it to the last known IP address. This is stored in a txt file in the temp folder to prevent updating the EntryDNS unnecessarily. If the IP addresses are different, then a web request is made to EntryDNS with the updated IP and it is also written to the txt file ready for the next check.</p>
<p>When you setup this script, you&#8217;ll want to change the xxxxxxxxxx on line 20 to the authentication token you wrote down when you setup your dynamic host.</p>
<p>Now that we have a working script, go ahead and set this up to run as a scheduled task on your local machine. You can set this up however you like, but I set it to run every hour and only when I have an available internet connection.</p>
<p>By now then, you should have a script running at a regular interval that will keep EntryDNS up to date with your current IP address. The next step then is to get FileZilla server to filter based upon this IP.</p>
<p><a rel="nofollow" target="_blank" href="http://mattbrailsford.files.wordpress.com/2012/10/screen2.png"><img class="aligncenter size-full wp-image-765" title="FileZilla Filter" alt="" src="http://mattbrailsford.files.wordpress.com/2012/10/screen2.png?w=460&#038;h=304" height="304" width="460"/></a>What would be perfect is if FileZilla allowed us to filter based upon a host name rather than an IP as we could just enter that into the filter field and our job would be over, however it doesn&#8217;t, so we are going to need to do some more scripting magic to make this work. The script to update FileZilla automatically then is as follows:</p>
<p><pre>

$hostName = &quot;mattbrailsford.entrydns.org&quot;
$userName = &quot;xxxxxxxxxx&quot;

$fileZillaPath = $env:programfiles +&quot;&#92;FileZilla Server&quot;
$exePath = $fileZillaPath + &quot;&#92;FileZilla Server.exe&quot;
$configPath = $fileZillaPath + &quot;&#92;FileZilla Server.xml&quot;

# PERFORM DNS LOOKUP
$ip = [System.Net.Dns]::GetHostEntry($hostName).AddressList[0].IPAddressToString.ToString()

# CHECK CURRENT CONFIG
$doc = New-Object System.Xml.XmlDocument
$doc.Load($configPath)
$user = $doc.SelectSingleNode(&quot;//User[@Name='&quot;+ $userName +&quot;']&quot;)

# EXIT IPS ARE THE SAME
if($ip -eq $user.IpFilter.Allowed.IP) {
 exit
}

# IPS ARE DIFFERENT SO UPDATE CONFIG
$user.IpFilter.Allowed.IP = $ip
$doc.Save($configPath)

# FORCE FILEZILLA SERVICE TO RELOAD CONFIG
[System.Diagnostics.Process]::Start($exePath, &quot;/reload-config&quot;)

</pre></p>
<p>What this script does then is to resolve the configured host down to it&#8217;s associated IP address and then checks the FileZilla XML config for the given user to see if the IP address has changed. If it has, it updates the config, resaves it and then runs the FileZilla executable with the command line argument /reload-config to force the FileZilla service to reload the changes.</p>
<p><strong>NB</strong> /reload-config will tell the first FileZilla service it finds to reload it&#8217;s config, so this method won&#8217;t work if you have more than one instance of FileZilla running at a time.</p>
<p>When setting up this script you should change lines 1 and 2 to be the values of your configured host name and the FileZilla username you want to update the filter for.</p>
<p>Once you have this running, go ahead an set it up as a scheduled task on the server however often you&#8217;d like it to run and you are done. You should now have a FileZilla filter running from a dynamic IP.</p>
<p><strong>TOP TIP</strong></p>
<p>Whilst all the above works, there was one thing that annoyed me, and that was the fact that when the scheduled tasks triggered, you would get a powershell window pop open while the script runs. Whilst not a huge deal on the server, on my local machine running the updater script, this can get annoying. After searching, it seems the simplest solution is to trigger the powershell script from a .vbs script as follows:</p>
<p><pre>

Dim shell,command
command = &quot;powershell.exe &quot; + WScript.Arguments.Item(0)
Set shell = CreateObject(&quot;WScript.Shell&quot;)
shell.Run command,0

</pre></p>
<p>All this does then is take in the path of a powershell script as a command line parameter and executes it silently. So, when setting up your scheduled tasks, instead of setting them to launch powershell directly, have them launch this vb script passing in the path of the powershell script to run and wala, you have scheduled powershell scripts that run silently.</p>
<p>Whilst I&#8217;m sure there are other ways to get this to work, this was the way I came up with to solve it. If you do know any other way, please let me know in the comments, or if not, I hope this might come in handy for you all.</p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/mattbrailsford.wordpress.com/753/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattbrailsford.wordpress.com/753/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mattbrailsford.com&#038;blog=5220074&#038;post=753&#038;subd=mattbrailsford&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/34b41f8815601e9a16baa4e56c69bcc2?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">mattbrailsford</media:title>
         </media:content>
         <media:content medium="image" url="http://mattbrailsford.files.wordpress.com/2012/10/380px-filezilla_logo-svg.png">
            <media:title type="html">FileZilla</media:title>
         </media:content>
         <media:content medium="image" url="http://mattbrailsford.files.wordpress.com/2012/10/screen1.png">
            <media:title type="html">EntryDNS</media:title>
         </media:content>
         <media:content medium="image" url="http://mattbrailsford.files.wordpress.com/2012/10/screen2.png">
            <media:title type="html">FileZilla Filter</media:title>
         </media:content>
         <category>Tutorials</category>
      </item>
      <item>
         <title>This is Automation Sparta - Umbraco UK Festival 2012</title>
         <link>http://anthonydotnet.blogspot.com/2012/10/this-is-automation-sparta-umbraco-uk.html</link>
         <description>This post is the first in a set of posts outlining Automation Sparta - a No Configuration setup for Web Development.&lt;br /&gt;&lt;br /&gt;&quot;What I'm talking about is automation of the configuration of your automation&quot;&lt;br /&gt;&lt;br /&gt;I presented an automation setup yesterday at&amp;nbsp;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://umbracoukfestival.co.uk/&quot;&gt;Umbraco UK Festival 2012&lt;/a&gt;, and that quote of mine got a lot of people's attention.&lt;br /&gt;&lt;br /&gt;In this post I'm going to talk (very high level) about standardised naming, and how it lead to the realisation that setting up Web Development&amp;nbsp;environments in general can be automated.&lt;br /&gt;&lt;br /&gt;It all started earlier this year I joined &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://thecogworks.co.uk/&quot;&gt;The Cogworks&lt;/a&gt;. Compared to other agencies I have worked at, they had great processes for efficient development and deployment of web applications. They had a some really good templating and automation (eg. Team city build and deployment, and a solid&amp;nbsp;Visual Studio template). This takes away human error, adds consistency yadda yadda.&amp;nbsp;But I also noticed that there were a lot of manual tasks required to configure each process.&lt;br /&gt;&lt;br /&gt;I came to realise that inconsistencies in naming&amp;nbsp;between projects was slowing us down. Specifically&amp;nbsp;repositories, databases, IIS sites, folder names, and DNS across the entire Project Universe&amp;nbsp;(environments for Dev, Staging, Live etc).&lt;br /&gt;&lt;br /&gt;I've seen this in every agency I've worked in.&amp;nbsp;In any given project (depending on who the developer is), they choose one of these naming schemes:&amp;nbsp;My Project, my project, MyProject, myProject, myproject, my_project, my-project. In one project the database may be called MyProject_Umbraco, in the next it could be&amp;nbsp;Umbraco-myProject.&lt;br /&gt;&lt;br /&gt;So the goal was to define and standardise naming for everything in the Project Universe.&lt;br /&gt;&lt;br /&gt;When the naming of code repositories, databases, IIS sites, folder names, and DNS&amp;nbsp;across each Project Universe is standardised, you start to realise that much more can be automated. In fact more than anyone in this industry has ever considered. You start to realise that you can automate the creation of your entire Project Universe.. in 1 click! Which is what I demonstrated.&lt;br /&gt;&lt;br /&gt;But it doesn't stop there.&amp;nbsp;Once you have automated the Project Universe, you can think about the development setup.&lt;br /&gt;&lt;br /&gt;Normally before you even start to code you must:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a code repository (and check out)&lt;/li&gt;&lt;li&gt;Create a database (with login)&lt;/li&gt;&lt;li&gt;Create and configure a Visual Studio solution with connection strings, smtp etc.&lt;/li&gt;&lt;/ul&gt;This is the analogy I gave for the setup required before you even start to program:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear:both;text-align:center;&quot;&gt;&lt;embed width=&quot;320&quot; height=&quot;266&quot; src=&quot;http://www.youtube.com/v/aNEiBl3aQcY&amp;fs=1&amp;source=uds&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ok, now I can start to program....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyway...So now we've automated the creation of our code repository and the development database. We already know the connection string. So why cant we automate the insertion of the connection string into our web.config? Well we can. An MSBuild transform does that for us when we run a Team City build.&lt;br /&gt;&lt;br /&gt;So that means we need to automate the insertion of the connection string into the MSBuild file. How do we do that? Easy! Use C# string replace. Template your MSBuild transforms, then use string replacement. Do this for all your environment transforms. You already know the database connection strings! I dont think I can overstate how powerful this one step is. Templating your build scripts opens up a world of possibilities with automation. Think about all the glorious project specific things you can automate now in a build script?&lt;br /&gt;&lt;br /&gt;But why stop there? Since we have a Visual Studio template, why not automate project renaming? Ie project files, solution file, namespaces.&lt;br /&gt;&lt;br /&gt;So configuring a Visual Studio solution from a template comes down to replacing strings in some files, and renaming a few files and folders. &lt;br /&gt;&lt;br /&gt;The result is an application which creates your Project Universe, and spits out a Visual Studio solution with everything ready to go.&lt;br /&gt;&lt;br /&gt;Now we're talking about a No Configuration Setup. Yes that's right. A No Configuration Setup for development and deployment of web applications. To be more precise... a setup which has automated configuration of development and deployment, based on standard&amp;nbsp;consistent&amp;nbsp;naming.&lt;br /&gt;&lt;br /&gt;&quot;What I'm talking about is automation of the configuration of your automation&quot;&lt;br /&gt;&lt;br /&gt;Our exact setup may not applicable to everyone. But from what I've seen in agencies, I think all agencies can adopt an approach that gives the same result. I.e. A No Configuration Setup.&lt;br /&gt;&lt;br /&gt;I hope all of this information gives you food for thought about what you can and should automate.&lt;br /&gt;&lt;br /&gt;Over the next few weeks I'm going to blog about exactly what is involved in each part of the automation. I'll even give code samples.&lt;br /&gt;&lt;br /&gt;If you're interested, keep an eye on this blog and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://thecogworks.co.uk/blog&quot;&gt;The Cogworks blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389762629078434869-834535276022043585?l=anthonydotnet.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Anthony)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-8389762629078434869.post-834535276022043585</guid>
         <pubDate>Sat, 27 Oct 2012 18:40:00 +0000</pubDate>
      </item>
      <item>
         <title>Extending TinyMCE in Umbraco</title>
         <link>http://imulus.com/blog/bruce-clark/extending-tinymce-in-umbraco</link>
         <description>Today most modern content management systems rely on TinyMCE as the richtext editor for inputing HTML. TinyMCE has become the industry standard with its user ... &lt;a rel=&quot;nofollow&quot; class=&quot;read-more&quot; target=&quot;_blank&quot; href=&quot;http://imulus.com/blog/bruce-clark/extending-tinymce-in-umbraco&quot;&gt;read more.&lt;/a&gt;</description>
         <guid isPermaLink="false">http://imulus.com/blog/?p=3090</guid>
         <pubDate>Wed, 24 Oct 2012 23:40:43 +0000</pubDate>
         <content:encoded><![CDATA[<p>Today most modern content management systems rely on TinyMCE as the richtext editor for inputing HTML. TinyMCE has become the industry standard with its user friendly interface and open source licensing. However, each CMS on the market has a slightly different integration of TinyMCE.</p>
<p>This post will quickly recap working with TinyMCE in Umbraco and how to modify it when needed.</p>
<p>First, the way Umbraco treats all methods of content input is through what are called Datatypes, to make a long story short, Datatypes are simply different ways to input data by the user. For instance, each of the following is a Datatype — a file upload, a text string, a text area, a radio button choice list, etc. Each Datatype is made up of a control which has a number of selectable options, see below:</p>
<p><img class="aligncenter size-full wp-image-3115" title="Datatypes, Controls, and Options" src="http://imulus.com/blog/wp-content/uploads/2012/10/options-datatypes2.png" alt="" width="556" height="997"/></p>
<p>So, in Umbraco, <em>Richtext Editor</em> is a Datatype that uses the <em>TinyMCE wysiwyg</em> control — this is powerful because it means you can create multiple instances of TinyMCE, each one having different customizations. For instance, you might want a full set of features for editing Body Content and a very stripped down set of features for editing Customer Testimonials.</p>
<p>The first way to add or remove features with TinyMCE is to simply select the datatype that uses it (i.e. Richtext Editor) and update the control options (just like the above image). If you want the user to have alignment simply check those options and save the Datatype.</p>
<p>But sometimes the default options are not enough and you need to extend TinyMCE past its out-of-the-box setup. Updating this functionality is done through the TinyMCE configuration file, located in the <strong>~/config/tinyMceConfig.config</strong> file. When this file is modified the Datatype control options (shown above) will be updated to reflect. Once the config file has been updated the IIS site will need to be restarted, this can be done via IIS on the server, or by simply touching the web.config file.</p>
<p>Within the <strong>tinyMceConfig.config</strong> file is an XML buildout of options, each one offering customization. For instance, you can specify which HTML elements and attributes are valid within TinyMCE:</p>
<pre>&lt;validElements&gt;
	&lt;![CDATA[+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],
	-strong/-b[class|style],
	-em/-i[class|style],
	-strike[class|style],
	-u[class|style],
	#p[id|style|dir|class|align],
	-ol[class|style],
	-ul[class|style],
	-li[class|style],
	br,
	img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align|umbracoorgwidth|umbracoorgheight|onresize|onresizestart|onresizeend|rel],
	-sub[style|class],
	-sup[style|class],
	-blockquote[dir|style],
	...and so on...]]&gt;
&lt;/validElements&gt;</pre>
<p>Or you can update the actual toolbar options for TinyMCE, in the case below: Font Size and Color (hopefully sometime you will never have to enable):</p>
<pre>&lt;command&gt;
	&lt;umbracoAlias&gt;mceFontSize&lt;/umbracoAlias&gt;
	&lt;icon&gt;images/editor/fontSize.png&lt;/icon&gt;
	&lt;tinyMceCommand value="" userInterface="false" frontendCommand="fontsizeselect"&gt;fontsizeselect&lt;/tinyMceCommand&gt;
	&lt;priority&gt;21&lt;/priority&gt;
&lt;/command&gt;
&lt;command&gt;
	&lt;umbracoAlias&gt;mceForeColor&lt;/umbracoAlias&gt;
	&lt;icon&gt;images/editor/forecolor.gif&lt;/icon&gt;
	&lt;tinyMceCommand value="" userInterface="true" frontendCommand="forecolor"&gt;forecolor&lt;/tinyMceCommand&gt;
	&lt;priority&gt;22&lt;/priority&gt;
&lt;/command&gt;</pre>
<p>All of these options in <strong>tinyMceConfig.config</strong> make reference to the javascript files and plugins located in <strong>~/umbraco_client/tinymce3/ </strong>so, if you need to add your own custom TinyMCE plugins you can do that. However, most TinyMCE options are available already you just have to find the proper XML command to turn them on.</p>
<p><strong>Important: </strong>Please note, if you update the above configuration file and the corresponding umbraco_client files an upgrade of Umbraco will overwrite these changes. You&#8217;ll want to make sure to backup any updates before running an upgrade.</p>]]></content:encoded>
         <category>Code</category>
      </item>
      <item>
         <title>Umbraco UK Festival...the day is upon us</title>
         <link>http://thecogworks.co.uk/blog/posts/2012/october/umbraco-uk-festivalthe-day-is-upon-us/</link>
         <description>Well, the day is nearly up on us, and what a day we have planned. You can see the full line up of talks on the Umbraco UK Festival website .  And don't forget we've also got some extra events planned around the main festival, so even if you can't make it to the festival itself, feel free to pop along to one of the following:-   Pre-Festival Hackathon   During the hack day we plan to work in small teams to achieve tangible results in a short space of time.  The aim is productivity; we want to tackle any bugs and ideas that we think will take up to 1 hour to complete, then working in agile teams, tackle as many as we can!  The achievements will be presented the next day at the Festival.   Pre-Festival Meetup   We've organised a pre-festival social on Thursday evening, so feel free to pop along if you're in or around Covent Garden.   Post-Festival Social   After the main day, we'll be winding down with a few bevoirs and some food in a local watering whole . So even if you can't make it to the main event, feel free to pop along and soak up the atmosphere.  &amp;nbsp;</description>
         <author>Adam Shallcross</author>
         <guid isPermaLink="false">http://thecogworks.co.uk/blog/posts/2012/october/umbraco-uk-festivalthe-day-is-upon-us/</guid>
         <pubDate>Wed, 24 Oct 2012 13:48:00 +0000</pubDate>
      </item>
      <item>
         <title>Embedding third party media in Umbraco</title>
         <link>http://www.nibble.be/?p=196</link>
         <description>Since Umbraco v4.9 embedding third party media in the RTE has gotten a lot easier, it’ just a matter of supplying the Url to the video/image/sound/poll/… you want to add setting the size and hitting insert!

This is done by making use of the oembed format so every site that support the format can be supported [...]</description>
         <guid isPermaLink="false">http://www.nibble.be/?p=196</guid>
         <pubDate>Wed, 24 Oct 2012 08:38:10 +0000</pubDate>
         <content:encoded><![CDATA[<p>Since <a rel="nofollow" target="_blank" href="http://umbraco.codeplex.com/releases/view/94118">Umbraco v4.9</a> embedding third party media in the RTE has gotten a lot easier, it’ just a matter of supplying the Url to the video/image/sound/poll/… you want to add setting the size and hitting insert!</p>
<p><a rel="nofollow" target="_blank" href="http://www.nibble.be/wp-content/uploads/2012/10/image1.png"><img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.nibble.be/wp-content/uploads/2012/10/image-thumb1.png" width="612" height="437"/></a></p>
<p>This is done by making use of the <a rel="nofollow" target="_blank" href="http://oembed.com/">oembed format</a> so every site that support the format can be supported by the dialog in a minute&#160; (if it isn’t already) <img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nibble.be/wp-content/uploads/2012/10/wlemoticon-smile1.png"/></p>
<p>All this is setup in the new config file /config/EmbeddedMedia.config, for each supported third party site there is an entry in the config file</p>
<style type="text/css">
.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}</style>
<div class="csharpcode">
<pre class="alt">  &lt;!-- Youtube Settings --&gt;</pre>
<pre>  &lt;provider name=<span class="str">&quot;Youtube&quot;</span> type=<span class="str">&quot;Umbraco.Web.Media.EmbedProviders.OEmbedVideo, umbraco&quot;</span>&gt;</pre>
<pre class="alt">    &lt;urlShemeRegex&gt;&lt;![CDATA[youtu(?:&#92;.be|be&#92;.com)/(?:(.*)v(/|=)|(.*/)?)([a-zA-Z0-9-_]+)]]&gt;&lt;/urlShemeRegex&gt;</pre>
<pre>    &lt;apiEndpoint&gt;&lt;![CDATA[http:<span class="rem">//www.youtube.com/oembed]]&gt;&lt;/apiEndpoint&gt;</span></pre>
<pre class="alt">    &lt;requestParams type=<span class="str">&quot;Umbraco.Web.Media.EmbedProviders.Settings.Dictionary, umbraco&quot;</span>&gt;</pre>
<pre>      &lt;param name=<span class="str">&quot;iframe&quot;</span>&gt;1&lt;/param&gt;</pre>
<pre class="alt">      &lt;param name=<span class="str">&quot;format&quot;</span>&gt;xml&lt;/param&gt;</pre>
<pre>    &lt;/requestParams&gt;</pre>
<pre class="alt">  &lt;/provider&gt;</pre>
</div>
<style type="text/css">
</style>
<p>The provider that needs to be used (most of the time it’s oembed), a regex that will match the supported urls, the api endpount for the oembed stuff and some optional request params if needed.</p>
<p>So if a third party site supports oembed and isn’t supported by the insert third party media dialog yet it’s just a case if adding an entry to the config file</p>
<p>But the implementation isn’t fixed to oembed it’s also possible to plug in custom providers that don’t make use of the oembed format</p>
<p>Look at the following entry for twitgoo</p>
<div class="csharpcode">
<pre class="alt">  &lt;!-- Twitgoo Settings , not an OEmbed one --&gt;</pre>
<pre>  &lt;provider name=<span class="str">&quot;Twitgoo&quot;</span> type=<span class="str">&quot;Umbraco.Web.Media.EmbedProviders.Twitgoo, umbraco&quot;</span>&gt;</pre>
<pre class="alt">    &lt;urlShemeRegex&gt;&lt;![CDATA[twitgoo&#92;.com/]]&gt;&lt;/urlShemeRegex&gt;</pre>
<pre>  &lt;/provider&gt;</pre>
</div>
<style type="text/css">
</style>
<p>That makes use of a custom provider that looks like</p>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">using</span> HtmlAgilityPack;</pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">namespace</span> Umbraco.Web.Media.EmbedProviders</pre>
<pre>{</pre>
<pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">class</span> Twitgoo : AbstractProvider</pre>
<pre>    {</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">bool</span> SupportsDimensions</pre>
<pre>        {</pre>
<pre class="alt">            get</pre>
<pre>            {</pre>
<pre class="alt">                <span class="kwrd">return</span> <span class="kwrd">false</span>;</pre>
<pre>            }</pre>
<pre class="alt">        }</pre>
<pre>&#160;</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">string</span> GetMarkup(<span class="kwrd">string</span> url, <span class="kwrd">int</span> maxWidth, <span class="kwrd">int</span> maxHeight)</pre>
<pre>        {</pre>
<pre class="alt">            var web = <span class="kwrd">new</span> HtmlWeb();</pre>
<pre>            var doc = web.Load(url);</pre>
<pre class="alt">&#160;</pre>
<pre>            var img = doc.DocumentNode.SelectSingleNode(<span class="str">&quot;//img [@id = &#8216;fullsize&#8217;]&quot;</span>).Attributes[<span class="str">&quot;src&quot;</span>];</pre>
<pre class="alt">&#160;</pre>
<pre>            <span class="kwrd">return</span> <span class="kwrd">string</span>.Format(<span class="str">&quot;&lt;img src=&#92;&quot;{0}&#92;&quot;/&gt;&quot;</span>,</pre>
<pre class="alt">               img.Value);</pre>
<pre>        }</pre>
<pre class="alt">    }</pre>
<pre>}</pre>
</div>
<style type="text/css">
</style>
<p>Which will basically search for the element with id full-size and return an image using the src attribute of the full-size element found.</p>
<p>So you can also write your own providers for sites you wish to support <img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nibble.be/wp-content/uploads/2012/10/wlemoticon-smile1.png"/></p>
<p></p>]]></content:encoded>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Create/Update COntour forms code first</title>
         <link>http://www.nibble.be/?p=192</link>
         <description>Another result of freedom Fridays at the Umbraco HQ, an addon for Umbraco Contour the official form builder that will allow you to create/update forms from code.
It’s heavily inspired by uSiteBuilder (they did all the hard work).
With this add-on you will be able to design your Contour forms from visual studio, here is a simple [...]</description>
         <guid isPermaLink="false">http://www.nibble.be/?p=192</guid>
         <pubDate>Fri, 19 Oct 2012 09:23:24 +0000</pubDate>
         <content:encoded><![CDATA[<p>Another result of freedom Fridays at the <a rel="nofollow" target="_blank" href="http://umbraco.com/about-us/team.aspx">Umbraco HQ</a>, an addon for <a rel="nofollow" target="_blank" href="http://umbraco.com/products/more-add-ons/contour.aspx">Umbraco Contour</a> the official form builder that will allow you to create/update forms from code.</p>
<p>It’s heavily inspired by <a rel="nofollow" target="_blank" href="http://usitebuilder.vegaitsourcing.rs/">uSiteBuilder</a> (they did all the hard work).</p>
<p>With this add-on you will be able to design your Contour forms from visual studio, here is a simple example:</p>
<style type="text/css">
.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}</style>
<div class="csharpcode">
<pre class="alt">   <span class="kwrd">public</span> <span class="kwrd">enum</span> FormPages</pre>
<pre>    {</pre>
<pre class="alt">        Contact</pre>
<pre>    }</pre>
<pre class="alt">&#160;</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">enum</span> FormFieldsets</pre>
<pre class="alt">    {</pre>
<pre>        Details</pre>
<pre class="alt">    }</pre>
<pre>&#160;</pre>
<pre class="alt">    [Form(<span class="str">&quot;Another Contact Form&quot;</span>, MessageOnSubmit = <span class="str">&quot;Thank you&quot;</span>)]</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">class</span> AnotherContactForm : FormBase</pre>
<pre class="alt">    {</pre>
<pre>        [Field(FormPages.Contact, FormFieldsets.Details,</pre>
<pre class="alt">           Mandatory = <span class="kwrd">true</span>)]</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">string</span> Name { get; set; }</pre>
<pre class="alt">&#160;</pre>
<pre>        [Field(FormPages.Contact, FormFieldsets.Details,</pre>
<pre class="alt">            Mandatory = <span class="kwrd">true</span>)]</pre>
<pre>        <span class="kwrd">public</span> <span class="kwrd">string</span> Email { get; set; }</pre>
<pre class="alt">&#160;</pre>
<pre>        [Field(FormPages.Contact, FormFieldsets.Details,</pre>
<pre class="alt">           Mandatory = <span class="kwrd">true</span>,</pre>
<pre>           Type = <span class="kwrd">typeof</span>(Umbraco.Forms.Core.Providers.FieldTypes.Textarea))]</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">string</span> Message { get; set; }</pre>
<pre>&#160;</pre>
<pre class="alt">    }</pre>
</div>
<style type="text/css">
</style>
<p>This code will result in the following form</p>
<p><a rel="nofollow" target="_blank" href="http://www.nibble.be/wp-content/uploads/2012/10/image.png"><img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://www.nibble.be/wp-content/uploads/2012/10/image-thumb.png" width="655" height="373"/></a></p>
<p>It’s also possible to attach third party functionality either by attaching workflows from code</p>
<div class="csharpcode">
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> List&lt;WorkflowBase&gt; Workflows</pre>
<pre>        {</pre>
<pre class="alt">            get</pre>
<pre>            {</pre>
<pre class="alt">                <span class="kwrd">return</span> <span class="kwrd">new</span> List&lt;WorkflowBase&gt; {</pre>
<pre>                        <span class="kwrd">new</span> Email()</pre>
<pre class="alt">                    };</pre>
<pre>            }</pre>
<pre class="alt">        }</pre>
</div>
<style type="text/css">
</style>
<p>With the email class being as follows</p>
<div class="csharpcode">
<pre class="alt">    [Workflow(<span class="str">&quot;Send Email&quot;</span>,FormState.Submitted)]</pre>
<pre>    <span class="kwrd">public</span> <span class="kwrd">class</span> Email: WorkflowBase</pre>
<pre class="alt">    {</pre>
<pre>&#160;</pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> WorkflowType Type</pre>
<pre>        {</pre>
<pre class="alt">            get</pre>
<pre>            {</pre>
<pre class="alt">                <span class="kwrd">return</span> <span class="kwrd">new</span> Umbraco.Forms.Core.Providers.WorkflowTypes.SendEmail</pre>
<pre>                    {</pre>
<pre class="alt">                        Email = <span class="str">&quot;test@test.com&quot;</span>,</pre>
<pre>                        Subject = <span class="str">&quot;the form Contact Form was submitted&quot;</span>,</pre>
<pre class="alt">                        Message = <span class="str">&quot;the form Contact Form was submitted, &quot;</span> +</pre>
<pre>                                    <span class="str">&quot;this is the list of values it contained, &quot;</span> +</pre>
<pre class="alt">                                    <span class="str">&quot;you can turn this email off under workflows in Umbraco Contour&quot;</span></pre>
<pre>                    };</pre>
<pre class="alt">            }</pre>
<pre>        }</pre>
<pre class="alt">    }</pre>
</div>
<style type="text/css">
</style>
<p>Or by overriding the submit method (form class properties will be populated with the record values <img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.nibble.be/wp-content/uploads/2012/10/wlemoticon-smile.png"/> )</p>
<div class="csharpcode">
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Submit()</pre>
<pre>        {</pre>
<pre class="alt">            </pre>
<pre>            umbraco.library.SendMail(</pre>
<pre class="alt">                Email,</pre>
<pre>                <span class="str">&quot;me@company.com&quot;</span>,</pre>
<pre class="alt">                <span class="str">&quot;New Contact&quot;</span>,</pre>
<pre>                <span class="kwrd">string</span>.Format(<span class="str">&quot;New message from {0} : {1}&quot;</span>,Name,Message),</pre>
<pre class="alt">                <span class="kwrd">false</span>);</pre>
<pre>        }</pre>
</div>
<style type="text/css">
</style>
<p>The main advantages of this code first approach is that forms and workflows can be source controlled, support for unit testing, support for automated deployments, easy form maintenance through code…</p>
<p>The add-ons and some example forms are available on the project page at <a rel="nofollow" target="_blank" href="http://our.umbraco.org/projects/developer-tools/contour-code-first">our.umbraco.org</a></p>
<p>Full sourcecode is available <a rel="nofollow" target="_blank" href="https://bitbucket.org/starfighter83/contour.addons.codefirst">here</a></p>
<p>For a quick demo watch:</p>
<p></p>]]></content:encoded>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Umbraco community deelt kennis</title>
         <link>http://blog.digibiz.com/2012/10/15/umbraco-community-deelt-kennis</link>
         <guid isPermaLink="false">http://blog.digibiz.com/2012/10/15/umbraco-community-deelt-kennis</guid>
         <pubDate>Mon, 15 Oct 2012 00:00:00 +0000</pubDate>
      </item>
      <item>
         <title>How to Create Products and Categories in Commerce for Umbraco</title>
         <link>http://www.proworks.com/blog/2012/10/11/how-to-create-products-and-categories-in-commerce-for-umbraco/</link>
         <description>&lt;p&gt;A while back I made a few screencasts to show how to perform some common content editing tasks in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://commerce4umbraco.codeplex.com/&quot; title=&quot;Commerce for Umbraco CodePlex&quot;&gt;Commerce for Umbraco&lt;/a&gt;.  I thought I'd share that with the rest of the world so others besides our clients could see how to do it.&lt;/p&gt;
&lt;h3&gt;How to create a product in Commerce for Umbraco (C4U)&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;h3&gt;How to upload an image and select it as the product image in Commerce for Umbraco&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;h3&gt;How to find products to edit in Commerce 4 Umbraco (C4U)&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;h3&gt;How to create a category in Commerce for Umbraco (C4U)&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;h3&gt;How to find products to edit in Commerce 4 Umbraco (C4U)&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;Need help with using Commerce for Umbraco? &lt;a rel=&quot;nofollow&quot; title=&quot;Umbraco Web Development&quot;&gt;Drop us a line&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Are you a developer interested in helping with the next version of Commerce for Umbraco?  &lt;a rel=&quot;nofollow&quot; title=&quot;Umbraco Web Development&quot;&gt;Let us know&lt;/a&gt;.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/10/11/how-to-create-products-and-categories-in-commerce-for-umbraco/</guid>
         <pubDate>Thu, 11 Oct 2012 09:37:03 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco UK Festival Hackathon - we need your help!</title>
         <link>http://thecogworks.co.uk/blog/posts/2012/october/umbraco-uk-festival-hackathon/</link>
         <description>To take advantage of having some of the worlds brightest Umbraco talent in London all at the same time, we are organising a pre-festival hack day.  Having spoken to the Umbraco HQ, we've decided that we should focus our minds on the live Umbraco bug list . Our main aim is productivity so we'd love to get as many issues closed off as possible during the day.  So, to make sure we tackle the higher priority ones first, it would be great if we can get as much input as possible from the community. So, tell your friends, family, children, pets and anyone else you think would be interested to visit the bug list and vote.  We will have, (hopefully) 20 crack Umbraconistas including&amp;nbsp;Niels (the boss), Per Ploug, Lee Kelleher, Hendy Racher, Matt Brailsford and Anthony Dang&amp;nbsp;in the room at the same time, so working collaboratively we should be able to get a fair amount done and make the day a great success.&amp;nbsp;  Well, that and the fact the door will be locked and they won't be allowed to go to the pub until the whole list is finished :)  So get along and vote and add any more to the list ASAP. Lets make Umbraco even better than it already is!!  There are still some spaces left, so get yourself signed up if you're around the day before the festival. We'll keep you updated on our progress through the day as well.  And don't forget&amp;nbsp;kids,&amp;nbsp;a Happy Hacker is a productive Umbraco hacker :)</description>
         <author>Adam Shallcross</author>
         <guid isPermaLink="false">http://thecogworks.co.uk/blog/posts/2012/october/umbraco-uk-festival-hackathon/</guid>
         <pubDate>Wed, 10 Oct 2012 10:44:00 +0000</pubDate>
      </item>
      <item>
         <title>State of the port update</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/10/06/state-of-the-port-update/</link>
         <description>With the above, the port is essentially complete. I have pretty much gone for the quickest solutions where possible &amp;#8211; there are not perfect but they get us sufficiently going. Concerning testing, the approach I have taken is even simpler. It may even be worthwhile, exploring an approach where essential config settings come from the [...]</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1852</guid>
         <pubDate>Sat, 06 Oct 2012 22:26:43 +0000</pubDate>
         <content:encoded><![CDATA[<p>With the above, the port is essentially complete. I have pretty much gone for the quickest solutions where possible &#8211; there are not perfect but they get us sufficiently going.</p>
<p>Concerning testing, the approach I have taken is even simpler. It may even be worthwhile, exploring an approach where essential config settings come from the nunit config file.</p>
<p>Also, I applied some hacks to the code to get some tests working. Ideally, we would have re-written the whole application to allow for HttpContext wrapping &#8211; but that was beyond the scope of the present porting exercise &#8211; perhaps we will do this for the next port.</p>
<p>Next steps: Look for a release of the completed port project &#8211; coming soon. The details will be posted here.</p>]]></content:encoded>
      </item>
      <item>
         <title>Getting remaining tests working</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/10/05/getting-remaining-tests-working/</link>
         <description>Set-up of Test Database Tests are highly dependant on a database being set up with some basic values: One document type with texstring and richtext editor fields. Otherwise some Document tests will fail with id: xxxx not found error. Some tests are no longer used in the code base, I have commented these out. Here [...]</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1850</guid>
         <pubDate>Fri, 05 Oct 2012 22:24:38 +0000</pubDate>
         <content:encoded><![CDATA[<p>Set-up of Test Database <br /> Tests are highly dependant on a database being set up with some basic values: <br /> One document type with texstring and richtext editor fields.<br /> Otherwise some Document tests will fail with id: xxxx not found error.</p>
<p>Some tests are no longer used in the code base, I have commented these out. Here they are:</p>
<pre>LanguageTest.cs
Language_Delete_Default_Language() - commented out,
the code it tests is commented out as well, so no need to test.

TaskTypeTest.cs
TaskType_Make_Duplicate
Fails in line 104
This is because in the MySQL version of the CMSTASKTYPE table, there are no
constraints that would throw an SQL exception when a duplicate alias
is inserted. And there are no checks in code. I disable this test for now.

UserTest.cs
User_Make_New_Duplicate_Login
Fails in line 124
This is because in the MySQL version of the UMBRACOUSER table, there are no
constraints that would throw an SQL exception when a duplicate userlogin
is inserted. And there are no checks in code. I disable this test for now.

LanguageTest.cs
Language_Make_Duplicate
Fails becase no SQL exception is thrown
This is because in the MySQL version of the UMBRACOLANGUAGE table, there are no
constraints that would throw an SQL exception when a duplicate languageISOCode
is inserted. And there are no checks in code. I disable this test for now.
</pre>
<p>There are a few remaining fixes to be applied:</p>
<pre>Test: Document_Save_And_Publish_Then_Roll_Back fails
DocumentTest.cs line 287:289
change
	Thread.Sleep(1000);
	doc.Save();
	Assert.IsTrue(doc.HasPendingChanges());
to
	Thread.Sleep(3000);
	doc.Save();
	Assert.IsTrue(doc.HasPendingChanges());
	Thread.Sleep(3000);
That is increase the sleep timeout. But the test does still fail on
occassion so needs another look.
</pre>
<pre>RelationTest.cs failures: You have an error in your SQL syntax:
In file .../umbraco/cms/businesslogic/relation/RelationType.cs (131)
change,
	"select id, dual, name, alias from umbracoRelationType"
to
	"select id, [dual], name, alias from umbracoRelationType"
Also replace in line 44.
</pre>
<pre>Tests using or referencing "GetMemberFromLoginName(string loginName)"
fail because the HttpContext is null. A proper fix for this is lengthy.
For now, we will do this:
In file .../umbraco/cms/businesslogic/member/Member.cs line 286,
change
	else
to
	else if (HttpContext.Current != null)
</pre>
<pre>LanguageTest.cs
Language_Delete_With_Assigned_Domain
Errors with object reference not set to an instance of an object.
In DocumentTest.cs, change function signature as follows:
From
	internal static Document CreateNewUnderRoot(DocumentType dt)
To
	internal static Document CreateNewUnderRoot(DocumentType dt, User m_user)
and adjust calls accordingly.
</pre>
<p>We now have 96 tests and they are all passing</p>]]></content:encoded>
      </item>
      <item>
         <title>Look who’s editing now</title>
         <link>http://www.nibble.be/?p=188</link>
         <description>As a result of freedom fridays at the umbraco HQ I’ve made a new little umbraco package.
Make sure your content editors don’t end up editing the same document and overwriting each others changes with this addon for umbraco.
In environments with multiple editors the editors will see in the umbraco content tree which documents are currently [...]</description>
         <guid isPermaLink="false">http://www.nibble.be/?p=188</guid>
         <pubDate>Fri, 05 Oct 2012 11:27:41 +0000</pubDate>
         <content:encoded><![CDATA[<p>As a result of freedom fridays at the <a rel="nofollow" target="_blank" href="http://umbraco.com/about-us/team.aspx">umbraco HQ</a> I’ve made a new little umbraco package.</p>
<p>Make sure your content editors don’t end up editing the same document and overwriting each others changes with this addon for umbraco.</p>
<p>In environments with multiple editors the editors will see in the umbraco content tree which documents are currently being edited.</p>
<p><a rel="nofollow" target="_blank" href="http://www.nibble.be/wp-content/uploads/2012/10/tree.png"><img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Tree" border="0" alt="Tree" src="http://www.nibble.be/wp-content/uploads/2012/10/tree-thumb.png" width="192" height="144"/></a></p>
<p>Also on the content page there will be a notification when another editors are viewing/editing the same document.</p>
<p><a rel="nofollow" target="_blank" href="http://www.nibble.be/wp-content/uploads/2012/10/page.png"><img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Page" border="0" alt="Page" src="http://www.nibble.be/wp-content/uploads/2012/10/page-thumb.png" width="363" height="177"/></a></p>
<p>For a quick demo check out this video</p>
<p> 
<p>&#160;</p>
<p>You can download the package on the project page at <a rel="nofollow" target="_blank" href="http://our.umbraco.org/projects/backoffice-extensions/look-who's-editing-now">http://our.umbraco.org/projects/backoffice-extensions/look-who&#8217;s-editing-now</a></p>]]></content:encoded>
      </item>
      <item>
         <title>Resolving Issues Logging Out</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/10/04/resolving-issues-logging-out/</link>
         <description>When trying to logout, MySql.Data.MySqlClient.MySqlException You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &amp;#8216;WHERE CONTEXTID = &amp;#8216;&amp;#8230;&amp;#8221; at line 1 In .../umbraco/businesslogic/BasePages/BasePage.cs (237), change &quot;DELETE umbracoUserLogins WHERE contextId = @contextId&quot; to &quot;DELETE FROM umbracoUserLogins WHERE contextId = @contextId&quot;</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1846</guid>
         <pubDate>Thu, 04 Oct 2012 22:23:29 +0000</pubDate>
         <content:encoded><![CDATA[<p>When trying to logout,<br /> MySql.Data.MySqlClient.MySqlException <br /> You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#8216;WHERE CONTEXTID = &#8216;&#8230;&#8221; at line 1</p>
<pre>In .../umbraco/businesslogic/BasePages/BasePage.cs (237),
change
	"DELETE umbracoUserLogins WHERE contextId = @contextId"
to
	"DELETE FROM umbracoUserLogins WHERE contextId = @contextId"
</pre>]]></content:encoded>
      </item>
      <item>
         <title>Umbraco UK Festival Schedule</title>
         <link>http://thecogworks.co.uk/blog/posts/2012/october/umbraco-uk-festival-schedule/</link>
         <description>The first stab at the Umbraco UK Festival talk schedule is now up on the website . We've tried to fit in as much as we can.  The lineup is looking jam packed with useful information both about Umbraco and also general developer tools, hints and tips, so should be a good day allround for everyone.  Highlights are:-   The new Umbraco UI prototype  Lucence and .NET  Visual Studio 2012, TFS and other new developments  Full automated Umbraco setup  uComponents  Load balancing   and much, much more...  You can see the full line up on the festival site .  And don't forget the pre-festival Hack Day . Places are limited and filling up quickly, so get yourself on the list if you're around the day before.</description>
         <author>Adam Shallcross</author>
         <guid isPermaLink="false">http://thecogworks.co.uk/blog/posts/2012/october/umbraco-uk-festival-schedule/</guid>
         <pubDate>Thu, 04 Oct 2012 14:06:00 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco Courier from the Command Line</title>
         <link>http://blog.percipientstudios.com/2012/10/3/umbraco-courier-from-the-command-line.aspx</link>
         <description>&lt;p&gt;Based on real-world experience with Courier 2, here's a quick
guide to getting the command-line extraction console running.
Includes important background and&amp;nbsp;installation , execution,
and error review steps.&lt;/p&gt;</description>
         <author>info@percipientstudios.com (Douglas Robar)</author>
         <guid isPermaLink="false">http://blog.percipientstudios.com/2012/10/3/umbraco-courier-from-the-command-line.aspx</guid>
         <pubDate>Wed, 03 Oct 2012 09:35:57 +0000</pubDate>
         <content:encoded><![CDATA[<h2>Using the Courier Extraction Console</h2>
<p><em>Courier 2.7 was current at the time of this writing</em></p>
<p>There are two parts to Courier: packaging and extracting. Both parts are available from the Courier section of the Umbraco backoffice interface as well as by right-clicking on items within the various trees of the backoffice.</p>
<p>There is also a command-line extraction tool. Its primary purpose is to allow automation of Courier activity as part of your Visual Studio project's build events, or from your build server. You develop locally and upon building your project your changes to datatypes, macros, templates, content, etc. can be loaded into a staging or QA site and automated unit tests run. Very slick.</p>
<p>You can find out more about this in the <a rel="nofollow" target="_blank" href="http://stream.umbraco.org/video/2087970/codegarden-11-keynote">Umbraco Codegarden 11 Keynote</a> video (at about 43 minutes in) and the <a rel="nofollow" target="_blank" href="http://stream.umbraco.org/video/2198253/team-development-with-courier">Team Development using Courier</a> session by Per. Both are highly recommended viewing.</p>

<h2>Installing</h2>
<p>The extraction console application (and source) is available from <a rel="nofollow" target="_blank" href="https://github.com/umbraco/Courier/tree/master/Samples/Umbraco.Courier.ExtractionConsole">https://github.com/umbraco/Courier/tree/master/Samples/Umbraco.Courier.ExtractionConsole</a>.</p>
<ol>
<li>Copy the executable and associated dlls to some location. Personally, I copy into the site's ~/bin folder but that may not be required. You'll also end up with a ~/bin/plugins folder containing associated dlls. Additional information at <a rel="nofollow" target="_blank" href="http://our.umbraco.org/forum/umbraco-pro/courier/21756-Has-anyone-managed-to-get-Courier-working-with-the-command-line-tool">http://our.umbraco.org/forum/umbraco-pro/courier/21756-Has-anyone-managed-to-get-Courier-working-with-the-command-line-tool</a>. </li>
<li>Copy the ~/config/courier.config file to the extraction console's folder (~/bin in this example). Also copy it to the ~/bin/plugins folder. I'm not sure which folder contains the config file that is used but it definitely uses a local copy of the config file rather than the site's copy used by the Umbraco backoffice, thus allowing multiple config files to be used with the command line extraction console.</li>
<li>If not already done, create 'revisions' for each of the parts of the original site (datatypes, doctypes, macros, templates, media, document, etc. as noted elsewhere) using the backoffice. These revisions will be stored in the ~&#92;App_Data&#92;courier&#92;revisions&#92;revision_name folders.</li>
</ol>
<h2>Run from the Command Prompt</h2>
<ol>
<li>Once the packaging of the revisions is complete, open a command prompt. I don't know if it matters, but to be on the safe side I always run it from a command prompt that has 'run as Administrator' enabled.</li>
<li>Change directory to the desired revision and launch the extraction console:<br />
<br />
Command prompt:<br />
<pre>
..&#92;..&#92;..&#92;..&#92;bin&#92;Umbraco.Courier.ExtractionConsole.exe
</pre></li>
<li>You should see a dependency graph being created with more than zero items (if it is zero items you may not have a valid revision or be in the correct revision folder)</li>
<li>Press the 'Y' key to continue</li>
<li>When prompted for the 'Website to connect to?' enter the 'alias' of the site as noted in the local courier.config file.</li>
</ol>

<h2>Identifying Errors</h2>
<p>Be sure to turn on all logging in the config file. This will not slow down Courier appreciably, even for very large runs.</p>
<p>Log files will be saved in the ~&#92;App_Data&#92;courier&#92;revisions&#92;revision_name&#92;app_data&#92;courier&#92;logs folder. Always review them as important issues may appear there that may not appear in the console window itself.</p>]]></content:encoded>
      </item>
      <item>
         <title>Newsletters in Umbraco</title>
         <link>http://www.enkelmedia.se/blogg/2012/10/3/newsletters-in-umbraco.aspx?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=Newsletters in Umbraco</link>
         <description>&lt;p&gt;Some years ago I worked on a project and needed an easy way to &lt;strong&gt;send newsletters from Umbraco&lt;/strong&gt;. I looked though all the packages at &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org&quot;&gt;our.umbraco.org&lt;/a&gt; and my conclusion was simple: there are no good packages.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I had two options: Integrate with an external email service or build something. I saw this as an opportunity to actually contribute something and improve the experience for the end users of Umbraco. Because at the end of the day it's always the end users, our customers, that are supposed to use the system.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;To make their life easier I wanted to create a newsletter section in the Umbraco backoffice where the user can create, send and track  newsletters. That's want I did.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;Newsletter Studio for Umbraco&lt;/h4&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;After a lot of hard work I managed to release &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/projects/backoffice-extensions/newsletter-studio&quot;&gt;Newsletter Studio for Umbraco&lt;/a&gt; which is a extentions that let's your users send newsletters and track them from the same environment as they are used to work - the back office.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/12094/634621585884034000_newsletter-studio-edit-newsletter.jpg&quot; alt=&quot;newsletter studio screenshot&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The feature list is quite long&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Send newsletters to members or subscribers from the Umbraco back office&lt;/li&gt;
&lt;li&gt;Unlimited number of subscribers and newsletters in full version&lt;/li&gt;
&lt;li&gt;Easy to create content using the same rich text editor as Umbraco&lt;/li&gt;
&lt;li&gt;Can include dynamic content from Umbraco content nodes&lt;/li&gt;
&lt;li&gt;Nice analytics and charts on opens and clicks&lt;/li&gt;
&lt;li&gt;Built in support for skins and templates to control appearance&lt;/li&gt;
&lt;li&gt;Handles bounces and lets you edit bounced subscribers&lt;/li&gt;
&lt;li&gt;Import subscribers from different file formats.&lt;/li&gt;
&lt;li&gt;Ships with Razor-templates to integrate into the website front end&lt;/li&gt;
&lt;li&gt;Supports multiple smtp-servers and throttling&lt;/li&gt;
&lt;li&gt;Hooks to extend the newsletter rendering process&lt;/li&gt;
&lt;li&gt;Provider based model for receiving subscribers (can use sources like web shops, etc)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;Hook into Umbraco&lt;/h4&gt;
&lt;p&gt;One of the best features with the package is the ability to hook into external subscriber sources. You can use the umbraco site members or write a provider that talks to your custom data source, a web shop package, web service or what ever.&lt;br /&gt;&lt;br /&gt;This can be used to for example send newsletters to all subscribers that did not place an order the last 3 months or people that have not logged in to your community site the last months.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;But, Umbraco is a CMS - not a newsletter email service?&lt;/h4&gt;
&lt;p&gt;Some would say that you should not use Umbraco as a newsletter platform. I'll say it's just a matter of having the right infrastructure. There's a lot of benefits with having a integrated solution:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No need for the end user to learn another system&lt;/li&gt;
&lt;li&gt;Use and integrate content from the site in the newsletter&lt;/li&gt;
&lt;li&gt;Using the &quot;RenderTask&quot; you can personalize the newsletters for each receiver&lt;/li&gt;
&lt;li&gt;No need to export/import lists of subscribers. Just use the buildt in or write a custom provider that talks with your storage - it will always be up to date.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;When you install Newsletter Studio you'll have to configure an outgoing sever. At the moment we only support smtp-servers so that means that you can use your hosting providers email server, your own or use a smtp-relay service like SendGrid or MailGun. This will work very good for the most scenarios, it's been tested with around 100k emails and works like a charm.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The aim for the next release is to make it possible to integrate to external APIs, like MailChimp and Campaign monitor. The end users will not see the differens - they will still use the umbraco backoffice but the package will run on a very robust infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Want to try it? Go to: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/projects/backoffice-extensions/newsletter-studio&quot;&gt;http://our.umbraco.org/projects/backoffice-extensions/newsletter-studio&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;What do you think about the package? Feedback? Ideas? Just drop a comment!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.enkelmedia.se/blogg/2012/10/3/newsletters-in-umbraco.aspx</guid>
         <pubDate>Wed, 03 Oct 2012 06:40:00 +0000</pubDate>
      </item>
      <item>
         <title>Progress on unit testing</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/09/30/progress-on-unit-testing/</link>
         <description>A quick update on unit testing is in order: of the 100 unit tests in the 4.7.2 solution, 79 are now passing. 5 Fail. And, a further 16 are throwing errors. Here is a brief overview of what I have done to get tests passing. In most cases, we are dealing with the absence of [...]</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1838</guid>
         <pubDate>Sun, 30 Sep 2012 21:20:50 +0000</pubDate>
         <content:encoded><![CDATA[<p>A quick update on unit testing is in order: of the 100 unit tests in the 4.7.2 solution, 79 are now passing. 5 Fail. And, a further 16 are throwing errors.</p>
<p>Here is a brief overview of what I have done to get tests passing. In most cases, we are dealing with the absence of the HttpContext or Application Domain values that are normally available during the application run time. I won&#8217;t repeat what I have said earlier in the post, but I am hoping that there is enough stuff here to point the interested reader in the right direction. It is also important that I have gone for quick fixes, and in some instances these come with caveats, such as subtly altering application behaviour.</p>
<pre>//umbraco.Test/SetUpUtilities.cs
using System;
using System.Collections.Specialized;
using System.Xml;
using System.Web;
using System.Web.Caching;

using umbraco.BusinessLogic;

namespace umbraco.Test
{
	public class SetUpUtilities
	{
		public SetUpUtilities () {}

		private const string _umbracoDbDSN = "server=127.0.0.1;database=UMBRACO_DB;user id=USER_ID;password=PASSWORD;datalayer=MySql";
		private const string _umbracoConfigFile = "&lt;PATH-TO-APPLICATION&gt;/config/umbracoSettings.config";
		private const string _dynamicBase = "&lt;PATH-TO-ASSEMBLY-CACHE&gt; (e.g., /tmp/USER_ID-temp-aspnet-0)";
		public static NameValueCollection GetAppSettings()
		{
			NameValueCollection appSettings = new NameValueCollection();

			//add application settings
			appSettings.Add("umbracoDbDSN", _umbracoDbDSN);

			return appSettings;
		}

		public static void AddUmbracoConfigFileToHttpCache()
		{
			XmlDocument temp = new XmlDocument();
			XmlTextReader settingsReader = new XmlTextReader(_umbracoConfigFile);

			temp.Load(settingsReader);
			HttpRuntime.Cache.Insert("umbracoSettingsFile", temp,
										new CacheDependency(_umbracoConfigFile));
		}

		public static void RemoveUmbracoConfigFileFromHttpCache()
		{
			HttpRuntime.Cache.Remove("umbracoSettingsFile");
		}

		public static void InitConfigurationManager()
		{
			ConfigurationManagerService.ConfigManager = new ConfigurationManagerTest(SetUpUtilities.GetAppSettings());
		}

		public static void InitAppDomainDynamicBase()
		{
			AppDomain.CurrentDomain.SetDynamicBase(_dynamicBase); //(Obsolete but works...)
			//AppDomain.CurrentDomain.SetupInformation.DynamicBase = _dynamicBase;
		}

	}
}</pre>
<pre>//sample test file set-up

...
private User m_User;

[TestFixtureSetUp]
public void InitTestFixture()
{
	SetUpUtilities.InitConfigurationManager();
	m_User = new User(0);
	SetUpUtilities.InitAppDomainDynamicBase();
}

[SetUp]
public void MyTestInitialize()
{
	SetUpUtilities.AddUmbracoConfigFileToHttpCache();
	...
}

[TearDown]
public void MyTestCleanup()
{
	...
	SetUpUtilities.RemoveUmbracoConfigFileFromHttpCache();
}

...</pre>
<pre>//couple of hacks...
.../umbraco/businesslogic/IO/MultiPlatformHelper.cs,
public static string MapUnixPath(string path)
{
	string filePath = path;

	if (filePath.StartsWith("~"))
		filePath = IOHelper.ResolveUrl(filePath);

	filePath = IOHelper.MapPath(filePath, System.Web.HttpContext.Current != null);

	return filePath;
}

.../umbraco/businesslogic/IO/IOHelper.cs,
private static string getRootDirectorySafe()
{
	if (!String.IsNullOrEmpty(m_rootDir))
	{
		return m_rootDir;
	}

	string baseDirectory =
		System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase.Substring(8));
	m_rootDir = baseDirectory.Substring(0, baseDirectory.LastIndexOf("bin") - 1);

	//changed for tests ck, 9/9/12
	if (MultiPlatformHelper.IsUnix &amp;&amp; !m_rootDir.StartsWith(IOHelper.DirSepChar.ToString()))
		m_rootDir = IOHelper.DirSepChar + m_rootDir;

	return m_rootDir;

}</pre>
<pre>Language_Get_By_Culture_Code terminates with error:
linq operation is not valid due to the current state of the object
do:
Language.cs (161) Replace SingleOrDefault() with FirstOrDefault()</pre>
<pre>templates, stylesheet tests fail: create directories (masterpages, css) in test project.</pre>]]></content:encoded>
      </item>
      <item>
         <title>.hgignore for Visual Studio and Umbraco</title>
         <link>http://anthonydotnet.blogspot.com/2012/09/hgignore-for-visual-studio-and-umbraco.html</link>
         <description>If you're working with mercurial then you're probably familiar with the task of setting ignore rules for files you don't need to commit.&lt;br /&gt;&lt;br /&gt;Here are a few simple .hgignore rules which will take care of most situations. Just copy and paste into your .hgignore file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;syntax: glob&lt;br /&gt;*/_ReSharper.*&lt;br /&gt;*/bin/*&lt;br /&gt;*/obj/*&lt;br /&gt;*.suo&lt;br /&gt;Source/Website/App_Data/TEMP/*&lt;br /&gt;*/ClientDependency/*&lt;br /&gt;Source/Website/App_Data/*/package.xml&lt;br /&gt;*.DotSettings*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8389762629078434869-930446723640709794?l=anthonydotnet.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Anthony)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-8389762629078434869.post-930446723640709794</guid>
         <pubDate>Sun, 30 Sep 2012 17:24:00 +0000</pubDate>
      </item>
      <item>
         <title>The Tale of the Umbraco Roadmap</title>
         <link>http://mayflymedia.co.uk</link>
         <description>A look at what's been happening with Umbraco releases since the demise of v5</description>
         <guid isPermaLink="false">http://mayflymedia.co.uk/blog/the-tale-of-the-umbraco-roadmap/</guid>
         <pubDate>Wed, 26 Sep 2012 20:43:48 +0000</pubDate>
      </item>
      <item>
         <title>Poll: Would you pay for a premium Umbraco theme?</title>
         <link>http://feedproxy.google.com/~r/Betafirm/~3/ptvKdaTnA-0/</link>
         <description>&lt;div
 style=&quot;float:left;&quot;&gt;&lt;img
 width=&quot;612&quot; height=&quot;292&quot; src=&quot;http://betafirm.com/wp-content/uploads/2012/09/floppy-borders.jpg&quot; class=&quot;attachment-archive-thumb wp-post-image&quot; alt=&quot;floppy-borders&quot; title=&quot;floppy-borders&quot;/&gt;&lt;/div&gt;There are premium themes, skins and templates readily available for most major CMS’s these days. However not for Umbraco. What is a theme? Just to make sure that we are all on the same page, let me start by clarifying what I mean by a theme. Design. The theme obviously includes a beautiful and user ...</description>
         <guid isPermaLink="false">http://betafirm.com/?p=390</guid>
         <pubDate>Wed, 26 Sep 2012 09:17:03 +0000</pubDate>
         <content:encoded><![CDATA[<div
 style="float:left;"><img
 width="612" height="292" src="http://betafirm.com/wp-content/uploads/2012/09/floppy-borders.jpg" class="attachment-archive-thumb wp-post-image" alt="floppy-borders" title="floppy-borders"/></div><p>There are premium themes, skins and templates readily available for most major CMS’s these days. However not for Umbraco.</p><p><span
 id="more-390"></span></p><h2>What is a theme?</h2><p>Just to make sure that we are all on the same page, let me start by clarifying what I mean by a theme.</p><ol><li><strong>Design</strong>. The theme obviously includes a beautiful and user friendly web design. It might cater to a specific type of businesses (say software providers) or have a broader target audience (such as creative businesses). Either way you will get a responsive design, giving you a rock solid foundation, that works with desktops, tablets and smart phones.</li><li><strong>Components</strong>. Everything from macros, packages and 3rd party plugins. If the theme comes with a portfolio gallery, a jQuery slideshow plugin might be included to showcase it. As would a plugin for resizing and cropping the images in the gallery.</li><li><strong>Sample site</strong>. To show the full usage of the theme and layout the structure, a complete sample site will be included. From the image carousel on the homepage, to a blog with posts and categories.</li></ol><p>So now that the stage has been set, lets consider the advantages and shortcomings of buying a theme.</p><h2>Pros</h2><p>You get a fully functional website. You can use it directly out-of-the-box or you can use it as a springboard and customize it however you like. Either way, you will have saved a lot of time and possibly money.</p><h2>Cons</h2><p>You have to pull out your wallet and pay for the theme. If you afterwards has to change most of the design and components, then you might not have saved any time.</p><h2>A theme is a springboard</h2><p>One of the best things about Umbraco, is that you can customize it to fit your needs exactly. That makes it challenging to create a theme, that will be a perfect match.<br
 /> If instead the theme is used as a springboard or kickstarter for a website, then it might look different. Having the theme as a foundation to build and expand upon, the same way we use a HTML5 boilerplate, Twitter Bootstrap and so on.</p><h2>Your vote and thoughts</h2><p>I would love to hear what you think about the combination of Umbraco and themes. Please place a vote and/or write a comment.</p><p>
</p> <img src="http://feeds.feedburner.com/~r/Betafirm/~4/ptvKdaTnA-0" height="1" width="1"/>]]></content:encoded>
         <category>Blog</category>
      </item>
      <item>
         <title>Support multiple versions of a strongly named assembly in your Umbraco package</title>
         <link>http://www.richardsoeteman.net/2012/09/25/SupportMultipleVersionsOfAStronglyNamedAssemblyInYourUmbracoPackage.aspx</link>
         <description>&lt;p&gt;
A couple of months ago, Umbraco V4.8 was released and when I was testing CMSImport
against this version I got a weird exception. 
&lt;/p&gt;
&lt;p&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.richardsoeteman.net/content/binary/WindowsLiveWriter/Supportmultipleversionsofastronglynameda_908C/dllerror_4.png&quot;&gt;&lt;img style=&quot;border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;&quot; title=&quot;dllerror&quot; border=&quot;0&quot; alt=&quot;dllerror&quot; src=&quot;http://www.richardsoeteman.net/content/binary/WindowsLiveWriter/Supportmultipleversionsofastronglynameda_908C/dllerror_thumb_1.png&quot; width=&quot;1160&quot; height=&quot;446&quot;/&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;What happened?
&lt;/h2&gt;
&lt;p&gt;
I’m using the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://htmlagilitypack.codeplex.com/&quot;&gt;HTMLAgilityPack&lt;/a&gt; to
extract images and files from the bodytext property so we can import them into Umbraco.
In previous versions, Umbraco shipped with the 1.3.0 version. The version of the HTMLAgilityPack
that is shipped in 4.8+ is version 1.4.5.0. Since the dll is signed it’s throwing
an error in case of a version conflict. I’ve seen a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/projects/backoffice-extensions/ucomponents/questionssuggestions/33021-Upgrading-to-Umbraco-48-breaks-support-for-uComponents&quot;&gt;post
on the forum&lt;/a&gt; where &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://twitter.com/leekelleher&quot;&gt;Lee
Kelleher&lt;/a&gt; describes a similar issue. In the case of UComponents it’s the Lucene
DLL but it’s the same problem as I was facing. To fix this issue as described in the
forum thread requires an entry in the web.config file and putting the Legacy DLL into
a separate folder. It’s all fine to use upgrade instructions for a client project
but when you develop a package you don’t want your customers manual upgrade web.config
files for a specific version. You also don’t want to have a big if statement in your
installer that creates entries based on a version number and you also don’t want to
drop support for older versions of Umbraco because of this minor conflict.
&lt;/p&gt;
&lt;h2&gt;The solution
&lt;/h2&gt;
&lt;p&gt;
After searching a bit, I found this &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ff527268.aspx&quot;&gt;interesting
article&lt;/a&gt; that describes the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx&quot;&gt;AppDomain.AssemblyResolve
Event&lt;/a&gt;. This event gets triggered when an Assembly is required that can’t be found
and allows you to return the correct assembly. In our case the DLL Version 1.3.0.0
of HTMLAgilityPack. In the example below you see that I derive my class from ApplicationBase
(I know there is a new class in 4.8, but I’m still supporting 4.7 also ;-)) so this
class will be picked up automatically . When the&amp;#160; required assembly (Args.Name
on line 13) is the HTMLAgilityPack Version 1.3.0 I load that assembly from the /bin/legacy/
location and all is working again :)&amp;#160; 
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Update 2-10-2012 Modified source code. It doesn’t use HTTPContext anymore
since that might not be available&lt;/strong&gt;
&lt;/p&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;&lt;/span&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;div class=&quot;csharpcode&quot;&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 1: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; UpdateThirdPartyDllBindings
: ApplicationBase&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 2: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 3: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; UpdateThirdPartyDllBindings()&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 4: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 5: &lt;/span&gt; AppDomain.CurrentDomain.AssemblyResolve
+= &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; ResolveEventHandler(CurrentDomain_AssemblyResolve);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 6: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 7: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 8: &lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 9: &lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;///
Assembly could not be resolved let's see if we can load it dynamically&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 10: &lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 11: &lt;/span&gt; Assembly CurrentDomain_AssemblyResolve(&lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; sender,
ResolveEventArgs args)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 12: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 13: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (args.Name
== &lt;span class=&quot;str&quot;&gt;&amp;quot;HtmlAgilityPack, Version=1.3.0.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a&amp;quot;&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 14: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 15: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 16: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 17: &lt;/span&gt; &lt;span class=&quot;rem&quot;&gt;//Get
the bin folder. Don't use HTTPContext since that can be null&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 18: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt; binFolder
= Path.Combine(AppDomain.CurrentDomain.BaseDirectory, &lt;span class=&quot;str&quot;&gt;&amp;quot;bin&amp;#92;&amp;#92;legacy&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 19: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt; legacyFile
= Path.Combine(binFolder, &lt;span class=&quot;str&quot;&gt;&amp;quot;HtmlAgilityPack.dll&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 20: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; Assembly.LoadFile(legacyFile);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 21: &lt;/span&gt;&amp;#160;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 22: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 23: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;catch&lt;/span&gt; (Exception
ex)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 24: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 25: &lt;/span&gt; Log.Add(LogTypes.Error,
-1, &lt;span class=&quot;kwrd&quot;&gt;string&lt;/span&gt;.Format(&lt;span class=&quot;str&quot;&gt;&amp;quot;SEOChecker error
loading HTMLAgilityPack version {0}:{1} &amp;quot;&lt;/span&gt;, args.Name, ex));&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 26: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 27: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 28: &lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 29: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 30: &lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}
&lt;/style&gt;
&lt;/div&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}
&lt;/style&gt;
&lt;/div&gt;
&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre
{
font-size:small;color:black;font-family:consolas, courier, monospace;background-color:#ffffff;}
.csharpcode pre {margin:0em;}
.csharpcode .rem {color:#008000;}
.csharpcode .kwrd {color:#0000ff;}
.csharpcode .str {color:#006080;}
.csharpcode .op {color:#0000c0;}
.csharpcode .preproc {color:#cc6633;}
.csharpcode .asp {background-color:#ffff00;}
.csharpcode .html {color:#800000;}
.csharpcode .attr {color:#ff0000;}
.csharpcode .alt 
{
background-color:#f4f4f4;width:100%;margin:0em;}
.csharpcode .lnum {color:#606060;}
&lt;/style&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
All I need to do now is make sure the Legacy DLL is shipped in the package. When you
are using an older version of Umbraco this Legacy DLL will exists in your bin folder
but will be ignored and for version 4.8 + the AssemblyResolve implementation will
make sure the legacy DLL is loaded.
&lt;/p&gt;
&lt;p&gt;
Hope this helps you solve version conflicts of dll’s in your own packages
&lt;/p&gt;
&lt;img width=&quot;0&quot; height=&quot;0&quot; src=&quot;http://www.richardsoeteman.net/aggbug.ashx?id=8cf2d4fb-021b-4b71-90ba-b4ea2ada9046&quot;/&gt;</description>
         <guid isPermaLink="false">http://www.richardsoeteman.net/PermaLink,guid,8cf2d4fb-021b-4b71-90ba-b4ea2ada9046.aspx</guid>
         <pubDate>Tue, 25 Sep 2012 08:36:02 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco UK Festival Update</title>
         <link>http://thecogworks.co.uk/blog/posts/2012/september/umbraco-uk-festival-update/</link>
         <description>With only a month to go, the Umbraco UK Festival organisation is reaching fever pitch here in Chez Cog.   Well as much excitement as 8 blokes in a room can muster. We've nodded some appreciation and grunted at each other a bit, so I think all things must be going well :)   Things are in full swing and tickets are nearly sold out!   The venue is booked (phew!), speakers are being lined up, the helicopters been arranged for Daniel Craig to make his entrance as Niels's stuntman, oh, and we have some great talks planned.   The lineup so far:-    Your favorite chief Unicorns Niels 'The Boss' Hartvig and Per 'Courier' Ploug Hansen will be presenting project 'Belle'.   Umbraco community stalwart Lee 'uComponents' 'Kelleher presenting what's new and what you may not know about in the unrivalled uComponents.   Umbraco veteran Ismail 'lucene' Mayat showing you how to get the best out of Umbraco Examine with some great hints and tips from a search guru.   Tom 'SCRUM master' Smith preaching the ways of Agile best practice.   Anders 'Teacommerce' Johansen launching V2 of the great eCommerce platform.   Tim 'continuous deployment' Saunders introducing load balancing and deployment best practices   And many, many more...    Now we just need to add an extra 8 hours into the day somehow to squeeze them all in :)  And don't forget the pre-festival Hackathon organised by Mr uBlogsy himself, our very own Anthony Dang.    http://our.umbraco.org/events/pre-uk-festival-hack-day</description>
         <author>Adam Shallcross</author>
         <guid isPermaLink="false">http://thecogworks.co.uk/blog/posts/2012/september/umbraco-uk-festival-update/</guid>
         <pubDate>Thu, 20 Sep 2012 11:34:00 +0000</pubDate>
      </item>
      <item>
         <title>Look mommy, the nice man made Umbraco into a registration system!</title>
         <link>http://feedproxy.google.com/~r/Betafirm/~3/rEubNB4PYFM/</link>
         <description>&lt;div
 style=&quot;float:left;&quot;&gt;&lt;img
 width=&quot;613&quot; height=&quot;276&quot; src=&quot;http://betafirm.com/wp-content/uploads/2012/09/baloon-animal-attack.jpg&quot; class=&quot;attachment-archive-thumb wp-post-image&quot; alt=&quot;baloon-animal-attack&quot; title=&quot;baloon-animal-attack&quot;/&gt;&lt;/div&gt;Usually the building blocks in Umbraco, are used to create various types of content pages. But those blocks can do a lot more, than showing pretty pictures and sales texts. Umbraco is like a Schweiz knife full of useful tools, but with the look and feel of a Leatherman. A very versatile and robust product ...</description>
         <guid isPermaLink="false">http://betafirm.com/?p=355</guid>
         <pubDate>Wed, 19 Sep 2012 10:33:18 +0000</pubDate>
         <content:encoded><![CDATA[<div
 style="float:left;"><img
 width="613" height="276" src="http://betafirm.com/wp-content/uploads/2012/09/baloon-animal-attack.jpg" class="attachment-archive-thumb wp-post-image" alt="baloon-animal-attack" title="baloon-animal-attack"/></div><p>Usually the building blocks in Umbraco, are used to create various types of content pages. But those blocks can do a lot more, than showing pretty pictures and sales texts.</p><p><span
 id="more-355"></span></p><p>Umbraco is like a Schweiz knife full of useful tools, but with the look and feel of a Leatherman. A very versatile and robust product that you love to use, and show off to your friends. Every <del>outdoorsman</del> webdevelopers dream. Once in a while you may come across a situation that requires that trusty Umbraco stays holstered. Luckily, <em>it is not today</em>.</p><h2>Umbraco as a registration system</h2><p>I have used Umbraco to handle registrations for courses, events and large trade shows. You can quite easily build a registration system to handle a course, within an existing website. For bigger and more complex systems, having a separate system makes more sense. It can be used by different people, marketed to a different segment and more easily packaged and reused.</p><div
 style="margin:20px 0;"><img
 class="size-full wp-image-371 aligncenter" title="stand-plan-exhibition" src="http://betafirm.com/wp-content/uploads/2012/09/stand-plan-exhibition1.png" alt="" width="558" height="199"/></div><p>So how is building a trade show system in Umbraco, different from a “normal” website? There is a ton of differences, but lets take just one. Booths and stands.</p><p>At the very basic, a stand at a trade show, defines a space that you sell to the attending businesses, so they can have a booth and showcase their product or services. That might sound simple enough, but it can quickly grow to encompass a lot more information.</p><p>Is the stand a corner stand, which might imply that it is worth more. How many “open sides” does it have? How far from the entrance is the stand placed? Who has the stands next to your stand? Do you want to be placed next to those companies? If they are free, are you allowed to buy them and expand your booth? Can two companies share a single stand and how does that work?</p><p>Add to that, that some customers might require access to special VIP stands or that there is a predetermined sequence in which stands areas gets unlocked.</p><p>The questions and requirements could go on a lot longer, believe you me. Registration systems quickly becomes very custom-tailored. Which is why using a 3rd party registration system, might not always be an ideal choice. Integrating with other useful services such as a name tag printing company or e-ticket provider, is also an important part.</p><h2>What else can Umbraco do?</h2><p>I would love to hear how you have used Umbraco in a different way. I am sure that there is a lot of good and useful examples out there :)</p> <img src="http://feeds.feedburner.com/~r/Betafirm/~4/rEubNB4PYFM" height="1" width="1"/>]]></content:encoded>
         <category>Blog</category>
      </item>
      <item>
         <title>Umbraco Training Day 4</title>
         <link>http://www.proworks.com/blog/2012/09/14/umbraco-training-day-4/</link>
         <description>&lt;p&gt;Today was my last day of my Umbraco Training! I have fought with
the Umbraco monster and have slayin it. The last day of battles was
against Examine, Events, the Umbraco Dashboard, and editing
Properties.&lt;/p&gt;

&lt;h2&gt;Examine&lt;/h2&gt;

&lt;p&gt;Examine is a search tool which is extremely fast and highly
customizable. It includes Fluent search and indexes content, media
and members. If you are using XSLTSearch and you find that it is
starting to slow down because you have too much content, or you are
implementing a new search and expect a lot of content Examine is a
wonderful solution.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The indexes of Examine create a search that is lightning fast.
It takes a bit more to setup than XSLTSearch, but once you get it
working your search will be the fastest search on your webpage!&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;496&quot; height=&quot;105&quot; alt=&quot;ExamineSettings&quot;/&gt;&lt;/p&gt;

&lt;p&gt;This is an image from the ExamineSettings.config file. It
contains an indexer to ensure that Umbraco automatically gets
indexed, and a searcher which allows us to search a specific index
with a specific index analyzer.&lt;/p&gt;

&lt;p&gt;We changed the supportProtected because our intranet is
protected. Without this it won't search protected indexes. Also
with SupportUmpublished if set to true you will search your
unpublished content.&lt;/p&gt;

&lt;p&gt;The out of the box configuration files should let you perform
searches. If you want a more indepth walkthrough of the Examine
configuration visit &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/documentation/v480/Reference/Searching/Examine/&quot;&gt;
the Examine documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To set it up you need to create a Razor macro and pass it a
parameter somehow. We passed it through the URL query string
parameters.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;499&quot; height=&quot;307&quot; alt=&quot;Examine&quot;/&gt;&lt;/p&gt;

&lt;p&gt;This will search the library for the term which was retrieved
from the URL and then show the item retrieved as well as the date
which will link to the item.&lt;/p&gt;

&lt;p&gt;You can also search Members using Examine. To do this it is much
like the content search works.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;497&quot; height=&quot;175&quot; alt=&quot;ExamineMemberSearch&quot;/&gt;&lt;/p&gt;

&lt;p&gt;The difference here is we grab a list of our members and then
search through that using our parameter.&lt;/p&gt;

&lt;h2&gt;Events&lt;/h2&gt;

&lt;p&gt;The events in Umbraco are Native .NET Events! So if you
understand .NET Events then you understand Umbraco
events.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;One of the things you need to do to get your events working is
to have your EventHandler class inherit from
ApplicationStartupHandler.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The second thing you need to do is add wireup your Event Handler
inside your constructor. Then you tell your event what to do upon
receiving an event.&lt;/p&gt;

&lt;p&gt;One thing to remember about events is that every object which
you wire it to will throw that event. If you wire it to a document
but only want one specific document then you need to make sure that
the document firing the event has the correct alias.&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Dashboard&lt;/h2&gt;

&lt;p&gt;Have you ever wondered how the tabs get onto the dashboard items
such as Content? Well there is a Dashboard.config file where you
can specify which items you want.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;499&quot; height=&quot;570&quot; alt=&quot;Dashboard Config&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;area&amp;gt; specifies which dashboard you want to change,
&amp;lt;tab&amp;gt; will be the tabs that you want to change. to add a new
tab just copy and rename a &amp;lt;tab caption=&quot;Tab Name&quot;&amp;gt; tab.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;Then you can take it even further, you can add your own
UserControl to the dashboard! You can display a list of recent
comments on your blog and give yourself a way to remove any
comments you don't approve of if you want.&lt;/p&gt;

&lt;p&gt;It is even possible to pass parameters from your dashboard to
your UserControl! The magical way in which you do this is on your
code behind, declare your properties that you want as
macros,&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;465&quot; height=&quot;84&quot; alt=&quot;dashboard properties&quot;/&gt;&lt;/p&gt;

&lt;p&gt;and then add them into the tab&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;500&quot; height=&quot;64&quot; alt=&quot;dashboard parameters&quot;/&gt;&lt;/p&gt;

&lt;h2&gt;Data Editors&lt;/h2&gt;

&lt;p&gt;Data Editor are used to enter content into umbraco. Examples of
default Data Editors are Textboxes, multiline textboxes, date
pickers, drop down lists, and google maps. Data editors are not the
same as Data Types. Data editors is your control, a data type is a
data editor plus settings. A drop down list is a data editor, while
a drop down list populated with companies is a datatype.&lt;/p&gt;

&lt;p&gt;The way to implement a Data Editor is by creating a UserControl
and implementing IUserControlDataEditor. Each Data Editor can only
have 1 property.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;500&quot; height=&quot;329&quot; alt=&quot;Data Editor&quot;/&gt;&lt;/p&gt;

&lt;p&gt;This data editor will only be a blank text box, but with a bit
of java script you can turn it into a member picker which will pull
from a list of members registered for your site!&lt;/p&gt;

&lt;p&gt;So my adventure with Umbraco CertificationTraining has ended. It
was a long four days, but has ended successfully. I have achieved
both Level 1 and 2 certification and am proud to say that I am an
Umbraco Certified Developer.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Nothing I have written in any of these blogs compares to the
real experience of the training however. I would recommend going
and taking the training yourself. The experience of actually
running through all these exercises is priceless. I feel like I
could tackle any challenges with Umbraco! What a wonderful CMS!&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;200&quot; height=&quot;61&quot; alt=&quot;certified Horizontal&quot;/&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/09/14/umbraco-training-day-4/</guid>
         <pubDate>Fri, 14 Sep 2012 13:01:20 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco Training Day 3</title>
         <link>http://www.proworks.com/blog/2012/09/13/umbraco-training-day-3/</link>
         <description>&lt;p&gt;Today was the first day of Umbraco Training Level 2. We built
upon the foundation which was established from Level 1. We learned
about debugging your Umbraco files, Using UserControls to create
new content, Members, Umbraco's Restful API called Base, and
Relations.&lt;/p&gt;

&lt;h2&gt;Debugging&lt;/h2&gt;

&lt;p&gt;The first thing that we discussed was how to debug your Umbraco
files. It is possible to debug your .Net UserControls, Razor Macros
and XSLT Macros. The debugging of XSLT macro is not as good as the
C# debugger, but it is better than nothing.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;To debug your Umbraco files you need to have your project in
Visual Studios. Then the next step is to go to Tools and click on
Attach to Process.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;406&quot; height=&quot;249&quot; alt=&quot;AttachBar&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Then you locate the website you wish to debug and select and and
then click on the Attach button.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;500&quot; height=&quot;323&quot; alt=&quot;AttachScreen&quot;/&gt;&lt;/p&gt;

&lt;p&gt;The next step is to set a break point in any C#, XSLT or Razor
file and go to whereever you are using that file. Then whammo you
are debugging your Umbraco macros or usercontrols.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;496&quot; height=&quot;235&quot; alt=&quot;Debugging&quot;/&gt;&lt;/p&gt;

&lt;h2&gt;Creating Content&lt;/h2&gt;

&lt;p&gt;Now lets say you want to allow users to create their own
content. What kind of content could a user create you ask? Lets say
you want to be able to update your website with somekind of status,
or comment on a blog post Well you can do this using a
usercontrol.&lt;/p&gt;

&lt;p&gt;To create content you will need to grab the correct node ID.
Assuming you modifying your current page then that would be done by
Node.getCurrentNodeId(), or you can use macro parameters to to get
the correct node id.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The Macro Parameters are very simple in UserControls, just add
the property in the class you want. It will look something like
public int ParentId { get; set; } depending on the property of
course. Then you will head over to the Umbraco side and find your
macro and click on the Browse Properties button.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;500&quot; height=&quot;48&quot; alt=&quot;macroParameters&quot;/&gt;&lt;/p&gt;

&lt;p&gt;It will open up a screen with a guess of which parameters you
want to add to your macro, select it and then hit okay. It is smart
to check if it guessed the parameters correctly, click on the
parameter tab to check them out.&lt;/p&gt;

&lt;p&gt;After you have the parameter on your macro you will be able to
add the node id whenever you add the macro.&lt;/p&gt;

&lt;p&gt;Next you have to, get the DocumentType. This is done by
DocumentType.GetByAlias(&quot;Alias Name&quot;).&amp;nbsp;&lt;/p&gt;

&lt;p&gt;After that you need to create the new document. This is done by
Document.MakeNew().&lt;/p&gt;

&lt;p&gt;Then you can add the necessary values to the document by calling
document.getProperty(&quot;Property Name&quot;).Value = &quot;Whatever Value you
want&quot;. This is also how you add to an already created document.&lt;/p&gt;

&lt;p&gt;Then Publish your document, and always make sure
to&amp;nbsp;UpdateDocumentCache. If you don't update the Umbraco
Document Cache than the user will have to reload the cache
themselves by refreshing the page. It is the best to call this so
the user can see what they just created.&lt;/p&gt;

&lt;h2&gt;Members&lt;/h2&gt;

&lt;p&gt;Having members for your umbraco site is a great idea. It adds
protection to your website, gives your visitors an identify, allows
for support of different roles, allows for custom navigation based
on member as well as many other things.&lt;/p&gt;

&lt;p&gt;Memeber Groups allows for you to add members to specific groups.
Lets say you want to know if your members have completed the
optional part of a registration process. Well you can add them to a
special Members Group called Completed if they have. You can check
if the member is a part of that Member Group from then on and if so
you can do extra things for them.&lt;/p&gt;

&lt;p&gt;Member Types will allow you to create a system of
differentiation between your members. You can have the Super Duper
Special members who get access to Super Duper Special navigation
and the Boring Standard member who can only see the boring content
of your site.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Another thing that is nice about members is that accessing and
modifying a member happens almost exaclty the same as accessing and
modifying documents or document types. The only difference instead
of Document.Function() it will be Member.Function().&lt;/p&gt;

&lt;h2&gt;&amp;nbsp;Restful API Base&lt;/h2&gt;

&lt;p&gt;Umbraco has a RESTful (REpresentational State
Transfer)&lt;span&gt;&amp;nbsp;known as Base. Base maps URL's to static .NET
methods. You can use jQuery ajax calls to reach those methods also.
This allows for you to call your C# methods from your client
side.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;The URLs are case sensitive and so you need to watch out
what you name your class, and methods.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;img width=&quot;492&quot; height=&quot;111&quot; alt=&quot;BaseAttributes&quot;/&gt;&lt;/span&gt;&lt;/p&gt;

&lt;pre&gt;
 $.getJSON(&quot;/base/likes/likestatus/&quot; + statusId, function (data) {&lt;br /&gt;
           $(&quot;#likes&quot;).html(data);&lt;br /&gt;
        })
&lt;/pre&gt;

&lt;p&gt;The first part of the URL in $.getJSON is necessary for Base to
work correctly.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then the second part URL &quot;likes&quot; is matched up either the class
name or the decoration. So public class likes or
[RestExtension(&quot;likes&quot;)]. You do not need to add
in&amp;nbsp;[RestExtension(&quot;likes&quot;)] if you are happy with the class
name. If you have a classname that you don't like then you can
override the class name by adding your own inside of
[RestExtension(&quot;SecondPartOfTheUrl&quot;)].&lt;/p&gt;

&lt;p&gt;For the third part of the URL than you need to have that match
up with the name of the method.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Lastly the name of the parameters is unimportant, since in our
case statusId is going to turn into some magic number it doesn't
match anyways.&lt;/p&gt;

&lt;p&gt;You are probably wondering about the [RestExtensionMethod()]
decoration. This is to add a layer of protection to your methods,
so someone is not able to call methods they shouldn't be able to
from the url.&amp;nbsp;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;allowAll, which will be a boolean value which will allow
everyone, or only those in your allowed Groups, or Types&lt;/li&gt;

&lt;li&gt;allowGroup, which will be a comma seperated list of member
groups.&amp;nbsp;&lt;/li&gt;

&lt;li&gt;allowType, which will be a comma seperated list of member
types.&amp;nbsp;&lt;/li&gt;

&lt;li&gt;returnXML, which will be a boolean value determining if the
return type should be an XML string, or a regular string&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Relations&lt;/h2&gt;

&lt;p&gt;There are times in your website where you want to connect two
Umbraco ojbects. Relations is the way to do this! Lets consider a
like feature on user created comments. How do you make it to where
a user can only like a comment once?&amp;nbsp;&lt;/p&gt;

&lt;p&gt;For relations to work your objects must have a nodeID and they
must be a registered type in Umbraco. To register a relation you
must add it into your Database specifying the two objects which you
want related.&lt;/p&gt;

&lt;p&gt;To check for a relation you can do something like this&lt;/p&gt;

&lt;p&gt;RelationType relationType =
RelationType.GetByAlias(&quot;RelationAlias&quot;)&lt;/p&gt;

&lt;p&gt;if(!Relation.IsRelated(firstRelationId, secondRelationId,
relationType))&lt;/p&gt;

&lt;p&gt;The hardest part is setting up the relationship in the first
place, but as soon as that is done the rest is easy.&lt;/p&gt;

&lt;p&gt;That is what I learned on my third day of Umbraco training!
RESTful Base is pretty awesome if you ask me!&amp;nbsp;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/09/13/umbraco-training-day-3/</guid>
         <pubDate>Thu, 13 Sep 2012 16:15:06 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco Training Day 2</title>
         <link>http://www.proworks.com/blog/2012/09/12/umbraco-training-day-2/</link>
         <description>&lt;p&gt;&lt;img width=&quot;326&quot; height=&quot;183&quot; alt=&quot;Seattle Library&quot;/&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The second day of my level 1 Umbraco training. Check out my &lt;a rel=&quot;nofollow&quot;
 title=&quot;Umbraco Training Day 1&quot;&gt;first day
of training&lt;/a&gt;&amp;nbsp;in case you missed it. Today we covered
ContentPlaceHolders, Recursive values, Content Channels, Nofication
Settings, Media, Alternate Templates and Useful Packages.&lt;/p&gt;

&lt;h2&gt;ContentPlaceHolders&lt;/h2&gt;

&lt;p&gt;When creating templates you can add ContentPlaceHolders.
ContentPlaceHolders are used in inheritance. If you have a Master
template you can add a ContentPlaceHolder and then link it to the
templates below. To do this in the Parent Template you will have a
tag like this&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;whitespace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;xml-punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;asp:ContentPlaceHolder&amp;nbsp;&lt;/span&gt; &lt;span
 class=&quot;xml-attname&quot;&gt;Id&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;=&lt;/span&gt;&lt;span
 class=&quot;xml-attribute&quot;&gt;&quot;MasterContentPlaceHolder&quot;&amp;nbsp;&lt;/span&gt; &lt;span
 class=&quot;xml-attname&quot;&gt;runat&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;=&lt;/span&gt;&lt;span
 class=&quot;xml-attribute&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
 &lt;span class=&quot;whitespace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;xml-comment&quot;&gt;&amp;lt;!-- Insert
default &quot;MasterContentPlaceHolder&quot; markup here --&amp;gt;&lt;/span&gt;&lt;br /&gt;
 &lt;span class=&quot;whitespace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;xml-punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;asp:ContentPlaceHolder&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;and then in any template below the parent which you would like
to place content there you will add the tag&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;asp:Content&amp;nbsp;&lt;/span&gt; &lt;span
 class=&quot;xml-attname&quot;&gt;ContentPlaceHolderID&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;=&lt;/span&gt;&lt;span
 class=&quot;xml-attribute&quot;&gt;&quot;MasterContentPlaceHolder&quot;&amp;nbsp;&lt;/span&gt; &lt;span
 class=&quot;xml-attname&quot;&gt;runat&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;=&lt;/span&gt;&lt;span
 class=&quot;xml-attribute&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;asp:Content&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;The thing that links the placeholder and content tags
together is the ContentPlaceHolderID.&lt;/span&gt; &lt;span&gt;Another helpful
thing about ContentPlaceHolder is that you are able to add default
content.&lt;/span&gt; &lt;span&gt;This means if there happens to be a page
where you don't want to fill out the content for the placeholder it
will just use what you placed between the
&amp;lt;asp:ContentPlaceHolder&amp;gt;
&amp;lt;/asp:ContentPlaceHolder&amp;gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;You are also able to place &amp;lt;asp:ContentPlaceHolder&amp;gt;
&amp;lt;/asp:ContentPlaceHolder&amp;gt; inside&amp;nbsp;&lt;span
 class=&quot;Apple-tab-span&quot;&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;asp:Content&amp;gt; &amp;lt;/&lt;span
 class=&quot;Apple-tab-span&quot;&gt;&lt;span class=&quot;xml-tagname&quot;&gt;asp:Content&amp;gt;
tags. That would look like this&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;asp:Content&amp;nbsp;&lt;/span&gt; &lt;span
 class=&quot;xml-attname&quot;&gt;ContentPlaceHolderID&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;=&lt;/span&gt;&lt;span
 class=&quot;xml-attribute&quot;&gt;&quot;MasterContentPlaceHolder&quot;&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&lt;span class=&quot;xml-attname&quot;&gt;runat&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;=&lt;/span&gt;&lt;span
 class=&quot;xml-attribute&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt;&lt;span class=&quot;xml-punctuation&quot;&gt;&lt;span
 class=&quot;whitespace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&lt;span class=&quot;xml-punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;asp:ContentPlaceHolder&amp;nbsp;&lt;/span&gt; &amp;nbsp;&lt;span
 class=&quot;xml-attname&quot;&gt;Id&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;=&lt;/span&gt;&lt;span
 class=&quot;xml-attribute&quot;&gt;&quot;SubMasterContentPlaceHolder&quot;&amp;nbsp;&lt;/span&gt;
&amp;nbsp;&lt;span class=&quot;xml-attname&quot;&gt;runat&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;=&lt;/span&gt;&lt;span
 class=&quot;xml-attribute&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
 &lt;span class=&quot;whitespace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;/span&gt; &amp;nbsp;&lt;span class=&quot;xml-comment&quot;&gt;&amp;lt;!-- Insert
default &quot;SubMasterContentPlaceHolder&quot; markup here
--&amp;gt;&lt;/span&gt;&lt;br /&gt;
 &lt;span class=&quot;whitespace&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&lt;/span&gt; &amp;nbsp;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;asp:ContentPlaceHolder&lt;/span&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt;&lt;span
 class=&quot;xml-punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;asp:Content&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt;&lt;span class=&quot;xml-tagname&quot;&gt;&lt;span
 class=&quot;Apple-tab-span&quot;&gt;&lt;span
 class=&quot;xml-tagname&quot;&gt;ContentPlaceHolders are great for improving the
performance of your site. They allow for the rendering of the code
that needs to be rendered only. Another benefit is taking advantage
of the inheritance, which allows you to write less
code.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;Recursive Values&lt;/h2&gt;

&lt;p&gt;Umbraco is XML, all of it. Each node in the XML represents a
content page. This allows for the nesting of your content nodes.
Since we have this format of XML nesting we can use recursion to
walk up the content tree until it finds what its looking
for.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;This can be leveraged for items that need to appear on every
page, but you don't want to have to throw the HTML on each template
you have or each content item that you have.&lt;/p&gt;

&lt;p&gt;This means you can set a property that every page has on the
root node and use the recursive feature to have each
&amp;lt;umbraco:Item&amp;gt; walk up the content tree until it finds the
first occurence which is the one you want.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Another way to use this is if there are only certain occurences
where you will want to change the property, but every other time
you want it to be a default value. With the recursion you can set
it on the content which doesn't have a default value and the
recursion will stop at that content node and display the correct
value. Every other content node that doesn't have a set value will
display the default value.&lt;/p&gt;

&lt;h2&gt;Content Channels&lt;/h2&gt;

&lt;p&gt;Content channels are used for content editing. They allow you to
use third party applications such as Microsoft Word or Microsoft
Live for example to edit Umbraco Content. These allow for you to
have all of the features of spell checking, creating and inserting
graphics, and or editing Umbraco content while offline.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;A problem with Content Channels is that you are only able to
edit three of the fields that a single document type has. An
example is the Movies. You would only be able to edit the
Description of the movie, the date released and the actors of the
movie. Every other property on the Movie Document Type would be
left blank.&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Nofication Settings&lt;/h2&gt;

&lt;p&gt;There are several features in Umbraco which are set by default.
A great example is how English is always the UK english. That is
why your dates are set as&amp;nbsp;&lt;span&gt;12/09/2012 instead of
09/12/2012. Well you can change this by going to your Websites
directory and then going to umbraco&amp;#92;config&amp;#92;lang. The en xml
document is the langauge document for english. If you changed the
line&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&amp;lt;language alias=&quot;en&quot; intName=&quot;English (uk)&quot;
localName=&quot;English&quot; lcid=&quot;&quot; culture=&quot;en-GB&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;to&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&amp;lt;language alias=&quot;en&quot; intName=&quot;English (us)&quot;
localName=&quot;English&quot; lcid=&quot;1033&quot; culture=&quot;en-US&quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;your values dates will change as well as other things.&lt;/p&gt;

&lt;p&gt;In the same file you also can change the default message for
autogenerated emails sent by Umbraco. Look for the key&amp;nbsp;&amp;lt;key
alias=&quot;mailBodyHtml&quot; version=&quot;3.0&quot;&amp;gt; and this is where you would
change it to something more appealing to you.&lt;/p&gt;

&lt;p&gt;Disclaimer: You are editing a file that Umbraco relies on so you
shouldn't do this unless you are absolutly sure you know what your
doing. If you choose to do so I am not responsible for breaking
your installation!&lt;/p&gt;

&lt;h2&gt;Media&lt;/h2&gt;

&lt;p&gt;When uploading umbraco media images in the media folder you will
get a full sized image which you uploaded and you will also get a
thumbnail of default size. You can change the sizes of the
thumbnails which are created by going to the developers tab,
expanding the Data Types folder and then selecting Upload change
the field Thumbnail Sizes and thumbnails will be created of the
specified size.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;499&quot; height=&quot;219&quot; alt=&quot;TrainingUploadImage&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Alternate Templates&lt;/h2&gt;

&lt;p&gt;Alternate Templates are a way which you can render a content
place using a different template than the template which it is
configured to use. There are two ways which to reference an
alternate template. Both ways will produce the exact same results,
but the look different. The first way is to add to the query
parameters&amp;nbsp;?altTemplates=-Name_Of_Alt_Template-. The second
way is to add /-Name_Of_Alt_Template at the end of the
url.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Since you can add this to any page you need to be careful about
which sites can be rendered or not. If you have a piece of content
which is data only then you may be able to add alt template to the
end of a template and find a bug in your page! This means you need
to be careful and make sure sites you don't want rendered can't be
rendered.&lt;/p&gt;

&lt;h2&gt;Useful Tools&lt;/h2&gt;

&lt;p&gt;Two of the packages which we used during the training were some
of the coolest tools I have seen for Umbraco. The first tool is
called Contour. Contour is a tool which will allow for the simple
creation of forms. You can implement a Contact Us form in a few
clicks. You can make your own forms for whatever feature you need
user input for.&lt;/p&gt;

&lt;p&gt;The second tool which we used was XSLTSearch. This is a search
for your website. It is easy to implement and adds a feature which
looks extremely impressive.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;This was it for the second day. In two days I managed to create
an entire website featuring an search feature which will search my
entire website for whatever the user wants. A really sweet slider
bar was implemented via Razor Macro for the front end to scroll
through items which were entered into the content page. Top and
Side Naviagation bars which will dynamically display your content.
All of this was really easy to implement and its all thanks to
Umbraco.&lt;/p&gt;

&lt;p&gt;If you are on the fence about a CMS then I would really
recommend Umbraco. Better yet, Hire Proworks and we will use
Umbraco for you!&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/09/12/umbraco-training-day-2/</guid>
         <pubDate>Wed, 12 Sep 2012 12:31:12 +0000</pubDate>
      </item>
      <item>
         <title>Changes to MetaWeblog API - first contribution to the Umbraco core?</title>
         <link>http://www.enkelmedia.se/blogg/2012/9/11/changes-to-metaweblog-api-first-contribution-to-the-umbraco-core.aspx?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=Changes to MetaWeblog API - first contribution to the Umbraco core?</link>
         <description>&lt;p&gt;Today I was playing with my our public website, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enkelmedia.se/&quot;&gt;enkelmedia.se&lt;/a&gt;, where I host this blog. It’s built with Umbraco, some custom document types and some event handlers that takes care of the sorting and stuff.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enkelmedia.se/media/11521/WindowsLiveWriter_ChangestoMetaWeblogAPIfirstcontributiont_12841_image_2.png&quot;&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/11526/WindowsLiveWriter_ChangestoMetaWeblogAPIfirstcontributiont_12841_image_thumb.png&quot; width=&quot;289&quot; height=&quot;256&quot; alt=&quot;image&quot; border=&quot;0&quot; style=&quot;display:inline;margin-left:0px;margin-right:0px;border-width:0px;&quot;/&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;One of the features that I’ve been playing with is the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.mayflymedia.co.uk/blog/updating-content-on-the-fly-with-metaweblog-api/&quot;&gt;MetaWeblog API&lt;/a&gt; which makes it possible to post content to Umbraco using almost any device. You can use Windows Live Writer (like I’m doing right now), an &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://itunes.apple.com/se/app/blogger/id459407288?mt=8&quot;&gt;iPhone app&lt;/a&gt; or any other software that supports the MetaWeblog API.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;Some stuff did not work&lt;/h4&gt;
&lt;p&gt;&lt;br /&gt;What I found was that the implementation in Umbraco sometimes lacks in it’s handling of exceptions. I.e. clicking yes in this dialog made my blog root node disappear and I hade to consult &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://amdonnelly.blogspot.se/2011/04/umbraco-missing-node-in-content-tree.html&quot;&gt;this post&lt;/a&gt; by Alan Donnelly to solve it. I removed the last entries in cmsContentVersion and republished the node using the direct url /umbraco/editContent.aspx?id=yada.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enkelmedia.se/media/11531/WindowsLiveWriter_ChangestoMetaWeblogAPIfirstcontributiont_12841_Untitled-2_2.jpg&quot;&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/11536/WindowsLiveWriter_ChangestoMetaWeblogAPIfirstcontributiont_12841_Untitled-2_thumb.jpg&quot; width=&quot;434&quot; height=&quot;400&quot; alt=&quot;Untitled-2&quot; border=&quot;0&quot; style=&quot;display:inline;border:0px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; &lt;/p&gt;
&lt;h4&gt;Even more annoying&lt;/h4&gt;
&lt;p&gt;Was the fact that the Umbraco implementation of MetaWeblog API returns your sites url whithout scheme or ports:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;yadadomain.com/blog.aspx&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Window Live Writer expects something like this:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;http://www.yadadomain.com/blog.aspx&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;And the crazy party is that there is no way to change it in the Windows Live Writer UI, the textbox is disabled:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enkelmedia.se/media/11541/WindowsLiveWriter_ChangestoMetaWeblogAPIfirstcontributiont_12841_Untitled-3_2.jpg&quot;&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/11546/WindowsLiveWriter_ChangestoMetaWeblogAPIfirstcontributiont_12841_Untitled-3_thumb.jpg&quot; width=&quot;434&quot; height=&quot;402&quot; alt=&quot;Untitled-3&quot; border=&quot;0&quot; style=&quot;display:inline;border:0px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The only way is to open “regedit” and look for this key: HKEY_CURRENT_USER&amp;#92;Software&amp;#92;Microsoft&amp;#92;Windows Live&amp;#92;Writer&amp;#92;Weblogs&amp;#92; where you can change the settings of Live Writer.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;Contribution to the core?&lt;/h4&gt;
&lt;p&gt;We’ll to be honest, until now I haven’t really taking the time to clone the repository from CodePlex before, I’ve played around with the source and used is as a reference and for documentation – but never really change any thing.&lt;/p&gt;
&lt;p&gt;But today I read though the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/contribute&quot;&gt;instructions on how to contribute&lt;/a&gt; and actually performed my first pull request!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://umbraco.codeplex.com/SourceControl/network/forks/enkelmedia/umbracoMetaApiUrl/contribution/3372&quot; title=&quot;http://umbraco.codeplex.com/SourceControl/network/forks/enkelmedia/umbracoMetaApiUrl/contribution/3372&quot;&gt;http://umbraco.codeplex.com/SourceControl/network/forks/enkelmedia/umbracoMetaApiUrl/contribution/3372&lt;/a&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.enkelmedia.se/blogg/2012/9/11/changes-to-metaweblog-api-first-contribution-to-the-umbraco-core.aspx</guid>
         <pubDate>Tue, 11 Sep 2012 21:05:00 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco Training Day 1</title>
         <link>http://www.proworks.com/blog/2012/09/11/umbraco-training-day-1/</link>
         <description>&lt;p&gt;&lt;img width=&quot;300&quot; height=&quot;169&quot; alt=&quot;wesley at school&quot; style=&quot;float:left;&quot;/&gt;Today is the first day of my umbraco certification
training level 1. We discussed the basics of We covered Content,
Document Types, Templates, Stylesheets, XSLT macros, Razor Macros,
and Multi-Lingual websites.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;span&gt;What is Umbraco?&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&lt;span&gt;Umbraco is a web development framework which is optimized
for human readable editorial&amp;nbsp;&lt;/span&gt; &lt;span&gt;content. Umbraco
lets you build a website that will let a user add content and
dynamically&lt;/span&gt; &lt;span&gt;update the website.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;&amp;nbsp;Content&lt;/h2&gt;

&lt;p&gt;Content can be a wide range of things on a website. Content can
be anything from blogs, news items, movies, links or naviagtion
bars. To populate your website you will need to add content. To
define your content you need to create document types.&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Document Types&lt;/h2&gt;

&lt;p&gt;A document type will be what defines your content. A common
example would be movies. A movie has a title, author, release date,
screen writer, and many other properties. Document types are what
you will use to define movies and what they contain. Document types
are the foundation of a well created Umbraco website.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;A tip when creating document types for your website a good idea
is to create a document type for each prototype a designer shows
you, or each prototype you design.&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Templates&lt;/h2&gt;

&lt;p&gt;Templates are what is used for dynamically creating your
webpages. You input basic HTML and can use tags such as
&amp;lt;umbraco:Item field=&quot;PropertyName&quot; runat=&quot;server&quot;&amp;gt; which will
tell the parser to get a property value where the alias of the
property is equal to the field. This means you can grab the content
which you have created and display any property on your content!
Your webpages can be completely dynamic simply by adding one
tag.&lt;/p&gt;

&lt;h2&gt;Stylesheets&lt;/h2&gt;

&lt;p&gt;Stylesheets within Umbraco are used exactly the same as any
other website. There is nothing different between Umbraco
stylesheets and any other stylesheet you might see.&lt;/p&gt;

&lt;h2&gt;Macros&lt;/h2&gt;

&lt;p&gt;Macros are generic descriptions for dynamic content or dynamic
actions. They can do practically anything you desire. They are used
for modifying Umbraco data, or integrate with external data. They
can be used to create html content dynamically. With macros you can
turn content into your navigation bars, or iterate through a list
of blogs and display the titles.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;That is it for the first level of training. There will be more
to follow tomorrow night!&lt;/p&gt;

&lt;h2&gt;Dynamic&lt;/h2&gt;

&lt;p&gt;For those of you who want to know what I mean by Dynamic (way to
go using ideas without defining them Wesley -_-) then I shall
explain it. By dynamic I mean that it isn't defined until runtime.
An example would be the navigation bar. One way to do the
Navigation bar would be&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;lt;ul&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;/homepage&quot;&amp;gt;Homepage
&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&quot;/about-us&quot;&amp;gt;About
us&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; &amp;nbsp; &amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;lt;li&amp;gt;&amp;lt;a
href=&quot;/documentation&quot;&amp;gt;Documentation&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;/ul&amp;gt;&lt;/p&gt;

&lt;p&gt;That is very static and to change it you would have to add
to/remove/modify the links directly from the html.&lt;/p&gt;

&lt;p&gt;A way to do this dynamically would be using Razor. You would
grab content you have created and then displaying the links that
you wanted.&lt;/p&gt;

&lt;pre&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
    @foreach (var item in parent.Children.Where(&quot;Visible&quot;))&amp;nbsp; {
&lt;/pre&gt;

&lt;pre&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&quot;@item.Url&quot;&amp;gt;@item.Name&amp;lt;/a&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
      }&lt;br /&gt;
    &amp;lt;/ul&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&lt;img width=&quot;356&quot; height=&quot;352&quot; alt=&quot;ContentNodes&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
For this example red = Parent, Green = Children, Blue = Great Grandchildren. What the foreach does is iterates through the list of children (Green) and creates an &amp;amp;lt;li&amp;amp;gt; and &amp;amp;lt;a&amp;amp;gt; for each of them. This means you don't know exactly what items will be displayed (assuming you only look at the code). That is what I mean by dynamic. The code is created when the page is rendered. This way you can add or remove children nodes to add or remove links for your navigation bar. Creating or remove content nodes to change how your page is rendered.
&lt;/pre&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/09/11/umbraco-training-day-1/</guid>
         <pubDate>Tue, 11 Sep 2012 20:01:26 +0000</pubDate>
      </item>
      <item>
         <title>Using Membership In Umbraco - Part 2 - Registering Users</title>
         <link>http://www.carbonsoft.co.uk/articles/2012/09/using-membership-in-umbraco-part-2-registering-users.aspx</link>
         <description>This is part 2 of a number of articles looking at the basics of using Umbraco Membership. In part 1 we looked at creating a member through the Umbraco admin site and adding a login page to the front end website. In this article we will create a registration page to allow users to sign up and log in to your website.</description>
         <author>Jonathan Kay</author>
         <guid isPermaLink="false">http://www.carbonsoft.co.uk/articles/2012/09/using-membership-in-umbraco-part-2-registering-users.aspx</guid>
         <pubDate>Mon, 10 Sep 2012 08:30:00 +0000</pubDate>
      </item>
      <item>
         <title>Media management rocks with Umbraco 4.9.0</title>
         <link>http://feedproxy.google.com/~r/Betafirm/~3/TuutaJkszyc/</link>
         <description>Media management in Umbraco has been pretty solid so far, especially with the addition of the Desktop Media Uploader (credit to Matt Brailsford for awesomeness) in version 4.7. Still there is room for improvements. In general, I think that being able to do things faster and in batches is what has been lacking. With Umbraco version ...</description>
         <guid isPermaLink="false">http://betafirm.com/?p=329</guid>
         <pubDate>Sun, 09 Sep 2012 14:38:20 +0000</pubDate>
         <content:encoded><![CDATA[<p>Media management in Umbraco has been pretty solid so far, especially with the addition of the Desktop Media Uploader (credit to <a rel="nofollow"
 target="_blank" href="http://twitter.com/mattbrailsford">Matt Brailsford</a> for awesomeness) in version 4.7. Still there is room for improvements.</p><p><span
 id="more-329"></span></p><p>In general, I think that being able to do things faster and in batches is what has been lacking. With Umbraco version 4.9.0, media management has taken a huge step towards that. Using HTML5 for multiple file upload is way cool. So is being able to do quick sorting, filtering media and deleting multiple medias.</p><p>I did some testing today and put together a quick screencast, to show just how cool media management is going to be.</p><h2>Media management</h2> <span
 class='embed-youtube' style='text-align:center;display:block;'>
</span> <img src="http://feeds.feedburner.com/~r/Betafirm/~4/TuutaJkszyc" height="1" width="1"/>]]></content:encoded>
         <category>Blog</category>
      </item>
      <item>
         <title>From 0 to Umbraco site in 60 seconds</title>
         <link>http://feedproxy.google.com/~r/cultiv/~3/XrpooxQTVcs/</link>
         <description>&lt;p&gt;This screencast shows you how to get a fully functional Umbraco site up and running in 60 seconds. Make sure you have &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/web/webmatrix/&quot;&gt;WebMatrix&lt;/a&gt; installed.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt; &lt;/p&gt;</description>
         <author>info.nospamplease@www.cultiv.nl (admin)</author>
         <guid isPermaLink="false">http://cultiv.nl/blog/2012/9/8/from-0-to-umbraco-site-in-60-seconds/</guid>
         <pubDate>Sat, 08 Sep 2012 16:26:25 +0000</pubDate>
         <content:encoded><![CDATA[<p>This screencast shows you how to get a fully functional Umbraco site up and running in 60 seconds. Make sure you have <a rel="nofollow" target="_blank" href="http://www.microsoft.com/web/webmatrix/">WebMatrix</a> installed.</p>
<p></p> 
<p> </p><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/cultiv?a=XrpooxQTVcs:C_oCHeIVHBc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/cultiv?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/cultiv?a=XrpooxQTVcs:C_oCHeIVHBc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/cultiv?i=XrpooxQTVcs:C_oCHeIVHBc:F7zBnMyn0Lo" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/cultiv/~4/XrpooxQTVcs" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Issues relating to XML Caching – 2</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/09/08/issues-relating-to-xml-caching-2/</link>
         <description>After the previous fix, xml cache is still not properly refreshed. We now have after publish, one node but non @isDoc children are duplicated. The xml going into the XML Cache file is corrupted. Look at TransferValuesFromDocumentXmlToPublishedXml (323) For some reason, this loop does not loop through all elements. Change from this (328:329): foreach (XmlNode [...]</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1832</guid>
         <pubDate>Sat, 08 Sep 2012 12:07:50 +0000</pubDate>
         <content:encoded><![CDATA[<p>After the previous fix, xml cache is still not properly refreshed. We now have after publish, one node but non @isDoc children are duplicated.<br /> The xml going into the XML Cache file is corrupted.<br /> Look at TransferValuesFromDocumentXmlToPublishedXml (323)<br /> For some reason, this loop does not loop through all elements.<br /> Change from this (328:329):</p>
<pre>	foreach (XmlNode n in PublishedNode.SelectNodes(xpath))
		PublishedNode.RemoveChild(n);
To:
	XmlNode[] NodesToRemove =
		(new List(PublishedNode.SelectNodes(xpath).OfType())).ToArray();
	for (int i = 0; i &lt; NodesToRemove.Length; i++)
		PublishedNode.RemoveChild(NodesToRemove[i]);
</pre>
<p>This uses Linq, and we will need to add this as well: using System.Linq; (+ a reference to System.Core)</p>
<p>I have fixed this throughout the code but this would need to be tested.</p>
<pre>content.cs 451:452
from
	foreach (XmlNode child in parentNode.SelectNodes(xpath))
		parentNode.RemoveChild(child);
to
	XmlNode[] NodesToRemove =
		(new List(parentNode.SelectNodes(xpath).OfType())).ToArray();
	for (int i = 0; i &lt; NodesToRemove.Length; i++)
		parentNode.RemoveChild(NodesToRemove[i]);

macro.cs 953:954
from
	foreach (XmlNode n in currentNode.SelectNodes("./node"))
		currentNode.RemoveChild(n);
to
	XmlNode[] NodesToRemove =
		(new List(currentNode.SelectNodes("./node").OfType())).ToArray();
	for (int i = 0; i &lt; NodesToRemove.Length; i++)
		currentNode.RemoveChild(NodesToRemove[i]);

StandardPackageActions.cs 493:500
from
	foreach (XmlNode ext in xn.SelectNodes("//ext"))
	{
		if (ext.Attributes["alias"] != null &amp;&amp; ext.Attributes["alias"].Value == _alias)
		{
			xn.RemoveChild(ext);
			inserted = true;
		}
	}
to
	XmlNode[] NodesToRemove =
		(new List(xn.SelectNodes("//ext").OfType())).ToArray();
	for (int j = 0; j &lt; NodesToRemove.Length; j++)
	{
		if (NodesToRemove[j].Attributes["alias"] != null &amp;&amp; NodesToRemove[j].Attributes["alias"].Value == _alias)
		{
			xn.RemoveChild(NodesToRemove[j]);
			inserted = true;
		}
	}

StandardPackageActions.cs 588:595
from
	foreach (XmlNode node in xn.SelectNodes("//allow"))
	{
		if (node.Attributes["host"] != null &amp;&amp; node.Attributes["host"].Value == hostname)
		{
			xn.RemoveChild(node);
			inserted = true;
		}
	}
to
	XmlNode[] NodesToRemove =
		(new List(xn.SelectNodes("//allow").OfType())).ToArray();
	for (int j = 0; j &lt; NodesToRemove.Length; j++)
	{
		if (NodesToRemove[j].Attributes["host"] != null &amp;&amp; NodesToRemove[j].Attributes["host"].Value == hostname)
		{
			xn.RemoveChild(NodesToRemove[j]);
			inserted = true;
		}
	}

Document.cs 1446:1447
from
	foreach (XmlNode xDel in x.SelectNodes("./data"))
		x.RemoveChild(xDel);
to
	XmlNode[] NodesToRemove =
		(new List(x.SelectNodes("./data").OfType())).ToArray();
	for (int i = 0; i &lt; NodesToRemove.Length; i++)
		x.RemoveChild(NodesToRemove[i]);
</pre>
<p>&nbsp;</p>]]></content:encoded>
      </item>
      <item>
         <title>Issues relating to XML Caching – 1</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/09/07/issues-relating-to-xml-caching-1/</link>
         <description>After publish xml cache is not properly refreshed. The same doctype element is re-added, and for example, an XSLT Menu macro shows too many pages. &amp;#8230;/editContent.aspx.cs (315) &amp;#8230;/umbraco/presentation/content/content.cs line 392 calls GetElementById -&amp;#62; attr.attr.OwnerElement.IsRooted (604) -&amp;#62; XmlLinkedNode (52) returns false for the published document. This is a mono issue. There is no IsRooted in the [...]</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1824</guid>
         <pubDate>Fri, 07 Sep 2012 12:04:06 +0000</pubDate>
         <content:encoded><![CDATA[<p>After publish xml cache is not properly refreshed. The same doctype element is re-added, and for example, an XSLT Menu macro shows too many pages. <br /> &#8230;/editContent.aspx.cs (315) <br /> &#8230;/umbraco/presentation/content/content.cs line 392 calls GetElementById <br /> -&gt; attr.attr.OwnerElement.IsRooted (604) <br /> -&gt; XmlLinkedNode (52) returns false for the published document. <br /> This is a mono issue. There is no IsRooted in the MS .net documentation. <br /> In content.cs change <br /> 393 from,</p>
<pre>	XmlNode x = xmlContentCopy.GetElementById(id.ToString())
to,
	//Deal with IsRooted being false in mono for the published node
	string xpathId = UmbracoSettings.UseLegacyXmlSchema ?
		String.Format ("//node[@id = '{0}'], id.ToString()") :
		String.Format ("//*[@isDoc][@id='{0}']", id.ToString());
	XmlNode x = xmlContentCopy.SelectSingleNode(xpathId);
</pre>
<p>(Not so sure about the legacy syntax&#8230;) &amp; did not vet load balancing. As far as I can tell, there is an &#8216;IsRooted&#8217; property on Xml documents, which is set to false during the operations in getPreviewOrPublishNode(&#8230;), and the consequent call to GetElementById in AppendDocumentXml (content.cs, 393) returns null and breaks the code. That&#8217;s why we do not use XmlNode x = xmlContentCopy.GetElementById(id.ToString()) here.</p>
<p>&nbsp;</p>]]></content:encoded>
      </item>
      <item>
         <title>How to keep Umbraco awake and alive</title>
         <link>http://feedproxy.google.com/~r/Betafirm/~3/wHfB1dlxXf8/</link>
         <description>&lt;div
 style=&quot;float:left;&quot;&gt;&lt;img
 width=&quot;261&quot; height=&quot;261&quot; src=&quot;http://betafirm.com/wp-content/uploads/2012/08/dirty-e1351343539403.jpg&quot; class=&quot;attachment-archive-thumb wp-post-image&quot; alt=&quot;dirty&quot; title=&quot;dirty&quot;/&gt;&lt;/div&gt;Have you ever noticed, how slow your Umbraco website can be on the first visit? There is a reason for that, and luckily some simple ways to speed it up. The problem Sometimes when you visit an Umbraco website, you may get a very long response time. It seems odd, because after that, all the ...</description>
         <guid isPermaLink="false">http://betafirm.com/?p=276</guid>
         <pubDate>Wed, 05 Sep 2012 07:37:50 +0000</pubDate>
         <content:encoded><![CDATA[<div
 style="float:left;"><img
 width="261" height="261" src="http://betafirm.com/wp-content/uploads/2012/08/dirty-e1351343539403.jpg" class="attachment-archive-thumb wp-post-image" alt="dirty" title="dirty"/></div><p>Have you ever noticed, how slow your Umbraco website can be on the first visit? There is a reason for that, and luckily some simple ways to speed it up.</p><p><span
 id="more-276"></span></p><h2>The problem</h2><p>Sometimes when you visit an Umbraco website, you may get a very long response time. It seems odd, because after that, all the pages loads lightning fast as always. Even that first page, that maybe took 10-12 seconds to load before.</p><h2>The reason</h2><p>So it turns out that the IIS server, that most Umbraco websites uses, comes with a setting called Idle Time-out for Apllication Pools. In short, that setting determines for how long a period of time, a website will be &#8220;awake&#8221; or &#8220;alive&#8221;, after the last page has been requested by a visitor. After that period, the website will be removed from IIS&#8217;s memory. That way IIS doesn&#8217;t have to use memory on a website with no activity.</p><p>However the next time someone visit the website, IIS needs to load in into memory again and that takes time. Precious time.</p><h2>The solution</h2><p>There several ways to overcome the initial delay:</p><ul><li><strong>Get more visitors. </strong>As you might have figured out already, the time-outs will only be a problem for websites with few visitors. So just get some more :)</li><li><strong>Disable or increase the time-out. </strong>If you have access to IIS, you can easily increase the time-out or disable it altogether. <a rel="nofollow"
 target="_blank" href="http://brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings">You can read how to here</a>.</li><li><strong>Poke Umbraco.</strong> If you can&#8217;t get round-the-clock visitors and don&#8217;t have access to IIS, there is a third option. Poking Umbraco! Simply send a request to Umbraco every few minutes, to keep the engine spinning. There is even a service for it <a rel="nofollow"
 target="_blank" href="http://dnnmonitor.com">dnnmonitor.com</a> (actually it is for DotNetNuke, so don&#8217;t tell anyone). Sign up and add a link to your website, to a page without tracking and analytics. Like mysite.com/umbraco/ping.aspx and dnnmonitor.com will request it every few minutes.</li></ul> <img src="http://feeds.feedburner.com/~r/Betafirm/~4/wHfB1dlxXf8" height="1" width="1"/>]]></content:encoded>
         <category>Blog</category>
      </item>
      <item>
         <title>Some Media related issues</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/09/02/some-media-related-issues/</link>
         <description>Insert image through RTE: System.NotSupportedException The type System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] is not supported because it implements IDictionary Description: HTTP 500.Error processing request. Details: Non-web exception. Exception origin (name of application or object): System.Xml. http://127.0.0.1:8080/umbraco/controls/Images/ImageViewerUpdater.asmx/UpdateImage at System.Xml.Serialization.TypeData.get_ListItemType () [0x000cf] in /home/kol3/Development/mono/mcs/class/System.XML/System.Xml.Serialization/TypeData.cs:331 This error can be traced to &amp;#8230;/umbraco/presentation/umbraco/controls/images/imageViewer.ascx.cs line 96, [...]</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1821</guid>
         <pubDate>Sun, 02 Sep 2012 19:10:52 +0000</pubDate>
         <content:encoded><![CDATA[<p>Insert image through RTE: System.NotSupportedException The type System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] is not supported because it implements IDictionary<br /> <strong>Description: HTTP 500.Error processing request.</strong><br /><strong> Details: Non-web exception.</strong> Exception origin (name of application or object): System.Xml. http://127.0.0.1:8080/umbraco/controls/Images/ImageViewerUpdater.asmx/UpdateImage at System.Xml.Serialization.TypeData.get_ListItemType () [0x000cf] in /home/kol3/Development/mono/mcs/class/System.XML/System.Xml.Serialization/TypeData.cs:331<br /> <em><strong>This error can be traced to &#8230;/umbraco/presentation/umbraco/controls/images/imageViewer.ascx.cs line 96</strong></em>,<br /> which calls umbraco.IO.IOHelper.ResolveUrl(&#8230;) in &#8230;/umbraco/businesslogic/IO/IOHelper.cs 44:50 <br /><em><strong>In line 49, note the call to: VirtualPathUtility.ToAbsolute(string virtualPath, string AppPath).</strong></em><br /> In the mono implementation AppPath cannot be null.<br /> We resolve as follows: &#8230;/umbraco/businesslogic/IO/MultiplatformHelper.cs, add</p>
<pre>		public static string EnsureRootAppPath (string path)
		{
			if (IsUnix &amp;&amp; (path == String.Empty))
				return "/";
			return path;
		}
</pre>
<p>Then in &#8230;/umbraco/businesslogic/IO/IOHelper.cs, change line 49 from,</p>
<pre>                return VirtualPathUtility.ToAbsolute(virtualPath, SystemDirectories.Root);
</pre>
<p>to</p>
<pre>                return VirtualPathUtility.ToAbsolute(virtualPath, MultiPlatformHelper.EnsureRootAppPath(SystemDirectories.Root));
</pre>
<p>While we are at it we&#8217;ll also refactor in as follows (and update all references as needed)</p>
<pre>		public static bool IsWindows
		{
			get
			{
				return OSPlatform.Contains(PLATFORM_WIN);
			}
		}

		public static bool IsUnix
		{
			get
			{
				return OSPlatform.Contains(PLATFORM_UNIX);
			}
		}
</pre>
<p>Upload png (any image) media: uploaded but not correct format error issued.<br /> In &#8230;/umbraco/presentation/umbraco/controls/ContentControl.cs, change line 447<br /> from</p>
<pre>if (p.PropertyType.ValidationRegExp != "")
</pre>
<p>to</p>
<pre>if (p.PropertyType.ValidationRegExp != null &amp;&amp; p.PropertyType.ValidationRegExp != "")
</pre>
<p>The conditional should work, but mono is converting &#8220;&#8221; to null, and this casues the conditional to fail and give a false error message.</p>
<p>&nbsp;</p>]]></content:encoded>
      </item>
      <item>
         <title>Fixing bugs, which I introduced with the ‘MoveNext’ issue fixes</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/09/01/fixing-bugs-which-i-introduced-with-the-movenext-issue-fixes/</link>
         <description>Last week&amp;#8217;s MoveNext() fix actually turns out to be too restrictive and yielded a subtle bug. Symptom: Razor Code of this format: @{ var image = @Model.Media(&quot;relatedMedia&quot;); }</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1817</guid>
         <pubDate>Sat, 01 Sep 2012 21:09:26 +0000</pubDate>
         <content:encoded><![CDATA[<p>Last week&#8217;s MoveNext() fix actually turns out to be too restrictive and yielded a subtle bug.</p>
<p>Symptom:</p>
<p>Razor Code of this format:</p>
<pre>    @{
      var image = @Model.Media("relatedMedia");
    }
    &lt;&lt;mg src="http://mce_host/forum/.../@image.UmbracoFile" alt="@image.Name" /&gt;</pre>
<p>only returns the media path with first application launch. Subsequent calls return null. I introduced this as a bug in the last set up 'MoveNext issue' fixes.</p>
<pre>In  ExamineBackedMedia.cs change
48:51, from,
            if (media != null)
            {
				if (media.MoveNext())
					return new ExamineBackedMedia(media.Current);
to
            if (media != null)
            {
				media.MoveNext();
				if (media.Current != null)
					return new ExamineBackedMedia(media.Current);
</pre>
<p>This is because the relevant XPathNodeIterator is cached, and once the index is advanced its state is retained.</p>
<p>I am also going to relax the remaining restrictions involving MoveNext as follows:</p>
<pre>Again in  ExamineBackedMedia.cs change:
64:67, from,
			XPathNodeIterator xpi = xpath.Select(".");
            //add the attributes e.g. id, parentId etc
			if (xpi.MoveNext())
	            if (xpi.Current.HasAttributes)
to
			XPathNodeIterator xpi = xpath.Select(".");
            //add the attributes e.g. id, parentId etc
			xpi.MoveNext ();
			if (xpi.Current != null)
	            if (xpi.Current.HasAttributes)

110:113 from,
            var media = umbraco.library.GetMedia(this.Id, true);
            if (media != null &amp;&amp; media.MoveNext())
            {
                XPathNavigator xpath = media.Current;
                ...
to
            var media = umbraco.library.GetMedia(this.Id, true);
            if (media != null)
            {
				media.MoveNext();
				if (media.Current != null)
				{
					XPathNavigator xpath = media.Current;
	                var result = xpath.SelectChildren(XPathNodeType.Element);
	                while (result.MoveNext())
	                {
	                    if (result.Current != null &amp;&amp; !result.Current.HasAttributes)
	                    {
	                        if (string.Equals(result.Current.Name, alias))
	                        {
	                            string value = result.Current.Value;
	                            if (string.IsNullOrEmpty(value))
	                            {
	                                value = result.Current.OuterXml;
	                            }
	                            Values.Add(result.Current.Name, value);
	                            propertyExists = true;
	                            return new PropertyResult(alias, value, Guid.Empty);
	                        }
	                    }
	                }
				}
            }

370:373, from,
            var media = umbraco.library.GetMedia(ParentId, true);
            if (media != null &amp;&amp; media.MoveNext())
            {
                var children = media.Current.SelectChildren(XPathNodeType.Element);
                ...
to
            if (media != null)
            {
				media.MoveNext();
				if (media.Current != null)
				{
					var children = media.Current.SelectChildren(XPathNodeType.Element);
	                List mediaList = new List();
	                while (children != null &amp;&amp; children.Current != null)
	                {
	                    if (children.MoveNext())
	                    {
	                        if (children.Current.Name != "contents")
	                        {
	                            //make sure it's actually a node, not a property
	                            if (!string.IsNullOrEmpty(children.Current.GetAttribute("path", "")) &amp;&amp;
	                                !string.IsNullOrEmpty(children.Current.GetAttribute("id", "")) &amp;&amp;
	                                !string.IsNullOrEmpty(children.Current.GetAttribute("version", "")))
	                            {
	                                mediaList.Add(new ExamineBackedMedia(children.Current));
	                            }
	                        }
	                    }
	                    else
	                    {
	                        break;
	                    }
	                }
	                return mediaList;
				}
            }

DynamicXml.cs, 31:33
from,
            if (xpni != null)
            {
                if (xpni.MoveNext())
                {
                    var xml = xpni.Current.OuterXml;
to
            if (xpni != null)
            {
				xpni.MoveNext();
				if (xpni.Current != null)
                {
                    var xml = xpni.Current.OuterXml;          
</pre>
<p>&nbsp;</p>
<p>Also change function GetCurrentNodeFromIterator in .../umbraco/businesslogic/xmlHelper.cs to:</p>
<pre>		//this is very mono specific at the moment
		public static XmlNode GetCurrentNodeFromIterator(XPathNodeIterator xpi)
		{
			if (xpi != null)
			{
				xpi.MoveNext();
				if (xpi.Current != null)
					return ((IHasXmlNode)xpi.Current).GetNode();
			}

			return null;
		}
</pre>
<p>&nbsp;</p>]]></content:encoded>
      </item>
      <item>
         <title>Umbraco och Client Dependency Framework</title>
         <link>http://www.enkelmedia.se/blogg/2012/9/1/umbraco-och-client-dependency-framework.aspx?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=Umbraco och Client Dependency Framework</link>
         <description>&lt;p&gt;Hej!&lt;/p&gt;
&lt;p&gt;I fortsättningen kommer jag skriva en och annan bloggpost på engelska för att göra informationen tillgänglig för dem som inte haft förmånen att lära sig vårt fina språk =D&lt;br /&gt; &lt;br /&gt; So this will be my first blog post in English, and I'm going to try to explain how to use the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://clientdependency.codeplex.com/&quot;&gt;Client Dependency Framework&lt;/a&gt; with Umbraco CMS.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;Client what?&lt;/h4&gt;
&lt;p&gt;First of all, the Client Dependency framework helps you to include, combine and compress javascript and CSS-files used on the website. It is not Umbraco-specific but this post will focus on how to use it in Umbraco.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;Why?&lt;/h4&gt;
&lt;p&gt;There are a couple of good reason to use this framework.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compressing and combining resource files reduces load time.&lt;/li&gt;
&lt;li&gt;UserControls och Razor macros can insert dependent files in the head-tag without any fancy pluming.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;This picture shows &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.enkelmedia.se/our.umbraco.org&quot;&gt;our.umbraco.org&lt;/a&gt;, they are using the Client Dependency Framework, but haven't activated it. Becuse of this the browser has to download around 20 different css and javascript files.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/11360/clientdependency-not-in-place.png&quot; width=&quot;490&quot; height=&quot;381&quot; alt=&quot;Clientdependency -not -in -place&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;How?&lt;/h4&gt;
&lt;p&gt;Umbraco ships with the Client Dependency framework and there is not much that you need to set up. If you want to use the framework in a user control, just add a reference to it.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div dir=&quot;ltr&quot; id=&quot;CodeDiv&quot;&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;%@ Register Namespace=&quot;ClientDependency.Core.Controls&quot; Assembly=&quot;ClientDependency.Core&quot; TagPrefix=&quot;cd&quot; %&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Or, as I perfer, just add the reference to the web.config file. Since the framework will be used in a lot o places, it's much cleaner to keep the reference in web.config   &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div dir=&quot;ltr&quot; id=&quot;CodeDiv&quot;&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;/pages&amp;gt;
   &amp;lt;/controls&amp;gt;
      ...
      &amp;lt;add tagPrefix=&quot;cd&quot; namespace=&quot;ClientDependency.Core.Controls&quot; assembly=&quot;ClientDependency.Core&quot; /&amp;gt;
   &amp;lt;/controls&amp;gt;
&amp;lt;/pages&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;When the reference is in place, we need to add a ClientDependencyLoader-control at the place where we want to include the CSS and JavaScript-files. Just add this line of code somewhere in the head-tag of you master-template.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div dir=&quot;ltr&quot; id=&quot;CodeDiv&quot;&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;cd:ClientDependencyLoader runat=&quot;server&quot; id=&quot;Loader&quot; /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;To include resources you just need to use these two lines.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div dir=&quot;ltr&quot; id=&quot;CodeDiv&quot;&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;!-- Using web forms --&amp;gt;
&amp;lt;cd:CssInclude FilePath=&quot;~/css/style-120830.css&quot; Priority=&quot;0&quot; runat=&quot;server&quot;  /&amp;gt;
&amp;lt;cd:JsInclude FilePath=&quot;~/scripts/jquery-1.3.1.min.js&quot; Priority=&quot;0&quot; runat=&quot;server&quot; /&amp;gt;

&amp;lt;!-- Using razor --&amp;gt;
@Html.RequiresCss(&quot;ColorScheme.css&quot;, &quot;Styles&quot;).RequiresJs(&quot;/Js/jquery-1.3.2.min.js&quot;);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;You can add resources directly in the templates or in custom user controls or razor macros, it's even possible to add them in code using attributes.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div dir=&quot;ltr&quot; id=&quot;CodeDiv&quot;&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;// CSS
[ClientDependency(ClientDependencyType.Css, &quot;~/css/style.css&quot;)] 

// JavaScript
[ClientDependency(ClientDependencyType.Javascript, &quot;~/scripts/util.js&quot;)]&lt;/pre&gt;
&lt;/div&gt;
&lt;h4&gt;&lt;br /&gt;Priority&lt;/h4&gt;
&lt;p&gt;Can be used when you need one file to load before another, ie. if you are using jQuery it needs to load before any plug-ins. A lower priority means it will be render before higher values.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;Compression and combination&lt;/h4&gt;
&lt;p&gt;It's &lt;strong&gt;important to notice&lt;/strong&gt; that Client Dependency Framework will not combine or compress files unless the compilation debug is set to false.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div dir=&quot;ltr&quot; id=&quot;CodeDiv&quot;&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;compilation defaultLanguage=&quot;c#&quot; debug=&quot;false&quot; batch=&quot;false&quot; targetFramework=&quot;4.0&quot;&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Another thing that took me a while to get my head around was &lt;strong&gt;how to reset the cache&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Change the version number in the ClientDependency config (/conifg/ ClientDependency.config)&lt;/li&gt;
&lt;li&gt;Remove the ClientDependency folder from App_Data &lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/11355/clientdependency-reset-cache.png&quot; width=&quot;490&quot; height=&quot;272&quot; alt=&quot;Clientdependency -reset -cache&quot;/&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h4&gt;More reading&lt;/h4&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://clientdependency.codeplex.com/documentation&quot;&gt;http://clientdependency.codeplex.com/documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/wiki/reference/templates/adding-css-and-javascript-using-the-clientdependency&quot;&gt;http://our.umbraco.org/wiki/reference/templates/adding-css-and-javascript-using-the-clientdependency&lt;/a&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.enkelmedia.se/blogg/2012/9/1/umbraco-och-client-dependency-framework.aspx</guid>
         <pubDate>Sat, 01 Sep 2012 16:13:00 +0000</pubDate>
      </item>
      <item>
         <title>Go Basic – An Umbraco starter kit for ministries and municipalities</title>
         <link>http://feedproxy.google.com/~r/Betafirm/~3/Zn2l-mfZfTE/</link>
         <description>An Umbraco website created for the Danish Ministry of Economy and the Interior, is now being turned into a starter kit. The starter kit, named Go Basic, will be made available to Danish ministries, municipalities and institutions. The idea is to provide a standard solution, where both technology and knowledge can be shared amongst the ...</description>
         <guid isPermaLink="false">http://betafirm.com/?p=267</guid>
         <pubDate>Fri, 31 Aug 2012 09:08:11 +0000</pubDate>
         <content:encoded><![CDATA[<p>An Umbraco website created for the Danish Ministry of Economy and the Interior, is now being turned into a starter kit. The starter kit, named Go Basic, will be made available to Danish ministries, municipalities and institutions. The idea is to provide a standard solution, where both technology and knowledge can be shared amongst the users. Thus shaving time and money.</p><p><a rel="nofollow"
 target="_blank" href="http://www.version2.dk/artikel/statens-standard-hjemmeside-kan-goere-web-udbud-overfloedige-47287">Source Version2.dk</a></p> <img src="http://feeds.feedburner.com/~r/Betafirm/~4/Zn2l-mfZfTE" height="1" width="1"/>]]></content:encoded>
         <category>Blog</category>
      </item>
      <item>
         <title>And… one for the road…</title>
         <link>http://www.strawberryfin.co.uk/blog/2012/08/28/and-one-for-the-road/</link>
         <description>Media Picker not found: System.Web.HttpException The resource cannot be found. Details: Requested URL: /umbraco/dialogs/treepicker.aspx Replace treepicker.aspx with treePicker.aspx</description>
         <guid isPermaLink="false">http://www.strawberryfin.co.uk/?p=1814</guid>
         <pubDate>Tue, 28 Aug 2012 21:36:44 +0000</pubDate>
         <content:encoded><![CDATA[<p>Media Picker not found:<br /> System.Web.HttpException<br /> <strong>The resource cannot be found.</strong><br /><strong> Details: Requested URL: /umbraco/dialogs/treepicker.aspx</strong><br /> Replace treepicker.aspx with treePicker.aspx</p>]]></content:encoded>
      </item>
      <item>
         <title>Ignore redundant Umbraco package installation directories using Mercurial HG .ignore file</title>
         <link>http://www.prolificnotion.co.uk/ignore-redundant-umbraco-package-installation-directories-using-mercurial-hg-ignore-file/</link>
         <description>A solution to the problem of ignoring the package installation directories using the regex syntax in your .hgignore file.
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href='http://www.prolificnotion.co.uk/customising-your-mercurial-ini-configuration-file/' title='Customising your mercurial.ini configuration file to get the most out your experience'&gt;Customising your mercurial.ini configuration file to get the most out your experience&lt;/a&gt; &lt;small&gt;Learn how to customise your Mercurial.ini file to save time...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href='http://www.prolificnotion.co.uk/update-application-tree-package-action-for-umbraco/' title='Update Application Tree Package Action for Umbraco'&gt;Update Application Tree Package Action for Umbraco&lt;/a&gt; &lt;small&gt;I have recently been working on another package for the...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
         <guid isPermaLink="false">http://www.prolificnotion.co.uk/?p=763</guid>
         <pubDate>Mon, 27 Aug 2012 07:02:42 +0000</pubDate>
         <content:encoded><![CDATA[<p>I&#8217;m collaborating on a project at the moment where I&#8217;m using a slightly different setup to my usual to see how I go with including the entire <a rel="nofollow" title="Umbraco - The open source ASP.NET CMS" target="_blank" href="http://umbraco.com/">Umbraco</a> installation in the repository, usually I just include any custom(ised) elements and use the post build to copy them into an <a rel="nofollow" title="Umbraco - The open source ASP.NET CMS" target="_blank" href="http://umbraco.com/">Umbraco</a> installation.</p>
<p>I am still taming the setup however <a rel="nofollow" title="Umbraco addict" target="_blank" href="https://twitter.com/tomnf1">Tom Fulton</a> drew my attention to the fact I was committing the garbage that <a rel="nofollow" title="Umbraco - The open source ASP.NET CMS" target="_blank" href="http://umbraco.com/">Umbraco</a> fails to remove during the package installation process which are directories in the App_Data folder that have a guid for a name. Tom said he&#8217;d not yet worked out how to exclude them easily without explicitly ignoring each one and so not being one to turn down a challenge I thought I would beat him to it.</p>
<p>The solution it seems is quite simple, the <a rel="nofollow" title="Syntax for Mercurial ignore files" target="_blank" href="http://www.selenic.com/mercurial/hgignore.5.html">.hgignore</a> file also accepts a regex syntax so the simple addition of the following to your <a rel="nofollow" title="Syntax for Mercurial ignore files" target="_blank" href="http://www.selenic.com/mercurial/hgignore.5.html">.hgignore</a> file does the trick:</p>
<pre>syntax: regexp

&#92;b[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}&#92;b</pre>
<p>Related posts:<ol>
<li><a rel="nofollow" target="_blank" href='http://www.prolificnotion.co.uk/customising-your-mercurial-ini-configuration-file/' title='Customising your mercurial.ini configuration file to get the most out your experience'>Customising your mercurial.ini configuration file to get the most out your experience</a> <small>Learn how to customise your Mercurial.ini file to save time...</small></li>
<li><a rel="nofollow" target="_blank" href='http://www.prolificnotion.co.uk/update-application-tree-package-action-for-umbraco/' title='Update Application Tree Package Action for Umbraco'>Update Application Tree Package Action for Umbraco</a> <small>I have recently been working on another package for the...</small></li>
</ol></p>
<p><a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/B0nmn3DvJu-c8PGhBWxyjBBEP3M/0/da"><img src="http://feedads.g.doubleclick.net/~a/B0nmn3DvJu-c8PGhBWxyjBBEP3M/0/di" border="0" ismap></a><br/>
<a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/B0nmn3DvJu-c8PGhBWxyjBBEP3M/1/da"><img src="http://feedads.g.doubleclick.net/~a/B0nmn3DvJu-c8PGhBWxyjBBEP3M/1/di" border="0" ismap></a></p>]]></content:encoded>
      </item>
      <item>
         <title>Stop sending newsletters with Umbraco!</title>
         <link>http://feedproxy.google.com/~r/Betafirm/~3/wASu1lGxbSI/</link>
         <description>&lt;div
 style=&quot;float:left;&quot;&gt;&lt;img
 width=&quot;275&quot; height=&quot;261&quot; src=&quot;http://betafirm.com/wp-content/uploads/2012/08/stop_sign-e1351343388372.jpg&quot; class=&quot;attachment-archive-thumb wp-post-image&quot; alt=&quot;Full stop&quot; title=&quot;Full stop&quot;/&gt;&lt;/div&gt;Sending regular newsletters is a proven and very efficient way of staying in touch with your customers, investors and partners. Done correctly, you can push new products to your recipients, make them register for your events and build loyalty with your brand. Done incorrectly, you can royally piss them off. A story about Peter and ...</description>
         <guid isPermaLink="false">http://betafirm.com/?p=119</guid>
         <pubDate>Sun, 26 Aug 2012 19:44:07 +0000</pubDate>
         <content:encoded><![CDATA[<div
 style="float:left;"><img
 width="275" height="261" src="http://betafirm.com/wp-content/uploads/2012/08/stop_sign-e1351343388372.jpg" class="attachment-archive-thumb wp-post-image" alt="Full stop" title="Full stop"/></div><p
 class="intro">Sending regular newsletters is a proven and very efficient way of staying in touch with your customers, investors and partners. Done correctly, you can push new products to your recipients, make them register for your events and build loyalty with your brand.<br
 /> Done incorrectly, you can royally piss them off.</p><p><span
 id="more-119"></span></p><h2>A story about Peter and his first newsletter</h2><p>Peter, the marketing guy, had drafted his company&#8217;s first newsletter. He had sent it to his boss for comments, redrafted it and had gotten final approval. After that he formatted it and previewed it in Umbraco, and then he sent a couple of test emails to himself. Now he was finally ready and clicked the send button&#8230;</p><p>20 minutes later, with the &#8216;sending&#8217; icon still spinning and the progress indicator stuck at 141 sent emails, Peter was wondering how long time it should take to send a newsletter to 400 customers.</p><p>Another 20 minutes, several extra clicks on the send button and still no visible progress. Peter started to feel anxious and he&#8217;s gut was telling him that something had definitely gone wrong, but what? Had anyone received the newsletter? Should he give it more time? Had some customers received the newsletter more than once? Was that considered spam? It was time to call that self-proclaimed &#8220;Umbraco expert&#8221; who had configured the newsletter plugin.</p><p>The above scenario, is not something I conjured from thin air. I have had two less than pleased customers in the situation, and heard of several others. It is a very distressing situation for a company to be in. Why? Because they don&#8217;t know, if they just spammed the hell out of their most important customers or what type of damage they may have caused.</p><p>You might ask yourself, and rightly so, why I would recommend such a faulty solution. The truth is that I have never recommended it, but I clearly never pushed hard enough for the alternative. Hence this blog post.</p><h2>Umbraco is not an email marketing system and it should not be used as such</h2><p>Even though you might only have a limited number of newsletter subscribers, you shouldn&#8217;t risk the above situation. Newsletters can be a very valuable part of your marketing strategy, and there are serious benefits to using a proper email marketing provider:</p><ol><li><strong>Reliable</strong>. The emails will be sent once and to all of your subscribers. Count on it. Just as important, they will be sent from whitelisted email servers, which helps your newsletter from being perceived as spam.</li><li><strong>Analytics</strong>. Does your subscribers receive your newsletters? Do they open them? Do they click the important links your included? There&#8217;s a lot of insight to be gained from the analytics. Otherwise you are basically just blindly sending out, hoping for the best and getting no information back, to act on.</li><li><strong>Design</strong>. You can pick a template design or integrate your own. It&#8217;s also easy to preview and test your newsletter design in several email clients.</li><li><strong>Standards</strong>. The systems make sure your newsletter lives up to their guidelines. The name of the subscriber will be displayed in the email, the images will be displayed correctly, a unsubscribe link will be added to the footer and so on. A lot of optimization happens automatically.</li></ol><p>The price you pay for a professional way to handle your email marketing is low, especially compared to the many benefits it provides. In fact it is so low, that you should consider sending your <a rel="nofollow"
 target="_blank" href="http://en.wikipedia.org/wiki/Email_marketing#Transactional_emails">transactional emails</a> through them as well.</p><h2>Resources</h2><p>Here is a couple of emails marketing providers that I would recommend.</p><ol><li><a rel="nofollow"
 target="_blank" href="http://mailchimp.com"><strong>MailChimp</strong></a>. An excellent choice, with all the features you could wish for. They offer a free plan with 12,000 emails per month if you have less than 2,000 subscribers.</li><li><strong><a rel="nofollow"
 target="_blank" href="http://www.campaignmonitor.com">Campaign Monitor</a>.</strong> A more expensive provider than MailChimp, but also more professional, with a simpler interface and more intuitive to use. You pay for a fixed number of emails per month or per campaign (newsletter) you send. In the latter case the price is $5 + 1¢ per recipient. So sending to 1.000 subscribers will set you back $15.</li><li><a rel="nofollow"
 target="_blank" href="http://sendgrid.com/"><strong>SendGrid</strong></a>. For your transactional emails SendGrid is a cheap, easy to use option and the first 200 emails per day are free.</li></ol><p>The way your electronic newsletters are delivered, should be just as important as real paper letters. Although it should still be a lot faster and cheaper.</p> <img src="http://feeds.feedburner.com/~r/Betafirm/~4/wASu1lGxbSI" height="1" width="1"/>]]></content:encoded>
         <category>Blog</category>
      </item>
      <item>
         <title>Umbraco Multi-Lingual vs. Normal Asp.net application</title>
         <link>http://umbraco-home.blogspot.com/2012/08/umbraco-multi-lingual-vs-normal-aspnet.html</link>
         <description>&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Case_Studies/Cases/Multi-Lingual_Umbraco_Sites.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The native Asp.net application and many CMS system carry out multi-lingual based on resx files. While Umbraco has different fashion in handling the multi-lingual tasks. &lt;br /&gt;Umbraco defines the behavior of the site in Templates and content structure in Document Types. &lt;br /&gt;So it is easy for Umbraco to build different contents in different portals while make the portals take the identical behaviors. And it is the same way to carry out multi-lingual in Umbraco.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear:both;text-align:center;&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://1.bp.blogspot.com/-9Kod9249KYw/UDZKdbIFWPI/AAAAAAAAABE/xSIlzk4psFM/s1600/Umbraco_Setting.png&quot; style=&quot;margin-left:1em;margin-right:1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://1.bp.blogspot.com/-9Kod9249KYw/UDZKdbIFWPI/AAAAAAAAABE/xSIlzk4psFM/s320/Umbraco_Setting.png&quot; width=&quot;210&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here is the diagram for the similarities and differences between Umbraco and Native Asp.net application.  &lt;br /&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;color:black;width:464px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;249&quot;&gt;Target&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;107&quot;&gt;Umbraco&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;106&quot;&gt;native asp.net application&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;249&quot;&gt;Behaviors must be identical between languages of portals&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;107&quot;&gt;Yes&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;106&quot;&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;249&quot;&gt;Text for different languages can be in rich text format in language resources&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;107&quot;&gt;Yes&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;106&quot;&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;249&quot;&gt;Text for different languages can be entered in context&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;107&quot;&gt;Yes&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;106&quot;&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;249&quot;&gt;Text for different languages must be one-to-one mapped in different&amp;nbsp; portals&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;107&quot;&gt;No&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;106&quot;&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Case_Studies/Cases/Multi-Lingual_Umbraco_Sites.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4665764591629686889-4414694344408913798?l=umbraco-home.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Alan Cao)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-4665764591629686889.post-4414694344408913798</guid>
         <pubDate>Thu, 23 Aug 2012 15:22:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://1.bp.blogspot.com/-9Kod9249KYw/UDZKdbIFWPI/AAAAAAAAABE/xSIlzk4psFM/s72-c/Umbraco_Setting.png" width="72" xmlns:media="http://search.yahoo.com/mrss/"/>
      </item>
      <item>
         <title>Umbracos media picker</title>
         <link>http://www.enkelmedia.se/blogg/2012/8/22/umbracos-media-picker.aspx?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=Umbracos media picker</link>
         <description>&lt;p&gt;Jag har precis börjat arbeta med en kund som har väldigt mycket bilder i sin media section, det är ganska få mappar med väldigt många filer i varje mapp. Bilderna används på olika artiklar i content trädet och väljs med umbracos inbyggda media picker.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/10988/media-picker-simple.png&quot; width=&quot;335&quot; height=&quot;411&quot; alt=&quot;Media -picker -simple&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Problemet med denna picker är att man endast kan välja bild, vilket gjorde att min kund tidigare var tvungen att först gå in i media-sektionen och ladda upp bilder för att sedan gå till artikeln och välja den nya bilden (och leta som en galning ibland alla filer).&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Jag tittade på olika lösningar på problemet en av dem skulle vara att installera &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/projects/backoffice-extensions/digibiz-advanced-media-picker&quot;&gt;DAMP&lt;/a&gt;-paketet som är en riktigt bra media picker, men efter ett tips från &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://twitter.com/Brannmark&quot;&gt;@Brannmark&lt;/a&gt; insåg jag att lösningen kan vara betydligt enklare än så. Det går nämligen att sätta umbracos inbyggda media picker i &quot;advanced mode&quot;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/10993/media-picker-changedatatype.png&quot; width=&quot;692&quot; height=&quot;439&quot; alt=&quot;Media -picker -changedatatype&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gör så här:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1. Gå till developer-sektionen och välj &quot;Media Picker&quot; i listan över Data Types.&lt;br /&gt;2. Klicka i &quot;Show preview&quot; och &quot;Show advanced dialog&quot;.&lt;/p&gt;
&lt;p&gt;2.2 Om du vill att vissa ställen har den &quot;enkla&quot; media pickern kan du bara skapa en ny Data Type av typen Media Picker och då ha två media pickers i listan. Högerklicka bara på &quot;Data Types&quot;-mappen och klicka på add.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Det här blir resultatet&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.enkelmedia.se/media/10998/media-picker-advance.png&quot; width=&quot;539&quot; height=&quot;575&quot; alt=&quot;Media -picker -advance&quot;/&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.enkelmedia.se/blogg/2012/8/22/umbracos-media-picker.aspx</guid>
         <pubDate>Wed, 22 Aug 2012 06:38:00 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco 4.8.1 Hosting Support</title>
         <link>http://www.carbonsoft.co.uk/articles/2012/08/umbraco-481-hosting-support.aspx</link>
         <description>All our hosting packages are now deploying Umbraco 4.8.1.</description>
         <author>Carbonsoft LLP</author>
         <guid isPermaLink="false">http://www.carbonsoft.co.uk/articles/2012/08/umbraco-481-hosting-support.aspx</guid>
         <pubDate>Sun, 19 Aug 2012 00:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco Developers Required Skills</title>
         <link>http://umbraco-home.blogspot.com/2012/08/umbraco-developers-required-skills.html</link>
         <description>&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Umbraco is a powerful CMS system that can be integrated seamlessly with Normal Asp.net Web Form, Web Service and other rich media.&lt;br /&gt;Here is the list for checking if you are ready for Umbraco development.&lt;br /&gt;&lt;h1&gt;Academic Aspect&lt;/h1&gt;&lt;h2&gt;Language Skills&lt;/h2&gt;C#&lt;br /&gt;VB.net&lt;br /&gt;&lt;h2&gt;Asp.net Skills&lt;/h2&gt;Asp.net Master Page&lt;br /&gt;Asp.net Controls&lt;br /&gt;Asp.net UserControls&lt;br /&gt;Asp.net HttpModule&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Front End Skills&lt;/h2&gt;html&lt;br /&gt;css&lt;br /&gt;Javascript&lt;br /&gt;JQuery&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Service End Skills&lt;/h2&gt;Asp.net Web Service&lt;br /&gt;WCF&lt;br /&gt;&lt;h2&gt;Data Manipulation Skills&lt;/h2&gt;ADO.net&lt;br /&gt;third party ORM framework&lt;br /&gt;XPath&lt;br /&gt;Xsl&lt;br /&gt;Xslt&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Practical Aspect&lt;/h1&gt;Multi-Lingual&lt;br /&gt;Build the menu according to the content tree.&lt;br /&gt;List the news in landing page.&lt;br /&gt;Manipulate the data format in the xslt with xslt extension functions.&lt;br /&gt;Create customized xslt extension functions to fetch data back from the DB.&lt;br /&gt;Insert a node in the dashboard.&lt;br /&gt;Introduce a asp.net usercontrol through Macro.&lt;br /&gt;Create a menu that can be collapsed in 3 levels.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4665764591629686889-1519862490703271417?l=umbraco-home.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Alan Cao)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-4665764591629686889.post-1519862490703271417</guid>
         <pubDate>Wed, 15 Aug 2012 04:15:00 +0000</pubDate>
      </item>
      <item>
         <title>Publish Blogs Or Content To Umbraco From Your Mobile Phone</title>
         <link>http://www.proworks.com/blog/2012/08/06/publish-blogs-or-content-to-umbraco-from-your-mobile-phone/</link>
         <description>&lt;p&gt;Ever wanted to blog or create content in your iPad or mobile
phone with your Umbraco website? With a few simple setup steps you
can enable the Metaweblog API and connect desktop clients like
Microsoft Word, Windows Live Writer, and MarsEdit (Mac), Blog.net
(iPhone), and more!&lt;/p&gt;

&lt;p&gt;Its easy to give access to a user from the back-end and once
they have a channel setup, posting is a breeze. See the steps at
the bottom of this post to setup an Umbraco User to publish blogs,
news or other content remotely!&lt;/p&gt;

&lt;p&gt;I'll be testing other apps and phone setups, but these are the
only tools I can confirm that work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://windows.microsoft.com/en-US/windows-live/essentials-other-programs&quot;
&gt;Windows Live Writer&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.red-sweater.com/marsedit/&quot;
&gt;MarsEdit&lt;/a&gt; (Mac)&lt;/li&gt;

&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.tswe-berlin.de/blognet.aspx&quot;
&gt;Blog.net&lt;/a&gt; (iPhone app)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a little setup for your Umbraco team to do in the
templates for it to work really well. This best post I found from a
developers point of view is this blog by Ove Andersen: &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://www.eyecatch.no/blog/2011/11/using-windows-live-writer-with-umbraco/&quot;
&gt;Using Windows Live Writer with Umbraco&lt;/a&gt;. The
key is to add the tags is step two because many apps look for these
specifically. This post from Tim Geyssens may help as well, but it
is a bit older: &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.nibble.be/?p=13&quot;
&gt;Umbraco and Windows Live Writer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;How to create a channel to allow a user to post content:&lt;/h4&gt;

&lt;p&gt;Go to the User that you want to allow to post remotely in the
&quot;Users&quot; section of Umbraco. &amp;nbsp;Select the &quot;Content Channel&quot;
tab.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;400&quot; height=&quot;286&quot; alt=&quot;SetupContentChannel1.png&quot;/&gt;&lt;/p&gt;

&lt;p&gt;The name will be shown when they connect to the channel so make
it a little descriptive. &amp;nbsp;Then select the blog you want to
post to in the Content tree (&quot;Start node in Content&quot; field).
&amp;nbsp;I would recommend selecting a folder in the Media Library as
well to post the images into.&lt;/p&gt;

&lt;p&gt;In the bottom section, select the Document Type as Blog Post
(unless you're using News Item or something else). &amp;nbsp;Then
Select the Body (bodyText) for the Description Field and Tags
(tags) for the Category field. &amp;nbsp;I haven't seen the Synopsis
used by any apps yet, so that can be left blank.&lt;/p&gt;

&lt;p&gt;Save the member.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;400&quot; height=&quot;215&quot; alt=&quot;SetupContentChannel2.png&quot;/&gt;&lt;/p&gt;

&lt;h4&gt;How to connect from Windows Live Writer:&lt;/h4&gt;

&lt;p&gt;First, add a new blog account. &amp;nbsp;If this is the first time
you have used Live Writer, it should guide you through the process.
&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Select the &quot;Other Services&quot; on the first screen because Umbraco
is not a default option.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;400&quot; height=&quot;342&quot; alt=&quot;LiveWriter1.png&quot;/&gt;&lt;/p&gt;

&lt;p&gt;If you or your developer added the Metdata &amp;lt;link&amp;gt;s in your
template (&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://www.eyecatch.no/blog/2011/11/using-windows-live-writer-with-umbraco/&quot;
&gt;see Ove's blog&lt;/a&gt;) then connecting should be as
simple as entering the blog url and then entering your Umbraco User
login and password.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;400&quot; height=&quot;341&quot; alt=&quot;LiveWriter2.png&quot;/&gt;&lt;/p&gt;

&lt;p&gt;This name is a label in Love Writer so be descriptive.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;399&quot; height=&quot;343&quot; alt=&quot;LiveWriter3.png&quot;/&gt;&lt;/p&gt;

&lt;p&gt;It will ask if you want to download the theme next. &amp;nbsp;I
usually say no, but it doesn't hurt. &amp;nbsp;Now you can create a
blog and post it with LiveWriter. &amp;nbsp;Add photos, tags, and write
just like you're in Word.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;How to connect from the Blog.net iPhone app:&lt;/h4&gt;

&lt;p&gt;Blog.Net seemed to work the best with Umbraco.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;267&quot; height=&quot;400&quot; alt=&quot;2012-08-06 16-32-55.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Add a new blog and enter the URL of the blog and your Umbraco
admin username and password. &amp;nbsp;Note: you or your Umbraco
partner will need to add the meta &amp;lt;link&amp;gt; tags to the Template
as described in &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://www.eyecatch.no/blog/2011/11/using-windows-live-writer-with-umbraco/&quot;
&gt;Ove's blog post&lt;/a&gt; above.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;267&quot; height=&quot;400&quot; alt=&quot;2012-08-06 16-32-57.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;If you did not get an error and you see this screen, then
everything should be great and you can add a new post. &amp;nbsp;You
can include images, tags, and formatting and publish remotely.
&amp;nbsp;Cool, huh?&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;267&quot; height=&quot;400&quot; alt=&quot;2012-08-06 16-32-58.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;Notes for advanced setup:&lt;/h4&gt;

&lt;p&gt;Sometimes the Metawebblog API apps may need a specific channel
URL or API location to work. &amp;nbsp;If that's the case, then use
this URL (replacing the &quot;yourdomain&quot; with your domain):&lt;/p&gt;

&lt;p&gt;http://www.yourdomain.com/umbraco/channels.aspx&lt;/p&gt;

&lt;p&gt;Generally, if you don't include the meta &amp;lt;link&amp;gt; tags in
your template then you have to set it up this way.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;That's it! &amp;nbsp;Let me know if you find other apps that work or
if you have problems. &amp;nbsp;Not every iPhone app worked for me so
I'm certain that not every app will work.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/08/06/publish-blogs-or-content-to-umbraco-from-your-mobile-phone/</guid>
         <pubDate>Mon, 06 Aug 2012 09:14:49 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco Contour – Failed to save form</title>
         <link>http://www.prolificnotion.co.uk/umbraco-contour-failed-to-save-form/</link>
         <description>A solution to the &quot;Failed to save form&quot; error message when trying to save a large Umbraco Contour form. The addition of a maxJsonLength attribute amended accordingly on the jsonSerialization  node of your web.config is a good place to start.
Related posts:&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href='http://www.prolificnotion.co.uk/running-umbraco-v4-on-aspnet-35/' title='Running Umbraco v4 on ASP.NET 3.5'&gt;Running Umbraco v4 on ASP.NET 3.5&lt;/a&gt; &lt;small&gt;A project I am currently working on is based on...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
         <guid isPermaLink="false">http://www.prolificnotion.co.uk/?p=754</guid>
         <pubDate>Mon, 06 Aug 2012 04:46:47 +0000</pubDate>
         <content:encoded><![CDATA[<p>I recently had to build a pretty sizeable form with approximately 65 fields. I created the form and performed the initial save with no issues however on returning to edit the form or creating a new form based on the template I was presented with the error message &#8220;Failed to save form&#8221;.</p>
<p>In true Umbraco style that&#8217;s all the information I got, no reasoning and nothing in the logs and so began my quest to find a solution. Thankfully I was not the first to have the issue and I&#8217;m sure I won&#8217;t be the last so I thought I make this post as a reminder to myself and to aid anyone else in their search for a solution to the same issue.</p>
<p>The fix is nice and straight forward and simply requires the addition of the following entry in your web.config:</p>
<pre>
&lt;system.web.extensions&gt;
    &lt;scripting&gt;
      &lt;webServices&gt;
        &lt;jsonSerialization maxJsonLength=&quot;500000&quot;&gt;
        &lt;/jsonSerialization&gt;
      &lt;/webServices&gt;
    &lt;/scripting&gt;
  &lt;/system.web.extensions&gt;
</pre>
<p>You can amend the maxJsonLength attribute value to suit your requirements but the above worked for me.</p>
<p>Credit to <a rel="nofollow" title="Visit the @NielsHaasnoot twitter profile" target="_blank" href="https://twitter.com/NielsHaasnoot">@NielsHaasnoot</a> for <a rel="nofollow" title="Solution on the Umbraco Forums" target="_blank" href="http://our.umbraco.org/forum/umbraco-pro/contour/26112-Contour-'Failed-to-save-form'">his solution</a> to my problem.</p>
<p>Related posts:<ol>
<li><a rel="nofollow" target="_blank" href='http://www.prolificnotion.co.uk/running-umbraco-v4-on-aspnet-35/' title='Running Umbraco v4 on ASP.NET 3.5'>Running Umbraco v4 on ASP.NET 3.5</a> <small>A project I am currently working on is based on...</small></li>
</ol></p>
<p><a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/IgL-VZ0125tkZSZ8dWIpLEP2nos/0/da"><img src="http://feedads.g.doubleclick.net/~a/IgL-VZ0125tkZSZ8dWIpLEP2nos/0/di" border="0" ismap></a><br/>
<a rel="nofollow" target="_blank" href="http://feedads.g.doubleclick.net/~a/IgL-VZ0125tkZSZ8dWIpLEP2nos/1/da"><img src="http://feedads.g.doubleclick.net/~a/IgL-VZ0125tkZSZ8dWIpLEP2nos/1/di" border="0" ismap></a></p>]]></content:encoded>
         <category>Umbraco</category>
      </item>
      <item>
         <title>jQuery UI for Umbraco</title>
         <link>http://www.eitherxor.com/blog/jquery-ui-for-umbraco/</link>
         <description>&lt;div&gt;
&lt;p&gt;Finally I've managed to make my first Umbraco package. Last
hopes were dashed with the lack of functionality in version 5 and
further &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://umbraco.com/follow-us/blog-archive/2012/6/13/v5-rip.aspx/&quot;&gt;
knowing it wouldn't come learning of its demise&lt;/a&gt;. Now it's back
to 4.x versions where the packaging can be done using a wizard-like
thing in the back-end&lt;sup&gt;1&lt;/sup&gt; and I'm glad.&lt;/p&gt;

&lt;p&gt;What I did was implement &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://jqueryui.com/&quot;&gt;jQuery
UI&lt;/a&gt; for Umbraco, allowing &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://jqueryui.com/demos/accordion/&quot;&gt;Accordions&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://jqueryui.com/demos/draggable/&quot;&gt;Draggables&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://jqueryui.com/demos/droppable/&quot;&gt;Droppables&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://jqueryui.com/demos/&quot;&gt;etc.&lt;/a&gt; to be added by CMS users
as content nodes. Not all controls and features are exposed, but
enough for general use and the purpose of this post. I did this in
4.8 and installed it here, a 4.7.2 site. To cut to the chase,
here's an example:&lt;/p&gt;


 

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

 

&lt;p&gt;&amp;nbsp;&lt;/p&gt;


 

&lt;div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a rel=&quot;nofollow&quot;
 title=&quot;jQuery UI for Umbraco download&quot;&gt;Direct download&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Download the package and install - everything (Document
Types&lt;sup&gt;2&lt;/sup&gt;, Macros, etc.) will be where you expect it to
be.&lt;/p&gt;

&lt;p&gt;Configure existing Document Types, allowing the the ones in the
package to be children where appropriate. 'Item' types should be
exclude, so valid types
are:&amp;nbsp;Accordion,&amp;nbsp;Draggable,&amp;nbsp;Droppable,&amp;nbsp;Interactable
&lt;sup&gt;3&lt;/sup&gt;,&amp;nbsp;Resizable,&amp;nbsp;Selectable, Sortable and
Tabs.&lt;/p&gt;

&lt;p&gt;Link &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt;, jQuery UI and the
stylesheet in Templates where these items will be rendered:&lt;/p&gt;

&lt;pre&gt;
  &amp;lt;script type=&quot;text/javascript&quot; src=&quot;/scripts/jquery-1.7.2.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type=&quot;text/javascript&quot; src=&quot;/scripts/jquery-ui-1.8.22.custom.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;/css/jquery-ui-1.8.22.custom.css&quot;/&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Add a new node of one of the packages Document Types to a node
that allows it (and sub-nodes if required, for instance, when using
an Accordion):&lt;/p&gt;

&lt;p&gt;&lt;img/&gt;&lt;/p&gt;

&lt;p&gt;In the content editor of the parent node, add the corresponding
Macro where the item should be rendered.&amp;nbsp;Make sure you use &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/forum/templating/templates-and-document-types/33095-RenderMacroContent&quot;&gt;
RenderMacroContent&lt;/a&gt; in scripts that output the user content from
Document Types allowing these controls so that references to Macros
are processed and transformed.&lt;/p&gt;

&lt;p&gt;Publish and load the page to see the output.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Credit where it's due: the icons included in the package are
courtesy of &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://www.famfamfam.com/lab/icons/&quot;&gt;famfamfam&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;sub&gt;I'm not exaclty sure of the earliest 4.x
version in which the packaging functionality was added, but sure it
is there from 4.7 onwards, it could be earlier.&lt;/sub&gt;&lt;br /&gt;
 &lt;sup&gt;2&lt;/sup&gt; &lt;sub&gt;For convience, I group Document Types added by
this package under a root named 'Feature'.&lt;/sub&gt;&lt;br /&gt;
 &lt;sup&gt;3&lt;/sup&gt; &lt;sub&gt;Interactable is just a composite control, it can
be Draggable and Resizable, for instance.&lt;/sub&gt;&lt;span
 style=&quot;vertical-align:sub;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.eitherxor.com/blog/jquery-ui-for-umbraco/</guid>
         <pubDate>Thu, 02 Aug 2012 11:12:37 +0000</pubDate>
      </item>
      <item>
         <title>Life’s too short</title>
         <link>http://blog.mattbrailsford.com/2012/08/02/lifes-too-short/</link>
         <description>After just 12 short months since starting work for the HQ, I have decided it&amp;#8217;s time for a change for me and I&amp;#8217;ll be stepping out in to the big wide world of running my own business. For a long time now I&amp;#8217;ve had ambitions of going solo, but for whatever reason, it&amp;#8217;s just never [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=blog.mattbrailsford.com&amp;#038;blog=5220074&amp;#038;post=717&amp;#038;subd=mattbrailsford&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blog.mattbrailsford.com/?p=717</guid>
         <pubDate>Thu, 02 Aug 2012 08:33:21 +0000</pubDate>
         <content:encoded><![CDATA[<p>After just 12 short months since starting work for the HQ, I have decided it&#8217;s time for a change for me and I&#8217;ll be stepping out in to the big wide world of running my own business.</p>
<p>For a long time now I&#8217;ve had ambitions of going solo, but for whatever reason, it&#8217;s just never been the right time. After a few events recently in my life though (some good, some not so good), it&#8217;s really brought home to me that life is too short, and sometimes you&#8217;ve just got to take the risks if you ever want to achieve your goals.</p>
<p>So whilst working for the HQ has been the biggest highlight of my career so far, I feel now is the time for me to make something happen for myself.</p>
<p>It&#8217;s unfortunate that I have to annouce this at the time when it might be thought that the Umbraco community needs my support the most, what with the death of the v5 platform, and the release of the exciting new v4 roadmap. However, my decision was actually made well before these things were even on the table. On the flip side though, whilst I&#8217;m leaving the HQ, I&#8217;ll still be working on the codebase, but as a member of the Core team instead, so I&#8217;ll just be working on it from an outside perspective as a user rather than an employee. I&#8217;m also actually really excited about getting back into the package development side of things, so expect a plethora of new stuff coming out throughout the year (By the way, did I mentioned I&#8217;d released a new <a rel="nofollow" target="_blank" href="http://our.umbraco.org/projects/backoffice-extensions/disk-space-monitor">package for Disk Space Monitoring</a> <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley'/> )</p>
<p>So what now? Well for me, it means I&#8217;ll be working for the HQ till the end of August. Then I&#8217;ll be going freelance whilst I setup my own business. So if you have any Umbraco jobs planned for September that you need some help on, feel free to <a rel="nofollow" target="_blank" href="http://theoutfield.net/">drop me a line</a>.</p>
<p>On a final note, I&#8217;d like to thank Niels and everyone at the HQ for all the opportunities and experiences that I would never have had, had I not joined the HQ. It&#8217;s been amazing. And I would like to thank them for their overwhelming support over the last 12 months and in understanding and embracing my decision to leave.</p>
<p>For everyone else, I offer a small word of advice. Don&#8217;t be affraid to reach for your goals. Lifes too short.</p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/mattbrailsford.wordpress.com/717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattbrailsford.wordpress.com/717/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mattbrailsford.com&#038;blog=5220074&#038;post=717&#038;subd=mattbrailsford&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/34b41f8815601e9a16baa4e56c69bcc2?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">mattbrailsford</media:title>
         </media:content>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Umbraco Simple Starter Kit Object Not Set Error</title>
         <link>http://www.carbonsoft.co.uk/articles/2012/07/umbraco-simple-starter-kit-object-not-set-error.aspx</link>
         <description>Resolving the Umbraco Simple Starter Kit with Designit Green or Friendly Ghost Skin Object reference not set to an instance of an object Error.</description>
         <author>Richard Bowers</author>
         <guid isPermaLink="false">http://www.carbonsoft.co.uk/articles/2012/07/umbraco-simple-starter-kit-object-not-set-error.aspx</guid>
         <pubDate>Wed, 01 Aug 2012 21:35:00 +0000</pubDate>
      </item>
      <item>
         <title>Using Membership In Umbraco - Part 1</title>
         <link>http://www.carbonsoft.co.uk/articles/2012/07/using-membership-in-umbraco-part-1.aspx</link>
         <description>This is the first in a series of articles explaining how to get up and running with Membership in Umbraco.  It is quite common to require an area of a website that users must logon to in order to access content or functionality. Umbraco provides support for this through its membership functionality which supports the standard ASP.NET Membership Provider model. This means the &quot;out of the box&quot; asp.net controls can be used to create, login, manage and generally work with your Umbraco members.</description>
         <author>Jonathan Kay</author>
         <guid isPermaLink="false">http://www.carbonsoft.co.uk/articles/2012/07/using-membership-in-umbraco-part-1.aspx</guid>
         <pubDate>Tue, 31 Jul 2012 21:35:00 +0000</pubDate>
      </item>
      <item>
         <title>WebsitePanel for Umbraco Hosting</title>
         <link>http://www.carbonsoft.co.uk/articles/2012/07/websitepanel-for-umbraco-hosting.aspx</link>
         <description>Our Standard and Gold hosting packages now come with Website Panel, a feature rich and established online control panel that allows full control of your hosting environment. The intuitive and easy to use interface allows you to setup or change host headers - change your primary domain or with our Gold package, run multiple website and domains in one with Umbraco multisite. You can also add or remove FTP users and reset passwords, upload and manage files directly from your browser and setup custom file permission. Managing your Umbraco instance has never been easier!</description>
         <author>Richard Bowers</author>
         <guid isPermaLink="false">http://www.carbonsoft.co.uk/articles/2012/07/websitepanel-for-umbraco-hosting.aspx</guid>
         <pubDate>Sun, 29 Jul 2012 22:45:00 +0000</pubDate>
      </item>
      <item>
         <title>How To Upload Photos to Your Umbraco Website From Your iPhone</title>
         <link>http://www.proworks.com/blog/2012/07/26/how-to-upload-photos-to-your-umbraco-website-from-your-iphone/</link>
         <description>&lt;p&gt;&lt;img width=&quot;133&quot; height=&quot;200&quot; alt=&quot;allenforiphone.jpg&quot; style=&quot;float:right;&quot;/&gt;These days most mobile
phones are very good cameras that you carry around with you
constantly. &amp;nbsp;Wouldn't it be great if you could take photos of
your products, employees, clients, or projects on your phone and
upload them directly to your Umbraco website just like you do with
Instagram, Facebook, and Twitter? &amp;nbsp;Well, if you have an iPhone
you can.&lt;/p&gt;

&lt;p&gt;Thanks to the group at&amp;nbsp;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.vizioz.com&quot;
 title=&quot;Vizioz Limited&quot;&gt;Vizioz&lt;/a&gt; and their &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://www.vizioz.com/products/umbraco/allen-for-umbraco&quot;
 title=&quot;Allen for Umbraco iPhone App&quot;&gt;Allen for
Umbraco&lt;/a&gt; app you can upload photos to your Umbraco media library
directly from your phone. &amp;nbsp;Pretty sweet, huh?&lt;/p&gt;

&lt;p&gt;We've used it for this site and recommended it to clients.
&amp;nbsp;At $2.99 its an easy purchase.&lt;/p&gt;

&lt;p&gt;Grab a copy and be more productive!&lt;/p&gt;

&lt;p&gt;If you're a ProWorks customer, let us know if you want to use
this and we will make sure your site is all setup for it.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;400&quot; height=&quot;236&quot; alt=&quot;AllenForUmbraco.png&quot;/&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/07/26/how-to-upload-photos-to-your-umbraco-website-from-your-iphone/</guid>
         <pubDate>Thu, 26 Jul 2012 10:29:00 +0000</pubDate>
      </item>
      <item>
         <title>Disabling Request Validation in Umbraco</title>
         <link>http://www.eitherxor.com/blog/disabling-request-validation-in-umbraco/</link>
         <description>&lt;p&gt;Ever needed to turn off the &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://www.asp.net/whitepapers/request-validation&quot;&gt;default
ASP.NET request validation&lt;/a&gt;&amp;nbsp;(see &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770147&quot;&gt;
here for .NET 4.0 changes&lt;/a&gt;)&amp;nbsp;of a page in Umbraco? You know,
that thing that can save us from a world of hurting fire-fighting
slavery at the hands of a bad-data-input pimp? Or you may recognise
it better as what causes your app to do that stupid breaking YSOD
thing of which the message goes like this:&lt;/p&gt;

&lt;pre&gt;
A potentially dangerous Request.Form value was detected from the client
&lt;/pre&gt;

&lt;p&gt;In a standard ASP.NET web application you could approach this a
&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/950xf363.aspx&quot;&gt;few&lt;/a&gt;
&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ydy4x04a(v=vs.100).aspx&quot;&gt;
different&lt;/a&gt; &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.validaterequest.aspx&quot;&gt;
ways&lt;/a&gt; with ValidateRequest. It could be turned off in a @Page
directive or in the element of the web.config for example. None of
these will work with Umbraco since there is no physical file
pairing per page - they're virtual, as in database entries - and
turning it off globally (for every and any requested page) in the
web.config is a terrible idea. Umbraco Template items are Master
pages and these &lt;em&gt;are&lt;/em&gt; phyiscal things, in terms of
filesystem presence, yet though one could be tempted to try using
the @Master page directive to turn off validation this will fail to
work; further, code-behind files aren't created as standard with
templates so, even if you know how, you can't take the coding
approach without first taking the liberty of configuring a
corresponding class.&lt;/p&gt;

&lt;p&gt;After quickly processing the above it comes to dawn that there
are indeed options, but before diving in to try all things until
one works let's consider the source code and exactly how this
should be done with Umbraco. Turns out there is a property exposed
by the &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://umbraco.codeplex.com/SourceControl/changeset/view/ed2a923ef91d#umbraco%2fpresentation%2fdefault.aspx.cs&quot;&gt;
UmbracoDefault&lt;/a&gt; type - this being the base type for Umbraco
pages, extending &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx&quot;&gt;
Page&lt;/a&gt; - of type bool named ValidateRequest, and this is the
Umbraco way of turning server-side validation on or off. The source
code for 4.7.2 has this to say about the property:&lt;/p&gt;

&lt;pre&gt;
//To turn off request validation set this to false before the PageLoad event. This equelevant to the validateRequest page directive
//and has nothing to do with &quot;normal&quot; validation controls. Default value is true.
&lt;/pre&gt;

&lt;p&gt;Validation is handled conditionally, accordingly, in the
UmbracoDefault Page_Load event handler, like so:&lt;/p&gt;

&lt;pre&gt;
protected void Page_Load(object sender, EventArgs e) {
  if (ValidateRequest)
    Request.ValidateInput();
}
&lt;/pre&gt;

&lt;p&gt;Because of this, everything demonstrated here is a variation on
the theme. Assuming you're looking options, here they are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using the DisableRequestValidation control in a
Template&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, there is &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://umbraco.codeplex.com/SourceControl/changeset/view/ed2a923ef91d#umbraco%2fpresentation%2fumbraco%2ftemplateControls%2fDisableEventValidation.cs&quot;&gt;
already a tool in the box to do the job&lt;/a&gt; (ignore, if you can,
the naming inconsistency): DisableRequestValidation
(DisableEventValidation.cs). All you need to do is add the
following to the desired Template markup, it's that simple:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;umbraco:DisableRequestValidation runat=&quot;server&quot; /&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Using server-side script or code-behind in a
Template&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Should the above not suffice for whatever reason, then another
way is to add the code directly to be executed in the context of
the page being requested. That code is precisely what the
DisableRequestValidation control uses but allows for easily
surrounding with accompanying logic specific to your case. This can
be done in a couple of ways: the first, the simplest of the two, is
by adding a server-side script block overriding the OnInit event
handler method to the Template markup; the second is by creating a
*.cs file serving as the code-behind for the Template, and adding
the override there.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Server-side script:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Add this to the markup of the desired template.&lt;/p&gt;

&lt;pre&gt;
&amp;lt;script language=&quot;C#&quot; runat=&quot;server&quot;&amp;gt;
 &amp;nbsp;protected override void OnInit(EventArgs e) {
 &amp;nbsp; &amp;nbsp;base.OnInit(e);
 &amp;nbsp; &amp;nbsp;((umbraco.UmbracoDefault)base.Page).ValidateRequest = false;
 &amp;nbsp;}
&amp;lt;/script&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;Page code-behind:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Add a new *.master.cs file in the masterpages folder, where * is
the name of the desired template file, and add the following.&lt;/p&gt;

&lt;pre&gt;
public partial class PublicationDocument : umbraco.presentation.masterpages._default {
 &amp;nbsp;protected override void OnInit(System.EventArgs e) {
 &amp;nbsp;  base.OnInit(e);
 &amp;nbsp; &amp;nbsp;((umbraco.UmbracoDefault)base.Page).ValidateRequest = false;
 &amp;nbsp;}
}
&lt;/pre&gt;

&lt;p&gt;Then open up the template file itself and add the CodeBehind
specifier to the @Master directive along with Inherits.&lt;/p&gt;

&lt;pre&gt;
&amp;lt;%@ Master ... Inherits=&quot;NameOfTemplate&quot; CodeFile=&quot;NameOfTemplate.master.cs&quot; %&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Using a Razor or XSLT scripting file&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another possibility is to create a reusable Umbraco-native
script, either Razor or (god forbid) XSLT, and accomanying macro.
This will again work fundamentally the same as each other the other
options, it's just a matter of compartmentalising units of logic
according to preference and convenience at this point. The benefit
of this method is also the same as doing it with code in the
template, but with the added value of being more tightly coupled
with the CMS, and, hence, its familiar API. For instance, direct
access to the requested Umbraco page, its generic and specific
Document Type properties and so on, is plainly exposed through the
Model (in a Razor script); so, if you are conditionalising request
validation - let's assume conditional descisions will laregly
depend on CMS-based data - then this is likely to be the most
productive way to extend what is being done here.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Razor script:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Create a new Razor file (say, DisableRequestValidation, I guess)
and add this.&lt;/p&gt;

&lt;pre&gt;
@{
&amp;nbsp; ((umbraco.UmbracoDefault)HttpContext.Current.CurrentHandler).ValidateRequest = false;
}
&lt;/pre&gt;

&lt;p&gt;Then add the macro to the desired Template:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;umbraco:Macro Alias=&quot;DisableRequestValidation&quot; runat=&quot;server&quot;&amp;gt;&amp;lt;/umbraco:Macro&amp;gt;
&lt;/pre&gt;

&lt;p&gt;This works because Macros are rendered before the page Load
event, in the Init stage of the page lifecycle. Lucky us.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;XSLT script:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Well, you can't &lt;em&gt;really&lt;/em&gt; use XSLT to do this, or rather I
don't know how you would, since we need to get the page instance,
cast it to another type and set a property on the instance of that
type; XSLT doesn't inherently support doing such nitty-gritty work,
but there is support for calling functions (either &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/magazine/cc302079.aspx&quot;&gt;extension
functions&lt;/a&gt; or from external references). Unfortunately nothing
is exposed in, if it was going to be anywhere, &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/wiki/reference/umbracolibrary&quot;&gt;umbraco.libary&lt;/a&gt;
to faciliate this. The result then is something like this (I'll
leave the details as an exercise for the reader on this one as I'm
not fond nor good enough with with XSLT to be interested enough to
labour over it):&lt;/p&gt;

&lt;pre&gt;
&amp;lt;ms:script language=&quot;C#&quot; implements-prefix=&quot;stuff&quot;&amp;gt;
 &amp;nbsp;&amp;lt;![CDATA[
 &amp;nbsp;void DisableRequestValidation() {
 &amp;nbsp;&amp;nbsp; ((umbraco.UmbracoDefault)HttpContext.Current.CurrentHandler).ValidateRequest = false;
 &amp;nbsp;}
 &amp;nbsp;]]&amp;gt;
&amp;lt;/ms:script&amp;gt;
&lt;/pre&gt;

&lt;p&gt;You could also do a custom user control, but that brings us full
circle and this is getting silly.&lt;/p&gt;

&lt;p&gt;What about not turning off validation and addressing the issue
differently? One idea I came across was to encode the contents
being submitted, just to let it through, and then decode it on the
server side (you might get away without the latter part if you're
sanitising in the same way anyway) - but this is problematic for me
because it introduces a client-side responsibility that isn't
exactly reliable, meaning your application could still fail (or be
compromised, feature combination depending) and users become
annoyed. In my opinion, one should know exactly when turning off
server-side validation is necessary and safe, and be decisive
enough do it as required.&lt;/p&gt;

&lt;p&gt;The methods described in this post were tested against 4.7.2 and
at least one should work for any 4.x version.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.eitherxor.com/blog/disabling-request-validation-in-umbraco/</guid>
         <pubDate>Thu, 26 Jul 2012 00:11:36 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco Xslt Extension Functions</title>
         <link>http://umbraco-home.blogspot.com/2012/07/umbraco-xslt-extension-functions.html</link>
         <description>&lt;em&gt;Supported by &lt;/em&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;&lt;em&gt;Nova Outsourcing&lt;/em&gt;&lt;/a&gt;&lt;br /&gt;&lt;h3&gt; xmlns:umbraco.library=&quot;urn:umbraco.library&quot;&lt;/h3&gt;void AddJquery();&lt;br /&gt;XPathNodeIterator AllowedGroups(int documentId, string path);&lt;br /&gt;void ChangeContentType(string MimeType);&lt;br /&gt;void ClearLibraryCacheForMedia(int mediaId);&lt;br /&gt;void ClearLibraryCacheForMediaDo(int mediaId);&lt;br /&gt;void ClearLibraryCacheForMember(int mediaId);&lt;br /&gt;void ClearLibraryCacheForMemberDo(int memberId);&lt;br /&gt;string ContextKey(string key);&lt;br /&gt;bool CultureExists(string cultureName);&lt;br /&gt;string CurrentDate();&lt;br /&gt;string DateAdd(string Date, string AddType, int add);&lt;br /&gt;string DateAddWithDateTimeObject(DateTime Date, string AddType, int add);&lt;br /&gt;int DateDiff(string firstDate, string secondDate, string diffType);&lt;br /&gt;bool DateGreaterThan(string firstDate, string secondDate);&lt;br /&gt;bool DateGreaterThanOrEqual(string firstDate, string secondDate);&lt;br /&gt;bool DateGreaterThanOrEqualToday(string firstDate);&lt;br /&gt;bool DateGreaterThanToday(string firstDate);&lt;br /&gt;string FormatDateTime(string Date, string Format);&lt;br /&gt;Domain[] GetCurrentDomains(int NodeId);&lt;br /&gt;XPathNodeIterator GetCurrentMember();&lt;br /&gt;string GetDictionaryItem(string Key);&lt;br /&gt;XPathNodeIterator GetDictionaryItems(string Key);&lt;br /&gt;string GetHttpItem(string key);&lt;br /&gt;string GetItem(string alias);&lt;br /&gt;string GetItem(int nodeID, string alias);&lt;br /&gt;XPathNodeIterator GetMedia(int MediaId, bool Deep);&lt;br /&gt;XPathNodeIterator GetMember(int MemberId);&lt;br /&gt;string GetMemberName(int MemberId);&lt;br /&gt;string GetNodeFromLevel(string path, int level);&lt;br /&gt;string GetPreValueAsString(int Id);&lt;br /&gt;XPathNodeIterator GetPreValues(int DataTypeId);&lt;br /&gt;string GetPropertyTypeName(string ContentTypeAlias, string PropertyTypeAlias);&lt;br /&gt;Random GetRandom();&lt;br /&gt;Random GetRandom(int seed);&lt;br /&gt;Relation[] GetRelatedNodes(int NodeId);&lt;br /&gt;XPathNodeIterator GetRelatedNodesAsXml(int NodeId);&lt;br /&gt;string GetWeekDay(string Date);&lt;br /&gt;XPathNodeIterator GetXmlAll();&lt;br /&gt;XPathNodeIterator GetXmlDocument(string Path, bool Relative);&lt;br /&gt;XPathNodeIterator GetXmlDocumentByUrl(string Url);&lt;br /&gt;XPathNodeIterator GetXmlDocumentByUrl(string Url, int CacheInSeconds);&lt;br /&gt;XPathNodeIterator GetXmlNodeById(string id);&lt;br /&gt;XPathNodeIterator GetXmlNodeByXPath(string xpathQuery);&lt;br /&gt;XPathNodeIterator GetXmlNodeCurrent();&lt;br /&gt;bool HasAccess(int NodeId, string Path);&lt;br /&gt;string HtmlEncode(string Text);&lt;br /&gt;bool IsLoggedOn();&lt;br /&gt;bool IsProtected(int DocumentId, string Path);&lt;br /&gt;int LastIndexOf(string Text, string Value);&lt;br /&gt;string LongDate(string Date);&lt;br /&gt;string LongDate(string Date, bool WithTime, string TimeSplitter);&lt;br /&gt;string LongDateWithDayName(string Date, string DaySplitter, bool WithTime, string TimeSplitter, string GlobalAlias);&lt;br /&gt;string md5(string text);&lt;br /&gt;string NiceUrl(int nodeID);&lt;br /&gt;string NiceUrlFullPath(int nodeID);&lt;br /&gt;string NiceUrlWithDomain(int nodeID);&lt;br /&gt;void PublishSingleNode(int DocumentId);&lt;br /&gt;string PythonExecute(string expression);&lt;br /&gt;string PythonExecuteFile(string file);&lt;br /&gt;string QueryForNode(string id);&lt;br /&gt;void RefreshContent();&lt;br /&gt;void RegisterClientScriptBlock(string key, string script, bool addScriptTags);&lt;br /&gt;void RegisterJavaScriptFile(string key, string url);&lt;br /&gt;void RegisterStyleSheetFile(string key, string url);&lt;br /&gt;string RemoveFirstParagraphTag(string text);&lt;br /&gt;string RenderMacroContent(string Text, int PageId);&lt;br /&gt;string RenderTemplate(int PageId);&lt;br /&gt;string RenderTemplate(int PageId, int TemplateId);&lt;br /&gt;string Replace(string text, string oldValue, string newValue);&lt;br /&gt;string ReplaceLineBreaks(string text);&lt;br /&gt;string RePublishNodes(int nodeID);&lt;br /&gt;void RePublishNodesDotNet(int nodeID);&lt;br /&gt;void RePublishNodesDotNet(int nodeID, bool SaveToDisk);&lt;br /&gt;string Request(string key);&lt;br /&gt;string RequestCookies(string key);&lt;br /&gt;string RequestForm(string key);&lt;br /&gt;string RequestQueryString(string key);&lt;br /&gt;string RequestServerVariables(string key);&lt;br /&gt;string ResolveVirtualPath(string path);&lt;br /&gt;void SendMail(string FromMail, string ToMail, string Subject, string Body, bool IsHtml);&lt;br /&gt;string Session(string key);&lt;br /&gt;string SessionId();&lt;br /&gt;void setCookie(string key, string value);&lt;br /&gt;void setSession(string key, string value);&lt;br /&gt;string ShortDate(string Date);&lt;br /&gt;string ShortDate(string Date, bool WithTime, string TimeSplitter);&lt;br /&gt;string ShortDateWithGlobal(string Date, string GlobalAlias);&lt;br /&gt;string ShortDateWithTimeAndGlobal(string Date, string GlobalAlias);&lt;br /&gt;string ShortTime(string Date);&lt;br /&gt;XPathNodeIterator Split(string StringToSplit, string Separator);&lt;br /&gt;string StripHtml(string text);&lt;br /&gt;string Tidy(string StringToTidy, bool LiveEditing);&lt;br /&gt;string TruncateString(string Text, int MaxLength, string AddString);&lt;br /&gt;void UnPublishSingleNode(int DocumentId);&lt;br /&gt;void UpdateDocumentCache(int DocumentId);&lt;br /&gt;string UrlEncode(string Text);&lt;br /&gt;&lt;br /&gt;&lt;h3&gt; xmlns:Exslt.ExsltCommon=&quot;urn:Exslt.ExsltCommon&quot;&lt;/h3&gt;string objecttype(object o); &lt;br /&gt;&lt;br /&gt;&lt;h3&gt; xmlns:Exslt.ExsltDatesAndTimes=&quot;urn:Exslt.ExsltDatesAndTimes&quot;&lt;/h3&gt;string add(string datetime, string duration);&lt;br /&gt;string addduration(string duration1, string duration2);&lt;br /&gt;string avg(XPathNodeIterator iterator);&lt;br /&gt;string date();&lt;br /&gt;string date(string d);&lt;br /&gt;string datetime();&lt;br /&gt;string datetime(string d);&lt;br /&gt;string dayabbreviation();&lt;br /&gt;string dayabbreviation(string d);&lt;br /&gt;double dayinmonth();&lt;br /&gt;double dayinmonth(string d);&lt;br /&gt;double dayinweek();&lt;br /&gt;double dayinweek(string d);&lt;br /&gt;double dayinyear();&lt;br /&gt;double dayinyear(string d);&lt;br /&gt;string dayname();&lt;br /&gt;string dayname(string d);&lt;br /&gt;double dayofweekinmonth();&lt;br /&gt;double dayofweekinmonth(string d);&lt;br /&gt;string difference(string start, string end);&lt;br /&gt;string duration(double seconds);&lt;br /&gt;string formatdate(string d, string format);&lt;br /&gt;double hourinday();&lt;br /&gt;double hourinday(string d);&lt;br /&gt;bool leapyear();&lt;br /&gt;bool leapyear(string d);&lt;br /&gt;string max(XPathNodeIterator iterator);&lt;br /&gt;string min(XPathNodeIterator iterator);&lt;br /&gt;double minuteinhour();&lt;br /&gt;double minuteinhour(string d);&lt;br /&gt;string monthabbreviation();&lt;br /&gt;string monthabbreviation(string d);&lt;br /&gt;double monthinyear();&lt;br /&gt;double monthinyear(string d);&lt;br /&gt;string monthname();&lt;br /&gt;string monthname(string d);&lt;br /&gt;string parsedate(string d, string format);&lt;br /&gt;double secondinminute();&lt;br /&gt;double secondinminute(string d);&lt;br /&gt;double seconds();&lt;br /&gt;double seconds(string datetime);&lt;br /&gt;string sum(XPathNodeIterator iterator);&lt;br /&gt;string time();&lt;br /&gt;string time(string d);&lt;br /&gt;double weekinyear();&lt;br /&gt;double weekinyear(string d);&lt;br /&gt;double year();&lt;br /&gt;double year(string d);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt; xmlns:Exslt.ExsltMath=&quot;urn:Exslt.ExsltMath&quot;&lt;/h3&gt;string add(string datetime, string duration);&lt;br /&gt;string addduration(string duration1, string duration2);&lt;br /&gt;string avg(XPathNodeIterator iterator);&lt;br /&gt;string date();&lt;br /&gt;string date(string d);&lt;br /&gt;string datetime();&lt;br /&gt;string datetime(string d);&lt;br /&gt;string dayabbreviation();&lt;br /&gt;string dayabbreviation(string d);&lt;br /&gt;double dayinmonth();&lt;br /&gt;double dayinmonth(string d);&lt;br /&gt;double dayinweek();&lt;br /&gt;double dayinweek(string d);&lt;br /&gt;double dayinyear();&lt;br /&gt;double dayinyear(string d);&lt;br /&gt;string dayname();&lt;br /&gt;string dayname(string d);&lt;br /&gt;double dayofweekinmonth();&lt;br /&gt;double dayofweekinmonth(string d);&lt;br /&gt;string difference(string start, string end);&lt;br /&gt;double abs(double number);&lt;br /&gt;double acos(double x);&lt;br /&gt;double asin(double x);&lt;br /&gt;double atan(double x);&lt;br /&gt;double atan2(double x, double y);&lt;br /&gt;double avg(XPathNodeIterator iterator);&lt;br /&gt;double constant(string c, double precision);&lt;br /&gt;double cos(double x);&lt;br /&gt;double exp(double x);&lt;br /&gt;XPathNodeIterator highest(XPathNodeIterator iterator);&lt;br /&gt;double log(double x);&lt;br /&gt;XPathNodeIterator lowest(XPathNodeIterator iterator);&lt;br /&gt;double max(XPathNodeIterator iterator);&lt;br /&gt;double min(XPathNodeIterator iterator);&lt;br /&gt;double random();&lt;br /&gt;double sin(double x);&lt;br /&gt;double sqrt(double number);&lt;br /&gt;double tan(double x);&lt;br /&gt;&lt;br /&gt;&lt;h3&gt; xmlns:Exslt.ExsltRegularExpressions=&quot;urn:Exslt.ExsltRegularExpressions&quot; &lt;/h3&gt;string add(string datetime, string duration);&lt;br /&gt;string addduration(string duration1, string duration2);&lt;br /&gt;XPathNodeIterator match(string str, string regexp);&lt;br /&gt;XPathNodeIterator match(string str, string regexp, string flags);&lt;br /&gt;string replace(string input, string regexp, string flags, string replacement);&lt;br /&gt;bool test(string str, string regexp);&lt;br /&gt;bool test(string str, string regexp, string flags);&lt;br /&gt;XPathNodeIterator tokenize(string str, string regexp);&lt;br /&gt;XPathNodeIterator tokenize(string str, string regexp, string flags);&lt;br /&gt;&lt;br /&gt;&lt;h3&gt; xmlns:Exslt.ExsltStrings=&quot;urn:Exslt.ExsltStrings&quot;&lt;/h3&gt;string concat(XPathNodeIterator nodeset);&lt;br /&gt;string lowercase(string str);&lt;br /&gt;string padding(int number);&lt;br /&gt;string padding(int number, string s);&lt;br /&gt;string replace(string str, string oldValue, string newValue);&lt;br /&gt;XPathNodeIterator split(string str);&lt;br /&gt;XPathNodeIterator split(string str, string delimiter);&lt;br /&gt;XPathNodeIterator tokenize(string str);&lt;br /&gt;XPathNodeIterator tokenize(string str, string delimiters);&lt;br /&gt;string uppercase(string str);&lt;br /&gt;&lt;br /&gt;&lt;h3&gt; xmlns:Exslt.ExsltSets=&quot;urn:Exslt.ExsltSets&quot;&lt;/h3&gt;XPathNodeIterator difference(XPathNodeIterator nodeset1, XPathNodeIterator nodeset2);&lt;br /&gt;XPathNodeIterator distinct(XPathNodeIterator nodeset);&lt;br /&gt;bool hassamenode(XPathNodeIterator nodeset1, XPathNodeIterator nodeset2);&lt;br /&gt;XPathNodeIterator intersection(XPathNodeIterator nodeset1, XPathNodeIterator nodeset2);&lt;br /&gt;XPathNodeIterator leading(XPathNodeIterator nodeset1, XPathNodeIterator nodeset2);&lt;br /&gt;bool subset(XPathNodeIterator nodeset1, XPathNodeIterator nodeset2);&lt;br /&gt;XPathNodeIterator trailing(XPathNodeIterator nodeset1, XPathNodeIterator nodeset2);&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Supported by &lt;/em&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;&lt;em&gt;Nova Outsourcing&lt;/em&gt;&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4665764591629686889-1703599010229959321?l=umbraco-home.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Alan Cao)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-4665764591629686889.post-1703599010229959321</guid>
         <pubDate>Wed, 25 Jul 2012 15:18:00 +0000</pubDate>
      </item>
      <item>
         <title>A Problem With JSON</title>
         <link>http://www.proworks.com/blog/2012/07/25/a-problem-with-json/</link>
         <description>&lt;p&gt;A few weeks back&amp;nbsp;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://savagesandscoundrels.org/history-wheel&quot;
 title=&quot;Savages and Scoundrels website&quot;&gt;Savages and
Scoundrels Timeline&lt;/a&gt;&amp;nbsp;broke. The timeline which was usually
filled with wonderful tidbits of hitorical knowledge had vanished
from the page. I ventured off into the XSLT to find the solution to
this problem.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;It did not take long after examining the XSLT to decide that the
problem was not there. My next thought was the JSON which we fetch
our data from. I grabbed the JSON object which was used to display
our object and checked it with a &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://jsonviewer.stack.hu/&quot;
 title=&quot;A JSON Viewer&quot;&gt;JSON Viewer&lt;/a&gt;. Invallid JSON
object.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;After a careful examination of the JSON Object I found that it
was formatted correctly. All of the brackets matched, square and
squiggly. The strings had values and quotes, and the values had
quotes and trailing commas. It was a correctly formatted JSON
object. The question was why was the JSON viewer telling me it was
an invalid JSON object.&lt;/p&gt;

&lt;p&gt;The answer came from&amp;nbsp;&lt;a rel=&quot;nofollow&quot;
 title=&quot;Jason Prothero&quot;&gt;Jason Prothero&lt;/a&gt;. He had
run into something like this before and informed me of the
problem.&lt;/p&gt;

&lt;p&gt;The Umbraco content which we were pulling our data from had HTML
inside the content itself. The HTML spaces which were used for
indenting the text caused the JSON to be incorrectly
formatted.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The solution of stripping out the HTML before trying to use the
JSON object fixed the problem which left us with a very historical
website.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The take away from this I think should be &quot;No matter how great
something looks, watch out for HTML because it hates you!&quot;.&lt;/p&gt;

&lt;p&gt;Best,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; Wesley&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.proworks.com/blog/2012/07/25/a-problem-with-json/</guid>
         <pubDate>Wed, 25 Jul 2012 13:31:54 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco XSLT</title>
         <link>http://umbraco-home.blogspot.com/2012/07/umbraco-xslt.html</link>
         <description>&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Umbraco Development&lt;/a&gt; Team of&amp;nbsp;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova SoftWare&lt;/a&gt;&lt;/em&gt;&lt;br /&gt;I will introduce XSLT around Umbraco to help you understand it quickly. I will appreciate if you have any feedbacks on the article. &lt;br /&gt;The article includes following points.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;What are we building?&lt;/li&gt;&lt;li&gt;What’s the XML that will be transformed by the XSLT files in Umbraco?&lt;/li&gt;&lt;li&gt;Commonly used attributes in Umbaco xslt&lt;/li&gt;&lt;li&gt;Commonly used operators in xsl&lt;/li&gt;&lt;li&gt;Commonly used xsl functions&lt;/li&gt;&lt;li&gt;What are the common tasks in coding with XSLT in Umbraco?&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;What are we building&lt;/h3&gt;We are building templates to transform xml datasource to html. It is powered by XSL(Extensible Stylesheet Language).&lt;br /&gt;XSLT is heavily used in Umbraco. You can see it in building menus, news list, image gallery or any forms of representation in html.&lt;br /&gt;You can add XSLT in Developers-&amp;gt;XSLT Files in Umbraco backoffice, and then use&amp;nbsp; XSLT script by Umbraco macro.&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207232344581497.png&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;227&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207232344597560.png&quot; style=&quot;background-image:none;border:0px currentColor;display:inline;padding-left:0px;padding-right:0px;padding-top:0px;&quot; title=&quot;image&quot; width=&quot;230&quot;/&gt;&lt;/a&gt;&lt;br /&gt;Umbraco has shipped with XSLT files for most requirement that can be used with little modification. Those files are helpful to you to understand the XSLT in Umbraco as well.&lt;br /&gt;&lt;h3&gt;What’s the XML that will be transformed by the XSLT files in Umbraco&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;umbraco.config in App_Data.&lt;/li&gt;&lt;li&gt;collection returned by xslt extension functions. It is recommended to define the returned datatype as System.Xml.XPath.XPathNodeIterator.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3&gt;Common used attributes in Umbraco xslt&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;@id: used for computing the url for the content. Commonly used as  following.&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;&amp;lt;a href=’umbraco.library:NiceUrl(@id)’ /&amp;gt;&lt;/em&gt;&lt;/blockquote&gt;@isDoc: used for indicating is the current node is just content or associated  with template. If false, indicating it is content associated with template.  Commonly used in generating menus.&lt;br /&gt;&lt;blockquote&gt;&lt;span style=&quot;color:#4b4b4b;&quot;&gt;&lt;em&gt;&amp;lt;xsl:for-each  select=”$currentPage/*[not(@isDoc)]”&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;/blockquote&gt;@level: used for indicating the level number of current node in the tree  nodes, starting with 1. Commonly used in generating menus.&lt;br /&gt;&lt;blockquote&gt;&lt;span style=&quot;color:#4b4b4b;&quot;&gt;&lt;em&gt;&amp;lt;xsl:for-each select=”$currentPage/*[not(@isDoc)  and @level = 2]”&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;/blockquote&gt;@nodeName: used for indicating the name of the node. Commonly used in  generating menus.&lt;br /&gt;&lt;blockquote&gt;&lt;span style=&quot;color:#4b4b4b;&quot;&gt;&lt;em&gt;&amp;lt;xsl:for-each select=”$currentPage/*[not(@isDoc)  and @level = 2]”&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color:#4b4b4b;&quot;&gt;&lt;em&gt;&amp;lt;li&amp;gt;&amp;lt;xsl:value-of  select=”@nodeName”/&amp;gt;&amp;lt;/li&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color:#4b4b4b;&quot;&gt;&lt;em&gt;&amp;lt;/xsl:for-each&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h3&gt;Commonly used operators in xsl&lt;/h3&gt;&lt;div&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;color:black;width:400px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;plus&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;+&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;minus&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;multiply&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;*&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;division&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;div&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;mod &lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;mod&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;and&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;and&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;or&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;or&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;not&lt;/td&gt;&lt;td valign=&quot;top&quot; width=&quot;200&quot;&gt;not()&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Commonly used functions in xsl&lt;/h3&gt;&lt;div&gt;position(): return the index of the current node in for-each&lt;br /&gt;current(): return the current node&lt;br /&gt;&lt;br /&gt;name(): return the name of the current node or the first node in the  specified node set. It is heavily used in the xslt for related links.&lt;br /&gt; &lt;blockquote&gt;&lt;span style=&quot;color:#4b4b4b;&quot;&gt;&lt;em&gt;&amp;lt;xsl:for-each  select=”$currentPage/*[name()=@propertyAlias]/links/link”&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color:#4b4b4b;&quot;&gt;&lt;em&gt;…&lt;/em&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color:#4b4b4b;&quot;&gt;&lt;em&gt;&amp;lt;/xsl:for-each&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div class=&quot;separator&quot; style=&quot;clear:both;text-align:center;&quot;&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://1.bp.blogspot.com/-QQmA0cgx51w/UI4PLf2pYRI/AAAAAAAAAB4/DQHWCf4r0Kc/s1600/links.png&quot; style=&quot;margin-left:1em;margin-right:1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;207&quot; src=&quot;http://1.bp.blogspot.com/-QQmA0cgx51w/UI4PLf2pYRI/AAAAAAAAAB4/DQHWCf4r0Kc/s320/links.png&quot; width=&quot;320&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;count(“expression”): return the number of the elements in the expression&lt;br /&gt;Please refer to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/xpath/xpath_functions.asp&quot;&gt;XPath functions&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/xsl/xsl_functions.asp&quot;&gt;XSL  functions&lt;/a&gt; for more functions.&lt;/div&gt;&lt;/div&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h3&gt;What’s the common task in coding with XSLT in Umbraco&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Iterating the nodes in umbraco.config file&lt;/li&gt;&lt;li&gt;Filtering the nodes in umbraco.config file&lt;/li&gt;&lt;li&gt;Working with umbraco xslt extension functions&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;Iterating the nodes in umbraco.config file &lt;/h4&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;xml &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;1.0&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;encoding&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;UTF-8&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:stylesheet&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;1.0&lt;/span&gt;&quot;&lt;br /&gt;&lt;span style=&quot;color:red;&quot;&gt;xmlns:xsl&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;http://www.w3.org/1999/XSL/Transform&lt;/span&gt;&quot;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:output &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;method&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;xml&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;omit-xml-declaration&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;yes&lt;/span&gt;&quot; &lt;span style=&quot;color:blue;&quot;&gt;/&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:param &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;currentPage&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;/&amp;gt;&lt;br /&gt;&amp;lt;!-- &lt;/span&gt;&lt;span style=&quot;color:green;&quot;&gt;define your varible here &lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;--&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:template &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;/&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;/span&gt;&lt;span style=&quot;color:green;&quot;&gt;add your xsl code here&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;--&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:template&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:stylesheet&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;em&gt;&lt;span style=&quot;color:#c0504d;&quot;&gt;Note: xmlns declarations for umbraco extension library are removed for saving space.&lt;/span&gt;&lt;/em&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot;&gt;&lt;em&gt;&lt;span style=&quot;color:#c0504d;&quot;&gt;&lt;/span&gt;&lt;/em&gt;&amp;nbsp;&lt;/pre&gt;&quot;currentPage” is the parameter in the template. The value is supplied by umbraco system when the template is invoked by umbraco system. It represents the current node where the xslt macro exists.&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207242354043617.png&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;166&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207242354049963.png&quot; style=&quot;background-image:none;border:0px currentColor;display:inline;padding-left:0px;padding-right:0px;padding-top:0px;&quot; title=&quot;image&quot; width=&quot;164&quot;/&gt;&lt;/a&gt;&lt;br /&gt;Let’s say, we have the content&amp;nbsp; structure in the screenshot above. If we put the xslt in the template of NewsPage, $currentPage represents the “NewsPage” node. So to iterate the child nodes in NewsPage, we will write the following code.&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;        &lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:for-each &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;$currentPage/NewsItem&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:for-each&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;em&gt;&lt;span style=&quot;color:#c0504d;&quot;&gt;Note: “NewsItem” is the node name of the news.&lt;/span&gt;&lt;/em&gt; &lt;br /&gt;Or&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;    &lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:for-each &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;$currentPage/child::*&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:for-each&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;Please refer to “&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/xpath/xpath_syntax.asp&quot;&gt;Selecting Nodes&lt;/a&gt;” section in w3school for more details for selecting nodes.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Filtering the nodes in umbraco.config file &lt;/h4&gt;You can use xpath predicates to filter the nodes.&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;      &lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:for-each &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;$currentPage/child::*[@level=2]&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:for-each&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;Or&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;      &lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:for-each &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;$currentPage/child::*&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:if &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;@level=2&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:if&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:for-each&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;Please refer to “&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/xpath/xpath_syntax.asp&quot;&gt;Predicates&lt;/a&gt;” section in w3school for more details for filtering nodes. &lt;br /&gt;&lt;h4&gt;Working with umbraco xslt extension functions&lt;/h4&gt;Umbraco has shipped with rich set of xslt extension functions.&lt;br /&gt;To apply the xslt extension functions, we must declare the xmlns for the xslt library.&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:stylesheet&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;1.0&lt;/span&gt;&quot;&lt;br /&gt;&lt;span style=&quot;color:red;&quot;&gt;xmlns:xsl&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;http://www.w3.org/1999/XSL/Transform&lt;/span&gt;&quot;&lt;br /&gt;&lt;span style=&quot;color:red;&quot;&gt;xmlns:msxml&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;urn:schemas-microsoft-com:xslt&lt;/span&gt;&quot;&lt;br /&gt;&lt;span style=&quot;color:red;&quot;&gt;xmlns:umbraco.library&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;urn:umbraco.library&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;xmlns:Exslt.ExsltCommon&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;urn:Exslt.ExsltCommon&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;xmlns:Exslt.ExsltDatesAndTimes&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;urn:Exslt.ExsltDatesAndTimes&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;xmlns:Exslt.ExsltMath&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;urn:Exslt.ExsltMath&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;xmlns:Exslt.ExsltRegularExpressions&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;urn:Exslt.ExsltRegularExpressions&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;xmlns:Exslt.ExsltStrings&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;urn:Exslt.ExsltStrings&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;xmlns:Exslt.ExsltSets&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;urn:Exslt.ExsltSets&lt;/span&gt;&quot;&lt;br /&gt;&lt;span style=&quot;color:red;&quot;&gt;exclude-result-prefixes&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets &lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;/span&gt;&lt;span style=&quot;color:green;&quot;&gt;Other code&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;--&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:stylesheet&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;code&quot;&gt;Please refer to &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://umbraco-home.blogspot.com/2012/07/umbraco-xslt-extension-functions.html&quot;&gt;Umbraco Xslt Extension Functions&lt;/a&gt; for details.&lt;/div&gt;Then invoke the functions as following.&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;a &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;{umbraco.library:NiceUrl(@id)}&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:variable &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;media&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;umbraco.library:GetMedia($mediaId, 0)&lt;/span&gt;&quot; &lt;span style=&quot;color:blue;&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;We can create our own xslt extension functions to embrace specific business as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The skeleton of the article is completed. I will improve the content in the common tasks section in the coming up days.&lt;br /&gt;&lt;h3&gt;Reference&lt;/h3&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/xsl/xsl_examples.asp&quot; title=&quot;http://www.w3schools.com/xsl/xsl_examples.asp&quot;&gt;http://www.w3schools.com/xsl/xsl_examples.asp&lt;/a&gt;&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/xsl/default.asp&quot; title=&quot;http://www.w3schools.com/xsl/default.asp&quot;&gt;http://www.w3schools.com/xsl/default.asp&lt;/a&gt;&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/xpath/xpath_axes.asp&quot; title=&quot;http://www.w3schools.com/xpath/xpath_axes.asp&quot;&gt;http://www.w3schools.com/xpath/xpath_axes.asp&lt;/a&gt;&lt;br /&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/xpath/xpath_functions.asp&quot; title=&quot;http://www.w3schools.com/xpath/xpath_functions.asp&quot;&gt;http://www.w3schools.com/xpath/xpath_functions.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Umbraco Development Team&lt;/a&gt; of&amp;nbsp;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova SoftWare&lt;/a&gt;&lt;/em&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4665764591629686889-1660498365665787047?l=umbraco-home.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Alan Cao)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-4665764591629686889.post-1660498365665787047</guid>
         <pubDate>Mon, 23 Jul 2012 15:50:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://1.bp.blogspot.com/-QQmA0cgx51w/UI4PLf2pYRI/AAAAAAAAAB4/DQHWCf4r0Kc/s72-c/links.png" width="72" xmlns:media="http://search.yahoo.com/mrss/"/>
      </item>
      <item>
         <title>Dealing With 1000’s Of Members In Umbraco Without The API Or Examine</title>
         <link>http://www.blogfodder.co.uk/2012/7/19/dealing-with-1000’s-of-members-in-umbraco-without-the-api-or-examine</link>
         <description>&lt;p&gt;I had a situation recently with a client site that has literally
1000's of members, and was getting about 20 new members sign up per
day. I initially started off with the built in API, but each
'group' has around 20+ custom properties and even with a cache it
started to creek when searching and mass downloading members into
CSV files (Watching with SqlProfiler made your eyes wince).&lt;/p&gt;

&lt;p&gt;So I opted for Examine next. I wrote a really nice Examine
membership wrapper a while back (I might post that up too at some
point) and while this is blazingly fast, the current examine
implementation in Umbraco is flakey.&amp;nbsp; Its fantastic for a
while, then it stopped indexing member properties and only a manual
rebuild would fix it. Then I finally had it when it decided it
wasn't going to index anything on my dev machine! I just can't work
like that.&lt;/p&gt;

&lt;p&gt;I'll say now though, if Examine gets upgraded and the
implementation gets some TLC and a built in dashboard I'd consider
swapping back. But for now, its just not robust enough. So I have
opted for a custom membership class which does the work against the
database itself. Its obviously not as fast or efficient as using
Examine, and not overly elegant either! But its a lot faster than
the API for this setup and dealing with large volumes of
members.&amp;nbsp; Its been tested with 6000+ members all with around
20ish custom properties (&lt;strong&gt;ALSO ONLY TESTED ON SQL EXPRESS
2008 AND UMBRACO 4.7&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;The two classes are 'uMember' and 'n3oMembership'. The 'uMember'
class shown below is what the methods return and you work with,
what I like about this whole new solution is that it will
automatically pick up new properties as you add them.&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;public class&lt;/span&gt; &lt;span&gt;uMember&lt;/span&gt; {
    &lt;span&gt;public int&lt;/span&gt; MemberId { &lt;span&gt;get&lt;/span&gt;; &lt;span&gt;set&lt;/span&gt;; }
    &lt;span&gt;public string&lt;/span&gt; MemberLoginName { &lt;span&gt;get&lt;/span&gt;; &lt;span&gt;set&lt;/span&gt;; }
    &lt;span&gt;public string&lt;/span&gt; MemberEmail { &lt;span&gt;get&lt;/span&gt;; &lt;span&gt;set&lt;/span&gt;; }
    &lt;span&gt;public string&lt;/span&gt; MemberCreateDateTime { &lt;span&gt;get&lt;/span&gt;; &lt;span&gt;set&lt;/span&gt;; }
    &lt;span&gt;public&lt;/span&gt; &lt;span&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span&gt;string&lt;/span&gt;, &lt;span&gt;string&lt;/span&gt;&amp;gt; MemberProperties { &lt;span&gt;get&lt;/span&gt;; &lt;span&gt;set&lt;/span&gt;; }
}
&lt;/pre&gt;

&lt;h2&gt;Methods Included&lt;/h2&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span&gt;uMember&lt;/span&gt;&amp;gt; SearchMembersByPropertyValue(&lt;span&gt;string&lt;/span&gt; propertyName, &lt;span&gt;string&lt;/span&gt; search)&lt;br /&gt;
&lt;/pre&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;uMember&lt;/span&gt; GetMemberById(&lt;span&gt;int&lt;/span&gt; memberId)
&lt;/pre&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;uMember&lt;/span&gt; GetCurrentMember()
&lt;/pre&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span&gt;uMember&lt;/span&gt;&amp;gt; GetMembersByCSV(&lt;span&gt;string&lt;/span&gt; csv)
&lt;/pre&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span&gt;uMember&lt;/span&gt;&amp;gt; GetAllMembers()
&lt;/pre&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span&gt;uMember&lt;/span&gt;&amp;gt; GetMembersByGroup(&lt;span&gt;string&lt;/span&gt; groupName)
&lt;/pre&gt;

&lt;h2&gt;Some Example Usages&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Getting All Members From Specific Member
Group&lt;/strong&gt;&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;var&lt;/span&gt; sb = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;StringBuilder&lt;/span&gt;();
&lt;span&gt;var&lt;/span&gt; db = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;n3oMembership&lt;/span&gt;();
&lt;span&gt;var&lt;/span&gt; members = db.GetMembersByGroup(&lt;span&gt;&quot;MyMemberGroupName&quot;&lt;/span&gt;);
&lt;span&gt;foreach&lt;/span&gt; (&lt;span&gt;var&lt;/span&gt; mem &lt;span&gt;in&lt;/span&gt; members)
{
    sb.AppendFormat(&lt;span&gt;&quot;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span&gt;{0}&lt;/span&gt;&lt;span&gt;&amp;lt;p&amp;gt;&quot;&lt;/span&gt;, mem.MemberLoginName);
    sb.AppendFormat(&lt;span&gt;&quot;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span&gt;{0}&lt;/span&gt;&lt;span&gt;&amp;lt;p&amp;gt;&quot;&lt;/span&gt;, mem.MemberProperties[&lt;span&gt;&quot;PropertyNameHere&quot;&lt;/span&gt;]);
}
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Get All Members By A Property Value&lt;/strong&gt;&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;var&lt;/span&gt; sb = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;StringBuilder&lt;/span&gt;();
&lt;span&gt;var&lt;/span&gt; db = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;n3oMembership&lt;/span&gt;();
&lt;span&gt;var&lt;/span&gt; members = db.SearchMembersByPropertyValue(&lt;span&gt;&quot;MyPropertyName&quot;&lt;/span&gt;, &lt;span&gt;&quot;ValueToSearchFor&quot;&lt;/span&gt;);
&lt;span&gt;foreach&lt;/span&gt; (&lt;span&gt;var&lt;/span&gt; mem &lt;span&gt;in&lt;/span&gt; members)
{
    sb.AppendFormat(&lt;span&gt;&quot;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span&gt;{0}&lt;/span&gt;&lt;span&gt;&amp;lt;p&amp;gt;&quot;&lt;/span&gt;, mem.MemberLoginName);
    sb.AppendFormat(&lt;span&gt;&quot;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span&gt;{0}&lt;/span&gt;&lt;span&gt;&amp;lt;p&amp;gt;&quot;&lt;/span&gt;, mem.MemberProperties[&lt;span&gt;&quot;PropertyNameHere&quot;&lt;/span&gt;]);
}
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Get Members By CSV&lt;/strong&gt;&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;
&lt;span&gt;var&lt;/span&gt; sb = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;StringBuilder&lt;/span&gt;();
&lt;span&gt;var&lt;/span&gt; db = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;n3oMembership&lt;/span&gt;();
&lt;span&gt;var&lt;/span&gt; csv = &lt;span&gt;&quot;13210,2712,10502,8381,14927&quot;&lt;/span&gt;;
&lt;span&gt;var&lt;/span&gt; members = db.GetMembersByCSV(csv);
&lt;span&gt;foreach&lt;/span&gt; (&lt;span&gt;var&lt;/span&gt; mem &lt;span&gt;in&lt;/span&gt; members)
{
    sb.AppendFormat(&lt;span&gt;&quot;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span&gt;{0}&lt;/span&gt;&lt;span&gt;&amp;lt;p&amp;gt;&quot;&lt;/span&gt;, mem.MemberLoginName);
    sb.AppendFormat(&lt;span&gt;&quot;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span&gt;{0}&lt;/span&gt;&lt;span&gt;&amp;lt;p&amp;gt;&quot;&lt;/span&gt;, mem.MemberProperties[&lt;span&gt;&quot;PropertyNameHere&quot;&lt;/span&gt;]);
}
&lt;/pre&gt;

&lt;p&gt;I am sure I can probably improve the SQL performance with a bit
more tweaking, and move some of the in memory manipulation of large
lists into a dedicated SQL query/call - But this is functional and
working for now.&lt;/p&gt;

&lt;h2&gt;Now on codeplex!&lt;/h2&gt;

&lt;p&gt;I have moved this project to codeplex in the hope that until
Umbraco is updated to make members more efficient you can get by
using this.&amp;nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://umembership.codeplex.com/&quot;&gt;http://umembership.codeplex.com/&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As above, I have only tested this on two implementations both
running 4.7 and both running SQL Express 2008. It won't work on
SQLLite, if I get time at the weekend or next week I'll see if I
can sort that.&lt;/p&gt;

&lt;p&gt;I'd love to know if this helps and works for everyone else in
the same boat as I was, please let me know any feedback below. If
you use this with your own caching implementation then I think
you'll have a pretty quick and scalable solution.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.blogfodder.co.uk/2012/7/19/dealing-with-1000’s-of-members-in-umbraco-without-the-api-or-examine</guid>
         <pubDate>Thu, 19 Jul 2012 00:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Invalid object name 'umbracoDomains' resolved</title>
         <link>http://www.carbonsoft.co.uk/articles/2012/07/invalid-object-name-umbracodomains-resolved.aspx</link>
         <description>An article on what causes the &quot;Invalid object name 'umbracoDomains'.&quot; error and how to resolve it.</description>
         <author>Richard Bowers</author>
         <guid isPermaLink="false">http://www.carbonsoft.co.uk/articles/2012/07/invalid-object-name-umbracodomains-resolved.aspx</guid>
         <pubDate>Wed, 18 Jul 2012 20:05:00 +0000</pubDate>
      </item>
      <item>
         <title>Creating Custom Applications and Trees in Umbraco 4.8+</title>
         <link>http://blog.mattbrailsford.com/2012/07/18/creating-custom-applications-and-trees-in-umbraco-4-8/</link>
         <description>For anybody who has attempted to create a custom application or tree in Umbraco prior to 4.8, you&amp;#8217;ll have probably found it to be some what of a pain in the backside. For package developers, this has previously meant using the the addApplication and addApplicationTree package actions, or for regular developers just wanting to extend [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=blog.mattbrailsford.com&amp;#038;blog=5220074&amp;#038;post=727&amp;#038;subd=mattbrailsford&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">http://blog.mattbrailsford.com/?p=727</guid>
         <pubDate>Wed, 18 Jul 2012 12:50:27 +0000</pubDate>
         <content:encoded><![CDATA[<p>For anybody who has attempted to create a custom application or tree in Umbraco prior to 4.8, you&#8217;ll have probably found it to be some what of a pain in the backside.</p>
<p>For package developers, this has previously meant using the the <a rel="nofollow" target="_blank" href="http://our.umbraco.org/wiki/reference/packaging/package-actions/add-application">addApplication </a>and <a rel="nofollow" target="_blank" href="http://our.umbraco.org/wiki/reference/packaging/package-actions/add-application-tree">addApplicationTree </a>package actions, or for regular developers just wanting to extend Umbraco for their clients, has required them to manually tweak the umbracoApp and  umbracoAppTree database tables. And don&#8217;t even get me started on versioning these changes.</p>
<p>Well in 4.8 this is all set to change, as from here on the entries for applications and application trees have now been moved to config files located in the config folder. Unsurprisingly, these are named <strong>applications.config</strong> and <strong>trees.config</strong>.</p>
<p>If you install 4.8 and take a look at the contents, it&#8217;s just plain old XML, and for anyone who has looked in the relevant database tables, the attributes will look quite familiar, being a direct copy of what used to be in the database. By moving these to the file system though, we&#8217;ve now made it much easier to tweak these entries and also add them to source control.</p>
<p>As fun as XML is though, we thought we would make it even simpler for you and so have introduced a couple of new attributes and base classes for you to make use of aswell.</p>
<p><strong>Application Attribute</strong></p>
<p>Params:</p>
<ul>
<li><strong>alias</strong> &#8211; The alias for the application</li>
<li><strong>name</strong> &#8211; The friendly name for the application</li>
<li><strong>icon</strong> &#8211; The icon css class / image filename to use in the application tray</li>
<li><strong>sortOrder</strong> [Optional] &#8211; The order in which the icon should appear in the application tray</li>
</ul>
<p>Example:</p>
<p><pre>
[Application(&quot;myApp&quot;, &quot;My App&quot;, &quot;myapp.gif&quot;)]
public class MyApplicationDefinition : IApplication
{ }
</pre></p>
<p><strong>Tree Attribute</strong></p>
<p>Params:</p>
<ul>
<li><strong>appAlias</strong> &#8211; The application alias the tree is associated with</li>
<li><strong>alias</strong> &#8211; The alias for the tree</li>
<li><strong>title</strong> &#8211; The friendly title for the tree</li>
<li><strong>iconClosed</strong> [Optional, Default = ".sprTreeFolder"] &#8211; The icon to use for closed tree nodes</li>
<li><strong>iconOpen</strong> [Optional, Default = ".sprTreeFolder_o"] &#8211; The icon to use for open tree nodes</li>
<li><strong>action</strong> [Optional] &#8211; And action to perform when the tree root node is clicked</li>
<li><strong>silent</strong> [Optional, Default = false] &#8211; Whether the tree should load silently</li>
<li><strong>initialize</strong> [Optional, Default = true] &#8211; Whether the tree should auto initialize on load</li>
<li><strong>sortOrder</strong> [Optional] &#8211; The order in which the tree should appear in the tree pane</li>
</ul>
<p>Example:</p>
<p><pre>
[Tree(&quot;myApp&quot;, &quot;myTree&quot;, &quot;My Tree&quot;)]
public class loadMyTree : ITree
{
    ...
}
</pre></p>
<p>In addition to these attributes, all your application / tree definitions should implement the interfaces <strong>IApplication</strong> and <strong>ITree</strong> respectively.</p>
<p>Once you have created your classes, simply compile them and drop them in your bin folder, then when your app pool recycles, Umbraco will check for any new definitions, and if it finds any, will synchronize them to the XML config file. This way, the XML config becomes the central location for definitions, but you have a simpler way of declaring them. If you find yourself needing more fine grained control over your definitions though, you can still always tweak the XML file no problem.</p>
<p><strong>What about backwards compatibility?</strong></p>
<p>So what about all those packages that already create trees / applications in the database? No worries, when Umbraco searches for any class based definitions, it also checks the database, so if it finds any applications / trees declared in the database that are not declared in the config file, it will sync those too. Simple.</p>
<p>Ultimately this is one small step (of many to come) to make Umbraco a bit more flexible for people working in teams, and to simplify the package development process.  And I hope you&#8217;ll agree that it&#8217;s a step in the right direction.</p>
<br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/mattbrailsford.wordpress.com/727/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mattbrailsford.wordpress.com/727/"/></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.mattbrailsford.com&#038;blog=5220074&#038;post=727&#038;subd=mattbrailsford&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://0.gravatar.com/avatar/34b41f8815601e9a16baa4e56c69bcc2?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">mattbrailsford</media:title>
         </media:content>
      </item>
      <item>
         <title>Debug in Umbraco Site</title>
         <link>http://umbraco-home.blogspot.com/2012/07/debug-in-umbraco-site.html</link>
         <description>&lt;p&gt;&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;When the asp.net webform developers become Umbraco developers, they often ask questions on how to debug the Umbraco extensions. I will explain it in detail here. I will appreciate if you could share any of your ideas on it.&lt;/p&gt;&lt;ol&gt;    &lt;li&gt;Install Umbraco site in Visual Studio 2010&lt;/li&gt;    &lt;li&gt;Create your project for Umbraco extension&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Install Umbraco site in Visual Studio 2010&lt;/h3&gt;&lt;p&gt;You can download the Umbraco installation package from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://umbraco.codeplex.com/releases&quot;&gt;umbraco.codeplex.com/releases&lt;/a&gt;. Let&amp;#8217;s say, we unzip the package to f:&amp;#92;XXX_Project&amp;#92;Umbraco_Site&amp;#92;.&lt;/p&gt;&lt;p&gt;Run Visual Studio 2010. Select File-&amp;gt;Open-&amp;gt;Web Site. Select the folder f:&amp;#92;XXX_Project&amp;#92;Umbraco_Site&amp;#92;.&lt;/p&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242244261.png&quot;&gt;&lt;img style=&quot;border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242251720.png&quot; width=&quot;457&quot; height=&quot;142&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Right click the project and then select &amp;#8220;Use IIS Express&amp;#8221;.&lt;/p&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242256147.png&quot;&gt;&lt;img style=&quot;border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242254162.png&quot; width=&quot;215&quot; height=&quot;261&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Right click the project and then select &amp;#8220;Property Pages&amp;#8221;. Select the &amp;#8220;Build&amp;#8221; tab and then select &amp;#8220;No Build&amp;#8221; in Before running startup pages dropdownlist, uncheck &amp;#8220;Build Web site as part of solution&amp;#8221;.&lt;/p&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242256637.png&quot;&gt;&lt;img style=&quot;border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242266604.png&quot; width=&quot;406&quot; height=&quot;237&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Click &amp;#8220;Save All&amp;#8221; button in the Visual Studio to name and save the solution file. It is recommended to save it at f:&amp;#92;XXX_Project&amp;#92; folder and name the solution file &amp;#8220;XXX_Project&amp;#8221;.&lt;/p&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242265176.png&quot;&gt;&lt;img style=&quot;border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/20120717224226475.png&quot; width=&quot;244&quot; height=&quot;169&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Now you can press F5 to run the site to start the installation.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#c0504d&quot;&gt;&lt;em&gt;Note: In your development practice, it is recommended to replace XXX with your business name.&lt;/em&gt;&lt;/font&gt; &lt;/p&gt;&lt;h3&gt;Create your project for Umbraco extension&lt;/h3&gt;&lt;p&gt;Let&amp;#8217;s say, we will create a project, XXX.XsltExtension to contain Umbraco Xslt extensions for complex business.&lt;/p&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/2012071722422793.png&quot;&gt;&lt;img style=&quot;border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242271456.png&quot; width=&quot;816&quot; height=&quot;400&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;After the project is created, right click the XXX.XsltExtension project and select &amp;#8220;Properties&amp;#8221; to add the copy command as following.&lt;/p&gt;&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242273931.png&quot;&gt;&lt;img style=&quot;border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/czy/201207/201207172242283865.png&quot; width=&quot;429&quot; height=&quot;317&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The command is as following to copy the dll and pdb (symbol files for debug) to the bin folder of Umbraco site for debug purpose.&lt;/p&gt;&lt;p&gt;copy &quot;$(TargetDir)*.*&quot; &quot;$(SolutionDir)Umbraco_Site&amp;#92;bin&amp;#92;&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Then whenever you build XXX.XsltExtension project, the dll and pdb files will be copied to the bin folder under the Umbraco site. Now you can debug your xslt extension functions as long as you get the xslt extension configured in f:&amp;#92;XXX_Project&amp;#92;Umbraco_Site&amp;#92;config&amp;#92;xsltExtensions.config.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4665764591629686889-5900586391236753901?l=umbraco-home.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Alan Cao)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-4665764591629686889.post-5900586391236753901</guid>
         <pubDate>Tue, 17 Jul 2012 15:04:00 +0000</pubDate>
      </item>
      <item>
         <title>Performance study in Microsoft.ApplicationDataBlock.SqlHelper</title>
         <link>http://umbraco-home.blogspot.com/2012/07/performance-study-in.html</link>
         <description>&lt;p&gt;&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I recently got interested in Microsoft.ApplicationDataBlock.SqlHelper.ExecuteNonQuery as it was mentioned by an Umbraco developer in my team. I find the method allows programmers to assign parameters in a quite flexible way. It is defined as following.&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;public static int &lt;/span&gt;ExecuteNonQuery(&lt;span style=&quot;color:blue;&quot;&gt;string &lt;/span&gt;connectionString, &lt;span style=&quot;color:blue;&quot;&gt;string &lt;/span&gt;spName, &lt;span style=&quot;color:blue;&quot;&gt;params object&lt;/span&gt;[] parameterValues);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;As the parameter parameterValues is defined with params key word, the number of the parameter value is dynamic according to the parameter number defined in the stored procedure. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is like a proxy to stored procedure in C# code. The parameters in parameterValues array should has the same sequence as that in stored procedure. Let’s say, we have a stored procedure defined as following.&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;ALTER PROCEDURE &lt;/span&gt;&lt;span style=&quot;color:teal;&quot;&gt;[dbo]&lt;/span&gt;&lt;span style=&quot;color:gray;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:teal;&quot;&gt;[InsertT1]&lt;br /&gt;    @Id &lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color:gray;&quot;&gt;,&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color:teal;&quot;&gt;@Description &lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;varchar&lt;/span&gt;&lt;span style=&quot;color:gray;&quot;&gt;(&lt;/span&gt;50&lt;span style=&quot;color:gray;&quot;&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;    insert into &lt;/span&gt;&lt;span style=&quot;color:teal;&quot;&gt;T1 &lt;/span&gt;&lt;span style=&quot;color:gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:teal;&quot;&gt;Id&lt;/span&gt;&lt;span style=&quot;color:gray;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;Description&lt;/span&gt;&lt;span style=&quot;color:gray;&quot;&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:gray;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:teal;&quot;&gt;@Id&lt;/span&gt;&lt;span style=&quot;color:gray;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:teal;&quot;&gt;@Description&lt;/span&gt;&lt;span style=&quot;color:gray;&quot;&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;END&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;The following code invoke SqlHelper.ExecuteNonQuery to invoke the stored procedure eventually.&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;static void &lt;/span&gt;ExecuteSqlHelperInCorrectOrder()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color:#2b91af;&quot;&gt;SqlHelper&lt;/span&gt;.ExecuteNonQuery(_connStr, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;insertt1&quot;&lt;/span&gt;, 1, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ExecuteSqlHelperInCorrectOrder&quot;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;The code above looks quite concise and flexible, right? We name it concise because it has the same sequence of parameters as that defined in stored procedure. We name it flexible because no matter how many parameters defined in the stored procedure, SqlHelper.ExecuteNonQuery can always contain them. However, there is no free lunch in the world. It brings us big convenience, but in the meanwhile, it steals performance.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I wrote a little helper function for invoking stored procedure in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://dev3lib.codeplex.com/SourceControl/changeset/view/a5c987f78ddd#Dev3Lib%2fDev3Lib%2fSql%2fSqlSPHelper.cs&quot;&gt;DevLib3&lt;/a&gt;. The code goes as following. It is not as concise as SqlHelper.ExecuteNonQuery. The parameters are passed to the stored procedure by invoking AddParameterWithValue method.&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;static void &lt;/span&gt;ExecuteFromSpHelper()&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;(&lt;span style=&quot;color:#2b91af;&quot;&gt;SqlSPHelper &lt;/span&gt;sp = &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;SqlSPHelper&lt;/span&gt;(_connStr, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;insertt1&quot;&lt;/span&gt;))&lt;br /&gt;    {&lt;br /&gt;        sp.AddParameterWithValue(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Id&quot;&lt;/span&gt;, 1);&lt;br /&gt;        sp.AddParameterWithValue(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;description&quot;&lt;/span&gt;, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ExecuteFromSpHelper&quot;&lt;/span&gt;);&lt;br /&gt;        sp.ExecuteWithNonQuery();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Here is a complete code sample to compare the performance.&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.Configuration;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;Microsoft.ApplicationBlocks.Data;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;System.Diagnostics;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;Dev3Lib.Sql;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:blue;&quot;&gt;namespace &lt;/span&gt;TestProject&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color:blue;&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;Program&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style=&quot;color:blue;&quot;&gt;static string &lt;/span&gt;_connStr = &lt;span style=&quot;color:#2b91af;&quot;&gt;ConfigurationManager&lt;/span&gt;.ConnectionStrings[0].ConnectionString;&lt;br /&gt;        &lt;span style=&quot;color:blue;&quot;&gt;static void &lt;/span&gt;Main(&lt;span style=&quot;color:blue;&quot;&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color:#2b91af;&quot;&gt;Stopwatch &lt;/span&gt;watch = &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;Stopwatch&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;            watch.Start();&lt;br /&gt;            ExecuteFromSpHelper();&lt;br /&gt;            watch.Stop();&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color:#2b91af;&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;color:blue;&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ExecuteFromSpHelper executes for {0} ticks&quot;&lt;/span&gt;, watch.ElapsedTicks));&lt;br /&gt;&lt;br /&gt;            watch.Restart();&lt;br /&gt;            ExecuteFromSpHelper();&lt;br /&gt;            watch.Stop();&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color:#2b91af;&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;color:blue;&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ExecuteFromSpHelper executes for {0} ticks&quot;&lt;/span&gt;, watch.ElapsedTicks));&lt;br /&gt;&lt;br /&gt;            watch.Restart();&lt;br /&gt;            ExecuteSqlHelperInCorrectOrder();&lt;br /&gt;            watch.Stop();&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color:#2b91af;&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;color:blue;&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ExecuteSqlHelperInCorrectOrder executes for {0} ticks&quot;&lt;/span&gt;, watch.ElapsedTicks));&lt;br /&gt;&lt;br /&gt;            watch.Restart();&lt;br /&gt;            ExecuteSqlHelperInCorrectOrder();&lt;br /&gt;            watch.Stop();&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color:#2b91af;&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;color:blue;&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ExecuteSqlHelperInCorrectOrder executes for {0} ticks&quot;&lt;/span&gt;, watch.ElapsedTicks));&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color:#2b91af;&quot;&gt;Console&lt;/span&gt;.Read();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:blue;&quot;&gt;static void &lt;/span&gt;ExecuteSqlHelperInCorrectOrder()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color:#2b91af;&quot;&gt;SqlHelper&lt;/span&gt;.ExecuteNonQuery(_connStr, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;insertt1&quot;&lt;/span&gt;, 1, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ExecuteSqlHelperInCorrectOrder&quot;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:blue;&quot;&gt;static void &lt;/span&gt;ExecuteSqlHelperInWrongOrder()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color:#2b91af;&quot;&gt;SqlHelper&lt;/span&gt;.ExecuteNonQuery(_connStr, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;insertt1&quot;&lt;/span&gt;, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ExecuteSqlHelperInWrongOrder&quot;&lt;/span&gt;, 1);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color:blue;&quot;&gt;static void &lt;/span&gt;ExecuteFromSpHelper()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color:blue;&quot;&gt;using &lt;/span&gt;(&lt;span style=&quot;color:#2b91af;&quot;&gt;SqlSPHelper &lt;/span&gt;sp = &lt;span style=&quot;color:blue;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;SqlSPHelper&lt;/span&gt;(_connStr, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;insertt1&quot;&lt;/span&gt;))&lt;br /&gt;            {&lt;br /&gt;                sp.AddParameterWithValue(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;Id&quot;&lt;/span&gt;, 1);&lt;br /&gt;                sp.AddParameterWithValue(&lt;span style=&quot;color:#a31515;&quot;&gt;&quot;description&quot;&lt;/span&gt;, &lt;span style=&quot;color:#a31515;&quot;&gt;&quot;ExecuteFromSpHelper&quot;&lt;/span&gt;);&lt;br /&gt;                sp.ExecuteWithNonQuery();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot;&gt;&lt;/pre&gt;&lt;pre class=&quot;code&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;p&gt;The result goes as following.&lt;/p&gt;&lt;p&gt;ExecuteFromSpHelper executes for 394664 ticks&lt;br&gt;ExecuteFromSpHelper executes for 6973 ticks&lt;br&gt;ExecuteSqlHelperInCorrectOrder executes for 75625 ticks&lt;br&gt;ExecuteSqlHelperInCorrectOrder executes for 10209 ticks&lt;/p&gt;&lt;p&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;From the result, we can judge that the performance of SqlSPHelper is better than that of SqlHelper’s. However, the invoking code of SqlHelper is more concise than that of SqlSPHelper’s. &lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;font color=&quot;#c0504d&quot;&gt;Note: ExecuteFromSpHelper is invoked two times here because the connection pool will take time to be initialized in the first invoking. ExecuteSqlHelperInCorrectOrder is invoked two times here because the parameters information of the stored procedure will take time to be initialized in the first invoking.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;font color=&quot;#c0504d&quot;&gt;&lt;/font&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I will appreciate if you have any feedback on the discussion.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;font color=&quot;#c0504d&quot;&gt;&lt;/font&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4665764591629686889-2509203136449685523?l=umbraco-home.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Alan Cao)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-4665764591629686889.post-2509203136449685523</guid>
         <pubDate>Tue, 17 Jul 2012 01:23:00 +0000</pubDate>
      </item>
      <item>
         <title>uBase - Umbraco /base evolved</title>
         <link>http://www.eyecatch.no/blog/2012/07/ubase-umbraco-base-evolved/</link>
         <description>&lt;p&gt;I've just released uBase - a new extension for Umbraco.&lt;/p&gt;

&lt;p&gt;It is meant to be an evolution of /base, only more awesome
:-)&lt;br&gt;
 The system is available in all flavours; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/azzlack/umbraco.slashbase&quot;&gt;Git&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://nuget.org/packages/Umbraco.SlashBase&quot;&gt;NuGet&lt;/a&gt;&amp;nbsp;and
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/projects/website-utilities/ubase&quot;&gt;Umbraco
Package&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please take a look on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.eyecatch.no/projects/ubase/&quot;&gt;project
page&lt;/a&gt; or on the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/azzlack/umbraco.slashbase/wiki&quot;&gt;GitHub
wiki&lt;/a&gt; for more information.&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.eyecatch.no/blog/2012/07/ubase-umbraco-base-evolved/</guid>
         <pubDate>Sun, 15 Jul 2012 19:14:13 +0000</pubDate>
         <content:encoded><![CDATA[<p>I've just released uBase - a new extension for Umbraco.</p>

<p>It is meant to be an evolution of /base, only more awesome
:-)<br>
 The system is available in all flavours; <a rel="nofollow" target="_blank" href="https://github.com/azzlack/umbraco.slashbase">Git</a>, <a rel="nofollow" target="_blank" href="https://nuget.org/packages/Umbraco.SlashBase">NuGet</a>&nbsp;and
<a rel="nofollow" target="_blank" href="http://our.umbraco.org/projects/website-utilities/ubase">Umbraco
Package</a>.</p>

<p>Please take a look on the <a rel="nofollow" target="_blank" href="http://www.eyecatch.no/projects/ubase/">project
page</a> or on the <a rel="nofollow" target="_blank" href="https://github.com/azzlack/umbraco.slashbase/wiki">GitHub
wiki</a> for more information.</p>]]></content:encoded>
      </item>
      <item>
         <title>Umbraco Hosting in 5 Minutes</title>
         <link>http://www.carbonsoft.co.uk/articles/2012/07/umbraco-hosting-in-5-minutes.aspx</link>
         <description>From nothing to an Umbraco website up an running in five minutes.</description>
         <author>Richard Bowers</author>
         <guid isPermaLink="false">http://www.carbonsoft.co.uk/articles/2012/07/umbraco-hosting-in-5-minutes.aspx</guid>
         <pubDate>Fri, 13 Jul 2012 20:40:00 +0000</pubDate>
      </item>
      <item>
         <title>Why choose Umbraco... from a 'non-techy' perspective!</title>
         <link>http://mayflymedia.co.uk</link>
         <guid isPermaLink="false">http://mayflymedia.co.uk/blog/why-choose-umbraco-from-a-'non-techy'-perspective!/</guid>
         <pubDate>Fri, 13 Jul 2012 14:09:35 +0000</pubDate>
      </item>
      <item>
         <title>Umbraco GetMedia-Complete example</title>
         <link>http://umbraco-home.blogspot.com/2012/07/umbraco-getmedia-complete-example.html</link>
         <description>&lt;p&gt;&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Many Umbraco developers will run into the situation to get all the attributes returned by the GetMedia method. Here we go with a complete example to get all attributes returned by GetMedia.&lt;/p&gt;&lt;h3&gt;Attributes Table&lt;/h3&gt;&lt;table style=&quot;color:#000000;&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;486&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;140&quot;&gt;umbracoFile&lt;/td&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;344&quot;&gt;return the virtual path of the file which can be accessed from the url.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;140&quot;&gt;umbracoWidth&lt;/td&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;344&quot;&gt;return the image width if the file is an image&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;140&quot;&gt;umbracoHeight&lt;/td&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;344&quot;&gt;return the height if the file is an image&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;140&quot;&gt;umbracoBytes&lt;/td&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;344&quot;&gt;return the file size&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;140&quot;&gt;umbracoExtension&lt;/td&gt;&lt;td height=&quot;40&quot; valign=&quot;top&quot; width=&quot;344&quot;&gt;return the file extension&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3&gt;Sample code&lt;/h3&gt;&lt;p&gt;The sample code below assume that you have a Media Picker type field named thumbnail. It will show the image on the page. If the image is not existing, the space of the image will not be rendered. The code below focuses on GetMedia and using attributes returned by GetMedia.&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:variable &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;mediaId&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;thumbnail&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;/&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:variable &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;media&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;umbraco.library:GetMedia($mediaId, 0)&lt;/span&gt;&quot; &lt;span style=&quot;color:blue;&quot;&gt;/&amp;gt;&lt;br /&gt;            &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:if &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;test&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;$media&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;              &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#a31515;&quot;&gt;img &lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;{$media/umbracoFile}&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;{$media/umbracoWidth}&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;{$media/umbracoHeight}&lt;/span&gt;&quot; &lt;span style=&quot;color:red;&quot;&gt;align&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color:blue;&quot;&gt;left&lt;/span&gt;&quot; &lt;span style=&quot;color:blue;&quot;&gt;/&amp;gt;&lt;br /&gt;            &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#2b91af;&quot;&gt;xsl:if&lt;/span&gt;&lt;span style=&quot;color:blue;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#c0504d&quot;&gt;&lt;em&gt;Note: The code above only applies to Umbraco 4.7 or later. I haven’t done experiment on 4.5 or earlier versions.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;I will be glad to answer any questions on the issue.&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Supported by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.novasoftware.com/Developer/Umbraco.aspx?utm_source=blog_umbraco&amp;amp;utm_medium=post&amp;amp;utm_campaign=czy&quot;&gt;Nova Outsourcing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4665764591629686889-1830317673878184673?l=umbraco-home.blogspot.com' alt=''/&gt;&lt;/div&gt;</description>
         <author>noreply@blogger.com (Alan Cao)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-4665764591629686889.post-1830317673878184673</guid>
         <pubDate>Fri, 13 Jul 2012 08:39:00 +0000</pubDate>
      </item>
      <item>
         <title>Revisiting using ASP.NET MVC in Umbraco 4</title>
         <link>http://www.aaron-powell.com/umbraco/using-mvc-in-umbraco-4-revisited</link>
         <description>&lt;p&gt;A month on I wanted to revisit my post on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.aaron-powell.com/umbraco/using-mvc-in-umbraco-4&quot;&gt;using MVC with Umbraco 4&lt;/a&gt;. I write the code and draft while driving back from the retreat so it wasn't very &lt;em&gt;deeply&lt;/em&gt; investigated.&lt;/p&gt;

&lt;p&gt;Basically it was done as a proof of concept.&lt;/p&gt;

&lt;p&gt;Well today I was chatting with someone who was wanting to take the PoC and try it in production and through chatting we learnt a few things about what I initially write about that are important to know if you're wanting to try it as well.&lt;/p&gt;

&lt;h4&gt;Watch your routes&lt;/h4&gt;

&lt;p&gt;There was a problem with the site whenever you hit the root of the site, the &lt;code&gt;/&lt;/code&gt; route, the controller action was being executed. Luckily this is an easy fix. The MVC route registration looked like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;routes.MapRoute(
    &quot;Default&quot;,
    &quot;{controller}/{action}/{id}&quot;,
    new { controller = &quot;Home&quot;, action = &quot;Index&quot;, id = &quot;&quot; },
);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now if you know you're MVC you'll know that that matches the &lt;code&gt;/&lt;/code&gt; route as well in MVC since we've given a default controller and action (it's also why &lt;code&gt;/home&lt;/code&gt; matches the Index action on Home). So what's interesting here is that MVC's routing engine takes priority over the Umbraco one.&lt;/p&gt;

&lt;p&gt;To fix it you need to add some kind of static prefix to the route, what's probably the easiest is to hard code the controller name, like so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;routes.MapRoute(
    &quot;Default&quot;,
    &quot;home/{action}/{id}&quot;,
    new { controller = &quot;Home&quot;, action = &quot;Index&quot;, id = &quot;&quot; },
);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This tells MVC that anything &lt;code&gt;/home&lt;/code&gt; will go to the Home controller, it can't go anywhere else.&lt;/p&gt;

&lt;h4&gt;Umbraco reserved paths&lt;/h4&gt;

&lt;p&gt;The above point leads onto this point, as I said it turns out that the MVC routes took over the Umbraco ones, this means that you &lt;strong&gt;don't&lt;/strong&gt; have to add an ignore route for Umbraco.&lt;/p&gt;

&lt;p&gt;In the last post I said you needed to add &lt;code&gt;~/home&lt;/code&gt; like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;add key=&quot;umbracoReservedPaths&quot; value=&quot;~/umbraco,~/install/,~/home&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Well seems I was wrong about that, sorry!&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;What I've blogged is still very much a proof of concept but it seems that some people are thinking that it is actually a valid concept. This is a few lessons learnt from a project actually trying it out, I hope the guys blog about it once they are done but we'll see.&lt;/p&gt;

&lt;p&gt;If you learn any more yourself let me know!&lt;/p&gt;
&lt;img src=&quot;http://www.aaron-powell.com/via-feed/umbraco/using-mvc-in-umbraco-4-revisited&quot;/&gt;  &lt;div class='facebook'&gt;
                      
                    &lt;/div&gt;</description>
         <author>Aaron Powell</author>
         <guid isPermaLink="false">http://www.aaron-powell.com/umbraco/using-mvc-in-umbraco-4-revisited</guid>
         <pubDate>Wed, 11 Jul 2012 02:35:37 +0000</pubDate>
      </item>
      <item>
         <title>Defying Umbraco: 'artful' iframe rendering in TinyMCE Richtext</title>
         <link>http://www.eitherxor.com/blog/defying-umbraco-artful-iframe-rendering-in-tinymce-richtext/</link>
         <description>&lt;p&gt;Consider the requirement to add a video&lt;sup&gt;1&lt;/sup&gt;&amp;nbsp;from an
external source&lt;sup&gt;2&lt;/sup&gt;&amp;nbsp;within an Umbraco website and you
might think &quot;Pah! Childsplay&quot;. Let me enlighten you in case you're
not familiar with this burden. Depending on ones temperament the
emotions may differ but the steps remain the
same&lt;sup&gt;3&lt;/sup&gt;...&lt;/p&gt;

&lt;p&gt;Firstly you tell the person making the request that they can
themselves do this - a fully fledged content management system was
delivered, after all. No, they can't do it so they provide the URL.
Link on clipboard you go, straight to the back-office content view
of the page where this item is bound to reside, &amp;nbsp; fire up the
HTML editor and churn out an iframe in seconds only to realise 2
minutes later it didn't take. Damn. Firslty questioning your self
you do it again, same result. Curious. More minutes later you learn
iframes are 'dirty' (TinyMCE is 'cleaning') and so trying with a
slight variation, maybe a &quot;no iframes&quot; dumped between the tags and
still it disappears (either on &quot;update&quot; or on save / publish of the
document. &quot;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://youtu.be/6lGAXzG2zhU&quot;&gt;Unb-bloody-lievable!&lt;/a&gt;&quot; Off to
Google it is with a headfull of queries you'd like to type, few of
which likely to yield fruitful results.&lt;/p&gt;

&lt;p&gt;For some kind of background on this, here's some input from
Niels Hartvig, the Umbraco view (dated, but with no reason to
believe the standpoint has changed).&lt;/p&gt;

&lt;p&gt;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://forum.umbraco.org/yaf_postst6161_Umbraco-changing-my-markup.aspx&quot;&gt;
Umbraco changing my markup&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why not use a textarea (called textfield multiple as type)
instead of an editor when you're entering html and obviously don't
use the editor?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm glad that you have issues with the RTE. I don't think that
stuff like Iframes etc belongs in a WYSIWYG editor and I'd say that
the fact that it doesn't work is a great kudos to umbraco. When you
want to enable editors to things like pasting an iframe etc, I
strongly believe that a textarea is the way to go forward.
Optionally two types of content pages, one with an RTE and one with
a Textarea. umbraco is indeed optimized for xhtml which goes well
hand-in-hand with xml and xslt. We're not saying that it's the only
option, but when that's the main convention, the conventions
&quot;dictated&quot; by TinyMCE works very well.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;If the editor didn't worked, umbraco wouldn't be as popular as
it is. Of course the buttons do what it says, else our issue
tracker would be floated with issues related to that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's a shame. In fact it's saddingly laughable to see such
overtly anti-user retorts to requests for support.&amp;nbsp;It's a
frying-pan-to-fire carry on: in the pacey world of technological
endeavours where people are growing aware of what they actually do
want, now they have no idea where they really want it. &quot;But, hold
on! I thought I did.&quot; Nope, you thought wrong, you don't
really.&lt;/p&gt;

&lt;p&gt;Not to mince words,&amp;nbsp;I also find it a largely conceited view
coming from a community aimed at enabling people that anyone would
use this content management system because of this &quot;feature&quot; when
the less fallacial and obvious standpoint would be that this system
is used despite such &quot;bugs&quot;. Facebook having so many users doesn't
make it any more useful.&lt;/p&gt;

&lt;p&gt;That notwithstanding, we can succeed. You'll cringe right
through it and feel dirty at the end, but the client will get that
iframe &quot;right there&quot;, where they loosely gestured. Here's some
ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 1: Hardcode an iframe into an HTML
template&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're lucky, the desired location of the iframe &quot;within the
content&quot; might not mean in between such and so paragraphs of that
page, but be somehow removed. In any case where the request is so
simple, just dropping the snippet of markup into a template could
suffice. In my opinion this is rarely useful. I can think of only
one case to demonstrate any usefulness and that is on a contact
page where a Google Map is displaying the same pinned location
regardless of the section of the site.&amp;nbsp;The rendered position
remains the same&lt;sup&gt;4&lt;/sup&gt;&amp;nbsp;and it will (nearly) always
work&lt;sup&gt;5&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 2: Hardcode an iframe with a dynamic source into
an HTML template&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm stretching the above example a bit there, since it would be
more productive to let a URL to be specified at the Document Type
level, therefore allowing variance in the output of the iframe -
when things change then so can the depicted Google Maps. In this
case, say with a property aliased as &quot;iframeUrl&quot; on the Document
Type, you could do:&lt;/p&gt;

&lt;pre&gt;
// using a Razor script in Umbraco 5
&amp;lt;iframe src=&quot;@DynamicModel.iframeUrl&quot;&amp;gt;&amp;lt;/iframe&amp;gt;

// using a Razor script in Umbraco 4.7.1.1
&amp;lt;ifram src=&quot;@Model.iframeUrl&quot;&amp;gt;&amp;lt;/iframe&amp;gt;

// using an XSLT script in other Umbraco versions
&amp;lt;xsl:output method=&quot;html&quot;/&amp;gt;
&amp;lt;iframe src=&quot;$currentPage/iframeUrl&quot;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;nbsp;
&lt;/pre&gt;

&lt;p&gt;The position still remains the same, and this will work just as
reliably as above&lt;sup&gt;6&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 3: Paste an iframe into the HTML modal of
TinyMCE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is what it's all about. User's want &quot;in-line iframes&quot;. Some
text here and a video there, more text and an image, and so on.
Unfortunately, this is ultimately futile - I have&amp;nbsp; &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/forum/using/ui-questions/2615-TinyMCE-Woes&quot;&gt;
heard few claims of success&lt;/a&gt;&amp;nbsp;in rendering iframes in the
richtext editor. Aattempting to achieve this will require tweaking
the TinyMCE configuration, a feat in itself&lt;sup&gt;7&lt;/sup&gt;- but try
updating the validElements section of the editor (a .config file in
most versions, but as part of the Data Type editor in Umbraco
5):&lt;/p&gt;

&lt;pre class=&quot;csharp&quot;&gt;
iframe[src|frameborder=0|alt|title|width|height|align|name]
&lt;/pre&gt;

&lt;p class=&quot;csharp&quot;&gt;You could even try turning off 'tidying' at all
together:&lt;/p&gt;

&lt;pre class=&quot;csharp&quot;&gt;
&amp;lt;TidyEditorContent&amp;gt;False&amp;lt;/TidyEditorContent&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Check out&amp;nbsp; &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/wiki/how-tos/customizing-the-wysiwyg-rich-text-editor-(tinymce)/allow-any-markup-in-the-tinymce-editor&quot;&gt;
this post&lt;/a&gt;&amp;nbsp;for extra help.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 4: Use the &quot;insert / edit embedded media&quot; button
off TinyMCE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wait. There's a button? Yes, present in 4.7.1.1 but not 5.x
versions. It's very presence, when present, stands for irony alone:
a feature that shouldn't exist existing only to might as well not
exist. It doesn't work.&amp;nbsp;If it did work then this would be
ideal. It would mean dimensions could easily be set, too.&lt;/p&gt;

&lt;p&gt;You can turn the button on in the settings of RTE type in the
Data Types section ansd would need to update the configuration as
listed for Option 3, give it a go.&lt;/p&gt;

&lt;p&gt;These options (3 and 4) are noted without solutions because they
demonstrate how it should work based on what users want to do
(because they expect it to do that way) and to give it exposure. I
would love to be proven wrong on both this and the above point. A
single, reliable fix for one should also solve the other. Good
luck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 5: Add an iframe using a script executed by a
macro with parameters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In theory this would be perfect. The broken (or absent) button
could be forgotten and a new option could be added (accessible via
&quot;Insert macro&quot;) that will do the work. Possible script types depend
on the version of Umbraco being used (Razor or XSLT), but the macro
remains the same.&lt;/p&gt;

&lt;p&gt;Macro settings and parameters:&lt;/p&gt;

&lt;p&gt;&lt;a rel=&quot;nofollow&quot;
&gt;
&lt;img/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a rel=&quot;nofollow&quot;
&gt;
&lt;img/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the code for this:&lt;/p&gt;

&lt;pre&gt;
// using a Razor script in Umbraco 5
var src&amp;nbsp;=&amp;nbsp;Model.MacroParameters.source;
var&amp;nbsp;width&amp;nbsp;=&amp;nbsp;Model.MacroParameters.width;
var&amp;nbsp;height&amp;nbsp;=&amp;nbsp;Model.MacroParameters.height;
var&amp;nbsp;format&amp;nbsp;=&amp;nbsp;&quot;&amp;lt;iframe src='{0}' width='{1}' height='{2}'&amp;gt;&amp;lt;/iframe&amp;gt;&quot;;

@Html.Raw(string.Format(format,&amp;nbsp;src,&amp;nbsp;width,&amp;nbsp;height))

// using a Razor script in Umbraco 4.7.1.1
var&amp;nbsp;src&amp;nbsp;=&amp;nbsp;Model.Parameters.source;
var&amp;nbsp;width&amp;nbsp;=&amp;nbsp;Model.Parameters.width;
var&amp;nbsp;height&amp;nbsp;=&amp;nbsp;Model.Parameters.height;  
var&amp;nbsp;format&amp;nbsp;=&amp;nbsp;&quot;&amp;lt;iframe src='{0}' width='{1}' height='{2}'&amp;gt;&amp;lt;/iframe&amp;gt;&quot;;

@Html.Raw(string.Format(format,&amp;nbsp;src,&amp;nbsp;width,&amp;nbsp;height))

// using an XSLT script&amp;nbsp;in other Umbraco versions
&amp;lt;xsl:output method=&quot;html&quot;/&amp;gt;
&amp;lt;xsl:param name=&quot;src&quot; select=&quot;/macro/source&quot;/&amp;gt;
&amp;lt;xsl:param name=&quot;width&quot; select=&quot;/macro/width&quot;/&amp;gt;
&amp;lt;xsl:param name=&quot;height&quot; select=&quot;/macro/height&quot;/&amp;gt;

&amp;lt;iframe src=&quot;$src&quot; width=&quot;$width&quot; height=&quot;$height&quot;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;nbsp;
&lt;/pre&gt;

&lt;p&gt;When using XSLT script the setting of the output method and
getting of parameter arguments should be done outside of the
template.&lt;/p&gt;

&lt;p&gt;If all goes well, after a few minutes users can &quot;inject&quot; iframes
directly into content within seconds. Macros are temperamental when
it comes to parameters, so if you start faffing about or don't get
it right first time and parameter names or aliases have to change,
then you've had it. My latest effort in 4.7.1.1 was unfruitful,
having the `src` value be neglected while every other specified
value was set. The time before that was with 5 and the macro and I
disagreed on the type of a parameter (the compiler was the on the
macro's side).&lt;/p&gt;

&lt;p&gt;What was never going to be an elegant task is becoming much less
so.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 6: Add an iframe using RenderMacroContent to
transmute content&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I failed to mention something. The above option (with 4.7.1.1)
got me as far putting stuff into the editor and with the editor not
abusing it into oblivion. That's progress, in a sense. User input
doesn't just up and disappear anymore. But even if the source
wasn't ignored it wouldn't matter because apparently
WYSINWYG&lt;sup&gt;8&lt;/sup&gt;. Macros don't render in the HTML output of a
page when inserted using TinyMCE.&lt;/p&gt;

&lt;p&gt;The solution could simply be&amp;nbsp; &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://en.wikibooks.org/wiki/Umbraco/Reference/umbraco.library/RenderMacroContent&quot;&gt;
RenderMacroContent&lt;/a&gt;. That means wherever this content is to hit
the screen a call it needed to this method so that Umbraco may
interpret and translate the macro place holder stuff into valid
markup. Documentation only covers XSLT but you can do this with
Razor:&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;
// using a Razor script in Umbraco 4.7.1.1
@Html.Raw(umbraco.library.RenderMacroContent(Model.documentContent.ToString(), Model.Id))

// using an XSLT script in other versions
&amp;lt;xsl:value-of select=&quot;umbraco.library:RenderMacroContent($currentPage/nameOfContentPropery, @id)&quot; disable-output-escaping=&quot;yes&quot;/&amp;gt;
&lt;/pre&gt;

&lt;p&gt;I'm not sure anyone has figured out&amp;nbsp; &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/forum/developers/xslt/1706-$currentpage-and-rendermacrocontent&quot;&gt;
what the identifier is for&lt;/a&gt;. Codeplex is down for me at the
moment so I can't look into where this method is, if it exists at
all, in Umbraco 5.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 7: Add an iframe using web-adrenaline and
voodoo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If that doesn't work then you're left with something like this
in the markup of the output:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;!--?UMBRACO_MACRO macroAlias=&quot;IFrameItem&quot;&amp;nbsp;source=&quot;http://www.eitherxor.com&quot; width=&quot;360&quot; height=&quot;240&quot; --&amp;gt;
&lt;/pre&gt;

&lt;p&gt;The parameter names might differ but that is unimportant. Now,
with a little bit of Javascript and&amp;nbsp;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt;&amp;nbsp;(naturally), and a touch
of desperate thinking, the following can be conjured up to parse
these comment tags and transform them into the valid iframe
elements they ought to be:&lt;/p&gt;

&lt;pre&gt;
$(document).ready(function() {
&amp;nbsp; $.each($(&quot;*&quot;).contents().filter(function() { return this.nodeType == 8; }), function() {
&amp;nbsp; &amp;nbsp; var val = this.nodeValue;
&amp;nbsp; &amp;nbsp; if (val.startsWith(&quot;?UMBRACO_MACRO&quot;) &amp;amp;&amp;amp; val.indexOf('macroAlias=&quot;IFrameItem&quot;') &amp;gt; -1) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; var srcIdx = val.indexOf('source=&quot;') + 8;
&amp;nbsp; &amp;nbsp; &amp;nbsp; var widthIdx = val.IndexOf('width=&quot;') + 7;
&amp;nbsp; &amp;nbsp; &amp;nbsp; var heightIdx = val.indexOf('height=&quot;') + 8;
&amp;nbsp; &amp;nbsp; &amp;nbsp; var src = val.substring(srcIdx, val.indexOf('&quot;', srcIdx + 1));
&amp;nbsp; &amp;nbsp; &amp;nbsp; var width = val.substring(widthIdx, val.indexOf('&quot;', widthIdx + 1));
&amp;nbsp; &amp;nbsp; &amp;nbsp; var height = val.substring(heightIdx, val.indexOf('&quot;', heightIdx + 1));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; $(this).replaceWith('&amp;lt;iframe src=&quot;' + src + &quot;' width=&quot;' + width + &quot;' height=&quot;' + height + &quot;'&amp;gt;&amp;lt;/iframe&amp;gt;&quot;);
&amp;nbsp; &amp;nbsp; }
&amp;nbsp; });
});&amp;nbsp;
&lt;/pre&gt;

&lt;p&gt;&lt;span class=&quot;js-punctuation&quot;&gt;You can't polish that. It looks
awful because it is and it's staying that way. Obviously all and
any of the scripting downfalls are present when using client-side
code and maintenance becomes troublesome. Ridiculous as it sounds,
in the end it's probably more reliable (not to mention productive)
to use this method anyway.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;js-punctuation&quot;&gt;The next step would be replacing
the entire editor with a more preferable one.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
 &lt;sub&gt;&lt;sup&gt;1&lt;/sup&gt;&amp;nbsp;Those things that are fairly standard on
the web these days, that people want on their site.&lt;/sub&gt;&lt;br /&gt;
 &lt;sub&gt;&lt;sup&gt;2&lt;/sup&gt;&amp;nbsp;Those million dollar businesses dedicated
to serving videos, that people want to use on their
site.&lt;/sub&gt;&lt;br /&gt;
 &lt;sub&gt;&lt;sup&gt;3&lt;/sup&gt;&amp;nbsp;Just one instance of this kind of request
is enough to foresee it happening again, and hence have a mechanism
to handle without developer intervention.&lt;/sub&gt;&lt;br /&gt;
 &lt;sub&gt;&lt;sup&gt;4&lt;/sup&gt;&amp;nbsp;The position can change, but you will get
the call to change it perhaps the request to &quot;make it so it can be
put anywhere&quot;.&lt;/sub&gt;&lt;br /&gt;
 &lt;sub&gt;&lt;sup&gt;5&lt;/sup&gt;&amp;nbsp;It won't work when URLs change, or need to
be changed and nobody can find where to change them.&lt;/sub&gt;&lt;br /&gt;
 &lt;sub&gt;&lt;sup&gt;6&lt;/sup&gt;&amp;nbsp;Bad user-input is neglected by that
statement, that can break stuff.&amp;nbsp;&lt;/sub&gt;&lt;br /&gt;
 &lt;sub&gt;&lt;sup&gt;7&lt;/sup&gt;&amp;nbsp;Editing the validElements configuration of
TinyMCE has changed in Umbraco 5. What was already far from
beautiful is now in a cramped &amp;lt;textarea&amp;gt;, no
favourite-XML-editor goodness remains.&lt;/sub&gt;&lt;br /&gt;
 &lt;sub&gt;&lt;sup&gt;8&lt;/sup&gt;&amp;nbsp;What you see is not what you
get.&amp;nbsp;&lt;/sub&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.eitherxor.com/blog/defying-umbraco-artful-iframe-rendering-in-tinymce-richtext/</guid>
         <pubDate>Thu, 05 Jul 2012 19:25:42 +0000</pubDate>
      </item>
      <item>
         <title>The umbracoNaviHide Deterrent</title>
         <link>http://www.eitherxor.com/blog/the-umbraconavihide-deterrent/</link>
         <description>&lt;p&gt;A while ago I noticed&amp;nbsp; &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/forum/core/umbraco-5-general-discussion/25819-Umbraco-5-Does-umbracoUrlName,-umbracoUrlAlias,-umbracoRedirect,-umbracoNaviHide,-umbracoInternalRedirectId-still-work&quot;&gt;
a query was raised on the Umbraco forum&lt;/a&gt;, reportedly some
properties, properties that many would&amp;nbsp; &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://heltblank.wordpress.com/2012/02/12/umbraco-5-jupiter-extensions-2/&quot;&gt;
have grown accustomed to&lt;/a&gt;, weren't available in Umbraco 5. From
there&amp;nbsp;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://issues.umbraco.org/issue/U5-254&quot;&gt;a
feature request was made&lt;/a&gt;&amp;nbsp;to reinstate these specific
&quot;missing parts&quot;:&lt;/p&gt;

&lt;pre&gt;
umbracoUrlName
umbracoUrlAlias&amp;nbsp;
umbracoRedirect
umbracoNaviHide
umbracoInternalRedirectId
&lt;/pre&gt;

&lt;p&gt;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/wiki/reference/umbraco-best-practices&quot;&gt;
These properties&lt;/a&gt;&amp;nbsp;(yes, listed in 'best practices'), by the
way, weren't really properties in the regular sense. You'd need to
manually add these aliased properties to Document Types but not
actually use them, let Umbraco handle them
fantasically&lt;sup&gt;1&lt;/sup&gt;.&amp;nbsp;They weren't really anything besides
black magic in the system, giving it a tainted voodoo core of
illusion. Fortunately no less than Neils Hartvig himself has said
as much (in the thread linked above):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;While these special aliases does a great job and are super easy
to use (albeit totally impossible to discover if you don't stumble
across docs that mention their usage), the problem with these are
that they're 'magic' strings which really is a mess (read: They're
hacks inside the core). So they won't come back in v5 in the form
we know from v4.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Neils goes on to say they're working on getting something more
proper in there, but I can't see it, and (one would hope,&amp;nbsp;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/forum/core/umbraco-5-general-discussion/28565-Umbraco-5-Performance-issues&quot;&gt;
all things considered&lt;/a&gt;) it certainly won't be a high
priority.&lt;/p&gt;

&lt;p&gt;At the time of writing I'm not sure how either front is
progressing, whether a categorical declination has been made, a
compromise or a complete succuming to the wants of the few. I'll
need to get up to date. But when this came about my opinion came to
mind, one I've held for some time since seeing umbracoNaviHide used
by others in projects I've had to come back to.&lt;/p&gt;

&lt;p&gt;umbracoNaviHide is one of the less sinister of the bunch and the
one I'll continue with. It's less magical and&amp;nbsp;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://forum.umbraco.org/yaf_postst6371_umbracoNaviHide-hides-everything.aspx&quot;&gt;
more conventional&lt;/a&gt;, which is worrying in itself&amp;nbsp;(the
&quot;umbraco&quot; prefix is almost as long as each of these property names
and is redundant!&amp;nbsp;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Leszynski_naming_convention&quot;&gt;Leszynski&lt;/a&gt;/&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Hungarian_notation&quot;&gt;Hungarian&lt;/a&gt;/&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://stackoverflow.com/a/218149/263681&quot;&gt;80s&lt;/a&gt;&lt;sup&gt;2&lt;/sup&gt;,
anyone?) But the bottom line is that, forgetting the smelly
implementation, these are all a bad idea because they're
meaningless.&lt;/p&gt;

&lt;p&gt;umbracoNaviHide is a misnomer wherever it is used, unless
clearly defined somewhere else in your project &amp;nbsp;and you use it
exclusively for that purpose (as opposed to umbracoRedirectId which
works wrong according to its name and can't be changed). Otherwise
it's a built-in&amp;nbsp;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://www.thefreedictionary.com/doohickey&quot;&gt;doohickey&lt;/a&gt;&amp;nbsp;that
defies all doohickieness: it's pre-empted and readily employed
(comes used by default in XSLT templates and package scripts) and
there's nothing ad hoc about it (it might not even relate to your
project yet is ubiquitous said scripts).&lt;/p&gt;

&lt;p&gt;You might just add the property. The&amp;nbsp;&lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/wiki/reference/umbraco-best-practices/umbraconavihide&quot;&gt;
documentation&lt;/a&gt;&amp;nbsp;goes like this.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &quot;umbracoNaviHide&quot; is an Umbraco&amp;nbsp;convention for marking
nodes which should not show up in a navigational context.&lt;br /&gt;
 It is normally added (or inherited) on every Document Type with a
Data Type of &quot;True/false&quot;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem here is that each of those umpteen menus are
different, they do different things, and it only takes two of the
to become evident. Suppose a top-level navigation lists each main
site section with drop-downs for categories and a footer menu to
list all children of a section that isn't a category. By setting
umbracoNaviHide to true for any set of elements you successfully
hide them from one navigation, with the consequence of them
disappearing from where they should be.&lt;/p&gt;

&lt;p&gt;You can get around this &quot;adverse&quot; behaviour by treading
carefully, using it specifically, sparingly, crudely, or however.
But this kind of conventional (or pseudo-) property naturally
doesn't lend itself to generic, pluggable XSLTs or Macros
either.&lt;/p&gt;

&lt;p&gt;My point is that it goes against our modern tendency to make
things in terms of code self descriptive and obvious and
maintainable, it has the potential to confuse yourself and others,
and if the rest of your Document Type is aptly, bespokely
structured, then why not your navigation visibility
indicators?&amp;nbsp;Establish lasting conventions, reduce redundancy
and confliction.&lt;/p&gt;

&lt;p&gt;It's the difference between something like this...&lt;/p&gt;

&lt;pre&gt;
if (Model.showInMainNavigation) {&lt;br /&gt;
}&lt;br /&gt;
if (Model.showInFooterNavigation) {&lt;br /&gt;
}&amp;nbsp;
&lt;/pre&gt;

&lt;p&gt;And an ever growing something like this...&lt;/p&gt;

&lt;pre&gt;
if (!Model.umbracoNaviHide &amp;amp;&amp;amp;
&amp;nbsp; // omit certain types because this is the main nav!!!1!!11!!!
&amp;nbsp; (Model.NodeTypeAlias == &quot;HiddenEveryPlaceDocumentType&quot; ||
&amp;nbsp; Model.NodeTypeAlias == &quot;ExceptionalDocumentType&quot; ||
&amp;nbsp; Model.NodeTypeAlias == &quot;WasNotExceptionalButNowIsDocumentType&quot;)) {&lt;br /&gt;
}&amp;nbsp;
&lt;/pre&gt;

&lt;p&gt;&lt;sub&gt;&lt;sup&gt;1&lt;/sup&gt;&amp;nbsp;If you just happened to use the 'umbraco'
prefix, unwittingly use incorrect types and / or&amp;nbsp; &lt;a rel=&quot;nofollow&quot;
 target=&quot;_blank&quot; href=&quot;http://our.umbraco.org/wiki/reference/umbraco-best-practices/umbracoredirect&quot;&gt;
applied it to the wrong Document type&lt;/a&gt;, all hell could break
loose.&lt;/sub&gt;&lt;br /&gt;
 &lt;sub&gt;&lt;sup&gt;2&lt;/sup&gt;&amp;nbsp;Fortunately we're no longer so largely
character-limited, but how long do you want these names to be and
how much to be meaningful?&lt;/sub&gt;&lt;/p&gt;</description>
         <guid isPermaLink="false">http://www.eitherxor.com/blog/the-umbraconavihide-deterrent/</guid>
         <pubDate>Thu, 05 Jul 2012 17:55:22 +0000</pubDate>
      </item>
   </channel>
</rss>
<!-- fe3.pipes.ch1.yahoo.com uncompressed/chunked Sun Nov 25 06:10:19 UTC 2012 -->
