<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Steve's Ramblings</title>
	
	<link>http://blogs.canalplan.org.uk/steve</link>
	<description>Witterings from the Site owner</description>
	<lastBuildDate>Tue, 27 Jul 2010 10:09:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/blogdns/zMtY" /><feedburner:info uri="blogdns/zmty" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Still Alive</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/j91Dhku9u7k/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2010/07/27/still-alive-2/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 10:09:06 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Witterings]]></category>
		<category><![CDATA[Wordbooker]]></category>
		<category><![CDATA[Bob Geldof]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[granny buttons]]></category>
		<category><![CDATA[Travelling Man]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/?p=969</guid>
		<description><![CDATA[In which Steve witters on about Facebook, and Wordpress, and gives lots of excuses for not getting round to coding version 2 of his plugin sooner than he has. ]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2010/07/27/still-alive-2/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2010/07/27/still-alive-2/"></a></div>
</div>
<p>I know its been pretty quiet round here for a bit. Its just been one of those periods of time when I&#8217;d nothing really to write about, and even if I did I didn&#8217;t really have the time, or the motivation, or the energy.</p>
<p>When I&#8217;ve not been working I&#8217;ve been bashing my head against the wall over my <a href="http://wordpress.org/extend/plugins/wordbooker/">Wordbooker</a> plugin which I&#8217;ve been playing a continual catch up game with Facebook and WordPress and W3C compliance (some of which was nothing to do with me but actually Facebook&#8217;s decision to use non compliant tags and people having WordPress themes with not quite the right Doctypes and other things). I&#8217;ve been wanting for ages to start on Version 2 of the plugin &#8211; which takes a different approach to parts of the posting process and needs a complete re-write of the comment handling process too, but until I&#8217;d got the 1.x code base to the point that it was stable enough to leave alone so I could concentrate on 2.0 I couldn&#8217;t do that.  I&#8217;d just got ready to start recoding when Facebook announced they were changing the method of authenticating users against applications&#8230; that&#8217;s right. Just a couple of months after they changed it totally they are proposing changing it all again. It didn&#8217;t help that they accidentally turned on the new method and broke everything! </p>
<p>But things seem to have settled down and so I&#8217;ve started coding it, but I also wanted to watch &#8220;Travelling Man&#8221; which Nick had bought me on DVD for my birthday after we&#8217;d both read <a href="http://www.grannybuttons.com/granny_buttons/2010/05/travelling-man---bashes-to-splashes.html">Andrew Denny&#8217;s blog entry</a> about it. It&#8217;s been quite enjoyable watching it and recognising a lot of the locations, even if they have changed a lot since it was shot : for example the derelict warehouses near Preston Brook have been turned in to rather up market apartments &#8211; but it was good to see that <a href="http://www.claymoore.co.uk/">Claymore Navigation&#8217;s</a> boatyard hasn&#8217;t changed much in the intervening years.</p>
<p>So today I&#8217;m having a day off work, and I could be coding but instead I&#8217;m listening to Bob Geldof&#8217;s solo albums and trying to rustle up enough motivation to do much more than slouch on the sofa all day. I know that some would say that NOT listening to them would be enough motivation to get off the sofa, and others might say that listening to them just sucks motivation away from you, but hey&#8230; it&#8217;s my day off and I&#8217;m waiting for the Dishwasher to go through a cleaning cycle! </p>
<script type="text/javascript"><!--
google_ad_client = "pub-4296098225870941";
/* Simple Ads for blogs */
google_ad_slot = "8332844420";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<p><a href="http://feedads.g.doubleclick.net/~a/UF5zHxFdPw719pw7-nv7X_byfkM/0/da"><img src="http://feedads.g.doubleclick.net/~a/UF5zHxFdPw719pw7-nv7X_byfkM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/UF5zHxFdPw719pw7-nv7X_byfkM/1/da"><img src="http://feedads.g.doubleclick.net/~a/UF5zHxFdPw719pw7-nv7X_byfkM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/j91Dhku9u7k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2010/07/27/still-alive-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2010/07/27/still-alive-2/</feedburner:origLink></item>
		<item>
		<title>Revisiting “old” Code</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/esiF0NdprYI/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2010/05/19/revisiting-old-code/#comments</comments>
		<pubDate>Wed, 19 May 2010 14:23:21 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Witterings]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Wordbooker]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/?p=924</guid>
		<description><![CDATA[In which Steve mutters and grumbles about bit rot, and the problems of hacking code together when you are trying to connect two different web based applications who are also implementing major code changes without any proper documentation being available.]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2010/05/19/revisiting-old-code/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2010/05/19/revisiting-old-code/"></a></div>
</div>
<p>Nick commented once about some of the code in <a href="http://www.canalplan.org.uk/">CanalPlan AC </a>and how it was suffering from &#8220;bit rot&#8221;. Basically code that you shoved in, often as a quick dirty fix and  then it starts to fail but with no good reason.</p>
<p>Well <a href="http://wordpress.org/extend/plugins/wordbooker/">Wordbooker</a> is suffering from bit rot, its just that luckily no-one has noticed it yet, well apart from me that is.</p>
<p>Wordbooker took code written by Robert Tsai for his plugin (Wordbook) and extended it. That is why Wordbooker is called Wordbooker &#8211; because it stands for WordbookE[xtended]R[elease].  Robert&#8217;s code used to support the WordPress PHP libraries for PHP4 and PHP5. PHP4 support was dropped but the wrappers were left inside the code, adding a level of abstraction around the calls to the Facebook PHP libraries.</p>
<p>When I added all the new features such as posting to walls and FB widgets and so on, into his code I sometimes used his wrappers and sometimes made the calls directly.  </p>
<p>Facebook then depreciated some functionality and so calls to functions supporting that got commented out and eventually I stripped most of the code out.</p>
<p>I&#8217;d added functionality to handle comments really as a sort of proof of concept and then I added posting support to pages, but comments to pages didn&#8217;t get processed properly due to slight differences inside FB on how pages are handled.</p>
<p>So that was the next big project &#8211; re-write comment handling to make it a lot more robust (and at the same time simpler). </p>
<p>But then Facebook came along with the Graph API and the Oauth authentication process and said that all applications would be force migrated to the new Authentication method on June 1st.  The new Graph API would make my job simpler as I only use a few calls (post to wall, post comment, get comment, get status, and a few FQL calls) and so obviously I should think about moving my code to use it.</p>
<p>That wouldn&#8217;t be bad if the Graph API was complete and not riddled with bugs (for example if you include a link in a post it thinks you are doing a &#8220;share&#8221; style post and goes and scrapes that URL &#8211; something which is not right and not how the old API works),  but as it is I can&#8217;t use the new API for anything but authentication, so I&#8217;ve had to work out how to use the Oauth method for signing on, but then use the old API for the rest of my code, all under the looming date of the end of the month and with me working a day job as well.</p>
<p>Facebook also changed their policy on posting to walls and I asked them for clarification, and they asked for more information which I&#8217;ve given them, and now I&#8217;m waiting to hear back from them. It could mean that I have to change my code, but actually it will make the process easier to code and make it easier for the user to understand, so I am going to make the changes any way.</p>
<p>WordPress is also changing &#8211; with 3.0 coming out really soon now &#8211; and I wanted to make my install more multiblog friendly : so 4 tables per WP install rather than 4 tables per blog which means some quite jolly logic to work out if you are in WP2 (or WPMU2) or WP3 (running in single or multiple blog mode)</p>
<p>So I&#8217;m revisiting my old code and wondering if I should really throw 80% of it away and strip away the crud and spaghetti that seems to have collected during my rapid development of the project. I&#8217;ve now got a much clearer idea of how things should work and how the code should flow, and how to code round the countless &#8220;failures&#8221; of the FB back end which occur at depressingly frequently intervals, some of which I did last night when a couple of users were basically stuck because FB were playing round with code on the live servers again.</p>
<script type="text/javascript"><!--
google_ad_client = "pub-4296098225870941";
/* Simple Ads for blogs */
google_ad_slot = "8332844420";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<p><a href="http://feedads.g.doubleclick.net/~a/yNhdT-C6pafbWTcQK18J_ng9OiY/0/da"><img src="http://feedads.g.doubleclick.net/~a/yNhdT-C6pafbWTcQK18J_ng9OiY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yNhdT-C6pafbWTcQK18J_ng9OiY/1/da"><img src="http://feedads.g.doubleclick.net/~a/yNhdT-C6pafbWTcQK18J_ng9OiY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/esiF0NdprYI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2010/05/19/revisiting-old-code/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2010/05/19/revisiting-old-code/</feedburner:origLink></item>
		<item>
		<title>So much for Mobile broadband</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/se1259KADxo/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2010/05/12/so-much-for-mobile-broadband/#comments</comments>
		<pubDate>Wed, 12 May 2010 12:25:32 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/?p=919</guid>
		<description><![CDATA[In which Steve mutters about the O2 broadband dongle and its broken DNS handling.]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2010/05/12/so-much-for-mobile-broadband/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2010/05/12/so-much-for-mobile-broadband/"></a></div>
</div>
<p>Was trying to check a problem with<a href="http://www.canalplan.org.uk"> Canalplan AC</a> today and as its sitting on the server in the living room I thought I should try it &#8220;remotely&#8221; rather than access off the local network.</p>
<p>So I got the O2 broadband dongle and powered it up and connected, and couldn&#8217;t reproduce the error&#8230; Oh well, thats how things go, especially when you are talking about IE8.</p>
<p>So whilst I was connected I thought I&#8217;d just hop onto this blog site and check a couple of things.</p>
<p>Sorry &#8211; No Can Do! Not Possible. Kept telling me the site was not available.</p>
<p>But it sits on the same server as Canalplan AC. It sits on blogs.canalplan.org.uk when Canalplan is on www.canalplan.org.uk.</p>
<p>So if one responds, then the other other should. Right?</p>
<p>Well you are wrong:</p>
<p>Here is the output of a ping command:</p>
<pre>Microsoft Windows [Version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\Users\steve&gt;ping www.canalplan.org.uk

Pinging www.canalplan.org.uk [212.159.61.36] with 32 bytes of data:
</pre>
<p>So that&#8217;s good  &#8211; its getting the IP address. It wont ever respond to pings because the router dumps them.</p>
<p>So lets try for the blogs:</p>
<pre>
Microsoft Windows [Version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\Users\steve&gt;ping blogs.canalplan.org.uk
Ping request could not find host blogs.canalplan.org.uk. Please check the name and try again.
</pre>
<p>Nope &#8211; its not there.</p>
<p>The DNS servers for O2 don&#8217;t recognise it as a valid host name.</p>
<p>Tosspots.</p>
<p>OR rather its their Windows software that is screwy. If I power up under Linux then it works fine!</p>
<script type="text/javascript"><!--
google_ad_client = "pub-4296098225870941";
/* Simple Ads for blogs */
google_ad_slot = "8332844420";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<p><a href="http://feedads.g.doubleclick.net/~a/PstcNUi8GmvncBGI_U2ClBZgPJI/0/da"><img src="http://feedads.g.doubleclick.net/~a/PstcNUi8GmvncBGI_U2ClBZgPJI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PstcNUi8GmvncBGI_U2ClBZgPJI/1/da"><img src="http://feedads.g.doubleclick.net/~a/PstcNUi8GmvncBGI_U2ClBZgPJI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/se1259KADxo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2010/05/12/so-much-for-mobile-broadband/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2010/05/12/so-much-for-mobile-broadband/</feedburner:origLink></item>
		<item>
		<title>Using the new Facebook Graph API off-line</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/H6RY7y85H0Q/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2010/05/05/using-the-new-facebook-graph-api-off-line/#comments</comments>
		<pubDate>Wed, 05 May 2010 12:29:05 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[graph API]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/?p=896</guid>
		<description><![CDATA[In which Steve shows off some code to handle offline interactions with Facebook using the new GRAPH API and the new Facebook PHP SDK. Its all very technical and dull.]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2010/05/05/using-the-new-facebook-graph-api-off-line/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2010/05/05/using-the-new-facebook-graph-api-off-line/"></a></div>
</div>
<p>One of the features of the old Facebook API was &#8220;off-line&#8221; access &#8211; basically where you could interact with Facebook in a &#8220;non-interactive&#8221; way : in other words a program or script could interact with Facebook on your behalf without you having to have a Facebook window open in your browser.</p>
<p>The new API also supports this but the documentation is not really totally clear on the &#8220;process&#8221; needed to do it.</p>
<p>So I sat down and worked it out. The code you are about to see is not neat, or tidy. It contains no proper error handling or checking apart from the bare minimum needed to make it work.</p>
<p><strong><span style="font-size: large">Pre-requisites</span><br />
</strong><br />
You will need:</p>
<ul>
<li>A Webserver</li>
<li>PHP V5.x with CURL enabled</li>
<li>A MySQL Database.</li>
<li><a title="Link to Facebook" href="http://www.facebook.com" target="_blank">A Facebook Account</a> (preferably a developer account unless your friends like being spammed)</li>
<li><a title="Link to Facebook Create App Page" href="http://www.facebook.com/developers/createapp.php" target="_blank">A Facebook Application</a></li>
<li>The Facebook Graph PHP-SDK which is available from the <a href="http://github.com/facebook/php-sdk" target="_blank">GitHub repository</a>.</li>
</ul>
<p>First of all we need to make sure that we have a table to store the session data in. We are actually storing all the session data : this might be overkill but as a lot of this is still undocumented I felt it was safer to store everything.</p>
<p>So at the start of our example lets do the dirty work with the database. If you were doing this properly you&#8217;d have this in a function which you called once, for example with a WordPress plugin you&#8217;d call it on plugin activation. But we&#8217;re not doing that here so &#8230;. and don&#8217;t forget to change those db_  parameters to match your system.</p>
<pre>$db_server = "localhost";
$db_username = "dbuser";
$db_password = "dbpassword";
$db_name = "dbname";

# Lets connect to the Database and set up the table
mysql_connect($db_server,$db_username,$db_password);
mysql_select_db($db_name);
$ct_res = mysql_query("CREATE TABLE IF NOT EXISTS `facebook_user` (
   `session_key` VARCHAR( 80 ) NOT NULL ,
   `uid` VARCHAR( 80 ) NOT NULL ,
   `expires` VARCHAR( 80 ) NOT NULL ,
   `secret` VARCHAR( 80 ) NOT NULL ,
   `access_token` VARCHAR( 120 ) NOT NULL ,
   `sig` VARCHAR( 80 ) NOT NULL
   );"
);</pre>
<p>OK So that&#8217;s the DB work done and each time we run the script it will create the table if its not there. Now we can set up the Facebook side of things. Don&#8217;t forget to change the path for the facebook.php file (which you did download  didn&#8217;t you?). You&#8217;ll also need the information about the Facebook Application you<a title="Link to Facebook Create App Page" href="http://www.facebook.com/developers/createapp.php" target="_blank"> set up </a> because I&#8217;m not letting you share mine! You may also want to review the permissions that are being granted &#8211; the ones in this code are the ones my <a title="link to Wordbooker page on Wordperess" href="http://wordpress.org/extend/plugins/wordbooker/" target="_blank">Wordbooker </a>application uses</p>
<pre># Now lets load the FB GRAPH API
require '../src/facebook.php';

// Create our Application instance.
global $facebook;
$facebook = new Facebook(array(
 'appId'  =&gt; '101001010101010101',
 'secret' =&gt; 'faafaffdfasdffsafsfsddfasd',
 'cookie' =&gt; false,
));

# Lets set up the permissions we need and set the login url in case we need it.
$par['req_perms'] = "publish_stream,
                    offline_access,
                    user_status,
                    read_stream,
                    email,
                    user_groups";
$loginUrl = $facebook-&gt;getLoginUrl($par);</pre>
<p>The &#8220;heart&#8221; of the code is the get_check_session function. This function checks to see if we have a session stored in the database and if we do it returns it. If we don&#8217;t have a session but a session is being passed in via the URL it gets it, stores it and then returns it. If neither of these cases are true it returns nothing.</p>
<pre>function get_check_session(){
  global $facebook;
  # This function basically checks for a stored session and if we have one returns it,
  #If we have no stored session then it gets one and stores it
  # OK lets go to the database and see if we have a session stored
  $sid=mysql_query("Select access_token from facebook_user");
  $session_id=mysql_fetch_row($sid);
  if (is_array($session_id)) {
    # We have a session ID so lets not get a new one
    # Put some session checking in here to make sure its valid
   try {
     $attachment =  array('access_token' =&gt; $session_id[0],);
     $ret_code=$facebook-&gt;api('/me', 'GET', $attachment);
    }
     catch (Exception $e) {
       # We don't have a good session so
       echo "woops";
      $res = mysql_query('delete from facebook_user where expires=0');
      return;
    }
  return $session_id[0];
 } 

 {
  # Are we coming back from a login with a session set?
  $session = $facebook-&gt;getSession();
  if (is_array($session)) {
   # Yes! so lets store it!
   $sql="insert into facebook_user (
               session_key,
               uid,
               expires,
               secret,
               access_token,
               sig)
             VALUES ('".$session['session_key']."','".
                        $session['uid']."','".
                        $session['expires']."','".
                        $session['secret'] ."','".
                        $session['access_token']."','".
                        $session['sig']."');";
   $res = mysql_query($sql);
   return $session['access_token'];
  }
 }
}</pre>
<p>OK, believe it or not we are just about there with only a few more lines of code to go. Are you ready?</p>
<pre>$access_token=get_check_session();
# If we've not got an access_token we need to login.
if ( is_null($access_token) ) {
echo '&lt;a href="'. $loginUrl.'"&gt;&lt;
img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif" alt="" /&gt; ';
}
else {

# This is where you put your code.
$target=1010101010100110;
$attachment =  array(
 'access_token' =&gt; $access_token,
 'message' =&gt; 'Did a Test Post :',
 'name' =&gt; "Offline posting using stored tokens",
   'link' =&gt; "http://blogs.canalplan.org.uk/steve/2010/05/05/using-the-new-facebook-graph-api-off-line/",
  'description' =&gt; "This post was made using a stored access token",
  'picture'=&gt;http://blogs.canalplan.org.uk/steve/files/2010/05/Screenshot-5-300x194.png",
			);

$ret_code=$facebook-&gt;api('/'.$target.'/feed', 'POST', $attachment);

echo "Returns : ";
var_dump($ret_code);
echo ""; 

$attachment =  array(
'access_token' =&gt; $access_token,
 'message' =&gt; "and this is a comment I've just made on the post using that same stored token",);

$ret_code=$facebook-&gt;api('/'.$ret_code['id'].'/comments', 'POST', $attachment);

echo "Returns : ";
var_dump($ret_code);
echo ""; 

}
</pre>
<p>Basically any code in the ELSE {} block is executed if you have a Facebook access_token. In the example what we do is post a message to a &#8220;target&#8221; which is a FB user ID (you can use names rather than numbers), and then we immediately comment on it. Which produces something like:</p>
<div id="attachment_905" class="wp-caption alignnone" style="width: 310px"><a href="http://blogs.canalplan.org.uk/steve/files/2010/05/Screenshot-5.png"><img class="size-medium wp-image-905" title="Screenshot-5" src="http://blogs.canalplan.org.uk/steve/files/2010/05/Screenshot-5-300x194.png" alt="image showing FB wall postings" width="300" height="194" /></a><p class="wp-caption-text">A Wall post and an associated comment made by the php code.</p></div>
<p>So there you go. Why not <a href="http://www.pemmaquid.plus.com/example3.php">download the code</a> and give it a go.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/KZ_Gs220rSx662bF5xTBBX9Cywo/0/da"><img src="http://feedads.g.doubleclick.net/~a/KZ_Gs220rSx662bF5xTBBX9Cywo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/KZ_Gs220rSx662bF5xTBBX9Cywo/1/da"><img src="http://feedads.g.doubleclick.net/~a/KZ_Gs220rSx662bF5xTBBX9Cywo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/H6RY7y85H0Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2010/05/05/using-the-new-facebook-graph-api-off-line/feed/</wfw:commentRss>
		<slash:comments>75</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2010/05/05/using-the-new-facebook-graph-api-off-line/</feedburner:origLink></item>
		<item>
		<title>Hitting a moving Target</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/KQzIahOxbpk/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2010/04/28/hitting-a-moving-target/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 09:47:42 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Rants]]></category>
		<category><![CDATA[Wordbooker]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/?p=886</guid>
		<description><![CDATA[In which Steve witters on about the crazy situation with Facebook and its ever changing API and developer policies and other such insanities.]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2010/04/28/hitting-a-moving-target/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2010/04/28/hitting-a-moving-target/"></a></div>
</div>
<p>Things move fast in the IT world:  Oracle spit out a new version of their database every couple of years, Microsoft keep&#8230;. well actually the less said about Microsoft the better to be honest, and as for Apple&#8230;&#8230;  <img src='http://blogs.canalplan.org.uk/steve/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' /> </p>
<p>I&#8217;ve been coding away on my <a href="http://wordpress.org/extend/plugins/wordbooker/">Wordbooker Plugin</a> since the tail end of last year. I had great plans for version 1.8.  I was going to add internationalisation and completely rebuild comment handling from the ground up as its not really working properly.. Hey I coded it in a day and bolted it onto the existing code so what else would you expect&#8230;</p>
<p>So I&#8217;d got all these plans worked out in my head and then along came Facebook and their developer conference (F8) who shoved a huge great spanner into the works.</p>
<p>Now for those who have never tried programming against the Facebook API you wont know just how annoying it is. It is rather like trying to nail jelly to the ceiling : Facebook quite happily change the API on the live site without telling anyone which breaks things. Go on.. how many times have you seen the &#8220;Oops, something seems to have gone wrong&#8221; message? Well developers get that too &#8211; or rather they get calls that suddenly return no data, or incorrect and incomplete data, or error codes they&#8217;ve never seen before.</p>
<p>People file bug reports and Facebook go and change the documentation and then deny its an error. Or Facebook fix the bug and everything is fine for a few weeks then it re-occurs which suggests a lack of a proper test and release process. The worst one I&#8217;ve seen is a bug which apparently &#8220;fixed&#8221; itself with Facebook representatives saying they did not know what had caused the problem or why it was now working again. The PHP files they provide don&#8217;t even have version IDs in them so you can&#8217;t tell if you&#8217;ve got the latest version, or <em>worse still</em> : you can&#8217;t determine the version of the files that another WordPress plugin might have installed &#8211; so your code doesn&#8217;t work because the version of the Facebook files they have installed doesn&#8217;t have the function, or class, you need for your code to work.</p>
<p>So any way, along comes F8 and a whole new way of interfacing with Facebook : The Graph API, and along with that came a new data model and a new data permissions dialogue, and a new Data policy. Everything new and shiny and the statement that &#8220;On June 1, 2010, we&#8217;ll automatically transition all Facebook Platform  applications and websites who have not yet migrated.&#8221;</p>
<p>Sounds good doesn&#8217;t it. Apart from the fact that no-one at Facebook has explained how you can use the new Data permissions dialogue with the &#8220;old&#8221; API, and everything I&#8217;ve tried simply comes back with meaningless errors, and from what I&#8217;ve read other developers have experienced the same problems.</p>
<p>So I guess I could just convert my application over to the new API couldn&#8217;t I, that would make things easier wouldn&#8217;t it? Ahhh&#8230;&#8230;&#8230;&#8230;..actually I can&#8217;t because Facebook haven&#8217;t actually written the PHP API libraries yet &#8211; well not to the point of supporting &#8220;offline&#8221; access, which is what my application relies on. Actually that last bit says a lot about Facebook : They announce a whole new API and a whole new data structure, but the only way to access it is hand crafting your own CURL statements and running a &#8220;live&#8221; Facebook session. Talk about the right hand not knowing what the left is doing&#8230;.</p>
<p>Madness</p>

<p><a href="http://feedads.g.doubleclick.net/~a/nGW0sjyR1KVGGkxHeL5h3EhveHM/0/da"><img src="http://feedads.g.doubleclick.net/~a/nGW0sjyR1KVGGkxHeL5h3EhveHM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/nGW0sjyR1KVGGkxHeL5h3EhveHM/1/da"><img src="http://feedads.g.doubleclick.net/~a/nGW0sjyR1KVGGkxHeL5h3EhveHM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/KQzIahOxbpk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2010/04/28/hitting-a-moving-target/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2010/04/28/hitting-a-moving-target/</feedburner:origLink></item>
		<item>
		<title>The importance of testing</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/iJhJJsrvE9M/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2010/02/24/the-importance-of-testing/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 13:31:52 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Witterings]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/?p=853</guid>
		<description><![CDATA[When I started the fork of Robert Tsai&#8217;s Wordbook plugin, which I rebranded as Wordbooker, I was pushing out version after version very quickly: Version 1.0 came out on 02/01/2010 and I was up to Version 1.5 by 10/01/2010. Things have slowed down a bit now, and Version 1.6 was released on 22/01/2010 with 1.6.1 [...]]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2010/02/24/the-importance-of-testing/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2010/02/24/the-importance-of-testing/"></a></div>
</div>
<p>When I started the fork of Robert Tsai&#8217;s <a href="http://wordpress.org/extend/plugins/wordbook/">Wordbook</a> plugin, which I rebranded as <a href="http://wordpress.org/extend/plugins/wordbooker/">Wordbooker</a>, I was pushing out version after version very quickly: Version 1.0 came out on 02/01/2010 and I was up to Version 1.5 by 10/01/2010.</p>
<p>Things have slowed down a bit now, and Version 1.6 was released on 22/01/2010 with 1.6.1 (which allowed posting to Fan Page Walls) coming out on 29/01/2010.</p>
<p>Version 1.7 is still being worked on &#8211; and I&#8217;m up to Beta 7, and about to push Beta 8 out later today which fixes some minor annoyance.</p>
<p>These Betas have been a mix of code fixes, code enhancements to work round various WordPress plugins, and fixes to HTML to get things working across the user &#8220;landscape&#8221;.</p>
<p>I do all my development on a Medion  S5610 Laptop running Ubuntu 9.10. So I&#8217;ve got Firefox 3.6, Opera 10.10, Chromium 5.0.336.0 (39849)  and Chrome installed as browsers. If I reboot into Windows then I can test on Firefox 3.6 , Opera 10, Chrome, Safari, and Internet Explorer 8. That still leaves the Mac platform as a complete blank space where I can&#8217;t test, plus any other versions of Internet Explorer.</p>
<p>It wouldn&#8217;t be bad if all the browsers behaved the same but they don&#8217;t. Chrome for example craps out if you forget to close label tags &#8211; its obviously something to do with nesting that eventually blows something up, but I don&#8217;t know what it is.</p>
<p>Internet Explorer 8&#8242;s implementation of Javascript blows up on some drag and drop functionality provided by WordPress for its widget management page. No other browser seems to be quite so anal about null objects as IE is for some reason, and I&#8217;ve just spent an hour or so debugging it, and it was down to not including an object class inside a php text call (No don&#8217;t ask.. I don&#8217;t know why either)</p>
<p>So that&#8217;s why I&#8217;ve been pushing out Betas because I can&#8217;t test every single combination of operating system/browser/Wordpress version/active WordPress plugins.</p>
<p>Of course it doesn&#8217;t help that Facebook doesn&#8217;t always play ball properly &#8211; I spent about 2 hours chasing an image posting problem just to find that it was Facebook acting up.</p>
<p>Now all I&#8217;ve got to do is get people to use the beta versions and give me feedback on bugs&#8230;. that makes my part of the job look easy!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/YaGKZFKahyodrbfex_fuC40EqvI/0/da"><img src="http://feedads.g.doubleclick.net/~a/YaGKZFKahyodrbfex_fuC40EqvI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/YaGKZFKahyodrbfex_fuC40EqvI/1/da"><img src="http://feedads.g.doubleclick.net/~a/YaGKZFKahyodrbfex_fuC40EqvI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/iJhJJsrvE9M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2010/02/24/the-importance-of-testing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2010/02/24/the-importance-of-testing/</feedburner:origLink></item>
		<item>
		<title>WordPress and Facebook Integration</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/3YxMctJ_oDg/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2010/01/02/wordpress-and-facebook-integration/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 17:49:33 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Wordbooker]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[WPMU]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/?p=733</guid>
		<description><![CDATA[I&#8217;d been using the Wordbook app for quite a bit but I&#8217;d always found that it lacked some features that I liked. I&#8217;ve now added these functions and got it doing things how I&#8217;d like. So rather than keep cluttering up the original wordbook application page I&#8217;ve forked by code off totally. I created a [...]]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2010/01/02/wordpress-and-facebook-integration/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2010/01/02/wordpress-and-facebook-integration/"></a></div>
</div>
<p>I&#8217;d been using the <a title="Link to Wordbook Application on Facebook" href="http://www.facebook.com/apps/application.php?id=3353257731" target="_blank">Wordbook app</a> for quite a bit but I&#8217;d always found that it lacked some features that I liked. I&#8217;ve now added these functions and got it doing things how I&#8217;d like.</p>
<p>So rather than keep cluttering up the original wordbook application page I&#8217;ve forked by code off totally.</p>
<p>I created a new Facebook application called <a title="Link to Wordbooker Application on Facebook" href="http://www.facebook.com/apps/application.php?id=254577506873" target="_blank">Wordbooker</a> and then created a new plugin called <a title="Link to the Wordbooker extension at WordPress" href="http://wordpress.org/extend/plugins/wordbooker/" target="_blank">Wordbooker</a> in the WordPress Extensions site.</p>
<p><strong><span style="font-size: medium">Upgrading from the Forked Version.</span></strong></p>
<p>As this is basically a new application its a bit messy as doing a normal removal of the old forked version will remove any record of posts/comments made with the forked version.</p>
<p>If you wish to retain that history then you need to back up the existing wordbook_postcomments table BEFORE you remove the forked version of wordbook.</p>
<p>Go into the options page for Wordbook and reset the configuration for wordbook</p>
<p>From the plugins page de-activate the wordbook plugin.</p>
<p>Delete the wordbook directory from wp-content/plugins</p>
<p>Upload the wordbooker directory into the wp-content/plugins directory</p>
<p>Go into the Plugins page and enable Wordbooker.</p>
<p>Go to the options page for Wordbooker and  it will ask you to get a login key from Facebook and then ask you to grant two extra permissions needed by Wordbooker &#8211; these allow Wordbooker to publish to your wall and also to fetch comments from it.</p>
<p>Click on the Save Configuration button.</p>
<p>You can then set up the various options on the option screen:</p>
<div id="attachment_734" class="wp-caption alignnone" style="width: 310px"><a href="http://blogs.canalplan.org.uk/steve/files/2010/01/wb-options.png"><img class="size-medium wp-image-734" title="wb-options" src="http://blogs.canalplan.org.uk/steve/files/2010/01/wb-options-300x158.png" alt="Wordbooker Options page" width="300" height="158" /></a><p class="wp-caption-text">Wordbooker Options page</p></div>
<p><strong>** Multiple Facebook account / WordPress account support **</strong></p>
<p>If you as the blog owner only want it so that WP posts go to your FB account then go into the Options screen and set the default account to be yours, and that should be it, any person using a different WP account to post to your blog will publish those stories to your FB account.</p>
<p>But what if you&#8217;ve got a Family WB where different people would like to post to WP and to their OWN FB accounts. Simply get each of them to login to WP as themselves and configure WB as if they were the only user. Then when all of them have done this go back in as yourself and set the Default account to be you.</p>
<p>On the Edit Post page there is a WordBook Options block which includes a drop down list of the blog you wish to post to, if you want to post to your default blog then you don&#8217;t need to touch this but if someone wants to post that post to their FB account all they need to do is pick their name from the drop down list before they post.</p>
<p><strong>** Length of Extract **</strong><br />
This allows you to change the length of the extract posted to Facebook. The minimum value is 200 and the maximum is 400 (at the moment) with the default being 256 characters. The extract will be trimmed to the nearest full word BELOW this value.</p>
<p><strong>** Default Publish Post to Facebook **</strong></p>
<p>This allows you to choose if posts should automatically be posted to Facebook. This option can be overridden from the Edit Post page</p>
<p><strong>** Post Attribute **</strong></p>
<p>This allows you to change the attribute line when posts are sent to Facebook. By default this is set to &#8220;Posted a new post on their blog&#8221;. This option can be overridden from the Edit Post page.</p>
<p><strong>** Republish Post if edited more than x days ago **</strong></p>
<p>This allows you to control how long it should be before Wordbook considers an edited post to be a &#8220;new&#8221; post and re-publishes it to Facebook.</p>
<p><strong>** Override Re-Publication window  **</strong></p>
<p>This allows to to force all edits to be reposted to Facebook ignoring the republish window. This option can be overridden from the Edit Post page.</p>
<p><strong>** Update Facebook Status **</strong><br />
If this option is checked then the title of your blog post and its permalink will be posted to your status, along with the text specified here. This can be overridden from the Edit Post page. NOTE: If this option is Selected then your status is ALWAYS updated, even if you choose NOT to publish your post to Facebook.</p>
<p><strong>** Import Comments from Facebook for Wordbook Posts  **</strong></p>
<p>This version of Wordbook supports the importing of comments made on Facebook back into your WordPress blog. This allows you to set the default behaviour. This option can be overridden from the Edit Post page</p>
<p><strong>** Auto Approve imported comments **</strong></p>
<p>If you trust your friends on Facebook then you&#8217;re probably quite happy for their comments to automatically get posted as comments on your WordPress blog. If this option is not set then any imported comments are held in the moderation queue.</p>
<p>Once you&#8217;ve got the options set how you want then save them.</p>
<p>If you exported the wordbook_postcomments table before upgrading then you can now import it back into the database.</p>
<p>There may be times when you you are posting a blog entry and you&#8217;d like to do something differently, like NOT publish a post, or change your choice on what you do with comment. So on the Add New and Edit posts page you should now find a Wordbooker Options Override block where you can override several defaults:</p>
<div id="attachment_737" class="wp-caption alignnone" style="width: 310px"><a href="http://blogs.canalplan.org.uk/steve/files/2010/01/wb-post-options.png"><img class="size-medium wp-image-737" title="wb-post options" src="http://blogs.canalplan.org.uk/steve/files/2010/01/wb-post-options-300x79.png" alt="Wordbooker Post options " width="300" height="79" /></a><p class="wp-caption-text">Wordbooker Post options </p></div>
<p>If you are the administrator of a Facebook Fan page then you&#8217;ll also be given the option of posting to that page instead of posting to your own wall. At the moment there is a bug in the API which means that posts made to Fan Pages are shown as YOU posting on the Fan Page wall &#8211; rather than it looking like the Fan Page has posted the post directly.</p>
<p>PROBLEMS</p>
<p>If you&#8217;ve got problems its probably best to post them on the <a href="http://www.facebook.com/apps/application.php?id=254577506873&amp;ref=nf">Wordbooker Page</a> on Facebook where people can create new threads for each bug/problem and people can easily see if any fixes have been made</p>

<p><a href="http://feedads.g.doubleclick.net/~a/bnrobSMsT6lZnw1Hcols1BDuY4Q/0/da"><img src="http://feedads.g.doubleclick.net/~a/bnrobSMsT6lZnw1Hcols1BDuY4Q/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bnrobSMsT6lZnw1Hcols1BDuY4Q/1/da"><img src="http://feedads.g.doubleclick.net/~a/bnrobSMsT6lZnw1Hcols1BDuY4Q/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/3YxMctJ_oDg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2010/01/02/wordpress-and-facebook-integration/feed/</wfw:commentRss>
		<slash:comments>115</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2010/01/02/wordpress-and-facebook-integration/</feedburner:origLink></item>
		<item>
		<title>The Cast List of White Christmas</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/xrYsyGRBFhk/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2009/12/24/the-cast-list-of-white-christmas/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 13:38:21 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Witterings]]></category>
		<category><![CDATA[Cast List]]></category>
		<category><![CDATA[Christmas]]></category>
		<category><![CDATA[Goodies]]></category>
		<category><![CDATA[Joke]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/?p=682</guid>
		<description><![CDATA[Emma Dreaming Arthur White Chris Muss Jess Likedy Juan Sy Hugh Sterno Wendy Treetops-Glissen Ann Chilled-Wren Liz Anne “Two Ears” Laybelle Cindy Snow Emma Dreaming Arthur White Chris Musswit Avery Criss Miss Carr Dai Wright Mayor Dazeby Mary-Ann Bright Anna-May Hall-York-Rhys Mrs B White Totally NOT my work, all credit goes to Graham Garden, Bill [...]]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2009/12/24/the-cast-list-of-white-christmas/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2009/12/24/the-cast-list-of-white-christmas/"></a></div>
</div>
<p>Emma Dreaming<br />
Arthur White<br />
Chris Muss<br />
Jess Likedy<br />
Juan Sy<br />
Hugh Sterno</p>
<p>Wendy Treetops-Glissen<br />
Ann Chilled-Wren<br />
Liz Anne<br />
“Two Ears” Laybelle<br />
Cindy Snow</p>
<p>Emma Dreaming<br />
Arthur White<br />
Chris Musswit<br />
Avery Criss<br />
Miss Carr<br />
Dai Wright</p>
<p>Mayor Dazeby<br />
Mary-Ann Bright<br />
Anna-May Hall-York-Rhys<br />
Mrs B White</p>
<p>Totally NOT my work, all credit goes to Graham Garden, Bill Oddie and Tim Brooke-Taylor for writing this and putting it in &#8220;<em>The Making of The Goodies Distaster Movie</em>&#8220;.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/CBybowLaci3diUmyH8FiWX-5OZA/0/da"><img src="http://feedads.g.doubleclick.net/~a/CBybowLaci3diUmyH8FiWX-5OZA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CBybowLaci3diUmyH8FiWX-5OZA/1/da"><img src="http://feedads.g.doubleclick.net/~a/CBybowLaci3diUmyH8FiWX-5OZA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/xrYsyGRBFhk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2009/12/24/the-cast-list-of-white-christmas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2009/12/24/the-cast-list-of-white-christmas/</feedburner:origLink></item>
		<item>
		<title>A Thanksgiving Wedding</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/_jlDvHU4RiU/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2009/12/01/a-thanksgiving-wedding/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 18:29:40 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Maine]]></category>
		<category><![CDATA[Witterings]]></category>
		<category><![CDATA[Jill]]></category>
		<category><![CDATA[Rick]]></category>
		<category><![CDATA[wedding]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/2009/12/01/a-thanksgiving-wedding/</guid>
		<description><![CDATA[So what did you do on the Saturday following Thanksgiving on Thursday and the madness of &#8220;Black Friday&#8221;? Did you take it easy and watch some TV, or did you venture out to do some shopping hoping that things would be a little quieter. Or did you go to a wedding? Rick and Jill&#8217;s wedding [...]]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2009/12/01/a-thanksgiving-wedding/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2009/12/01/a-thanksgiving-wedding/"></a></div>
</div>
<p>So what did you do on the Saturday following Thanksgiving on Thursday and the madness of &#8220;Black Friday&#8221;? Did you take it easy and watch some TV, or did you venture out to do some shopping hoping that things would be a little quieter.</p>
<p>Or did you go to a wedding?</p>
<p>Rick and Jill&#8217;s wedding was one of the reasons we&#8217;d flown back to Maine and with it being on the Thanksgiving weekend it all worked out quite well.</p>
<p>Having recovered from too much turkey on Thursday we all gathered at the church on Friday evening to have a rehearsal which went quite smoothly which I suppose is a good thing, and then we all went over to the <a title="link to the Ground Round website" href="http://www.groundroundme.com/" target="_blank">Ground Round</a> for the rehearsal supper where I think we almost ate too much food again.</p>
<p>Saturday morning seemed to roll round really quickly and Kathy headed out to get her hair done, having got her nails done on Friday afternoon in the middle of the Black Friday madness. Then the Groom&#8217;s party descended on the house to get ready which was slightly less chaotic than when Jen got married the other year, but not by much.</p>
<p>There had been an earlier wedding at the church but by the time we got there there was no sign of them and it wasn&#8217;t long before wedding guests started turning up and the ceremony started right on time.</p>
<p>It was a pretty good ceremony with some good readings and the deacon talked well and made everyone feel welcome and relaxed, and even made a joke or two.</p>
<p>There was one very funny moment during the service when Rick and Jill went up to light the unity candle from the two side candles and they&#8217;d lit it and were walking back and it went out, so the deacon called them back and they tried to re-light it but it just didn&#8217;t want to know. After a little bit of work, and two tapers which were really starting to flare up, they got it lit and made their way back to their places and the ceremony continued.</p>
<p><img src="http://blogs.canalplan.org.uk/steve/files/2009/12/13742_1291940983817_1389037839_836473_2130235_n.jpg" alt="13742 1291940983817 1389037839 836473 2130235 n" width="450" height="299" /></p>
<p>I got caught out by the Roman Catholic version of The Lords Prayer which is several lines shorter at the end, and it seems that it caught everyone else who wasn&#8217;t RC out as well.</p>
<p>After the service was over and photos were taken we all piled into various cars and headed across town to the Augusta Civic Center where the reception was being held. They&#8217;d even put a message on the electric notice board at the Civic Center so anyone driving past it would know.</p>
<p><img src="http://blogs.canalplan.org.uk/steve/files/2009/12/13742_1291932823613_1389037839_836464_5532964_n-1.jpg" alt="13742 1291932823613 1389037839 836464 5532964 n" width="450" height="337" /></p>
<p>The reception was being held in a function room in the North wing of the Center and there was a craft fayre being held in the main auditorium which some of us joked about crashing but  I think the arrival of a lot of people in matching tuxedos and waistcoats might have thrown them off a bit.</p>
<p>It was a great reception and everyone seemed to have a good time. So to finish off this blog here is a picture of the happy couple</p>
<p><img src="http://blogs.canalplan.org.uk/steve/files/2009/12/13742_1291977184722_1389037839_836631_633757_n.jpg" alt="13742 1291977184722 1389037839 836631 633757 n" width="450" height="299" /></p>

<p><a href="http://feedads.g.doubleclick.net/~a/UvgJbswcRTa5tBAVNdfJ7bd99SE/0/da"><img src="http://feedads.g.doubleclick.net/~a/UvgJbswcRTa5tBAVNdfJ7bd99SE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/UvgJbswcRTa5tBAVNdfJ7bd99SE/1/da"><img src="http://feedads.g.doubleclick.net/~a/UvgJbswcRTa5tBAVNdfJ7bd99SE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/_jlDvHU4RiU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2009/12/01/a-thanksgiving-wedding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2009/12/01/a-thanksgiving-wedding/</feedburner:origLink></item>
		<item>
		<title>American Customs</title>
		<link>http://feedproxy.google.com/~r/blogdns/zMtY/~3/A0kZQLSzfXo/</link>
		<comments>http://blogs.canalplan.org.uk/steve/2009/11/26/american-customs/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 20:52:08 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Maine]]></category>
		<category><![CDATA[Witterings]]></category>
		<category><![CDATA[augusta]]></category>
		<category><![CDATA[basketball]]></category>
		<category><![CDATA[thanksgiving]]></category>
		<category><![CDATA[turkey]]></category>

		<guid isPermaLink="false">http://blogs.canalplan.org.uk/steve/2009/11/26/american-customs/</guid>
		<description><![CDATA[On Monday after returning from our weekend away in Kennebunkport I went to my first basketball game. It was a game between the Maine Redclaws and the Springfield Armor at the Augusta Civic Center. I had no real idea of what to expect. I&#8217;d seen some games on TV, including a couple over at Sue [...]]]></description>
			<content:encoded><![CDATA[<p></p>
<div><!-- Wordbooker created FB tags --> <iframe src="http://www.facebook.com/plugins/like.php?href=http://blogs.canalplan.org.uk/steve/2009/11/26/american-customs/&amp;layout=standard&amp;show_faces=false&amp;width=480&amp;action=recommend&amp;colorscheme=light&amp;font=arial&amp;height=35px" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:480px; height:35px;" allowTransparency="true"></iframe>
<div style="float:right;"><!-- Wordbooker created FB tags --> <a name="fb_share" type="button" share_url="http://blogs.canalplan.org.uk/steve/2009/11/26/american-customs/"></a></div>
</div>
<p>On Monday after returning from our weekend away in Kennebunkport I went to my first basketball game. It was a game between the Maine Redclaws and the Springfield Armor at the Augusta Civic Center.</p>
<p>I had no real idea of what to expect. I&#8217;d seen some games on TV, including a couple over at Sue and Jeff&#8217;s but watching top flight pro teams on TV is very different to seing a pretty new team in the D league. Probably like watching Arsenal v Chelsea on TV and then going to watch Cheltenham v Burton Albion.</p>
<p>I think what struck me most was how disjointed the whole thing felt. There were mad bursts of action with players running back and forth along the full length of the court and then there were whole periods of nothing going on with timeouts and penalty shots, and sometimes those penalty shots seemed to take forever to be taken. Of course with all the timeouts and everything else it&#8217;s surprising how long 48 minutes of play can be stretched out to, and having a ref who seeemed to love the sound of his own whistle and his own voice probably didn&#8217;t help, and the crowd of just over 3000 people didn&#8217;t think he was doing a very good job.</p>
<p>Today was of course, Thanksgiving, so that meant a lot of good food and family time with Kathy&#8217;s family, and everyone ate too much, and that was before we started on the various pies for dessert.</p>
<p>Now everyone is just sitting round relaxing and trying not to fall asleep, and talking about plans for Black Friday, and working on wedding programs for this weekend.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/spfEV-P5Is4bkE_jGuriRf_EktU/0/da"><img src="http://feedads.g.doubleclick.net/~a/spfEV-P5Is4bkE_jGuriRf_EktU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/spfEV-P5Is4bkE_jGuriRf_EktU/1/da"><img src="http://feedads.g.doubleclick.net/~a/spfEV-P5Is4bkE_jGuriRf_EktU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blogdns/zMtY/~4/A0kZQLSzfXo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blogs.canalplan.org.uk/steve/2009/11/26/american-customs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.canalplan.org.uk/steve/2009/11/26/american-customs/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.896 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-08-31 22:02:20 -->
