<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0"><channel><title>MemoryStream(ref NicksBrain);</title><link>http://www.themayneissue.com:80/memorystream</link><description>MemoryStream(ref NicksBrain);</description><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TheMayneIssue-MemoryStream" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="themayneissue-memorystream" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Why do I Contribute to Open Source?</title><link>http://www.themayneissue.com:80/memorystream/why-do-i-contribute-to-open-source</link><description>&lt;p&gt;&lt;b id="internal-source-marker_0.5491686426103115" style="font-family: 'Times New Roman'; font-size: medium; font-weight: normal;"&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;Learning when you are younger is much more structured than learning when you leave School. When you are younger you are set a syllabus and told to learn that, if you want to branch out and learn your own stuff as well, thats okay, but you have structure. Your only job is to sit in a classroom and learn up until you leave the system.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;Learning when you leave school/university is no nolong a two way task, i.e. A teacher standing at the front of the room teaching you, but rather someone who gets paid to not only do their job, but also to help you get up to speed. Learning gets harder as you gain more responsibility.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;Now you maybe wondering where I am going with this, so let me clear this up. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;Back in 2009 I picked up a little known project called Orchard, at the time my boss was attempting to demo DotNetNuke to use - which in turn made the team look sharply for an alternative, we then found Oxite... We did not adopt this because about 2 hours later we found that had been superseded by Orchard.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;At this point I was very wary, I was not always one to take risks with beta or alpha software, let alone code drops, but this time was different, I don't know why. So I downloaded the source, kicked it up and got it running - I then ported a ASP.Net v1.0 site in to it in about 3 hours - A site that had taken us 3 months to build was now sat in Orchard.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;This blew both my mind but the teams mind.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;I had to find out more! - So I decided to build something for it, this started out to be a Profile module, which looking back was a bit of a joke but was fun to write. I remember talking to Bertrand and Lou on the MSDN forum about what should be in it, so on and so forth... I am sure they were thinking, who is this guy? (I am assuming one of them still is)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;This led me on to build a BlogML module, not because I had a use for it, but just because I wanted to learn something new. I want to make sure people realize, I have NEVER used this module from what I remember, I have had no use for it.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;Doing all of this made me more comfortable to take chances, jumping of to the tip of the Entity Framework and introducing Beta products to the team, or even stuff like writing the implementation of WebApi into Orchard for someone on the Forum, again I had no use for it at the time, I gained a desire/thirst to learn.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;"&gt;So back to why do I contribute?&lt;/span&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt; - I started this story about how you learn when you are a child, and how it gets harder as you get older. I contribute because for me, I learn all the time, I can choose what I learn and this helps me to relate that directly back to my work, my 9-5.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;No one is ever at the tip of everything, but to be at the tip of something for just a moment in such a face paced sector as technology is something that is cool. 9-5 jobs rarely offer you that opportunity.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;One cool thing that I have got out of contributing, which was an unforeseen side effect was to meet people from all over the world, all of which have been very cool.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 15px; font-family: Arial; background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"&gt;Nick&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Mon, 19 Nov 2012 21:39:22 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/why-do-i-contribute-to-open-source</guid></item><item><title>Orchard Forums: Where are we?</title><link>http://www.themayneissue.com:80/memorystream/orchard-forums-ndash-where-are-we</link><description>&lt;p&gt;One of the most requested features on the Orchard User Voice is a Forum module. Internet forums in the conventional sense is just a discussion site where people can post a question, receive an answer or merely to strike up a conversation.&lt;/p&gt;
&lt;p&gt;Forums have a large and varied vocabulary which can be very confusing to a user, i.e. a Thread can be referred to as a Topic, A Post maybe a Reply, so on a so forth. For the Orchard Forums module I have used this vocabulary.&lt;/p&gt;
&lt;p&gt;- Forum: A board to start your journey i.e. Asking a question or striking up a conversation. These contain a collection of Threads.&lt;/p&gt;
&lt;p&gt;- Thread: A collection of Posts.&lt;/p&gt;
&lt;p&gt;- Post: A user submitted message.&lt;/p&gt;
&lt;p&gt;I am going to walk through below how to get started.. but first you need to clone the Repo at &lt;a href="http://orchardforums.codeplex.com"&gt;orchardforums.codeplex.com&lt;/a&gt; (Make sure the Directory name is NGM.Forum)&lt;/p&gt;
&lt;h1&gt;Enable Feature&lt;/h1&gt;
&lt;p&gt;To start seeing the Forums module you need to enable the Forums feature&amp;hellip; &lt;span style="color: #ff0000;" color="#ff0000"&gt;FYI: This demo is done in ThemeMachine and is not styled.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_2.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb.png" border="0" height="129" width="342" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Create Forum&lt;/h1&gt;
&lt;p&gt;Once installed there will be a Forums button on the Admin menu. Click that to create a Forum. &lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_26.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_12.png" border="0" height="31" width="152" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now lets create a new forum. In my demo below I am creating a Discussions Forum.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_4.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_1.png" border="0" height="507" width="444" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hit save and Vola&amp;hellip; You have just created a Discussions Forum. (Obviously with no threads&amp;hellip;)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_6.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_2.png" border="0" height="127" width="244" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Going to the permalink that has been generated through the AutoRoutePart&amp;hellip; in this case &lt;a href="http://localhost:30320/OrchardLocal/discussions"&gt;http://localhost:30320/OrchardLocal/discussions&lt;/a&gt; you will find your self at the UI for the users to interact with.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_8.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_3.png" border="0" height="136" width="367" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Create Thread&lt;/h1&gt;
&lt;p&gt;Now let now create a Thread.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_10.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_4.png" border="0" height="477" width="489" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are a few things to note on this page.&lt;/p&gt;
&lt;p&gt;1. Categories and Tags. These are delivered though the Taxonomies module.&lt;/p&gt;
&lt;p&gt;2. The Permalink and Home page button. These are there by default when you create/edit a Thread. You can remove them with the Placement.info file in your theme.&lt;/p&gt;
&lt;p&gt;3. Where is my Rich Text Editor? I am NOT using the BodyPart for Posts. Instead I have implemented my own version of what BodyPart does because it does not cater to the needs to anything outside of the Admin Screens.. i.e. Media Management. So How can I have a Rich Text Editor? Implement one.. Just copy the code from TinyMCE. I have added a flavor to the part so creating your own is easy.&lt;/p&gt;
&lt;p&gt;Now hit Save&amp;hellip;.&lt;/p&gt;
&lt;h1&gt;Moderation&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_12.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_5.png" border="0" height="29" width="338" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;By default all users are moderated. This is done two fold.&lt;/p&gt;
&lt;p&gt;1. A Part called UserForumPart: This is a part that is attached directly to the user.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_14.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_6.png" border="0" height="325" width="251" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. ApproveUnapprove Permission: Allows a user in a role to approve or un-approve Posts and threads.&lt;/p&gt;
&lt;p&gt;To Approve or un-approve Posts and Threads you need access to the admin screens, so head to your admin screens and click on &amp;lsquo;&lt;strong&gt;Manage Forum&lt;/strong&gt;&amp;rsquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_16.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_7.png" border="0" height="227" width="529" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here you have a Thread awaiting approval. A Thread or Post can live in 3 states.&lt;/p&gt;
&lt;p&gt;1. Approved: Content is okay. &lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_18.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_8.png" border="0" height="35" width="117" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Awaiting Approval: Content needs to be reviewed&lt;/p&gt;
&lt;p&gt;3. Not Approved: Content is Rejected. &lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_20.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_9.png" border="0" height="35" width="126" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this case I will approve. You can now see your thread on the front screen.&lt;/p&gt;
&lt;h1&gt;View / Reply Post&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_22.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_10.png" border="0" height="603" width="423" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A few things to note from the screen above.&lt;/p&gt;
&lt;p&gt;1. You have the taxonomies being displayed.&lt;/p&gt;
&lt;p&gt;2. Quick reply. This is the edit box displayed. The Forums module DOES support multithreaded posts, but have not implemented from a UI perspective.&lt;/p&gt;
&lt;p&gt;Okay so that is the end of this demo. Please clone the Repo at &lt;a href="http://orchardforums.codeplex.com"&gt;orchardforums.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But Nick, Functionality is starting to come together&amp;hellip; but where is the theming!?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hold on there busta!, So I have been speaking with Ryan Drew Burnett around the theming side of things, and he has produced the first mock up of a themed Orchard Forums&amp;hellip; Check it out! (&lt;strong&gt;I think is look great!&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_24.png"&gt;&lt;img title="image" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Orchard-Forums--Where-are-we_EC82/image_thumb_11.png" border="0" height="936" width="866" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;CORRECTION: Fixing naming of folder form NGM.Forums to NGM.Forum (Thanks Volody)&lt;/p&gt;</description><pubDate>Tue, 06 Nov 2012 15:25:11 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/orchard-forums-ndash-where-are-we</guid></item><item><title>AppFabric Caching in Orchard CMS</title><link>http://www.themayneissue.com:80/memorystream/appfabric-caching-in-orchard-cms</link><description>&lt;p&gt;A while ago I was commissioned to write a AppFabric Caching module for Onestop Internet Ltd, who have subsequently generously donated the module to the wider community. &lt;/p&gt; &lt;p&gt;Well what is AppFabric Caching? And how does it help me?&lt;/p&gt; &lt;p&gt;AppFabric Caching is a distributed caching mechanism that allows multiple web applications to use the same cache, this is different to how most websites currently work, even Orchard by default maintains its own cache within its separate website instances. With AppFabric, all website instances maintain and contribute to the &lt;strong&gt;same cache&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;If you are at all interested in the Concepts and Architecture of AppFabric please visit &lt;a href="http://msdn.microsoft.com/en-us/library/ff383813%28v=azure.10%29.aspx"&gt;Concepts and Architecture (Windows Server AppFabric Caching)&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Implementation&lt;/h2&gt; &lt;p&gt;In order to implement AppFabric caching please follow these steps.&lt;/p&gt; &lt;p&gt;1. Install AppFabric Cache Server V1.1 (&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=27115"&gt;Microsoft AppFabric 1.1 for Windows Server&lt;/a&gt;) It is VERY important that it is this version and NOT V1.0&lt;/p&gt; &lt;p&gt;2. Once installed you will have a powershell command in your start menu…&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/AppFabric-Caching-in-Orchard-CMS_9E76/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 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.themayneissue.com/Media/Default/Windows-Live-Writer/AppFabric-Caching-in-Orchard-CMS_9E76/image_thumb.png" width="244" height="48"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Open this up and run the following command&lt;/p&gt; &lt;p&gt;&lt;em&gt;Update-CacheHostAllowedVersions 3 3 3 3&lt;/em&gt;&lt;/p&gt; &lt;p&gt;This will update you cache server to the right version of the DLLs you are going to use, I would the restart your cache cluster (Restart-CacheCluster)&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/AppFabric-Caching-in-Orchard-CMS_9E76/image_4.png"&gt;&lt;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.themayneissue.com/Media/Default/Windows-Live-Writer/AppFabric-Caching-in-Orchard-CMS_9E76/image_thumb_1.png" width="506" height="257"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;3. Download the AppFabric Module instance to your modules directory. Currently here (&lt;a href="https://orchardappfabric.codeplex.com"&gt;https://orchardappfabric.codeplex.com&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;4. Open up you Web.Config file in Orchard.Web and add the following configuration…&lt;/p&gt; &lt;p&gt;Add this to your &amp;lt;ConfigSections&amp;gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&amp;lt;section 
        name=&lt;span class="str"&gt;"dataCacheClients"&lt;/span&gt; 
        type=&lt;span class="str"&gt;"Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core"&lt;/span&gt; 
        allowLocation=&lt;span class="str"&gt;"true"&lt;/span&gt; 
        allowDefinition=&lt;span class="str"&gt;"Everywhere"&lt;/span&gt;/&amp;gt;&lt;/pre&gt;
&lt;p&gt;Next add this anywhere in your config file.&lt;/p&gt;&lt;pre class="csharpcode"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dataCacheClients&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dataCacheClient&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="default"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hosts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;host&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="NickMayne-PC"&lt;/span&gt; &lt;span class="attr"&gt;cachePort&lt;/span&gt;&lt;span class="kwrd"&gt;="22233"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hosts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;securityProperties&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="None"&lt;/span&gt; &lt;span class="attr"&gt;protectionLevel&lt;/span&gt;&lt;span class="kwrd"&gt;="None"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;&amp;lt;!--&amp;lt;messageSecurity&lt;/span&gt;
&lt;span class="rem"&gt;          authorizationInfo="Your authorization token will be here."&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;        &amp;lt;/messageSecurity&amp;gt;--&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;securityProperties&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dataCacheClient&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dataCacheClients&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.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;A few things to note at this point. &lt;/p&gt;
&lt;p&gt;Your &lt;strong&gt;dataCacheClient name&lt;/strong&gt; is the &lt;strong&gt;name of your Tenant (default should ALWAYS be left lowercase)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Your &lt;strong&gt;host name&lt;/strong&gt; and c&lt;strong&gt;achePort&lt;/strong&gt; are the same as the one your screen shot above, if you have forgotten, jump on to powershell and type Get-Cache&lt;/p&gt;
&lt;p&gt;The SecurityProperties attribute MUST be in there. I have set in to non in powershell, but this is down to the individual configuration you have set. – &lt;strong&gt;If this does not match, appfabric will fall over in a mess.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5. Enable AppFabric module and you are good to go.&lt;/p&gt;
&lt;h3&gt;Some important URLs&lt;/h3&gt;
&lt;p&gt;Once you have everything working, you can view some stuff in Orchard…&lt;/p&gt;
&lt;p&gt;View your Cache: &lt;a title="http://localhost:30320/OrchardLocal/Appfabric/Index" href="http://localhost:30320/OrchardLocal/Appfabric/Index"&gt;http://localhost:30320/OrchardLocal/Appfabric/Index&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clear Cache for Tenant: &lt;a href="http://localhost:30320/OrchardLocal/Appfabric/Clear"&gt;http://localhost:30320/OrchardLocal/Appfabric/Clear&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Constraining the AppFabric Module&lt;/h3&gt;
&lt;p&gt;Out of the box the AppFabric Module attempts to cache everything within distributed cache apart from ShapeDescriptor, ShapeTable and ContentTypeDefinition.&lt;/p&gt;
&lt;p&gt;If you want your object cached only locally and not in AppFabric, then create an implementation of ICacheStoreStrategy.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/AppFabric-Caching-in-Orchard-CMS_9E76/image_8.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/AppFabric-Caching-in-Orchard-CMS_9E76/image_thumb_3.png" width="523" height="339"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Returning true/false will force local cache to take over on that particular object.&lt;/p&gt;
&lt;h2&gt;Challenges faced?&lt;/h2&gt;
&lt;h3&gt;Serialization issues: &lt;/h3&gt;
&lt;p&gt;By default AppFabric Serializes objects using the DataContactSerializer, which means that you need a couple of things:&lt;br&gt;- Default Constructor&lt;br&gt;- Mark entities' with the [Serialization] attribute&lt;/p&gt;
&lt;p&gt;This posed a major problem as this was a MASSIVE constraint, the whole point of Orchard is to allow people to create objects and cache them and not have to worry about external stuff like “how does it cache?” but just know that some how, it does.&lt;/p&gt;
&lt;p&gt;To solve this issue I created a wrapper object and marked that as Serializable: (code does need to be cleaned up)&lt;/p&gt;&lt;pre class="csharpcode"&gt;    [Serializable]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; EntryWrapper&amp;lt;T&amp;gt; : ISerializable {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; Lazy&amp;lt;T&amp;gt; _value;

        [XmlIgnore]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; T Value {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _value.Value; }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; EntryWrapper(T &lt;span class="kwrd"&gt;value&lt;/span&gt;) {
            _value = &lt;span class="kwrd"&gt;new&lt;/span&gt; Lazy&amp;lt;T&amp;gt;(() =&amp;gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;);
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; EntryWrapper(SerializationInfo info, StreamingContext context) {
            var settings = &lt;span class="kwrd"&gt;new&lt;/span&gt; JsonSerializerSettings {
                Converters = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;JsonConverter&amp;gt; {&lt;span class="kwrd"&gt;new&lt;/span&gt; MultipleConstructorsJsonConverter(), &lt;span class="kwrd"&gt;new&lt;/span&gt; InterfaceJsonConverter()},
                TypeNameHandling = TypeNameHandling.All,
                ContractResolver = &lt;span class="kwrd"&gt;new&lt;/span&gt; DefaultContractResolver {
                    DefaultMembersSearchFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance
                },
                ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
                ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
            };
            
            _value = &lt;span class="kwrd"&gt;new&lt;/span&gt; Lazy&amp;lt;T&amp;gt;(() =&amp;gt; JsonConvert.DeserializeObject&amp;lt;T&amp;gt;(info.GetString(&lt;span class="str"&gt;"JsonValue"&lt;/span&gt;), settings));
        }

        [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
        &lt;span class="kwrd"&gt;void&lt;/span&gt; ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
            var settings = &lt;span class="kwrd"&gt;new&lt;/span&gt; JsonSerializerSettings {
                TypeNameHandling = TypeNameHandling.All,
                ContractResolver = &lt;span class="kwrd"&gt;new&lt;/span&gt; DefaultContractResolver {
                    DefaultMembersSearchFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance
                },
                ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
                ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
            };
            &lt;span class="rem"&gt;// Do JSON serialization of the underlying object here&lt;/span&gt;
            var json = JsonConvert.SerializeObject(Value, settings);
            info.AddValue(&lt;span class="str"&gt;"JsonValue"&lt;/span&gt;, json);
        }
    }&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.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;I then implemented Json.Net to Serialize/De-serialize said object, this works perfectly fine in the majority of all cases, except when that object as multiple constructors, or &amp;lt;T&amp;gt; was an interface, for this I created some JsonConverters. I am not posting the code here, but you can view them over on codeplex &lt;a title="https://orchardappfabric.codeplex.com" href="https://orchardappfabric.codeplex.com"&gt;https://orchardappfabric.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Case Sensitive Cache Names&lt;/h3&gt;
&lt;p&gt;One thing I found out that wasted ALOT of time was that cache names are case sensitive, you can have two caches, one called “Default” and another called “default” (note the lower and upper case ‘Dd’). By default AppFabric has the later out of the box, which then ties to Orchards Default tenant which cannot be renamed.&lt;/p&gt;
&lt;p&gt;I therefore imposed a constraint on the cache names ‘Default’ by always setting it to lowercase.&lt;/p&gt;&lt;pre class="csharpcode"&gt;var cacheName = _shellSettings.Name;
&lt;span class="kwrd"&gt;if&lt;/span&gt; (cacheName.Equals(&lt;span class="str"&gt;"default"&lt;/span&gt;, StringComparison.OrdinalIgnoreCase))
    cacheName = cacheName.ToLowerInvariant();&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.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 all other cases, the cache name is the the one specified within your web.config, which should also map to your Tenant.&lt;/p&gt;
&lt;h2&gt;What’s next?&lt;/h2&gt;
&lt;p&gt;- Multi Datacentre Support&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So please give it a go, and let me know how your get on. If you have any suggestions/comments/feature etc, let me know and I will do my best to include them.&lt;/p&gt;
&lt;p&gt;Nick&lt;/p&gt;</description><pubDate>Sun, 17 Jun 2012 21:12:49 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/appfabric-caching-in-orchard-cms</guid></item><item><title>Hooking up MSTest to Specflow</title><link>http://www.themayneissue.com:80/memorystream/hooking-up-mstest-to-specflow</link><description>&lt;div class="line number1 index0 alt2"&gt;Open up the App.config file in your Test project and add&lt;/div&gt;
&lt;div class="line number1 index0 alt2"&gt;&lt;/div&gt;
&lt;div class="line number1 index0 alt2"&gt;&lt;code class="xml spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;unitTestProvider&lt;/code&gt; &lt;code class="xml color1"&gt;name&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"MsTest"&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number1 index0 alt2"&gt;&lt;/div&gt;
&lt;div class="line number1 index0 alt2"&gt;to the specFlow Element. The resulting XML should look like this...&lt;/div&gt;
&lt;div class="line number1 index0 alt2"&gt;&lt;/div&gt;
&lt;div class="container"&gt;
&lt;div class="line number1 index0 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;?&lt;/code&gt;&lt;code class="xml keyword"&gt;xml&lt;/code&gt; &lt;code class="xml color1"&gt;version&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"1.0"&lt;/code&gt; &lt;code class="xml color1"&gt;encoding&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"utf-8"&lt;/code&gt; &lt;code class="xml plain"&gt;?&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number2 index1 alt1"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;configuration&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number3 index2 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;configSections&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number4 index3 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;section&lt;/code&gt; &lt;code class="xml color1"&gt;name&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"specFlow"&lt;/code&gt; &lt;code class="xml color1"&gt;type&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow"&lt;/code&gt;&lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number5 index4 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;configSections&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number6 index5 alt1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class="line number7 index6 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;specFlow&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number8 index7 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;unitTestProvider&lt;/code&gt; &lt;code class="xml color1"&gt;name&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"MsTest"&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number9 index8 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;specFlow&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number10 index9 alt1"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;configuration&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Next step is to regenerate your specflow featuers to use the new MSTest stuff... and Job Done!&lt;/p&gt;</description><pubDate>Wed, 25 Apr 2012 09:18:23 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/hooking-up-mstest-to-specflow</guid></item><item><title>Cannot set a value on node type 'Element'</title><link>http://www.themayneissue.com:80/memorystream/cannot-set-a-value-on-node-type-element</link><description>&lt;p&gt;Dealing with XML can be a pain at the best of times, but running in to this error can be a pain… Why does it happen and what’s the fix?&lt;/p&gt; &lt;p&gt;Why? You &lt;strong&gt;cant&lt;/strong&gt; map to the value property on Element Nodes… You may have code that looks like this…&lt;/p&gt; &lt;p&gt;string value = “foo”;&lt;br&gt;string value = “bar”;&lt;br&gt;var sessionNode = xmlDocument.CreateElement(name);&lt;br&gt;sessionNode.Value = value; // The problem happens here…&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Change to InnerText&lt;/p&gt; &lt;p&gt;string value = “foo”;&lt;br&gt;string value = “bar”;&lt;br&gt;var sessionNode = xmlDocument.CreateElement(name);&lt;br&gt;sessionNode.InnerText = value; // All Working now :)&lt;/p&gt; &lt;p&gt;Hope this helps someone. Nick&lt;/p&gt;</description><pubDate>Sun, 15 Apr 2012 13:33:27 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/cannot-set-a-value-on-node-type-element</guid></item><item><title>2011: My year in review</title><link>http://www.themayneissue.com:80/memorystream/2011-my-year-in-review</link><description>&lt;p&gt;Wow, what a year, lots done, lots learnt, lots left to do… Here what my year has been like… (I will keep updating it as I remember exactly what ive done, long year!)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h1&gt;ITV&lt;/h1&gt; &lt;p&gt;So lots have happened at ITV in the last year, to sum it up I took lead on delivering the .net solution for the ITV pay project, this was a huge deal for me as it is one of ITVs biggest projects, so for me to take lead on delivering it was big – but I couldn't have done it with out a great team behind me, and the fruits of our labour paid off when we saw pay content playing back thru the ITV player two days before Christmas, fantastic win.&lt;/p&gt; &lt;p&gt;Another big project for the .net team going forward is delivering a new pipeline for some new projects coming along, which is an exciting greenfield project, which means we start from the ground up.&lt;/p&gt; &lt;p&gt;Testing has also taken centre stage this year, I started teaching Feature File sessions which were fun and have been a massive driver behind pushing them to the rest of the business, but I have been so busy with my work in and out of ITV its been hard to fit them in, so something I must improve upon.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h1&gt;Mayneframe Computing&lt;/h1&gt; &lt;p&gt;So in the later half of 2011 I started my own company called Mayneframe Computing (stole it from my dad) – I am still working out the details of where I want to take it, but its in a good position to deliver product in 2012.&lt;/p&gt; &lt;p&gt;Around the same time I landed a contract with a company in LA working on Orchard (more below), one of the sites is already live (&lt;a title="http://www.spyoptic.com/" href="http://www.spyoptic.com/"&gt;http://www.spyoptic.com/&lt;/a&gt;) – with a few other ones to follow! – On top of that I am flying over to LA in a week to see them!! So stoked!!&lt;/p&gt; &lt;p&gt;I have another start-up in the fire with some friends delivering agile coaching, though this is just an idea at the moment… more about in the coming months!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h1&gt;Orchard Project&lt;/h1&gt; &lt;p&gt;This year has been big in terms of Orchard for me – I have worked hard on delivering features to a brand new platform that is still being proved in the commercial sense. So what have I delivered this year?&lt;/p&gt; &lt;p&gt;(ripped from my CV)&lt;/p&gt; &lt;p&gt;&lt;b&gt;Orchard Open Authentication&lt;/b&gt; – The aim of this project was to provide multiple authentication mechanisms to Orchard CMS. This project leveraged multiple 3&lt;sup&gt;rd&lt;/sup&gt; party project including DotNetOpenAuth, Linq2Twitter, Facebook C# SDK, and Microsoft Connect (Live ID). &lt;a href="http://orchardopenauth.codeplex.com/"&gt;http://orchardopenauth.codeplex.com/&lt;/a&gt; &lt;p&gt;&lt;b&gt;Orchard Forums&lt;/b&gt; – This project provides a forums module to the Orchard CMS stack. &lt;a href="http://orchardforums.codeplex.com/"&gt;http://orchardforums.codeplex.com/&lt;/a&gt; &lt;p&gt;(this was not)&lt;/p&gt; &lt;p&gt;In September there was a community election for the &lt;strong&gt;Orchard Steering Committee&lt;/strong&gt;, and I was one of the five that got elected (&lt;a title="http://www.orchardproject.net/about" href="http://www.orchardproject.net/about"&gt;http://www.orchardproject.net/about&lt;/a&gt;) which for me shows that my hard work has paid off, and its something I have been really proud of.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h1&gt;Other highlights&lt;/h1&gt; &lt;p&gt;- In May we went to Florida with some friends and saw others whist out there, Gary and Kim we love you guys!&lt;/p&gt; &lt;p&gt;- Discovering a club with a hot-tub!!, and seeing Twickenham bridge at 5am.&lt;/p&gt; &lt;p&gt;- Passed my Windows Forms Application Development Microsoft Exam.&lt;/p&gt; &lt;p&gt;- Met my target for saving for the year.&lt;/p&gt; &lt;p&gt;- Also been with Pens for 8 years. (This was added by request of the girlfriend!)&lt;/p&gt;</description><pubDate>Sun, 01 Jan 2012 16:11:39 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/2011-my-year-in-review</guid></item><item><title>How to get your Awesome Dev workspace for Orchard CMS up and running 101</title><link>http://www.themayneissue.com:80/memorystream/how-to-get-your-awesome-dev-workspace-for-orchard-cms-up-and-running-101</link><description>&lt;p&gt;After watching twitter for the last couple of days, and with the additional of a couple other comments, I have decided to write this post.&lt;/p&gt; &lt;p&gt;What does this post assume… 2 things, You have Mercurial (+ Tortoise HG (&lt;a href="http://tortoisehg.bitbucket.org/"&gt;Download Here&lt;/a&gt;)) and Visual Studio 2010.&lt;/p&gt; &lt;p&gt;Lets get going.&lt;/p&gt; &lt;p&gt;1. Create a new folder structure that resembles this.. D:\BlogPosts\Orchard&lt;/p&gt; &lt;p&gt;2. Right click on the Orchard Folder navigate via the sub menus to TortoiseHg –&amp;gt; Clone..&lt;/p&gt; &lt;p&gt;3. Details are..&lt;/p&gt; &lt;p&gt;Source: &lt;a title="https://hg01.codeplex.com/orchard" href="https://hg01.codeplex.com/orchard"&gt;https://hg01.codeplex.com/orchard&lt;/a&gt;&lt;br&gt;Destination: D:\BlogPosts\Orchard&lt;/p&gt; &lt;p&gt;Hit Clone (This will take a while so make a cup of tea :))&lt;/p&gt; &lt;p&gt;4. Navigate to D:\BlogPosts\Orchard\src\ and open up Orchard.sln in Visual Studio&lt;/p&gt; &lt;p&gt;5. Hit F5 in Visual Studio&lt;/p&gt; &lt;p&gt;6. Welcome to Orchard.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Time to create your own area to allow easy maintenance.&lt;/p&gt; &lt;p&gt;1. Copy and paste Orchard.sln – rename Copy of Orchard.sln to MyNewAwesomeOrchardInstance.sln – Why do this? Its important to allow you to decrease merge pain from the main repo further down the line&lt;/p&gt; &lt;p&gt;2. Check in to your new repo thru the Tortoise Workbench - Always use your new solution.&lt;/p&gt;</description><pubDate>Fri, 09 Dec 2011 11:35:16 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/how-to-get-your-awesome-dev-workspace-for-orchard-cms-up-and-running-101</guid></item><item><title>Latest Orchard Forum Mock-Ups</title><link>http://www.themayneissue.com:80/memorystream/latest-orchard-forum-mock-ups</link><description>&lt;p&gt;I thought a quick update to the community as to where I am with an Orchard Forum Module. I have not come too much further from my first post in terms of features (&lt;a href="http://www.themayneissue.com/memorystream/orchard-forums..-basic-functionality"&gt;http://www.themayneissue.com/memorystream/orchard-forums..-basic-functionality&lt;/a&gt;) but instead I have worked on more core issues rather than bulking out functionality as Orchard is about building modules right? so functionality can always be added later on.&lt;/p&gt; &lt;h3&gt;So what do I have that’s new from the first post?&lt;/h3&gt; &lt;p&gt;1. Enhanced Security – Still a work in progress.&lt;br&gt;2. Basic Styling – (Screenshots below).&lt;br&gt;3. Ability to Close a Thread or Forum.&lt;br&gt;4. Ability to mark a Thread as Sticky.&lt;br&gt;5. Ability to mark a Thread as a ‘Question’ or ‘Discussion’&amp;nbsp; - functionality to mark a post as a question is not there yet.&lt;br&gt;6. Show the Latest Post at both the Forum level and the Thread level.&lt;/p&gt; &lt;p&gt;Okay so here are some mock-ups. Feedback welcome!! (FYI Code: &lt;a title="http://orchardforums.codeplex.com/" href="http://orchardforums.codeplex.com/"&gt;http://orchardforums.codeplex.com/&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;/Forums&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;A list of all forums&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Latest-Orchard-Forum-Mock-ups_12E91/image_2.png"&gt;&lt;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.themayneissue.com/Media/Default/Windows-Live-Writer/Latest-Orchard-Forum-Mock-ups_12E91/image_thumb.png" width="602" height="350"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;/discussions&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;A list of threads under a forum.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Latest-Orchard-Forum-Mock-ups_12E91/image_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Latest-Orchard-Forum-Mock-ups_12E91/image_thumb_1.png" width="604" height="351"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;/discussions/is-orchard-better-than-drupal&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;A list of Posts under a thread&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Latest-Orchard-Forum-Mock-ups_12E91/image_6.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Latest-Orchard-Forum-Mock-ups_12E91/image_thumb_2.png" width="609" height="430"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;So how do you mark a Thread as Sticky or Closed?&lt;/h3&gt; &lt;p&gt;You need one of the two permissions &lt;strong&gt;ManageStickyThread&lt;/strong&gt; or &lt;strong&gt;ManageOpenCloseThread – &lt;/strong&gt;If you have one of these permissions then when you Create/Edit a thread then you will be able to see these options.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Latest-Orchard-Forum-Mock-ups_12E91/image_8.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.themayneissue.com/Media/Default/Windows-Live-Writer/Latest-Orchard-Forum-Mock-ups_12E91/image_thumb_3.png" width="609" height="319"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The &lt;strong&gt;Is Closed&lt;/strong&gt; marker stops replies to Posts within the individual Thread&lt;br&gt;The &lt;strong&gt;Is Sticky&lt;/strong&gt; marker but that thread at the top of the list of threads.&lt;/p&gt; &lt;h3&gt;Where am I headed next?&lt;/h3&gt; &lt;p&gt;1. Flag a post/thread for moderation – this includes a admin screen.&lt;br&gt;2. Move a thread to a different Forum&lt;/p&gt; &lt;h3&gt;What am I thinking about?&lt;/h3&gt; &lt;p&gt;1. Adding a category to a forum, so you can list Forums by category.&lt;br&gt;2. Easier method to reply to a post&lt;br&gt;3. Notes as to why a moderator would ‘Close’ or take action i.e. move thread – more information back to user.&lt;/p&gt; &lt;p&gt;Let me know what you think – download the code and play. &lt;a title="http://orchardforums.codeplex.com/" href="http://orchardforums.codeplex.com/"&gt;http://orchardforums.codeplex.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Nick&lt;/p&gt;</description><pubDate>Wed, 03 Aug 2011 20:57:42 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/latest-orchard-forum-mock-ups</guid></item><item><title>Your development team is slow.. What can you do?</title><link>http://www.themayneissue.com:80/memorystream/your-development-team-is-slow-what-can-i-do</link><description>&lt;p&gt;So you have a development team, yet turn around on a product is slow? You have heard the words agile and scrum, but there must be more? Here are a couple of areas that a development team should work on to not only increase the turn around of a end product, but also increase the quality of said product.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Testing&lt;/h2&gt;
&lt;p&gt;Get your developers writing tests.. get your BA&amp;rsquo;s, QA&amp;rsquo;s writing tests&amp;hellip; get everyone evolved, if you do it right, it will be fun&amp;hellip; if you do it wrong you risk alienating people&amp;hellip;&lt;/p&gt;
&lt;p&gt;BA&amp;rsquo;s and QA&amp;rsquo;s are the people who see the 10,000 foot view of the system and the people who ultimately test said system &amp;ndash; get them to write your feature files. But what are feature files? A feature file is the living documentation of a system writing based on the Gherkin language (&lt;a title="https://github.com/cucumber/cucumber/wiki" href="https://github.com/cucumber/cucumber/wiki"&gt;https://github.com/cucumber/cucumber/wiki&lt;/a&gt;), the chances are that your BA&amp;rsquo;s have be writing something similar all along and didn't even know it&amp;hellip; &lt;em&gt;get them involved&lt;/em&gt;, and once they have completed a feature file, get a developer to implement it and &lt;strong&gt;demo the outcome to the business &lt;/strong&gt;this way they will feel involved with the system, and make them feel like they have contributed to the code base.&lt;/p&gt;
&lt;p&gt;Remember I said that feature files were the 10,000 foot view of the system? Well if the feature files works&amp;hellip; then the system should too? right?&lt;/p&gt;
&lt;p&gt;So now to developers.. Get them doing TDD &amp;ndash; If you think that writing a test doubles your work load &amp;ndash; you may initially be correct, but in the long run you are completely and utterly wrong. TDD will increase code quality if done right and decrease mistakes and debugging of developers (who really wants to be a debugging developer right?) &amp;ndash; If I have a test, I hardly ever need to debug code anymore because I know what my tests are doing, and because I have a well driven out design the code is easy to read. So here is one big fact &lt;strong&gt;you will have more test code than actual implementation code in your system &amp;ndash; &lt;/strong&gt;what does this mean? It means that for one line of business logic written, there is usually about 10 lines of test code written &amp;ndash; this is a good thing, not a bad thing.&lt;/p&gt;
&lt;p&gt;TDD is a discipline &amp;ndash; Its hard to start, its hard to sell, its highly addictive once you start.&lt;/p&gt;
&lt;p&gt;Have you ever heard the saying that you should always cover your back? testing, using feature files and writing unit tests are the perfect way for a development team to cover their backs from the business. Stay safe I say and write a test first.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Continuous integration&lt;/h2&gt;
&lt;p&gt;You cannot underestimate or put a price on a good continuous integration pipeline, because good ones are rare, require investment and are also PRICELESS &amp;ndash; I'm going to reiterate this point &lt;strong&gt;good continuous integration pipelines are PRICELESS&lt;/strong&gt;. A good pipeline is the difference between a fast turn around of code (a couple hours) to a slow turn around of the same piece of code (a couple of weeks &amp;ndash; yes its true)&lt;/p&gt;
&lt;p&gt;So what is the top notch pipeline? No one knows because I don&amp;rsquo;t think anyone is there yet. But these are some of the attributes of the best one I have seen&amp;hellip;&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Speed up compile time and test time&lt;/strong&gt; &amp;ndash; building through visual studio or other GUI is slow, so running a local task that compiles the entire solution, and runs all tests that are associated with the solution on the command line is quite essential &amp;ndash; decrease compile and test time and you decrease over all roll out time.&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;A continuous integration and build management server&lt;/strong&gt; picks up the check in to source control and runs the same task from step one. Remember a developers machine is usually full of crap (I should know), so make sure the continuous integrations server is as pure as possible.&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;One click deploys&lt;/strong&gt;.. well this is something every team should be chomping at the bit to get, no one in their right mind would want to email MSIs or DLLs around to operations teams to deploy, this is 2011 not 1999&amp;hellip; In fact it makes me mad even thinking about doing this. One click deploys are one of those milestones in a development teams history - imagine logging on to a build server, clicking one button, and all assets are automatically deployed out to a stage or live environment - Magic.&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Automatically tagged deployments&lt;/strong&gt;. One question people often wonder is what version of assets have been deployed to which environment? if you have a lot of environments this can get very confusing.. so when clicking that button that does the deployments, make sure that you have a process to tag that revision along with the servers, etc..&lt;/p&gt;
&lt;p&gt;Continuous deployment is a huge milestone in a teams life cycle and should not be underestimated. If you want to &lt;em&gt;buy off the business&lt;/em&gt; this is one of the big YES&amp;rsquo;s &amp;ndash; a hard to sell, hard to implement procedure with a huge pay off. Have a read of &lt;a href="http://www.avc.com/a_vc/2011/02/continuous-deployment.html"&gt;http://www.avc.com/a_vc/2011/02/continuous-deployment.html&lt;/a&gt; which will help to not only sell it to your team, but to sell it to your business. Tests + CI = 4 minute bug fixes &amp;ndash; Hooora!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Source Control&lt;/h2&gt;
&lt;p&gt;This is different for every team, every developer, every manager etc.. everyone likes what they like, and getting it right is a pain. I have used Visual Source Safe 6, TFS, Mercurial, and GIT, and I have to say that at the moment distributed source control such as Mercurial or GIT are the clear winners.&lt;/p&gt;
&lt;p&gt;I can understand that source control is a contentious issue and that TFS is the holy grail of some development teams., before we move on, put this in to perspective, TFS Costs around &amp;pound;1350 a licence, mercurial is free &amp;ndash; Enough said.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Configuration Files&lt;/h2&gt;
&lt;p&gt;Configuration&amp;hellip; oh configuration, how I loath it and love it at the same time. Don&amp;rsquo;t get me wrong, configuration within a system is a good thing, it means you can change a system without having to change any code and do a recompile. So why do I loath it? Because pushing configuration to multiple servers can be a pain&amp;hellip; and getting it right is in its very nature a pain! At Bath Spa university we used NAnt to xml poke values based on which button in the CI pipeline we pushed. At ITV we use yaml files which hold the configuration values within a type of hierarchy, the actual configuration files were then built at compile time. Very neat &amp;ndash; yet still quite complicated.&lt;/p&gt;
&lt;p&gt;If someone has a cool way to do configuration files based on servers etc, I would love to know!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Staging&lt;/h2&gt;
&lt;p&gt;Get a stage server that the business can see and roll out to it often. Companies often feel like development teams are like black holes, and that they only see their investment after weeks/months of development time. If you have a staging server the business can look at to see how progress is coming, this can help to reassure them that what they want are being delivered and hopefully reassure them that their investment is not being wasted.&lt;/p&gt;
&lt;p&gt;If you have a CI Pipeline this should be easy to setup right?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;How do I know I am doing this right?&lt;/h2&gt;
&lt;p&gt;So I have my Continuous Integration server, people are writing tests and I have some odd configuration gooey stuff that my developers are ensuring me is cutting edge, my clients love the fact that I am rolling out every 3 hours, so is this what you meant Nick? &lt;strong&gt;YES&lt;/strong&gt; &amp;ndash; and does it not feel good?&lt;/p&gt;
&lt;p&gt;In my opinion if you do these steps, your time to deliver will be significantly decreased, after all is that not what we are all trying to strive for in the end?&amp;hellip;&lt;/p&gt;</description><pubDate>Mon, 25 Jul 2011 15:58:51 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/your-development-team-is-slow-what-can-i-do</guid></item><item><title>Starting work on OpenAuth module for Orchard CMS</title><link>http://www.themayneissue.com:80/memorystream/starting-work-on-openauth-module-for-orchard-cms</link><description>&lt;p&gt;So I have thrown the Idea back and forth, and after deciding I wasn't going to do any work on Open ID for Orchard, I have changed my mind! So I have set up a new codeplex project called orchardopenauth (&lt;a title="http://orchardopenauth.codeplex.com/" href="http://orchardopenauth.codeplex.com/"&gt;http://orchardopenauth.codeplex.com/&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;The first goal is to get an extensible Open ID implementation working inside of Orchard without having to change any of the Orchard base code.&lt;/p&gt; &lt;p&gt;If anyone would like in.. give me a shout – Either by &lt;a href="mailto:Jetski5822@hotmail.com"&gt;email&lt;/a&gt; or twitter (&lt;a href="http://twitter.com/NicholasMayne"&gt;@NicholasMayne&lt;/a&gt;)&lt;/p&gt; &lt;h2&gt;Why OpenAuth? Why NOT OpenID?&lt;/h2&gt; &lt;p&gt;Open ID is small part to a very large piece of the puzzle. I want this module to be more than just about Open ID, eventually I see a full implementation of the DotNetOpenAuth project within the Orchard Framework, though these are early days and I have only just started.&lt;/p&gt; &lt;p&gt;Any ideas!.. or feedback, please let me know!&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/starting-work-on-openauth-module-for-orchard-cms</guid></item><item><title>BlogML module for Orchard 0.8 CMS released</title><link>http://www.themayneissue.com:80/memorystream/blogml-module-for-orchard-0.8-cms-released</link><description>&lt;p&gt;Codeplex site: &lt;a href="http://orchardblogml.codeplex.com"&gt;http://orchardblogml.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have finally released the upgraded version of the BlogML module for all you happy bloggers. This version is intended to work only on Orchard 0.8, but never fear, there is still the 0.5 version of this module kicking around on the codeplex website so you can export your blogs out in your own time.&lt;/p&gt;
&lt;p&gt;The new version has a lot of bug fixes, though I have not been able to solve the problem with timeouts on large files. I have provided support for zip files containing more than one xml file, so you are more than welcome to give that a go instead.&lt;/p&gt;
&lt;p&gt;If you need a walk thru of the module, please refer to &lt;a title="http://www.themayneissue.com/memorystream/blogml-module-for-orchard-0.5-cms-now-available" href="http://www.themayneissue.com/memorystream/blogml-module-for-orchard-0.5-cms-now-available"&gt;http://www.themayneissue.com/memorystream/blogml-module-for-orchard-0.5-cms-now-available&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Release notes:&lt;/h2&gt;
&lt;p&gt;1. Upgraded to Orchard v0.8&lt;br /&gt;2. Changed all pages to use the Razor syntax&lt;br /&gt;3. Fixed bug that I was trying to import files that have no urls in, but this is actually correct behaviour, the code should have taken this in to account and used the title instead. Fix: Check for null urls, and use title instead.&lt;br /&gt;4. Forced hard refresh of Orchard after blog import &amp;ndash; this will force orchard to refresh cache stash of slugs.&lt;br /&gt;5. Fixed issue where the date times would be overridden by orchard&lt;br /&gt;6. Changed the way information is reported back to the user. A report will now be generated, and only errors will be show on the admin screen.&lt;br /&gt;7. Provided support for zip files containing multiple xml files.&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/blogml-module-for-orchard-0.8-cms-released</guid></item><item><title>Orchard v0.8 Released</title><link>http://www.themayneissue.com:80/memorystream/orchard-v0.8-released</link><description>&lt;p&gt;Well we have all been waiting for it!&amp;hellip; Orchard v0.8 is released, excellent. Thanks a lot to the Orchard team, cant wait to dig my teeth in, and migrate my blog up to v0.8 from v0.5 (hoping there is a upgrade path &amp;ndash; fingers crossed)&lt;/p&gt;
&lt;p&gt;An email sent from Bradley Millington announced it today -&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Forgive the terse email, but I wanted to let you all know that the Orchard 0.8 release is officially live:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://orchardproject.net"&gt;http://orchardproject.net&lt;/a&gt;&lt;br /&gt;&lt;a href="http://orchard.codeplex.com/releases/view/49388"&gt;http://orchard.codeplex.com/releases/view/49388&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;The Outercurve Foundation will be publishing a blog post about the release early tomorrow.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;We are especially proud of this release, as it finally brings the long-promised theme engine to life.&amp;nbsp; We added widget support as the icing on the cake.  &lt;/p&gt;
&lt;p&gt;The docs for this release are a little behind, but we are working to catch up the docs as quickly as possible.&amp;nbsp; In the meantime, the Orchard Discussions on codeplex are always good place to tap the expertise of the Orchard team to get your questions answered.  &lt;/p&gt;
&lt;p&gt;Enjoy!  &lt;/p&gt;
&lt;p&gt;Bradley (on behalf of the rest of the Orchard team)&amp;rdquo;  &lt;/p&gt;
&lt;p&gt;The current iteration delivered:  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;- Migration of existing themes and modules to new theming engine, new developer theme  &lt;/li&gt;
&lt;li&gt;- Theme packaging  &lt;/li&gt;
&lt;li&gt;- Widgets &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All i can say is, what can I look forward to in the next iteration.&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/orchard-v0.8-released</guid></item><item><title>Taking a quick peek at Pre-Orchard v0.8</title><link>http://www.themayneissue.com:80/memorystream/taking-a-quick-peek-at-pre-orchard-v0.8</link><description>&lt;p&gt;Okay, So i couldn't wait. I haven't downloaded the source code in a while and thought why not take a peek around.&lt;/p&gt;
&lt;p&gt;I think the Orchard team has focused mainly on striping out their old theme engine to make place for the new old, and I have to say I am impressed. The new theme engine hangs off the work that the Razor boys have been doing along with support for WebMatrix &amp;ndash; which is fantastic to see. &lt;/p&gt;
&lt;p&gt;When I worked at Bath Spa, one or two people were talking about adopting WebMatrix and this made me feel a little uneasy mainly because Orchard at that point did not have built in support for it (And they were showing my VB.net examples), but now they do, I hope that the Bath Spa team keeps and eye out to see what they can do with it.&lt;/p&gt;
&lt;p&gt;So I downloaded the latest revision on orchard off of codeplex to have a quick shifty (No Stu this is not the same as a Chiggy-Back), and I have to say that I like what I see.&lt;/p&gt;
&lt;p&gt;The whole theme engine has been replaced with a brand new theme engine that in my eyes is a lot more extensible. At the moment I would say that the system its self is still rather simplistic, but where as before the scope of the theme engine was limited, this time around the Orchard team have made something which in my eyes can easily be turned in to something quite powerful and is not limited by previous limitations that were imposed on it.&lt;/p&gt;
&lt;p&gt;With theming they have expanded on this notion of widgets which they introduced very early on with the module &amp;lsquo;futures.widgets&amp;rsquo;. It would appear that they have also introduced a very early concept of a &amp;lsquo;page canvas&amp;rsquo; which is one of the features I wanted to see built. At ITV we have a great page canvas and I felt this is one of the ITVs CMS strong points, but with Orchard going this route, with the notion of widgets and widget pages, this leaves room for excitement. It would also appear that widgets can be inserted and displayed to different roles based on the concept of layers. The changeset I downloaded was slightly broken, so I cant screen shot creating a widget page.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/WindowsLiveWriter/TakingaPeekatPreOrchardv0.8_A490/image_2.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://www.themayneissue.com/Media/WindowsLiveWriter/TakingaPeekatPreOrchardv0.8_A490/image_thumb.png" border="0" alt="image" width="780" height="447" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There also is built in Email support, which is a fantastic feature that I hope to use on my own blog, so I can receive notifications of people who have commented. For all the people who have been emailing me about ideas for a Email Campaign CRM might want to think of adopting this as a first point of call?&lt;/p&gt;
&lt;p&gt;More to come after I explore a little more.&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/taking-a-quick-peek-at-pre-orchard-v0.8</guid></item><item><title>What is Orchard CMS v0.5 missing</title><link>http://www.themayneissue.com:80/memorystream/what-is-orchard-cms-v0.5-missing</link><description>&lt;p&gt;After working with Orchard for 10 months and talking to various people from the community via email and message boards, I thought I would write a post on what I think is missing, and in some places a quick brainstorm on how to implement it.&lt;/p&gt;
&lt;p&gt;First I would like to say that the great thing I like about Orchard as a developer is the way the team has taken the time to get the separation of concerns correct from the beginning making the framework hugely extensible. I would say for the separation of concerns issue is very important, though there are certain areas I feel in orchard where they have not stayed true to this design practice, but as the system matures I can see them breaking these things out.&lt;/p&gt;
&lt;p&gt;Orchard have started a user voice group here - &lt;a title="http://orchard.uservoice.com/forums/50435-general" href="http://orchard.uservoice.com/forums/50435-general"&gt;http://orchard.uservoice.com/forums/50435-general&lt;/a&gt; so please visit and vote up ideas, though I feel I kind of wanted to do my own post, so here we go&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Workflow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For me this article says it all &lt;a title="http://www.intranetjournal.com/articles/200412/ij_12_03_04a.html" href="http://www.intranetjournal.com/articles/200412/ij_12_03_04a.html"&gt;http://www.intranetjournal.com/articles/200412/ij_12_03_04a.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When implementing a CMS system, you look at how that system can integrate with your company and work to your needs. You implement a CMS for a need, usually to replace a current task that is inefficient, and by that standard you look at how that task can be mapped on to a CMS or any system that you are looking at replacing said task with.&lt;/p&gt;
&lt;p&gt;A good CMS system should be able to reduce complexity but still allow internal processes to exist. Adding workflow allows user content to be better managed because you give the employees a clear and visible path thru a system (granted I have seen some bad workflows before &amp;ndash; but this is what workflows should allow). With out workflow, I find it hard to see how companies will be able to map workflows or &amp;lsquo;a process of tasks&amp;rsquo; on to Orchard.&lt;/p&gt;
&lt;p&gt;I'm not sure how workflow could be built in, but what I would like to see is integration with Windows Workflow, or BizTalk (I know I know)&amp;hellip; but from an enterprise company's perspective, its a big issue!!&lt;/p&gt;
&lt;p&gt;I feel that this missing feature should have been a high &amp;lsquo;Should Have&amp;rsquo; from day one when the new content types module was build, and that it could be one of the major disadvantages or headaches to adopting Orchard from a company perspective. (Obviously I know certain people will disagree)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Form Builder&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A Form builder in my eyes is something that allows a user to fill in information about ones self, and then save that information somewhere. I think that the task should be done in conjunction with Workflow, why? you might ask &amp;ndash; &lt;br /&gt;Well, when working for Bath Spa University we needed to build a system that allows staff to edit content, and allows students to fill in forms. The students information would then go through a number of stages of registration until they received a confirmation email that they have been successful or unsuccessful &amp;ndash; this in essence is a workflow with a number of forms on the front of it. I feel that If we had a form builder in the system already, life could have been a lot easier, to allow us to build the infrastructure underneath, rather than playing with text boxes and labels.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Gravatars&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Could be a quick win for someone to come up with a nice module that either injects Gravatars into the comments module, or overwrites the default Comments module view with a gravatar view. For anyone who doesn't know what a gravatar is visit - &lt;a title="http://en.gravatar.com/" href="http://en.gravatar.com/"&gt;http://en.gravatar.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If anyone has looked at Oxite before (&lt;a title="http://oxite.codeplex.com/" href="http://oxite.codeplex.com"&gt;http://oxite.codeplex.com&lt;/a&gt;), you maybe able to steal what they have done and integrate it in to Orchard. I previously did this in Orchard for Bath Spa, but forgot where exactly I left the code!!!&amp;hellip; Opps.&lt;/p&gt;
&lt;p&gt;Note: Initial profiles module brainstorming came from this thread: &lt;a title="http://social.msdn.microsoft.com/Forums/en-SG/orcharddiscussions/thread/716799b3-36e1-4e76-99ad-c1d6e57ee369" href="http://social.msdn.microsoft.com/Forums/en-SG/orcharddiscussions/thread/716799b3-36e1-4e76-99ad-c1d6e57ee369"&gt;http://social.msdn.microsoft.com/Forums/en-SG/orcharddiscussions/thread/716799b3-36e1-4e76-99ad-c1d6e57ee369&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. An Enhanced user profiles module &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So at present, quite a few people have been emailing me with ideas on how my profiles modules could be extended, and in the most part I completely agree. I remember when I was first thinking up the ideas and talking to Lou who works for Orchard about the whole user profiles system, and so I decided that at the time&amp;hellip; this being January of course that I would evaluate Orchard and see how easy it is to create a module, and hence my user profiles module was born. &lt;/p&gt;
&lt;p&gt;As time moved on, my module has not kept up with the natural progression of Orchard and so in real terms, has fallen behind, which in its self is a shame. I would love to see someone take this module taken forward.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Integration with Active Directory (or something along those lines) &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From previous experience, I have noticed that a lot of information on staff and the such get wrapped up on systems like active directory - I think it would be nice to have something that would allow you to have a wrapper around AD, so if you are deploying Orchard on an internal system, then it should integrate directly with AD to pull and push information whenever it so needed, rather than have duplicate information which could become stale and out of date quite easily. The same module if written correctly, could also integrate with OpenID or any authentication pattern.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Reputation, points, badges, etc.. &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I think that a solution similar to stackoverflow or even the MSDN forum should be dreamt up. I think the module should be based around integration with the user content type. The tricky part could be how other modules interact with this module&amp;hellip; at this point I'm not sure &amp;ndash; possibly though attaching events to content types?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. A threaded comments module.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I would like to see a module that allows me to do something like cnet.com or stackoverflow where I can see a conversation appearing. This could be done in conjunction with a Q+A module which I know some people have been talking about.&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/what-is-orchard-cms-v0.5-missing</guid></item><item><title>BlogML module for Orchard 0.5 CMS now available</title><link>http://www.themayneissue.com:80/memorystream/blogml-module-for-orchard-0.5-cms-now-available</link><description>&lt;p&gt;Codeplex site: &lt;a href="http://orchardblogml.codeplex.com"&gt;http://orchardblogml.codeplex.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;What is BlogML? &lt;br&gt;&lt;/strong&gt;BlogML is an open format derived from XML to store and restore the contents of a blog from one location to another.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Is BlogML open source?&lt;br&gt;&lt;/strong&gt;Yes of course&lt;strong&gt;… &lt;/strong&gt;&lt;a title="http://blogml.codeplex.com/" href="http://blogml.codeplex.com/"&gt;http://blogml.codeplex.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Module! -&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;A month after publishing the BlogML module for 0.5 I have finally got around to writing to tell you the users where and how to use it. I have used the screen shots that have been provided in emails from Bradley Millington, thanks Bradley, I owe you!&lt;/p&gt; &lt;p&gt; &lt;b&gt;A quick tour:&lt;/b&gt;&lt;/p&gt; &lt;p&gt;1) Find the BlogML module in our gallery feed: &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image001_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image001_thumb.jpg" width="511" height="234"&gt;&lt;/a&gt; &lt;p&gt;2) Then enable the NGM.BlogML feature on the Features admin page: &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image002_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image002_thumb.jpg" width="370" height="89"&gt;&lt;/a&gt; &lt;p&gt;3) This exposes a new “Import” menu under “Blogs”: &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image003_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image003_thumb.jpg" width="131" height="126"&gt;&lt;/a&gt; &lt;p&gt;4) To import a blog (and posts, tags, comments), browse for a valid BlogML XML file.&amp;nbsp; You can also specify a pattern to match for identifying post URL slugs: &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image004_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image004_thumb.jpg" width="420" height="222"&gt;&lt;/a&gt; &lt;p&gt;5) Upload and import, and you’ll get a success message for each imported blog and post: &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image005_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image005" border="0" alt="clip_image005" src="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image005_thumb.jpg" width="422" height="285"&gt;&lt;/a&gt; &lt;p&gt;6) Note the new Blog shows up under Manage Blogs (and my previous blog is still retained too): &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image006_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image006_thumb.jpg" width="416" height="88"&gt;&lt;/a&gt; &lt;p&gt;7) The Import feature handles import of tags and comments too, including the approval state of each comment.&amp;nbsp; &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image007_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image007" border="0" alt="clip_image007" src="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image007_thumb.jpg" width="432" height="282"&gt;&lt;/a&gt; &lt;p&gt;8) The Blog ML module also exposes some settings for customizing directories: &lt;p&gt;&lt;a href="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image008_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://www.themayneissue.com/Media/WindowsLiveWriter/BlogMLmoduleforOrchardCMSnowavailableonc_10088/clip_image008_thumb.jpg" width="343" height="193"&gt;&lt;/a&gt; &lt;p&gt;After having issues with source control all seems to have corrected itself and thanks to all who have been waiting and logged issues on the codeplex site. For all those who don’t yet know where the code is, please check &lt;a href="http://orchardblogml.codeplex.com"&gt;http://orchardblogml.codeplex.com&lt;/a&gt; and download the latest version.&lt;/p&gt; &lt;p&gt;Thanks all, and let me know what you think.&lt;/p&gt; &lt;p&gt;Cheers, Nick&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/blogml-module-for-orchard-0.5-cms-now-available</guid></item><item><title>Why do Microsoft not put more effort in to Orchard instead of using Word press?</title><link>http://www.themayneissue.com:80/memorystream/why-do-microsoft-not-put-more-effort-in-to-orchard-instead-of-using-word-press</link><description>&lt;p&gt;Today I make my rounds on the usual sites to catch up with the likes of techie news and the such and I see great news that Microsoft has decided to axe Windows Live Spaces (&lt;a title="http://news.cnet.com/8301-13860_3-20017745-56.html?tag=topTechContentWrap;editorPicks" href="http://news.cnet.com/8301-13860_3-20017745-56.html?tag=topTechContentWrap;editorPicks"&gt;http://news.cnet.com/8301-13860_3-20017745-56.html?tag=topTechContentWrap;editorPicks&lt;/a&gt;) though I think this is a partially good idea, I cant understand there reasoning behind wanting to move to word press.&lt;/p&gt; &lt;p&gt;Word press granted is a very mature blogging tool, and Orchard on the other hand is very young, but If I was Microsoft I would have taken what I had learned and moved it in to Orchard, instead of moving users to a aging word press platform.&lt;/p&gt; &lt;p&gt;Orchard to me is a very young system and has a long way to go, but surely Microsoft should decide that this is the way to go and get more people behind this open source project.&lt;/p&gt; &lt;p&gt;Rant Over….&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/why-do-microsoft-not-put-more-effort-in-to-orchard-instead-of-using-word-press</guid></item><item><title>Upgrading my blog from Wordpress to Orchard 0.5</title><link>http://www.themayneissue.com:80/memorystream/upgrading-my-blog-from-wordpress-to-orchard-0.5</link><description>&lt;p&gt;Well, I have done it!! Nick Mayne is no longer a word press member, instead I have bought in to this new CMS system called Orchard. The Orchard system however is not that new to me as I have been working with it since December of 2009.&lt;/p&gt;
&lt;p&gt;So what exactly needed to be done in order for me to move my blog over to Orchard?&lt;/p&gt;
&lt;p&gt;1. Download the latest Build which in this case is Orchard 0.5&lt;br /&gt;2. Next create a theme directory called themayneissue underneath Orchard.Web\Themes\&amp;lt;ThemeNameHere&amp;gt; &lt;br /&gt;3. Create my theme, in this instance I copied the Contoso theme and used this as a basis.&lt;br /&gt;4. I then build my solution using the instruction found here: &lt;a title="http://orchardproject.net/docs/Building-and-deploying-Orchard-from-a-source-code-drop.ashx" href="http://orchardproject.net/docs/Building-and-deploying-Orchard-from-a-source-code-drop.ashx"&gt;http://orchardproject.net/docs/Building-and-deploying-Orchard-from-a-source-code-drop.ashx&lt;/a&gt;&lt;br /&gt;5. Using FileZilla I then upload to my new shiny site to my new host Discountasp.net (Don't forget to repoint your domain if you have one)&lt;br /&gt;6. Next thing to do is fire up the site, My site is running on SqlCe and so far works fantastic.&lt;br /&gt;7. Head to your Admin Area and select your new theme.&lt;/p&gt;
&lt;p&gt;Okay, So now my site is empty but looking quite sexy&amp;hellip; next is to create my blog&amp;hellip;. &lt;strong&gt;wait &lt;/strong&gt;I already have a blog don&amp;rsquo;t I? Okay so time to get that blog and move it across.. I decided to use a BlogML module that I have written and published to the Orchard Gallery Feed so anyone can use it.&lt;/p&gt;
&lt;p&gt;Getting my blog out of wordpress was easy, but getting it in to an acceptable format was a nightmare, but i refused to write a wordpress plugin for Orchard, instead I asked my self Is there a wordpress to BlogML converter?? YES!!! found one here.. &lt;a href="http://www.visualsoftware.net/Blog/post/2009/10/27/WordPress-eXtended-RSS-to-BlogMl-converter-WXR-2-BlogML.aspx"&gt;http://www.visualsoftware.net/Blog/post/2009/10/27/WordPress-eXtended-RSS-to-BlogMl-converter-WXR-2-BlogML.aspx&lt;/a&gt; So lets continue,&lt;/p&gt;
&lt;p&gt;8. Export your wordpress blog out in to a xml format.&lt;br /&gt;9. Fire up WXR2BlogML and you will end up with a file with the same name except you have *_BlogML attached to the end.&lt;/p&gt;
&lt;p&gt;So now I have my blog in a BlogML format, lets import it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note: If you haven't already installed the NGM.BlogML module please do that before continuing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;10. Open up the admin area and click &amp;lsquo;import&amp;rsquo; under the Blogs Section. (Remember: that all details of your blog can be changed later, the main this in that you get your data in!) Choose your blog and click upload.&lt;br /&gt;11. Hey presto.. after modifying some setting on my blog &amp;ndash; mainly a rename, I have my website.&lt;/p&gt;
&lt;p&gt;Nick&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/upgrading-my-blog-from-wordpress-to-orchard-0.5</guid></item><item><title>Custom Home Page Provider for Static Pages in Orchard</title><link>http://www.themayneissue.com:80/memorystream/custom-home-page-provider-for-static-pages-in-orchard</link><description>&lt;p&gt;Orchard is built with a home page provider pattern so that you can say this content item is the home page. The problem is if your homepage is something that doesn't exist as a content item.. i.e. a static page.&lt;/p&gt;  &lt;p&gt;The problem is that there is no way to tell orchard that a custom static page is the home page, so you need to buy in to the provider model, and the ‘trick’ it. So here is how I have done it.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CustomHomePageProvider : IHomePageProvider {
    &lt;span class="kwrd"&gt;public&lt;/span&gt; CustomHomePageProvider() {
        CurrentSite.HomePage = &lt;span class="str"&gt;&amp;quot;CustomHomePageProvider;0&amp;quot;&lt;/span&gt;;
    }

    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; ISite CurrentSite { get; [UsedImplicitly] &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetProviderName() {
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;CustomHomePageProvider&amp;quot;&lt;/span&gt;;
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult GetHomePage(&lt;span class="kwrd"&gt;int&lt;/span&gt; itemId) {
        &lt;span class="rem"&gt;//  We ignore the itemId as this is the part that we dont want.&lt;/span&gt;
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ViewResult {
            ViewName = &lt;span class="str"&gt;&amp;quot;~/Modules/Orchard.LathamImages/Views/Test/Index.ascx&amp;quot;&lt;/span&gt;,
            ViewData = &lt;span class="kwrd"&gt;new&lt;/span&gt; ViewDataDictionary&amp;lt;IndexViewModel&amp;gt;(&lt;span class="kwrd"&gt;new&lt;/span&gt; IndexViewModel())
        };
    }
}&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.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;First you need to create a class that implements the IHomePageProvider.&lt;/p&gt;

&lt;p&gt;You can then make the assignment of the home page provider by always reassigning it in your ctor. (Yes I know I'm calling a virtual method in a ctor)&lt;/p&gt;

&lt;p&gt;Next, set the view name in the GetHomePage method passing in any know ViewModel etc.&lt;/p&gt;

&lt;p&gt;That's It… now every time you start your site up, you will be using this home page.&lt;/p&gt;

&lt;p&gt;The problem is that you can now never change the homepage… Well, food for thought I guess..&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/custom-home-page-provider-for-static-pages-in-orchard</guid></item><item><title>Custom Redirect Results in Asp.Net MVC</title><link>http://www.themayneissue.com:80/memorystream/custom-redirect-results-in-asp.net-mvc</link><description>&lt;p&gt;So after writing lots of code with return new redirect(“”) or RedirectToRoute etc, I decided i had had enough, and thought it would be a little nicer to have something return that made sense and could be reused, instead of stings for locations all over the place making my code look nasty.&lt;/p&gt;  &lt;p&gt;So here is the the problem code that has lots of things that look like this…&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; Redirect(&lt;span class="str"&gt;&amp;quot;/paymentoffline&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;p&gt;So instead of having this code smell, why not replace it with a class, somewhere we only have to specify the url once?&lt;/p&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.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;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PaymentOfflineResult : RedirectResult {
    &lt;span class="kwrd"&gt;public&lt;/span&gt; PaymentOfflineResult()
        : &lt;span class="kwrd"&gt;base&lt;/span&gt;(&lt;span class="str"&gt;&amp;quot;/paymentoffline&amp;quot;&lt;/span&gt;) {
    }
}&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.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;And now all we have to do is….&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; PaymentOfflineResult();&lt;/pre&gt;

&lt;p&gt;Is that not a lot cleaner??&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/custom-redirect-results-in-asp.net-mvc</guid></item><item><title>AttachUpdated command for Entity Framework</title><link>http://www.themayneissue.com:80/memorystream/attachupdated-command-for-entity-framework</link><description>&lt;p&gt;So who here has tried to get an entity that is disconnected reattached with all relevant references updated? I know i have… And after scouting the web for solution after solution here are the set of methods that works for me… They are a mismatch better a lot of other people methods, but this seems to be the best combination and so far I have had no problems.&lt;/p&gt;  &lt;p&gt;Note : That my entitykeys are usually ‘Id’ so if your are different, then you will need to slightly change the code i.e. where is says ‘Id’&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; EntityFrameworkExtensionMethods {

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AttachUpdated(&lt;span class="kwrd"&gt;this&lt;/span&gt; ObjectContext ctx, EntityObject objectDetached) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (objectDetached.EntityKey == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
            String entitySetName = GetEntitySetFullName(ctx, objectDetached);
            &lt;span class="kwrd"&gt;int&lt;/span&gt; objectId = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)objectDetached.GetType().GetProperty(&lt;span class="str"&gt;&amp;quot;Id&amp;quot;&lt;/span&gt;).GetValue(objectDetached, &lt;span class="kwrd"&gt;null&lt;/span&gt;);
            objectDetached.EntityKey = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Data.EntityKey(entitySetName, &lt;span class="str"&gt;&amp;quot;Id&amp;quot;&lt;/span&gt;, objectId);
        }
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (objectDetached.EntityState == EntityState.Detached || objectDetached.EntityState == EntityState.Modified) {
            &lt;span class="kwrd"&gt;object&lt;/span&gt; currentEntityInDb = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (ctx.TryGetObjectByKey(objectDetached.EntityKey, &lt;span class="kwrd"&gt;out&lt;/span&gt; currentEntityInDb)) {
                ctx.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
                ctx.ApplyReferencePropertyChanges((IEntityWithRelationships)objectDetached,
                                                  (IEntityWithRelationships)currentEntityInDb);  &lt;span class="rem"&gt;//extension&lt;/span&gt;
            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt; {
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ObjectNotFoundException();
            }
        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetEntitySetFullName(&lt;span class="kwrd"&gt;this&lt;/span&gt; ObjectContext context, EntityObject entity) {
        &lt;span class="rem"&gt;// If the EntityKey exists, simply get the Entity Set name from the key&lt;/span&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (entity.EntityKey != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; entity.EntityKey.EntitySetName;
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; entityTypeName = entity.GetType().Name;
            var container = context.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
            &lt;span class="kwrd"&gt;string&lt;/span&gt; entitySetName = (from meta &lt;span class="kwrd"&gt;in&lt;/span&gt; container.BaseEntitySets
                                    &lt;span class="kwrd"&gt;where&lt;/span&gt; meta.ElementType.Name == entityTypeName
                                    select meta.Name).First();

            &lt;span class="kwrd"&gt;return&lt;/span&gt; container.Name + &lt;span class="str"&gt;&amp;quot;.&amp;quot;&lt;/span&gt; + entitySetName;
        }
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ApplyReferencePropertyChanges(&lt;span class="kwrd"&gt;this&lt;/span&gt; ObjectContext ctx, IEntityWithRelationships newEntity, IEntityWithRelationships oldEntity) {
        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var relatedEnd &lt;span class="kwrd"&gt;in&lt;/span&gt; oldEntity.RelationshipManager.GetAllRelatedEnds()) {
            var oldRef = relatedEnd &lt;span class="kwrd"&gt;as&lt;/span&gt; EntityReference;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (oldRef != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                var newRef =
                    newEntity.RelationshipManager.GetRelatedEnd(oldRef.RelationshipName, oldRef.TargetRoleName) &lt;span class="kwrd"&gt;as&lt;/span&gt;
                    EntityReference;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (newRef != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; newRef.EntityKey == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                    PropertyInfo info = newRef.GetType().GetProperty(&lt;span class="str"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;,
                                                                     BindingFlags.Public | BindingFlags.Instance);
                    &lt;span class="kwrd"&gt;object&lt;/span&gt; val = info.GetValue(newRef, &lt;span class="kwrd"&gt;null&lt;/span&gt;);
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (val != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                        &lt;span class="kwrd"&gt;string&lt;/span&gt; entitySetName = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
                        var objVal = val &lt;span class="kwrd"&gt;as&lt;/span&gt; EntityObject;
                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (objVal != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                            entitySetName = GetEntitySetFullName(ctx, objVal);

                        newRef.EntityKey = ctx.CreateEntityKey(entitySetName, val);
                    }
                    &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (oldRef.EntityKey != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
                        oldRef.EntityKey = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                    }
                }

                oldRef.EntityKey = newRef.EntityKey;
            }
        }
    }
}&lt;/pre&gt;

&lt;p&gt;You can use this by doing so… Where Student is your EntityObject&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Save(Student student) {
    &lt;span class="kwrd"&gt;using&lt;/span&gt; (var context = &lt;span class="kwrd"&gt;new&lt;/span&gt; sitsEntities()) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ((student.Code != &lt;span class="kwrd"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (student.EntityState == EntityState.Detached 
            || student.EntityState == EntityState.Modified))
            context.AttachUpdated(student);
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (student.Code == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
            context.AddObject(context.GetEntitySetFullName(student), student);
        }

        &lt;span class="kwrd"&gt;return&lt;/span&gt; context.SaveChanges(&lt;span class="kwrd"&gt;true&lt;/span&gt;);
    }
}&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Any issues let me know, as I use this code in live environments!!!&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/attachupdated-command-for-entity-framework</guid></item></channel></rss>
