<?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>Oikos</title>
	<atom:link href="http://oikos.org.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://oikos.org.uk</link>
	<description>Communication, Collaboration, Community</description>
	<lastBuildDate>Mon, 07 May 2012 11:40:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Using SimpleNote and iPad to Dictate</title>
		<link>http://oikos.org.uk/2012/05/using-simplenote-and-ipad-to-dictate/</link>
		<comments>http://oikos.org.uk/2012/05/using-simplenote-and-ipad-to-dictate/#comments</comments>
		<pubDate>Wed, 02 May 2012 10:19:51 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Tech Notes]]></category>
		<category><![CDATA[dictation]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[notes]]></category>
		<category><![CDATA[simplenote]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=892</guid>
		<description><![CDATA[It turns out that the iPad's dictation feature is quite good. Here's a neat trick that lets me use SimpleNote to dictate through my iPad to my PC.]]></description>
			<content:encoded><![CDATA[<p>It turns out that the iPad&#8217;s dictation feature is quite good. Here&#8217;s a neat trick that lets me use SimpleNote to dictate through my iPad to my PC.</p>
<p><span style="text-align:center; display: block;"><a href="http://oikos.org.uk/2012/05/using-simplenote-and-ipad-to-dictate/"><img src="http://img.youtube.com/vi/tZR13Duz6TY/2.jpg" alt="" /></a></span></p>
<p><a title="SimpleNote" href="http://simplenoteapp.com/">SimpleNote</a> is a note taking app that works in a web browser or through an iOS app. It synchronises your notes almost instantly when you pause typing.  I discovered that I could use it alongside the new iPad&#8217;s dictation feature to quickly write things on my PC.</p>
<p>It&#8217;s so quick that you don&#8217;t see the synchronisation happen in the video &#8211; the text has appeared on my PC&#8217;s screen before I get the camera up to it.</p>
<p>I&#8217;m totally aware of the irony that if you can afford an iPad then you can almost certainly afford dictation software.</p>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/05/using-simplenote-and-ipad-to-dictate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kicking my CSS Browser Compatibility Habits</title>
		<link>http://oikos.org.uk/2012/04/kicking-my-css-browser-compatibility-habits/</link>
		<comments>http://oikos.org.uk/2012/04/kicking-my-css-browser-compatibility-habits/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 21:56:45 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Tech Notes]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[compatibility]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[selectors]]></category>
		<category><![CDATA[tricks]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=879</guid>
		<description><![CDATA[As I started a new project today I decided to quickly review my CSS compatibility habits. Here are my findings!]]></description>
			<content:encoded><![CDATA[<p>As my CSS skills have developed I&#8217;ve learned to avoid issues with older browser layout bugs and to use modern CSS selectors and declarations in a backwards compatible way. Some of these tricks have become habits, and I&#8217;ve decided that they&#8217;re maybe not necessary and are possibly actually slowing me down.</p>
<p>As I started a new project today I decided to quickly review my CSS compatibility habits. Here are my findings!</p>
<p><span id="more-879"></span></p>
<h2>History</h2>
<p>I suppose, relative to some developers, I&#8217;m pretty new to the intricacies CSS and, in particular, browser compatibility bugs.</p>
<p>When I started front-end web development developing seriously, around two years ago, I was determined to be as browser-compatible as possible. I&#8217;d come from a large corporate where the monolithic IT was running on Windows XP and with Internet Explorer 6, so I worked on the assumption that it was still around.</p>
<p>My first few projects were a bit slow and painful as I both learned about the details of CSS and how it&#8217;s properly used, and worked through the browser layout bugs.</p>
<p>As time has gone on I&#8217;ve adopted more CSS2.1 and CSS3 selectors and declarations as I attempt to implement complex designs as efficiently as possible. And as I&#8217;ve done that I&#8217;ve dropped support for IE6, unless it&#8217;s really needed, in which case it&#8217;s a chargable extra. If I don&#8217;t need compatibility with IE6 then I can work more quickly and produce a better result.</p>
<p>As I went along I learned a few tricks that have become second nature. As I started work today on a new project I chose to quickly review these habits and see which I can kick with either:</p>
<ul>
<li>no loss of quality &#8211; given that I no longer support IE6 by default; or</li>
<li>no loss of quality using compatibility libraries</li>
</ul>
<p>ALL of the tricks and tools I use are fine on Mozilla Firefox, Chrome, and Safari, so my only real concerns are IE compatibility.</p>
<h3>IE6 double-margin bug</h3>
<p>I discovered this the hard way. See the write up on <a href="http://www.positioniseverything.net/explorer/doubled-margin.html">positioniseverything.net</a> for details if you don&#8217;t know about it.</p>
<p>Since discovering this bug I&#8217;ve always deliberately coded with opposing float/margins. So if I float: left, I apply right margin.</p>
<p>This bug is only present in IE6, which I&#8217;m no longer supporting. So I can drop that way of thinking for standard developments.</p>
<h3>CSS 2.1 Selectors</h3>
<p><em><a href="http://caniuse.com/#feat=css-sel2">caniuse.com compatibility</a></em></p>
<p>I make good use of the &gt; selector and :first-child/:last-child selectors for styling nested lists and WordPress widget/sidebar areas. These are not compatible with IE6 and before, but are fine for IE7 and greater.</p>
<p>So these are safe to use with no modification to my methods.</p>
<p>I can achieve IE6 compatibility if I need to with with <a href="http://selectivizr.com/">Selectivizr</a> as long as JavaScript is enabled.</p>
<h3>Generated Content</h3>
<p><em><a href="http://caniuse.com/#feat=css-gencontent">caniuse.com compatibility</a></em></p>
<p>I use :before/:after a fair bit &#8211; mostly for implementing image overlays and complex bullets on list items.</p>
<p>These are not compatible with IE6 OR IE7. IE8 or greater is fine. My options here are to drop support for IE7 by default (a distinct possibility) or accept slightly downgraded appearance on IE7. Both are acceptable approaches and result in the same thing &#8211; I use :before and :after without hesitation.</p>
<h3>nth-child</h3>
<p>I don&#8217;t use nth-child a lot, but it is useful to have in your armoury. :nth-child doesn&#8217;t appear in IE until IE9 &#8211; it&#8217;s not supported in IE6, 7 or 8. But use of <a href="http://selectivizr.com/">Selectivizr</a> again gives you compatibility.</p>
<p>So as long as I use Selectivizr, I can use nth-child at will.</p>
<h3>CSS3: border-radius and box-shadow</h3>
<p>I use these CSS styles to efficiently implement some of the effects that are commonly found on designs. They only work in IE9+ though. There are two options here:</p>
<ul>
<li>Accept the limitation and &#8220;progressively enhance&#8221; on newer browsers.</li>
<li>Do something to fix it &#8211; such as <a href="http://css3pie.com/">CSS3 PIE</a> or one of the <a href="http://stackoverflow.com/questions/2687804/emulating-css3-border-radius-and-box-shadow-in-ie7-8">other solutions</a></li>
</ul>
<p>I think I&#8217;ll choose to do this on a case-by-case basis based on the website audience and needs of the site.</p>
<h2>Summary</h2>
<p>So, it looks like I&#8217;ll do the following in future:</p>
<ul>
<li>Drop support for IE7 by default, unless specifically required</li>
<li>Install and use Selectivizr where appropriate</li>
<li>Ignore the IE6 double-margin bug</li>
<li>Use CSS2.1 selectors (&gt;, :first-child, :last-child)</li>
<li>Use generated content (:before, :after)</li>
<li>Use nth-child (and other Selectivizr-supported selectors)</li>
<li>Use border-radius and box-shadow &#8211; implementing alternatives or accepting degradation for IE8 or lower if required</li>
</ul>
<h2>Notes</h2>
<h3>You&#8217;re STILL debating this old-hat stuff?</h3>
<p>Well, yes. I pride myself on doing things well. I&#8217;ve been using progressive enhancement tricks, but they slow me down, and one of the things I try to do is get as much VALUE as possible for clients. The less fiddling I have to do to get something to work, and the less cross-browser testing I have to do, the better.</p>
<p>The future holds much good stuff, but as yet I don&#8217;t, for example, use HTML5: it&#8217;s widely supported, but far from universal and doesn&#8217;t add much value to what I&#8217;m doing at the moment.</p>
<h3>Selectivizr</h3>
<p><a href="http://selectivizr.com">Selectivizr</a> is dependent on one of the very common JavaScript libraries (jQuery, Prototype, Moo Tools), and as most of my work uses jQuery too, this isn&#8217;t a problem.</p>
<p>The only issue is if scripts are disables in the browser. I&#8217;m guessing that if a user is still on IE6 or 7, they&#8217;re probably not the kind of user that will have scripts disabled &#8211; unless their administrator has done it for them. In any case, if the percentage of visitors with those browsers is small, then the percentage with scripts disabled as well is minute. I accept this as a limitation of my approach.</p>
<h3>References</h3>
<p>The following places were useful in putting this review together:</p>
<ul>
<li><a href="http://caniuse.com">caniuse.com</a></li>
<li><a href="http://www.quirksmode.org/css/contents.html">QuirksMode CSS Reference</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/04/kicking-my-css-browser-compatibility-habits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tech Notes: Hooking Actions on Options Framework Changes</title>
		<link>http://oikos.org.uk/2012/04/tech-notes-hooking-actions-on-options-framework-changes/</link>
		<comments>http://oikos.org.uk/2012/04/tech-notes-hooking-actions-on-options-framework-changes/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 20:52:50 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Tech Notes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[options]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=871</guid>
		<description><![CDATA[How to hook an action to an update of options set by the options framework plugin.]]></description>
			<content:encoded><![CDATA[<p>This is a really short, sharp tech note for my own reference more than anything.</p>
<p>I use the <a title="Options Framework Plugin" href="http://wptheming.com/options-framework-plugin/">Options Framework plugin</a> as a way of quickly adding theme options to custom themes that I build.  I&#8217;ve been using it to store timeout values for data that&#8217;s cached using transients, but I wanted to force a refresh of the cached data whenever the theme options got saved.</p>
<p><span id="more-871"></span></p>
<p>After scouring the code and learning a little about <a title="WordPress Settings API" href="http://codex.wordpress.org/Settings_API">WordPress&#8217; settings API</a> (which, while not strictly necessary for this job, was an interesting diversion) I eventually worked out that I just needed to hook into the <code>update_option_{optionname}</code> action hook.</p>
<p>The trick is to know what option name the Options Framework is using.</p>
<p>Well, I can reveal that it uses an option name of the form <code>optionsframework_themename</code>, so if your theme is called &#8220;mytheme&#8221; then it uses option name <code>optionsframework_mytheme</code></p>
<p><em>UPDATE: I love the WordPress community &#8211; within a few hours of posting this the plugin developer added a comment explaining that one of the features of this plugin is that you can change the option name used. See his comment for details, or look in the plugin&#8217;s sample files to see how it works. And big thanks Devin!</em></p>
<p>Here&#8217;s some code:</p>
<pre class="brush: php; title: ; notranslate">
// This refreshes the tweet cache
function mytheme_refresh_caches() {
	delete_transient('mytheme_cached_tweets');
	// mytheme_get_tweets() sets the transient cache if the
	// transient has expired or doesn't exist
	$tweets = mytheme_get_tweets();
}
add_action( 'update_option_optionsframework_mytheme', 'mytheme_refresh_caches' );
</pre>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/04/tech-notes-hooking-actions-on-options-framework-changes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tech Notes: CSS Sprites for list elements</title>
		<link>http://oikos.org.uk/2012/04/tech-notes-css-sprites-for-list-elements/</link>
		<comments>http://oikos.org.uk/2012/04/tech-notes-css-sprites-for-list-elements/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 21:37:52 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Tech Notes]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[lists]]></category>
		<category><![CDATA[sprites]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[ul]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=855</guid>
		<description><![CDATA[CSS sprites, while a bit fiddly, are a great website optimisation, reducing HTML requests and load times. In fact, there was a great Smashing Magazine article posted just today about using them. But I&#8217;ve always struggled with using them for bullets for list elements of variable height. Yes, I&#8217;ve used the :before and :after pseudo [...]]]></description>
			<content:encoded><![CDATA[<p>CSS sprites, while a bit fiddly, are a great website optimisation, reducing HTML requests and load times.  In fact, there was a great <a href="http://coding.smashingmagazine.com/2012/04/11/css-sprites-revisited/">Smashing Magazine article</a> posted just today about using them.</p>
<p>But I&#8217;ve always struggled with using them for bullets for list elements of variable height. Yes, I&#8217;ve used the :before and :after pseudo elements for such things, but I&#8217;d like to avoid doing so if possible: browser support is <strong>mostly</strong> OK, but not completely backwards compatible, and they&#8217;re harder to diagnose problems with.</p>
<p><span id="more-855"></span></p>
<p>Then, yesterday, while I was trying to fix such and issue with list elements that got bigger than I thought they would, I came across a really neat technique that solves this issue.  I&#8217;m indebted to the The Bright Lines blog and it&#8217;s the third tip in <a href="http://www.thebrightlines.com/2009/11/05/3-tips-for-making-css-sprites-in-photoshop/">their post about sprites</a>.</p>
<p><a href="http://oikos.org.uk/wp-content/uploads/2012/04/20120412-225050.jpg"><img src="http://oikos.org.uk/wp-content/uploads/2012/04/20120412-225050.jpg" alt="20120412-225050.jpg" class="alignright size-full" /></a><br />
The trick is to align your images diagonally, from top-right to bottom-left. As these images will always appear in the top left of the block/element in which they&#8217;re displayed, you need to make sure that there is nothing below or to the right of each image. Aligning them this way achieves just that.</p>
<p>I&#8217;m sure this is a complete novice CSS sprite trick, but it&#8217;s one I&#8217;ve so far missed out on in all my reading about the topic. Hopefully it&#8217;s useful to you too?</p>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/04/tech-notes-css-sprites-for-list-elements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tech Notes: Adding scripts using WordPress&#8217; print_footer_scripts hook</title>
		<link>http://oikos.org.uk/2012/04/tech-notes-adding-scripts-using-wordpress-print_footer_scripts-hook/</link>
		<comments>http://oikos.org.uk/2012/04/tech-notes-adding-scripts-using-wordpress-print_footer_scripts-hook/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 19:33:04 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Tech Notes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[print_footer_script]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=846</guid>
		<description><![CDATA[I&#8217;ve used WordPress&#8217; print_footer_scripts hook before so I don&#8217;t know why I only came across this yesterday. My own stupid fault really for making assumptions about how PHP works and is used. So, here&#8217;s the deal. I want to add some JavaScript globally to a WordPress site in my theme. The print_footer_scripts action hook is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve used WordPress&#8217; print_footer_scripts hook before so I don&#8217;t know why I only came across this yesterday. My own stupid fault really for making assumptions about how PHP works and is used.</p>
<p><span id="more-846"></span></p>
<p>So, here&#8217;s the deal. I want to add some JavaScript globally to a WordPress site in my theme. The print_footer_scripts action hook is ideal so I do:</p>
<pre class="brush: php; title: ; notranslate">
function prefix_add_script() {
?&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  // Script here
&lt;/script&gt;
&lt;?php
}

add_action( 'print_footer_scripts', 'prefix_add_script' );
</pre>
<p>With the code in place everything seemed fine on the front-end of the site, but in the back-end, it was disabling other JavaScript. I ran my console and there were no errors (the usual cause of JS failures). Baffled, I commented out each bit of JavaScript until is was all gone, and then, even just the bare script tags made the JS stop working. I even got my ever patient wife to check my spelling in the tags.</p>
<p>But it wasn&#8217;t a JavaScript problem.</p>
<p>My PHP was preventing other code written by actions hooked onto print_footer_scripts from even being printed.</p>
<p>&#8220;I wonder&#8230;&#8221;</p>
<p>It turns out that adding a &#8220;return true;&#8221; to my little prefix_add_script callback fixes it. I haven&#8217;t investigated the WP source, but is suspect that if a callback on a hook doesn&#8217;t return true &#8211; or, at least, if it returns null, which is the default return value from a non-returning function in PHP, it bails and doesn&#8217;t run anything else attached to that hook.</p>
<p>So&#8230;key lesson&#8230;make sure your action callbacks return a value!</p>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/04/tech-notes-adding-scripts-using-wordpress-print_footer_scripts-hook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Campaigning, Communications and Change</title>
		<link>http://oikos.org.uk/2012/04/campaigning-communications-and-change/</link>
		<comments>http://oikos.org.uk/2012/04/campaigning-communications-and-change/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 14:45:37 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[behavioural]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[communications]]></category>
		<category><![CDATA[eCampaigningForum]]></category>
		<category><![CDATA[sociology]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=834</guid>
		<description><![CDATA[A couple of weeks ago I attended FairSay&#8216;s eCampaigning Forum conference. My main client, Ben Clowney from HandsUp, is well known in eCampaigning circles and has attended the conference for several years and, as his &#8216;Technical Director&#8217; he invited me along so that I could get my finger on the pulse of the eCampaigning world. [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I attended <a title="FairSay" href="http://fairsay.com/">FairSay</a>&#8216;s <a title="eCampaining Forum Conference" href="http://fairsay.com/events/front-page/ecampaigning-forum/">eCampaigning Forum conference</a>. My main client, Ben Clowney from <a title="Hands Up" href="http://handsup.co.uk">HandsUp</a>, is well known in eCampaigning circles and has attended the conference for several years and, as his &#8216;Technical Director&#8217; he invited me along so that I could get my finger on the pulse of the eCampaigning world.</p>
<p><span id="more-834"></span></p>
<p>As a newcomer to the charity sector I was slightly nervous and not sure what I would get from and be able to contribute to the conference, which is very much participatory. But I was warmly welcomed, found my place, and contributed usefully to several discussions. I left feeling like a real eCampaigning geek!</p>
<p>I&#8217;m sure there will be other posts as I process what I experienced and learned, but this first one is an attempt to reconcile two talks that I went to about communications and behaviour change. The talks seemed to be slightly at odds with each other &#8211; competing approaches possibly. But I think they are complementary approaches and we can take useful learnings from both of them and use them together.</p>
<p>I will summarise, at a very high level, what I consider to be the main points of each talk, and then give my own views on how the approaches complement each other.</p>
<p>Remember, I&#8217;m new to the campaigning world, so I&#8217;m a total novice. I do, however, have a great (and mostly unfulfilled) interest in psychology, philosophy and sociology, and how people behave so I find this stuff fascinating and I hope you don&#8217;t mind me giving an opinion.</p>
<h2>Prospectors, Settlers and Pioneers</h2>
<p>The first talk, on day one of the conference, was by Chris Rose of <a title="Campaign Strategy" href="http://campaignstrategy.org">campaignstrategy.org</a>. He talked about some research that he&#8217;s been involved with about how to motivate people.</p>
<p style="padding-left: 30px;"><a title="Slides and Notes from Chris Rose's talk - eCF Live" href="http://ecflive.fairsay.com/ecf2012/presentation-unconscious-motivation-values-chris-rose-campaign-strategy/">See the slides and notes from Chris Rose&#8217;s talk</a></p>
<p>The work is based on Maslow&#8217;s hierarchy of needs. Maslow suggests that that people have different levels of need.</p>
<p>The lowest levels are basic needs, the people seeking these needs are security driven, they look for safety, security and belonging.</p>
<p>Once people have those needs they look for outer-directed needs. The people seeking these needs are looking for success and esteem.</p>
<p>The highest level of need &#8211; the final things people seek to obtain &#8211; are inner-directed needs. These are related to creativity, coming up with new ideas.</p>
<p>Rose then groups people at each of the levels of need. He calls security-driven people &#8216;settlers&#8217;, outer-directed people &#8216;prospectors&#8217;, and inner-directed people &#8216;pioneers&#8217;. And he suggests that we can have greater impact by tapping into the different motivational values of each group.</p>
<p style="padding-left: 30px;"><a title="CULTURAL DYNAMICS VALUES MODES QUESTIONNAIRE" href="http://www.cultdyn.co.uk/Process/indexAdagio.php">Take the test and find out if you&#8217;re a Settler, Prospector or Pioneer</a></p>
<p>Most eCampaigners, we think, are pioneers. And pioneers are great at trying to communicate with other pioneers, but don&#8217;t normally target the values of other groups.</p>
<h2>Common Cause</h2>
<p>On the second day Casper ter Kuile spoke about his &#8216;<a title="Common Cause - the case for working with values and frames" href="http://valuesandframes.org/">Common Cause</a>&#8216; approach to campaigning.</p>
<p style="padding-left: 30px;"><a title="Slides and notes from Casper's talk" href="http://ecflive.fairsay.com/ecf2012/presentation-campaigning-with-common-cause-casper-ter-kuile/">See the slides and notes from Casper&#8217;s talk</a></p>
<p>The Common Cause approach says that we all have a common set of values. We hold the values to different extents and with different strengths. But values can be engaged and strengthened by repeated exposure to messages about those values.</p>
<p>This approach takes a longer term view. By repeatedly engaging with people on a particular issue we can get them to care about our cause.</p>
<h2>Spot the Difference</h2>
<p>It wasn&#8217;t made explicit, but I felt that people thought that these approaches were incompatible. That one is short-termist and focused on single issues, and the other is a long-term approach that has potentially greater impact by affecting peoples values.</p>
<p>I&#8217;ve been thinking about these approaches though and I think they can go hand in hand for even more power.</p>
<p>Initially the &#8216;Unconscious Motivation Values&#8217; approach struck me as much more powerful. It helped me understand how other people work a bit more and I will use the ideas in more than just my work on eCampaigning.</p>
<p>The Common Cause approach seemed a little more theoretical (and it&#8217;s true that Casper&#8217;s work is only about 50% complete) and so had less immediate punch and impact. But I think it has real value too.</p>
<p>What I&#8217;d like to do is try combining the two approaches. To make Common Cause work you have to engage people about an issue or value. What I didn&#8217;t get from Common Cause was how you go about doing that. But what I got from the Unconscious Motivational Values work was exactly that: principles for engaging people from across the spectrum of Maslow&#8217;s hierarchy of needs.</p>
<p>We can repeatedly use the targeting of motivational values to effect a Common Cause type change in people&#8217;s underlying value strengths.</p>
<h2>An example</h2>
<p>I think the example of an energy saving lightbulb was used by Chris Rose. He says that you can &#8216;sell&#8217; an Eco lightbulb to settlers, prospectors and pioneers using different messages.</p>
<p>I can&#8217;t quite twist that example to my needs, so I&#8217;m going to take another &#8216;green&#8217; idea as an example: cycling.</p>
<p>The Common Cause approach says we want people to engage with the issues: road safety, climate change, energy security, sustainable transport, so let&#8217;s send messages to people that engage the related values.</p>
<p>The Unconscious Motivational Values approach says &#8216;How can we sell the idea of cycling to people with different motivational values?&#8217;</p>
<p>There&#8217;s an organisation called <a title="Challenge for Change" href="http://www.challengeforchange.com/home">Challenge for Change</a> who run &#8216;Workplace Cycle Challenges&#8217;. These fortnight-long events pitch employers in a town against each other in a challenge to get the most employees to cycle one mile, or for ten minutes.</p>
<p>There are employer leaderboards showing who is &#8216;winning&#8217;. There&#8217;s a prize-draw that everyone who takes part is entered into, plus entrants get rewards, such as cinema tickets, just for taking part.</p>
<p>I think this is VERY clever. Advocates of cycling are probably pioneers who become challenger co-ordinations for their employers. They&#8217;ll be great at communicating to other pioneers about the positive benefits of cycling. They won&#8217;t be bothered by rewards and will possibly see that as a distraction from the real business of saving the planet.</p>
<p>Prospectors are motivated to take part through the rewards and the challenge. They can get their name, and their employers name, up on the website. It&#8217;s a matter of pride.</p>
<p>Settlers are motivated probably also by the rewards, but also by the nostalgia: &#8216;I used to ride a bike as a kid&#8230;perhaps I&#8217;ll give it a go again&#8217;.</p>
<p>But the beauty of the challenge is its subtlety. You only have to ride that one mile or ten minutes. But it has a Common Cause-type of value strengthening. While out riding people might find themselves exhilarated, connected to nature, exercised, free, or aware of the other health and environmental benefits.</p>
<p>To engage a value in a person Common-Cause-style, we need to understand what their motivational values are. Challenge for Change do this brilliantly, and even their name suggests that they use both approaches: a &#8216;Challenge&#8217; brings about a &#8216;Change&#8217;</p>
<h2>Wrapping Up</h2>
<p>While Chris Rose&#8217;s Unconscious Motivational Values approach seemed initially more useful, I could definitely see the long-term value of Casper&#8217;s Common Cause. I&#8217;m no expert, and I apologise to both Chris and Casper if I&#8217;ve mis-represented or mis-interpreted their research. But I hope I&#8217;ve summed up what I learned and how I think these approaches can be used together.</p>
<p>So&#8230;who&#8217;s got a campaign?</p>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/04/campaigning-communications-and-change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tech Notes: Twitter Widget Pro not updating for Heart Internet users</title>
		<link>http://oikos.org.uk/2012/03/tech-notes-twitter-widget-pro-not-updating-for-heart-internet-users/</link>
		<comments>http://oikos.org.uk/2012/03/tech-notes-twitter-widget-pro-not-updating-for-heart-internet-users/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 22:56:18 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Tech Notes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[heart internet]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=826</guid>
		<description><![CDATA[I've had problems with the Twitter Widget Pro WordPress plugin not updating on several sites. I sat down and had a good trawl through the code tonight and it looks like it's another case of a Heart Internet feature preventing something from operating correctly.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had problems with the <a title="Twitter Widget Pro WordPress Plugin" href="http://wordpress.org/extend/plugins/twitter-widget-pro/">Twitter Widget Pro</a> WordPress plugin not updating on several sites. I sat down and had a good trawl through the code tonight and it looks like it&#8217;s another &#8216;Heart Attack&#8217; &#8211; a case of a Heart Internet feature preventing something from operating correctly.</p>
<p>Don&#8217;t get me wrong &#8211; I love my Heart Hosting and would highly recommend them, but if you&#8217;re hosting WordPress you need to know about this particular thing (a<a title="Tech Notes: Heart Internet and WordPress wp-cron job scheduling" href="http://oikos.org.uk/2012/01/tech-notes-heart-internet-and-wordpress-wp-cron-job-scheduling/">nd the WP-cron thing too!</a>)</p>
<p>This same issue may apply to other hosts too, I&#8217;m not sure. If your Twitter Widget Pro isn&#8217;t updating then read on and find out.</p>
<p><span id="more-826"></span></p>
<h2>Update 1:</h2>
<p>Knocked up hastily, and it&#8217;s my first foray into modifying other people&#8217;s work, so I hope I&#8217;ve done a good job, but I&#8217;ve put together a modified version of 2.3.8 that fixes the problem, for me at least.  I won&#8217;t promise to update this when the main plugin gets updated. Discussion seems to be ongoing about whether this issue deserves attention or not.</p>
<p><a href="http://oikos.org.uk/wp-content/uploads/2012/03/twitter-widget-pro.zip">Twitter Widget Pro &#8211; No Background Updates Fix</a></p>
<h2>Heart Internet&#8217;s Security Feature</h2>
<p>Heart Internet&#8217;s security is pretty good.  That&#8217;s one of the things I like about them. But one of their features is that they don&#8217;t allow a website&#8217;s server process to make HTTP requests to it&#8217;s own website.  By this I mean that a PHP script serving a page on the domain http://your-domain.com can not make an HTTP request to anywhere on http://your-domain.com</p>
<p>I&#8217;m not entirely sure what this prevents &#8211; my guess is that it stops you making a PHP script that calls itself and loops forever.</p>
<p>I&#8217;ve so far discovered that this has two unforseen consequences:</p>
<ol>
<li><a title="Tech Notes: Heart Internet and WordPress wp-cron job scheduling" href="http://oikos.org.uk/2012/01/tech-notes-heart-internet-and-wordpress-wp-cron-job-scheduling/">It stop WP Cron scheduled jobs working.</a></li>
<li>It stops Twitter Widget Pro version 2.3.0 and above from working properly.</li>
</ol>
<p>I did a write up for <a href="http://wordpress.org/support/topic/plugin-twitter-widget-pro-tweets-not-updating-hosting-incompatibility-with-tlc-transients">a post on the Twitter Widget Pro forums</a>.  I&#8217;m awaiting a response but thought I&#8217;d copy (an edited version of) it here for reference.</p>
<h2>My Investigation</h2>
<p>I&#8217;ve had problems with numerous installs of Twitter Widget Pro not updating tweets and I&#8217;ve discovered &#8211; I think &#8211; that it&#8217;s all down to a problem with my hosting and the plugin&#8217;s use of TLC Transients. This MAY (or may not) also be the cause of other people&#8217;s lack of updates.</p>
<p>The behaviour I was seeing was that I appeared to have different versions of my tweet stream &#8220;cached&#8221; and I could flick between the different cached versions by changing the settings. So, for example, with one lot of widget settings I might see Tweets A, B and C. With a different set of widget settings I would see Tweets C, D and E. Changing the widget&#8217;s settings between the two brought up to two different cached lists. BUT&#8230;when I posted a new Tweet NEITHER cached list of Tweets got updated.</p>
<p>I checked the database and noted a few timestamps in transient values in there and then went and checked the code.</p>
<p>TWP uses a hash of the widget options as a key for the transient &#8220;cache&#8221; of fetched Tweets. See line 710 of the plugin in the _getTweets function:</p>
<p><code>$key = 'twp_' . md5( $this-&gt;_getFeedUrl( $widgetOptions ) );</code></p>
<p>So that explains why different Tweet settings have different cached lists of Tweets, and how I can switch between them.</p>
<p>But why are they never updating?</p>
<p>Well, I&#8217;ve not done a too-thorough inspection of the code but TLC transients seems to use a &#8220;loopback&#8221; URL to fetch the cached list of Tweets without holding up the user &#8211; similar to how WP-Cron works. When scheduled it does:</p>
<p><code>add_action( 'shutdown', array( $this, 'spawn_server' ) );</code></p>
<p>And the spawn_server callback looks like this:</p>
<pre>public function spawn_server() {
  $server_url = home_url( '/?tlc_transients_request' );
  wp_remote_post( $server_url, array( 'body' =&gt; array( '_tlc_update' =&gt; $this-&gt;lock, 'key' =&gt; $this-&gt;key ), 'timeout' =&gt; 0.01, 'blocking' =&gt; false, 'sslverify' =&gt; apply_filters( 'https_local_ssl_verify', true ) ) );
}</pre>
<p>NOW&#8230;my hosting company don&#8217;t actually allow me to make these &#8221;loopback&#8221; HTTP requests. So, all my installed instances of TWP are broken.</p>
<p>Options for me seem to be:</p>
<ol>
<li>The TWP developer make use of TLC Transients optional</li>
<li>I could put some hack in that deletes the transients every now and then. I DO have WP-Cron working (via a Unix cron job), so I could setup a job to clear the transients from the database using that.</li>
<li>I could use another plugin.</li>
</ol>
<p>I know that TLC Transients is a clever way of making some big efficiencies. And I know that my hosting issue is probably a rare thing. But I could really use some feedback on whether TLC Transients will continue to be used or not, or if I have to consider one of the other options.</p>
<p>I hope that write up is useful to someone else too.</p>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/03/tech-notes-twitter-widget-pro-not-updating-for-heart-internet-users/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tech Notes: WordPress Pagination in Custom Loops</title>
		<link>http://oikos.org.uk/2012/01/tech-notes-wordpress-pagination-in-custom-loops/</link>
		<comments>http://oikos.org.uk/2012/01/tech-notes-wordpress-pagination-in-custom-loops/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 12:05:11 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Tech Notes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[next]]></category>
		<category><![CDATA[pagination]]></category>
		<category><![CDATA[posts]]></category>
		<category><![CDATA[previous]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=816</guid>
		<description><![CDATA[WordPress' next_posts_link() and previous_posts_link() pagination functions weren't working, always printing just the "next posts" link from the first page, regardless of what page I was actually on. Here's an investigation and a couple of solutions.]]></description>
			<content:encoded><![CDATA[<p><a href="http://oikos.org.uk/wp-content/uploads/2012/01/d6d9adec428f11e1abb01231381b65e3_7.jpg"><img class="alignright size-medium wp-image-817" title="Older Posts Link" src="http://oikos.org.uk/wp-content/uploads/2012/01/d6d9adec428f11e1abb01231381b65e3_7-300x300.jpg" alt="Photo of Older Posts Link" width="300" height="300" /></a>I was implementing AJAX-based pagination on the <a title="Stop AIDS Campaign Homepage" href="http://stopaidscampaign.org">Stop AIDS Campaign homepage</a> yesterday and came across an interesting thing with WordPress pagination links in custom loops.</p>
<h2>The Problem</h2>
<p>I had a custom loop that was on the homepage, which is printed using the special front-page.php page template. I was picking up the &#8220;page&#8221; query var in my loop to print the right items, and then trying to use <a title="WordPress Codex - next_posts_link function" href="http://codex.wordpress.org/Function_Reference/next_posts_link">next_posts_link()</a> and <a title="WordPress Codex: previous_posts_link function" href="http://codex.wordpress.org/Function_Reference/previous_posts_link">previous_posts_link()</a> to print, well, the links that you&#8217;d think those functions printed from within a WordPress loop. (Remember that these might work backwards to what you expect &#8211; see the excellent <a title="Digging into WordPress - Definitive Guide to WordPress Page Navigation" href="http://digwp.com/2009/08/wordpress-page-navigation/">Digging Into WordPress article</a> for more)</p>
<p>But they weren&#8217;t working, always printing just the &#8220;next posts&#8221; link from the first page, regardless of what page I was actually on.</p>
<p><span id="more-816"></span></p>
<h2>Technical Details</h2>
<p>The problem is that next_posts_link() and previous_posts_link() use a global variable $paged to work out what page you&#8217;re on (see code from v3.3.1 <a title="WordPress code for get_next_posts_link" href="http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/link-template.php#L1482">here</a>), and $paged is not set set on a per-loop basis, is only set during the initial page redirect (see code in <a href="http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/canonical.php#L243">canonical.php</a>).</p>
<p>So, when I do the query_posts() call for my custom loop, I&#8217;m not setting the $paged, variable. In fact, because I&#8217;m working inside a page template rather than an archive/index type template, I don&#8217;t think $paged is set at all!</p>
<h2>Solutions:</h2>
<p>A couple of solutions present themselves:</p>
<h3>Set $paged manually for your loop</h3>
<p>Something like:</p>
<pre>&lt;?php
  global $paged;
  $this_page = $_GET['page'];
  $paged = $this_page;

  # Custom loop code 
?&gt;

&lt;?php next_posts_link(); ?&gt; - &lt;?php previous_posts_link(); ?&gt;</pre>
<h3>Do Your Own Thing</h3>
<p>In the end this is what I did. next_posts_link() and previous_posts_link() didn&#8217;t give me enough control to be able to do the AJAX as I wanted, so I just hand-rolled a solution.  It looks kinda link this:</p>
<pre>&lt;div id="latest-news-nav"&gt;
  &lt;?php
    // Set up next and prev links
    $this_page = $latest_news_query-&gt;get('paged');
    $max_page = $latest_news_query-&gt;max_num_pages;
    if ($this_page &gt; 1) {
      printf('&lt;a class="latest-news-newer" href="%s"&gt;Newer posts&lt;/a&gt;', get_bloginfo('wpurl') . '/wp-admin/admin-ajax.php?action=latest_news&amp;page=' . ($this_page - 1) );
    }
    if ($this_page &lt; $max_page) {
      printf('&lt;a class="latest-news-older" href="%s"&gt;Older posts&lt;/a&gt;', get_bloginfo('url') . '/wp-admin/admin-ajax.php?action=latest_news&amp;page=' . ($this_page + 1) );
    }
  ?&gt;
&lt;/div&gt;</pre>
<p>I won&#8217;t go into how the AJAX works here &#8211; that&#8217;s the topic of another post, or possibly the next Oikos plugin.</p>
<p>Anyway, hope that helped someone.</p>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/01/tech-notes-wordpress-pagination-in-custom-loops/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tech Notes: Website not sending emails to own domain</title>
		<link>http://oikos.org.uk/2012/01/tech-notes-website-not-sending-emails-to-own-domain/</link>
		<comments>http://oikos.org.uk/2012/01/tech-notes-website-not-sending-emails-to-own-domain/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 13:18:25 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Advice]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[Tech Notes]]></category>
		<category><![CDATA[cpanel]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=790</guid>
		<description><![CDATA[Your website sends out emails, and most emails are fine, except those that are being sent to your own domain.  What to do?  The web server is probably trying to process the mail itself rather than passing it on.  Here's a description of the problem and possible fix.]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">This is an issue I&#8217;ve come across several times.  Your website, call it http://mysite.com is hosted by a web host, but your email, with email addresses like me@mysite.com is elsewhere, perhaps with Google Apps. Your website sends out emails &#8211; this might be for new user registrations, notification of new comments, or any number of other things.  And most emails are fine, except those that are being sent to your own domain.  That is, an email sent by the website on domain mysite.com to an email address @mysite.com doesn&#8217;t arrive. What&#8217;s going on? <span id="more-790"></span>Well, there could be a whole load of reasons why the mail doesn&#8217;t arrive. You may, for starters, want to check if it got filtered as spam!  But here&#8217;s a reason you may not have thought of: the web host treats all email sent to your domain as being handled locally, and tries to process it without sending it to the correct mail server!</p>
<p style="text-align: left;">I&#8217;ve seen this a lot with hosts that use the &#8220;cPanel&#8221; control panel, though I&#8217;m told it applies to some other web hosting control panel systems too.  The trick is to tell the web server to use a remote mail exchanger for that domain, and tell it which one. Here&#8217;s how to do it (hat-tip to Chris Jones of Cultivate Consulting for reminding me how to do this). Here&#8217;s cPanel version 11&#8242;s mail setting &#8211; you&#8217;ll see the MX Entry option that I&#8217;ve highlighted. You&#8217;ll need to click this. <img class="size-full wp-image-791 aligncenter" title="cPanel's Mail Settings with Mx Entry setting highlighted" src="http://oikos.org.uk/wp-content/uploads/2012/01/cpanel-mx-entry.png" alt="cPanel's Mail Settings with Mx Entry setting highlighted" width="510" height="178" /> Then you&#8217;ll need to select the &#8220;Remote Mail Exchanger&#8221; option as highlighted below.</p>
<p style="text-align: left;"><a href="http://oikos.org.uk/wp-content/uploads/2012/01/cpanel-remote-mx.png"><img class="aligncenter size-medium wp-image-793" title="cPanel showing remote MX option" src="http://oikos.org.uk/wp-content/uploads/2012/01/cpanel-remote-mx-300x207.png" alt="cPanel showing remote MX option" width="300" height="207" /></a>Then at the bottom of that page you&#8217;ll need to add the MX records for your mail server. If this is Google Apps then the MX records are listed on <a title="Google Apps MX records" href="http://support.google.com/a/bin/answer.py?hl=en&amp;answer=174125">this page</a>.</p>
<p style="text-align: left;">With all those settings saved you should be receiving emails from your website as expected.</p>
<p style="text-align: left;">If you&#8217;ve done this and still have problems then I suggest contacting your web host &#8211; they may be able to help.</p>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/01/tech-notes-website-not-sending-emails-to-own-domain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tech Notes: Heart Internet and WordPress wp-cron job scheduling</title>
		<link>http://oikos.org.uk/2012/01/tech-notes-heart-internet-and-wordpress-wp-cron-job-scheduling/</link>
		<comments>http://oikos.org.uk/2012/01/tech-notes-heart-internet-and-wordpress-wp-cron-job-scheduling/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 10:45:57 +0000</pubDate>
		<dc:creator>Oikos Administrator</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Tech Notes]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[heart internet]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[scheduled]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-cron]]></category>

		<guid isPermaLink="false">http://oikos.org.uk/?p=783</guid>
		<description><![CDATA[Heart Internet don't allow "loopback" HTTP requests, this prevents WordPress running scheduled jobs like publishing future posts. Here's a write-up and possible fix.]]></description>
			<content:encoded><![CDATA[<p>This was a little fault that I found in my development environment, which I&#8217;ve recently moved onto my Heart Internet hosting <a title="Reflections on Hosting Issues" href="http://oikos.org.uk/2012/01/reflections-on-hosting-issues/">as explained the other day</a>.</p>
<p>The issue is specific to Heart Internet&#8217;s hosting and results in any scheduled jobs not running!  Scheduled jobs could include automatic updating, database cleaning and posting of scheduled posts, but could also include other features provided by plugins, such as automated database backup.</p>
<h2><span id="more-783"></span>wp-cron &#8211; how WordPress does scheduled jobs</h2>
<p>WordPress <span style="text-decoration: underline;">normally</span> runs on a Linux or Unix server, and, as such, you could use the &#8220;cron&#8221; feature of Linux/Unix to run scheduled jobs. BUT&#8230;most web hosts don&#8217;t let you have access to cron &#8211; and rightly do: you could do a lot of damage through incorrect use.</p>
<p>WordPress, though, needs to be able to do some useful scheduled tasks, things like cleaning up deleted items, and publishing posts scheduled for future posting.</p>
<p>So, WordPress uses what is often called &#8220;pseudo-cron&#8221;. There is a script &#8211; wp-cron.php &#8211; that runs all the scheduled jobs, and WordPress tries to run this script whenever someone visits your website.  It does this by loading the web page http://&lt;your-domain&gt;/wp-cron.php  It will do this at most once per minute.</p>
<p>You can use a plugin like <a title="Cron View WordPress Plugin" href="http://wordpress.org/extend/plugins/cron-view/">cron-view</a> to see what&#8217;s in your list of scheduled jobs. For me, it was some automated digest emails not sending that brought the issue to my attention!</p>
<h2>A Heart Failure</h2>
<p>Heart Internet don&#8217;t allow a PHP script (or any script) running on its server to make an HTTP request back to the domain that the script is running on. It&#8217;s possible, though I&#8217;ve not investigated it, that they don&#8217;t allow a request back to the server, or to any of their servers, potentially blocking HTTP access to other domains that they host too.</p>
<p>So, the short story is that if you&#8217;re running an out-of-the-box WordPress install on Heart, none of its scheduled jobs will work!</p>
<p>I discovered this thanks to numerous forum posts, including <a title="BackUpWordPress Support Forum: Heart Internet and Cron Jobs" href="http://wordpress.org/support/topic/plugin-backupwordpress-heart-internet-and-cron-jobs">this 6-day-old one</a> on the WordPress support forums for a backup plugin.</p>
<h2>A Solution</h2>
<p>There&#8217;s another very <a title="WordPress Forums: Scheduled posts still not working?" href="http://wordpress.org/support/topic/scheduled-posts-still-not-working-in-282">helpful discussion over on the WordPress Forums</a> that both explains why wp-cron is implemented the way it is, and offers a workaround: add the following to your wp-config.php</p>
<p><code>define('ALTERNATE_WP_CRON', true);</code></p>
<p>The fix is described as &#8220;a bit iffy sometimes&#8221;, and I&#8217;ve not tested it, but I would recommend giving it a go if you&#8217;re running WordPress on Heart&#8217;s servers.</p>
<h2>Another Solution</h2>
<p>Another way to tackle this is to make use of the fact that Heart let you run cron jobs anyway, so you can just set up a cron job to run once every 15 mins to run wp-cron.php.  This is probably a better solution but it&#8217;s a bit of a pain setting it up for every WordPress install you&#8217;ve got&#8230;if, like me, you have many!</p>
]]></content:encoded>
			<wfw:commentRss>http://oikos.org.uk/2012/01/tech-notes-heart-internet-and-wordpress-wp-cron-job-scheduling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: basic

Served from: oikos.org.uk @ 2012-05-20 00:37:03 -->
