2017-07-10 21:28:39 +00:00
<!DOCTYPE html>
< html class = "no-js" lang = "en-GB" >
< head >
< title > Blog | Oliver Davies< / title >
< meta charset = "UTF-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
2017-07-12 06:22:51 +00:00
< meta property = "og:url" content = "https://www.oliverdavies.uk/blog" >
2017-07-10 21:28:39 +00:00
< meta property = "og:title" content = "Blog" / >
2017-07-12 06:22:51 +00:00
< meta property = "og:image" content = "https://www.oliverdavies.uk/assets/images/me-precedent.jpg" / >
2017-07-10 21:28:39 +00:00
< meta property = "og:image:height" content = "327" / >
< meta property = "og:image:type" content = "image/jpg" >
< meta property = "og:image:width" content = "327" / >
2017-07-12 06:22:51 +00:00
< link rel = "stylesheet" href = "https://www.oliverdavies.uk/assets/css/main.css" >
2017-07-14 22:11:03 +00:00
2017-07-10 21:28:39 +00:00
< link rel = "apple-touch-icon" href = "/assets/images/me-precedent.jpg?s=57" sizes = "57x57" >
< link rel = "apple-touch-icon" href = "/assets/images/me-precedent.jpg?s=114" sizes = "114x114" >
< link rel = "apple-touch-icon" href = "/assets/images/me-precedent.jpg?s=72" sizes = "72x72" >
< link rel = "apple-touch-icon" href = "/assets/images/me-precedent.jpg?s=144" sizes = "144x144" >
< link rel = "apple-touch-icon" href = "/assets/images/me-precedent.jpg?s=60" sizes = "60x60" >
< link rel = "apple-touch-icon" href = "/assets/images/me-precedent.jpg?s=120" sizes = "120x120" >
< link rel = "apple-touch-icon" href = "/assets/images/me-precedent.jpg?s=76" sizes = "76x76" >
< link rel = "apple-touch-icon" href = "/assets/images/me-precedent.jpg?s=152" sizes = "152x152" >
< link rel = "icon" href = "/assets/images/me-precedent.jpg?s=160" sizes = "160x160" >
< link rel = "icon" href = "/assets/images/me-precedent.jpg?s=96" sizes = "96x96" >
< link rel = "icon" href = "/assets/images/me-precedent.jpg?s=32" sizes = "32x32" >
< link rel = "icon" href = "/assets/images/me-precedent.jpg?s=16" sizes = "16x16" >
< / head >
< body class = "page--blog page--blog__list" >
< nav class = "navbar navbar-inverse navbar-fixed-top" >
< div class = "container" >
< div class = "navbar-header" >
< button type = "button" class = "navbar-toggle collapsed" data-toggle = "collapse" data-target = "#navbar" aria-expanded = "false" aria-controls = "navbar" >
< span class = "sr-only" > Toggle navigation< / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< / button >
2017-07-12 06:22:51 +00:00
< a class = "navbar-brand" href = "https://www.oliverdavies.uk/" > Oliver Davies< / a >
2017-07-10 21:28:39 +00:00
< / div >
< div id = "navbar" class = "collapse navbar-collapse" role = "navigation" >
< ul class = "nav navbar-nav" >
< li class = "" >
< a href = "/" > About< / a >
< / li >
< li class = "" >
< a href = "/experience" > Experience< / a >
< / li >
< li class = "" >
< a href = "/testimonials" > Testimonials< / a >
< / li >
< li class = "" >
< a href = "/talks" > Talks< / a >
< / li >
< li class = "active" >
< a href = "/blog" > Blog< / a >
< / li >
< li class = "" >
< a href = "/contact" > Contact< / a >
< / li >
< / ul >
< / div > < / div >
< / nav >
< div class = "container" >
< div class = "row" >
< main class = "col-md-9" >
< h1 > Blog< / h1 >
< ul class = "posts" >
< li class = "post" >
2017-07-13 21:19:23 +00:00
< h2 > Publishing Sculpin Sites with GitHub Pages< / h2 >
< p class = "posted text-light" > 13th July 2017< / p >
< p > < img
src="/assets/images/blog/jackson-octocat.png"
alt=""
class="is-centered"
style="margin-bottom: 20px"
>< / p >
< p > Earlier this week I moved this site from my personal Linode server to < a href = "https://pages.github.com" > GitHub Pages< / a > .< / p >
< p > This made sense as I already kept the source code in < a href = "https://github.com/opdavies/oliverdavies.uk" > on GitHub< / a > , the issue was that GitHub Pages doesn’ t know how to dynamically parse and generate a Sculpin site like it does with some other static site generators. It can though parse and serve HTML files, which is what Sculpin generates. It’ s just a case of how those files are added to GitHub.< / p >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2017/07/13/publishing-sculpin-sites-with-github-pages/" > Read more → < / a >
2017-07-13 21:19:23 +00:00
< / li >
< li class = "post" >
2017-07-10 21:28:39 +00:00
< h2 > Introducing the Drupal Meetups Twitterbot< / h2 >
2017-07-11 17:57:51 +00:00
< p class = "posted text-light" > 9th June 2017< / p >
2017-07-10 21:28:39 +00:00
< p > < img src = "/assets/images/blog/drupal-meetups-twitterbot.png" alt = "" class = "is-centered" > < / p >
< p > The < a href = "https://github.com/opdavies/drupal-meetups-twitterbot" > Drupal Meetups Twitterbot< / a > is a small project that I worked on a few months ago, but hadn't got around to promoting yet. It’ s intention is to provide < a href = "https://twitter.com/drupal_meetups" > one Twitter account< / a > where people can get the up to date news from various Drupal meetups.< / p >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2017/06/09/introducing-the-drupal-meetups-twitterbot/" > Read more → < / a >
2017-07-10 21:28:39 +00:00
< / li >
< li class = "post" >
< h2 > Turning Your Custom Drupal Module into a Feature< / h2 >
2017-07-11 17:57:51 +00:00
< p class = "posted text-light" > 20th May 2017< / p >
2017-07-10 21:28:39 +00:00
< p > Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’ t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so weren’ t present within the standard installation profile used to run tests.< / p >
< p > I decided to convert the custom module into a < a href = "https://www.drupal.org/project/features" > Feature< / a > so that the content type and it’ s fields could be added to it, and therefore present on the testing site once the module is installed.< / p >
< p > To do this, I needed to expose the module to the Features API.< / p >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2017/05/20/turning-drupal-module-into-feature/" > Read more → < / a >
2017-07-10 21:28:39 +00:00
< / li >
< li class = "post" >
< h2 > DrupalCamp Bristol 2017 - Early Bird Tickets, Call for Sessions, Sponsors< / h2 >
2017-07-11 17:57:51 +00:00
< p class = "posted text-light" > 15th May 2017< / p >
2017-07-10 21:28:39 +00:00
< p > < img src = "/assets/images/blog/drupalcamp-bristol-17-logo.jpg" alt = "DrupalCamp Bristol 2017 logo" class = "is-centered" > < / p >
< p > In less than two months time, < a href = "https://2017.drupalcampbristol.co.uk" > DrupalCamp Bristol< / a > will be back for our third year! (July seems to come around quicker each year). This is this year’ s schedule and venues:< / p >
< ul >
< li > 30th June - CXO (Business) day - < a href = "http://www.watershed.co.uk" > Watershed< / a > < / li >
< li > 1st July - Developer conference - < a href = "http://www.bris.ac.uk/chemistry" > University of Bristol, School of Chemistry< / a > < / li >
< li > 2nd July - Contribution sprints - Venue TBC< / li >
< / ul >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2017/05/15/drupalcamp-bristol-early-bird-tickets-sessions-sponsors/" > Read more → < / a >
2017-07-10 21:28:39 +00:00
< / li >
< li class = "post" >
< h2 > Fixing Drupal SimpleTest issues inside Docker Containers< / h2 >
2017-07-11 17:57:51 +00:00
< p class = "posted text-light" > 5th May 2017< / p >
2017-07-10 21:28:39 +00:00
< p > I’ ve been a Drupal VM user for a long time, but lately I’ ve been using a combination Drupal VM and Docker for my local development environment. There were a couple of issues preventing me from completely switching to Docker - one of which being that when I tried running of my Simpletest tests, a lot of them would fail where they would pass when run within Drupal VM.< / p >
< p > Here’ s an excerpt from my < code > docker-compose.yml< / code > file:< / p >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2017/05/05/fixing-drupal-simpletest-docker/" > Read more → < / a >
2017-07-10 21:28:39 +00:00
< / li >
< li class = "post" >
< h2 > Nginx Redirects With Query String Arguments< / h2 >
2017-07-11 17:57:51 +00:00
< p class = "posted text-light" > 31st January 2017< / p >
2017-07-10 21:28:39 +00:00
< p > This is an example of how my Nginx configuration looked to redirect from an old domain to a new one, and also to redirect from the root < code > example.com< / code > domain to the canonical < code > www< / code > subdomain.< / p >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2017/01/31/nginx-redirects-with-query-string-arguments/" > Read more → < / a >
2017-07-10 21:28:39 +00:00
< / li >
< li class = "post" >
< h2 > Easier Sculpin Commands with Composer and NPM Scripts< / h2 >
2017-07-11 17:57:51 +00:00
< p class = "posted text-light" > 7th January 2017< / p >
2017-07-10 21:28:39 +00:00
< p > In this video, I show you how I've simplied my Sculpin and Gulp workflow using custom Composer and NPM scripts.< / p >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2017/01/07/easier-sculpin-commands-with-composer-and-npm-scripts/" > Read more → < / a >
2017-07-10 21:28:39 +00:00
< / li >
< li class = "post" >
< h2 > Drupal VM Generator 2.9.1 Released< / h2 >
2017-07-11 17:57:51 +00:00
< p class = "posted text-light" > 30th December 2016< / p >
2017-07-10 21:28:39 +00:00
< p > I spent some time yesterday working on the < a href = "http://www.drupalvmgenerator.com" > Drupal VM Generator< / a > , and have released versions 2.8.1, 2.9.0 and 2.9.1.< / p >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2016/12/30/drupal-vm-generator-291-released/" > Read more → < / a >
2017-07-10 21:28:39 +00:00
< / li >
< li class = "post" >
< h2 > Building Gmail Filters with PHP< / h2 >
2017-07-11 17:57:51 +00:00
< p class = "posted text-light" > 15th July 2016< / p >
2017-07-10 21:28:39 +00:00
< p > Earlier this week I wrote a small PHP library called GmailFilterBuilder that allows you to write Gmail filters in PHP and export them to XML.
I was already aware of a Ruby library called gmail-britta that does the same thing, but a) I’ m not that familiar with Ruby so the syntax … < / p >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2016/07/15/building-gmail-filters-with-php/" > Read more → < / a >
2017-07-10 21:28:39 +00:00
< / li >
< li class = "post" >
< h2 > Simplifying Drupal Migrations with xautoload< / h2 >
2017-07-11 17:57:51 +00:00
< p class = "posted text-light" > 3rd May 2016< / p >
2017-07-10 21:28:39 +00:00
< p > How to use the < a href = "https://www.drupal.org/project/xautoload" > xautoload< / a > module to autoload migration classes within your Drupal 7 migration modules.< / p >
2017-07-21 17:44:18 +00:00
< a href = "/blog/2016/05/03/simplifying-drupal-migrations-with-xautoload/" > Read more → < / a >
2017-07-10 21:28:39 +00:00
< / li >
< / ul >
< ul class = "pager" >
2017-07-12 06:22:51 +00:00
< li class = "previous" > < a href = "https://www.oliverdavies.uk/blog/page/2.html" > ← Older< / a > < / li >
2017-07-10 21:28:39 +00:00
< / ul >
< / main >
< div class = "col-md-3" >
< div class = "panel badges text-center" >
2017-07-21 17:44:18 +00:00
< a href = "https://assoc.drupal.org/membership" title = "I’ m a Drupal Association member." class = "is-block" >
2017-07-10 21:28:39 +00:00
< img
2017-07-21 17:44:18 +00:00
src="//www.oliverdavies.uk/assets/images/badges/da-individual-member.png"
2017-07-10 21:28:39 +00:00
alt="Drupal Association Individual Member"
2017-07-21 17:44:18 +00:00
width="200"
/>
2017-07-10 21:28:39 +00:00
< / a >
2017-07-21 17:44:18 +00:00
< div class = "is-flex align-items-center" >
2017-07-10 21:28:39 +00:00
< img
2017-07-21 17:44:18 +00:00
src="//www.oliverdavies.uk/assets/images/badges/acquia-d8-developer.png"
alt="Acquia Certified Developer - Drupal 8 Exam Badge"
class="is-2"
/>
2017-07-10 21:28:39 +00:00
2017-07-21 17:44:18 +00:00
< img
src="//www.oliverdavies.uk/assets/images/badges/acquia-d8-back-end.png"
alt="Acquia Certified Back End Specialist - Drupal 8 Exam Badge"
class="is-2"
2017-07-10 21:28:39 +00:00
/>
2017-07-21 17:44:18 +00:00
< / div >
2017-07-10 21:28:39 +00:00
2017-07-21 17:44:18 +00:00
< a href = "http://conference.phpnw.org.uk/phpnw17" class = "is-block" >
2017-07-12 06:24:51 +00:00
< img src = "//www.oliverdavies.uk/assets/images/badges/phpnw17.png" alt = "" >
2017-07-10 21:28:39 +00:00
< / a >
< / div >
< div class = "availability panel panel-default" >
< div class = "panel-heading" > Availability< / div >
< div class = "panel-body" >
< p >
< i class = "fa fa-thumbs-o-up text-warning" > < / i >
Currently have limited part-time capacity
< / p >
< p >
< i class = "fa fa-thumbs-o-down text-danger" > < / i >
Currently no spare full-time capacity.
< / p >
< / div >
< / div >
< / div >
< / div > < / div >
< footer class = "container" >
< p class = "copyright" >
© 2010-2017 Oliver Davies. Built with < a href = "https://sculpin.io" > Sculpin< / a > .
< / p >
< div class = "meetups" >
< h2 > Things that I organise< / h2 >
< ul >
< li class = "meetups--drupal-bristol" >
< a href = "http://www.drupalbristol.org.uk" title = "Drupal Bristol" >
2017-07-11 06:34:02 +00:00
< img
2017-07-12 06:24:51 +00:00
src="//www.oliverdavies.uk/assets/images/meetups/drupal-bristol.jpeg"
2017-07-11 06:34:02 +00:00
alt="Drupal Bristol logo"
>
2017-07-10 21:28:39 +00:00
< / a >
< / li >
< li class = "meetups--drupalcamp-bristol" >
< a href = "http://www.drupalcampbristol.co.uk" title = "DrupalCamp Bristol" >
2017-07-11 06:34:02 +00:00
< img
2017-07-12 06:24:51 +00:00
src="//www.oliverdavies.uk/assets/images/meetups/drupalcamp-bristol.png"
2017-07-11 06:34:02 +00:00
alt="DrupalCamp Bristol logo"
>
2017-07-10 21:28:39 +00:00
< / a >
< / li >
< li class = "meetups--phpsw" >
< a href = "http://phpsw.uk" title = "PHPSW" >
2017-07-11 06:34:02 +00:00
< img
2017-07-12 06:24:51 +00:00
src="//www.oliverdavies.uk/assets/images/meetups/phpsw.jpeg"
2017-07-11 06:34:02 +00:00
alt="PHPSW logo"
>
2017-07-10 21:28:39 +00:00
< / a >
< / li >
< / ul >
< / div >
< / footer >
2017-07-12 06:22:51 +00:00
< script src = "https://www.oliverdavies.uk/assets/js/site.js" > < / script >
2017-07-10 21:28:39 +00:00
< script > ( function ( i , s , o , g , r , a , m ) { i [ 'GoogleAnalyticsObject' ] = r ; i [ r ] = i [ r ] || function ( ) { ( i [ r ] . q = i [ r ] . q || [ ] ) . push ( arguments ) } , i [ r ] . l = 1 * new Date ( ) ; a = s . createElement ( o ) , m = s . getElementsByTagName ( o ) [ 0 ] ; a . async = 1 ; a . src = g ; m . parentNode . insertBefore ( a , m ) } ) ( window , document , 'script' , '//www.google-analytics.com/analytics.js' , 'ga' ) ; ga ( 'create' , 'UA-11967257-1' , 'auto' ) ; ga ( 'send' , 'pageview' ) ; < / script >
< / body >
< / html >