Redirection – an essential plug-in for WordPress users

Last year, a combination of a loss of service from my hosting provider and my appalling backups meant that this website was temporarily wiped off the face of the Internet. It’s never recovered – at least not in terms of revenue – and it taught me an important lesson about backups (it’s all too easy to forget the hours of effort that go into a “hobby” site like this one…).

Whilst the blog posts were restored, and I took the opportunity to apply a new theme to the site (it’s probably due another one now…) but some of the images had got AWOL along the way. I’ve been ignoring that (mostly) but decided I really should do something about it when an old post was picked up by a journalist today and I realised it had a missing graphic.

I remembered a WordPress plugin that I used on another site recently, for managing redirects when access to the .htaccess file is not available. The plug-in, written by John Godley, is called Redirection, and one of its modules will report on HTTP 404 errors, like the ones that my missing graphics will create. I know there are other tools that can do this for me (Google’s Webmaster Tools, for example, or trawling through the web logs) but it’s an easy way to see when a 404 has been returned in order to investigate accordingly.  So far this afternoon, I’ve tracked down and replaced around 8 missing graphics and one broken permalink using the logs from Redirection.  I’m now scanning through the rest of John’s plugins to see what else I’m missing and will certainly be donating later…

Disabling comments for all posts on a WordPress blog

Long-time readers of my blog will know that I used to manage the Fujitsu UK and Ireland CTO Blog (which we’ve recently closed, but have left the content in place for posterity) and I’m still getting the comment notifications (mostly spam).  Many of the posts have HTTP 301 redirects to either mine or David Smith‘s blogs (I found a great WordPress plugin for that – Redirection) but, for those that remain, I wanted to turn off comments.  Doing this individually for each post seemed unnecessarily clunky but there is, apparently, no way to do this from the WordPress user interface (with database access it would have been straightforward but I don’t have that level of access).

There is a plug-in that globally disables all comments – named, rather aptly, Disable Comments – except that the blog is part of a multi-site (network) install and I’m not sure what the broader impact would be…

No bother, I found a workaround – simply set all of the posts to close comments after a certain number of days. The theme that someone has applied to the site (since I stopped working with it) doesn’t seem to respect that, and still leaves a comment button visible, but anyone with a well-developed theme should be OK…

Handy WordPress URL re-write

Last week, I accidentally advertised a blog post using two different URLs (I edited the title, which changed the WordPress slug, but forgot to edit a draft email to refer the new URL). With Twitter advertising one URL to potential customers, and our internal newsletter advertising another, I needed both to work.

I don’t have access to the server (only to the WordPress application), so playing around with IIS/Apache URL re-writes wasn’t an option. I started to look for WordPress plugins but couldn’t find any – and then I found out why…

Although there is no mention of it in the Codex, when you change the title of a post, WordPress automatically creates an HTTP 301 redirect from the the old URL to the new. I’ve seen this on my own blog but Johannes Pille describes it beautifully on StackExchange:

“The previously used slug(s) are stored in the database in the wp_postmeta table. Check for _wp_old_slug in the meta_key column (the actual slugs being stored in the meta_value column). Hence should you ever want this default behavior not to happen in a particular case, this is where to delete a value.”

I also found that the URL (and hence the slug) is not set until the post is published. I had edited the title whilst the post was in a scheduled state, so there was only one slug recorded (the new title). By editing the slug post-publish, I was able to prevent the HTTP 404s that some people were seeing.

Adding extra social sharing services to WordPress with JetPack (ShareDaddy)

Last night, as part of the rebuild of this site, I reinstated the social sharing links for each post. In the old site they had been implemented as bespoke code using each social network’s recommended approach (e.g. Twitter or Facebook‘s official button codes) but presentation becomes problematic, with each button having a slightly different format and needing some CSS trickery to get it right.

I looked into a variety of plugins but they all had issues – either with formatting or functionality – until I stumbled across reference to WordPress.com’s social sharing capabilities.  If only I could have that functionality on a self-hosted (WordPress.org) site…

…As it happens, I can – WordPress.com’s social sharing is based on the ShareDaddy plugin, which is part of a collection called JetPack. ShareDaddy is also available as a freestanding plugin but now I have JetPack installed I’m finding some of the other functionality it gives me useful (and it’s not possible to activate ShareDaddy if you have JetPack installed).

I need to make some changes (like working out how to hack the code and turn off the count next to my Tweet/Like/+1 buttons – it’s embarrassing when the number is small!) but I’m happy enough with the result for now.  One thing I did need to do though was to add some services that are not yet in the JetPack version of the plugin (one of the major advantages of ShareDaddy is how simple it is to do this).

Rebuilding my site: please excuse the appearance

Regular readers may have noticed that this site is looking a little… different… right now.

Unfortunately, my hosting provider told me last night that they had a disk failure on the server. Normally that wouldn’t be a problem (that’s why servers have redundant components right? Like RAID on the disks?) but it seems this “server” is just a big PC. I can’t get too mad though… the MySQL database backup scripts have been failing for a month and it was my sloppyness that didn’t chase that up, and it was me who hadn’t made sure I had a recent copy of the file system…

So, as things stand:

  • I think I have restored all posts from 2004 until almost the end of August 2011;
  • I need to restore the later posts and comments (using copies from FeedBlitz, Google Reader, etc.);
  • There are no plugins (so things look odd); Some of the plugins have been reinstalled (but things may still look odd);
  • There are no graphics (they were hosted outside WordPress) I’ve restored all most of the graphics and other external media but there are still some I need to track down;
  • I have not restored the theme (so I’m using the WordPress defaults and there is no mobile theme);
  • The theme I’m using does not specify UTF-8 encoding so lots of  characters; Still some spurious characters appearing on some pages…
  • There are no fewer ads (which you might be happy about, but I do still need to pay the bills).

Please bear with me whilst I get things back… it may take some time as it needs to fit in between other activities but it might also be a good thing (new theme has been long overdue and I might even get smarter about my backups…).

And, if you spot another problem, please let me know.

[Updated at various points as the site has been restored]

Failing WordPress updates fixed by enabling FastCGI

For months, although it feels like years, I’ve been struggling with WordPress upgrades and it’s been driving me mad.  Each time I’ve attempted an in-app update of a plugin (or WordPress itself), it’s asked me for FTP credentials and then, usually, failed.  I’ve got used to re-installing WordPress but it shouldn’t be this way.

The problem, it seems was a combination of WordPress file ownership/permissions. I had to set the wp-content/upgrade folder permissions to 777 in order to successfully update plugins and that just didn’t feel right.  Luckily, I’m on good terms with my hosting provider and they started looking into the issue for me.  It seems (I think) that Apache was running as nobody and that was presenting some issues with WordPress. Changing the owner on my /blog folder (to nobody) fixed WordPress, but it meant I couldn’t FTP any content to the folder using my own username, so we went back to the drawing board.

I can’t claim to understand all the technical details but I’m told the fix was to enable FastCGI on the server.  It was originally disabled because it’s memory-hungry (spawning child processes for each user) but wow, FastCGI is a good name. Now my WordPress upgrades take seconds. I updated twice yesterday (to 3.1.4, then later to 3.2) and I was amazed how quickly things happened. That is good.

WordPress theme update prevents access to administrative pages

For days now, I’ve been banging my head against the wall on a problem with a WordPress website (not this one). I used an agency to develop a theme for me, but every time I applied it to the site, I lost access to the /wp-admin pages (in most browsers I saw a blank page, except in Firefox, where I could see the following characters: ). I only have access to the WordPress application (no database administration, or access to the web server itself), so the only way out was to ask the server administrators to restore the WordPress folders from backup, which takes time and gets embarrassing after a second attempt.

I’d seen John MacMenamin’s WordPress WP-Admin blank page fix post and thought I’d removed all whitespace from the top/bottom of functions.php but, after Alex Coles suggested that I look at the differences between Unix-style linefeeds and Windows carriage-return/linefeeds, Could this be the culprit in the case of the blank /wp-admin pages?I spotted the same strange characters at the head of the file (they showed up in windiff.exe as I was performing a file comparison). I don’t know how it got there but, each time I get a theme update, I have to manually remove what appeared to be a single byte from the head of the file using the nano editor on my Mac, which presented it as white space (I’m sure vi would do the job too), because not all text editors can see the offending character (certainly not Notepad on Windows, or TextEdit on a Mac).

This cost me a lot of time (and probably delayed the launch of the website too), so I thought it might be useful to flag up for others to benefit from my experience.

Rebuilding WordPress…

This post comes with an apology – to Alex Coles, who often helps me out with the development of this site, and who, after encouraging me to update it to the latest version of WordPress (late last night, at a pub, over a 3G mobile connection) was the recipient of my frustration when it failed with an HTTP 408 error and a message that said something about a slow connection. Sorry Alex.

Despite having been given a torrent of abuse, Alex was gracious enough to give me the advice that allowed me to rebuild the site. I was lucky that it had stayed up, albeit in some kind of weird state that said it was WordPress v3.0.1 but was probably still v2.9.2; however, attempts to reinstall WordPress were futile – and a failed plugin update left the site stuck in maintenance mode (the answer to which seemed to be wait a few minutes, although I also found advice which suggested deleting the .maintenance file).

So, this afternoon, I set about rebuilding the site, by installing a parallel copy of WordPress, although the database has not been changed (I do have a backup of that, if it becomes necessary to restore it).

  1. The first thing to do was to download the latest copy of WordPress. I’m on a Linux host so I downloaded the .tar.gz version but Windows users may prefer a .zip.
  2. After extracting the archive to a suitable location on my webspace (the web root was fine, as the extraction automatically created a /wordpress subdirectory).
  3. I then copied over the customised elements of the old site from /wp-content including themes, plugins, uploads and other data that my blog uses (for example, images that are not in my uploads folder, and JavaScript that I use to run some of the advertisements on the site).
  4. Next, I copied some of the critical files that control the WordPress configuration: wp-settings.php, wp-config.php and .htaccess.
  5. Finally, I renamed the old /blog folder, and renamed /wordpress to /blog before testing site access.

With everything working well, I can delete the old /blog subdirectory but I’ll leave it for a while, “just in case” – although it’s probably worth editing /robots.txt to stop search engines from indexing the old site alongside the new one.

I should probably breathe a big sigh of relief now, but I’m in the mood for site development so, if you see the site theme change a few times over the coming weeks, bear with me!

Adding a Facebook Share (or Like) button to a self-hosted WordPress blog

A few weeks ago, I wrote about adding a Tweet button to a self-hosted WordPress blog, and followed up by writing about using a little CSS trickery to align the Tweet button (thanks to Alex Coles).  Whilst I was implementing the Tweet Button, I also went about putting a Facebook Share button on each post.

There are plug-ins to do this for me but why use a plugin when the answer is just a single lines of code in two files within the template?

In the same paragraph as the Tweet button (i.e. styled with the same class), I used this code, generated using the Facebook Share Button generator:

This time, the code is identical for both index.php and single.php as, unfortunately, Facebook doesn’t seem to give me any control over the title of the link (it just takes the </code> tag from the page). <a href="http://askville.amazon.com/add-Share-Facebook-button-webpage/AnswerViewer.do?requestId=1539369">There is another method, using query string parameters in the URL</a> but I chose to stick with Facebook’s recommended method.</p> <p>Incidentally, I chose to Share, rather than <a href="http://developers.facebook.com/docs/reference/plugins/like">Like (which can be implemented by following these guidelines)</a> because they have subtly different purposes and <a href="http://daggle.com/facebook-button-facebook-share-keeping-1792">each is represented in a slightly different manner (as Danny Sullivan describes in his post on the subject)</a>. After reading Danny’s post, I agree that Share is best for linking to a single post, whilst Like is more suited to the site as a whole (someone might <em>Like</em> markwilson.it and <em>Share</em> one or more posts from the site).</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in Uncategorised</span><span class="tags-links">Tagged <a href="https://www.markwilson.co.uk/blog/tag/social-networking" rel="tag">Social Networking</a>, <a href="https://www.markwilson.co.uk/blog/tag/wordpress" rel="tag">WordPress</a></span><span class="comments-link"><a href="https://www.markwilson.co.uk/blog/2010/09/adding-a-facebook-share-or-like-button-to-a-self-hosted-wordpress-blog.htm#respond">Leave a comment</a></span> </footer><!-- .entry-footer --> </article><!-- #post-## --> <article id="post-1979" class="post-1979 post type-post status-publish format-standard hentry tag-social-networking tag-wordpress"> <header class="entry-header"> <h2 class="entry-title"><a href="https://www.markwilson.co.uk/blog/2010/08/more-on-implementing-twitters-tweet-button.htm" rel="bookmark">More on implementing Twitter’s Tweet button</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://www.markwilson.co.uk/blog/2010/08/more-on-implementing-twitters-tweet-button.htm" rel="bookmark"><time class="entry-date published" datetime="2010-08-26T18:51:56+01:00">Thursday 26 August 2010</time></a></span><span class="byline"> By <span class="author vcard"><a class="url fn n" href="https://www.markwilson.co.uk/blog/author/mark-wilson">Mark Wilson</a></span></span> </div><!-- .entry-meta --> </header><!-- .entry-header --> <a class="post-thumbnail" href="https://www.markwilson.co.uk/blog/2010/08/more-on-implementing-twitters-tweet-button.htm"> </a> <div class="entry-content"> <p>A week or so back, I wrote about <a href="https://www.markwilson.co.uk/blog/2010/08/adding-a-tweet-button-to-a-self-hosted-wordpress-blog.htm">putting a Tweet button onto a self-hosted WordPress blog</a>. The method I used was fine – it works – but I was struggling to place the button within my page (I knew where to put it in my code but it seemed to display in the wrong place sometimes, as a result of some of the floats that the stylesheet applies).</p> <p>That’s when I called in my buddy <a href="http://www.alexcoles.com/">Alex</a>: XHTML and CSS wizard; and fixer of many things on this site.</p> <p>He spotted that, even though <a href="http://dev.twitter.com/pages/tweet-button">Twitter gives us three options for implementing the Tweet button: JavaScript, IFrame, and roll your own</a>, the <a href="http://platform.twitter.com/widgets.js">JavaScript implementation</a> also uses an IFrame.</p> <p>The trouble with this is that IFrames are bad. Well, not really bad, but certainly deprecated for Strict HTML and XHTML, and certainly not the direction I want to be heading in for a compliant site. Ideally, I would find another way around the issue but rolling my own Tweet button doesn’t look great) and Twitter’s implementation uses several images in one file, just showing the appropriate section of the image. I could use this, with image replacement techniques for hover and click (which is what Twitter do) but, to be honest, that was a little out of my league, so IFrames it is…</p> <p>Alex helped me style up the button – if you want to do something similar, this was the CSS that he used:</p> <p><dirtycode:noclick>p.social-media {margin-top: -15px;}<br /> iframe.twitter-share-button {float: left; margin-right: 1em;}</dirtycode></p> <p>Together with adding <code>class="social-media"</code> to the <code></p> <p></code> tag in the code to display the tweet button so that it now reads:</p> <p><dirtycode:noclick></p> <p class="social-media"><a href="http://twitter.com/share" class="twitter-share-button" data-url="<?php the_permalink(); ?>” data-text=”<?php the_title(); ?>” data-count=”none” data-via=”markwilsonit”>Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></p> <p></dirtycode></p> <p>When I asked him how this works, he explained that the class on the <code></p> <p></code> is just to close up the top margin; the real magic is floating just the Tweet button (which cured the CSS float issues that had been frustrating me).</p> <p>Of course, there may be plugins to display buttons like Tweet, Facebook Share/Like, etc. but when something only takes a couple of lines of code, I’d rather implement it natively than add to the list of plugins running on my WordPress installation.</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="cat-links">Posted in Uncategorised</span><span class="tags-links">Tagged <a href="https://www.markwilson.co.uk/blog/tag/social-networking" rel="tag">Social Networking</a>, <a href="https://www.markwilson.co.uk/blog/tag/wordpress" rel="tag">WordPress</a></span><span class="comments-link"><a href="https://www.markwilson.co.uk/blog/2010/08/more-on-implementing-twitters-tweet-button.htm#respond">Leave a comment</a></span> </footer><!-- .entry-footer --> </article><!-- #post-## --> <nav class="navigation paging-navigation" role="navigation"> <h2 class="screen-reader-text">Posts navigation</h2> <div class="nav-links"> <div class="nav-previous"> <a href="https://www.markwilson.co.uk/blog/tag/wordpress/page/3" ><span class="meta-nav">←</span> Older posts</a> </div> <div class="nav-next"> <a href="https://www.markwilson.co.uk/blog/tag/wordpress" >Newer posts <span class="meta-nav">→</span></a> </div> </div><!-- .nav-links --> </nav><!-- .navigation --> </main><!-- #main --> </div><!-- #primary --> <div id="secondary" class="widget-area" role="complementary"> <aside id="search-4" class="widget widget_search"><form role="search" method="get" class="search-form" action="https://www.markwilson.co.uk/blog/"> <label> <span class="screen-reader-text">Search for:</span> <input type="search" class="search-field" placeholder="Search …" value="" name="s" /> </label> <input type="submit" class="search-submit" value="Search" /> </form></aside><aside id="categories-2" class="widget widget_categories"><h2 class="widget-title">Categories</h2> <ul> <li class="cat-item cat-item-768"><a href="https://www.markwilson.co.uk/blog/topic/business">Business</a> </li> <li class="cat-item cat-item-364"><a href="https://www.markwilson.co.uk/blog/topic/exercise">Exercise</a> </li> <li class="cat-item cat-item-697"><a href="https://www.markwilson.co.uk/blog/topic/lifestyle">Lifestyle</a> </li> <li class="cat-item cat-item-117"><a href="https://www.markwilson.co.uk/blog/topic/motoring">Motoring</a> </li> <li class="cat-item cat-item-764"><a href="https://www.markwilson.co.uk/blog/topic/music">Music</a> </li> <li class="cat-item cat-item-152"><a href="https://www.markwilson.co.uk/blog/topic/photography">Photography</a> </li> <li class="cat-item cat-item-838"><a href="https://www.markwilson.co.uk/blog/topic/published-elsewhere">Published elsewhere</a> </li> <li class="cat-item cat-item-811"><a href="https://www.markwilson.co.uk/blog/topic/retrospectives">Retrospectives</a> </li> <li class="cat-item cat-item-840"><a href="https://www.markwilson.co.uk/blog/topic/short-takes">Short takes</a> </li> <li class="cat-item cat-item-6"><a href="https://www.markwilson.co.uk/blog/topic/site-notices">Site notices</a> </li> <li class="cat-item cat-item-218"><a href="https://www.markwilson.co.uk/blog/topic/technology">Technology</a> </li> <li class="cat-item cat-item-758"><a href="https://www.markwilson.co.uk/blog/topic/travel">Travel</a> </li> <li class="cat-item cat-item-38"><a href="https://www.markwilson.co.uk/blog/topic/inane-waffle">Waffle and randomness</a> </li> <li class="cat-item cat-item-666"><a href="https://www.markwilson.co.uk/blog/topic/weeknotes">Weeknotes</a> </li> </ul> </aside><aside id="archives-2" class="widget widget_archive"><h2 class="widget-title">Archives</h2> <label class="screen-reader-text" for="archives-dropdown-2">Archives</label> <select id="archives-dropdown-2" name="archive-dropdown"> <option value="">Select Month</option> <option value='https://www.markwilson.co.uk/blog/2026/02'> February 2026  (1)</option> <option value='https://www.markwilson.co.uk/blog/2026/01'> January 2026  (2)</option> <option value='https://www.markwilson.co.uk/blog/2025/11'> November 2025  (3)</option> <option value='https://www.markwilson.co.uk/blog/2025/10'> October 2025  (6)</option> <option value='https://www.markwilson.co.uk/blog/2025/09'> September 2025  (1)</option> <option value='https://www.markwilson.co.uk/blog/2025/08'> August 2025  (3)</option> <option value='https://www.markwilson.co.uk/blog/2025/07'> July 2025  (4)</option> <option value='https://www.markwilson.co.uk/blog/2025/06'> June 2025  (4)</option> <option value='https://www.markwilson.co.uk/blog/2025/05'> May 2025  (9)</option> <option value='https://www.markwilson.co.uk/blog/2025/03'> March 2025  (1)</option> <option value='https://www.markwilson.co.uk/blog/2025/01'> January 2025  (3)</option> <option value='https://www.markwilson.co.uk/blog/2024/12'> December 2024  (1)</option> <option value='https://www.markwilson.co.uk/blog/2024/11'> November 2024  (5)</option> <option value='https://www.markwilson.co.uk/blog/2024/10'> October 2024  (1)</option> <option value='https://www.markwilson.co.uk/blog/2024/09'> September 2024  (3)</option> <option value='https://www.markwilson.co.uk/blog/2024/08'> August 2024  (4)</option> <option value='https://www.markwilson.co.uk/blog/2024/07'> July 2024  (1)</option> <option value='https://www.markwilson.co.uk/blog/2024/06'> June 2024  (2)</option> <option value='https://www.markwilson.co.uk/blog/2024/05'> May 2024  (2)</option> <option value='https://www.markwilson.co.uk/blog/2024/04'> April 2024  (2)</option> <option value='https://www.markwilson.co.uk/blog/2024/03'> March 2024  (1)</option> <option value='https://www.markwilson.co.uk/blog/2024/02'> February 2024  (6)</option> <option value='https://www.markwilson.co.uk/blog/2024/01'> January 2024  (7)</option> <option value='https://www.markwilson.co.uk/blog/2023/12'> December 2023  (2)</option> <option value='https://www.markwilson.co.uk/blog/2023/11'> November 2023  (2)</option> <option value='https://www.markwilson.co.uk/blog/2023/10'> October 2023  (2)</option> <option value='https://www.markwilson.co.uk/blog/2023/07'> July 2023  (2)</option> <option value='https://www.markwilson.co.uk/blog/2023/06'> June 2023  (1)</option> <option value='https://www.markwilson.co.uk/blog/2023/04'> April 2023  (1)</option> <option value='https://www.markwilson.co.uk/blog/2023/03'> March 2023  (1)</option> <option value='https://www.markwilson.co.uk/blog/2023/01'> January 2023  (1)</option> <option value='https://www.markwilson.co.uk/blog/2022/12'> December 2022  (1)</option> <option value='https://www.markwilson.co.uk/blog/2022/09'> September 2022  (2)</option> <option value='https://www.markwilson.co.uk/blog/2022/08'> August 2022  (1)</option> <option value='https://www.markwilson.co.uk/blog/2022/06'> June 2022  (2)</option> <option value='https://www.markwilson.co.uk/blog/2022/05'> May 2022  (1)</option> <option value='https://www.markwilson.co.uk/blog/2022/04'> April 2022  (1)</option> <option value='https://www.markwilson.co.uk/blog/2022/01'> January 2022  (1)</option> <option value='https://www.markwilson.co.uk/blog/2021/12'> December 2021  (1)</option> <option value='https://www.markwilson.co.uk/blog/2021/11'> November 2021  (1)</option> <option value='https://www.markwilson.co.uk/blog/2021/10'> October 2021  (1)</option> <option value='https://www.markwilson.co.uk/blog/2021/09'> September 2021  (7)</option> <option value='https://www.markwilson.co.uk/blog/2021/08'> August 2021  (1)</option> <option value='https://www.markwilson.co.uk/blog/2021/07'> July 2021  (2)</option> <option value='https://www.markwilson.co.uk/blog/2021/06'> June 2021  (2)</option> <option value='https://www.markwilson.co.uk/blog/2021/05'> May 2021  (2)</option> <option value='https://www.markwilson.co.uk/blog/2021/04'> April 2021  (5)</option> <option value='https://www.markwilson.co.uk/blog/2021/03'> March 2021  (6)</option> <option value='https://www.markwilson.co.uk/blog/2021/02'> February 2021  (2)</option> <option value='https://www.markwilson.co.uk/blog/2021/01'> January 2021  (1)</option> <option value='https://www.markwilson.co.uk/blog/2020/12'> December 2020  (4)</option> <option value='https://www.markwilson.co.uk/blog/2020/11'> November 2020  (1)</option> <option value='https://www.markwilson.co.uk/blog/2020/09'> September 2020  (1)</option> <option value='https://www.markwilson.co.uk/blog/2020/08'> August 2020  (2)</option> <option value='https://www.markwilson.co.uk/blog/2020/07'> July 2020  (1)</option> <option value='https://www.markwilson.co.uk/blog/2020/06'> June 2020  (2)</option> <option value='https://www.markwilson.co.uk/blog/2020/05'> May 2020  (6)</option> <option value='https://www.markwilson.co.uk/blog/2020/04'> April 2020  (7)</option> <option value='https://www.markwilson.co.uk/blog/2020/03'> March 2020  (2)</option> <option value='https://www.markwilson.co.uk/blog/2020/02'> February 2020  (1)</option> <option value='https://www.markwilson.co.uk/blog/2020/01'> January 2020  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/12'> December 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/11'> November 2019  (2)</option> <option value='https://www.markwilson.co.uk/blog/2019/10'> October 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/09'> September 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/08'> August 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/07'> July 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/06'> June 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/05'> May 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/04'> April 2019  (2)</option> <option value='https://www.markwilson.co.uk/blog/2019/03'> March 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/02'> February 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2019/01'> January 2019  (1)</option> <option value='https://www.markwilson.co.uk/blog/2018/12'> December 2018  (1)</option> <option value='https://www.markwilson.co.uk/blog/2018/11'> November 2018  (1)</option> <option value='https://www.markwilson.co.uk/blog/2018/10'> October 2018  (1)</option> <option value='https://www.markwilson.co.uk/blog/2018/09'> September 2018  (1)</option> <option value='https://www.markwilson.co.uk/blog/2018/08'> August 2018  (1)</option> <option value='https://www.markwilson.co.uk/blog/2018/07'> July 2018  (2)</option> <option value='https://www.markwilson.co.uk/blog/2018/06'> June 2018  (4)</option> <option value='https://www.markwilson.co.uk/blog/2018/05'> May 2018  (3)</option> <option value='https://www.markwilson.co.uk/blog/2018/04'> April 2018  (3)</option> <option value='https://www.markwilson.co.uk/blog/2018/03'> March 2018  (2)</option> <option value='https://www.markwilson.co.uk/blog/2018/02'> February 2018  (4)</option> <option value='https://www.markwilson.co.uk/blog/2018/01'> January 2018  (1)</option> <option value='https://www.markwilson.co.uk/blog/2017/12'> December 2017  (4)</option> <option value='https://www.markwilson.co.uk/blog/2017/11'> November 2017  (4)</option> <option value='https://www.markwilson.co.uk/blog/2017/10'> October 2017  (5)</option> <option value='https://www.markwilson.co.uk/blog/2017/09'> September 2017  (5)</option> <option value='https://www.markwilson.co.uk/blog/2017/08'> August 2017  (6)</option> <option value='https://www.markwilson.co.uk/blog/2017/07'> July 2017  (12)</option> <option value='https://www.markwilson.co.uk/blog/2017/06'> June 2017  (2)</option> <option value='https://www.markwilson.co.uk/blog/2017/05'> May 2017  (4)</option> <option value='https://www.markwilson.co.uk/blog/2017/04'> April 2017  (3)</option> <option value='https://www.markwilson.co.uk/blog/2017/03'> March 2017  (7)</option> <option value='https://www.markwilson.co.uk/blog/2017/02'> February 2017  (7)</option> <option value='https://www.markwilson.co.uk/blog/2017/01'> January 2017  (14)</option> <option value='https://www.markwilson.co.uk/blog/2016/12'> December 2016  (13)</option> <option value='https://www.markwilson.co.uk/blog/2016/11'> November 2016  (11)</option> <option value='https://www.markwilson.co.uk/blog/2016/10'> October 2016  (6)</option> <option value='https://www.markwilson.co.uk/blog/2016/09'> September 2016  (11)</option> <option value='https://www.markwilson.co.uk/blog/2016/08'> August 2016  (6)</option> <option value='https://www.markwilson.co.uk/blog/2016/07'> July 2016  (3)</option> <option value='https://www.markwilson.co.uk/blog/2016/06'> June 2016  (2)</option> <option value='https://www.markwilson.co.uk/blog/2016/05'> May 2016  (11)</option> <option value='https://www.markwilson.co.uk/blog/2016/04'> April 2016  (4)</option> <option value='https://www.markwilson.co.uk/blog/2016/03'> March 2016  (7)</option> <option value='https://www.markwilson.co.uk/blog/2016/02'> February 2016  (3)</option> <option value='https://www.markwilson.co.uk/blog/2016/01'> January 2016  (5)</option> <option value='https://www.markwilson.co.uk/blog/2015/12'> December 2015  (3)</option> <option value='https://www.markwilson.co.uk/blog/2015/11'> November 2015  (10)</option> <option value='https://www.markwilson.co.uk/blog/2015/10'> October 2015  (16)</option> <option value='https://www.markwilson.co.uk/blog/2015/09'> September 2015  (30)</option> <option value='https://www.markwilson.co.uk/blog/2015/08'> August 2015  (17)</option> <option value='https://www.markwilson.co.uk/blog/2015/07'> July 2015  (15)</option> <option value='https://www.markwilson.co.uk/blog/2015/06'> June 2015  (5)</option> <option value='https://www.markwilson.co.uk/blog/2015/05'> May 2015  (11)</option> <option value='https://www.markwilson.co.uk/blog/2015/04'> April 2015  (8)</option> <option value='https://www.markwilson.co.uk/blog/2015/03'> March 2015  (5)</option> <option value='https://www.markwilson.co.uk/blog/2015/02'> February 2015  (6)</option> <option value='https://www.markwilson.co.uk/blog/2015/01'> January 2015  (2)</option> <option value='https://www.markwilson.co.uk/blog/2014/12'> December 2014  (4)</option> <option value='https://www.markwilson.co.uk/blog/2014/11'> November 2014  (4)</option> <option value='https://www.markwilson.co.uk/blog/2014/10'> October 2014  (9)</option> <option value='https://www.markwilson.co.uk/blog/2014/09'> September 2014  (3)</option> <option value='https://www.markwilson.co.uk/blog/2014/08'> August 2014  (3)</option> <option value='https://www.markwilson.co.uk/blog/2014/07'> July 2014  (5)</option> <option value='https://www.markwilson.co.uk/blog/2014/06'> June 2014  (7)</option> <option value='https://www.markwilson.co.uk/blog/2014/05'> May 2014  (2)</option> <option value='https://www.markwilson.co.uk/blog/2014/04'> April 2014  (4)</option> <option value='https://www.markwilson.co.uk/blog/2014/03'> March 2014  (6)</option> <option value='https://www.markwilson.co.uk/blog/2014/02'> February 2014  (7)</option> <option value='https://www.markwilson.co.uk/blog/2014/01'> January 2014  (6)</option> <option value='https://www.markwilson.co.uk/blog/2013/12'> December 2013  (4)</option> <option value='https://www.markwilson.co.uk/blog/2013/11'> November 2013  (5)</option> <option value='https://www.markwilson.co.uk/blog/2013/10'> October 2013  (4)</option> <option value='https://www.markwilson.co.uk/blog/2013/09'> September 2013  (5)</option> <option value='https://www.markwilson.co.uk/blog/2013/08'> August 2013  (1)</option> <option value='https://www.markwilson.co.uk/blog/2013/07'> July 2013  (9)</option> <option value='https://www.markwilson.co.uk/blog/2013/06'> June 2013  (3)</option> <option value='https://www.markwilson.co.uk/blog/2013/05'> May 2013  (8)</option> <option value='https://www.markwilson.co.uk/blog/2013/04'> April 2013  (2)</option> <option value='https://www.markwilson.co.uk/blog/2013/03'> March 2013  (9)</option> <option value='https://www.markwilson.co.uk/blog/2013/02'> February 2013  (8)</option> <option value='https://www.markwilson.co.uk/blog/2013/01'> January 2013  (12)</option> <option value='https://www.markwilson.co.uk/blog/2012/12'> December 2012  (8)</option> <option value='https://www.markwilson.co.uk/blog/2012/11'> November 2012  (16)</option> <option value='https://www.markwilson.co.uk/blog/2012/10'> October 2012  (18)</option> <option value='https://www.markwilson.co.uk/blog/2012/09'> September 2012  (7)</option> <option value='https://www.markwilson.co.uk/blog/2012/08'> August 2012  (14)</option> <option value='https://www.markwilson.co.uk/blog/2012/07'> July 2012  (9)</option> <option value='https://www.markwilson.co.uk/blog/2012/06'> June 2012  (13)</option> <option value='https://www.markwilson.co.uk/blog/2012/05'> May 2012  (17)</option> <option value='https://www.markwilson.co.uk/blog/2012/04'> April 2012  (12)</option> <option value='https://www.markwilson.co.uk/blog/2012/03'> March 2012  (17)</option> <option value='https://www.markwilson.co.uk/blog/2012/02'> February 2012  (13)</option> <option value='https://www.markwilson.co.uk/blog/2012/01'> January 2012  (9)</option> <option value='https://www.markwilson.co.uk/blog/2011/12'> December 2011  (15)</option> <option value='https://www.markwilson.co.uk/blog/2011/11'> November 2011  (23)</option> <option value='https://www.markwilson.co.uk/blog/2011/10'> October 2011  (10)</option> <option value='https://www.markwilson.co.uk/blog/2011/09'> September 2011  (11)</option> <option value='https://www.markwilson.co.uk/blog/2011/08'> August 2011  (11)</option> <option value='https://www.markwilson.co.uk/blog/2011/07'> July 2011  (17)</option> <option value='https://www.markwilson.co.uk/blog/2011/06'> June 2011  (13)</option> <option value='https://www.markwilson.co.uk/blog/2011/05'> May 2011  (15)</option> <option value='https://www.markwilson.co.uk/blog/2011/04'> April 2011  (14)</option> <option value='https://www.markwilson.co.uk/blog/2011/03'> March 2011  (17)</option> <option value='https://www.markwilson.co.uk/blog/2011/02'> February 2011  (11)</option> <option value='https://www.markwilson.co.uk/blog/2011/01'> January 2011  (7)</option> <option value='https://www.markwilson.co.uk/blog/2010/12'> December 2010  (9)</option> <option value='https://www.markwilson.co.uk/blog/2010/11'> November 2010  (13)</option> <option value='https://www.markwilson.co.uk/blog/2010/10'> October 2010  (11)</option> <option value='https://www.markwilson.co.uk/blog/2010/09'> September 2010  (14)</option> <option value='https://www.markwilson.co.uk/blog/2010/08'> August 2010  (10)</option> <option value='https://www.markwilson.co.uk/blog/2010/07'> July 2010  (2)</option> <option value='https://www.markwilson.co.uk/blog/2010/06'> June 2010  (11)</option> <option value='https://www.markwilson.co.uk/blog/2010/05'> May 2010  (10)</option> <option value='https://www.markwilson.co.uk/blog/2010/04'> April 2010  (10)</option> <option value='https://www.markwilson.co.uk/blog/2010/03'> March 2010  (14)</option> <option value='https://www.markwilson.co.uk/blog/2010/02'> February 2010  (13)</option> <option value='https://www.markwilson.co.uk/blog/2010/01'> January 2010  (8)</option> <option value='https://www.markwilson.co.uk/blog/2009/12'> December 2009  (7)</option> <option value='https://www.markwilson.co.uk/blog/2009/11'> November 2009  (10)</option> <option value='https://www.markwilson.co.uk/blog/2009/10'> October 2009  (19)</option> <option value='https://www.markwilson.co.uk/blog/2009/09'> September 2009  (19)</option> <option value='https://www.markwilson.co.uk/blog/2009/08'> August 2009  (21)</option> <option value='https://www.markwilson.co.uk/blog/2009/07'> July 2009  (25)</option> <option value='https://www.markwilson.co.uk/blog/2009/06'> June 2009  (19)</option> <option value='https://www.markwilson.co.uk/blog/2009/05'> May 2009  (19)</option> <option value='https://www.markwilson.co.uk/blog/2009/04'> April 2009  (26)</option> <option value='https://www.markwilson.co.uk/blog/2009/03'> March 2009  (24)</option> <option value='https://www.markwilson.co.uk/blog/2009/02'> February 2009  (24)</option> <option value='https://www.markwilson.co.uk/blog/2009/01'> January 2009  (26)</option> <option value='https://www.markwilson.co.uk/blog/2008/12'> December 2008  (25)</option> <option value='https://www.markwilson.co.uk/blog/2008/11'> November 2008  (34)</option> <option value='https://www.markwilson.co.uk/blog/2008/10'> October 2008  (36)</option> <option value='https://www.markwilson.co.uk/blog/2008/09'> September 2008  (50)</option> <option value='https://www.markwilson.co.uk/blog/2008/08'> August 2008  (36)</option> <option value='https://www.markwilson.co.uk/blog/2008/07'> July 2008  (38)</option> <option value='https://www.markwilson.co.uk/blog/2008/06'> June 2008  (17)</option> <option value='https://www.markwilson.co.uk/blog/2008/05'> May 2008  (25)</option> <option value='https://www.markwilson.co.uk/blog/2008/04'> April 2008  (22)</option> <option value='https://www.markwilson.co.uk/blog/2008/03'> March 2008  (25)</option> <option value='https://www.markwilson.co.uk/blog/2008/02'> February 2008  (24)</option> <option value='https://www.markwilson.co.uk/blog/2008/01'> January 2008  (14)</option> <option value='https://www.markwilson.co.uk/blog/2007/12'> December 2007  (16)</option> <option value='https://www.markwilson.co.uk/blog/2007/11'> November 2007  (23)</option> <option value='https://www.markwilson.co.uk/blog/2007/10'> October 2007  (22)</option> <option value='https://www.markwilson.co.uk/blog/2007/09'> September 2007  (14)</option> <option value='https://www.markwilson.co.uk/blog/2007/08'> August 2007  (27)</option> <option value='https://www.markwilson.co.uk/blog/2007/07'> July 2007  (44)</option> <option value='https://www.markwilson.co.uk/blog/2007/06'> June 2007  (16)</option> <option value='https://www.markwilson.co.uk/blog/2007/05'> May 2007  (23)</option> <option value='https://www.markwilson.co.uk/blog/2007/04'> April 2007  (17)</option> <option value='https://www.markwilson.co.uk/blog/2007/03'> March 2007  (26)</option> <option value='https://www.markwilson.co.uk/blog/2007/02'> February 2007  (26)</option> <option value='https://www.markwilson.co.uk/blog/2007/01'> January 2007  (11)</option> <option value='https://www.markwilson.co.uk/blog/2006/12'> December 2006  (16)</option> <option value='https://www.markwilson.co.uk/blog/2006/11'> November 2006  (26)</option> <option value='https://www.markwilson.co.uk/blog/2006/10'> October 2006  (12)</option> <option value='https://www.markwilson.co.uk/blog/2006/09'> September 2006  (22)</option> <option value='https://www.markwilson.co.uk/blog/2006/08'> August 2006  (17)</option> <option value='https://www.markwilson.co.uk/blog/2006/07'> July 2006  (26)</option> <option value='https://www.markwilson.co.uk/blog/2006/06'> June 2006  (15)</option> <option value='https://www.markwilson.co.uk/blog/2006/05'> May 2006  (39)</option> <option value='https://www.markwilson.co.uk/blog/2006/04'> April 2006  (13)</option> <option value='https://www.markwilson.co.uk/blog/2006/03'> March 2006  (8)</option> <option value='https://www.markwilson.co.uk/blog/2006/02'> February 2006  (33)</option> <option value='https://www.markwilson.co.uk/blog/2006/01'> January 2006  (42)</option> <option value='https://www.markwilson.co.uk/blog/2005/12'> December 2005  (19)</option> <option value='https://www.markwilson.co.uk/blog/2005/11'> November 2005  (21)</option> <option value='https://www.markwilson.co.uk/blog/2005/10'> October 2005  (38)</option> <option value='https://www.markwilson.co.uk/blog/2005/09'> September 2005  (15)</option> <option value='https://www.markwilson.co.uk/blog/2005/08'> August 2005  (32)</option> <option value='https://www.markwilson.co.uk/blog/2005/07'> July 2005  (31)</option> <option value='https://www.markwilson.co.uk/blog/2005/06'> June 2005  (17)</option> <option value='https://www.markwilson.co.uk/blog/2005/05'> May 2005  (28)</option> <option value='https://www.markwilson.co.uk/blog/2005/04'> April 2005  (8)</option> <option value='https://www.markwilson.co.uk/blog/2005/03'> March 2005  (22)</option> <option value='https://www.markwilson.co.uk/blog/2005/02'> February 2005  (29)</option> <option value='https://www.markwilson.co.uk/blog/2005/01'> January 2005  (8)</option> <option value='https://www.markwilson.co.uk/blog/2004/12'> December 2004  (17)</option> <option value='https://www.markwilson.co.uk/blog/2004/11'> November 2004  (8)</option> <option value='https://www.markwilson.co.uk/blog/2004/10'> October 2004  (25)</option> <option value='https://www.markwilson.co.uk/blog/2004/09'> September 2004  (36)</option> <option value='https://www.markwilson.co.uk/blog/2004/08'> August 2004  (22)</option> <option value='https://www.markwilson.co.uk/blog/2004/07'> July 2004  (8)</option> <option value='https://www.markwilson.co.uk/blog/2004/06'> June 2004  (8)</option> <option value='https://www.markwilson.co.uk/blog/2004/05'> May 2004  (6)</option> <option value='https://www.markwilson.co.uk/blog/2004/04'> April 2004  (3)</option> <option value='https://www.markwilson.co.uk/blog/2004/03'> March 2004  (2)</option> <option value='https://www.markwilson.co.uk/blog/2004/02'> February 2004  (6)</option> <option value='https://www.markwilson.co.uk/blog/2004/01'> January 2004  (2)</option> </select> <script> ( ( dropdownId ) => { const dropdown = document.getElementById( dropdownId ); function onSelectChange() { setTimeout( () => { if ( 'escape' === dropdown.dataset.lastkey ) { return; } if ( dropdown.value ) { document.location.href = dropdown.value; } }, 250 ); } function onKeyUp( event ) { if ( 'Escape' === event.key ) { dropdown.dataset.lastkey = 'escape'; } else { delete dropdown.dataset.lastkey; } } function onClick() { delete dropdown.dataset.lastkey; } dropdown.addEventListener( 'keyup', onKeyUp ); dropdown.addEventListener( 'click', onClick ); dropdown.addEventListener( 'change', onSelectChange ); })( "archives-dropdown-2" ); //# sourceURL=WP_Widget_Archives%3A%3Awidget </script> </aside><aside id="text-12" class="widget widget_text"><h2 class="widget-title">Awards</h2> <div class="textwidget"><ul> <li><img data-recalc-dims="1" class="alignright" src="https://i0.wp.com/www.markwilson.co.uk/blog/images/mvp-horizontal-small.png?w=125&ssl=1" alt="Microsoft MVP 2008-2010" />Microsoft Most Valuable Professional (2008-2010, Virtual Machine)</li> <li>Computer Weekly Blog Awards Winner (2010, Individual IT Professional (Male))</li> <li><img data-recalc-dims="1" class="alignright" src="https://i0.wp.com/www.markwilson.co.uk/blog/images/mvp-reconnect.png?resize=117%2C38&ssl=1" alt="Microsoft MVP Reconnect" width="117" height="38"/>Microsoft MVP Reconnect (2016)</li> <li><img data-recalc-dims="1" class="alignright" src="https://i0.wp.com/www.markwilson.co.uk/blog/images/ukba-finalist-logo.png?resize=125%2C125&ssl=1" alt="UK Blog Awards 2017 Finalist" width="125" height="125" />UK Blog Awards Finalist (2017, Digital and Technology (Individual))</li> </ul> </div> </aside> </div><!-- #secondary --> </div><!-- .content-wrapper --> </div><!-- #content --> <div id="tertiary" class="footer-widget-area" role="complementary"> <div class="footer-widget-wrapper clear"> <div class="footer-widget"> <aside id="nav_menu-4" class="widget widget_nav_menu"><div class="menu-essentials-container"><ul id="menu-essentials" class="menu"><li id="menu-item-5873" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-5873"><a href="https://www.markwilson.co.uk/blog/about-mark-wilson">About Mark Wilson</a> <ul class="sub-menu"> <li id="menu-item-5874" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5874"><a href="https://www.markwilson.co.uk/blog/about-mark-wilson/press">Press and other commissioned work</a></li> </ul> </li> <li id="menu-item-5875" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5875"><a href="https://www.markwilson.co.uk/blog/about">About this site</a></li> <li id="menu-item-5876" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5876"><a href="https://www.markwilson.co.uk/blog/about/legal">Legal notice</a></li> <li id="menu-item-5877" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5877"><a href="https://www.markwilson.co.uk/blog/about/linking">Linking to this site</a></li> <li id="menu-item-5878" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-5878"><a rel="privacy-policy" href="https://www.markwilson.co.uk/blog/about/privacy">Privacy policy and data protection notice</a></li> <li id="menu-item-5879" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5879"><a href="https://www.markwilson.co.uk/blog/about/rules">Rules for comments</a></li> <li id="menu-item-5880" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5880"><a href="https://www.markwilson.co.uk/blog/about/disclosure">Disclosure Policy</a></li> <li id="menu-item-5881" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5881"><a href="https://www.markwilson.co.uk/blog/contact">Contact</a></li> <li id="menu-item-5882" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5882"><a href="https://www.markwilson.co.uk/blog/contact/guest-contributors">Guest contributors</a></li> </ul></div></aside> </div><!-- .footer-widget --> <div class="footer-widget"> <aside id="recent-posts-4" class="widget widget_recent_entries"> <h2 class="widget-title">Recent Posts</h2> <ul> <li> <a href="https://www.markwilson.co.uk/blog/2026/02/this-blog-has-moved-to-a-new-location.htm">This blog has moved to a new location</a> </li> <li> <a href="https://www.markwilson.co.uk/blog/2026/01/excuse-the-basic-appearance-whilst-i-try-to-improve-site-reliability.htm">Excuse the basic appearance whilst I try to improve site reliability</a> </li> <li> <a href="https://www.markwilson.co.uk/blog/2026/01/2026-anti-prediction-generative-ai.htm">My 2026 anti-prediction: we won’t see an endless rise in generative AI</a> </li> <li> <a href="https://www.markwilson.co.uk/blog/2025/11/rethinking-thought-leadership.htm">Rethinking thought leadership</a> </li> <li> <a href="https://www.markwilson.co.uk/blog/2025/11/a-sense-of-community-on-remembrance-sunday.htm">A sense of community, on Remembrance Sunday</a> </li> </ul> </aside> </div><!-- .footer-widget --> <div class="footer-widget"> <aside id="recent-comments-5" class="widget widget_recent_comments"><h2 class="widget-title">Recent Comments</h2><ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link">Anonymous</span> on <a href="https://www.markwilson.co.uk/blog/2025/05/building-my-own-train-departure-board-because-why-not.htm#comment-476899">Building my own train departure board (because why not?)</a></li><li class="recentcomments"><span class="comment-author-link"><a href="http://www.markwilson.co.uk/" class="url" rel="ugc">Mark Wilson</a></span> on <a href="https://www.markwilson.co.uk/blog/2016/11/somfy-roller-shutter-garage-door-stopping-part-way-down.htm#comment-476873">Somfy roller-shutter garage door stopping part way down</a></li><li class="recentcomments"><span class="comment-author-link">Claire Cox</span> on <a href="https://www.markwilson.co.uk/blog/2016/11/somfy-roller-shutter-garage-door-stopping-part-way-down.htm#comment-476872">Somfy roller-shutter garage door stopping part way down</a></li><li class="recentcomments"><span class="comment-author-link">Abbid majid</span> on <a href="https://www.markwilson.co.uk/blog/2016/11/somfy-roller-shutter-garage-door-stopping-part-way-down.htm#comment-476764">Somfy roller-shutter garage door stopping part way down</a></li><li class="recentcomments"><span class="comment-author-link">Anonymous</span> on <a href="https://www.markwilson.co.uk/blog/2016/11/somfy-roller-shutter-garage-door-stopping-part-way-down.htm#comment-476751">Somfy roller-shutter garage door stopping part way down</a></li></ul></aside> </div><!-- .footer-widget --> </div><!-- .footer-widget-wrapper --> </div><!-- #tertiary --> <footer id="colophon" class="site-footer" role="contentinfo"> <nav class="footer-navigation" role="navigation"> <div class="menu-social-networks-container"><ul id="menu-social-networks" class="clear"><li id="menu-item-5590" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5590"><a href="https://uk.linkedin.com/in/markawilson">LinkedIn</a></li> <li id="menu-item-9050" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9050"><a href="https://instagram.com/markwilsonuk">Instagram</a></li> <li id="menu-item-5593" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5593"><a href="https://www.flickr.com/photos/mark-wilson">Flickr</a></li> </ul></div> </nav><!-- .footer-navigation --> <div class="site-info"> <a href="http://wordpress.org/">Proudly powered by WordPress</a> <span class="sep"> | </span> Theme: Goran by <a href="http://wordpress.com/themes/goran/" rel="designer">WordPress.com</a>. </div><!-- .site-info --> </footer><!-- #colophon --> </div><!-- #page --> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/blog/*"},{"not":{"href_matches":["/blog/wp-*.php","/blog/wp-admin/*","/blog/uploads/*","/blog/wp-content/*","/blog/wp-content/plugins/*","/blog/wp-content/themes/goran/*","/blog/wp-content/themes/edin/*","/blog/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="jetpack-testimonial-theme-supports-js-after"> const jetpack_testimonial_theme_supports = false //# sourceURL=jetpack-testimonial-theme-supports-js-after </script> <script id="edin-skip-link-focus-fix-js" src="https://www.markwilson.co.uk/blog/wp-content/themes/edin/js/skip-link-focus-fix.js?ver=20130115"></script> <script id="jetpack_likes_queuehandler-js" src="https://c0.wp.com/p/jetpack/15.8/modules/likes/queuehandler.js"></script> <script id="goran-navigation-js" src="https://www.markwilson.co.uk/blog/wp-content/themes/goran/js/navigation.js?ver=20140807"></script> <script id="goran-script-js" src="https://www.markwilson.co.uk/blog/wp-content/themes/goran/js/goran.js?ver=20140808"></script> <script id="jetpack-stats-js-before"> _stq = window._stq || []; _stq.push([ "view", {"v":"ext","blog":"29247765","post":"0","tz":"1","srv":"www.markwilson.co.uk","arch_tag":"wordpress","arch_results":"10","j":"1:15.8"} ]); _stq.push([ "clickTrackerInit", "29247765", "0" ]); //# sourceURL=jetpack-stats-js-before </script> <script data-wp-strategy="defer" defer id="jetpack-stats-js" src="https://stats.wp.com/e-202623.js"></script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://www.markwilson.co.uk/blog/wp-includes/js/wp-emoji-release.min.js?ver=7.0"}} </script> <script type="module"> /*! This file is auto-generated */ const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))}); //# sourceURL=https://www.markwilson.co.uk/blog/wp-includes/js/wp-emoji-loader.min.js </script> </body> </html>