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

<channel>
	<title>Johnsee</title>
	<atom:link href="http://www.johnsee.com.au/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.johnsee.com.au</link>
	<description>Musings on Online Marketing and the World</description>
	<lastBuildDate>Thu, 18 Apr 2013 11:01:54 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>Comparison of VPS Options in Australia</title>
		<link>http://www.johnsee.com.au/2013/04/comparison-of-vps-options-in-australia/</link>
		<comments>http://www.johnsee.com.au/2013/04/comparison-of-vps-options-in-australia/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 10:50:05 +0000</pubDate>
		<dc:creator>Tom Johns</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.johnsee.com.au/?p=120</guid>
		<description><![CDATA[I&#8217;m currently in the middle of a project that requires VPS hosting physically located in Australia. I currently have a VPS in Tokyo, New York, California and Amsterdam with Linode and Digital Ocean, but one in Australia is new to me. It&#8217;s just a proof of concept initially so I&#8217;m looking at fairly low spec&#8217;ed instances, ...]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m currently in the middle of a project that requires VPS hosting physically located in Australia. I currently have a VPS in Tokyo, New York, California and Amsterdam with Linode and Digital Ocean, but one in Australia is new to me. It&#8217;s just a proof of concept initially so I&#8217;m looking at fairly low spec&#8217;ed instances, but I thought I would share my research:</p>
<p><iframe width='600' height='650' frameborder='0' src='https://docs.google.com/spreadsheet/pub?key=0Am5w85DMxT_udFhiWmxZc1B0UDMtTkdBaXBIR01MSHc&#038;single=true&#038;gid=0&#038;output=html&#038;widget=true'></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnsee.com.au/2013/04/comparison-of-vps-options-in-australia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1:1 Real Time Email Personalisation</title>
		<link>http://www.johnsee.com.au/2013/01/11-real-time-email-personalisation/</link>
		<comments>http://www.johnsee.com.au/2013/01/11-real-time-email-personalisation/#comments</comments>
		<pubDate>Sun, 13 Jan 2013 21:30:34 +0000</pubDate>
		<dc:creator>Tom Johns</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[personalisation]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://www.johnsee.com.au/?p=56</guid>
		<description><![CDATA[This is something I&#8217;ve been thinking over for almost 12 months, and I&#8217;ve finally tweaked it to the point where I&#8217;m happy to share. The question in my mind was: Can you present dynamic content on a 1:1 basis to a user in an email based on their location, device, time of day and more? ...]]></description>
				<content:encoded><![CDATA[<p>This is something I&#8217;ve been thinking over for almost 12 months, and I&#8217;ve finally tweaked it to the point where I&#8217;m happy to share. The question in my mind was:</p>
<p><strong>Can you present dynamic content on a 1:1 basis to a user in an email based on their location, device, time of day and more?</strong></p>
<p>Suppose someone (who all you knew was their email address) happened to open your email on an android phone, in Sydney, 2 days after you sent your email campaign. Would you want to show him anything different to someone in Brisbane, on a Desktop machine, 2 days earlier? Of course!</p>
<p><span id="more-56"></span></p>
<p>You&#8217;d want to do this:</p>
<p><img class="alignnone size-full wp-image-85" alt="personalised-email" src="http://www.johnsee.com.au/wp-content/uploads/2013/01/personalised-email2.png" width="580" height="363" /></p>
<p>So can you do it?</p>
<p>It turns out, the answer is <strong>yes</strong>. That said, I can&#8217;t find anyone doing it&#8230; yet.</p>
<p>Some Email Marketing software offers the functionality using CSS stylesheets, but the support across devices is tentative at best, and some of the cooler things like location and time of day won&#8217;t work. The method I&#8217;m about to show works will work on all email clients, so long as the user loads external images (many clients like iPhone do this by default).</p>
<p>Before I go into some detail, here is what I&#8217;m doing in a nutshell:</p>
<ul>
<li>Email references  external dynamic images</li>
<li>Images, despite having a file extension of .jpg, are actually PHP files (this is invisible to the email client)</li>
<li>PHP code examines information about the user (like IP address, user agent, browser etc) and decides which image to return</li>
</ul>
<p>Why might you go to all this effort?</p>
<ul>
<li>Tailor an email and it&#8217;s messaging to users of iPhones (Stronger Call to Actions to phone)</li>
<li>Show Android App information only to users on Androids</li>
<li>If a user opens an email a day late and a deal has expired, show a new deal!</li>
<li>Show store locations in the the city the user is reading the email</li>
</ul>
<p>The first thing you need to do is to convince your server to process your image file extensions as PHP. Create a new directory (mines called &#8216;imgswitcher&#8217;) and create a .htaccess file inside with the following content (this file needs to exist in the directory, not at the root of your hosting):</p>
<div id="fvch-codeblock-0" class="fvch-codeblock">
<div class="fvch-hide-if-no-js fvch-toolbox"><img src="http://www.johnsee.com.au/wp-content/plugins/fv-code-highlighter/public/images/select-icon.png" alt="Select Code" title="Select Code" class="fvch-toolbox-icon fvch-toolbox-icon-select" /></div>
<table>
<tr>
<td class="fvch-line-numbers">
<pre>1
2
3
</pre>
</td>
<td class="fvch-code">
<pre id="fvch-code-0">AddType application/x-httpd-php .jpg
AddType application/x-httpd-php .png
AddType application/x-httpd-php .gif</pre>
</td>
</tr>
</table>
</div>
<p>This tell your server that when it receives a request for an image in that folder, it actually has to run some PHP code, not try and display it as an image.</p>
<p>Now we just just create a simple file in this folder. I&#8217;m going to call it <em>devicepic.jpg</em> and despite the .jpg extension, it actually contains PHP code. It&#8217;s going to show a picture of an iPhone, Android or Desktop PC (which I have placed in the same folder).</p>
<p>Here&#8217;s the code:</p>
<div id="fvch-codeblock-1" class="fvch-codeblock">
<div class="fvch-hide-if-no-js fvch-toolbox"><img src="http://www.johnsee.com.au/wp-content/plugins/fv-code-highlighter/public/images/select-icon.png" alt="Select Code" title="Select Code" class="fvch-toolbox-icon fvch-toolbox-icon-select" /></div>
<table>
<tr>
<td class="fvch-line-numbers">
<pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre>
</td>
<td class="fvch-code">
<pre id="fvch-code-1"><span class="php"><span class="php-script-tag">&lt;?php</span>
<span class="php-var">$useragent</span> <span class="php-operator">=</span> <span class="php-var">$_SERVER</span><span class="php-brackets">[</span><span class="php-string">'HTTP_USER_AGENT'</span><span class="php-brackets">]</span>;

<span class="php-var">$iphone</span> <span class="php-operator">=</span> <span class="php-function">stripos</span><span class="php-brackets">(</span><span class="php-var">$useragent</span>, <span class="php-string">'iphone'</span><span class="php-brackets">)</span>;
<span class="php-var">$android</span> <span class="php-operator">=</span> <span class="php-function">stripos</span><span class="php-brackets">(</span><span class="php-var">$useragent</span>, <span class="php-string">'android'</span><span class="php-brackets">)</span>;

<span class="php-keyword">if</span><span class="php-brackets">(</span><span class="php-var">$iphone</span><span class="php-brackets">)</span> <span class="php-brackets">{</span>
<span class="php-var">$name</span> <span class="php-operator">=</span> <span class="php-string">&quot;./iphone.jpg&quot;</span>;
<span class="php-brackets">}</span> <span class="php-keyword">elseif</span><span class="php-brackets">(</span><span class="php-var">$android</span><span class="php-brackets">)</span> <span class="php-brackets">{</span>
<span class="php-var">$name</span> <span class="php-operator">=</span> <span class="php-string">&quot;./android.jpg&quot;</span>;
<span class="php-brackets">}</span> <span class="php-keyword">else</span> <span class="php-brackets">{</span>
<span class="php-var">$name</span> <span class="php-operator">=</span> <span class="php-string">&quot;./desktop.jpg&quot;</span>;
<span class="php-brackets">}</span>

<span class="php-var">$fp</span> <span class="php-operator">=</span> <span class="php-function">fopen</span><span class="php-brackets">(</span><span class="php-var">$name</span>, <span class="php-string">'rb'</span><span class="php-brackets">)</span>;

<span class="php-function">header</span><span class="php-brackets">(</span><span class="php-string">&quot;Content-Type: image/jpg&quot;</span><span class="php-brackets">)</span>;
<span class="php-function">header</span><span class="php-brackets">(</span><span class="php-string">&quot;Content-Length: &quot;</span> <span class="php-operator">.</span> <span class="php-function">filesize</span><span class="php-brackets">(</span><span class="php-var">$name</span><span class="php-brackets">)</span><span class="php-brackets">)</span>;

<span class="php-function">fpassthru</span><span class="php-brackets">(</span><span class="php-var">$fp</span><span class="php-brackets">)</span>;</span></pre>
</td>
</tr>
</table>
</div>
<p>Without going into massive detail with how it works, the script checks the useragent of the requesting email client or browser, and if it contains &#8216;iphone&#8217; or &#8216;android&#8217; returns targeted content. A great (and relatively unknown) way of testing is to use Chrome&#8217;s built in ability to <a href="http://www.howtogeek.com/113439/how-to-change-your-browsers-user-agent-without-installing-any-extensions/">switch user agents</a>.</p>
<p>Here&#8217;s an example of the finished product: <a href=" http://www.johnsee.com.au/imgswitcher/example/switch.jpg">http://www.johnsee.com.au/imgswitcher/example/switch.jpg</a>. Try embedding this image in an email and view it on a desktop, iPhone and Android device &#8211; you&#8217;ll see a different image every time!</p>
<p>What about if we wanted to show a different offer based on the day of the week, similar to the Free Shipping example in my image above:</p>
<div id="fvch-codeblock-2" class="fvch-codeblock">
<div class="fvch-hide-if-no-js fvch-toolbox"><img src="http://www.johnsee.com.au/wp-content/plugins/fv-code-highlighter/public/images/select-icon.png" alt="Select Code" title="Select Code" class="fvch-toolbox-icon fvch-toolbox-icon-select" /></div>
<table>
<tr>
<td class="fvch-line-numbers">
<pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre>
</td>
<td class="fvch-code">
<pre id="fvch-code-2"><span class="php"><span class="php-script-tag">&lt;?php</span>
<span class="php-var">$tz</span> <span class="php-operator">=</span> <span class="php-number">1</span><span class="php-number">0</span>;
<span class="php-var">$offset</span> <span class="php-operator">=</span> <span class="php-var">$tz</span> <span class="php-operator">*</span> <span class="php-number">3</span><span class="php-number">6</span><span class="php-number">0</span><span class="php-number">0</span>;
<span class="php-var">$day</span> <span class="php-operator">=</span> <span class="php-function">gmdate</span><span class="php-brackets">(</span><span class="php-string">&quot;l&quot;</span>, <span class="php-function">time</span><span class="php-brackets">(</span><span class="php-brackets">)</span> <span class="php-operator">+</span> <span class="php-var">$offset</span><span class="php-brackets">)</span>;

<span class="php-keyword">if</span><span class="php-brackets">(</span><span class="php-var">$day</span> <span class="php-operator">=</span><span class="php-operator">=</span> <span class="php-string">'Monday'</span><span class="php-brackets">)</span> <span class="php-brackets">{</span>
<span class="php-var">$name</span> <span class="php-operator">=</span> <span class="php-string">&quot;./monday-99-offer.jpg&quot;</span>;
<span class="php-brackets">}</span> <span class="php-keyword">else</span> <span class="php-brackets">{</span>
<span class="php-var">$name</span> <span class="php-operator">=</span> <span class="php-string">&quot;./free-shipping-offer.jpg&quot;</span>;
<span class="php-brackets">}</span>

<span class="php-var">$fp</span> <span class="php-operator">=</span> <span class="php-function">fopen</span><span class="php-brackets">(</span><span class="php-var">$name</span>, <span class="php-string">'rb'</span><span class="php-brackets">)</span>;

<span class="php-function">header</span><span class="php-brackets">(</span><span class="php-string">&quot;Content-Type: image/jpg&quot;</span><span class="php-brackets">)</span>;
<span class="php-function">header</span><span class="php-brackets">(</span><span class="php-string">&quot;Content-Length: &quot;</span> <span class="php-operator">.</span> <span class="php-function">filesize</span><span class="php-brackets">(</span><span class="php-var">$name</span><span class="php-brackets">)</span><span class="php-brackets">)</span>;

<span class="php-function">fpassthru</span><span class="php-brackets">(</span><span class="php-var">$fp</span><span class="php-brackets">)</span>;</span></pre>
</td>
</tr>
</table>
</div>
<p>Simply extend your logic out for multiple days.</p>
<p>These are both really  oversimplified examples, but from here you should be able to do everything from extending logic to cover lots more devices (I recommend using <a href="http://code.google.com/p/php-mobile-detect/wiki/Mobile_Detect">mobile detect</a> to do proper detection) to creating entire dynamic images on the fly (you might not have a users city in your CRM/Database, but you could detect on the fly with this method and IP location for instance). Time of day combined with city will also allow different images at night, or local deals.</p>
<p>The other great advantage of this method is that all the heavy lifting is handled by your server, not your email client. This means you don&#8217;t even need email marketing software to implement the above, you could send the email (with images) from Gmail or Outlook. Perhaps a dynamic email signature in Outlook could change to show the nearest office to the person reading the email?</p>
<p>Let me know what you think. I have a half finished project to turn this into a free web app so there&#8217;s no need to be able to code in order to implement which I&#8217;d love to finish if there&#8217;s a need.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnsee.com.au/2013/01/11-real-time-email-personalisation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Varying Anchor Text WordPress Plugin</title>
		<link>http://www.johnsee.com.au/2013/01/varying-anchor-text-wordpress-plugin/</link>
		<comments>http://www.johnsee.com.au/2013/01/varying-anchor-text-wordpress-plugin/#comments</comments>
		<pubDate>Sat, 05 Jan 2013 06:34:21 +0000</pubDate>
		<dc:creator>Tom Johns</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[infographics]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.johnsee.com.au/?p=44</guid>
		<description><![CDATA[I was really interested in this post from Mike King on varying anchor text for embedded infographics yesterday. A comment was made that it would make a great wordpress plugin, and I agree. So today I&#8217;ve set out to make it a reality, and version 0.1 is now complete! It&#8217;s fairly simple, but in a nutshell, ...]]></description>
				<content:encoded><![CDATA[<p>I was really interested in this post from Mike King on <a href="http://blog.iacquire.com/2013/01/03/using-embed-code-randomize-your-links-anchor-text/">varying anchor text for embedded infographics</a> yesterday. A comment was made that it would make a great wordpress plugin, and I agree.</p>
<p><span id="more-44"></span></p>
<p>So today I&#8217;ve set out to make it a reality, and version 0.1 is now complete!</p>
<p><img class="alignnone size-full wp-image-46" alt="" src="http://www.johnsee.com.au/wp-content/uploads/2013/01/Screen-Shot-2013-01-05-at-3.43.32-PM-e1357366847654.png" width="550" height="193" /></p>
<p>It&#8217;s fairly simple, but in a nutshell, it replaces a wordpress shortcode (like ) with a random string. This makes it easy for you to be as flexible as you like with you embed code or link, without being constrained by the plugin.</p>
<p>It&#8217;s as simple as adding the code to your post of page:</p>
<p><img class="alignnone size-full wp-image-47" alt="" src="http://www.johnsee.com.au/wp-content/uploads/2013/01/Screen-Shot-2013-01-05-at-3.50.51-PM-e1357367427915.png" width="550" height="141" /></p>
<p>and then&#8230; voila!</p>
<p><img class="alignnone  wp-image-48" alt="Screen Shot 2013-01-05 at 3.50.17 PM" src="http://www.johnsee.com.au/wp-content/uploads/2013/01/Screen-Shot-2013-01-05-at-3.50.17-PM.png" width="404" height="211" /></p>
<p>Feel free to download it <a href="http://g.re.af/vanchor">here</a> and let me know what you think!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnsee.com.au/2013/01/varying-anchor-text-wordpress-plugin/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google Search Results to Google Docs Spreadsheet</title>
		<link>http://www.johnsee.com.au/2012/07/google-search-results-to-google-docs-spreadsheet/</link>
		<comments>http://www.johnsee.com.au/2012/07/google-search-results-to-google-docs-spreadsheet/#comments</comments>
		<pubDate>Sun, 15 Jul 2012 02:07:18 +0000</pubDate>
		<dc:creator>Tom Johns</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[google docs]]></category>
		<category><![CDATA[scraping]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[serps]]></category>

		<guid isPermaLink="false">http://www.johnsee.com.au/?p=16</guid>
		<description><![CDATA[The guys at Seer Interactive put together a fantastic tool for extracting the results from a Google SERP and putting them straight into a Google Spreadsheet. It&#8217;s been great, but one thing has always bugged me and that&#8217;s the inability for it to handle pages. One of my most common uses of the tool is ...]]></description>
				<content:encoded><![CDATA[<p>The guys at <a href="http://www.seerinteractive.com/blog/google-scraper-in-google-docs-update">Seer Interactive</a> put together a fantastic tool for extracting the results from a Google SERP and putting them straight into a Google Spreadsheet. It&#8217;s been great, but one thing has always bugged me and that&#8217;s the inability for it to handle pages. One of my most common uses of the tool is to cross reference the pages indexed by Google (site:example.com) with all pages linked to within the site structure. In order to get the full list from Google though, going through a few pages of results is a requirement for a site with a few hundred indexed pages.<span id="more-16"></span></p>
<p>So I&#8217;ve updated Seer&#8217;s code to add a few new features:</p>
<ul>
<li>Set a page offset</li>
<li>Return news or images results instead of web</li>
<li>Set a timeframe for the search</li>
</ul>
<div><img class="alignnone  wp-image-17" title="Google SERP to Google Docs" alt="" src="http://www.johnsee.com.au/wp-content/uploads/2012/07/Screen-Shot-2012-07-15-at-12.04.44-PM.png" width="579" height="306" /></div>
<p>The updated Google Spreadsheet is <a href="http://g.re.af/scrp" target="_blank">here</a>. All you need to do is &#8216;Make a Copy&#8217; from the &#8216;File&#8217; menu and fill in the blanks.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnsee.com.au/2012/07/google-search-results-to-google-docs-spreadsheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Site SEO and Spelling Checker</title>
		<link>http://www.johnsee.com.au/2012/07/site-seo-and-spelling-checker/</link>
		<comments>http://www.johnsee.com.au/2012/07/site-seo-and-spelling-checker/#comments</comments>
		<pubDate>Sun, 15 Jul 2012 01:44:45 +0000</pubDate>
		<dc:creator>Tom Johns</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[backlinks]]></category>
		<category><![CDATA[craawler]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.johnsee.com.au/?p=8</guid>
		<description><![CDATA[I&#8217;ve been working on a project on and off for the past year to create an SEO Tool that I couldn&#8217;t find anywhere else. I wanted to create something that ticked the following four boxes: Automatically and instantly crawl a site, not just give results on a single page Check for common problems like missing ...]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been working on a project on and off for the past year to create an SEO Tool that I couldn&#8217;t find anywhere else. I wanted to create something that ticked the following four boxes:</p>
<ol>
<li>Automatically and instantly crawl a site, not just give results on a single page</li>
<li>Check for common problems like missing titles, meta descriptions etc</li>
<li>Check for spelling mistakes on both the pages and meta description (the latter I see as very important, but often overlooked)</li>
<li>Be an online solution, I want to be able to run it on my iPad or even my phone</li>
</ol>
<p>There&#8217;s a few solutions that come close. The terrific <a href="http://www.screamingfrog.co.uk/seo-spider/">Screaming Frog</a>, which unfortunately doesn&#8217;t do spellchecking and isn&#8217;t hosted, and <a href="http://www.deeptrawl.com/">Deep Trawl</a>, which does check spelling (really well too) but isn&#8217;t self hosted. There&#8217;s similar hosted tools like <a href="http://www.seomoz.org">SEOMoz</a>, but they won&#8217;t run on demand in realtime.</p>
<p>So I present <a href="http://www.craawler.com">Craawler</a>.<span id="more-8"></span></p>
<p>Craawler is completely free, runs in realtime in your browser window and checks the following:</p>
<ul>
<li>Social metrics like +1s, Tweets and Likes in each page</li>
<li>Spelling errors in six languages</li>
<li>SEO optimisation suggestions for onpage text, meta descriptions, titles and more</li>
<li>Overall site checks like XML Sitemaps, Robots.txt etc</li>
</ul>
<p>In the last 6 months it&#8217;s checked 2,600 sites. I encourage suggestions, bugs and feedback on the tool</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnsee.com.au/2012/07/site-seo-and-spelling-checker/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
