Disabling comments for all posts on a WordPress blog

This content is 12 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.

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

This content is 13 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.

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)

This content is 13 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.

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

This content is 13 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.

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

This content is 13 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.

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

This content is 14 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.

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 content is 14 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.

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

This content is 14 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.

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"> <div class="juiz-outdated-message jodpm-top">This content is 14 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.</div><p>A week or so back, I wrote about <a href="http://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-## --> <article id="post-1972" class="post-1972 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/adding-a-tweet-button-to-a-self-hosted-wordpress-blog.htm" rel="bookmark">Adding a Tweet button to a self-hosted WordPress blog</a></h2> <div class="entry-meta"> <span class="posted-on">Posted on <a href="https://www.markwilson.co.uk/blog/2010/08/adding-a-tweet-button-to-a-self-hosted-wordpress-blog.htm" rel="bookmark"><time class="entry-date published" datetime="2010-08-13T11:59:34+01:00">Friday 13 August 2010</time><time class="updated" datetime="2010-08-14T15:06:47+01:00">Saturday 14 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/adding-a-tweet-button-to-a-self-hosted-wordpress-blog.htm"> </a> <div class="entry-content"> <div class="juiz-outdated-message jodpm-top">This content is 14 years old. I don't routinely update old blog posts as they are only intended to represent a view at a particular point in time. Please be warned that the information here may be out of date.</div><p>Yesterday, Twitter launched their official button for websites and keen-eyed observers will have noticed that markwilson.it now sports a shiny new “tweet” icon at the head of each post.  It’s pretty easy to do (<a href="http://twitter.com/goodies/tweetbutton">Twitter generates the code for you</a> – and has an <a href="http://dev.twitter.com/pages/tweet_button_faq">FAQ for developers</a>) but there may be a couple of things to watch out for, <a href="http://mashable.com/2010/08/13/tweet-button-bloggers/">depending on your blog’s content management system</a>.</p> <p>I use self-hosted WordPress, and these were the changes I made to the site:</p> <ul> <li>For my single posts, I just added the Twitter-generated code to an appropriate position in the single.php file.</li> <li>For my main index page, I edited index.php, but didn’t want the generated link to be to the current page (my home page with several recent posts) – I wanted it to relate to the particular post that the viewer is tweeting from.  Adapting a tip from <a href="http://www.davidteng.com/">David Teng</a>, I added two parameters to the link code (<code>data-url="<?php the_permalink(); ?>"</code> and <code>data-text="<?php the_title(); ?>"</code>).</li> </ul> <p>Now, by clicking the Tweet button on this post, the link generated relates to the post – and not the home page for the blog.</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/adding-a-tweet-button-to-a-self-hosted-wordpress-blog.htm#comments">2 Comments</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/2024/11'> November 2024  (4)</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 type="text/javascript"> /* <![CDATA[ */ (function() { var dropdown = document.getElementById( "archives-dropdown-2" ); function onSelectChange() { if ( dropdown.options[ dropdown.selectedIndex ].value !== '' ) { document.location.href = this.options[ this.selectedIndex ].value; } } dropdown.onchange = onSelectChange; })(); /* ]]> */ </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" 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" 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" 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="custom_html-2" class="widget_text widget widget_custom_html"><h2 class="widget-title">Referrals</h2><div class="textwidget custom-html-widget"><p>I've removed the ads from the site but I do use these services and recommend them to others:</p> <!--<p><a href="https://www.giffgaff.com/orders/affiliate/markawilson" target="_blank"><img src="https://www.giffgaff.com/styleguide/images/banner/07_468x60.png" width="468" height="60" alt="Get a free giffgaff Sim" /></a></p>--> <!--<p><a href='http://www.plus.net/myreferrals/new.html?intReferrerID=00479014'><img src='http://www.plus.net/images/referrals/ref-biz-banner.gif' alt='Unlimited business broadband from £15.99 a month' border='0' rel='nofollow'></a></p>--> <p>I use Hover for domain name registration. <a href="https://hover.com/MRGm6RPW">Get $2 off your next purchase</a>.</p> <!--<p><p><a href="https://bulb.co.uk/refer/mark3758">Switch to Bulb Energy</a> and we both get some credit!</p>--> <!--<p><a href="http://rewards.first-utility.com/go.axd?ref=UJ47U7">Switch your gas and electricity supply to First Utility and get a £30 reward</a> (for each of us!)</p> --></div></aside><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><aside id="execphp-4" class="widget widget_execphp"><h2 class="widget-title">Copyright Notice</h2> <div class="execphpwidget">The content at this website is © Mark Wilson 2004-2024, All Rights Reserved.</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/2024/11/putting-ai-to-work-making-content-more-accessible.htm">Putting AI to work: making content more accessible</a> </li> <li> <a href="https://www.markwilson.co.uk/blog/2024/11/put-the-big-rocks-in-first.htm">Put the big rocks in first</a> </li> <li> <a href="https://www.markwilson.co.uk/blog/2024/11/generative-ai-is-just-a-small-part-of-the-picture.htm">Generative AI is just a small part of the picture</a> </li> <li> <a href="https://www.markwilson.co.uk/blog/2024/11/the-enshittification-of-technical-support-information.htm">The enshittification of technical support information</a> </li> <li> <a href="https://www.markwilson.co.uk/blog/2024/10/think-about-the-end-user-experience.htm">Think about the end-user experience</a> </li> </ul> </aside><aside id="buymeacoffee_widget-2" class="widget buymeacoffee_widget"> <div> <style> .bmc-btn { min-width: 210px; color: #ffffff !important; background-color: #ff813f !important; height: 60px; border-radius: 12px; font-size: 28px !important; font-weight: Normal; border: none; padding: 0px 24px; line-height: 27px; text-decoration: none !important; display: inline-flex !important; align-items: center; font-family: Cookie !important; -webkit-box-sizing: border-box !important; box-sizing: border-box !important; text-align: left !important; } .bmc-btn-text { margin-left: 8px; display: inline; line-height: 0; } .bmc-btn svg { height: 32px !important; margin-bottom: 0px !important; box-shadow: none !important; border: none !important; vertical-align: middle !important; transform: scale(0.9); } @media (max-width: 1200px) { .bmc-btn { font-size: 24px !important; } .bmc-btn svg { height: 28px !important; } } .bmc-button img { box-shadow: none !important; vertical-align: middle !important; } .bmc-button { display: inline-block !important; padding:0px 10px !important; color: #ffffff !important; background-color: #ff813f !important; border-radius: 3px !important; border: 1px solid transparent !important; font-size: 28px !important; box-shadow: 0px 1px 2px rgba(190, 190, 190, 0.5) !important; -webkit-box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important; -webkit-transition: 0.3s all linear !important; transition: 0.3s all linear !important; margin: 0 auto !important; font-family: "Cookie" !important; } .bmc-button: hover, .bmc-button: active, .bmc-button: focus { -webkit-box-shadow: 0 4px 16px 0 rgba(190, 190, 190, .45) !important; box-shadow: 0 4px 16px 0 rgba(190, 190, 190, .45) !important; opacity: 0.85 !important; color: #ffffff !important; } </style> <link href="https://fonts.googleapis.com/css?family=Cookie" rel="stylesheet"> <p style="text-align:left !important; padding-bottom: 10px;"> <a class="bmc-btn" target="_blank" href="https://www.buymeacoffee.com/markwilson"><svg id="coffee-logo-border" viewBox="0 0 884 1279" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M791.109 297.518L790.231 297.002L788.201 296.383C789.018 297.072 790.04 297.472 791.109 297.518Z" fill="#0D0C22"></path> <path d="M803.896 388.891L802.916 389.166L803.896 388.891Z" fill="#0D0C22"></path> <path d="M791.484 297.377C791.359 297.361 791.237 297.332 791.118 297.29C791.111 297.371 791.111 297.453 791.118 297.534C791.252 297.516 791.379 297.462 791.484 297.377Z" fill="#0D0C22"></path> <path d="M791.113 297.529H791.244V297.447L791.113 297.529Z" fill="#0D0C22"></path> <path d="M803.111 388.726L804.591 387.883L805.142 387.573L805.641 387.04C804.702 387.444 803.846 388.016 803.111 388.726Z" fill="#0D0C22"></path> <path d="M793.669 299.515L792.223 298.138L791.243 297.605C791.77 298.535 792.641 299.221 793.669 299.515Z" fill="#0D0C22"></path> <path d="M430.019 1186.18C428.864 1186.68 427.852 1187.46 427.076 1188.45L427.988 1187.87C428.608 1187.3 429.485 1186.63 430.019 1186.18Z" fill="#0D0C22"></path> <path d="M641.187 1144.63C641.187 1143.33 640.551 1143.57 640.705 1148.21C640.705 1147.84 640.86 1147.46 640.929 1147.1C641.015 1146.27 641.084 1145.46 641.187 1144.63Z" fill="#0D0C22"></path> <path d="M619.284 1186.18C618.129 1186.68 617.118 1187.46 616.342 1188.45L617.254 1187.87C617.873 1187.3 618.751 1186.63 619.284 1186.18Z" fill="#0D0C22"></path> <path d="M281.304 1196.06C280.427 1195.3 279.354 1194.8 278.207 1194.61C279.136 1195.06 280.065 1195.51 280.684 1195.85L281.304 1196.06Z" fill="#0D0C22"></path> <path d="M247.841 1164.01C247.704 1162.66 247.288 1161.35 246.619 1160.16C247.093 1161.39 247.489 1162.66 247.806 1163.94L247.841 1164.01Z" fill="#0D0C22"></path> <path class="logo-coffee" d="M472.623 590.836C426.682 610.503 374.546 632.802 306.976 632.802C278.71 632.746 250.58 628.868 223.353 621.274L270.086 1101.08C271.74 1121.13 280.876 1139.83 295.679 1153.46C310.482 1167.09 329.87 1174.65 349.992 1174.65C349.992 1174.65 416.254 1178.09 438.365 1178.09C462.161 1178.09 533.516 1174.65 533.516 1174.65C553.636 1174.65 573.019 1167.08 587.819 1153.45C602.619 1139.82 611.752 1121.13 613.406 1101.08L663.459 570.876C641.091 563.237 618.516 558.161 593.068 558.161C549.054 558.144 513.591 573.303 472.623 590.836Z" fill="#FFDD00"></path> <path d="M78.6885 386.132L79.4799 386.872L79.9962 387.182C79.5987 386.787 79.1603 386.435 78.6885 386.132Z" fill="#0D0C22"></path> <path class="logo-outline" d="M879.567 341.849L872.53 306.352C866.215 274.503 851.882 244.409 819.19 232.898C808.711 229.215 796.821 227.633 788.786 220.01C780.751 212.388 778.376 200.55 776.518 189.572C773.076 169.423 769.842 149.257 766.314 129.143C763.269 111.85 760.86 92.4243 752.928 76.56C742.604 55.2584 721.182 42.8009 699.88 34.559C688.965 30.4844 677.826 27.0375 666.517 24.2352C613.297 10.1947 557.342 5.03277 502.591 2.09047C436.875 -1.53577 370.983 -0.443234 305.422 5.35968C256.625 9.79894 205.229 15.1674 158.858 32.0469C141.91 38.224 124.445 45.6399 111.558 58.7341C95.7448 74.8221 90.5829 99.7026 102.128 119.765C110.336 134.012 124.239 144.078 138.985 150.737C158.192 159.317 178.251 165.846 198.829 170.215C256.126 182.879 315.471 187.851 374.007 189.968C438.887 192.586 503.87 190.464 568.44 183.618C584.408 181.863 600.347 179.758 616.257 177.304C634.995 174.43 647.022 149.928 641.499 132.859C634.891 112.453 617.134 104.538 597.055 107.618C594.095 108.082 591.153 108.512 588.193 108.942L586.06 109.252C579.257 110.113 572.455 110.915 565.653 111.661C551.601 113.175 537.515 114.414 523.394 115.378C491.768 117.58 460.057 118.595 428.363 118.647C397.219 118.647 366.058 117.769 334.983 115.722C320.805 114.793 306.661 113.611 292.552 112.177C286.134 111.506 279.733 110.801 273.333 110.009L267.241 109.235L265.917 109.046L259.602 108.134C246.697 106.189 233.792 103.953 221.025 101.251C219.737 100.965 218.584 100.249 217.758 99.2193C216.932 98.1901 216.482 96.9099 216.482 95.5903C216.482 94.2706 216.932 92.9904 217.758 91.9612C218.584 90.9319 219.737 90.2152 221.025 89.9293H221.266C232.33 87.5721 243.479 85.5589 254.663 83.8038C258.392 83.2188 262.131 82.6453 265.882 82.0832H265.985C272.988 81.6186 280.026 80.3625 286.994 79.5366C347.624 73.2301 408.614 71.0801 469.538 73.1014C499.115 73.9618 528.676 75.6996 558.116 78.6935C564.448 79.3474 570.746 80.0357 577.043 80.8099C579.452 81.1025 581.878 81.4465 584.305 81.7391L589.191 82.4445C603.438 84.5667 617.61 87.1419 631.708 90.1703C652.597 94.7128 679.422 96.1925 688.713 119.077C691.673 126.338 693.015 134.408 694.649 142.03L696.732 151.752C696.786 151.926 696.826 152.105 696.852 152.285C701.773 175.227 706.7 198.169 711.632 221.111C711.994 222.806 712.002 224.557 711.657 226.255C711.312 227.954 710.621 229.562 709.626 230.982C708.632 232.401 707.355 233.6 705.877 234.504C704.398 235.408 702.75 235.997 701.033 236.236H700.895L697.884 236.649L694.908 237.044C685.478 238.272 676.038 239.419 666.586 240.486C647.968 242.608 629.322 244.443 610.648 245.992C573.539 249.077 536.356 251.102 499.098 252.066C480.114 252.57 461.135 252.806 442.162 252.771C366.643 252.712 291.189 248.322 216.173 239.625C208.051 238.662 199.93 237.629 191.808 236.58C198.106 237.389 187.231 235.96 185.029 235.651C179.867 234.928 174.705 234.177 169.543 233.397C152.216 230.798 134.993 227.598 117.7 224.793C96.7944 221.352 76.8005 223.073 57.8906 233.397C42.3685 241.891 29.8055 254.916 21.8776 270.735C13.7217 287.597 11.2956 305.956 7.64786 324.075C4.00009 342.193 -1.67805 361.688 0.472751 380.288C5.10128 420.431 33.165 453.054 73.5313 460.35C111.506 467.232 149.687 472.807 187.971 477.556C338.361 495.975 490.294 498.178 641.155 484.129C653.44 482.982 665.708 481.732 677.959 480.378C681.786 479.958 685.658 480.398 689.292 481.668C692.926 482.938 696.23 485.005 698.962 487.717C701.694 490.429 703.784 493.718 705.08 497.342C706.377 500.967 706.846 504.836 706.453 508.665L702.633 545.797C694.936 620.828 687.239 695.854 679.542 770.874C671.513 849.657 663.431 928.434 655.298 1007.2C653.004 1029.39 650.71 1051.57 648.416 1073.74C646.213 1095.58 645.904 1118.1 641.757 1139.68C635.218 1173.61 612.248 1194.45 578.73 1202.07C548.022 1209.06 516.652 1212.73 485.161 1213.01C450.249 1213.2 415.355 1211.65 380.443 1211.84C343.173 1212.05 297.525 1208.61 268.756 1180.87C243.479 1156.51 239.986 1118.36 236.545 1085.37C231.957 1041.7 227.409 998.039 222.9 954.381L197.607 711.615L181.244 554.538C180.968 551.94 180.693 549.376 180.435 546.76C178.473 528.023 165.207 509.681 144.301 510.627C126.407 511.418 106.069 526.629 108.168 546.76L120.298 663.214L145.385 904.104C152.532 972.528 159.661 1040.96 166.773 1109.41C168.15 1122.52 169.44 1135.67 170.885 1148.78C178.749 1220.43 233.465 1259.04 301.224 1269.91C340.799 1276.28 381.337 1277.59 421.497 1278.24C472.979 1279.07 524.977 1281.05 575.615 1271.72C650.653 1257.95 706.952 1207.85 714.987 1130.13C717.282 1107.69 719.576 1085.25 721.87 1062.8C729.498 988.559 737.115 914.313 744.72 840.061L769.601 597.451L781.009 486.263C781.577 480.749 783.905 475.565 787.649 471.478C791.392 467.391 796.352 464.617 801.794 463.567C823.25 459.386 843.761 452.245 859.023 435.916C883.318 409.918 888.153 376.021 879.567 341.849ZM72.4301 365.835C72.757 365.68 72.1548 368.484 71.8967 369.792C71.8451 367.813 71.9483 366.058 72.4301 365.835ZM74.5121 381.94C74.6842 381.819 75.2003 382.508 75.7337 383.334C74.925 382.576 74.4089 382.009 74.4949 381.94H74.5121ZM76.5597 384.641C77.2996 385.897 77.6953 386.689 76.5597 384.641V384.641ZM80.672 387.979H80.7752C80.7752 388.1 80.9645 388.22 81.0333 388.341C80.9192 388.208 80.7925 388.087 80.6548 387.979H80.672ZM800.796 382.989C793.088 390.319 781.473 393.726 769.996 395.43C641.292 414.529 510.713 424.199 380.597 419.932C287.476 416.749 195.336 406.407 103.144 393.382C94.1102 392.109 84.3197 390.457 78.1082 383.798C66.4078 371.237 72.1548 345.944 75.2003 330.768C77.9878 316.865 83.3218 298.334 99.8572 296.355C125.667 293.327 155.64 304.218 181.175 308.09C211.917 312.781 242.774 316.538 273.745 319.36C405.925 331.405 540.325 329.529 671.92 311.91C695.906 308.686 719.805 304.941 743.619 300.674C764.835 296.871 788.356 289.731 801.175 311.703C809.967 326.673 811.137 346.701 809.778 363.615C809.359 370.984 806.139 377.915 800.779 382.989H800.796Z" fill="#FFFFFF"></path> </svg><span class="bmc-btn-text">Buy me a coffee</span></a> </p> </div> </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"><a href="http://www.markwilson.co.uk/" class="url" rel="ugc">Mark Wilson</a></span> on <a href="https://www.markwilson.co.uk/blog/2015/09/using-the-lenovo-b50-all-in-one-pc-as-an-external-monitor.htm#comment-475943">Using the Lenovo B50 all-in-one PC as an external monitor</a></li><li class="recentcomments"><span class="comment-author-link">Anonymous</span> on <a href="https://www.markwilson.co.uk/blog/2015/09/using-the-lenovo-b50-all-in-one-pc-as-an-external-monitor.htm#comment-475942">Using the Lenovo B50 all-in-one PC as an external monitor</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/2024/09/monthly-retrospective-august-2024.htm#comment-475919">Monthly retrospective: August 2024</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-475915">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/2024/09/self-scan-stress-in-sainsburys-and-why-dont-uk-supermarkets-use-electronic-shelf-edge-tickets.htm#comment-475914">Self-scan stress in Sainsbury’s. And why don’t UK supermarkets use electronic shelf labels?</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-5589" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5589"><a href="https://twitter.com/markwilsonit">Twitter</a></li> <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-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> <li id="menu-item-5592" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5592"><a href="http://www.slideshare.net/markwilson">Slideshare</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="text/javascript">var jalwCurrentPost={month:"",year:""};</script><script type="text/javascript" src="https://widgetlogic.org/v2/js/data.js?t=1732406400&ver=6.0.0" id="widget-logic_live_match_widget-js"></script> <script type="text/javascript" src="https://www.markwilson.co.uk/blog/wp-content/themes/edin/js/skip-link-focus-fix.js?ver=20130115" id="edin-skip-link-focus-fix-js"></script> <script type="text/javascript" src="https://c0.wp.com/p/jetpack/14.0/modules/likes/queuehandler.js" id="jetpack_likes_queuehandler-js"></script> <script type="text/javascript" src="https://www.markwilson.co.uk/blog/wp-content/themes/goran/js/navigation.js?ver=20140807" id="goran-navigation-js"></script> <script type="text/javascript" src="https://www.markwilson.co.uk/blog/wp-content/themes/goran/js/goran.js?ver=20140808" id="goran-script-js"></script> <script type="text/javascript" src="https://stats.wp.com/e-202447.js" id="jetpack-stats-js" data-wp-strategy="defer"></script> <script type="text/javascript" id="jetpack-stats-js-after"> /* <![CDATA[ */ _stq = window._stq || []; _stq.push([ "view", JSON.parse("{\"v\":\"ext\",\"blog\":\"29247765\",\"post\":\"0\",\"tz\":\"0\",\"srv\":\"www.markwilson.co.uk\",\"j\":\"1:14.0\"}") ]); _stq.push([ "clickTrackerInit", "29247765", "0" ]); /* ]]> */ </script> </body> </html>