<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Look alive. Here comes a buzzard.</title>
	<atom:link href="http://blog.glenc.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.glenc.net</link>
	<description>Treading water in a sea of man-made confusion.</description>
	<lastBuildDate>Fri, 10 Jun 2011 05:10:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Document Database / NoSQL Fears</title>
		<link>http://blog.glenc.net/2011/06/09/document-database-nosql-fears/</link>
		<comments>http://blog.glenc.net/2011/06/09/document-database-nosql-fears/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 05:10:35 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[RavenDb]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=164</guid>
		<description><![CDATA[I&#8217;ve been having a lot of fun recently learning about and playing with RavenDb.  It&#8217;s a great document database solution for .NET.  The thing that immediately blew me away is how little friction there is getting up and going.  I am writing simple POCO objects and persisting them without having to deal with ORM mapping [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been having a lot of fun recently learning about and playing with RavenDb.  It&#8217;s a great document database solution for .NET.  The thing that immediately blew me away is how little friction there is getting up and going.  I am writing simple POCO objects and persisting them without having to deal with ORM mapping and other headaches.</p>
<p>However, there are a lot of naysayers out there spreading FUD about document databases.  Why would you need to move away from a relational model that enforces relationship constraints, allows for joins, and supports advanced querying and reporting??</p>
<p>Now, it&#8217;s perfectly valid to point those issues out.  If you are thinking of moving to a document database you need to know what you are sacrificing.  BUT &#8211; let&#8217;s talk about the benefits for just a moment.</p>
<p><strong>Document databases tend to be a closer map to your domain model than relational databases.</strong></p>
<p>Consider the scenario of persisting a customer:</p>
<p><code>public class Customer {<br />
&nbsp;&nbsp;public string Name { get; set; }<br />
&nbsp;&nbsp;public Address ShippingAddress { get; set; }<br />
&nbsp;&nbsp;public Address BillingAddress { get; set; }<br />
}</code></p>
<p>In a relational model you will likely have a Customers table and a CustomerAddresses table with references between the two for the addresses.  In the DB you will need to make sure the foreign keys are set up correctly and you will probably want deletes from the Customers table to cascade to the CustomerAddresses table.  Then you will probably want to use an ORM like NHibernate to map those tables to the customer entity itself.</p>
<p>Think about that for a moment &#8211; how much work did we just have to do just to persist a simple customer??  And the reason we had to do that work is because we have to transform our data from the format WE want it in &#8211; the domain model &#8211; to a format that our relational database understands &#8211; tables and columns.  That transformation takes real effort and thought.  And it continually bites us in the ass with select n+1 scenarios.</p>
<p>I think if we step back for a moment and forget all our history with relational databases and really look at the problems we are trying to solve, it will be easier to choose the best solution for our system.  Just because we&#8217;ve been building applications with relational databases for the past 20+ years doesn&#8217;t mean it&#8217;s the only way &#8211; or even the best way to go.</p>
<p>Sure with a document database we lose some of the relational power that something like SQL provides.  But I believe the gains in many systems could overshadow those losses.  And if we are designing our documents well then we won&#8217;t need as many relationships as we might have needed in a relational model.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2011/06/09/document-database-nosql-fears/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SPFarmInstaller &#8211; PowerShell Installation Scripts for SharePoint 2010</title>
		<link>http://blog.glenc.net/2011/03/16/spfarminstaller-powershell-installation-scripts-for-sharepoint-2010/</link>
		<comments>http://blog.glenc.net/2011/03/16/spfarminstaller-powershell-installation-scripts-for-sharepoint-2010/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 16:43:27 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=156</guid>
		<description><![CDATA[First off, let me say that the AutoSPInstaller project is great. It&#8217;s awesome that we have a community driven effort underway to automate SharePoint 2010 installation and configuration. But I recently started building out a fairly large and complex SharePoint farm and wasn&#8217;t happy with certain aspects of the AutoSPInstaller script. Specifically, I wanted a [...]]]></description>
			<content:encoded><![CDATA[<p>First off, let me say that the <a href="http://autospinstaller.codeplex.com/">AutoSPInstaller</a> project is great.  It&#8217;s awesome that we have a community driven effort underway to automate SharePoint 2010 installation and configuration.  But I recently started building out a fairly large and complex SharePoint farm and wasn&#8217;t happy with certain aspects of the AutoSPInstaller script.  Specifically, I wanted a better configuration for a multi-server environment and I wanted more control over what was installed where.</p>
<p>So I put together a new set of scripts called <strong><a href="https://github.com/glenc/SPFarmInstaller" target="_blank">SPFarmInstaller</a></strong>.</p>
<p>The core of SPFarmInstaller is the <a href="https://github.com/glenc/SPFarmInstaller/blob/master/src/farmConfig.xml" target="_blank">Farm Configuration XML file</a>.  Within this file you define everything about your farm.  This is also the first key difference between SPFarmInstaller and AutoSPInstaller.  With SPFarmInstaller you only have one farm configuration file.  This file is the same regardless of which server you are working on.</p>
<p>Within your Farm Configuration File you define:</p>
<ul>
<li>Basic farm information like the DB server, Config DB name, outgoing email settings, etc.</li>
<li>Managed accounts to be used by your services and application pools</li>
<li>Servers in your farm and which services are running on them</li>
<li>Service applications such as Search, MMS, etc</li>
</ul>
<p>I&#8217;ll provide more detail on the Farm Configuration file in a future post.</p>
<p>The next step is to copy the XML File and the SPFarmInstaller scripts to each server in your farm.  You will also want to make the SharePoint installation bits available to each server in your farm.</p>
<p>Next comes the second major change from AutoSPInstaller.  Rather than one installation script that does everything, SPFarmInstaller has each step of the installation in a separate script.  This gives you greater control over what you configure and when.  It also makes it easy to snapshot your servers at each step of the way if you are using virtual machines.</p>
<p>So, there are 4 major scripts that you will use:</p>
<ul>
<li><strong>00-download-prereqs.ps1</strong> &#8211; this script is optional and will download the SharePoint prerequisite files to the local server</li>
<li><strong>01-install-bits.ps1</strong> &#8211; this script must be run on each server in your farm.  It will install the SharePoint bits (including prerequisites) but nothing else.  It will not configure or join a farm.  I like to run this script in parallel on all of my servers and then snapshot them so I have a clean installation of SharePoint I can roll back to if necessary.</li>
<li><strong>02-create-or-join-farm.ps1</strong> &#8211; this script is run first on your Central Admin server where it will create a new SharePoint farm and provision the Central Admin web app.  After that it is run on each of the other farms in your environment joining each server to the existing farm.  If you want you can stop now and continue configuring your farm by hand.  But why configure by hand when you can use the next script? <img src='http://blog.glenc.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><strong>03-configure-farm.ps1</strong> &#8211; this is the last script to run and it should be run from the Central Admin server only.  This script will set up your server topology (starting and stopping various SharePoint services on each server in your farm), create your web applications, and provision all service applications you have defined.</li>
</ul>
<p>Check out the <a href="https://github.com/glenc/SPFarmInstaller/blob/master/README.md" target="_blank">Read Me</a> for detailed instructions on running these scripts.</p>
<p>As a warning, I wouldn&#8217;t consider this 100% complete just yet.  I&#8217;m using it for building out several production farms so I know the code works for my needs.  But I haven&#8217;t tested every configuration and option.</p>
<p>You can download the scripts here: <a href="https://github.com/glenc/SPFarmInstaller/zipball/master" target="_blank">https://github.com/glenc/SPFarmInstaller/zipball/master</a></p>
<p>Again, let me give full credit to the AutoSPInstaller project.  Most of the functions and code in my scripts have been pulled from that project or greatly inspired by their approach.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2011/03/16/spfarminstaller-powershell-installation-scripts-for-sharepoint-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Noobie Thoughts on FubuMVC</title>
		<link>http://blog.glenc.net/2011/01/23/noobie-thoughts-on-fubumvc/</link>
		<comments>http://blog.glenc.net/2011/01/23/noobie-thoughts-on-fubumvc/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 19:02:14 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[FubuMVC]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=141</guid>
		<description><![CDATA[I&#8217;ve been playing with FubuMVC for about a week for a new project I&#8217;m working on (more to come on that soon).  So far I really like it, but it&#8217;s definitely not for everyone.  I thought I would start blogging about some of my experiences learning the framework. There will probably be a few things [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing with <a href="http://fubumvc.com" target="_blank">FubuMVC</a> for about a week for a new project I&#8217;m working on (more to come on that soon).  So far I really like it, but it&#8217;s definitely not for everyone.  I thought I would start blogging about some of my experiences learning the framework.</p>
<p>There will probably be a few things I&#8217;m wrong about or don&#8217;t understand because I&#8217;m still new to FubuMVC.  But I want to capture my thoughts and impressions as somebody just starting out to help others who may be in a similar situation, or are evaluating the framework for their own projects.</p>
<h2>Good: Conventions Everywhere</h2>
<p>I think this is where FubuMVC really shines.  If you can define the conventions for your application up front then FubuMVC is going to save you a lot of time.  For example, FubuMVC lets you define an HTTP Method convention which can automatically apply to all of your controller actions.  You could define this convention based on method name (e.g. all Create, Update, or Delete methods only accept POST), input model type, or just about anything you want.</p>
<p>Here&#8217;s a snippet of code from my current application.  It specifies that all controller methods which accept an input model ending with &#8220;Command&#8221; require the POST HTTP method.<br />
<script src="https://gist.github.com/792235.js?file=gistfile1.cs"></script></p>
<p>This is a bit like Aspect Oriented Programming in that you can define cross-cutting rules which are defined once and applied everywhere by the framework.</p>
<p><b>Routing/URL Conventions</b><br />
I really love the way routing/URL conventions are defined in FubuMVC.  When working in ASP.NET MVC I find myself hard-coding a lot of routes to get them looking how I want.  Defining routes in Fubu is quite a bit different from ASP.NET MVC, but I was able to configure my routing very quickly.  FubuMVC also has a really nice diagnostics application that lets you see all routes you have defined for the entire application.</p>
<p><b>HTML Conventions</b><br />
I haven&#8217;t dug into the HTML conventions yet but on the surface they seem very powerful.  For example, you can define a convention where CSS classes are automatically added to lists for even/odd items.  This is the kind of thing that should make it easy to apply cross-application UI changes easily.  </p>
<p>In practice I think this will be a bit like CSS where as long as you create consistent HTML, style sheet can save you a lot of time in layout and formatting.</p>
<h2>Bad: Sooooo many Models!</h2>
<p>Okay this one took some getting used to.  FubuMVC uses a &#8220;One Model In, One Model Out&#8221; (OMIOMO) approach for controller actions.  That means that each controller action can only accept one model as a parameter, and returns a single model back to the framework.  In ASP.NET MVC you might have a controller action that takes one or more simple parameters and returns an ActionResult, but in Fubu you must encapsulate everything into models.<br />
<script src="https://gist.github.com/792273.js?file=FubuMVC_OMIOMO.cs"></script></p>
<p>This is the kind of thing that will turn off a lot of potential users.  It looks &#8220;enterprisey&#8221; and feels like overkill at first.  I didn&#8217;t want to create a ton of view and input models for my controllers so I tried creating generic models that would be used by many actions.  For example, I created an EntityRequest model which had a single Id property that I could pass into all of my View, Edit, and Delete controller actions.<br />
<script src="https://gist.github.com/792280.js?file=FubuMVC_SharedModel.cs"></script></p>
<p>This worked at first, but in the long run it made the UI code a lot harder and more complicated.  Creating links or form targets in FubuMVC is really easy if you can just give it a model.  Honestly I&#8217;m not even sure how to construct a link to a controller action method.<br />
<script src="https://gist.github.com/792267.js?file=FubuMVCLink.html"></script></p>
<p>In the long run I decided to simply create models for my different types of actions.  And although this is quite a bit different from classic ASP.NET MVC, I actually like it better.  It lets me de-couple the UI from the back-end.  The UI simply says &#8220;give me the link to some model&#8221; and Fubu gets to figure out what actually handles that model.</p>
<h2>Good: Moving away from Controllers</h2>
<p>Once I accepted the OMIOMO approach I decided to make another change and do away with my controllers.  Instead I will be adopting a Command/Query approach with Handlers on the back end to handle each command or query.  I like this because my handlers can be a bit more generic and not tied so much to the UI.</p>
<p>Now even if you don&#8217;t want to move away from a Controller model, I think the real power here is that FubuMVC will still work just fine even if you want to adopt a different architecture.</p>
<h2>Bad: Limited support for other view engines</h2>
<p>Unfortunately the choice of view engines is limited to ASP.NET Web Forms and Spark.  That being said, the ASP.NET view engine is pretty close to standard ASP.NET MVC.  But I&#8217;d really like support for Razor or NHaml.  I&#8217;m sticking with ASP.NET for now and it&#8217;s not that bad.</p>
<h2>Bad: Documentation is still sparse</h2>
<p>This comes with any open source project to a certain extent.  But FubuMVC is pretty lacking in documentation at the moment.  The <a href="http://guides.fubumvc.com/" target="_blank">getting started guides</a> will only take you so far.  Once you start trying to build your own application you will likely hit the limits of what you can learn from the guides themselves.</p>
<p>Another thing that complicates things is that FubuMVC went through a reboot a while back so there are some blog entries out there that are out of date with the current version.  Many of the ideas in those posts are still valid, but syntax is slightly different in many cases.</p>
<p>Ultimately I&#8217;ve relied heavily on the FubuMVC source itself to figure out how to do things.  For anyone trying to build a non-trivial application with Fubu it&#8217;s probably a requirement.</p>
<h2>Final Thoughts</h2>
<p>Lastly I thought I would compare FubuMVC to other frameworks/approaches out there.  In many ways FubuMVC can feel quite a bit heavier and more &#8220;enterprisey&#8221; than other frameworks.  But I really think it depends on the type of application you are building and what point in the application lifecycle you are at.</p>
<p>When you are just starting out, FubuMVC can feel very heavy getting everything set up.  If you are building a small application with little functionality, you are probably better off with WebMatrix or ASP.NET MVC.  WebMatrix especially gets you up and running very very fast.</p>
<p>But as your application grows and becomes more complex, FubuMVC should actually start to feel lighter and more flexible than those other frameworks.  I&#8217;ve had many experiences with ASP.NET MVC where a change in design requires you to touch many different controllers, views, etc.  If you are following your conventions these kinds of changes should be much faster and lighter in FubuMVC.  At least that&#8217;s my impression at this point.</p>
<p>Perhaps a good approach is to start with something super light like WebMatrix and get a fast prototype up and running.  Once your application starts to take shape and you can better visualize your conventions it might make sense to jump over to FubuMVC for the final implementation.</p>
<p>So far I am really enjoying FubuMVC even with all of the ups and downs.  I&#8217;ll keep blogging about my experience building a non-trivial application with Fubu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2011/01/23/noobie-thoughts-on-fubumvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FubuMVC Diagnostics returns 404</title>
		<link>http://blog.glenc.net/2011/01/22/fubumvc-diagnostics-returns-404/</link>
		<comments>http://blog.glenc.net/2011/01/22/fubumvc-diagnostics-returns-404/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 02:03:31 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[FubuMVC]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=138</guid>
		<description><![CDATA[I&#8217;m starting out with FubuMVC and had a heck of a time resolving a strange error.  Whenever I would try to navigate to the _fubu diagnostics area it would just give me a 404.  It took me quite a while to find the problem because I&#8217;m still very new to FubuMVC and couldn&#8217;t figure out [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m starting out with <a href="http://fubumvc.com" target="_blank">FubuMVC</a> and had a heck of a time resolving a strange error.  Whenever I would try to navigate to the _fubu diagnostics area it would just give me a 404.  It took me quite a while to find the problem because I&#8217;m still very new to FubuMVC and couldn&#8217;t figure out where in my configuration the error was originating from.</p>
<p>Turns out one of my controllers didn&#8217;t conform to the &#8220;One Model In One Model Out&#8221; rule.  I had created a controller method that accepted a single int id parameter.  FubuMVC didn&#8217;t like this and wanted a full model.  I was hoping it would consider a single parameter as a model even if it wasn&#8217;t a full class.  Once I converted my methods to the OMIOMO pattern everything started working again.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2011/01/22/fubumvc-diagnostics-returns-404/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nu &#8211; Package Management for .NET Open Source</title>
		<link>http://blog.glenc.net/2010/08/31/nu-package-management-for-net-open-source/</link>
		<comments>http://blog.glenc.net/2010/08/31/nu-package-management-for-net-open-source/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 02:34:54 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=135</guid>
		<description><![CDATA[I heard about Nu on the Herding Code podcast and was immediately interested.  Ruby Gems is a great way to distribute open source libraries and manage dependencies.  The .NET scene has been struggling with this issue for quite a while so it&#8217;s great to see somebody take on this issue. Not only does Nu make [...]]]></description>
			<content:encoded><![CDATA[<p>I heard about <a href="http://groups.google.com/group/nu-net" target="_blank">Nu</a> on the <a href="http://herdingcode.com/?p=272" target="_blank">Herding Code</a> podcast and was immediately interested.  Ruby Gems is a great way to distribute open source libraries and manage dependencies.  The .NET scene has been struggling with this issue for quite a while so it&#8217;s great to see somebody take on this issue.</p>
<p>Not only does Nu make it super simple to add existing libraries to your project, but it&#8217;s also a great resource for finding <a href="http://nu.wikispot.org/Current_Packages" target="_blank">existing open source projects</a> out there.</p>
<p>I just happened to be building a brand new system so I&#8217;ll go through the steps I took to get Nu up and running.</p>
<ol>
<li>Installed Ruby for Windows using the latest <a href="http://rubyinstaller.org/" target="_blank">Ruby Installer</a></li>
<li>Opened a command prompt and ran the following commands:<br />
<code><br />
c:\gem update --system<br />
c:\gem update<br />
c:\gem install activesupport<br />
c:\gem install nu</p>
<p></code></li>
<li>Next I navigated to a new project folder and typed the following commands to add NHibernate and FluentNHibernate:<br />
<code><br />
nu install nhibernate<br />
nu install fluentnhibernate<br />
</code></li>
</ol>
<p>That&#8217;s it &#8211; super simple!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2010/08/31/nu-package-management-for-net-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Copying a web part page including web parts</title>
		<link>http://blog.glenc.net/2009/10/15/copying-a-web-part-page-including-web-parts/</link>
		<comments>http://blog.glenc.net/2009/10/15/copying-a-web-part-page-including-web-parts/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 17:09:31 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[Office System]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=129</guid>
		<description><![CDATA[Out of the box, there is no way to copy a web part page and have it retain all of its web parts &#8211; including List View web parts.  I tried the following methods: Download .aspx from Pages doc lib, rename and re-upload.  All list view web parts are stripped during this process. Use the [...]]]></description>
			<content:encoded><![CDATA[<p>Out of the box, there is no way to copy a web part page and have it retain all of its web parts &#8211; including List View web parts.  I tried the following methods:</p>
<ul>
<li>Download .aspx from Pages doc lib, rename and re-upload.  All list view web parts are stripped during this process.</li>
<li>Use the Send To option to make a copy of the .aspx in another folder or doc lib.  Same result as above &#8211; all web parts are stripped.</li>
<li>Use the Content Structure view to copy the page.  Same result, web parts are stripped.</li>
</ul>
<p>Finally I found a solution &#8211; although it&#8217;s a bit of a hack in my opinion: SharePoint Designer workflow.  The SPD workflow action &#8220;Copy List Item&#8221; will make a copy of a page and retain all web parts including list view web parts.  Here&#8217;s how you can accomplish this:</p>
<ol>
<li>Open SPD, open your site, and create a new Workflow.  Call it &#8220;Copy Page&#8221; or something like that.</li>
<li>Target your Pages library (or wherever your web part pages live) for the workflow and specify that it should be started manually.</li>
<li>Add a single action:  Copy List Item.  When adding the list item, you can select &#8220;Current Item&#8221; for the page to copy, and then specify the target list as the same Pages library.</li>
</ol>
<p>Now you&#8217;ll be able to start the Copy Page workflow on any page in your pages library.  When it creates a copy it simply appends the date and time to the file name so you won&#8217;t wind up over-writing the existing page.</p>
<p>With a little more work it should be possible to create an Initiation Variable for your workflow and rename the page as a part of the workflow.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2009/10/15/copying-a-web-part-page-including-web-parts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducing Sublime &#8211; Easy Subversion Management for Windows</title>
		<link>http://blog.glenc.net/2009/08/21/introducing-sublime-easy-subversion-management-for-windows/</link>
		<comments>http://blog.glenc.net/2009/08/21/introducing-sublime-easy-subversion-management-for-windows/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 18:26:28 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=126</guid>
		<description><![CDATA[I&#8217;d like to take a few moments for some shameless self promotion.  Yesterday I was happy to release Sublime 1.0.  Sublime is a Subversion management application designed for Microsoft-centric environments. Subversion is an excellent SCM tool &#8211; arguably the leading SCM tool available today. But with its roots firmly in the open source / linux [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d like to take a few moments for some shameless self promotion.  Yesterday I was happy to release <a title="Sublime - Easy Subversion Management for Windows" href="http://sublimesvn.com" target="_blank">Sublime 1.0</a>.  Sublime is a Subversion management application designed for Microsoft-centric environments.</p>
<p>Subversion is an excellent SCM tool &#8211; arguably the leading SCM tool available today. But with its roots firmly in the open source / linux community, there aren&#8217;t a lot of Windows-based applications for managing subversion.  Tools like VisualSVN server make it easy to install and configure Subversion, but it requires access to the server for management.  Web-based Subversion apps can be found, but they are often built in PHP and may not fit with a &#8220;Microsoft Shop&#8217;s&#8221; IT strategy.</p>
<p>Sublime was designed for exactly these reasons.  Sublime provides a web-based management tool for your Subversion infrastructure.  It allows users to <a title="Browse subversion repositories" href="http://sublimesvn.com/tour/public-home.html" target="_blank">browse</a> and <a title="Create subversion repositories in Sublime" href="http://sublimesvn.com/tour/public-create-repository.html" target="_blank">create repositories</a>, <a title="Manage subversion permissions in Sublime" href="http://sublimesvn.com/tour/public-edit-repository-permissions.html" target="_blank">manage permissions</a>, and enable email alerts all from a simple web interface.  Server administrators can configure <a title="Automated subversion backups" href="http://sublimesvn.com/tour/admin-backups.html" target="_blank">automated backups</a>, <a title="Manage subversion users" href="http://sublimesvn.com/tour/admin-manage-users.html" target="_blank">manage users</a> and groups, and <a title="Monitor subversion server health" href="http://sublimesvn.com/tour/admin-home.html" target="_blank">monitor server health</a> all from a web browser.  The Sublime installer will automatically install Subversion if required making the setup process extremely fast and simple.</p>
<p>Ultimately, Sublime makes it easy for dev teams to use Subversion without any bottlenecks.  Users don&#8217;t have to wait for IT to create repositories, users can manage their own password, repository owners can manage permissions, etc.  At the same time, IT has the ability to manage the server and ensure data is backed up all within a Windows-based environment they are familiar with.  Everybody&#8217;s happy <img src='http://blog.glenc.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I&#8217;m super excited about this release.  If you use Subversion today, or are thinking of moving to Subversion from a different SCM tool (or *gasp* no SCM tool), then I would encourage you to take a look at the <a href="http://sublimesvn.com" target="_blank">Sublime website</a> for more information.</p>
<p>Okay.  Plug over.  We now return you to your regularly scheduled blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2009/08/21/introducing-sublime-easy-subversion-management-for-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looking forward to SharePoint 2010</title>
		<link>http://blog.glenc.net/2009/08/14/looking-forward-to-sharepoint-2010/</link>
		<comments>http://blog.glenc.net/2009/08/14/looking-forward-to-sharepoint-2010/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 22:42:04 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[Office System]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=122</guid>
		<description><![CDATA[One of my biggest complaints about SharePoint 2007 is that as a developer, it is virtually impossible to employ professional development techniques when building SharePoint solutions.  I&#8217;m talking about source control, continuous integration, test driven development, etc.  Obviously you can use these techniques when it comes to custom web parts, event receivers, and other &#8220;code [...]]]></description>
			<content:encoded><![CDATA[<p>One of my biggest complaints about SharePoint 2007 is that as a developer, it is virtually impossible to employ professional development techniques when building SharePoint solutions.  I&#8217;m talking about source control, continuous integration, test driven development, etc.  Obviously you can use these techniques when it comes to custom web parts, event receivers, and other &#8220;code only&#8221; solutions, but when you&#8217;re talking about larger projects that include content types, SharePoint Designer workflows, custom lists, in addition to custom code, it simply isn&#8217;t practical to try and cram everything into source control.  It&#8217;s just too much effort.</p>
<p>From what I&#8217;ve seen so far, many of these issues will be resolved with SharePoint 2010 and Visual Studio 2010.  I&#8217;m looking forward to digging into a real project so I can find out where the &#8220;gotchas&#8221; are (and I&#8217;m sure there will be plenty), but so far I&#8217;m optimistic.  I am hopeful that as a developer, I will be able to bring professional development techniques to all areas of a SharePoint project.</p>
<p>In my opinion this is critical if Microsoft wants to make SharePoint a true application development platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2009/08/14/looking-forward-to-sharepoint-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SOLVED: Console Configuration File Error: File Not Found: The system cannot find the file specified. (Exception from HRESULT: 0&#215;80070002)</title>
		<link>http://blog.glenc.net/2009/08/04/solvedconsole-configuration-file-error/</link>
		<comments>http://blog.glenc.net/2009/08/04/solvedconsole-configuration-file-error/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 20:52:40 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=118</guid>
		<description><![CDATA[I&#8217;ve been wrestling with this error off and on for a while now.  It shows up in the event log of a production MOSS server I help manage.  Here is the error message: Event Type: Error Event Source: Office SharePoint Server Event Category: Publishing Event ID: 5165 Date: 8/4/2009 Time: 12:57:51 PM User: N/A Computer: [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been wrestling with this error off and on for a while now.  It shows up in the event log of a production MOSS server I help manage.  Here is the error message:</p>
<blockquote><p>Event Type:<span> </span>Error<br />
Event Source:<span> </span>Office SharePoint Server<br />
Event Category:<span> </span>Publishing<br />
Event ID:<span> </span>5165<br />
Date:<span> </span>8/4/2009<br />
Time:<span> </span>12:57:51 PM<br />
User:<span> </span>N/A<br />
Computer:<span> </span>SERVER<br />
Description:<br />
Console Configuration File Error: File Not Found: The system cannot find the file specified. (Exception from HRESULT: 0&#215;80070002)<br />
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.</p></blockquote>
<p><a href="http://www.google.com/search?client=safari&amp;rls=en-us&amp;q=Console+Configuration+File+Error:+File+Not+Found:+The+system+cannot+find+the+file+specified.+(Exception+from+HRESULT:+0x80070002)&amp;ie=UTF-8&amp;oe=UTF-8" target="_blank">Googling</a> for this error provides some information, but nothing definitive.  After turning up the logging level for the Publishing category, I was finally able to find enough information to locate the root cause.</p>
<p>This problem occurs when you are using a Master Page referencing SharePoint Publishing controls in a site collection that does not have the Publishing Infrastructure feature activated.  In my case, I was using a Master Page with the Publishing Console control on the page.  This Publishing Console was looking for some files in the Master Page gallery (_catalogs/masterpage/EditingMenu/CustomEditingMenu.xml etc) which don&#8217;t exist if the Publishing Infrastructure is not activated.  After I activated the Publishing Infrastructure, the errors went away.</p>
<p>However, ultimately the real solution was to remove the publishing features from the Master Page since I wasn&#8217;t using them anyway.</p>
<p>This problem came about when we re-used the master page from our main intranet on users&#8217; My Sites.  Since the My Site doesn&#8217;t use the publishing features, every time someone hit a my site, these errors would show up in the event log.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2009/08/04/solvedconsole-configuration-file-error/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Automated backups for VMWare ESXi</title>
		<link>http://blog.glenc.net/2008/12/27/automated-backups-for-vmware-esxi/</link>
		<comments>http://blog.glenc.net/2008/12/27/automated-backups-for-vmware-esxi/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 02:58:00 +0000</pubDate>
		<dc:creator>glenc</dc:creator>
				<category><![CDATA[ESXi]]></category>
		<category><![CDATA[VMWare]]></category>

		<guid isPermaLink="false">http://blog.glenc.net/?p=112</guid>
		<description><![CDATA[Setting up automated backups for ESXi can be a little tricky. After quite a bit of searching I finally came up with these steps that worked for me. I don&#8217;t take credit for any of these. I&#8217;m just providing you with the steps that I followed and the posts that helped me. DISCLAIMER: There are [...]]]></description>
			<content:encoded><![CDATA[<p>Setting up automated backups for ESXi can be a little tricky.  After quite a bit of searching I finally came up with these steps that worked for me.  I don&#8217;t take credit for any of these.  I&#8217;m just providing you with the steps that I followed and the posts that helped me.</p>
<p><strong><span style="color: #ff0000;">DISCLAIMER: There are some unsupported steps here.  Proceed at your own risk!</span></strong></p>
<p><strong>Step 1:  Enable ssh access on your ESXi host.</strong> To do that, follow these steps (originally from <a href="http://www.vm-help.com/esx/esx3i/ESXi_enable_SSH.php">this post</a>).</p>
<p><em>NOTE: You actually don&#8217;t have to enable ssh for this, I just find it convenient to have remote access to the host machine.  If you don&#8217;t want to enable ssh, perform steps 1-3 below, then skip on to section 2.  When you reach section 3, rather than using ssh, you&#8217;ll just execute the commands directly on the host machine at the console.</em></p>
<ol>
<li>From the console on your host (actually on the host machine &#8211; not using the Remote Client), press ALT-F1</li>
<li>Type in the text &#8220;unsupported&#8221; and press ENTER.  Note: the text will not appear as you type.</li>
<li>Enter the root password</li>
<li>Enter the command
<pre name="code" class="bash">vi /etc/inetd.conf</pre>
</li>
<li>Find the line starting with &#8220;#ssh&#8221;.  You can search by pressing / and then typing ssh and pressing Enter.</li>
<li>Once you&#8217;ve found that line, place the cursor on the # and press x.  This should remove the # character.</li>
<li>Now type
<pre name="code" class="bash">:wq!</pre>
<p> and press ENTER to save your changes.</li>
<li>Next you must restart the inetd process.  To do that, you first need the process id.  At the console, enter
<pre name="code" class="bash">ps | grep inetd</pre>
<p>You should get something that looks like this:</p>
<pre name="code" class="bash">1273 1273 busybox      inetd</pre>
<p>In this case, 1273 is the process ID.  To kill the process enter kill -HUP &lt;process id&gt;.  So in this case, you would enter the following command:</p>
<pre name="code" class="bash">kill -HUP 1273</pre>
</li>
<li>SSH is now enabled on your ESXi host machine.  To test this you&#8217;ll need an ssh client.  I&#8217;m using a mac so I can open terminal and enter the following command:
<pre name="code" class="bash">ssh root@&lt;myhost&gt;</pre>
<p>If you&#8217;re using windows you may need something like <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTY</a> or <a href="http://www.cygwin.com/">Cygwin</a>.</li>
</ol>
<p><strong>Step 2: Configure your backup datasource</strong></p>
<p>Next you need to figure out where your backups will be stored.  It can be on the ESXi host if you like, but really it should be on a SAN or NAS or something like that.  I&#8217;m using a <a href="http://www.netgear.com/Products/Storage/ReadyNASNVPlus.aspx">Netgear ReadyNAS NV+</a> and it works great.</p>
<ol>
<li>Create a share where your backups will be stored and call it something like &#8220;backups&#8221;.  Make sure that anyone can read/write to this share.</li>
<li>Open the VMWare Infrastructure Client and connect to your host machine as root.</li>
<li>Go to the <strong>Configuration</strong> tab for the host and click <strong>Storage</strong>.</li>
<li>Click <strong>Add Storage&#8230;</strong> and create a new datastore pointing to the share you created in step 1.  Call this datastore something descriptive&#8230;  like &#8220;backups&#8221; <img src='http://blog.glenc.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ol>
<p><strong>Step 3: Set up your backup script.</strong></p>
<p>I found <a href="http://communities.vmware.com/docs/DOC-8760">this great backup script</a>.  It lets you specify the VMs you want to backup in a separate text file which makes it really easy to add new VMs to the rotation.  It also lets you keep a rotating number of VMs if you don&#8217;t want to over-write each backup daily.</p>
<ol>
<li><a href="http://communities.vmware.com/docs/DOC-8760">Download the backup script</a>.</li>
<li>Copy it to the same backup share you created in the last section.  You can create a directory called _scripts to keep it separate from the actual backups.</li>
<li>Open the script and customize the variables at the top.  In my case, all I had to modify was the <strong>VM_BACKUP_VOLUME</strong> variable.  If you named your datastore &#8220;backups&#8221; you can edit this line to look like this:
<pre name="code" class="bash">VM_BACKUP_VOLUME=/vmfs/volumes/backups</pre>
<p> </li>
<li>Create a new text file in the same directory as the backup script called VMs.txt.  In this file enter the name of each VM you want to back up.  Each VM name should be on a new line.  Your file should look something like this:
<pre name="code" class="bash">VM1
VM2
A_THIRD_VM</pre>
</li>
<li>Connect to your host using ssh i.e. <strong>ssh root@&lt;myhost&gt;</strong></li>
<li>Enter this command:
<pre name="code" class="bash">vi /var/spool/cron/crontabs/root</pre>
</li>
<li>Move the cursor to the very end of the file.  Press <strong>a</strong>.  This will enter edit mode.</li>
<li>Press Enter to create a new line and then add the following text:
<pre name="code" class="bash">02 02 * * *  sh /vmfs/volumes/backups/_scripts/ghettoVCB.sh /vmfs/volumes/backups/_scripts/VMs.txt</pre>
<p>This will run the backup script at 2:02 AM every day.  You can change the frequency or time of day if you like.  This <a href="http://www.adminschoice.com/docs/crontab.htm">crontab reference</a> is helpful.</li>
<li>At this point your entire file should look something like this:
<pre name="code" class="bash"> #syntax : minute hour day month dayofweek command
01 01 * * * /sbin/tmpwatch.sh
01 * * * * /sbin/auto-backup.sh #first minute of every hour (run every hour)
00,10,20,30,40,50 * * * * /sbin/decodeSel.sh #Every 10 minutes, translate the latest IPMI SEL data
02 02 * * *  sh /vmfs/volumes/backups/_scripts/ghettoVCB.sh /vmfs/volumes/backups/_scripts/VMs.txt
</pre>
<p>If you are satisfied, press Escape.</li>
<li>Type the following command to save the file and exit:<code>:wq!</code></li>
<li>The backups are now scheduled</li>
</ol>
<p>At this point, you now have backups scheduled to run every day at 2:02 AM.  You can change which VMs are backed-up by editing the VMs.txt file you created.  You could even set up multiple cron jobs with different backup frequencies, and different VMs.txt files to back up different VMs at different times.</p>
<p>Before finishing however, you might want to do a test run.  If you are still connected to the host machine using ssh, enter the following command:</p>
<pre name="code" class="bash">sh /vmfs/volumes/backups/_scripts/ghettoVCB.sh /vmfs/volumes/backups/_scripts/VMs.txt</pre>
<p><strong>IMPORTANT: This will take a while if you have large VMs.  You may want to edit VMs.txt to target a single small VM as a test run.  If it works for that, it should work for the rest.</strong></p>
<p>One last thing.  Unfortunately, the crontabs/root file isn&#8217;t saved after a reboot.  In order to avoid adding the scheduled job after each reboot you may have to follow one of the <a href="http://communities.vmware.com/message/1111591#1111591">techniques described here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.glenc.net/2008/12/27/automated-backups-for-vmware-esxi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

