<?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>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><item><title>Making menus in Orchard a little better</title><link>http://www.themayneissue.com:80/memorystream/making-menus-in-orchard-a-little-better</link><description>&lt;p&gt;After keeping an eye on the Orchard forums and then doing some work on a clients website that has been implemented in Orchard, I soon became one of those people needing a decent menu. So, I thought to myself, well what does orchard have that I can use, after all - I don’t really want to have to do a lot of work just for a menu.&lt;/p&gt; &lt;p&gt;Note : This is all based around the last iteration of Orchard within Visual Studio 2008 framework 3.5.&lt;/p&gt; &lt;p&gt;So what does Orchard have that I can use…&lt;/p&gt; &lt;p&gt;1. Admin page for Menu &lt;br&gt;2. Allows you to store menu positions as 1 1.1 1.1.1 2 2.2 etc… &lt;br&gt;3. You can override the menu within your theme&lt;/p&gt; &lt;p&gt;Okay, so I got to thinking, if I can store the positions broken down like this, why cant i retrieve them like this, and go on to build the necessary menu steps? Well I can… here is how..&lt;/p&gt; &lt;p&gt;Step 1: In your theme, create a Menu.ascx file.&lt;/p&gt; &lt;p&gt;And drop this code in to it. (this is a modified version of the one located in Orchard.Themes)&lt;/p&gt;&lt;pre class="csharpcode"&gt;&amp;lt;%@ Control Language=&lt;span class="str"&gt;"C#"&lt;/span&gt; Inherits=&lt;span class="str"&gt;"Orchard.Mvc.ViewUserControl&amp;lt;Orchard.Mvc.ViewModels.BaseViewModel&amp;gt;"&lt;/span&gt; %&amp;gt;
&amp;lt;%@ Import Namespace=&lt;span class="str"&gt;"Orchard.Utility.Extensions"&lt;/span&gt;%&amp;gt;&amp;lt;%
    var menu = Model.Menu.FirstOrDefault();
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (menu != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; menu.Items.Count() &amp;gt; 0) { %&amp;gt;
    &amp;lt;ul &lt;span class="kwrd"&gt;class&lt;/span&gt;=&lt;span class="str"&gt;"menu"&lt;/span&gt; role=&lt;span class="str"&gt;"navigation"&lt;/span&gt;&amp;gt;&amp;lt;%
        &lt;span class="kwrd"&gt;int&lt;/span&gt; counter = 0, count = menu.Items.Count() - 1;
        &lt;span class="kwrd"&gt;int&lt;/span&gt; previousLevel = 1;
        &lt;span class="kwrd"&gt;int&lt;/span&gt; currentLevel = 1;
        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var menuItem &lt;span class="kwrd"&gt;in&lt;/span&gt; menu.Items.OrderBy(m =&amp;gt; m.Position)) {
            var sbClass = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(10);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (counter == 0)
                sbClass.Append(&lt;span class="str"&gt;"first "&lt;/span&gt;);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (counter == count) {
                sbClass.Append(&lt;span class="str"&gt;"last "&lt;/span&gt;);
            }
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.Equals(menuItem.Href, Request.ToUrlString(), StringComparison.InvariantCultureIgnoreCase))
                sbClass.Append(&lt;span class="str"&gt;"current "&lt;/span&gt;);

            currentLevel = menuItem.Position.Split(&lt;span class="str"&gt;'.'&lt;/span&gt;).Length;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ((previousLevel == currentLevel) &amp;amp;&amp;amp; counter &amp;gt;= 1){ %&amp;gt;
                &amp;lt;/li&amp;gt;
            &amp;lt;%}
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (previousLevel &amp;lt; currentLevel) {
                sbClass.Append(&lt;span class="str"&gt;"first "&lt;/span&gt;);%&amp;gt;
                &amp;lt;ul&amp;gt;
            &amp;lt;% }
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (previousLevel &amp;gt; currentLevel) {
                &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; (previousLevel - currentLevel); i++) { %&amp;gt;
                &amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt;
            &amp;lt;% } %&amp;gt; &amp;lt;/li&amp;gt; &amp;lt;%}
            var classValue = sbClass.ToString().TrimEnd();
            var linkAttributes = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;object&lt;/span&gt;&amp;gt;();
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(menuItem.AccessKey))
                linkAttributes.Add(&lt;span class="str"&gt;"accesskey"&lt;/span&gt;, menuItem.AccessKey);
            %&amp;gt;
                &amp;lt;li&amp;lt;%=!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(classValue) ? &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;" class=\"{0}\""&lt;/span&gt;, classValue) : &lt;span class="str"&gt;""&lt;/span&gt; %&amp;gt;&amp;gt;&amp;lt;%=Html.Link(menuItem.Text, menuItem.Href, linkAttributes)%&amp;gt;
                
            &amp;lt;% previousLevel = currentLevel;
               &lt;span class="kwrd"&gt;if&lt;/span&gt; (counter == count) { %&amp;gt;
                &amp;lt;/li&amp;gt;
            &amp;lt;% &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 1; i &amp;lt; previousLevel; i++) { %&amp;gt;
                &amp;lt;/ul&amp;gt; &amp;lt;/li&amp;gt;
            &amp;lt;% } }

            ++counter;
        } %&amp;gt;
    &amp;lt;/ul&amp;gt;
&amp;lt;% } %&amp;gt;&lt;/pre&gt;
&lt;p&gt;Next head to your manage menu section in the admin screens…. usually &lt;a title="http://localhost:30320/Admin/Navigation" href="http://localhost:30320/Admin/Navigation"&gt;http://localhost:30320/Admin/Navigation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Set up your positions like below… Click Update All&lt;/p&gt;
&lt;p&gt;&lt;a href="file:///C:/Users/NickMayne/AppData/Local/Temp/WindowsLiveWriter1286139640/supfilesABE6A9/image3.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_thumb1" border="0" alt="image_thumb1" src="http://www.themayneissue.com/Media/WindowsLiveWriter/MakingmenusinOrchardalittlebetter_124FB/image_thumb1_b42cb08a-3e25-4a3b-a6c7-2aaa1b097cc3.png" width="600" height="339"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next head back to your front page, and you should start seeing html like so....&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="menucontainer"&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;ul&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="menu"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="nav-one"&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;li&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="first"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="/"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Home&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;li&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;li&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="/Test/Gallery"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Portfolio&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&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;ul&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="nested"&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;li&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="last"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="/Test/Gallery/Item/University Work"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;University Work&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;li&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;ul&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;li&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;ul&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;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I admit, I have done this in a little bit of a rush, so there could be one or two bugs creeping around.&lt;/p&gt;
&lt;p&gt;Okay once this is done… So can then apply Suckerfish or what ever over the top… i used &lt;a title="http://be.twixt.us/jquery/suckerFish.php" href="http://be.twixt.us/jquery/suckerFish.php"&gt;http://be.twixt.us/jquery/suckerFish.php&lt;/a&gt; which is the jquery equivalent.&lt;/p&gt;
&lt;p&gt;Happy Orchard Picking everyone.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Note : Fixed issue with it not showing the ‘First’ class correctly. 29/July/2010&lt;/p&gt;
&lt;p&gt;Note : Fixed issue with missing closing &amp;lt;/li&amp;gt;. 04/Aug/2010&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/making-menus-in-orchard-a-little-better</guid></item><item><title>Twitter Tweet Tweet Just Joined</title><link>http://www.themayneissue.com:80/memorystream/twitter-tweet-tweet-just-joined</link><description>&lt;p&gt;Hey all… I have just joined Twitter!!.. if you wish to follow…&lt;/p&gt;  &lt;p&gt;&lt;a title="http://twitter.com/NicholasMayne" href="http://twitter.com/NicholasMayne"&gt;http://twitter.com/NicholasMayne&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;See you there! :)&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/twitter-tweet-tweet-just-joined</guid></item><item><title>Orchard CMS - Simple Profile Package</title><link>http://www.themayneissue.com:80/memorystream/orchard-cms---simple-profile-package</link><description>&lt;p&gt;I started to do some work on profiles for a site we were building at work, and then we decided to jump ship on to Orchard. While Profiles haven't really been asked for as a requirement at work, i noticed the Orchard team have it on there back log, and as i wanted it and I'm a developer, why wait&amp;hellip; why not just write one!.&lt;/p&gt;
&lt;p&gt;This solution have is very basic Profiling - &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Forename, Middle name, Surname  &lt;/li&gt;
&lt;li&gt;Date Of Birth  &lt;/li&gt;
&lt;li&gt;Age &amp;ndash; Derived from DOB  &lt;/li&gt;
&lt;li&gt;Gender  &lt;/li&gt;
&lt;li&gt;Occupation  &lt;/li&gt;
&lt;li&gt;Image Name &amp;ndash; There is a setting to tell the url builder where to get your image from.  &lt;/li&gt;
&lt;li&gt;Website address  &lt;/li&gt;
&lt;li&gt;IsPrivate mode  &lt;/li&gt;
&lt;li&gt;Edit and View Mode + Anom viewing  &lt;/li&gt;
&lt;li&gt;Simple Profile Permissions attached to roles. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To install it&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Unzip The Orchard.Profiles Package to under the \Orchard.Web\Packages\Orchard.Profiles  &lt;/li&gt;
&lt;li&gt;Open the Orchard.sln solution  &lt;/li&gt;
&lt;li&gt;Right Click on Packages and Add existing Items Browse to and select \Orchard.Web\Packages\Orchard.Profiles\Orchard.Profile.csproj and Add  &lt;/li&gt;
&lt;li&gt;Right click on the Orchard.Web solutions References and Add a project reference to Orchard.Profiles to which you have just added.  &lt;/li&gt;
&lt;li&gt;Hit F5 And it should be plugged in, compiled and ready for use. &lt;/li&gt;
&lt;/ol&gt; &lt;ol&gt;Once you Register a user, you should be able to then go to http://localhost:30320/Profile/&amp;lt;UserName&amp;gt;&lt;/ol&gt; &lt;ol&gt;If you have any problems getting it working leave a comment and i would be happy to help.&lt;/ol&gt;
&lt;p&gt;Here is a couple screenshots of it working&amp;hellip;&lt;/p&gt;
&lt;p&gt;Viewing a Profile.. Note the Url in the address bar.&lt;/p&gt;
&lt;p&gt;&lt;a href="file:///C:/Users/Nicholas%20Mayne/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles756F3/image4.png"&gt;&lt;img style="display: inline; border: 0px;" title="image_thumb2" src="http://www.themayneissue.com/Media/WindowsLiveWriter/OrchardCMSSimpleProfilePackage_F2DD/image_thumb2_4fc28055-6f24-45bd-94f0-17e1972c66d8.png" border="0" alt="image_thumb2" width="422" height="295" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The Edit button that appears on the right, will only appear if you have permission to edit your profile. This can be set in the Permissions section in Orchard.&lt;/p&gt;
&lt;p&gt;If the profile has be set to private, then the page will redirect to a ProfilePrivateResult ONLY if you are attempting to view a profile other than your own.&lt;/p&gt;
&lt;p&gt;Editing a Profile is a little different, as i haven't plugged in all the pretty moving things.&lt;/p&gt;
&lt;p&gt;&lt;a href="file:///C:/Users/Nicholas%20Mayne/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles756F3/image9.png"&gt;&lt;img style="display: inline; border: 0px;" title="image_thumb5" src="http://www.themayneissue.com/Media/WindowsLiveWriter/OrchardCMSSimpleProfilePackage_F2DD/image_thumb5_b4078a21-89f7-4e04-981d-d27e0d49e20a.png" border="0" alt="image_thumb5" width="422" height="351" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just so you are aware, the Roles section down the bottom is only shown if a user can modify their roles, this is coming from Orchard.Roles.&lt;/p&gt;
&lt;p&gt;The Image Name will be the image i.e. AnImage.png, A Url helper will then fully qualify this based on a setting called Image Folder, which can be modified in the Orchard Settings Section.&lt;/p&gt;
&lt;p&gt;&lt;a href="file:///C:/Users/Nicholas%20Mayne/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles756F3/image13.png"&gt;&lt;img style="display: inline; border: 0px;" title="image_thumb7" src="http://www.themayneissue.com/Media/WindowsLiveWriter/OrchardCMSSimpleProfilePackage_F2DD/image_thumb7_03736e61-fa8d-4841-bf50-83e6cfbbf734.png" border="0" alt="image_thumb7" width="422" height="351" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Note the setting down the bottom. &lt;/p&gt;
&lt;p&gt;&lt;a href="file:///C:/Users/Nicholas%20Mayne/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles756F3/image17.png"&gt;&lt;img style="display: inline; border: 0px;" title="image_thumb9" src="http://www.themayneissue.com/Media/WindowsLiveWriter/OrchardCMSSimpleProfilePackage_F2DD/image_thumb9_972b92b8-84ec-4df2-af25-c9e71e7c6b92.png" border="0" alt="image_thumb9" width="422" height="175" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So if you add an image to Media/Profiles/Images &lt;/p&gt;
&lt;p&gt;&lt;a href="file:///C:/Users/Nicholas%20Mayne/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles756F3/image21.png"&gt;&lt;img style="display: inline; border: 0px;" title="image_thumb11" src="http://www.themayneissue.com/Media/WindowsLiveWriter/OrchardCMSSimpleProfilePackage_F2DD/image_thumb11_77581ebe-7750-42ad-8304-e518b147ab7c.png" border="0" alt="image_thumb11" width="422" height="175" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then you add that name to the ImageName field on the Profile Edit page then you should see something that looks like this&amp;hellip;&lt;/p&gt;
&lt;p&gt;Hit Save&amp;hellip; And Hey Presto!! You have an image&amp;hellip; granted, mine is a bit squashed!&lt;/p&gt;
&lt;p&gt;&lt;a href="file:///C:/Users/Nicholas%20Mayne/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles756F3/image25.png"&gt;&lt;img style="display: inline; border: 0px;" title="image_thumb13" src="http://www.themayneissue.com/Media/WindowsLiveWriter/OrchardCMSSimpleProfilePackage_F2DD/image_thumb13_98d0fc4e-24a1-4dc6-8f57-580ef98ace9f.png" border="0" alt="image_thumb13" width="422" height="216" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Anyways here is the code for download. &lt;/p&gt;
&lt;p&gt;Download Code (C#) -  &lt;/p&gt;
&lt;div id="scid:F60BB8FA-6F02-4999-8F5E-9DD4E92C4DA7:630aaf28-3c9f-490e-81da-e9647ddbb0d0" class="wlWriterSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;"&gt;
&lt;div&gt;&lt;a onclick="javascript: pageTracker._trackPageview('Orchard.Profiles - 46160.zip');" href="file:///C:/Users/Nicholas Mayne/AppData/Local/Temp/WindowsLiveWriter-429641856/supfiles756F3/Orchard.Profiles..46160.zip" target="_self"&gt;Orchard.Profiles - 46160.zip&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This will be an ongoing piece of work, but i will update this page, and add pages for more advanced features in the future.&lt;/p&gt;
&lt;p&gt;Let me know how you get on, and please feed back any Constructive criticism you have, as it will only make my work better for me to upload to you lot.&lt;/p&gt;
&lt;p&gt;This code was written in C# against Orchard Change set 46160.&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/orchard-cms---simple-profile-package</guid></item><item><title>Off Travelling – Take 2</title><link>http://www.themayneissue.com:80/memorystream/off-travelling-%E2%80%93-take-2</link><description>&lt;p&gt;Well i have handed my notice in at work to embark on a new travelling experience with Penny&amp;hellip; Here is the planned itinerary&amp;hellip;&lt;/p&gt;
&lt;p&gt;1. Fly to Boston&amp;hellip; Spend a couple nights there&lt;/p&gt;
&lt;p&gt;2. Next onwards to Maine&amp;hellip; I really want to give Ice Diving a go.. Sounds Cold huh.&lt;/p&gt;
&lt;p&gt;3. Pen wants to go to Niagara Falls, so i think we will go there&lt;/p&gt;
&lt;p&gt;4. After that Me and Pen are headed to my cousins Wedding Reception in Newtown, PA which should be awesome, and cheap!! &amp;ndash; Hopefully Kathy will do my laundry&lt;/p&gt;
&lt;p&gt;5. A couple days after that we fly to Lima in Peru and embark on the Inca Trail&lt;/p&gt;
&lt;p&gt;6. I would then like to do a Jungle Lodge overlooking the Amazon rainforest.&lt;/p&gt;
&lt;p&gt;7. After travelling around Peru for a while, and hitting one or two beaches, Pens idea! We are heading up to Ecuador&lt;/p&gt;
&lt;p&gt;8. Scuba Scuba around the Galapagos islands here i come!&lt;/p&gt;
&lt;p&gt;9. Fly home and look for a place to live and a job! &amp;ndash; Microsoft Hire Me!&lt;/p&gt;
&lt;p&gt;10. The End! &amp;ndash; Photos on my facebook! &lt;a title="http://www.facebook.com/nick.mayne?ref=name" href="http://www.facebook.com/nick.mayne?ref=name"&gt;http://www.facebook.com/nick.mayne?ref=name&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/off-travelling-%E2%80%93-take-2</guid></item><item><title>Complete Regular Expression for URL’s</title><link>http://www.themayneissue.com:80/memorystream/complete-regular-expression-for-url%E2%80%99s</link><description>&lt;p&gt;Today i was looking for a IsUrl(string) method to verify if a string is a URL or not and stumbled across this regex&amp;hellip;. &lt;a href="http://internet.ls-la.net/folklore/url-regexpr.html" target="_blank"&gt;http://internet.ls-la.net/folklore/url-regexpr.html&lt;/a&gt; - make sure you have your hard hats on for this one!&amp;hellip; Its the complete regex for a URL.&lt;/p&gt;
&lt;p&gt;Nick Out!&lt;/p&gt;</description><pubDate>Sat, 18 Jun 2011 16:44:30 GMT</pubDate><guid isPermaLink="true">http://www.themayneissue.com:80/memorystream/complete-regular-expression-for-url%E2%80%99s</guid></item></channel></rss>

