<?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:rssdatehelper="urn:rssdatehelper"><channel><title>Ricky Beard - http://www.rickybeard.com</title><link>http://www.rickybeard.com</link><pubDate></pubDate><generator>umbraco</generator><description></description><language>en</language><item><category>umbraco</category><category>medium trust</category><category>mysql</category><title>Running Umbraco on Rackspace Cloud Sites</title><link>http://www.rickybeard.com/blog/2010/9/2/running-umbraco-on-rackspace-cloud-sites</link><description><![CDATA[ 
<p>Here at <a href="http://www.triotechnologies.net"
title="Trio Technologies, LLC.">Trio</a>, we are currently in the
process of moving all of our websites from our local datacenter to
<a
href="http://www.rackspacecloud.com/cloud_hosting_products/sites"
title="Rackspace Cloud Sites">Rackspace Cloud Sites</a>. That means
moving a few Umbraco installations into a medium trust environment.
To make things more challenging, I made the decision to convert
everything to MySql as well.&nbsp;I decided to use this blog as the
guinea pig and I have to say, everything worked out really
well.</p>

<p>So, I&nbsp;thought I would write this post as a reminder to
myself of the process&nbsp;and to share my experience (and screw
ups) with everyone. Here we go!</p>

<h4>Upgrade</h4>

<p>First, I went ahead and upgraded this blog to Umbraco 4.5.2. You
can find an <a
href="http://our.umbraco.org/wiki/install-and-setup/upgrading-an-umbraco-installation"
 title="Upgrading an umbraco installation">upgrade guide&nbsp;on
our.umbraco.org</a>.</p>

<h4>MySql</h4>

<p>To convert everything to MySql, I simply created a fresh Umbraco
installation running MySql and installed a package (containing all
of my content, templates, doc types, xslt, etc.)&nbsp;that I
created from the original blog.</p>

<p>Here is where I screwed up.</p>

<p>To deploy my blog to Rackspace, I simply did a backup of my
local&nbsp;MySql database and restored it to the server
on&nbsp;Rackspace using MySql Administrator. I was left with an
exception that told me that the table <strong>UMBRACODOMAINS did
not exist</strong>. Of course it did exist and after some research
I found a solution to the problem.</p>

<p>MySql has a <a
href="http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html"
 title="8.2.2. Identifier Case Sensitivity">configurable
identifier</a> called <strong>lower_case_table_names</strong> that
has a different default value based on the OS that MySql resides
on.</p>

<p>My local installation is on Windows XP, so the default value is
1. That means that all table names will be converted to lowercase
and that name comparisons <strong>ARE NOT</strong> case
sensitive.</p>

<p>That means when I installed Umbraco on my local server, all of
my table names were converted to lowercase. However,&nbsp;queries
from Umbraco use uppercase table names.&nbsp;&nbsp;Again, this is
not a probem on Windows becase comparisons are not case
sensitive.</p>

<p>The problem is that Rackspace runs MySql on Linux where the
default value is 0. That means that all table names are stored
using the lettercase specified in the <strong>CREATE TABLE</strong>
statement and comparisons <strong>ARE</strong> case sensitive.</p>

<p>Since I did a backup/restore from my local installation, all of
the table names on the Rackspace server were in lowercase,
thus&nbsp;causing the exception.</p>

<p>To solve the problem, I simply added the following&nbsp;under
the <strong>[mysqld]</strong> section of <strong>C:\Program
Files\MySQL\MySQL Server 5.1\my.ini</strong>:</p>

<p>[mysqld]<br />
<strong>lower_case_table_names=0</strong></p>

<p>Now, when I create local Umbraco installations running MySql,
the table names will be left in uppercase making the databases
interchangeable with MySql on Rackspace.</p>

<h4>Web.config</h4>

<p>Next, I set the following in web.config.</p>

<pre class="brush:xml;first-line:1;">
&lt;add key="umbracoUseMediumTrust" value="true" /&gt;
</pre>

<p>Some instructions also tell you to uncomment the following line
(as you would to force medium trust at the app level), but that
will cause an&nbsp;exception on Rackspace because they do not allow
app level overrides, so just leave it as is.</p>

<pre class="brush:xml;first-line:1;">
&lt;!-- &lt;trust level="Medium" originUrl=".*" /&gt;--&gt;
</pre>

<h4>Impersonation</h4>

<p>Finally, you will need to&nbsp;<a
href="http://cloudsites.rackspacecloud.com/index.php/How_do_I_add_impersonation_to_my_ASP.NET_site%3F"
 title="How do I add impersonation to my ASP.NET site?">add
impersonation</a> under the&nbsp;<strong>system.web</strong>
section.&nbsp;This will enable Umbraco to read/write to the file
system.&nbsp;You will need&nbsp;to impersonate the default FTP
account that is created by Rackspace when you created the site.</p>

<p>If you are in the Dallas datacenter you will use the
following:</p>

<pre class="brush:xml;first-line:1;">
&lt;identity impersonate="true" userName="dfw\YOUR_FTP_USERNAME" password="YOUR_FTP_PASSWORD" /&gt;
</pre>

<p>If you are in the San Antonio datacenter you will use the
following:</p>

<pre class="brush:xml;first-line:1;">
&lt;identity impersonate="true" userName="sat\YOUR_FTP_USERNAME" password="YOUR_FTP_PASSWORD" /&gt;
</pre>

<p>Of course, you will also need to update
<strong>umbracoDbDSN</strong> with the correct values for your
database on Rackspace.</p>

<h4>Drop File Extensions (optional)</h4>

<p>Rackspace is already set up to run without file extensions, so
you might as well go ahead and drop them.</p>

<pre class="brush:xml;first-line:1;">
&lt;add key="umbracoUseDirectoryUrls" value="true" /&gt;
</pre>

<p>Be sure to update any rules you may have in
<strong>/config/UrlRewriting.config</strong> as well.</p>

<h4>Closing Thoughts</h4>

<p>So far, my experience with Rackspace Cloud Sites&nbsp;has been
great. Technical support (especially live chat) has been superb and
the&nbsp;Control Panel is simple to use. I am incredibly grateful
for the hard work and effort put in by <a
href="http://twitter.com/benjaminhowarth"
title="Benjamin Howarth Twitter">Benjamin Howarth</a> and the rest
of the Umbraco team that enabled us to have Umbraco running in such
an ideal environment.</p>
]]></description><author>Ricky Beard</author><pubDate>Thu, 02 Sep 2010 09:32 -0600</pubDate><guid>http://www.rickybeard.com/blog/2010/9/2/running-umbraco-on-rackspace-cloud-sites</guid><content:encoded><![CDATA[ 
<p>Here at <a href="http://www.triotechnologies.net"
title="Trio Technologies, LLC.">Trio</a>, we are currently in the
process of moving all of our websites from our local datacenter to
<a
href="http://www.rackspacecloud.com/cloud_hosting_products/sites"
title="Rackspace Cloud Sites">Rackspace Cloud Sites</a>. That means
moving a few Umbraco installations into a medium trust environment.
To make things more challenging, I made the decision to convert
everything to MySql as well.&nbsp;I decided to use this blog as the
guinea pig and I have to say, everything worked out really
well.</p>

<p>So, I&nbsp;thought I would write this post as a reminder to
myself of the process&nbsp;and to share my experience (and screw
ups) with everyone. Here we go!</p>

<h4>Upgrade</h4>

<p>First, I went ahead and upgraded this blog to Umbraco 4.5.2. You
can find an <a
href="http://our.umbraco.org/wiki/install-and-setup/upgrading-an-umbraco-installation"
 title="Upgrading an umbraco installation">upgrade guide&nbsp;on
our.umbraco.org</a>.</p>

<h4>MySql</h4>

<p>To convert everything to MySql, I simply created a fresh Umbraco
installation running MySql and installed a package (containing all
of my content, templates, doc types, xslt, etc.)&nbsp;that I
created from the original blog.</p>

<p>Here is where I screwed up.</p>

<p>To deploy my blog to Rackspace, I simply did a backup of my
local&nbsp;MySql database and restored it to the server
on&nbsp;Rackspace using MySql Administrator. I was left with an
exception that told me that the table <strong>UMBRACODOMAINS did
not exist</strong>. Of course it did exist and after some research
I found a solution to the problem.</p>

<p>MySql has a <a
href="http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html"
 title="8.2.2. Identifier Case Sensitivity">configurable
identifier</a> called <strong>lower_case_table_names</strong> that
has a different default value based on the OS that MySql resides
on.</p>

<p>My local installation is on Windows XP, so the default value is
1. That means that all table names will be converted to lowercase
and that name comparisons <strong>ARE NOT</strong> case
sensitive.</p>

<p>That means when I installed Umbraco on my local server, all of
my table names were converted to lowercase. However,&nbsp;queries
from Umbraco use uppercase table names.&nbsp;&nbsp;Again, this is
not a probem on Windows becase comparisons are not case
sensitive.</p>

<p>The problem is that Rackspace runs MySql on Linux where the
default value is 0. That means that all table names are stored
using the lettercase specified in the <strong>CREATE TABLE</strong>
statement and comparisons <strong>ARE</strong> case sensitive.</p>

<p>Since I did a backup/restore from my local installation, all of
the table names on the Rackspace server were in lowercase,
thus&nbsp;causing the exception.</p>

<p>To solve the problem, I simply added the following&nbsp;under
the <strong>[mysqld]</strong> section of <strong>C:\Program
Files\MySQL\MySQL Server 5.1\my.ini</strong>:</p>

<p>[mysqld]<br />
<strong>lower_case_table_names=0</strong></p>

<p>Now, when I create local Umbraco installations running MySql,
the table names will be left in uppercase making the databases
interchangeable with MySql on Rackspace.</p>

<h4>Web.config</h4>

<p>Next, I set the following in web.config.</p>

<pre class="brush:xml;first-line:1;">
&lt;add key="umbracoUseMediumTrust" value="true" /&gt;
</pre>

<p>Some instructions also tell you to uncomment the following line
(as you would to force medium trust at the app level), but that
will cause an&nbsp;exception on Rackspace because they do not allow
app level overrides, so just leave it as is.</p>

<pre class="brush:xml;first-line:1;">
&lt;!-- &lt;trust level="Medium" originUrl=".*" /&gt;--&gt;
</pre>

<h4>Impersonation</h4>

<p>Finally, you will need to&nbsp;<a
href="http://cloudsites.rackspacecloud.com/index.php/How_do_I_add_impersonation_to_my_ASP.NET_site%3F"
 title="How do I add impersonation to my ASP.NET site?">add
impersonation</a> under the&nbsp;<strong>system.web</strong>
section.&nbsp;This will enable Umbraco to read/write to the file
system.&nbsp;You will need&nbsp;to impersonate the default FTP
account that is created by Rackspace when you created the site.</p>

<p>If you are in the Dallas datacenter you will use the
following:</p>

<pre class="brush:xml;first-line:1;">
&lt;identity impersonate="true" userName="dfw\YOUR_FTP_USERNAME" password="YOUR_FTP_PASSWORD" /&gt;
</pre>

<p>If you are in the San Antonio datacenter you will use the
following:</p>

<pre class="brush:xml;first-line:1;">
&lt;identity impersonate="true" userName="sat\YOUR_FTP_USERNAME" password="YOUR_FTP_PASSWORD" /&gt;
</pre>

<p>Of course, you will also need to update
<strong>umbracoDbDSN</strong> with the correct values for your
database on Rackspace.</p>

<h4>Drop File Extensions (optional)</h4>

<p>Rackspace is already set up to run without file extensions, so
you might as well go ahead and drop them.</p>

<pre class="brush:xml;first-line:1;">
&lt;add key="umbracoUseDirectoryUrls" value="true" /&gt;
</pre>

<p>Be sure to update any rules you may have in
<strong>/config/UrlRewriting.config</strong> as well.</p>

<h4>Closing Thoughts</h4>

<p>So far, my experience with Rackspace Cloud Sites&nbsp;has been
great. Technical support (especially live chat) has been superb and
the&nbsp;Control Panel is simple to use. I am incredibly grateful
for the hard work and effort put in by <a
href="http://twitter.com/benjaminhowarth"
title="Benjamin Howarth Twitter">Benjamin Howarth</a> and the rest
of the Umbraco team that enabled us to have Umbraco running in such
an ideal environment.</p>
]]></content:encoded><comments>http://www.rickybeard.com/blog/2010/9/2/running-umbraco-on-rackspace-cloud-sites#comments
        </comments></item><item><category>umbraco</category><category>csharp</category><title>Spambusting with Umbraco and Akismet</title><link>http://www.rickybeard.com/blog/2009/10/29/spambusting-with-umbraco-and-akismet</link><description><![CDATA[ 
<p>When I started this blog, I really didn't think&nbsp;I would
need any comment spam prevention. I have also never liked the idea
of having to moderate/approve comments manually (smells like
work).</p>

<p>However, after about three days on the interwebs,&nbsp;I decided
otherwise. Bring on <a href="http://akismet.com/"
title="Akismet">Akismet</a>&nbsp;from <a
href="http://automattic.com/" title="Automattic">Automattic</a>.
From their website, "Automattic Kismet (Akismet for short) is a
collaborative effort to make comment and trackback spam a non-issue
and restore innocence to blogging, so you <strong>never have to
worry about spam again</strong>."</p>

<p>Sounds good to me, let's get started!</p>

<p>First, you will need a <a href="http://en.wordpress.com/signup/"
title="Get a Wordpress account.">Wordpress account</a>.&nbsp;You
can then find your API key by clicking on Profile.</p>

<p>Next, you will need to <a
href="http://www.codeplex.com/wikipage?ProjectName=AkismetApi"
title="Akismet for .Net 2.0">download Akismet for .Net 2.0 from
Codeplex</a>&nbsp;and drop the included assembly into your bin
directory. Now, time for some code.</p>

<p>I like the idea of saving every comment, but only publishing
those that pass the spam check. So, my
<strong>btnSubmit_Click</strong> event looks something like this
(sorry for all the wraps):</p>

<pre class="brush:csharp;first-line:1;">
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Akismet api = new Akismet(ConfigurationManager.AppSettings["wordpressKey"], "", "Test/1.0");
        if (!api.VerifyKey()) throw new Exception("Key could not be verified");

        AkismetComment comment = new AkismetComment();
        comment.Blog = "";
        comment.UserIp = Request.UserAgent.ToString();
        comment.UserAgent = Request.UserAgent.ToString();
        comment.CommentContent = Server.HtmlEncode(txtComment.Text);
        comment.CommentType = "comment";
        comment.CommentAuthor = Server.HtmlEncode(txtName.Text);
        comment.CommentAuthorEmail = Server.HtmlEncode(txtEmail.Text);
        comment.CommentAuthorUrl = Server.HtmlEncode(txtWebsite.Text);

        DocumentType commentDt = DocumentType.GetByAlias("BlogPostComment");
        Document newComment = Document.MakeNew(txtName.Text, commentDt, new umbraco.BusinessLogic.User(0), Node.GetCurrent().Id);

        newComment.getProperty("name").Value = Server.HtmlEncode(txtName.Text);
        newComment.getProperty("email").Value = Server.HtmlEncode(txtEmail.Text);
        newComment.getProperty("website").Value = Server.HtmlEncode(txtWebsite.Text);
        newComment.getProperty("comment").Value = Server.HtmlEncode(txtComment.Text);

        newComment.Save();

        if (!api.CommentCheck(comment))
        {
            newComment.Publish(new umbraco.BusinessLogic.User(0));
            umbraco.library.UpdateDocumentCache(newComment.Id);
            Response.Redirect(umbraco.library.NiceUrl(Node.GetCurrent().Id) + "#comment-" + newComment.Id.ToString());
        }
        else
        {
            customError.IsValid = false;
            customError.ErrorMessage = "Your comment has been detected as spam.";
        }           
    }
</pre>

<p>I have also thought about creating a new button datatype to
enable me to submit unblocked spam and&nbsp;Ham (false
positives)&nbsp;back to Akismet to help improve the algorithm, but
have not gotten around to it and really haven't needed to. Akismet
really does a great job for lazy folks like me. Their claim of 93%
accuracy is looking pretty solid.</p>

<p>Now all I need is for Umbraco to implement a "<a
href="http://www.codeplex.com/umbraco/WorkItem/View.aspx?WorkItemId=14215"
 title="Codeplex Issue">Delete at</a>" feature for documents so
that I can set an expiration date&nbsp;for all of&nbsp;the
unpublished spam nodes that I have in my content tree.</p>
]]></description><author>Ricky Beard</author><pubDate>Thu, 29 Oct 2009 02:30 -0600</pubDate><guid>http://www.rickybeard.com/blog/2009/10/29/spambusting-with-umbraco-and-akismet</guid><content:encoded><![CDATA[ 
<p>When I started this blog, I really didn't think&nbsp;I would
need any comment spam prevention. I have also never liked the idea
of having to moderate/approve comments manually (smells like
work).</p>

<p>However, after about three days on the interwebs,&nbsp;I decided
otherwise. Bring on <a href="http://akismet.com/"
title="Akismet">Akismet</a>&nbsp;from <a
href="http://automattic.com/" title="Automattic">Automattic</a>.
From their website, "Automattic Kismet (Akismet for short) is a
collaborative effort to make comment and trackback spam a non-issue
and restore innocence to blogging, so you <strong>never have to
worry about spam again</strong>."</p>

<p>Sounds good to me, let's get started!</p>

<p>First, you will need a <a href="http://en.wordpress.com/signup/"
title="Get a Wordpress account.">Wordpress account</a>.&nbsp;You
can then find your API key by clicking on Profile.</p>

<p>Next, you will need to <a
href="http://www.codeplex.com/wikipage?ProjectName=AkismetApi"
title="Akismet for .Net 2.0">download Akismet for .Net 2.0 from
Codeplex</a>&nbsp;and drop the included assembly into your bin
directory. Now, time for some code.</p>

<p>I like the idea of saving every comment, but only publishing
those that pass the spam check. So, my
<strong>btnSubmit_Click</strong> event looks something like this
(sorry for all the wraps):</p>

<pre class="brush:csharp;first-line:1;">
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Akismet api = new Akismet(ConfigurationManager.AppSettings["wordpressKey"], "", "Test/1.0");
        if (!api.VerifyKey()) throw new Exception("Key could not be verified");

        AkismetComment comment = new AkismetComment();
        comment.Blog = "";
        comment.UserIp = Request.UserAgent.ToString();
        comment.UserAgent = Request.UserAgent.ToString();
        comment.CommentContent = Server.HtmlEncode(txtComment.Text);
        comment.CommentType = "comment";
        comment.CommentAuthor = Server.HtmlEncode(txtName.Text);
        comment.CommentAuthorEmail = Server.HtmlEncode(txtEmail.Text);
        comment.CommentAuthorUrl = Server.HtmlEncode(txtWebsite.Text);

        DocumentType commentDt = DocumentType.GetByAlias("BlogPostComment");
        Document newComment = Document.MakeNew(txtName.Text, commentDt, new umbraco.BusinessLogic.User(0), Node.GetCurrent().Id);

        newComment.getProperty("name").Value = Server.HtmlEncode(txtName.Text);
        newComment.getProperty("email").Value = Server.HtmlEncode(txtEmail.Text);
        newComment.getProperty("website").Value = Server.HtmlEncode(txtWebsite.Text);
        newComment.getProperty("comment").Value = Server.HtmlEncode(txtComment.Text);

        newComment.Save();

        if (!api.CommentCheck(comment))
        {
            newComment.Publish(new umbraco.BusinessLogic.User(0));
            umbraco.library.UpdateDocumentCache(newComment.Id);
            Response.Redirect(umbraco.library.NiceUrl(Node.GetCurrent().Id) + "#comment-" + newComment.Id.ToString());
        }
        else
        {
            customError.IsValid = false;
            customError.ErrorMessage = "Your comment has been detected as spam.";
        }           
    }
</pre>

<p>I have also thought about creating a new button datatype to
enable me to submit unblocked spam and&nbsp;Ham (false
positives)&nbsp;back to Akismet to help improve the algorithm, but
have not gotten around to it and really haven't needed to. Akismet
really does a great job for lazy folks like me. Their claim of 93%
accuracy is looking pretty solid.</p>

<p>Now all I need is for Umbraco to implement a "<a
href="http://www.codeplex.com/umbraco/WorkItem/View.aspx?WorkItemId=14215"
 title="Codeplex Issue">Delete at</a>" feature for documents so
that I can set an expiration date&nbsp;for all of&nbsp;the
unpublished spam nodes that I have in my content tree.</p>
]]></content:encoded><comments>http://www.rickybeard.com/blog/2009/10/29/spambusting-with-umbraco-and-akismet#comments
        </comments></item><item><category>umbraco</category><category>projects</category><title>Umbraco Powered</title><link>http://www.rickybeard.com/blog/2009/8/28/umbraco-powered</link><description><![CDATA[ 
<p>I recently finished a couple of projects that are powered by <a
href="http://www.umbraco.org/"
title="Umbraco CMS">Umbraco</a>&nbsp;and I thought I would share
some details.</p>

<p>The first project is&nbsp;<a href="http://www.nceexam.com"
title="NCEExam.com">NCEExam.com</a>, an online study and testing
system for the National Counselor Exam. This is version 3 of the
system and is the first version&nbsp;to run on Umbraco (V4). There
were a lot of&nbsp;unique challenges in this project such as
securing FLV videos and downloadable content, as well as a custom
shopping cart and e-commerce interface.</p>

<p>We will probably convert&nbsp;our shopping cart to&nbsp;<a
href="http://www.codeplex.com/commerce4umbraco"
title="Commerce4Umbraco">Commerce4Umbraco</a> eventually. However,
it had not even reached the&nbsp;alpha stage&nbsp;when this site
launched.</p>

<p><a href="http://www.nceexam.com" title="NCEExam.com"
class="screenshot">http://www.nceexam.com<img src="/media/468/nceexam.jpg" width="480" height="334" alt="NCEExam Screenshot"/></a></p>

<p>The second project is <a href="http://www.tuttdaggs.com"
title="Tutt &amp; Daggs">Tutt &amp; Daggs</a>, a company
specializing in&nbsp;workplace training and motivation for
educational institutions, large corporations and non-profit
organizations.</p>

<p>A couple of neat features were incorporated into this project. I
utilized a JQuery slider on the bios page along with a Light Box
gallery for promotional photos. Thanks to Umbraco, the client has
no trouble maintaining this site on their own.</p>

<p><a href="http://www.tuttdaggs.com" title="Tutt &amp; Daggs"
class="screenshot">http://www.tuttdaggs.com<img src="/media/473/tuttdaggs.jpg" width="480" height="334" alt="TuttDaggs Screenshot"/></a></p>

<p>It is always interesting to see how others are using <a
href="http://www.umbraco.org/" title="Umbraco CMS">Umbraco</a> in
creative or innovative ways. If you have any projects you would
like to share, please pass them along.</p>
]]></description><author>Ricky Beard</author><pubDate>Fri, 28 Aug 2009 09:56 -0600</pubDate><guid>http://www.rickybeard.com/blog/2009/8/28/umbraco-powered</guid><content:encoded><![CDATA[ 
<p>I recently finished a couple of projects that are powered by <a
href="http://www.umbraco.org/"
title="Umbraco CMS">Umbraco</a>&nbsp;and I thought I would share
some details.</p>

<p>The first project is&nbsp;<a href="http://www.nceexam.com"
title="NCEExam.com">NCEExam.com</a>, an online study and testing
system for the National Counselor Exam. This is version 3 of the
system and is the first version&nbsp;to run on Umbraco (V4). There
were a lot of&nbsp;unique challenges in this project such as
securing FLV videos and downloadable content, as well as a custom
shopping cart and e-commerce interface.</p>

<p>We will probably convert&nbsp;our shopping cart to&nbsp;<a
href="http://www.codeplex.com/commerce4umbraco"
title="Commerce4Umbraco">Commerce4Umbraco</a> eventually. However,
it had not even reached the&nbsp;alpha stage&nbsp;when this site
launched.</p>

<p><a href="http://www.nceexam.com" title="NCEExam.com"
class="screenshot">http://www.nceexam.com<img src="/media/468/nceexam.jpg" width="480" height="334" alt="NCEExam Screenshot"/></a></p>

<p>The second project is <a href="http://www.tuttdaggs.com"
title="Tutt &amp; Daggs">Tutt &amp; Daggs</a>, a company
specializing in&nbsp;workplace training and motivation for
educational institutions, large corporations and non-profit
organizations.</p>

<p>A couple of neat features were incorporated into this project. I
utilized a JQuery slider on the bios page along with a Light Box
gallery for promotional photos. Thanks to Umbraco, the client has
no trouble maintaining this site on their own.</p>

<p><a href="http://www.tuttdaggs.com" title="Tutt &amp; Daggs"
class="screenshot">http://www.tuttdaggs.com<img src="/media/473/tuttdaggs.jpg" width="480" height="334" alt="TuttDaggs Screenshot"/></a></p>

<p>It is always interesting to see how others are using <a
href="http://www.umbraco.org/" title="Umbraco CMS">Umbraco</a> in
creative or innovative ways. If you have any projects you would
like to share, please pass them along.</p>
]]></content:encoded><comments>http://www.rickybeard.com/blog/2009/8/28/umbraco-powered#comments
        </comments></item><item><category>umbraco</category><category>nunchucks</category><title>Nunchuck Skills: Hack Your Head</title><link>http://www.rickybeard.com/blog/2009/8/26/nunchuck-skills-hack-your-head</link><description><![CDATA[ 
<p>There are times when I need to use a particular script or style
sheet temporarily and only on a portion of&nbsp;the site. This is
especially true with a blog.</p>

<p>For example, if you use <a
href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"
title="SyntaxHighlighter">SyntaxHighlighter</a>, you could use up
to 21 brush scripts, plus the core script and theme style
sheet.&nbsp;That makes for a lot of references in the head
tag.&nbsp; That is why I almost always add the
following&nbsp;inside the <strong>&lt;head&gt;</strong> tag in my
top lever master page between the style sheet and script
references.</p>

<pre class="brush:xml;first-line:1;">
&lt;asp:ContentPlaceHolder Id="head" runat="server"&gt;
&lt;!-- extra references load from child --&gt;
&lt;/asp:ContentPlaceHolder&gt;
</pre>

<p>This allows me to specify any extra/temporary css or script
references in&nbsp;the child template. In this example I even
passed in the javascript function to generate a lightbox.</p>

<pre class="brush:xml;first-line:1;">
&lt;asp:Content ContentPlaceHolderID="head" runat="server"&gt;
    &lt;link href="/css/temp.css" rel="stylesheet" type="text/css" /&gt;
    &lt;script type="text/javascript" src="/scripts/jquery.lightbox-0.5.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript"&gt;
    $(function() {
        $('#gallery a').lightBox();
    });
    &lt;/script&gt;
&lt;/asp:Content&gt;
</pre>

<p>I&nbsp;know this isn't groundbreaking, but it is a really great
tip for anyone just starting out with Umbraco or master pages.</p>
]]></description><author>Ricky Beard</author><pubDate>Wed, 26 Aug 2009 11:49 -0600</pubDate><guid>http://www.rickybeard.com/blog/2009/8/26/nunchuck-skills-hack-your-head</guid><content:encoded><![CDATA[ 
<p>There are times when I need to use a particular script or style
sheet temporarily and only on a portion of&nbsp;the site. This is
especially true with a blog.</p>

<p>For example, if you use <a
href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"
title="SyntaxHighlighter">SyntaxHighlighter</a>, you could use up
to 21 brush scripts, plus the core script and theme style
sheet.&nbsp;That makes for a lot of references in the head
tag.&nbsp; That is why I almost always add the
following&nbsp;inside the <strong>&lt;head&gt;</strong> tag in my
top lever master page between the style sheet and script
references.</p>

<pre class="brush:xml;first-line:1;">
&lt;asp:ContentPlaceHolder Id="head" runat="server"&gt;
&lt;!-- extra references load from child --&gt;
&lt;/asp:ContentPlaceHolder&gt;
</pre>

<p>This allows me to specify any extra/temporary css or script
references in&nbsp;the child template. In this example I even
passed in the javascript function to generate a lightbox.</p>

<pre class="brush:xml;first-line:1;">
&lt;asp:Content ContentPlaceHolderID="head" runat="server"&gt;
    &lt;link href="/css/temp.css" rel="stylesheet" type="text/css" /&gt;
    &lt;script type="text/javascript" src="/scripts/jquery.lightbox-0.5.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript"&gt;
    $(function() {
        $('#gallery a').lightBox();
    });
    &lt;/script&gt;
&lt;/asp:Content&gt;
</pre>

<p>I&nbsp;know this isn't groundbreaking, but it is a really great
tip for anyone just starting out with Umbraco or master pages.</p>
]]></content:encoded><comments>http://www.rickybeard.com/blog/2009/8/26/nunchuck-skills-hack-your-head#comments
        </comments></item><item><category>umbraco</category><category>urlrewrite</category><title>Taming Tag URLs with UrlRewrite</title><link>http://www.rickybeard.com/blog/2009/8/26/taming-tag-urls-with-urlrewrite</link><description><![CDATA[ 
<p>After installing the <a href="http://www.nibble.be/?p=57"
title="Blog for Umbraco 4">Blog&nbsp;for Umbraco 4</a>&nbsp;package
by Tim Geyssens, I noticed that the links generated in the tags
menu&nbsp;were simply using query parameters instead of friendly
URLs.&nbsp;I would prefer them&nbsp;to look like this:
<strong>/blog/tag/tagname.aspx</strong>.</p>

<p>The good news is that Umbraco already&nbsp;uses <a
href="http://www.urlrewriting.net/149/en/home.html"
title="UrlRewritingNet.UrlRewrite">UrlRewritingNet.UrlRewrite</a>
to create friendly URLs, so everything we need to get this working
is already in place. After brushing up a bit on&nbsp;regular
expressions I came up with the following two step solution.</p>

<p>First, I added the following filter to
<strong>/config/UrlRewriting.config</strong>.</p>

<pre class="brush:xml;first-line:1;">
&lt;add name="tagfilter"
  virtualUrl="^/blog/tag/(.*).aspx"
  rewriteUrlParameter="ExcludeFromClientQueryString"
  destinationUrl="/blog.aspx?filterBy=$1"
  ignoreCase="true"
/&gt;
</pre>

<p>Then I modified <strong>BlogTags.xslt</strong> to generate the
correct URL for each tag.</p>

<pre class="brush:xml;first-line:1;">
&lt;a href="{link}/blog/tag/{current()}.aspx"&gt;&lt;xsl:value-of select="current()"/&gt;&nbsp;(&lt;xsl:value-of select="@nodesTagged"/&gt;)&lt;/a&gt;
</pre>

<p>There you have it.&nbsp;Now my tag&nbsp;URLs are all search
engine friendly and it only took about&nbsp;two minutes!</p>
]]></description><author>Ricky Beard</author><pubDate>Wed, 26 Aug 2009 11:49 -0600</pubDate><guid>http://www.rickybeard.com/blog/2009/8/26/taming-tag-urls-with-urlrewrite</guid><content:encoded><![CDATA[ 
<p>After installing the <a href="http://www.nibble.be/?p=57"
title="Blog for Umbraco 4">Blog&nbsp;for Umbraco 4</a>&nbsp;package
by Tim Geyssens, I noticed that the links generated in the tags
menu&nbsp;were simply using query parameters instead of friendly
URLs.&nbsp;I would prefer them&nbsp;to look like this:
<strong>/blog/tag/tagname.aspx</strong>.</p>

<p>The good news is that Umbraco already&nbsp;uses <a
href="http://www.urlrewriting.net/149/en/home.html"
title="UrlRewritingNet.UrlRewrite">UrlRewritingNet.UrlRewrite</a>
to create friendly URLs, so everything we need to get this working
is already in place. After brushing up a bit on&nbsp;regular
expressions I came up with the following two step solution.</p>

<p>First, I added the following filter to
<strong>/config/UrlRewriting.config</strong>.</p>

<pre class="brush:xml;first-line:1;">
&lt;add name="tagfilter"
  virtualUrl="^/blog/tag/(.*).aspx"
  rewriteUrlParameter="ExcludeFromClientQueryString"
  destinationUrl="/blog.aspx?filterBy=$1"
  ignoreCase="true"
/&gt;
</pre>

<p>Then I modified <strong>BlogTags.xslt</strong> to generate the
correct URL for each tag.</p>

<pre class="brush:xml;first-line:1;">
&lt;a href="{link}/blog/tag/{current()}.aspx"&gt;&lt;xsl:value-of select="current()"/&gt;&nbsp;(&lt;xsl:value-of select="@nodesTagged"/&gt;)&lt;/a&gt;
</pre>

<p>There you have it.&nbsp;Now my tag&nbsp;URLs are all search
engine friendly and it only took about&nbsp;two minutes!</p>
]]></content:encoded><comments>http://www.rickybeard.com/blog/2009/8/26/taming-tag-urls-with-urlrewrite#comments
        </comments></item><item><category>umbraco</category><category>me</category><title>Hi, I'm Ricky. You Found Me!</title><link>http://www.rickybeard.com/blog/2009/8/26/hi,-i'm-ricky-you-found-me!</link><description><![CDATA[ 
<p>Well, after several years of putting it off, I finally have a
blog up and running. My plan is to concentrate on the wonderful
language that is C# (and other .NET stuff from time to time) and
the last CMS you will ever need, Umbraco.</p>

<p>If you are a .NET developer and you have never heard of Umbraco,
you really should <a href="http://www.umbraco.org"
title="Umbraco's Official Site">check it out</a>. In fact, this
entire site is built on Umbraco and a modified version of the <a
href="http://www.nibble.be/?p=57" title="Blog for Umbraco 4">Blog
for Umbraco 4 package</a> by Tim Geyssens.</p>

<p>If you are familiar with Umbraco and need to get a blog up and
running, I highly recommend starting with Blog for Umbraco 4. It
will save you a lot of time and energy. You can find it in the
Umbraco Package Repository.</p>

<p>I made some pretty major modifications to the Document Types,
Master Pages, CSS, JS and XSLT. I also created a new comment form
that better suited my needs. However, this was all extremely easy
thanks to the flexibility of Umbraco and Tim's rather open
architecture. Tim, if you ever read this, thanks a million for
sharing!</p>

<p>One modification I made that I would like to pass along is in
the XSLT for listing blog comments. Even though the current XSLT in
the package specifies a height and width for the gravatars, these
parameters are being ignored by the gravatar API because the XSLT
is generating double ampersands between them.</p>

<p>As you can see below, I wrote what I consider to be a pretty
ugly workaround.</p>

<pre class="brush:xml">
&lt;xsl:text disable-output-escaping="yes"&gt;
  &lt;![CDATA[&lt;img class="gravatar" src="]]&gt;
&lt;/xsl:text&gt;
&lt;xsl:value-of select="BlogLibrary:getGravatar(data [@alias = 'email'], 30, '{your default image}')" disable-output-escaping="yes"/&gt;
&lt;xsl:text disable-output-escaping="yes"&gt;
  &lt;![CDATA[" alt="Gravatar of ]]&gt;&lt;/xsl:text&gt;
&lt;xsl:value-of select="data [@alias = 'name']" disable-output-escaping="yes"/&gt;
&lt;xsl:text disable-output-escaping="yes"&gt;
  &lt;![CDATA[" /&gt;]]&gt;
&lt;/xsl:text&gt;
</pre>

<p>CDATA everywhere!</p>

<p>If anyone has a better solution, I am all ears!</p>

<p><strong>UPDATE!</strong> Please see the <a
href="/blog/2009/8/26/hi,-i'm-ricky-you-found-me!#1327">solution</a>
to this problem from Benjamin Howarth in the comments.</p>
]]></description><author>Ricky Beard</author><pubDate>Wed, 26 Aug 2009 11:49 -0600</pubDate><guid>http://www.rickybeard.com/blog/2009/8/26/hi,-i'm-ricky-you-found-me!</guid><content:encoded><![CDATA[ 
<p>Well, after several years of putting it off, I finally have a
blog up and running. My plan is to concentrate on the wonderful
language that is C# (and other .NET stuff from time to time) and
the last CMS you will ever need, Umbraco.</p>

<p>If you are a .NET developer and you have never heard of Umbraco,
you really should <a href="http://www.umbraco.org"
title="Umbraco's Official Site">check it out</a>. In fact, this
entire site is built on Umbraco and a modified version of the <a
href="http://www.nibble.be/?p=57" title="Blog for Umbraco 4">Blog
for Umbraco 4 package</a> by Tim Geyssens.</p>

<p>If you are familiar with Umbraco and need to get a blog up and
running, I highly recommend starting with Blog for Umbraco 4. It
will save you a lot of time and energy. You can find it in the
Umbraco Package Repository.</p>

<p>I made some pretty major modifications to the Document Types,
Master Pages, CSS, JS and XSLT. I also created a new comment form
that better suited my needs. However, this was all extremely easy
thanks to the flexibility of Umbraco and Tim's rather open
architecture. Tim, if you ever read this, thanks a million for
sharing!</p>

<p>One modification I made that I would like to pass along is in
the XSLT for listing blog comments. Even though the current XSLT in
the package specifies a height and width for the gravatars, these
parameters are being ignored by the gravatar API because the XSLT
is generating double ampersands between them.</p>

<p>As you can see below, I wrote what I consider to be a pretty
ugly workaround.</p>

<pre class="brush:xml">
&lt;xsl:text disable-output-escaping="yes"&gt;
  &lt;![CDATA[&lt;img class="gravatar" src="]]&gt;
&lt;/xsl:text&gt;
&lt;xsl:value-of select="BlogLibrary:getGravatar(data [@alias = 'email'], 30, '{your default image}')" disable-output-escaping="yes"/&gt;
&lt;xsl:text disable-output-escaping="yes"&gt;
  &lt;![CDATA[" alt="Gravatar of ]]&gt;&lt;/xsl:text&gt;
&lt;xsl:value-of select="data [@alias = 'name']" disable-output-escaping="yes"/&gt;
&lt;xsl:text disable-output-escaping="yes"&gt;
  &lt;![CDATA[" /&gt;]]&gt;
&lt;/xsl:text&gt;
</pre>

<p>CDATA everywhere!</p>

<p>If anyone has a better solution, I am all ears!</p>

<p><strong>UPDATE!</strong> Please see the <a
href="/blog/2009/8/26/hi,-i'm-ricky-you-found-me!#1327">solution</a>
to this problem from Benjamin Howarth in the comments.</p>
]]></content:encoded><comments>http://www.rickybeard.com/blog/2009/8/26/hi,-i'm-ricky-you-found-me!#comments
        </comments></item></channel></rss>

