<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Tim</title>
    <link>http://blogs.thesitedoctor.co.uk/tim/</link>
    <description>Footprints in the snow of a warped mind</description>
    <language>en-gb</language>
    <copyright>Tim Gaunt</copyright>
    <lastBuildDate>Sat, 11 May 2013 10:09:59 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.2.8279.16125</generator>
    <managingEditor>timgaunt@gmail.com</managingEditor>
    <webMaster>timgaunt@gmail.com</webMaster>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=443eebab-b464-4f7b-b0c2-b5871238c5c0</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,443eebab-b464-4f7b-b0c2-b5871238c5c0.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,443eebab-b464-4f7b-b0c2-b5871238c5c0.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=443eebab-b464-4f7b-b0c2-b5871238c5c0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Sometimes you need to blitz your <a title="uCommerce e-commerce for Umbraco" href="http://ucommerce.dk/" target="_blank">uCommerce</a> database
e.g. just before launch or to remove the testing products etc.
</p>
        <p>
This is a quick database clear script which will clear delete all orders and products
in <a title="uCommerce e-commerce for Umbraco" href="http://ucommerce.dk/" target="_blank">uCommerce</a>. 
</p>
        <p>
Be careful - this will remove everything without any form of checks (this is the V3
script let me know if you need it for other versions).
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:f29ba0ac-bab9-4bde-b6be-0effe96be486" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: sql;">BEGIN TRAN

DELETE FROM uCommerce_ProductReviewComment
DELETE FROM uCommerce_ProductReview
DELETE FROM uCommerce_OrderLineDiscountRelation
DELETE FROM uCommerce_ShipmentDiscountRelation
DELETE FROM uCommerce_Discount
UPDATE uCommerce_OrderLine SET ShipmentId = NULL
UPDATE uCommerce_PurchaseOrder SET BillingAddressId = NULL
DELETE FROM uCommerce_Shipment
DELETE FROM uCommerce_OrderAddress
DELETE FROM uCommerce_OrderProperty
DELETE FROM uCommerce_OrderLine
DELETE FROM uCommerce_PaymentProperty
DELETE FROM uCommerce_Payment
DELETE FROM uCommerce_OrderStatusAudit
DELETE FROM uCommerce_PurchaseOrder
DELETE FROM uCommerce_Address
DELETE FROM uCommerce_Customer

DELETE uCommerce_ProductRelation
DELETE uCommerce_ProductProperty
DELETE uCommerce_ProductDescriptionProperty
DELETE uCommerce_ProductDescription
DELETE uCommerce_CategoryProductRelation
DELETE uCommerce_PriceGroupPrice
DELETE FROM uCommerce_Product

-- Just double check things have gone
SELECT * FROM uCommerce_PurchaseOrder o
SELECT * FROM uCommerce_Product p

-- For safety's sake, run it in a transaction just in case you change your mind
ROLLBACK TRAN
-- When happy it works, uncomment this line and comment out the ROLLBACK
-- COMMIT TRAN</pre>
        </div>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=443eebab-b464-4f7b-b0c2-b5871238c5c0" />
      </body>
      <title>Quickly delete all products and orders from uCommerce</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,443eebab-b464-4f7b-b0c2-b5871238c5c0.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2013/05/11/Quickly+Delete+All+Products+And+Orders+From+UCommerce.aspx</link>
      <pubDate>Sat, 11 May 2013 10:09:59 GMT</pubDate>
      <description>&lt;p&gt;
Sometimes you need to blitz your &lt;a title="uCommerce e-commerce for Umbraco" href="http://ucommerce.dk/" target="_blank"&gt;uCommerce&lt;/a&gt; database
e.g. just before launch or to remove the testing products etc.
&lt;/p&gt;
&lt;p&gt;
This is a quick database clear script which will clear delete all orders and products
in &lt;a title="uCommerce e-commerce for Umbraco" href="http://ucommerce.dk/" target="_blank"&gt;uCommerce&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Be careful - this will remove everything without any form of checks (this is the V3
script let me know if you need it for other versions).
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:f29ba0ac-bab9-4bde-b6be-0effe96be486" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;&lt;pre class="brush: sql;"&gt;BEGIN TRAN

DELETE FROM uCommerce_ProductReviewComment
DELETE FROM uCommerce_ProductReview
DELETE FROM uCommerce_OrderLineDiscountRelation
DELETE FROM uCommerce_ShipmentDiscountRelation
DELETE FROM uCommerce_Discount
UPDATE uCommerce_OrderLine SET ShipmentId = NULL
UPDATE uCommerce_PurchaseOrder SET BillingAddressId = NULL
DELETE FROM uCommerce_Shipment
DELETE FROM uCommerce_OrderAddress
DELETE FROM uCommerce_OrderProperty
DELETE FROM uCommerce_OrderLine
DELETE FROM uCommerce_PaymentProperty
DELETE FROM uCommerce_Payment
DELETE FROM uCommerce_OrderStatusAudit
DELETE FROM uCommerce_PurchaseOrder
DELETE FROM uCommerce_Address
DELETE FROM uCommerce_Customer

DELETE uCommerce_ProductRelation
DELETE uCommerce_ProductProperty
DELETE uCommerce_ProductDescriptionProperty
DELETE uCommerce_ProductDescription
DELETE uCommerce_CategoryProductRelation
DELETE uCommerce_PriceGroupPrice
DELETE FROM uCommerce_Product

-- Just double check things have gone
SELECT * FROM uCommerce_PurchaseOrder o
SELECT * FROM uCommerce_Product p

-- For safety's sake, run it in a transaction just in case you change your mind
ROLLBACK TRAN
-- When happy it works, uncomment this line and comment out the ROLLBACK
-- COMMIT TRAN&lt;/pre&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=443eebab-b464-4f7b-b0c2-b5871238c5c0" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,443eebab-b464-4f7b-b0c2-b5871238c5c0.aspx</comments>
      <category>Script</category>
      <category>SQL</category>
      <category>uCommerce</category>
      <category>Useful Script</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=45559a80-f2c0-437e-b643-1924b8eceef8</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,45559a80-f2c0-437e-b643-1924b8eceef8.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,45559a80-f2c0-437e-b643-1924b8eceef8.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=45559a80-f2c0-437e-b643-1924b8eceef8</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A frequent request we get when creating a checkout process or contact us form is to
include a "How did you hear about us" select list. They generally end up
looking like this one I screenshot from MoonPig:
</p>
        <p>
          <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/d4cbeeb503f6_12D44/ScreenClip_2.png">
            <img title="ScreenClip" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="ScreenClip" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/d4cbeeb503f6_12D44/ScreenClip_thumb.png" width="199" height="361" />
          </a>
        </p>
        <p>
We usually recommend against adding a "How did you hear about us" select
list not only because there are more reliable ways of tracking this sort of information
but because when someone is presented with a list like this we've found that the information
(when completed) is usually a guess. Think about it, you go to a website, start ordering
and then you're asked to remember where you first heard about them. Although you may
have come from Google, you may have heard about them on TV first -which do you select
(probably Google because that's the last thing you can remember but the advertising
department would need to know it was TV that triggered it...).
</p>
        <p>
The example from MoonPig above in my eyes is even worse as it doesn't keep it top
level "TV" they try and break it down to channel. How many people are paying
*that* much attention to the channel they're watching the advert on?
</p>
        <p>
          <b>So what's the alternative?</b>
        </p>
        <p>
The first thing to understand is that although there are better ways of finding out
how people found you but there are far more inclusive. The two that we tend to recommend
clients use are:
</p>
        <ul>
          <li>
Discount Codes 
</li>
          <li>
Custom Landing Pages/Domain Names</li>
        </ul>
        <p>
By using these, you can track the sale/interaction back to the original source (it
will of course include the odd user who's been referred but that's not an issue as
you'd still want to attribute the sale to that original source).
</p>
        <p>
So the next time you're thinking about adding a "How did you hear about us"
select list to your site, have a think if there's a better route you can use.
</p>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=45559a80-f2c0-437e-b643-1924b8eceef8" />
      </body>
      <title>How not to do a "How did you hear about us" selector</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,45559a80-f2c0-437e-b643-1924b8eceef8.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2013/03/12/How+Not+To+Do+A+How+Did+You+Hear+About+Us+Selector.aspx</link>
      <pubDate>Tue, 12 Mar 2013 09:00:00 GMT</pubDate>
      <description>&lt;p&gt;
A frequent request we get when creating a checkout process or contact us form is to
include a &amp;quot;How did you hear about us&amp;quot; select list. They generally end up
looking like this one I screenshot from MoonPig:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/d4cbeeb503f6_12D44/ScreenClip_2.png"&gt;&lt;img title="ScreenClip" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="ScreenClip" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/d4cbeeb503f6_12D44/ScreenClip_thumb.png" width="199" height="361" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
We usually recommend against adding a &amp;quot;How did you hear about us&amp;quot; select
list not only because there are more reliable ways of tracking this sort of information
but because when someone is presented with a list like this we've found that the information
(when completed) is usually a guess. Think about it, you go to a website, start ordering
and then you're asked to remember where you first heard about them. Although you may
have come from Google, you may have heard about them on TV first -which do you select
(probably Google because that's the last thing you can remember but the advertising
department would need to know it was TV that triggered it...).
&lt;/p&gt;
&lt;p&gt;
The example from MoonPig above in my eyes is even worse as it doesn't keep it top
level &amp;quot;TV&amp;quot; they try and break it down to channel. How many people are paying
*that* much attention to the channel they're watching the advert on?
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;So what's the alternative?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The first thing to understand is that although there are better ways of finding out
how people found you but there are far more inclusive. The two that we tend to recommend
clients use are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Discount Codes 
&lt;/li&gt;
&lt;li&gt;
Custom Landing Pages/Domain Names&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
By using these, you can track the sale/interaction back to the original source (it
will of course include the odd user who's been referred but that's not an issue as
you'd still want to attribute the sale to that original source).
&lt;/p&gt;
&lt;p&gt;
So the next time you're thinking about adding a &amp;quot;How did you hear about us&amp;quot;
select list to your site, have a think if there's a better route you can use.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=45559a80-f2c0-437e-b643-1924b8eceef8" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,45559a80-f2c0-437e-b643-1924b8eceef8.aspx</comments>
      <category>Development</category>
      <category>eCommerce</category>
      <category>Web Development</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=e81a4682-0851-490b-a3d2-adf254a701e7</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,e81a4682-0851-490b-a3d2-adf254a701e7.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,e81a4682-0851-490b-a3d2-adf254a701e7.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=e81a4682-0851-490b-a3d2-adf254a701e7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is more of a reminder for me than anything else. If you're looking for a great
walkthrough on how to configure Passive FTP on a Windows Azure 
<abbr title="Virtual Machine">
VM
</abbr>
, check out <a href="http://www.itq.nl/blogs/post/Walkthrough-Hosting-FTP-on-IIS-75-in-Windows-Azure-VM.aspx" target="_blank">the
walkthrough from Ronald here</a> -it got us up and running.
</p>
        <p>
The thing that takes the time to write each time is the powershell script side of
things so this time I made some notes:
</p>
        <ol>
          <li>
Run Get-AzurePublishSettingsFile to get your publishsettings file (save it somewhere
easily accessible 
</li>
          <li>
Run Import-AzurePublishSettingsFile <a href="file:///d:/Azure.publishsettings">d:\Azure.publishsettings</a></li>
          <li>
Run the Get-AzureVM calls listed below (you can copy/paste in one go and powershell
will work it's way through them -it can take a few minutes). If you're not sure what
&lt;ServiceName&gt; and &lt;Name&gt; should be, these are the names you configured
your VMs.  
<ol><li>
To get the Service Name Run: Get-AzureVM 
</li><li>
To get the Name of the server run: Get-AzureVM -ServiceName '&lt;ServiceName&gt;'
(from above) 
</li></ol><div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:2f4be2ce-fc8b-4fcc-9145-eedc0b97a171" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: powershell;">Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPData' -Protocol 'TCP' -LocalPort 20 -PublicPort 20 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTP' -Protocol 'TCP' -LocalPort 21 -PublicPort 21 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive00' -Protocol 'TCP' -LocalPort 7000 -PublicPort 7000 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive01' -Protocol 'TCP' -LocalPort 7001 -PublicPort 7001 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive02' -Protocol 'TCP' -LocalPort 7002 -PublicPort 7002 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive03' -Protocol 'TCP' -LocalPort 7003 -PublicPort 7003 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive04' -Protocol 'TCP' -LocalPort 7004 -PublicPort 7004 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive05' -Protocol 'TCP' -LocalPort 7005 -PublicPort 7005 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive06' -Protocol 'TCP' -LocalPort 7006 -PublicPort 7006 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive07' -Protocol 'TCP' -LocalPort 7007 -PublicPort 7007 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive08' -Protocol 'TCP' -LocalPort 7008 -PublicPort 7008 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive09' -Protocol 'TCP' -LocalPort 7009 -PublicPort 7009 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive10' -Protocol 'TCP' -LocalPort 7010 -PublicPort 7010 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive11' -Protocol 'TCP' -LocalPort 7011 -PublicPort 7011 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive12' -Protocol 'TCP' -LocalPort 7012 -PublicPort 7012 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive13' -Protocol 'TCP' -LocalPort 7013 -PublicPort 7013 | Update-AzureVM
Get-AzureVM -ServiceName '&lt;ServiceName&gt;' -Name '&lt;Name&gt;' | Add-AzureEndpoint -Name 'FTPPassive14' -Protocol 'TCP' -LocalPort 7014 -PublicPort 7014 | Update-AzureVM

</pre></div></li>
        </ol>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=e81a4682-0851-490b-a3d2-adf254a701e7" />
      </body>
      <title>How to setup passive FTP on a Windows Azure virtual machine</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,e81a4682-0851-490b-a3d2-adf254a701e7.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2013/02/13/How+To+Setup+Passive+FTP+On+A+Windows+Azure+Virtual+Machine.aspx</link>
      <pubDate>Wed, 13 Feb 2013 21:30:39 GMT</pubDate>
      <description>&lt;p&gt;
This is more of a reminder for me than anything else. If you're looking for a great
walkthrough on how to configure Passive FTP on a Windows Azure 
&lt;abbr title="Virtual Machine"&gt;
VM
&lt;/abbr&gt;
, check out &lt;a href="http://www.itq.nl/blogs/post/Walkthrough-Hosting-FTP-on-IIS-75-in-Windows-Azure-VM.aspx" target="_blank"&gt;the
walkthrough from Ronald here&lt;/a&gt; -it got us up and running.
&lt;/p&gt;
&lt;p&gt;
The thing that takes the time to write each time is the powershell script side of
things so this time I made some notes:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Run Get-AzurePublishSettingsFile to get your publishsettings file (save it somewhere
easily accessible 
&lt;/li&gt;
&lt;li&gt;
Run Import-AzurePublishSettingsFile &lt;a href="file:///d:/Azure.publishsettings"&gt;d:\Azure.publishsettings&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
Run the Get-AzureVM calls listed below (you can copy/paste in one go and powershell
will work it's way through them -it can take a few minutes). If you're not sure what
&amp;lt;ServiceName&amp;gt; and &amp;lt;Name&amp;gt; should be, these are the names you configured
your VMs.&amp;#160; 
&lt;ol&gt;
&lt;li&gt;
To get the Service Name Run: Get-AzureVM 
&lt;/li&gt;
&lt;li&gt;
To get the Name of the server run: Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;'
(from above) 
&lt;/li&gt;
&lt;/ol&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:2f4be2ce-fc8b-4fcc-9145-eedc0b97a171" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;&lt;pre class="brush: powershell;"&gt;Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPData' -Protocol 'TCP' -LocalPort 20 -PublicPort 20 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTP' -Protocol 'TCP' -LocalPort 21 -PublicPort 21 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive00' -Protocol 'TCP' -LocalPort 7000 -PublicPort 7000 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive01' -Protocol 'TCP' -LocalPort 7001 -PublicPort 7001 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive02' -Protocol 'TCP' -LocalPort 7002 -PublicPort 7002 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive03' -Protocol 'TCP' -LocalPort 7003 -PublicPort 7003 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive04' -Protocol 'TCP' -LocalPort 7004 -PublicPort 7004 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive05' -Protocol 'TCP' -LocalPort 7005 -PublicPort 7005 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive06' -Protocol 'TCP' -LocalPort 7006 -PublicPort 7006 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive07' -Protocol 'TCP' -LocalPort 7007 -PublicPort 7007 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive08' -Protocol 'TCP' -LocalPort 7008 -PublicPort 7008 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive09' -Protocol 'TCP' -LocalPort 7009 -PublicPort 7009 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive10' -Protocol 'TCP' -LocalPort 7010 -PublicPort 7010 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive11' -Protocol 'TCP' -LocalPort 7011 -PublicPort 7011 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive12' -Protocol 'TCP' -LocalPort 7012 -PublicPort 7012 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive13' -Protocol 'TCP' -LocalPort 7013 -PublicPort 7013 | Update-AzureVM
Get-AzureVM -ServiceName '&amp;lt;ServiceName&amp;gt;' -Name '&amp;lt;Name&amp;gt;' | Add-AzureEndpoint -Name 'FTPPassive14' -Protocol 'TCP' -LocalPort 7014 -PublicPort 7014 | Update-AzureVM

&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=e81a4682-0851-490b-a3d2-adf254a701e7" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,e81a4682-0851-490b-a3d2-adf254a701e7.aspx</comments>
      <category>Azure</category>
      <category>PowerShell</category>
      <category>Server Maintenance</category>
      <category>Server Management</category>
      <category>The Cloud</category>
      <category>The Site Doctor</category>
      <category>Virtual Machine</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=b6311f51-7595-4dbf-9362-8bb0eff001c7</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,b6311f51-7595-4dbf-9362-8bb0eff001c7.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,b6311f51-7595-4dbf-9362-8bb0eff001c7.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=b6311f51-7595-4dbf-9362-8bb0eff001c7</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Most of our retailers price point their products to include tax i.e. a shirt that
costs you £100 would include a proportion of VAT that the retailer would have to pay
(at the moment about £16.67). 
</p>
        <p>
One frustration I've had for a while with uCommerce is that although you can opt to
show prices with VAT (below), this just toggles the display and the calculations are
just the same. This means the website administrator has to enter the prices excluding
VAT (in this instance £83.33).
</p>
        <p>
          <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Show-prices-including-tax_C236/SNAGHTML1121d35.png">
            <img title="SNAGHTML1121d35" style="display: inline" alt="SNAGHTML1121d35" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Show-prices-including-tax_C236/SNAGHTML1121d35_thumb.png" width="451" height="149" />
          </a>
        </p>
        <p>
That's not only a laborious task, prone to error for the editor but as we found out
on <a title="Staunton Moods - creator of contemporary high quality men's shirts to make you stand out from the crowd" href="https://stauntonmoods.com/" target="_blank">Staunton
Moods</a> the other day, can also cause rounding issues when ordering in multiples.
On digging into it, the product prices are stored to 4 decimal places whereas the
tax is only stored to 2 decimal places so we ended up with the following scenario:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:759a0088-95d8-4a23-8fdc-436a50306a77" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: text;">?179.99 inc VAT @ 21% = ?147.9338842975207 exc VAT (or ?147.9339 when rounded to 4dp)

Total Without Tax   ?147.9339 * 2       =  ?295.8678
Tax Total           ?31.07 * 2          =  ?62.14
Grand Total         ?295.8678 + ?62.14  =  ?358.0078 (or ?358.01 when rounded)</pre>
        </div>
        <p>
Thankfully it's surprisingly easy to resolve in uCommerce. After a little a little
playing around with IPricingService and ITaxService on <a href="http://simplygigabyte.co.uk" target="_blank">simplygigabyte.co.uk</a> (a
blank demo store install) I managed to resolve the issue. The trick is <strong>not</strong> to
override the ITaxService as this results in double calculations. Instead just roll
out your own IPricingService like so:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:a9d94583-b2c3-4052-b8aa-e16b2948013d" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: c#;">namespace SimplyGigabyteCommon.Catalog
{
    using System;

    using UCommerce;
    using UCommerce.Catalog;
    using UCommerce.EntitiesV2;

    public class TaxIncludedInPricePricingService : IPricingService
    {
        public Money GetProductPrice(Product product, PriceGroup priceGroup)
        {
            // Get the default pricing provider to get the product's price
            var pricingService = new PricingService();
            var incTax = pricingService.GetProductPrice(product, priceGroup);

            // Calculate the tax part of the price
            var tax = CalculateTax(priceGroup, incTax);

            // To avoid rounding issues, subtract the tax value from the item's price
            var excTax = incTax.Value - tax;

            // Return the excluding tax part (the tax can be calculated as normal 
            // with the standard TaxService
            return new Money(excTax, incTax.Culture, incTax.Currency);
        }

        private decimal CalculateTax(PriceGroup priceGroup, Money amount)
        {
            if (priceGroup == null)
                throw new ArgumentNullException("priceGroup");

            if (amount == null)
                throw new ArgumentException("amount");

            var incTax = amount.Value;
            var taxRate = priceGroup.VATRate;
            var priceTotal = 1 + taxRate;
            var tax = (incTax / priceTotal) * taxRate;
            return tax;
        }
    }
}</pre>
        </div>
        <p>
You'll then need to update your uCommerce configuration file to use your new IPricingService.
In post v3 versions of uCommerce, the file is stored in /umbraco/ucommerce/configuration/Core.config.
</p>
        <p>
Change:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:0514d211-7718-4737-a3be-21a81481dbdf" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: xml;">&lt;component id="PriceService" service="UCommerce.Catalog.IPricingService, UCommerce" type="UCommerce.Catalog.PricingService, UCommerce" /&gt;</pre>
        </div>
        <p>
To:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:fe290c24-3935-411a-9ca9-3b85be03a7be" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: xml;">&lt;component id="PriceService" service="UCommerce.Catalog.IPricingService, UCommerce" type="SimplyGigabyteCommon.Catalog.TaxIncludedInPricePricingService, SimplyGigabyteCommon" /&gt;</pre>
        </div>
        <p>
And that should be it -just make sure all your prices are updated to include tax in
the admin area! 
</p>
        <p>
If you're running a pre v3 install then the logic is largely the same but instead
of Money we've got PriceGroupPrice:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:9a530505-6397-4a98-b036-ced685fa637e" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: c#;">namespace StauntonMoods.Catalog
{
    using System;

    using UCommerce.Catalog;
    using UCommerce.EntitiesV2;

    public class TaxIncludedInPricePricingService : IPricingService
    {
        public PriceGroupPrice GetProductPrice(Product product, ProductCatalog catalog)
        {
            return this.GetProductPrice(product, catalog.PriceGroup);
        }

        public PriceGroupPrice GetProductPrice(Product product, PriceGroup priceGroup)
        {
            // Get the default pricing provider to get the product's price
            var pricingService = new PricingService();
            var incTax = pricingService.GetProductPrice(product, priceGroup);

            // Calculate the tax part of the price
            var tax = CalculateTax(priceGroup, incTax);

            // To avoid rounding issues, subtract the tax value from the item's price
            // you may also want to round the values here
            var excTax = incTax.Price.Value - tax;

            // Return the excluding tax part (the tax can be calculated as normal 
            // with the standard TaxService
            return new PriceGroupPrice
                {
                    Price = excTax, 
                    PriceGroup = priceGroup, 
                    Product = product
                };

        }

        private decimal CalculateTax(PriceGroup priceGroup, PriceGroupPrice amount)
        {
            if (priceGroup == null)
                throw new ArgumentNullException("priceGroup");

            if (amount == null)
                throw new ArgumentException("amount");

            var incTax = amount.Price.Value;
            var taxRate = priceGroup.VATRate;
            var priceTotal = 1 + taxRate;
            var tax = (incTax / priceTotal) * taxRate;
            return tax;
        }
    }
}</pre>
        </div>
        <p>
Also, in pre v3 versions of uCommerce, the file is stored in /umbraco/ucommerce/configuration/Components.config.
</p>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=b6311f51-7595-4dbf-9362-8bb0eff001c7" />
      </body>
      <title>Prices including tax on uCommerce</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,b6311f51-7595-4dbf-9362-8bb0eff001c7.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2012/12/14/Prices+Including+Tax+On+UCommerce.aspx</link>
      <pubDate>Fri, 14 Dec 2012 16:03:30 GMT</pubDate>
      <description>&lt;p&gt;
Most of our retailers price point their products to include tax i.e. a shirt that
costs you £100 would include a proportion of VAT that the retailer would have to pay
(at the moment about £16.67). 
&lt;/p&gt;
&lt;p&gt;
One frustration I've had for a while with uCommerce is that although you can opt to
show prices with VAT (below), this just toggles the display and the calculations are
just the same. This means the website administrator has to enter the prices excluding
VAT (in this instance £83.33).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Show-prices-including-tax_C236/SNAGHTML1121d35.png"&gt;&lt;img title="SNAGHTML1121d35" style="display: inline" alt="SNAGHTML1121d35" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Show-prices-including-tax_C236/SNAGHTML1121d35_thumb.png" width="451" height="149" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
That's not only a laborious task, prone to error for the editor but as we found out
on &lt;a title="Staunton Moods - creator of contemporary high quality men&amp;#39;s shirts to make you stand out from the crowd" href="https://stauntonmoods.com/" target="_blank"&gt;Staunton
Moods&lt;/a&gt; the other day, can also cause rounding issues when ordering in multiples.
On digging into it, the product prices are stored to 4 decimal places whereas the
tax is only stored to 2 decimal places so we ended up with the following scenario:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:759a0088-95d8-4a23-8fdc-436a50306a77" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: text;"&gt;?179.99 inc VAT @ 21% = ?147.9338842975207 exc VAT (or ?147.9339 when rounded to 4dp)

Total Without Tax   ?147.9339 * 2       =  ?295.8678
Tax Total           ?31.07 * 2          =  ?62.14
Grand Total         ?295.8678 + ?62.14  =  ?358.0078 (or ?358.01 when rounded)&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Thankfully it's surprisingly easy to resolve in uCommerce. After a little a little
playing around with IPricingService and ITaxService on &lt;a href="http://simplygigabyte.co.uk" target="_blank"&gt;simplygigabyte.co.uk&lt;/a&gt; (a
blank demo store install) I managed to resolve the issue. The trick is &lt;strong&gt;not&lt;/strong&gt; to
override the ITaxService as this results in double calculations. Instead just roll
out your own IPricingService like so:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:a9d94583-b2c3-4052-b8aa-e16b2948013d" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: c#;"&gt;namespace SimplyGigabyteCommon.Catalog
{
    using System;

    using UCommerce;
    using UCommerce.Catalog;
    using UCommerce.EntitiesV2;

    public class TaxIncludedInPricePricingService : IPricingService
    {
        public Money GetProductPrice(Product product, PriceGroup priceGroup)
        {
            // Get the default pricing provider to get the product's price
            var pricingService = new PricingService();
            var incTax = pricingService.GetProductPrice(product, priceGroup);

            // Calculate the tax part of the price
            var tax = CalculateTax(priceGroup, incTax);

            // To avoid rounding issues, subtract the tax value from the item's price
            var excTax = incTax.Value - tax;

            // Return the excluding tax part (the tax can be calculated as normal 
            // with the standard TaxService
            return new Money(excTax, incTax.Culture, incTax.Currency);
        }

        private decimal CalculateTax(PriceGroup priceGroup, Money amount)
        {
            if (priceGroup == null)
                throw new ArgumentNullException(&amp;quot;priceGroup&amp;quot;);

            if (amount == null)
                throw new ArgumentException(&amp;quot;amount&amp;quot;);

            var incTax = amount.Value;
            var taxRate = priceGroup.VATRate;
            var priceTotal = 1 + taxRate;
            var tax = (incTax / priceTotal) * taxRate;
            return tax;
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
You'll then need to update your uCommerce configuration file to use your new IPricingService.
In post v3 versions of uCommerce, the file is stored in /umbraco/ucommerce/configuration/Core.config.
&lt;/p&gt;
&lt;p&gt;
Change:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:0514d211-7718-4737-a3be-21a81481dbdf" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;component id=&amp;quot;PriceService&amp;quot; service=&amp;quot;UCommerce.Catalog.IPricingService, UCommerce&amp;quot; type=&amp;quot;UCommerce.Catalog.PricingService, UCommerce&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
To:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:fe290c24-3935-411a-9ca9-3b85be03a7be" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;component id=&amp;quot;PriceService&amp;quot; service=&amp;quot;UCommerce.Catalog.IPricingService, UCommerce&amp;quot; type=&amp;quot;SimplyGigabyteCommon.Catalog.TaxIncludedInPricePricingService, SimplyGigabyteCommon&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
And that should be it -just make sure all your prices are updated to include tax in
the admin area! 
&lt;/p&gt;
&lt;p&gt;
If you're running a pre v3 install then the logic is largely the same but instead
of Money we've got PriceGroupPrice:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:9a530505-6397-4a98-b036-ced685fa637e" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: c#;"&gt;namespace StauntonMoods.Catalog
{
    using System;

    using UCommerce.Catalog;
    using UCommerce.EntitiesV2;

    public class TaxIncludedInPricePricingService : IPricingService
    {
        public PriceGroupPrice GetProductPrice(Product product, ProductCatalog catalog)
        {
            return this.GetProductPrice(product, catalog.PriceGroup);
        }

        public PriceGroupPrice GetProductPrice(Product product, PriceGroup priceGroup)
        {
            // Get the default pricing provider to get the product's price
            var pricingService = new PricingService();
            var incTax = pricingService.GetProductPrice(product, priceGroup);

            // Calculate the tax part of the price
            var tax = CalculateTax(priceGroup, incTax);

            // To avoid rounding issues, subtract the tax value from the item's price
            // you may also want to round the values here
            var excTax = incTax.Price.Value - tax;

            // Return the excluding tax part (the tax can be calculated as normal 
            // with the standard TaxService
            return new PriceGroupPrice
                {
                    Price = excTax, 
                    PriceGroup = priceGroup, 
                    Product = product
                };

        }

        private decimal CalculateTax(PriceGroup priceGroup, PriceGroupPrice amount)
        {
            if (priceGroup == null)
                throw new ArgumentNullException(&amp;quot;priceGroup&amp;quot;);

            if (amount == null)
                throw new ArgumentException(&amp;quot;amount&amp;quot;);

            var incTax = amount.Price.Value;
            var taxRate = priceGroup.VATRate;
            var priceTotal = 1 + taxRate;
            var tax = (incTax / priceTotal) * taxRate;
            return tax;
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Also, in pre v3 versions of uCommerce, the file is stored in /umbraco/ucommerce/configuration/Components.config.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=b6311f51-7595-4dbf-9362-8bb0eff001c7" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,b6311f51-7595-4dbf-9362-8bb0eff001c7.aspx</comments>
      <category>C#</category>
      <category>eCommerce</category>
      <category>The Site Doctor</category>
      <category>uCommerce</category>
      <category>Web Development</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=b2ce20de-7f55-40aa-819f-e5fa9d907c71</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,b2ce20de-7f55-40aa-819f-e5fa9d907c71.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,b2ce20de-7f55-40aa-819f-e5fa9d907c71.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=b2ce20de-7f55-40aa-819f-e5fa9d907c71</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We started using source control years ago and have a load of projects still on SVN.
As great as SVN was at the time, we've moved over to Git (if you've not already done
so, you really should) but needed an easy way of migrating repositories over while
maintaining the various commit history. Helpfully Dan put together a little script
to automate the process and as <a href="https://twitter.com/Si/status/272682505377812481" target="_blank">Si
was asking to do the same on the weekend</a> I thought I'd share.
</p>
        <h2>How To Use The Script
</h2>
        <h3>1. Download the SVN to Git migration script
</h3>
        <p>
Download <a title="http://blogs.thesitedoctor.co.uk/tim/files/bash_scripts_from_svn_to_git.zip" href="http://blogs.thesitedoctor.co.uk/tim/files/bash_scripts_from_svn_to_git.zip">bash_scripts_from_svn_to_git.zip</a></p>
        <p>
Extract the script in a new folder -we store the script in the GitoliteAdmin folder
so we have it available if we need to migrate old repos but it can be stored anywhere
you want.
</p>
        <h3>2. Create a new user mapping file
</h3>
        <p>
This is a simple text file which includes the SVN username and the associated Git
user details e.g.:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:391483f5-7e89-45ab-aaaa-d984d7f35bc1" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: text;">SVNUsername = Git User &lt;email@domain.com&gt;
username = Git User &lt;example@domain.com&gt;</pre>
        </div>
        <p>
Add each user mapping on a new line. You'll need to make sure that every user that
has committed to the SVN repo has a mapping in this file.
</p>
        <p>
Save the user mapping file as svn_users.txt in the same place as the SVN to Git migration
script.
</p>
        <h3>3. Create a temporary folder
</h3>
        <p>
This folder will be where the script downloads various repos to and does it's work.
We've called ours "_SVN Transfer"
</p>
        <h3>4. Create the Git Repo
</h3>
        <p>
Create an empty repository for the project on your Git server
</p>
        <h3>5. Open Git Bash
</h3>
        <p>
Navigate to the temporary transfer folder you've just created. Assuming you called
your folder "_SVN Transfer" and it was stored on D it would be:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:b3c2de35-9be1-4e37-902e-70af449a9d58" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: bash;">cd /d/_SVN Transfer/</pre>
        </div>
        <h3>6. Run the SVN to Git migration script 
</h3>
        <p>
You'll need to run the migration script with three parameters e.g.:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:4432b0c8-cd31-4c6e-aa95-5e2b3df3e3b4" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: text;">bash_scripts_from_svn_to_git.sh &lt;URL of the SVN Repo (including trunk)&gt; &lt;URL of the Git Repo&gt; &lt;Path of your Users Mapping File&gt;</pre>
        </div>
        <p>
When running the script it'll probably look something like this:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:c8012389-6bae-4dc7-8f1f-5748ae8175ef" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: bash;">/d/_GitoliteAdmin/tools/bash_scripts_from_svn_to_git.sh http://svn.domain.com/example/trunk ssh://git@git.domain.com/example /d/_GitoliteAdmin/tools/svn_users.txt</pre>
        </div>
        <h3>
          <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/SNAGHTML75f8b2.png">
            <img title="SNAGHTML75f8b2" style="display: inline" alt="SNAGHTML75f8b2" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/SNAGHTML75f8b2_thumb.png" width="737" height="102" />
          </a>
        </h3>
        <h3>7. Accept any certificates
</h3>
        <p>
If you're running your old SVN repository over SSL then you may need to accept a certificate.
If that's the case, just accept them permanently (P).
</p>
        <p>
          <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/SNAGHTML7c8a95.png">
            <img title="SNAGHTML7c8a95" style="display: inline" alt="SNAGHTML7c8a95" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/SNAGHTML7c8a95_thumb.png" width="736" height="195" />
          </a>
        </p>
        <h3>8. Wait for the migration script to complete (it can take a while)
</h3>
        <p>
          <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/image_2.png">
            <img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/image_thumb.png" width="644" height="333" />
          </a>
        </p>
        <h3>9. Clone the remote repo
</h3>
        <p>
It should pull down as normal but include a full history.
</p>
        <p>
Let me know how you get on.
</p>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=b2ce20de-7f55-40aa-819f-e5fa9d907c71" />
      </body>
      <title>Script to migrate an SVN repository to Git including commit history</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,b2ce20de-7f55-40aa-819f-e5fa9d907c71.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2012/11/26/Script+To+Migrate+An+SVN+Repository+To+Git+Including+Commit+History.aspx</link>
      <pubDate>Mon, 26 Nov 2012 11:30:54 GMT</pubDate>
      <description>&lt;p&gt;
We started using source control years ago and have a load of projects still on SVN.
As great as SVN was at the time, we've moved over to Git (if you've not already done
so, you really should) but needed an easy way of migrating repositories over while
maintaining the various commit history. Helpfully Dan put together a little script
to automate the process and as &lt;a href="https://twitter.com/Si/status/272682505377812481" target="_blank"&gt;Si
was asking to do the same on the weekend&lt;/a&gt; I thought I'd share.
&lt;/p&gt;
&lt;h2&gt;How To Use The Script
&lt;/h2&gt;
&lt;h3&gt;1. Download the SVN to Git migration script
&lt;/h3&gt;
&lt;p&gt;
Download &lt;a title="http://blogs.thesitedoctor.co.uk/tim/files/bash_scripts_from_svn_to_git.zip" href="http://blogs.thesitedoctor.co.uk/tim/files/bash_scripts_from_svn_to_git.zip"&gt;bash_scripts_from_svn_to_git.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Extract the script in a new folder -we store the script in the GitoliteAdmin folder
so we have it available if we need to migrate old repos but it can be stored anywhere
you want.
&lt;/p&gt;
&lt;h3&gt;2. Create a new user mapping file
&lt;/h3&gt;
&lt;p&gt;
This is a simple text file which includes the SVN username and the associated Git
user details e.g.:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:391483f5-7e89-45ab-aaaa-d984d7f35bc1" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: text;"&gt;SVNUsername = Git User &amp;lt;email@domain.com&amp;gt;
username = Git User &amp;lt;example@domain.com&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Add each user mapping on a new line. You'll need to make sure that every user that
has committed to the SVN repo has a mapping in this file.
&lt;/p&gt;
&lt;p&gt;
Save the user mapping file as svn_users.txt in the same place as the SVN to Git migration
script.
&lt;/p&gt;
&lt;h3&gt;3. Create a temporary folder
&lt;/h3&gt;
&lt;p&gt;
This folder will be where the script downloads various repos to and does it's work.
We've called ours "_SVN Transfer"
&lt;/p&gt;
&lt;h3&gt;4. Create the Git Repo
&lt;/h3&gt;
&lt;p&gt;
Create an empty repository for the project on your Git server
&lt;/p&gt;
&lt;h3&gt;5. Open Git Bash
&lt;/h3&gt;
&lt;p&gt;
Navigate to the temporary transfer folder you've just created. Assuming you called
your folder "_SVN Transfer" and it was stored on D it would be:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:b3c2de35-9be1-4e37-902e-70af449a9d58" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: bash;"&gt;cd /d/_SVN Transfer/&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;6. Run the SVN to Git migration script 
&lt;/h3&gt;
&lt;p&gt;
You'll need to run the migration script with three parameters e.g.:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:4432b0c8-cd31-4c6e-aa95-5e2b3df3e3b4" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: text;"&gt;bash_scripts_from_svn_to_git.sh &amp;lt;URL of the SVN Repo (including trunk)&amp;gt; &amp;lt;URL of the Git Repo&amp;gt; &amp;lt;Path of your Users Mapping File&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
When running the script it'll probably look something like this:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:c8012389-6bae-4dc7-8f1f-5748ae8175ef" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: bash;"&gt;/d/_GitoliteAdmin/tools/bash_scripts_from_svn_to_git.sh http://svn.domain.com/example/trunk ssh://git@git.domain.com/example /d/_GitoliteAdmin/tools/svn_users.txt&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/SNAGHTML75f8b2.png"&gt;&lt;img title="SNAGHTML75f8b2" style="display: inline" alt="SNAGHTML75f8b2" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/SNAGHTML75f8b2_thumb.png" width="737" height="102" /&gt;&lt;/a&gt;
&lt;/h3&gt;
&lt;h3&gt;7. Accept any certificates
&lt;/h3&gt;
&lt;p&gt;
If you're running your old SVN repository over SSL then you may need to accept a certificate.
If that's the case, just accept them permanently (P).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/SNAGHTML7c8a95.png"&gt;&lt;img title="SNAGHTML7c8a95" style="display: inline" alt="SNAGHTML7c8a95" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/SNAGHTML7c8a95_thumb.png" width="736" height="195" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;8. Wait for the migration script to complete (it can take a while)
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/image_2.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Script-to-migrate-a-SVN-repo-to-Git_9519/image_thumb.png" width="644" height="333" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;9. Clone the remote repo
&lt;/h3&gt;
&lt;p&gt;
It should pull down as normal but include a full history.
&lt;/p&gt;
&lt;p&gt;
Let me know how you get on.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=b2ce20de-7f55-40aa-819f-e5fa9d907c71" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,b2ce20de-7f55-40aa-819f-e5fa9d907c71.aspx</comments>
      <category>Git</category>
      <category>Script</category>
      <category>Source Control</category>
      <category>SVN</category>
      <category>Useful Script</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=4edc85ce-fa51-4c4a-b7d9-724722b88aff</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,4edc85ce-fa51-4c4a-b7d9-724722b88aff.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,4edc85ce-fa51-4c4a-b7d9-724722b88aff.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=4edc85ce-fa51-4c4a-b7d9-724722b88aff</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you're not already familiar with the built in character replacing functionality
for urls in Umbraco then I highly recommend you check out the umbracoSettings.config
file's urlReplacing node section:
</p>
        <p>
          <strong>urlReplacing</strong>: List of characters which will be replaced in generated
urls. This ensures that urls does not contain characters that search engines or browsers
do not understand. Umbraco comes with a predefined set of characters and you can add
your own
</p>
        <p>
One thing I find we often forget to update is the default list of characters -which
isn't that conclusive so I thought I would update our default and share it for others
so without further ado, here's the list:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:ebd3ff99-6313-4422-9f47-d61f88c59ea3" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: xml;">&lt;urlReplacing removeDoubleDashes="true"&gt;
      &lt;char org=" "&gt;-&lt;/char&gt;
      &lt;char org="!"&gt;&lt;/char&gt;
      &lt;char org="#"&gt;&lt;/char&gt;
      &lt;char org="%"&gt;percent&lt;/char&gt;
      &lt;char org="&amp;amp;"&gt;and&lt;/char&gt;
      &lt;char org="&amp;gt;"&gt;&lt;/char&gt;
      &lt;char org="&amp;lt;"&gt;&lt;/char&gt;
      &lt;char org="&amp;quot;"&gt;&lt;/char&gt;
      &lt;char org="'"&gt;&lt;/char&gt;
      &lt;char org="("&gt;&lt;/char&gt;
      &lt;char org=")"&gt;&lt;/char&gt;
      &lt;char org="*"&gt;star&lt;/char&gt;
      &lt;char org="+"&gt;plus&lt;/char&gt;
      &lt;char org=","&gt;&lt;/char&gt;
      &lt;char org="."&gt;&lt;/char&gt;
      &lt;char org="/"&gt;&lt;/char&gt;
      &lt;char org=":"&gt;&lt;/char&gt;
      &lt;char org=";"&gt;&lt;/char&gt;
      &lt;char org="="&gt;&lt;/char&gt;
      &lt;char org="?"&gt;&lt;/char&gt;
      &lt;char org="@"&gt;at&lt;/char&gt;
      &lt;char org="["&gt;&lt;/char&gt;
      &lt;char org="]"&gt;&lt;/char&gt;
      &lt;char org="^"&gt;&lt;/char&gt;
      &lt;char org="_"&gt;&lt;/char&gt;
      &lt;char org="`"&gt;&lt;/char&gt;
      &lt;char org="{"&gt;&lt;/char&gt;
      &lt;char org="}"&gt;&lt;/char&gt;
      &lt;char org="¦"&gt;&lt;/char&gt;
      &lt;char org="¬"&gt;&lt;/char&gt;
      &lt;char org="ß"&gt;ss&lt;/char&gt;
      &lt;char org="ä"&gt;ae&lt;/char&gt;
      &lt;char org="Ä"&gt;ae&lt;/char&gt;
      &lt;char org="å"&gt;aa&lt;/char&gt;
      &lt;char org="æ"&gt;ae&lt;/char&gt;
      &lt;char org="ö"&gt;oe&lt;/char&gt;
      &lt;char org="Ö"&gt;oe&lt;/char&gt;
      &lt;char org="ø"&gt;oe&lt;/char&gt;
      &lt;char org="ü"&gt;ue&lt;/char&gt;
      &lt;char org="-"&gt;-&lt;/char&gt;
      &lt;char org="'"&gt;&lt;/char&gt;
      &lt;char org="'"&gt;&lt;/char&gt;
      &lt;char org="$"&gt;USD&lt;/char&gt;
      &lt;char org="£"&gt;GBP&lt;/char&gt;
      &lt;char org="?"&gt;EUR&lt;/char&gt;
&lt;/urlReplacing&gt;</pre>
        </div>
        <p>
 
</p>
        <p>
I hope this is of use to someone. If you have ones that I've missed please let me
know and I'll get them added. In some ways it would be nice if this was a regex rather
than a character replace. Maybe that's a commit to the core I would look at one day.
</p>
        <p>
          <strong>Update:</strong> It would appear that my blogging engine/syntax highlighter
is causing issues, the last rule should be a Euro symbol (?) and the quotes need to
be encoded for XML e.g. &amp;quot;. Thanks <a href="http://twitter.com/jbclarke">@jbclarke</a> and <a href="http://twitter.com/greystate">@greystate</a> for
spotting those
</p>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=4edc85ce-fa51-4c4a-b7d9-724722b88aff" />
      </body>
      <title>The ultimate urlReplacing character list for Umbraco</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,4edc85ce-fa51-4c4a-b7d9-724722b88aff.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2012/11/09/The+Ultimate+UrlReplacing+Character+List+For+Umbraco.aspx</link>
      <pubDate>Fri, 09 Nov 2012 08:52:00 GMT</pubDate>
      <description>&lt;p&gt;
If you're not already familiar with the built in character replacing functionality
for urls in Umbraco then I highly recommend you check out the umbracoSettings.config
file's urlReplacing node section:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;urlReplacing&lt;/strong&gt;: List of characters which will be replaced in generated
urls. This ensures that urls does not contain characters that search engines or browsers
do not understand. Umbraco comes with a predefined set of characters and you can add
your own
&lt;/p&gt;
&lt;p&gt;
One thing I find we often forget to update is the default list of characters -which
isn't that conclusive so I thought I would update our default and share it for others
so without further ado, here's the list:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:ebd3ff99-6313-4422-9f47-d61f88c59ea3" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;urlReplacing removeDoubleDashes=&amp;quot;true&amp;quot;&amp;gt;
      &amp;lt;char org=&amp;quot; &amp;quot;&amp;gt;-&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;!&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;%&amp;quot;&amp;gt;percent&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;&amp;amp;amp;&amp;quot;&amp;gt;and&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;&amp;amp;gt;&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;&amp;amp;lt;&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;&amp;amp;quot;&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;'&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;(&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;)&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;*&amp;quot;&amp;gt;star&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;+&amp;quot;&amp;gt;plus&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;,&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;.&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;/&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;:&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;;&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;=&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;?&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;@&amp;quot;&amp;gt;at&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;[&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;]&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;^&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;_&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;`&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;{&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;}&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;¦&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;¬&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ß&amp;quot;&amp;gt;ss&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ä&amp;quot;&amp;gt;ae&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;Ä&amp;quot;&amp;gt;ae&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;å&amp;quot;&amp;gt;aa&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;æ&amp;quot;&amp;gt;ae&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ö&amp;quot;&amp;gt;oe&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;Ö&amp;quot;&amp;gt;oe&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ø&amp;quot;&amp;gt;oe&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;ü&amp;quot;&amp;gt;ue&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;-&amp;quot;&amp;gt;-&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;'&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;'&amp;quot;&amp;gt;&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;$&amp;quot;&amp;gt;USD&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;£&amp;quot;&amp;gt;GBP&amp;lt;/char&amp;gt;
      &amp;lt;char org=&amp;quot;?&amp;quot;&amp;gt;EUR&amp;lt;/char&amp;gt;
&amp;lt;/urlReplacing&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
I hope this is of use to someone. If you have ones that I've missed please let me
know and I'll get them added. In some ways it would be nice if this was a regex rather
than a character replace. Maybe that's a commit to the core I would look at one day.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt; It would appear that my blogging engine/syntax highlighter
is causing issues, the last rule should be a Euro symbol (?) and the quotes need to
be encoded for XML e.g. &amp;amp;quot;. Thanks &lt;a href="http://twitter.com/jbclarke"&gt;@jbclarke&lt;/a&gt; and &lt;a href="http://twitter.com/greystate"&gt;@greystate&lt;/a&gt; for
spotting those
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=4edc85ce-fa51-4c4a-b7d9-724722b88aff" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,4edc85ce-fa51-4c4a-b7d9-724722b88aff.aspx</comments>
      <category>SEO</category>
      <category>The Site Doctor</category>
      <category>Umbraco</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=b71d488d-516c-4afe-ae65-4dac6d8b1004</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,b71d488d-516c-4afe-ae65-4dac6d8b1004.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,b71d488d-516c-4afe-ae65-4dac6d8b1004.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=b71d488d-516c-4afe-ae65-4dac6d8b1004</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We're recruiting again and to work out what type of recruit we would benefit from
the most, we decided to try and assess our strengths and weaknesses. It was a really
useful exercise and meant that we were quickly able to identify which areas we should
increase capacity in.
</p>
        <p>
I am over-simplifying the skillsets a touch here, but when we were assessing what
we use to create our websites, we boiled it down to:
</p>
        <ul>
          <li>
Design 
</li>
          <li>
HTML/CSS (to be fair, this could be split into two) 
</li>
          <li>
JavaScript (annotated below as jQuery) 
</li>
          <li>
ASP.Net, ASP.Net MVC, PHP (or other dynamic language) 
</li>
          <li>
C# / VB 
</li>
          <li>
SQL (the database interaction) 
</li>
        </ul>
        <p>
We did this so we could map out the skillsets we had internally and where we would
gain the most benefit in our next employee (we're hiring again if you're interested, <a href="http://borninthebarn.co.uk/" target="_blank">get
in touch</a>). It turns out that our skills internally are fairly well balanced at
the moment:
</p>
        <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/599c4417801f_7405/WP_000249_2.jpg">
          <img title="WP_000249" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="WP_000249" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/599c4417801f_7405/WP_000249_thumb.jpg" width="244" height="126" />
        </a>
        <p>
Looking at that however it's evident that we're a little light on the frontend side
of things (HTML/CSS/JavaScript). That's not necessarily a bad thing as it's often
quicker than the more codey aspects, so one developer can keep a couple of backend
developers going. Another thing that I've over-simplified in this chart is the level
each resource has so it may be worth factoring that in as well.
</p>
        <p>
So what did we conclude? Looking at that, I'd say we're looking for someone who is
a little more backend based.
</p>
        <p>
How does your company's skillset look?
</p>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=b71d488d-516c-4afe-ae65-4dac6d8b1004" />
      </body>
      <title>Do you know where your company’s skills are lacking?</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,b71d488d-516c-4afe-ae65-4dac6d8b1004.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2012/10/30/Do+You+Know+Where+Your+Companys+Skills+Are+Lacking.aspx</link>
      <pubDate>Tue, 30 Oct 2012 09:58:51 GMT</pubDate>
      <description>&lt;p&gt;
We're recruiting again and to work out what type of recruit we would benefit from
the most, we decided to try and assess our strengths and weaknesses. It was a really
useful exercise and meant that we were quickly able to identify which areas we should
increase capacity in.
&lt;/p&gt;
&lt;p&gt;
I am over-simplifying the skillsets a touch here, but when we were assessing what
we use to create our websites, we boiled it down to:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Design 
&lt;/li&gt;
&lt;li&gt;
HTML/CSS (to be fair, this could be split into two) 
&lt;/li&gt;
&lt;li&gt;
JavaScript (annotated below as jQuery) 
&lt;/li&gt;
&lt;li&gt;
ASP.Net, ASP.Net MVC, PHP (or other dynamic language) 
&lt;/li&gt;
&lt;li&gt;
C# / VB 
&lt;/li&gt;
&lt;li&gt;
SQL (the database interaction) 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
We did this so we could map out the skillsets we had internally and where we would
gain the most benefit in our next employee (we're hiring again if you're interested, &lt;a href="http://borninthebarn.co.uk/" target="_blank"&gt;get
in touch&lt;/a&gt;). It turns out that our skills internally are fairly well balanced at
the moment:
&lt;/p&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/599c4417801f_7405/WP_000249_2.jpg"&gt;&lt;img title="WP_000249" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="WP_000249" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/599c4417801f_7405/WP_000249_thumb.jpg" width="244" height="126" /&gt;&lt;/a&gt; 
&lt;p&gt;
Looking at that however it's evident that we're a little light on the frontend side
of things (HTML/CSS/JavaScript). That's not necessarily a bad thing as it's often
quicker than the more codey aspects, so one developer can keep a couple of backend
developers going. Another thing that I've over-simplified in this chart is the level
each resource has so it may be worth factoring that in as well.
&lt;/p&gt;
&lt;p&gt;
So what did we conclude? Looking at that, I'd say we're looking for someone who is
a little more backend based.
&lt;/p&gt;
&lt;p&gt;
How does your company's skillset look?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=b71d488d-516c-4afe-ae65-4dac6d8b1004" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,b71d488d-516c-4afe-ae65-4dac6d8b1004.aspx</comments>
      <category>Business</category>
      <category>Business/Business Start-up Advice</category>
      <category>Business/Expanding Your Business</category>
      <category>The Site Doctor</category>
      <category>Web Development</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=417b44c6-89ab-446b-99ba-2527d12423eb</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,417b44c6-89ab-446b-99ba-2527d12423eb.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,417b44c6-89ab-446b-99ba-2527d12423eb.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=417b44c6-89ab-446b-99ba-2527d12423eb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today we needed to track conversions in Google Analytic and Google AdWords when a
user clicked a button. There are a fair few posts around with different ways to do
this but as it's something we've needed to do before so I thought I'd wrap it up into
a quick jQuery plugin.
</p>
        <p>
I've popped the script below for you and on github as a gist here: <a href="https://gist.github.com/3946934">https://gist.github.com/3946934</a></p>
        <p>
          <strong>Please note:</strong> To track Google Analytics, you will need to make sure
that the standard Google Analytics tracking code (the new version) is included on
your page.
</p>
        <h2>The jQuery Plugin
</h2>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:3eb460f6-189a-4a85-860c-8d21f8655d2f" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: javascript;">/*!
* Conversion Tracker: a jQuery Plugin that tracks an event in both Google Analytics and Google AdWords
* @author: Tim Gaunt (@timgaunt)
* @url: http://blogs.thesitedoctor.co.uk/tim
* @documentation: http://blogs.thesitedoctor.co.uk/tim
* @published: 24/10/2012
* @license Creative Commons Attribution Non-Commercial Share Alike 3.0 Licence
*		   http://creativecommons.org/licenses/by-nc-sa/3.0/
*
* ----------------------
* Usage
* ----------------------
* $('a').trackConversion({ goalId: Your AdWords Id });
*
*/
;if(typeof jQuery != 'undefined') {
	jQuery(function($) {
		$.fn.extend({
			trackConversion: function(options) {
				var settings = $.extend({}, $.fn.trackConversion.defaults, options);
			
				return this.each(function () {
					var $$	= $(this),
						o	= $.metadata ? $.extend({}, settings, $$.metadata()) : settings;

					$$.click(function(e){
						if(getValue($$, o.trackAnalytics) &amp;&amp; (typeof _gaq != 'undefined')){
							_gaq.push(['_trackEvent', getValue($$, o.label), getValue($$, o.action), getValue($$, o.value)]);
						}
						
						if(getValue($$, o.trackAdWords) &amp;&amp; getValue($$, o.goalId) &gt; 0){
							var randomNum = new Date().getMilliseconds();
							var trackUrl = "http://www.googleadservices.com/pagead/conversion/" + getValue($$, o.goalId) + "/?random=" + randomNum + "&amp;value=" + getValue($$, o.conversionValue) + "&amp;label=" + getValue($$, o.label) + "&amp;guid=ON&amp;script=0&amp;url=" + getValue($$, o.url);
							$('&lt;img /&gt;', {src:trackUrl, width:1, height:1 }); 
						}
					});
				});

				function getValue(link, value) {
					return (typeof value !== "function") ? value : value(link);
				}
			}
		});

		$.fn.trackConversion.defaults = {
			trackAnalytics:true,
			trackAdWords:true,
			url: function(){ return encodeURI(location.href); },
			goalId: 0,
			label: "Conversion",
			action: "Click",
			value: "",
			conversionValue: 1
		};

	}(jQuery));
}</pre>
        </div>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=417b44c6-89ab-446b-99ba-2527d12423eb" />
      </body>
      <title>Track Google Analytics and Google AdWords conversions on click with jQuery</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,417b44c6-89ab-446b-99ba-2527d12423eb.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2012/10/24/Track+Google+Analytics+And+Google+AdWords+Conversions+On+Click+With+JQuery.aspx</link>
      <pubDate>Wed, 24 Oct 2012 16:10:55 GMT</pubDate>
      <description>&lt;p&gt;
Today we needed to track conversions in Google Analytic and Google AdWords when a
user clicked a button. There are a fair few posts around with different ways to do
this but as it's something we've needed to do before so I thought I'd wrap it up into
a quick jQuery plugin.
&lt;/p&gt;
&lt;p&gt;
I've popped the script below for you and on github as a gist here: &lt;a href="https://gist.github.com/3946934"&gt;https://gist.github.com/3946934&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Please note:&lt;/strong&gt; To track Google Analytics, you will need to make sure
that the standard Google Analytics tracking code (the new version) is included on
your page.
&lt;/p&gt;
&lt;h2&gt;The jQuery Plugin
&lt;/h2&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:3eb460f6-189a-4a85-860c-8d21f8655d2f" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: javascript;"&gt;/*!
* Conversion Tracker: a jQuery Plugin that tracks an event in both Google Analytics and Google AdWords
* @author: Tim Gaunt (@timgaunt)
* @url: http://blogs.thesitedoctor.co.uk/tim
* @documentation: http://blogs.thesitedoctor.co.uk/tim
* @published: 24/10/2012
* @license Creative Commons Attribution Non-Commercial Share Alike 3.0 Licence
*		   http://creativecommons.org/licenses/by-nc-sa/3.0/
*
* ----------------------
* Usage
* ----------------------
* $('a').trackConversion({ goalId: Your AdWords Id });
*
*/
;if(typeof jQuery != 'undefined') {
	jQuery(function($) {
		$.fn.extend({
			trackConversion: function(options) {
				var settings = $.extend({}, $.fn.trackConversion.defaults, options);
			
				return this.each(function () {
					var $$	= $(this),
						o	= $.metadata ? $.extend({}, settings, $$.metadata()) : settings;

					$$.click(function(e){
						if(getValue($$, o.trackAnalytics) &amp;amp;&amp;amp; (typeof _gaq != 'undefined')){
							_gaq.push(['_trackEvent', getValue($$, o.label), getValue($$, o.action), getValue($$, o.value)]);
						}
						
						if(getValue($$, o.trackAdWords) &amp;amp;&amp;amp; getValue($$, o.goalId) &amp;gt; 0){
							var randomNum = new Date().getMilliseconds();
							var trackUrl = &amp;quot;http://www.googleadservices.com/pagead/conversion/&amp;quot; + getValue($$, o.goalId) + &amp;quot;/?random=&amp;quot; + randomNum + &amp;quot;&amp;amp;value=&amp;quot; + getValue($$, o.conversionValue) + &amp;quot;&amp;amp;label=&amp;quot; + getValue($$, o.label) + &amp;quot;&amp;amp;guid=ON&amp;amp;script=0&amp;amp;url=&amp;quot; + getValue($$, o.url);
							$('&amp;lt;img /&amp;gt;', {src:trackUrl, width:1, height:1 }); 
						}
					});
				});

				function getValue(link, value) {
					return (typeof value !== &amp;quot;function&amp;quot;) ? value : value(link);
				}
			}
		});

		$.fn.trackConversion.defaults = {
			trackAnalytics:true,
			trackAdWords:true,
			url: function(){ return encodeURI(location.href); },
			goalId: 0,
			label: &amp;quot;Conversion&amp;quot;,
			action: &amp;quot;Click&amp;quot;,
			value: &amp;quot;&amp;quot;,
			conversionValue: 1
		};

	}(jQuery));
}&lt;/pre&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=417b44c6-89ab-446b-99ba-2527d12423eb" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,417b44c6-89ab-446b-99ba-2527d12423eb.aspx</comments>
      <category>Google</category>
      <category>Google AdWords</category>
      <category>Google Analytics</category>
      <category>HTML</category>
      <category>JavaScript</category>
      <category>jQuery</category>
      <category>Plugin</category>
      <category>The Site Doctor</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=fd5357d7-6666-4921-8d8d-fe7a2558a3ba</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,fd5357d7-6666-4921-8d8d-fe7a2558a3ba.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,fd5357d7-6666-4921-8d8d-fe7a2558a3ba.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=fd5357d7-6666-4921-8d8d-fe7a2558a3ba</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Before starting the new <a href="https://bitbucket.org/uCommerce/ucommerce-razor-store">uCommerce
demo razor store</a>, we had a chat through the options as far as CSS frameworks were
concerned. The main consideration we had was that it had to be a framework that the
community was familiar with as we weren't looking to explain the framework but rather
demo the uCommerce functionality.
</p>
        <p>
The frameworks we considered using were:
</p>
        <ul>
          <li>
            <a href="http://960.gs/" target="_blank">960 Grid System</a>
          </li>
          <li>
            <a href="http://twitter.github.com/bootstrap/" target="_blank">Twitter Bootstrap</a>
          </li>
          <li>
            <a href="http://imperavi.com/kube/" target="_blank">Kube</a>
          </li>
          <li>
            <a href="http://www.blueprintcss.org/" target="_blank">blueprint</a>
          </li>
        </ul>
        <p>
One thing that has been bothering me for some time with all these various frameworks
is the class naming convention they use for the columns. 
</p>
        <p>
The issue I have is that I still don't think it's clear and leaves me having to think
-especially when you start moving over to a responsive design.
</p>
        <h2>An Alternative Solution
</h2>
        <p>
For quite some time now we've been using an alternative class naming convention which
I personally find far more descriptive and doesn't care about how many columns you're
using.
</p>
        <p>
It's simple, name the column classes as though they're "upside down fractions" e.g.:
a column that spans 1 of two 2 columns on the page would be: .col-2-1 (there are two
columns per row and you want this one to span 1 of those two).
</p>
        <p>
Why's it better? Mainly because it's descriptive -so you know how may columns will
be in the row and how many this column spans. You can easily spot areas to group columns
together e.g. .col-4-2 should be .col-2-1. Want a 3 column layout with the centre
column being 50% of the page? No problem:
</p>
        <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:2bb4e694-1d29-44fc-aac7-40c72c28d45c" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px">
          <pre class="brush: html;">&lt;div class="col-4-1"&gt;
	&lt;p&gt;Column 1&lt;/p&gt;
&lt;/div&gt;
&lt;div class="col-2-1"&gt;
	&lt;p&gt;Column 2&lt;/p&gt;
&lt;/div&gt;
&lt;div class="col-4-1"&gt;
	&lt;p&gt;Column 3&lt;/p&gt;
&lt;/div&gt;</pre>
        </div>
        <h2>So how does it compare?
</h2>
        <p>
Assuming we're working on a 12 column grid:
</p>
        <table cellspacing="0" cellpadding="0">
          <colgroup>
            <col width="189" />
            <col width="135" />
          </colgroup>
          <tbody>
            <tr>
              <th width="40%">
Framework</th>
              <th width="20%">
Full Width</th>
              <th width="20%">
Half Width</th>
              <th width="20%">
Third Width</th>
              <td width="20%">
                <strong>Grid View</strong>
              </td>
            </tr>
            <tr>
              <td width="40%">
960 Grid System</td>
              <td width="20%" align="center">
.grid_4</td>
              <td width="20%" align="center">
.grid_4</td>
              <td width="20%" align="center">
.grid_4</td>
              <td width="20%">
                <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20960_2.png">
                  <img title="2012-10-18 CSS Grid - 960" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2012-10-18 CSS Grid - 960" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20960_thumb.png" width="104" height="58" />
                </a>
              </td>
            </tr>
            <tr>
              <td width="40%">
Twitter Bootstrap</td>
              <td width="20%" align="center">
.span12</td>
              <td width="20%" align="center">
.span6</td>
              <td width="20%" align="center">
.span4</td>
              <td width="20%">
                <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Bootstrap_2.png">
                  <img title="2012-10-18 CSS Grid - Bootstrap" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2012-10-18 CSS Grid - Bootstrap" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Bootstrap_thumb.png" width="104" height="37" />
                </a>
              </td>
            </tr>
            <tr>
              <td width="40%">
Kube</td>
              <td width="20%" align="center">
N/A</td>
              <td width="20%" align="center">
.Half</td>
              <td width="20%" align="center">
.Third</td>
              <td width="20%">
                <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Kube_2.png">
                  <img title="2012-10-18 CSS Grid - Kube" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2012-10-18 CSS Grid - Kube" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Kube_thumb.png" width="104" height="87" />
                </a>
              </td>
            </tr>
            <tr>
              <td width="40%">
blueprint 
</td>
              <td width="20%" align="center">
.span-12</td>
              <td width="20%" align="center">
.span-6</td>
              <td width="20%" align="center">
.span-4</td>
              <td width="20%">
 </td>
            </tr>
            <tr>
              <td width="40%">
Ours</td>
              <td width="20%" align="center">
.col-1-1</td>
              <td width="20%" align="center">
.col-2-1</td>
              <td width="20%" align="center">
.col-3-1</td>
              <td width="20%">
                <a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Ours_2.png">
                  <img title="2012-10-18 CSS Grid - Ours" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2012-10-18 CSS Grid - Ours" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Ours_thumb.png" width="104" height="86" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
I realise that some people don't like fractions but I find that this naming convention
a little easier to work with when mixing and matching column layouts. What do you
think? How do you name your column classes?
</p>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=fd5357d7-6666-4921-8d8d-fe7a2558a3ba" />
      </body>
      <title>CSS frameworks and column class names -why I think they are wrong</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,fd5357d7-6666-4921-8d8d-fe7a2558a3ba.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2012/10/18/CSS+Frameworks+And+Column+Class+Names+Why+I+Think+They+Are+Wrong.aspx</link>
      <pubDate>Thu, 18 Oct 2012 12:47:57 GMT</pubDate>
      <description>&lt;p&gt;
Before starting the new &lt;a href="https://bitbucket.org/uCommerce/ucommerce-razor-store"&gt;uCommerce
demo razor store&lt;/a&gt;, we had a chat through the options as far as CSS frameworks were
concerned. The main consideration we had was that it had to be a framework that the
community was familiar with as we weren't looking to explain the framework but rather
demo the uCommerce functionality.
&lt;/p&gt;
&lt;p&gt;
The frameworks we considered using were:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://960.gs/" target="_blank"&gt;960 Grid System&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://twitter.github.com/bootstrap/" target="_blank"&gt;Twitter Bootstrap&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://imperavi.com/kube/" target="_blank"&gt;Kube&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.blueprintcss.org/" target="_blank"&gt;blueprint&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
One thing that has been bothering me for some time with all these various frameworks
is the class naming convention they use for the columns. 
&lt;/p&gt;
&lt;p&gt;
The issue I have is that I still don't think it's clear and leaves me having to think
-especially when you start moving over to a responsive design.
&lt;/p&gt;
&lt;h2&gt;An Alternative Solution
&lt;/h2&gt;
&lt;p&gt;
For quite some time now we've been using an alternative class naming convention which
I personally find far more descriptive and doesn't care about how many columns you're
using.
&lt;/p&gt;
&lt;p&gt;
It's simple, name the column classes as though they're "upside down fractions" e.g.:
a column that spans 1 of two 2 columns on the page would be: .col-2-1 (there are two
columns per row and you want this one to span 1 of those two).
&lt;/p&gt;
&lt;p&gt;
Why's it better? Mainly because it's descriptive -so you know how may columns will
be in the row and how many this column spans. You can easily spot areas to group columns
together e.g. .col-4-2 should be .col-2-1. Want a 3 column layout with the centre
column being 50% of the page? No problem:
&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:2bb4e694-1d29-44fc-aac7-40c72c28d45c" class="wlWriterSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;pre class="brush: html;"&gt;&amp;lt;div class=&amp;quot;col-4-1&amp;quot;&amp;gt;
	&amp;lt;p&amp;gt;Column 1&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;col-2-1&amp;quot;&amp;gt;
	&amp;lt;p&amp;gt;Column 2&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;col-4-1&amp;quot;&amp;gt;
	&amp;lt;p&amp;gt;Column 3&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2&gt;So how does it compare?
&lt;/h2&gt;
&lt;p&gt;
Assuming we're working on a 12 column grid:
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0"&gt;
&lt;colgroup&gt;
&lt;col width="189" /&gt;
&lt;col width="135" /&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th width="40%"&gt;
Framework&lt;/th&gt;
&lt;th width="20%"&gt;
Full Width&lt;/th&gt;
&lt;th width="20%"&gt;
Half Width&lt;/th&gt;
&lt;th width="20%"&gt;
Third Width&lt;/th&gt;
&lt;td width="20%"&gt;
&lt;strong&gt;Grid View&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="40%"&gt;
960 Grid System&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.grid_4&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.grid_4&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.grid_4&lt;/td&gt;
&lt;td width="20%"&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20960_2.png"&gt;&lt;img title="2012-10-18 CSS Grid - 960" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2012-10-18 CSS Grid - 960" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20960_thumb.png" width="104" height="58" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="40%"&gt;
Twitter Bootstrap&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.span12&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.span6&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.span4&lt;/td&gt;
&lt;td width="20%"&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Bootstrap_2.png"&gt;&lt;img title="2012-10-18 CSS Grid - Bootstrap" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2012-10-18 CSS Grid - Bootstrap" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Bootstrap_thumb.png" width="104" height="37" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="40%"&gt;
Kube&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
N/A&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.Half&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.Third&lt;/td&gt;
&lt;td width="20%"&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Kube_2.png"&gt;&lt;img title="2012-10-18 CSS Grid - Kube" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2012-10-18 CSS Grid - Kube" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Kube_thumb.png" width="104" height="87" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="40%"&gt;
blueprint 
&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.span-12&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.span-6&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.span-4&lt;/td&gt;
&lt;td width="20%"&gt;
&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="40%"&gt;
Ours&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.col-1-1&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.col-2-1&lt;/td&gt;
&lt;td width="20%" align="center"&gt;
.col-3-1&lt;/td&gt;
&lt;td width="20%"&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Ours_2.png"&gt;&lt;img title="2012-10-18 CSS Grid - Ours" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="2012-10-18 CSS Grid - Ours" src="http://blogs.thesitedoctor.co.uk/tim/content/binary/Windows-Live-Writer/Where-I-think-most-CSS-frameworks-are-st_A078/2012-10-18%20CSS%20Grid%20-%20Ours_thumb.png" width="104" height="86" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
I realise that some people don't like fractions but I find that this naming convention
a little easier to work with when mixing and matching column layouts. What do you
think? How do you name your column classes?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=fd5357d7-6666-4921-8d8d-fe7a2558a3ba" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,fd5357d7-6666-4921-8d8d-fe7a2558a3ba.aspx</comments>
      <category>CSS</category>
      <category>Design</category>
      <category>HTML</category>
      <category>The Site Doctor</category>
      <category>Web Development</category>
    </item>
    <item>
      <trackback:ping>http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=2ff3c881-7a27-4d64-9525-98ed4755b17f</trackback:ping>
      <pingback:server>http://blogs.thesitedoctor.co.uk/tim/pingback.aspx</pingback:server>
      <pingback:target>http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,2ff3c881-7a27-4d64-9525-98ed4755b17f.aspx</pingback:target>
      <dc:creator>Tim</dc:creator>
      <wfw:comment>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,2ff3c881-7a27-4d64-9525-98ed4755b17f.aspx</wfw:comment>
      <wfw:commentRss>http://blogs.thesitedoctor.co.uk/tim/SyndicationService.asmx/GetEntryCommentsRss?guid=2ff3c881-7a27-4d64-9525-98ed4755b17f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This email almost caught me out the other day:
</p>
        <p>
          <a href="http://blogs.thesitedoctor.co.uk/tim/images/6716058b1592_E2AB/29-05-2012-16-00-13-Domain-Scam.png">
            <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="29-05-2012 16-00-13 Domain Scam" border="0" alt="29-05-2012 16-00-13 Domain Scam" src="http://blogs.thesitedoctor.co.uk/tim/images/6716058b1592_E2AB/29-05-2012-16-00-13-Domain-Scam_thumb.png" width="633" height="563" />
          </a>
        </p>
        <p>
The client has been interested in the .com before but I couldn't recall whether it
was something we had bought for them or not so I checked it out and it was actually
free -so it's basically a $250 domain registration!
</p>
        <p>
Don't be caught out, make sure you <a href="http://customer.heartinternet.co.uk/aff.cgi?entry=hGN3Rq_u7/053RlUncVqhw&amp;landing=web_hosting" target="_blank">check
the domain names yourself first</a>.
</p>
        <img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=2ff3c881-7a27-4d64-9525-98ed4755b17f" />
      </body>
      <title>New domain name scam</title>
      <guid isPermaLink="false">http://blogs.thesitedoctor.co.uk/tim/PermaLink,guid,2ff3c881-7a27-4d64-9525-98ed4755b17f.aspx</guid>
      <link>http://blogs.thesitedoctor.co.uk/tim/2012/06/06/New+Domain+Name+Scam.aspx</link>
      <pubDate>Wed, 06 Jun 2012 10:27:48 GMT</pubDate>
      <description>&lt;p&gt;
This email almost caught me out the other day:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.thesitedoctor.co.uk/tim/images/6716058b1592_E2AB/29-05-2012-16-00-13-Domain-Scam.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="29-05-2012 16-00-13 Domain Scam" border="0" alt="29-05-2012 16-00-13 Domain Scam" src="http://blogs.thesitedoctor.co.uk/tim/images/6716058b1592_E2AB/29-05-2012-16-00-13-Domain-Scam_thumb.png" width="633" height="563" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The client has been interested in the .com before but I couldn't recall whether it
was something we had bought for them or not so I checked it out and it was actually
free -so it's basically a $250 domain registration!
&lt;/p&gt;
&lt;p&gt;
Don't be caught out, make sure you &lt;a href="http://customer.heartinternet.co.uk/aff.cgi?entry=hGN3Rq_u7/053RlUncVqhw&amp;amp;landing=web_hosting" target="_blank"&gt;check
the domain names yourself first&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blogs.thesitedoctor.co.uk/tim/aggbug.ashx?id=2ff3c881-7a27-4d64-9525-98ed4755b17f" /&gt;</description>
      <comments>http://blogs.thesitedoctor.co.uk/tim/CommentView,guid,2ff3c881-7a27-4d64-9525-98ed4755b17f.aspx</comments>
      <category>Development</category>
      <category>Domain Names</category>
      <category>The Site Doctor</category>
      <category>Web Development</category>
    </item>
  </channel>
</rss>