<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">

<channel>
	<title>The Matchbox</title>
	
	<link>http://www.setfiremedia.com/blog</link>
	<description>Hot ideas for the web.</description>
	<pubDate>Thu, 23 Oct 2008 13:12:15 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/TheMatchbox" type="application/rss+xml" /><item>
		<title>7 Quick and Easy VBA Macros &amp; Tips for Excel</title>
		<link>http://www.setfiremedia.com/blog/7-quick-easy-vba-macros-tips-for-excel</link>
		<comments>http://www.setfiremedia.com/blog/7-quick-easy-vba-macros-tips-for-excel#comments</comments>
		<pubDate>Thu, 23 Oct 2008 12:20:04 +0000</pubDate>
		<dc:creator>Graham Ward</dc:creator>
		
		<category><![CDATA[Search Engine Marketing]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=80</guid>
		<description><![CDATA[With large PPC customers comes large problems! Manipulating keywords and producing new combinations is great when you have 50 keywords, when working with 50,000 keywords the PPC professional needs to make a choice between getting RSI and getting their macro on!
With very little knowledge you can brute force a lot of simple problems using macros, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/clockmecha1.png"><img class="alignright size-medium wp-image-115" title="clockmecha1" src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/clockmecha1-300x240.png" alt="" width="300" height="240" /></a>With large PPC customers comes large problems! Manipulating keywords and producing new combinations is great when you have 50 keywords, when working with 50,000 keywords the PPC professional needs to make a choice between getting RSI and getting their macro on!</p>
<p>With very little knowledge you can brute force a lot of simple problems using macros, here is a quick introduction to macro semantics and some functions that PPC has called for!</p>
<p><span id="more-80"></span></p>
<h3>1. VBA Basics</h3>
<p>To program visual basic for excel we need to define our own functions and create buttons or define actions that initiate them.</p>
<p>To create a new vba function for a button-click, create a button using the &#8216;Control Toolbox&#8217; / &#8216;Developer&#8217;-'Insert&#8217; menu and double click it. This will automatically create an on-click sub program for you to work in.  You also need to declare some variables to work with:</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">Dim</span> inty1,inty2,inty3 <span class="kw1">as</span> <span class="kw1">Integer</span></div>
</li>
</ol>
</div>
<p>For the purpose of the macros I introduce you will only need the <em>Integer</em> (number) and String types, this allows us to load numerical and text values from Excel cells and perform functions on them without having to re-read them into excel. If you want to know more about the different number types then check out <a href="http://msdn.microsoft.com/en-us/library/aa189284(office.10).aspx">this MSDN article</a> (essential if you plan to use numbers in the tens of thousands).</p>
<p>To reference an excel cell you can call the <em>Cells</em> function specifying the row and column i.e.:</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Cells<span class="br0">&#40;</span>Row,Column<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>so:</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">inty1 = Cells<span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>would reference the cell B1 and loads its contents into inty1.</p>
<p>You will also find it useful to loop through a range of cells, for example if you wanted to perform a function on columns A &amp; B (such as checking them against a complex criteria) and place the result in Column C. There are several loop types but to keep things simple we can work with <em>FOR </em>loops, for these you need to specify what criteria you wish to loop for i.e.</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">For</span> inty1 = <span class="nu0">3</span> <span class="kw1">To</span> <span class="nu0">15</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Cells<span class="br0">&#40;</span><span class="nu0">1</span>,Inty1<span class="br0">&#41;</span>=Cells<span class="br0">&#40;</span><span class="nu0">1</span>,Inty1<span class="br0">&#41;</span>+<span class="nu0">5</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Next</span></div>
</li>
</ol>
</div>
<p>In the above example you see that we can use inty1 to sequentially set the value of some cells, the <em>Next </em>keyword clarifies the end of the<em> For </em>loop where the program returns to the start and increments <em>inty1</em>. Note that the <em>Cells</em> function can be used to set the value of a cell as well as read it.</p>
<h3>2. Function: Compare Two Large Ranges For Subsets</h3>
<p style="text-align: left;">We are designing a macro that will perform the same as the excel Find() function for each cell in a column to find if the contents of that cell are in any of the cells in an adjacent column. For small data sets, especially of the same size there are easier and quicker ways of making this comparison but as soon as you hit a few dozen rows and columns of different sizes then a macro becomes handy. This macro is very simplified and will only look for occuraces of X in Y (not Y in X) but is incredibly easy to fix and modify, for occurances of Y in X simply swap the input columns around!<br />
<a href="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/vba-image-13.jpg"><img class="aligncenter size-medium wp-image-110" title="Range Comparison Template" src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/vba-image-13-300x47.jpg" alt="Range Comparison Template" width="300" height="47" /></a></p>
<p>Create the above layout in a new sheet [click to enlarge], 4 columns have been coloured in, a button created and 2 blank fields outlined in the centre. The first 2 columns are our inputs and the last 2 columns are our outputs, the macro will explain their function more.</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">Private</span> <span class="kw1">Sub</span> Activate_Click</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; // <span class="kw1">sub</span> = sub-phrase</div>
</li>
<li class="li1">
<div class="de1">&nbsp; // com = comparison</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Dim</span> subRow, listRow, hashSubRows, hashListRows, outputRow <span class="kw1">as</span> <span class="kw1">Integer</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; outputRow = <span class="nu0">2</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; // skip over the column titles <span class="kw1">and</span> output at row2</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; hashSubRows = Cells<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">4</span><span class="br0">&#41;</span>+<span class="nu0">1</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; // Read in the number of <span class="kw1">sub</span> rows <span class="kw1">and</span> convert <span class="kw1">to</span> Row#</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; hashListRows = Cells<span class="br0">&#40;</span><span class="nu0">2</span>, <span class="nu0">4</span><span class="br0">&#41;</span>+<span class="nu0">1</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; // Read in the number of list rows <span class="kw1">and</span> convert <span class="kw1">to</span> Row#</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">For</span> subRow = <span class="nu0">2</span> <span class="kw1">To</span> <span class="br0">&#40;</span>hashSubRows<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">For</span> comRow = <span class="nu0">2</span> <span class="kw1">To</span> <span class="br0">&#40;</span>hashListRows<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">If</span> <span class="br0">&#40;</span><span class="kw1">InStr</span><span class="br0">&#40;</span>Cells<span class="br0">&#40;</span>comRow, <span class="nu0">2</span><span class="br0">&#41;</span>, Cells<span class="br0">&#40;</span>subRow, <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &gt; 0<span class="br0">&#41;</span> <span class="kw1">Then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; // <span class="kw1">InStr</span> is similar <span class="kw1">to</span> Find<span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="kw1">if</span> it returns &gt;0</div>
</li>
<li class="li2">
<div class="de2">&nbsp; // - that’s a positive hit!</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Cells<span class="br0">&#40;</span>outputRow, <span class="nu0">10</span><span class="br0">&#41;</span> = Cells<span class="br0">&#40;</span>subRow, <span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; //<span class="kw1">Write</span> column1 <span class="kw1">to</span> output</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; Cells<span class="br0">&#40;</span>outputRow, <span class="nu0">11</span><span class="br0">&#41;</span> = Cells<span class="br0">&#40;</span>comRow, <span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; //<span class="kw1">Write</span> column2 <span class="kw1">to</span> output</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; outputRow = outputRow + <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; // <span class="kw1">Write</span> <span class="kw1">to</span> the <span class="kw1">next</span> row <span class="kw1">next</span> <span class="kw1">time</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">End</span> <span class="kw1">If</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Next</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Next</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">Sub</span></div>
</li>
</ol>
</div>
<p>A seasoned programmer will quickly realise that there is room for improvement in this macro, we could easily:</p>
<ul>
<li>automatically detect the end of the range and not need to enter the number of rows</li>
<li>automatically remove duplicates from the output</li>
<li>clear the output columns before the macro starts</li>
</ul>
<p>I leave implementing these to you!</p>
<h3>3. Directly Call Excel Functions Within A Macro</h3>
<p>A whiz on Excel but lost as to which VBA function to use? Most Excel functions can be called directly within a Macro i.e.</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Application.<span class="me1">WorksheetFunction</span>.<span class="kw1">Sum</span><span class="br0">&#40;</span>inty1,inty2<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<h3>4. Function: Substitute Multiple Different Values Into All The Cells of a Range</h3>
<p>Does this look familiar?</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">=Substitute<span class="br0">&#40;</span>substitute<span class="br0">&#40;</span>Substitute<span class="br0">&#40;</span>substitute<span class="br0">&#40;</span>Substitute<span class="br0">&#40;</span>substitute<span class="br0">&#40;</span>Substitute<span class="br0">&#40;</span>substitute<span class="br0">&#40;</span>….</div>
</li>
</ol>
</div>
<p>As far as I know Excel 2003 allowed eight substitutions if you had the patience to write them.</p>
<p>Let&#8217;s put point #3 into practice. As before, replicate the below template [click to enlarge] and code.</p>
<p><img class="aligncenter size-medium wp-image-111" title="String Replacement Template" src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/vba-image-2-300x33.jpg" alt="String Replacement Template" width="300" height="33" /></p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">Dim</span> subRow, comRow, outputRow <span class="kw1">As</span> <span class="kw1">Long</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; outputRow = <span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">For</span> subRow = <span class="nu0">2</span> <span class="kw1">To</span> <span class="br0">&#40;</span>Cells<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">4</span><span class="br0">&#41;</span> + <span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">For</span> comRow = <span class="nu0">2</span> <span class="kw1">To</span> <span class="br0">&#40;</span>Cells<span class="br0">&#40;</span><span class="nu0">2</span>, <span class="nu0">4</span><span class="br0">&#41;</span> + <span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">If</span> <span class="br0">&#40;</span><span class="kw1">InStr</span><span class="br0">&#40;</span>Cells<span class="br0">&#40;</span>comRow, <span class="nu0">2</span><span class="br0">&#41;</span>, Cells<span class="br0">&#40;</span>subRow, <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &gt; 0<span class="br0">&#41;</span> <span class="kw1">Then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Cells<span class="br0">&#40;</span>outputRow, <span class="nu0">5</span><span class="br0">&#41;</span> = Cells<span class="br0">&#40;</span>subRow, <span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Cells<span class="br0">&#40;</span>outputRow, <span class="nu0">6</span><span class="br0">&#41;</span> = Cells<span class="br0">&#40;</span>comRow, <span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; outputRow = outputRow + <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">End</span> <span class="kw1">If</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">Next</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Next</span></div>
</li>
</ol>
</div>
<p>Notice how we can refer to Cells directly, although this wouldn&#8217;t be ideal for hundreds of substitutions it makes for a very short macro.</p>
<h3>5. The Automatically Refreshing Pivot</h3>
<p style="text-align: left;">Create your pivot and get your layout how you like it, right click the pivots sheet and click view code, from the drop down list select your worksheet and the sub &#8220;Worksheet_Activate()&#8221; which allows you to specify a function to run every time the worksheet is opened.</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">Private</span> <span class="kw1">Sub</span> Worksheet_Activate<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; PivotTables<span class="br0">&#40;</span><span class="st0">&quot;PivotTable1&quot;</span><span class="br0">&#41;</span>.<span class="me1">Refresh</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">Sub</span></div>
</li>
</ol>
</div>
<p>This works best if you play with the Pivot options to disable ‘AutoFormat’ (which resets the layout every refresh – very irritating) and enable ‘AutoSort’ on your desired field. Using this method I prefer to make “Templates” – a blank but formatted excel book with an automatically refreshing pivot on the 2nd sheet with pretty colours and large fonts which will turn your weekly input data into something fancy with minimal intervention.</p>
<p>A final comment on pivots: If there is only one table on your worksheet then you can let your pivot see the entire worksheet and simply filter out blanks, to do this enter $A:$Z into the range selection at the start of the pivot wizard. Remember to replace $Z with a column thats way past your last column, you can re-arrange your table and the macro/pivot will still work but inserting blank columns or renaming columns used in your pivot will cause errors.</p>
<h3>6. Function: Create All Combinations of W&amp;X&amp;Y&amp;Z</h3>
<p>This macro will create a brute-force list for all combinations of the inputs, Create the below template [click to enlarge]:</p>
<p><a href="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/vba-image-3.jpg"><img class="aligncenter size-medium wp-image-112" title="Combinations Template" src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/vba-image-3-300x70.jpg" alt="Combinations Template" width="300" height="70" /></a></p>
<p>Enter &#8216;1&#8242; for blank columns and the number of rows to read for inputted columns.</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">Dim</span> col1Row, col2Row, col3Row, col4Row, noCol1Rows, noCol2Rows, noCol3Rows, noCol4Rows, outputRow <span class="kw1">As</span> <span class="kw1">Integer</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; outputRow = <span class="nu0">6</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; noCol1Rows = Cells<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; noCol2Rows = Cells<span class="br0">&#40;</span><span class="nu0">2</span>, <span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; noCol3Rows = Cells<span class="br0">&#40;</span><span class="nu0">3</span>, <span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; noCol4Rows = Cells<span class="br0">&#40;</span><span class="nu0">4</span>, <span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">For</span> col1Row = <span class="nu0">6</span> <span class="kw1">To</span> <span class="br0">&#40;</span>noCol1Rows + <span class="nu0">5</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">For</span> col2Row = <span class="nu0">6</span> <span class="kw1">To</span> <span class="br0">&#40;</span>noCol2Rows + <span class="nu0">5</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">For</span> col3Row = <span class="nu0">6</span> <span class="kw1">To</span> <span class="br0">&#40;</span>noCol3Rows + <span class="nu0">5</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">For</span> col4Row = <span class="nu0">6</span> <span class="kw1">To</span> <span class="br0">&#40;</span>noCol4Rows + <span class="nu0">5</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Trim</span><span class="br0">&#40;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; Cells<span class="br0">&#40;</span>outputRow, <span class="nu0">5</span><span class="br0">&#41;</span> = Cells<span class="br0">&#40;</span>col1Row, <span class="nu0">1</span><span class="br0">&#41;</span> &amp;amp; <span class="st0">&quot; &quot;</span> &amp;amp; Cells<span class="br0">&#40;</span>col2Row, <span class="nu0">2</span><span class="br0">&#41;</span> &amp;amp; <span class="st0">&quot; &quot;</span>  &amp;amp;  Cells<span class="br0">&#40;</span>col3Row, <span class="nu0">3</span><span class="br0">&#41;</span> &amp;amp; <span class="st0">&quot; &quot;</span> &amp;amp; Cells<span class="br0">&#40;</span>col4Row, <span class="nu0">4</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; outputRow = outputRow + <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">Next</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Next</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Next</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Next</span></div>
</li>
</ol>
</div>
<p>You can carefully remove some of the <em>FOR</em> loops to reduce the comparison to just Z&amp;Y, Z&amp;Y&amp;W or insert more loops to your hearts desire but remember to create all of the necessary variables and carefully change the template if you want extra loops.</p>
<h3>7. Some Extra Information</h3>
<p>You may find your large comparison macros take a long time to run, Excel may be refreshing the page every single time a calculation is made, to combat this toggle screen updating at the start of your sub:</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Application.<span class="me1">ScreenUpdating</span> = <span class="kw1">False</span></div>
</li>
<li class="li1">
<div class="de1">Application.<span class="me1">xlCalculationManual</span></div>
</li>
</ol>
</div>
<p>And then resume at the end if desired:</p>
<div class="vb dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Application.<span class="me1">ScreenUpdating</span> = <span class="kw1">True</span></div>
</li>
<li class="li1">
<div class="de1">Application.<span class="me1">xlCalculationAutomatic</span></div>
</li>
</ol>
</div>
<p><strong>Happy Macroing!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/7-quick-easy-vba-macros-tips-for-excel/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to fix image uploads in Wordpress with Flash 10</title>
		<link>http://www.setfiremedia.com/blog/flash-10-image-uploads-in-wordpress</link>
		<comments>http://www.setfiremedia.com/blog/flash-10-image-uploads-in-wordpress#comments</comments>
		<pubDate>Thu, 23 Oct 2008 09:34:59 +0000</pubDate>
		<dc:creator>David Lindop</dc:creator>
		
		<category><![CDATA[Setfire Media]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=126</guid>
		<description><![CDATA[Those of you who use Wordpress on your own websites will likely encounter this problem pretty soon.
Installing the latest Flash version 10 will disable the ability of any web platform that uses the SWFUpload library due to security reasons. To put this into context it will cripple the upload ability of Wordpress, Flickr, Yahoo, zooomr [...]]]></description>
			<content:encoded><![CDATA[<p>Those of you who use Wordpress on your own websites will likely encounter this problem pretty soon.</p>
<p>Installing the latest Flash version 10 will disable the ability of any web platform that uses the SWFUpload library due to security reasons. To put this into context it will cripple the upload ability of Wordpress, Flickr, Yahoo, zooomr - along with many more services I&#8217;m not aware of.</p>
<p><img class="aligncenter size-full wp-image-129" title="wordpress-image-upload" src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/wordpress-image-upload.png" alt="uploading images in wordpress" width="444" height="179" /></p>
<p>In Wordpress you click you <strong>Add media &gt; Add an Image</strong>, and from there click on <strong>Choose Files to Upload</strong>, only for nothing to happen.</p>
<p><span id="more-126"></span></p>
<p>It&#8217;s especially annoying as Flash Player 10 is a BETA release that has been forced upon users with all download links across the web being redirected to this version. It seems Adobe couldn&#8217;t be bothered to inform the rest of the web they were closing the door on this function, and couldn&#8217;t be bothered doing their own bug testing in-house before release.</p>
<p><strong>This is how to fix it</strong> (and yes it involves downgrading Flash):</p>
<h3>1. Uninstall Flash Player 10</h3>
<p>Download and run the official Flash uninstaller:</p>
<p><a href="http://www.adobe.com/support/flashplayer/downloads.html#uninstaller" target="_blank">http://www.adobe.com/support/flashplayer/downloads.html#uninstaller</a></p>
<h3>2. Install Flash Player 9</h3>
<p>Adobe have gone to great lengths to make it very hard to find legacy versions of Flash. Let me save you some time since I had to hunt down the archives myself. You&#8217;ll need to download the Flash Player 9 (99 MB) archive which includes all installers for Mac, Linux, Windows and Solaris.</p>
<p><a href="http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_14266&amp;sliceId=1" target="_blank">http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_14266&amp;sliceId=1</a></p>
<p>From here read the included readme.txt file to see which version you need. (I&#8217;m use <strong>FireFox</strong> on <strong>Windows XP</strong> so I installed 9r124/flashplayer9r124_win.exe). You can delete everything else you don&#8217;t need.</p>
<p><strong>That&#8217;s it. Your Wordpress image upload should work again.</strong></p>
<p>Internet Explorer will be more troublesome, but I&#8217;d advise using Mozilla Firefox anyway as it&#8217;s fast and generally more intuitive.</p>
<p>Hopefully Adobe will find a way to fix these security issues without affecting so many online services that have come to rely on its previous functionality. In the meantime <a href="http://wordpress.org/support/topic/177127" target="_blank">here&#8217;s some more reading</a> if you&#8217;re interested.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/flash-10-image-uploads-in-wordpress/feed</wfw:commentRss>
		</item>
		<item>
		<title>18 Simple Tweaks To Get More Clicks From Your Organic Rankings</title>
		<link>http://www.setfiremedia.com/blog/18-simple-tweaks-to-get-more-clicks-from-your-organic-rankings</link>
		<comments>http://www.setfiremedia.com/blog/18-simple-tweaks-to-get-more-clicks-from-your-organic-rankings#comments</comments>
		<pubDate>Mon, 20 Oct 2008 09:27:40 +0000</pubDate>
		<dc:creator>Andy Boyd</dc:creator>
		
		<category><![CDATA[Email Marketing]]></category>

		<category><![CDATA[Setfire Media]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=117</guid>
		<description><![CDATA[
How To Create The Perfect Page Titles &#38; Meta Descriptions
If you&#8217;ve been working in search optimisation for any length of time you&#8217;ll have heard how important it is to properly optimise your page title tag. Chances are you&#8217;ll also have heard that the meta description is also important, but on a lesser scale.
I agree wholeheartedly: [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-119" title="icanhastitleoptimisashon" src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/title_optimisation1.png" alt="icanhastitleoptimisashon" width="468" height="202" /></p>
<h3>How To Create The Perfect Page Titles &amp; Meta Descriptions</h3>
<p>If you&#8217;ve been working in search optimisation for any length of time you&#8217;ll have heard how important it is to properly optimise your page title tag. Chances are you&#8217;ll also have heard that the meta description is also important, but on a lesser scale.</p>
<p>I agree wholeheartedly: getting your <a href="http://www.setfiremedia.com/what-we-do/marketing/seo">onpage SEO</a> dialed in is critical. It&#8217;s much easier to rank a site that ticks all the onpage boxes, but that&#8217;s not to say it is impossible to rank a poorly optimised site through sheer brute force. However, I would rather make a job easier in the long run and so before I start trying to build links into a site I like to get the basics sorted.</p>
<p>Getting your titles and meta descriptions done properly is a painstaking and at times arduous task, which is something I can attest to. However, when you see the fruits of your labour, ie. ranking higher, then it can actually be a rewarding endeavour. So here we are: 18 tips to help you optimise your page title and meta description.</p>
<p><span id="more-117"></span></p>
<h3>Gathering Data</h3>
<p>It&#8217;s possible to create decent titles and meta descriptions from a hunch, or what you perceive to be popular search phrases based on your own knowledge and experience. But really good titles and description tags are built on one thing, and one thing only: good data.</p>
<p>Here&#8217;s 4 ways to gather good data that can be used to form the backbone of an optimised title tag and meta description.</p>
<ol>
<li><strong><a href="https://adwords.google.com/select/KeywordToolExternal">Google AdWords Keyword Tool</a>:</strong> use this tool to get the estimated volume of searches for keyphrases and uncover related phrases with high volume. It&#8217;s worth bearing in mind that some keyphrases are highly seasonal: who in their right mind searches for &#8216;Christmas trees&#8217; in June?</li>
<li><strong><a href="https://adwords.google.com/select/TrafficEstimatorSandbox">Google AdWords Traffic Estimator</a>:</strong> I like to use this tool to corroborate estimated volumes found in the Google AdWords Keyword Tool.</li>
<li><strong>Analytics:</strong> there&#8217;s a world of data in your stats package, whether it be Google Analytics, Clicky or something a little more high end such as Omniture. Again, use keyword data from your analytics package to determine trends and guide you towards choosing what keyphrases to optimise for.</li>
<li><strong>PPC Campaign Data:</strong> you can get a good idea of what people search for when you run a broadly targeted AdWords campaign for a couple of weeks.</li>
</ol>
<h3>What Keyphrases Convert Into Leads &amp; Sales?</h3>
<p>By now you&#8217;ll have more data than you can shake a big stick at. But now you need to quality it, and you do that by finding out what keyphrases actually generate revenue. To do this, you&#8217;ll need to have some form of goal tracking integrated between your web analytics package of choice and your website.</p>
<p>First of all, let me go slightly off topic for a brief moment to reiterate something you&#8217;ll probably already know. It&#8217;s so easy to fall into the trap of ranking for vanity phrases, the highly searched for two word keyphrases that your competitors are probably targeting. My point is this: it is very rarely the case that these vanity phrases actually pay for themselves. And there&#8217;s little point deluding yourself that if you can rank first for a given range of vanity phrases then you&#8217;ll make bank: there&#8217;s a big glass ceiling waiting for you in that case.</p>
<p>Here&#8217;s a couple of tips to help you find keyphrases that will pay you to rank.</p>
<ol>
<li><strong>Consider the effect of PPC traffic:</strong> while PPC is really useful for keyword research bear in mind that broadmatch keyphrases can really confuse the issue.</li>
<li><strong>Per visit value:</strong> track down phrases where there is good search volume and you earn a decent amount per visit. Don&#8217;t rule out keyphrases with below average per visit values: it may be that the data is skewed because you don&#8217;t rank very high.</li>
</ol>
<h3>Compiling Your Optimised Title Tag</h3>
<p>Once you have researched the data on what people actually search for and buy, then you can work on the title itself. When writing title tags I like to have some structure with the most important keyphrase at the start, backed up with a longer variation.</p>
<ol>
<li><strong>Structure:</strong> put your main keyphrase at the start of the title, eg. Blue Widgets</li>
<li><strong>Variety, it&#8217;s the spice of life (and titles):</strong> try and fit in a longer variation in the title with more keywords (note the singular variation), eg. Find The Cheapest Sky Blue Widget Deal Online Today!</li>
<li><strong>Break it up:</strong> use a non alphanumeric character between your main keyphrase and before your longer variation to break them up. You can use anything such as a pipe, hyphen, colon or an arrow.</li>
<li><strong>Include a call to action:</strong> real people actually read SERPs and are scanning down that list to see something that appeals to them. So why not include a call to action in your title? Not only will it help differentiate you from your competition, but it also increases your CTR.</li>
<li><strong>Don&#8217;t go over 65 - 68 characters max:</strong> if your title is long and unwieldy it gets cut off in the SERPs and looks crap. <a href="http://www.webworldindex.com/countcharacters.htm" target="_blank">Use this tool</a> to check how many characters are in your title.</li>
<li><strong>Meld it all together:</strong> Blue Widgets | Find The Cheapest Sky Blue Widget Deal Online Today!</li>
</ol>
<h3>Customising The Meta Description</h3>
<p>The meta description has been widely ignored in SEO circles. In fact, good onpage optimisation is arguably missing from the toolbox of many search marketers now because we rightly or wrongly focus almost entirely on building backlinks.</p>
<p>However, in my own tests in various competitive niches I have seen excellent ROI from optimised meta descriptions. They should read well, like an advertisement designed to appeal to searchers looking for the product or service you offer.</p>
<ol>
<li><strong>Re-examine data:</strong> take another look at the data you gathered earlier and identify variations on your main keyphrase and secondary keyphrases.</li>
<li><strong>Sprinkle in your long tail keyhrases:</strong> the meta description is an ideal place to drop in those long tail keyphrases that actually generate revenue.</li>
<li><strong>Work in singular and plural variations:</strong> lots of people in the buying cycle search using a singular keyword, eg. unique blue widget for women. In fact in some verticals, like hotels, the majority of searches are singular. I also think that someone searching with a singular keyphrase is further along in the buying cycle: they know what they want, now they just want to find a place to buy it. So don&#8217;t miss out on the traffic!</li>
<li><strong>Use the description to sell the sizzle:</strong> appeal to prospects in the buying cycle by mentioning your USP: free home delivery, 1 year guarantee, industry leading warranty, 24hr telephone support etc.</li>
<li><strong>Aim for 165 - 170 characters:</strong> this is a contentious one, but I&#8217;ve seen great results when you treat the meta description like an advertisement with a set number of characters available. Maybe SEOs should start using Twitter more to help get into this mindset of limited character usage! ;)</li>
<li><strong>Put it all together:</strong> Find great deals on a cheap small light blue widget for women @ your site. Buy low cost small sized blue widgets with purple accessories today &amp; get free home delivery!</li>
</ol>
<p>Ideally you would optimise each page on your site in this way, but that&#8217;s difficult when you&#8217;re working with thousands of products in hundreds of categories. Choose what to optimise for first based on what would give the highest ROI for your business.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/18-simple-tweaks-to-get-more-clicks-from-your-organic-rankings/feed</wfw:commentRss>
		</item>
		<item>
		<title>Rails: ‘Has_many through’ Association Across Databases</title>
		<link>http://www.setfiremedia.com/blog/rails-has-many-through-association-across-databases</link>
		<comments>http://www.setfiremedia.com/blog/rails-has-many-through-association-across-databases#comments</comments>
		<pubDate>Tue, 14 Oct 2008 16:04:03 +0000</pubDate>
		<dc:creator>John Main</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Email Marketing]]></category>

		<category><![CDATA[Setfire Media]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=102</guid>
		<description><![CDATA[So recently I had the challenge of creating a &#8216;has_many through&#8217; relationship across two databases.
&#8220;Why would you do this?&#8221; you may ask. Well quite simply I am in a team building a new data management system to sit on top of a legacy system with its legacy database. All the new code is new, shiny [...]]]></description>
			<content:encoded><![CDATA[<p>So recently I had the challenge of creating a &#8216;has_many through&#8217; relationship across two databases.</p>
<p>&#8220;Why would you do this?&#8221; you may ask. Well quite simply I am in a team building a new data management system to sit on top of a legacy system with its legacy database. All the new code is new, shiny and streamlined and the old code is&#8230; well&#8230; crap but we have to keep both systems running concurrently so we have various tables in the legacy database we need to access from the new system. As it happens we need to access the legacy users table in a &#8216;has_many through&#8217; from the new &#8216;orders&#8217; table.<br />
<span id="more-102"></span></p>
<h3>Set Up Your Secondary Database Connection</h3>
<p>You can quite happily set up a model to connect do a database other then the default by setting the connection up in your &#8216;config/database.yml&#8217; as follows:</p>
<div class="rails dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">legacy:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; adapter: <span class="sy0">&lt;</span>adapter<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; database: <span class="sy0">&lt;</span>database<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; username: <span class="sy0">&lt;</span>username<span class="sy0">&gt;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; password: <span class="sy0">&lt;</span>password<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>And then in any model you want to use with your secondary database:</p>
<div class="rails dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>model<span class="sy0">&gt;</span>.<span class="me1">establish_connection</span> configurations<span class="br0">&#91;</span><span class="st0">&#8216;legacy&#8217;</span><span class="br0">&#93;</span></div>
</li>
</ol>
</div>
<h3>Create Your &#8216;Through&#8217; Model</h3>
<p>Now a normal &#8216;has_many through&#8217; just plain won&#8217;t work between models attached to two different databases but a normal has_many will. So we can create &#8216;has_many through&#8217; functionality in the following way:</p>
<p>Set up your &#8216;through&#8217; model on either database. It really doesn&#8217;t matter which and set it to &#8216;belong_to&#8217; your two main models.</p>
<p>Set both main models to &#8216;has_many&#8217; of your &#8216;through&#8217; model.</p>
<h3>Create Your &#8216;Through&#8217; Relationship</h3>
<p>Use the following code in each of your main models to mimic the &#8216;has_many through&#8217; association. In this example I&#8217;m using &#8216;orders&#8217; and &#8216;users&#8217; and my &#8216;through&#8217; table is &#8216;order_users&#8217;:</p>
<p>In &#8216;order&#8217;</p>
<div class="rails dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">def</span> users</div>
</li>
<li class="li1">
<div class="de1">&nbsp; user = <span class="br0">&#91;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; order_users.<span class="kw5">each</span> <span class="kw1">do</span> |ou|</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; user <span class="sy0">&lt;&lt;</span> ou.<span class="me1">user</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; user</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>In &#8216;user&#8217;</p>
<div class="rails dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">def</span> orders</div>
</li>
<li class="li1">
<div class="de1">&nbsp; order = <span class="br0">&#91;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; order_users.<span class="kw5">each</span> <span class="kw1">do</span> |ou|</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; order <span class="sy0">&lt;&lt;</span> ou.<span class="me1">user</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; order</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>And you&#8217;re done. Now the relationship will work just like any other &#8216;has_many through&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/rails-has-many-through-association-across-databases/feed</wfw:commentRss>
		</item>
		<item>
		<title>7 Top Tips for Coding With Currency</title>
		<link>http://www.setfiremedia.com/blog/7-top-tips-for-coding-with-currency</link>
		<comments>http://www.setfiremedia.com/blog/7-top-tips-for-coding-with-currency#comments</comments>
		<pubDate>Tue, 07 Oct 2008 11:46:30 +0000</pubDate>
		<dc:creator>John Main</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=101</guid>
		<description><![CDATA[As anyone who&#8217;s ever made an e-commerce system knows, money is everything. No, really if you don&#8217;t get your financial sums right then you can&#8217;t hope to build a successful online business (and may find yourself creating potential legal issues with the tax man).
So here&#8217;s a rundown of the top tips I can give for [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-104" src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/10/currency.png" alt="" width="177" height="300" />As anyone who&#8217;s ever made an e-commerce system knows, money is everything. No, really if you don&#8217;t get your financial sums right then you can&#8217;t hope to build a successful online business (and may find yourself creating potential legal issues with the tax man).</p>
<p>So here&#8217;s a rundown of the top tips I can give for making your financial calculations that bit easier.</p>
<h3>1. Always Work in Minor Units</h3>
<p>I can&#8217;t stress enough how much this helps in terms of accuracy, rounding and speed. Working in major units may look better to you as you don&#8217;t have to reformat the numbers to display them but I hope I can make the case here for minor units.</p>
<h4>a. Integer arithmetic is much much faster than floating point arithmetic.</h4>
<p>Remember that even a single decimal place makes a number a float as far as your computer is concerned and all the processor overheads that go along with them suddenly arrive. I know it&#8217;s not a lot slower but in a complex financial system it all adds up believe me.</p>
<p><span id="more-101"></span></p>
<h4>b. Floating point arithmetic can get its sums wrong.</h4>
<p>Don&#8217;t believe me? Then pull up a Ruby console and try this:<br />
<code><br />
a = "69.54".to_f<br />
b = a * 100<br />
b.ceil<br />
</code></p>
<p>Gives 6955 instead of 6954. This is because the limitations of floating point arithmetic have caused something like 0.0000000000000000000000000000000000000000000000001 to be added to 69.54. I spent a good 4 hours chasing this bug which manifested itself as a 1p discrepency.</p>
<h4>c. Trailing zeros can cause problems for major units.</h4>
<p>Think of trying to pass round £10.00 or £1.10 in major units. Storing it as a float you would keep losing the trailing zeros and would find yourself having to sprintf all over the place. I&#8217;ve seen plenty of systems in my time that store prices as decimal strings to get round these issues!</p>
<p>There are of course various decimal formats that can be used (decimal is a data type in MySQL and BigDecimal has been introduced in Ruby on Rails) but when it comes down to it, these are just wrappers around either floats or stings and majorly sub-optimal for the other reasons given.</p>
<h3>2. Freeze the Exchange Rate</h3>
<p>If your business works in pounds but you allow payments to be made in Euros then with every payment you need to store the current exchange rate with it. Exchange rates change by the day and if you don&#8217;t know exactly what rate you get for your transactions then you can kiss goodbye to any sort of accurate profit calculations.</p>
<h3>3. Rounding: Pick a Direction and Stick With It</h3>
<p>Often you will need to apply discounts, add markup etc and have to perform percentage calculations. If you are working in minor units this should be the only time (in normal day to day operations) that you ever have to handle fractions of pence. You will make your life so much simpler if, for all these calculations you decide the direction to round and stick with it. Do you want to keep the extra for yourself or be a nice guy and let the customer keep it? That&#8217;s what the decision comes down to.</p>
<p>If you don&#8217;t have consistency in this you really will find yourself spending days chasing 1p discrepancies.</p>
<p>From a coding point of view I tend to round down as preference because (as I demonstrate above) floating point arithmetic can get it wrong sometimes and, as it just wipes out everything after the decimal point, a &#8216;floor&#8217; function is much more reliable that a &#8216;ceil&#8217;.</p>
<h3>4. Use a Pre-Filter On Your Submissions</h3>
<p>Of course your customers are always going to want to work in major units - no-one wants to see prices in pence splashed all over your website and it&#8217;s much more intuitive to type major units into form fields.</p>
<p>What I like to do is put a pre-filter on all input coming into my back end system (so in Rails you would run the filter on &#8216;params&#8217; or in PHP you would run it on &#8216;$_REQUEST&#8217;) which pattern matches any string monetary amount (remember, all form submission values come through as strings) in a major unit and converts it to an integer minor unit.</p>
<p>In Rails it&#8217;s in the application controller and looks like this:<br />
<code><br />
def filter_units (input)<br />
&nbsp;if [Array, Hash, HashWithIndifferentAccess].include?(input.class)<br />
&nbsp;&nbsp;input.each do |key, value|<br />
&nbsp;&nbsp;&nbsp;#recurse through the data structure<br />
&nbsp;&nbsp;&nbsp;input[key] = self.filter_units(value)<br />
&nbsp;&nbsp;end<br />
&nbsp;#match the string format for a major unit<br />
&nbsp;elsif not input.nil? and input.match(/^\d+\.\d\d)$/)<br />
&nbsp;&nbsp;#convert to a minor unit integer<br />
&nbsp;&nbsp;(input.to_f * 100.0).to_i<br />
&nbsp;else<br />
&nbsp;&nbsp;#return the value unchanged<br />
&nbsp;&nbsp;input<br />
&nbsp;end<br />
end<br />
</code></p>
<p>This also has the added benefit of validating monetary amounts - if a monetary field doesn&#8217;t hit your back end as an integer then you know it has failed validation.</p>
<p>So there you have it. I&#8217;m not saying these are all the answers to a coding trouble-free finance system for your <a href="http://www.setfiremedia.com/what-we-do/design-and-build/e-commerce">e-commerce store</a>, but they&#8217;ll give you a solid starting point and hopefully avoid a few hours of head-scratching.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/7-top-tips-for-coding-with-currency/feed</wfw:commentRss>
		</item>
		<item>
		<title>Wear it Pink</title>
		<link>http://www.setfiremedia.com/blog/wear-it-pink</link>
		<comments>http://www.setfiremedia.com/blog/wear-it-pink#comments</comments>
		<pubDate>Mon, 06 Oct 2008 10:55:59 +0000</pubDate>
		<dc:creator>David Lindop</dc:creator>
		
		<category><![CDATA[Setfire Media]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=103</guid>
		<description><![CDATA[Friday 31st October&#8230; mark that date in your diary, preferably with pink high-lighter, because it&#8217;s the 2008 Wear it Pink day organised by Breast Cancer Campaign, the funding body that supports national research into breast cancer.
We&#8217;ll be doing our bit here at Setfire to raise a few quid, although some of us may need to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="float: right;" src="http://www.wearitpink.co.uk/templates//images/logo.gif" alt="Wear it pink" width="123" height="73" /><strong>Friday 31st October</strong>&#8230; mark that date in your diary, preferably with pink high-lighter, because it&#8217;s the 2008 <a href="http://www.wearitpink.co.uk/" target="_blank">Wear it Pink day</a> organised by Breast Cancer Campaign, the funding body that supports national research into breast cancer.</p>
<p>We&#8217;ll be doing our bit here at Setfire to raise a few quid, although some of us may need to search hard for something pink to wear. Hopefully we can get some photos posted!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/wear-it-pink/feed</wfw:commentRss>
		</item>
		<item>
		<title>Avoid Growing Pains: 15 Tips to Properly Setup Your Own Hosting Racks</title>
		<link>http://www.setfiremedia.com/blog/15-tips-to-properly-setup-your-own-hosting-racks</link>
		<comments>http://www.setfiremedia.com/blog/15-tips-to-properly-setup-your-own-hosting-racks#comments</comments>
		<pubDate>Mon, 29 Sep 2008 16:55:49 +0000</pubDate>
		<dc:creator>Jonathan Clark</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=92</guid>
		<description><![CDATA[When you get successful, you may find that you move from someone else looking after your hosting, to running a complete rack (or racks) yourself. Standing with that shiny new rack towering over you, there seems so much space and flexibility, and anything not quite right now can be fixed later, right?
Correcting a bad installation [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/09/server-with-cables.jpg" alt="Server With Cables" title="Server With Cables" width="300" height="301" class="alignright size-full wp-image-100" />When you get successful, you may find that you move from someone else looking after your <a href="http://www.setfiremedia.com/what-we-do/design-and-build/hosting">hosting</a>, to running a complete rack (or racks) yourself. Standing with that shiny new rack towering over you, there seems so much space and flexibility, and anything not quite right now can be fixed later, right?</p>
<p>Correcting a bad installation will be extremely difficult, disruptive, or just impossible to do once you are up and running. Follow these tips in planning your rack before the first piece of equipment goes in and you will save not only time later, but you will be thanking me when the sh*t hits the fan.</p>
<p><span id="more-92"></span></p>
<h3>1. Get Your Ventilation Right</h3>
<p>Find out which way the servers vent, and mount them the right way round. Get this wrong and not only will your servers run too hot, but you will likely be required to shut them down and turn them round - or they will be shut down for you.</p>
<p>Data centers have hot and cold isles. The air intake on the servers should be in the cold isle, and the exhaust should be in the hot one. All your servers should be mounted the same way round by airflow otherwise you can end up with the exhaust from one server feeding into the intake of another.</p>
<h3>2. Choose the Right Switch</h3>
<p>The more equipment you run, the less able you are to tell which equipment consumes which bandwidth. The best way to handle this is by using a managed switch. A managed switch will give you a facility to capture traffic statistics for each port and using a tool such as <a href="http://www.cacti.net/">Cacti</a> you can report on this.</p>
<h3>3. Plan Where to Position Your Kit</h3>
<p>Think about which equipment is likely to produce the most heat and put it near the top; not too high that its difficult to lift though. When mounting equipment on the back of the rack, think about where the servers will go and make sure you leave that space clear.</p>
<p>Plan networking to keep the cabling short and neat. Put the network switch at the top on the back where the servers have their networking on the rear. Then run the networking down<br />
one side of the rack, and the power down the other.</p>
<h3>4. Use the Proper Supports</h3>
<p>It might be just you at the data center and if the server you need to get to is at the bottom of a stack of unsupported servers you might be in trouble.</p>
<p>If your servers come with rack rails, use them. Make sure your servers are properly supported so that each one can be removed independently; use rack shelves for servers without rails.</p>
<h3>5. Plan Your Capacity</h3>
<p>Think about the amount of equipment you will likely install in your rack, and size your network and power accordingly. By this I don&#8217;t mean bandwidth into the rack - this can easily be upgraded down the line.</p>
<p>What matters now is that you plan enough network ports for the equipment going in the rack. Make sure you take into account not just the servers, but other equipment such as Masterswitches, KVM etc. Its cheaper to put in a 24 port switch now, but it will be a real pain to swap it out for a 48 port one later.</p>
<h3>6. Use Remote Power Management and Fuse It Correctly!</h3>
<p>The ability to power-cycle your own servers either using on-board management or a remote power management unit such as the APC Masterswitch can be a godsend. For a small cost you can bypass the remote-hands of the data center and be in control of things. This is particularly important if the data center is not manned 24 hours.</p>
<p>If you install power distribution or management, make sure you fuse the supplies according to the load they are capable of drawing. Here in the UK, an 8-port Masterswitch is capable of handling 10 amps. Make sure its supply cable and fuse are capable of this. If your cable is fused at 5A, you won&#8217;t know about it until the fuse heats up and melts the plug; this will be a slow death and when it eventually fails, it will happen either at your busiest time, or in the middle of the night.</p>
<h3>7. Run Dual PSU Servers off Dual Mains Supplies</h3>
<p>If you are lucky enough to have servers with dual power supplies, make sure each supply is fed from a different power source. This could be two separate Masterswitches or even two separate incoming mains supplies to the rack. The server is designed to happily run on a single supply and so this arrangement will give you the best redundancy in the event of a failure.</p>
<p>To power cycle the server you will need to shut down the power to one PSU, and then cycle the other one, finally bringing the first supply back.</p>
<h3>8. Keep Power (&amp; All Cabling) Accessible</h3>
<p>Once your rack fills up, the access you had to the spaces between the front and rear of the rack will be gone. Make sure the incoming mains supply and distribution will still be accessible, and your incoming cable feeds (most likely in the floor) are kept clear in case you need more cabling installed.</p>
<p>If your power distribution has been fitted in the middle part of the rack or behind the rear mounting rail, MOVE IT NOW - while you still can. Visualise your rack full of equipment and make sure you will still be able to access all power and network.</p>
<h3>9. Program Network Equipment Before You Install It</h3>
<p>Once your switch is installed and in use, you don&#8217;t want to discover it needs a reboot to configure it. Make sure switches are set up before you take them to the data center.</p>
<h3>10. Label Everything, Front and Back</h3>
<p>I can&#8217;t stress this too much. Invest in a Dymo and label everything on the front and the back, and if it has a cover, label that too. It might not be you visiting the equipment in the future, so it needs to be very obvious to someone who may not have seen your rack before which server you want them to look at. This will also help when you are there in an emergency and need to be sure the server you are messing with is the right one.</p>
<h3>11. Maintain Up-to-date Documentation</h3>
<p>Every time you make a change to your equipment, <strong>make a note of the change</strong>. If you alter power, update your Masterswitches. If you add some network, update your switch/monitoring. You can&#8217;t effectively manage your servers if you are not 100% sure you are looking at the right thing. Imagine power cycling a server, only to find you just killed the wrong one!</p>
<h3>12. Get Your Own Monitor and Keyboard</h3>
<p>Data centers usually provide a trolley with a keyboard, mouse and monitor - so you don&#8217;t need your own there &#8230; right? Wrong. Imagine you are there in an emergency needing access to one of your servers only to find you need a USB keyboard and the only one on the trolley is PS2. Or you turn up after a failure and there are half a dozen other engineers there fighting over the same trolley. It does happen.</p>
<p>Invest in your own; a number of companies make a 1U monitor with keyboard, so it won&#8217;t use up much space and its not expensive.</p>
<h3>13. Use KVM / Server Management Over IP</h3>
<p>It can be a very handy thing to know what&#8217;s on the console screen of the server in your rack. An IP KVM will allow you to be standing at the console of that server from the comfort of your own desk. This can be extremely useful in the diagnosis of problems, and will allow you to recover a server you just broke the network configuration on! Another way to accomplish this is with a management card installed on the server.</p>
<h3>14. Keep Cables Tidy</h3>
<p>Don&#8217;t just use the extremely long power cables which came with your server. Buy a range of lengths and aim to keep them as short as possible. Cable tie the power lead to the back of the server so that it can&#8217;t accidentally be dislodged. Make or shorten your own network cables so they are exactly the right length. Use plenty of cable ties to keep things neat and make sure the connectors are not under any strain.</p>
<h3>15. Keep Tools and Spares on Site</h3>
<p>If space allows, install a rack drawer in your rack, and keep a range of spares in it. These should include:</p>
<ul>
<li>power leads</li>
<li>fuses</li>
<li>network cables</li>
<li>cable ties</li>
<li>rack nuts and screws</li>
<li>tool kit including screwdrivers, pliers and cutters</li>
<li>documentation</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/15-tips-to-properly-setup-your-own-hosting-racks/feed</wfw:commentRss>
		</item>
		<item>
		<title>How Friendly Will a URL Ever Be?</title>
		<link>http://www.setfiremedia.com/blog/how-friendly-will-a-url-ever-be</link>
		<comments>http://www.setfiremedia.com/blog/how-friendly-will-a-url-ever-be#comments</comments>
		<pubDate>Thu, 25 Sep 2008 14:18:07 +0000</pubDate>
		<dc:creator>Sam Phillips</dc:creator>
		
		<category><![CDATA[Setfire Media]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=54</guid>
		<description><![CDATA[I&#8217;m an address bar guy; I don&#8217;t use bookmarks and barely use a link toolbar. And somedays, my typing could be better - if/when the new gTLDs come in, the owners of &#8216;facebook.comk&#8217; and &#8216;google.comk&#8217; will get a good 50% of my surfing time and a catch-all on &#8217;setfiremedia.comk&#8217; would receive all of my internal [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-95" title="urlpic1" src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/09/urlpic1.png" alt="" width="288" height="156" />I&#8217;m an address bar guy; I don&#8217;t use bookmarks and barely use a link toolbar. And somedays, my typing could be better - if/when the new <a href="http://en.wikipedia.org/wiki/Generic_top-level_domain">gTLDs</a> come in, the owners of &#8216;facebook.comk&#8217; and &#8216;google.comk&#8217; will get a good 50% of my surfing time and a catch-all on &#8217;setfiremedia.comk&#8217; would receive all of my internal emails. I&#8217;m just as bad with .co.uk - the amount of traffic I send to &#8216;news.bbc.co.il&#8217; and &#8216;news.bbc.co.yj&#8217; is shocking.</p>
<p><span id="more-54"></span></p>
<h3>For Many, Search Engines Are The Web</h3>
<p>Most people, of course, don&#8217;t use URLs this way. This isn&#8217;t because they are more or less error-prone in their typing, but rather because their primary experience of web navigation is different - search engines are the front door to the web to many; they <em>are</em> the web to even more. This even holds true for when users <em>do</em> know the URL - we&#8217;ve all watched, head in hands, people type fully-qualified URLs into Google.</p>
<p>Organisations have caught on to this, and it interests me that we are witnessing a shift in how they direct you to their online presence from offline sources - adverts, brochures etc. It seems especially prevalent in government ads - the Royal Navy&#8217;s current TV advertising campaign, for example, simply tells the viewer to &#8220;search for &#8216;navy jobs&#8217;&#8221; for further details. The assumption, of course, is that they will rank #1 in whatever search engine the user choices. The risk, of course, is that somebody <a href="http://www.jemjabella.co.uk/using-seo-to-steal-hits">finds a way to hijack the listings</a> for this term. It&#8217;s an old joke, but anyone who&#8217;s ever searched for &#8216;<a href="http://www.albinoblacksheep.com/text/victories.html">french military victories</a>&#8216; knows what I&#8217;m talking about. Even ensuring you&#8217;ve got the top PPC hit won&#8217;t compensate for that level of negative PR.</p>
<p>What&#8217;s interesting is that, for the sake of usability, <strong>organisations are choosing to add an additional stage to the process of finding their website</strong>. By directing people to search for a term and then click on the result, they&#8217;re actually lengthening the process in order to make it easier. Risk factors aside, it&#8217;s a pretty good idea, and a pretty major development.</p>
<h3>What Does The Future Hold For URLs?</h3>
<p>So is natural language taking over, and are all attempts to improve URLs futile? Has the slow progress of the regulating bodies meant that we&#8217;ve had to find a better solution? Of course, some URLs are clever slogans themselves and add value to a product, but it seems that most are arbitrary identifiers, obfuscated by acronyms, abbreviations and dots, dashes and other de-humanised elements.</p>
<p>What do you reckon? Are the unbelievable sums of money spent on domain names wasted? Should Google Search stop using the URL of a site as an indicator of relevance? Or will their <a href="http://www.google.com/support/chrome/bin/answer.py?hl=en&amp;answer=95440">omnibar</a>, or Mozilla&#8217;s <a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/">ubiquity</a>, be the final nail in URL coffin?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/how-friendly-will-a-url-ever-be/feed</wfw:commentRss>
		</item>
		<item>
		<title>7 Reasons Why Guest Posting is Integral to Any Linkbuilding Campaign</title>
		<link>http://www.setfiremedia.com/blog/7-reasons-why-guest-posting-is-integral-to-any-linkbuiling-campaign</link>
		<comments>http://www.setfiremedia.com/blog/7-reasons-why-guest-posting-is-integral-to-any-linkbuiling-campaign#comments</comments>
		<pubDate>Mon, 22 Sep 2008 16:14:06 +0000</pubDate>
		<dc:creator>Andy Boyd</dc:creator>
		
		<category><![CDATA[Search Engine Optimisation]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=86</guid>
		<description><![CDATA[There are many ways to build backlinks. There are many ways to waste your time building backlinks too. Anyone who has ever been involved with a prolonged linkbuilding campaign will tell you that it&#8217;s hardly the most glamorous of jobs, nor is it particularly inspirational. Days go by in a blur of emails and weeks [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-91" title="Chain Links" src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/09/chain-links.jpg" alt="Chain Links" width="300" height="200" />There are many ways to build backlinks. There are many ways to waste your time building backlinks too. Anyone who has ever been involved with a prolonged linkbuilding campaign will tell you that it&#8217;s hardly the most glamorous of jobs, nor is it particularly inspirational. Days go by in a blur of emails and weeks tend to endlessly slide by in a blaze of IM chats, forum PMs and phone calls. All this and it can still take months before the fruits of your labour are manifested in better organic rankings.</p>
<p>Let it be known: building links is not easy. Therefore, it makes sense to invest your time and effort in something that just works. And for me, that means guest posting.</p>
<p><span id="more-86"></span></p>
<p>So why <a href="http://www.chrisg.com/how-to-guest-blog-without-disaster/">guest posting</a>? Well for a start I think that Google places weight on semantically relevant links from relevant sites in your niche. I don&#8217;t think there are many who would argue against that logic. I also think that there&#8217;s something to be said about building a clean backlink portfolio containing links from authorities and powerful sites rather than spammy links from paid posts and forum signatures.</p>
<p>If you want to make a few quick bucks on some Made For AdSense site then you&#8217;ll probably not care too much about who links to you. But if you actually care about building a brand that will stand a chance of weathering the algorithmic shuffles we&#8217;ll see in the years to come, then building link equity from other similarly strong sites is what you need to do. And here&#8217;s why.</p>
<h3>1. Sheer Power</h3>
<p>Buy a sitewide link in the footer or sidebar of some average blog or get a link from a niche authority? I know what one I&#8217;d go for, and I know what one will count more in Google&#8217;s authority-skewed algorithm.</p>
<h3>2. Semantic Relevance</h3>
<p>Ideally I like to guest post on a site in the same or highly relevant niche. In an ideal world you would guest post &#8216;10 Ways To Improve Your Surfing Skills&#8217; on a site about surfing, but it would also work on a site about bodyboarding or windsurfing. Always try and keep your guest post as relevant as possible both to the blog where it will be placed and also to who you are linking to.</p>
<h3>3. Links From Within Content</h3>
<p>What do you think looks more natural? If you were drawing up the specification for a search ranking algorithm, what type of link would score higher? In my opinion there&#8217;s no choice between a link to your site from the footer of a site in your niche surrounded by no text with links on either side to, at best, vaguely related sites with overtly commercial anchor text and a link from within contextually relevant text. There&#8217;s just no comparison. At all.</p>
<h3>4. Control Of Anchor Text</h3>
<p>Of course there&#8217;s more to building link equity than getting as many links as you can: matching up anchor text with the target URL is also very important. If you are buying in links either directly from a publisher or through a link brokerage then you&#8217;ll have almost complete control over your choice of anchor text. There are some brokerages with a much higher editorial standard who require you to use modifiers, but by and large the average brokerage is in it for the money and won&#8217;t stand in your way no matter what you want for anchor text.</p>
<p>Guest posting tends to operate differently and much depends on how much trust there is between you and the site owner. Nevertheless, you should be able to get a solid targeted link from your guest post with good anchor text.</p>
<h3>5. Good Neighbourhood Association</h3>
<p>One of the best things about guest posting, in my opinion, is the ability to associate your site with others in a neighborhood. Most people doing <a href="http://www.setfiremedia.com/what-we-do/marketing/seo">SEO</a> now will be aware of the benefits of being in a &#8216;good neighbourhood&#8217; and how it can affect your organic rankings. Guest posting is one of the best techniques to build links from authority sites <em>and</em> also place your link alongside links to other niche authorities.</p>
<p>Say you were writing a guest post on &#8216;10 Tips For Enjoying A Trip Though Peru&#8217; to be placed on some blog on Peru or South America, make sure you link to other posts on that domain but also throw in some links to relevant Wikipedia and WikiTravel entries as well as content on government sites and other authorities in the niche.</p>
<p>Compare this to buying links through an unscrupulous link brokerage. In my <span style="text-decoration: line-through;">small</span> mind this technique hands down beats having your link placed beside contextually irrelevant links to sites of potentially dubious quality and trust who may even be in a completely different niche.</p>
<h3>6. Secondary Linkage Means More Juice</h3>
<p>Guest posts <em>do not</em> have to become orphaned. If you create a piece of useful content on a site in your niche that has a large readership, then that guest post stands a good chance of building secondary links. As with any blog your guest post will eventually be pushed off the front page and down the archives by fresher content. Nobody <em>ever</em> links to your typical paid post, but high quality guest posts on powerful sites often pick up links from other sites which means they aren&#8217;t orphaned and actually pass on power and authority.</p>
<p>One of the best ways to get links to your content is to give the publisher a guest post or <a href="http://www.setfiremedia.com/what-we-do/marketing/linkbait">linkbait</a> that can be pushed on social media sites. That way the publisher may get a lot of traffic, more search traffic and an increase in readership, which, let&#8217;s face it, will make it more likely you get asked to guest post in the future.</p>
<h3>7. Surviving Manual Inspection</h3>
<p>One of the greatest fears of any SEO is having their site <a href="http://www.seobook.com/will-your-website-pass-google-review">manually reviewed</a>. If it&#8217;s easy for your competitors to reverse engineer your backlink portfolio, then you can be sure than the staff of any major search engine are adequately equipped to spot unnatural and obviously paid-for links. Integrating your link into a guest post makes it much more difficult for a search engine to devalue the power of that link.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/7-reasons-why-guest-posting-is-integral-to-any-linkbuiling-campaign/feed</wfw:commentRss>
		</item>
		<item>
		<title>PPC Optimisation: 5 Ways To Track Phone Sales From PPC / AdWords</title>
		<link>http://www.setfiremedia.com/blog/ppc-optimisation-5-ways-to-track-telephone-sales-from-ppc-adwords</link>
		<comments>http://www.setfiremedia.com/blog/ppc-optimisation-5-ways-to-track-telephone-sales-from-ppc-adwords#comments</comments>
		<pubDate>Tue, 16 Sep 2008 10:08:34 +0000</pubDate>
		<dc:creator>Ian Cowley</dc:creator>
		
		<category><![CDATA[Search Engine Marketing]]></category>

		<guid isPermaLink="false">http://www.setfiremedia.com/blog/?p=59</guid>
		<description><![CDATA[How do you measure the true return on PPC ad spend when phone leads or phone sales are not being taken into account?
If we take a typical e-commerce store as an example, up to 35% of sales can be taken over the telephone.  Accurately attributing these sales can make a big difference to how [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.setfiremedia.com/blog/wp-content/uploads/2008/09/old-telephone.jpg" alt="Old Telephone" title="Old Telephone" width="250" height="211" class="alignright size-full wp-image-87" />How do you measure the true return on PPC ad spend when phone leads or phone sales are not being taken into account?</p>
<p>If we take a typical e-commerce store as an example, up to 35% of sales can be taken over the telephone.  Accurately attributing these sales can make a big difference to how you <a href="http://www.setfiremedia.com/what-we-do/marketing/ppc-marketing">optimise your PPC campaigns</a>, and have an effect on the overall ROI from paid search marketing.</p>
<p>Most web analytics solutions do a great job of tracking where sales come from, be it from organic search traffic, direct type-in traffic or PPC traffic. However, the source of telephone orders is one area that site owners often choose to ignore because it&#8217;s difficult to track.</p>
<p>Here&#8217;s a few ways to track PPC traffic that generates orders over the phone.</p>
<p><span id="more-59"></span></p>
<h3>1. Use Unique Promo Codes On PPC Landing Pages</h3>
<p>This can be achieved by tagging your urls with a CGI parameter, such as &#8220;?land=adwords&#8221;. With a bit of code you can get this code printed on the page, as &#8220;Promo:adwords&#8221; in the footer will work fine. When customers call and place an order make sure everyone is trained to ask them for their &#8220;promo&#8221; code, which gets stored with an order placed over the phone.</p>
<p>Furthermore, you could be a little more cryptic with your promo codes if you want to hide what you&#8217;re doing from your customers. Using custom promotional codes works well if you are running large PPC campaigns with hundreds of keywords and landing pages.</p>
<h3>2. Use A Unique Telephone Number On Landing Pages</h3>
<p>This is a very simple but effective technique: switch the telephone number based on the referring site. If you wanted to be thorough you could get a telephone number for MSN, Yahoo or AdWords. This method is more suitable for sites offering a limited product range and bid on a small range of keywords.</p>
<h3>3. Use A Pay Per Call Service</h3>
<p>Set up a new telephone number and then put that number on your landing page. Pay Per Call services come with powerful stats so you can measure just how many calls you have received. Also using a service such as <a href="http://paypercall.ingenio.com/default.aspx">Ingenio</a> means you only pay for phone call leads from new customers calling your business.</p>
<h3>4. Track Sales With Specialist Telephone Call Conversion Software</h3>
<p>Choose a solution such as that provided by <a href="http://www.clickpath.com">ClickPath</a> to track all conversions generated from your online advertising, including phone calls, and tie them back to the exact keyword or ad source.</p>
<h3>5. Use An IVR Phone System</h3>
<p>Harnessing the power of an <a href="http://en.wikipedia.org/wiki/Interactive_voice_response">IVR phone system</a> can take the headaches out of getting your staff to record the lead source. You could add an extra menu on your phone system asking people for a promo code that is unique to the referring site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.setfiremedia.com/blog/ppc-optimisation-5-ways-to-track-telephone-sales-from-ppc-adwords/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
