refactor: move into a website directory

This commit is contained in:
Oliver Davies 2022-07-13 18:09:09 +01:00
parent 86529d7148
commit 3c5c0e808a
747 changed files with 133 additions and 2 deletions

View file

@ -0,0 +1,9 @@
---
title: Page not found
permalink: /404.html
exclude_from_sitemap: true
---
{% block javascripts %}
<script>plausible("404",{ props: { path: document.location.pathname } });</script>
{% endblock %}

View file

@ -0,0 +1,16 @@
---
title: "Blog"
use: ["posts"]
intro_text: |
This is where I publish my personal blog posts as well as technical posts
and tutorials on topics such as Drupal, PHP, Tailwind CSS, automated testing,
and systems administration.
---
<div class="mt-10">
<div class="space-y-8">
{% for post in data.posts|sort((a, b) => b.date <=> a.date) %}
{% include 'post/post-teaser' with { post } only %}
{% endfor %}
</div>
</div>

View file

@ -0,0 +1,6 @@
---
title: Book a 1-on-1 consulting call
link: https://savvycal.com/opdavies/consulting-call
---
{{ page.link }}

View file

@ -0,0 +1,11 @@
---
title: Company Information
---
<div class="markdown" markdown="1">
Company name : Oliver Davies Ltd (previously Oliver Davies Web Development Ltd)
Registered address : 3 Westfield Close, Caerleon, Newport, NP18 3ED
Company number : 8017706
</div>

View file

@ -0,0 +1,9 @@
---
title: Contact Oliver
---
The best way to get in touch with me is via email: <a href="mailto:{{ site.email }}">{{ site.email }}</a>. I usually reply within one business day.
I'm also on [LinkedIn][linkedin].
[linkedin]: {{site.linkedin.url}}

147
website/source/_pages/cv.md Normal file
View file

@ -0,0 +1,147 @@
---
title: Oliver Paul Davies (opdavies)
---
<div class="markdown" markdown="1">
## Technical skills
- Languages: PHP, SQL, HTML, CSS, JavaScript, Bash
- CMSes and Frameworks: Drupal (6-9), Symfony (2-5), Sculpin, Tailwind CSS, Vue.js
- Tools: Git, PHPUnit, PHPStan, Behat, Jest, Docker, Ansible, Puppet, Apache, Nginx, MySQL, Jenkins, GitHub Actions
- Platforms: Acquia, Platform.sh, Pantheon, DigitalOcean, Linode
## Projects
### Inviqa websites (Lead Backend Developer and Technical Team Lead)
- Co-developed the Drupal 8 versions of the Inviqa UK and Germany websites, including a number of custom modules.
- Wrote custom migrations to migrate existing data from the legacy site.
- Solely upgraded the sites from Drupal 8 to Drupal 9.
- Technologies used: Drupal 8/9, Vue.js, Behat, PHPUnit, PHPCS, PHPStan, Platform.sh
- Links: <https://www.inviqa.com>, <https://www.inviqa.de>
### OutdoorLads website (Lead Developer, Microserve)
- Architected and co-developed a Drupal 8 and Drupal Commerce based events and membership website and management system.
- Introduced automated testing and test-driven development, resulting in over 100 tests being added.
- Contributed to the custom migration of data from the legacy system, including users, event (product), and attendance (order) information.
- Technologies used: Drupal 8, Drupal Commerce 2, PHPUnit, Tailwind CSS.
- Link: <https://www.outdoorlads.com>
### Drupal.org websites and infrastructure (Developer, Drupal Association)
- Improved Drupal.org by adding new features and fixing bugs, improving the user experience for new Drupal.org users and Drupal contributors and maintainers.
- Assisted in the upgrade of localize.drupal.org to Drupal 7 with high-profile community members.
- Tested and contributed to the responsive version of Bluecheese (the Drupal.org theme) which was launched in December 2014.
- Links: <https://www.drupal.org>, <https://events.drupal.org>, <https://jobs.drupal.org>
### Intranet for Admiral Insurance (Lead Developer, Precedent)
- Completed a Drupal development project, working closely and often on-site with Admiral's staff Developers.
- Integrated single-sign-on using LDAP, Active Directory, and NTLM.
- Technologies used: Drupal 7, Git, Linux, Apache, MySQL.
### Insurance group websites (Lead Developer, Freelance)
- Developed and maintained a collection of business-to-consumer and business-to-business websites, selling insurance policies for electronic gadgets.
- Increased revenue by increasing the number of sites from one to seven, and maintaining costs by re-using the same codebase and hosting and implementing patterns such as feature flags.
- Technologies used: Drupal 7, Drupal Commerce, AngularJS, PHPCS, PHPStan, Jest, GitHub, Acquia.
## Work Experience
### Lead Software Developer at Transport for Wales - 2021 to present
### Freelance Software Developer and Systems Administrator - 2007 to present
- Developed and re-developed applications using Drupal, Symfony and Silex.
- Migrated sites to newer versions of Drupal (6 to 7, and 7 to 8).
- Provisioned and maintained Linux servers for clients.
- Introduced version control systems, automation and deployment processes to existing projects.
### Senior Software Engineer at Inviqa (Remote) - 2019 to 2021
- Worked on a development team responsible for a number of Drupal 7 and 8 projects, which I led for over a year in an acting Technical Team Lead role.
- Augmented onto a client development team for five months, co-developing an application using Drupal, Angular, and TypeScript.
- Part of the out-of-hours critical application support team, supporting applications including Drupal, Magento, and Sylius.
- Certified Mental Health First Aider and part of the Wellbeing team.
- Co-organised and presented at the internal Drupal community of practice (CoP) sessions, and presented at the Engineering and Front-End CoPs.
- Link: <https://www.inviqa.com>
### Senior Drupal Developer at Microserve (Bristol, UK) - 2017 to 2019
- Developed and maintained various Drupal 7 and 8 projects including custom modules and automated tests, such as integrating Drupal with third-party services.
- Improved the accessibility of various projects by working on front-end and theming related tasks.
- Wrote custom migrations to import data from various sources into Drupal 8.
- Link: <https://microserve.io>
### Senior Drupal Developer at Appnovation (Cardiff, UK) - 2016 to 2017
- Co-developed various Drupal 7 and 8 projects for UK, US and Canadian clients, including custom modules and themes.
- Link: <https://www.appnovation.com>
### Lead Drupal Developer at CTI Digital (Remote) - 2015 to 2016
- Contributed to and helped support various existing Drupal 7 projects.
- Improved my Drupal 8 knowledge via self-guided learning, focussing on custom module development and data migration.
- Link: <https://www.ctidigital.com>
### Senior Drupal Developer at Microserve (Bristol, UK) - 2015
- Full-stack Drupal 7 development, focussing on custom module development, REST server integration via restws module, and data migration from Drupal 6.
- Updated and modernised a non-Drupal PHP platform to ensure its compatibility with their new Drupal 7 website, adding Composer to manage dependencies and Guzzle to perform HTTP requests to Drupal to trigger actions via REST.
- Link: <https://microserve.io>
### Drupal.org Developer at the Drupal Association (Remote) - 2014 to 2015
- Worked on the Drupal.org website, its sub-sites and infrastructure, developing new tools and features whilst fixing bugs and issues.
- Monitored and maintained the Drupal.org testbot infrastructure during high traffic periods, ensuring that automated tests are able to run for patches submitted to Drupal.org.
- Fixed any issues that made Drupal.org a Drupal 8 release blocker, ensuring that there were no further delays in releasing Drupal 8.
- Link: <https://www.drupal.org/association>
### Senior Drupal Developer at Precedent (Cardiff, UK) - 2013 to 2014
- Led a development team consisting of colleagues in other offices as well as an off-site client contractor.
- Completed an in-progress Drupal 7 project, adding missing functionality and fixing bugs.
### Application Developer & System Administrator at Nomensa (Bristol, UK) - 2012 to 2013
- Developed custom Drupal 7 modules including an integration with CiviCRM.
- Completed front-end theme development work with a focus on accessibility, ensuring that it was WCAG 2.0 compliant.
- Worked alongside and mentored front-end Developers in Drupal theming on projects. Several of them would later become full-time Drupal Developers and Themers.
- Provisioned servers with a Nginx, PHP-FPM and MySQL stack, and deployed applications.
- Link: <https://www.nomensa.com>
### PHP Developer at Proctor & Stevenson (Bristol, UK) - 2011 to 2012
- Developed and co-developed new websites, including the agencys first Drupal 7 client project.
- Provided ongoing support and maintenance of websites for existing clients.
- Architected and developed a Drupal 6 and Ubertcart project for a water services company, which processed residential and commercial property transactions until September 2020.
- Link: <https://www.proctors.co.uk>
### Web Developer (PHP, Drupal) at Horse & Country TV (Cwmbran, UK) - 2010 to 2011
- Maintained and supported the companys Drupal 6 website as part of a two-person team.
- Re-architected and re-developed the Events section, adding Ubercart for paid events which added a new revenue stream for the company.
- Link: <https://horseandcountry.tv>
## Certifications and Qualifications
- 2021: Platform.sh partner certification (for Inviqa)
- 2019: Adult Mental Health First Aider - Training in Mind / St. John's Ambulance
- 2018: Acquia certified Cloud Pro
- 2017: Acquia certified Front End Specialist - Drupal 8
- 2017: Acquia certified Back End Specialist - Drupal 8
- 2017: Acquia certified Developer - Drupal 8
- 2007-2009: HNC Computing (End User Support)
## Community
- Organiser of the PHP South Wales user group.
- Past organiser of the PHP South West, and Drupal Bristol user groups.
- Co-founder of the DrupalCamp Bristol conference.
- Open source contributor and maintainer.
- Drupal core contributor, and contribution mentor.
- Coding Fellowship Bootcamp mentor.
</div>

View file

@ -0,0 +1,64 @@
---
title: Oliver Davies - PHP Developer and Drupal Specialist
---
<div class="markdown" markdown="1">
I'm a long-time Web Developer and consultant. Ive led, delivered, and
maintained PHP, Drupal, and Drupal Commerce based websites, have worked for
some of the UKs largest and well-known PHP and Drupal agencies, and even for
the Drupal Association - the nonprofit organisation behind the Drupal project -
where I was employed to work on and improve the Drupal.org websites.
<a href="mailto:{{ site.email }}">Send me an email</a> to discuss your project.
## My Drupal Experience
I have contributed code to Drupal core and to various other Drupal modules, and
maintain modules and themes like Override Node Options which is used on over 30,
000 Drupal sites according to Drupal.org. Ive been a mentor at various
in-person events, helping new contributors to the Drupal project, and regularly
write blog posts, present talks and workshops, and create videos and live
streams.
As well as Drupal, Ive worked with other PHP projects like Symfony and Laravel,
static site generators like Sculpin and Jekyll, and JavaScript frameworks such
as Vue.js and Angular.
## Certifications
- Acquia certified Developer - Drupal 8 (2017)
- Acquia certified Back-End Specialist - Drupal 8 (2017)
- Acquia certified Front-End Specialist - Drupal 8 (2017)
- Acquia certified Cloud Pro (2018)
- Platform.sh Gold partner certification (2021, for Inviqa)
## Community contributions
- Authored an article on Drupal development using distributions for Linux
Journal's Drupal issue.
- Mentored new contributors at DrupalCon contribution days with their first
patches to Drupal core.
- Organised the Drupal Bristol and PHP South West (PHPSW) user groups, and
the DrupalCamp Bristol conference.
- Currently organise and sponsor the
[PHP South Wales user group](https://www.phpsouthwales.uk).
- Board member for the
[Drupal England and Wales Association](https://drupal-england-wales.github.io)
(2020 to present).
- Selecting sessions for DrupalCon Europe 2021 as part of the DrupalCon track
team.
- Mentored students on the DrupalEasy
[Drupal Career Online](https://www.drupaleasy.com/academy/dco/course-information)
course.
- Currently writing "Test-Driven Drupal", an eBook about automated testing and
test-driven development in Drupal.
## Podcasts
I've been a guest on a number of podcasts, including [Talking Drupal](https://talkingdrupal.com),
[How to Code Well](https://howtocodewell.fm), [That Podcast](https://thatpodcast.io),
and [Voices of the ElePHPant](https://voicesoftheelephpant.com), where I've
discussed topics including PHP, Drupal, CSS frameworks, and automated
testing.
</div>

View file

@ -0,0 +1,79 @@
---
title: Introduction to Automated Testing and Test-Driven Development with Drupal
drupal_versions: [9]
prices:
early: 395.00
full: 495.00
early: true
next_date: 2022-04-04
testimonials:
-
name: Scott Euser, Head of Web Development
image: /images/scott-euser.jpg
text: |
Oliver really knows his stuff. Whether you are just starting out or looking to take your knowledge to the next level, his patient and clear way of explaining will help get you there.
---
Are you a Drupal Developer who wants to learn about automated testing and test-driven development, or do you manage a development team that you'd like to train?
I've delivered large Drupal projects using automated tests and test-driven development for custom functionality, and maintain Drupal modules with thousands of installations whilst using their tests to ensure working code and prevent regressions.
I offer an interactive full-day workshop (previously presented at DrupalCamp London, and remotely for DrupalCamp NYC) that provides an introduction to automated testing in Drupal and how to utilise test-driven development - which I've updated specifically for Drupal {{ page.drupal_versions|join(' and ') }}.
## Contents
* What is automated testing, and why write tests?
* What types of tests are available in Drupal?
* Outside-in vs. inside-out testing.
* Configuring Drupal and PHPUnit to run tests locally.
* Exercise: writing tests for existing Drupal core functionality.
* Exercise: adding tests to an existing custom module.
* What is test-driven development?
* Exercise: writing a new Drupal module from scratch with test-driven development.
* Q&A
{% include "horizontal-rule" %}
## Dates and prices
The workshop is currently only available remotely, and the next available date is <span class="font-bold">{{ page.next_date|date('jS F Y') }}</span>.
Seats are available at {% if page.early %}an <span class="font-bold">early bird price of £{{ page.prices.early }}</span>{% else %}<span class="font-bold">£{{ page.prices.full }}</span>{% endif %}, with a 10% discount for bulk orders of 5 or more seats.
<div class="mt-6">
{% embed 'link-button' with {
arrow: true,
href: 'https://buy.stripe.com/6oE3cW4Su7DA1t6144',
size: 'normal',
} only %}
{% block text 'Book your seat' %}
{% endembed %}
</div>
{% include "horizontal-rule" %}
## Testimonials
{% for testimonial in page.testimonials %}
<div>
<blockquote class="mt-4">
{{ testimonial.text }}
</blockquote>
<footer class="flex items-center space-x-4 space-x-reverse">
<span class="text-base">{{ testimonial.name }}</span>
<span class="order-first">
<img
class="w-10 h-10 rounded-full border"
src="{{ testimonial.image }}"
/>
</span>
</footer>
</div>
{% endfor %}
<div class="mt-8">
{% include 'about-author' with {
avatar: site.avatar,
work: site.work,
} only %}
</div>

View file

@ -0,0 +1,29 @@
---
title: Oliver Davies - Software Developer and Consultant, PHP and Drupal specialist
permalink: /
is_front: true
exclude_from_sitemap: true
meta:
description: Oliver Davies is a UK-based Software Developer and Consultant, specialising in Drupal, PHP, and JavaScript.
---
{% set thisYear = 'today'|date('Y') %}
{% set yearsOfExperience = thisYear - site.experience.start_year %}
<div class="markdown" markdown="1">
<div class="mb-4 w-32"><img src="{{ site.avatar.path }}" alt="Picture of Oliver" class="rounded-full border border-gray"></div>
Hi, Im Oliver. Im a Full Stack Software Consultant based in South Wales in the UK.
I architect, develop, and consult on large web applications, and work with organisations, agencies, and freelance Developers to improve their code quality by using tools and workflows such as continuous integration and deployment, automated testing, test-driven development, and static analysis.
I have {{ yearsOfExperience }} years of software development and Drupal experience, have worked for the Drupal Association, and am an <a href="https://certification.acquia.com/user/4540">Acquia-certified Drupal expert</a>. I also work with complementary technologies such as Symfony, Vue.js, TypeScript, Docker, and Ansible.
I enjoy writing and contributing open-source code which you can find on my [Drupal.org] and [GitHub] profiles.
I regularly <a href="/talks">present talks and workshops</a> at user groups and conferences and am the organiser of the <a href="https://www.phpsouthwales.uk">PHP South Wales</a> user group.
<a href="/contact">Contact me</a> if youd like any more information or to discuss a project.
</div>
[drupal.org]: {{site.drupalorg.url}}
[github]: {{site.github.url}}

View file

@ -0,0 +1,50 @@
---
title: Links
links:
-
title: Twitter
url: '%site.twitter.url%'
-
title: YouTube
url: '%site.youtube.channel.url%'
-
title: LinkedIn
url: '%site.linkedin.url%'
-
title: Drupal.org
url: '%site.drupalorg.url%'
-
title: GitHub
url: '%site.github.url%'
-
title: GitHub Gists
url: '%site.github.gist.url%'
-
title: Packagist
url: '%site.packagist.url%'
-
title: Speakerdeck
url: '%site.speakerdeck.url%'
-
title: PHP South Wales
url: https://www.phpsouthwales.uk
---
<div class="max-w-md mx-auto">
<ul class="p-0 list-none space-y-4">
{% for link in page.links %}
<li>
<a
class="
w-full p-2 block border text-center no-underline text-black transition ease-in-out duration-200
hover:text-white hover:bg-blue-primary focus:text-white focus:bg-blue-primary
dark:text-white dark:hover:text-black dark:focus:text-black dark:hover:bg-white dark:focus:bg-white
"
href="{{ link.url }}?utm_source=oliverdavies.uk&utm_medium=links"
>
{{ link.title }}
</a>
</li>
{% endfor %}
</ul>
</div>

View file

@ -0,0 +1,17 @@
---
title: Pair program with me
---
I enjoy pair and mob (group) programming, so as well as [traditional freelance
services][0], I offer paid remote pair programming sessions where I'll work
with you on your own project via a Zoom call.
My experience is based around PHP, Drupal, Symfony, Vue.js, Tailwind CSS,
Ansible, Docker, clean code, automated testing, and test-driven development.
I also offer free sessions for open source projects.
To arrange a pairing session, [find an available time on my calendar][1].
[0]: /drupal-php-developer
[1]: {{site.savvycal.url}}

View file

@ -0,0 +1,14 @@
---
title: Projects
use:
- projects
draft: true
---
<ul>
{% for project in data.projects %}
<li>
<a href="{{ project.url }}">{{ project.title }}</a>
</li>
{% endfor %}
</ul>

View file

@ -0,0 +1,143 @@
---
title: Recommendations
recommendations:
-
name: Ed Welsby
tagline: Senior Developer at Proctor & Stevenson
text: |
<p>Oliver was great to work with, he has a solid knowledge of the various aspects of web development and never minded helping me out with Linux commands!</p>
image: ed-welsby.png
hidden: true
-
name: Brian Healy
tagline: Director of Business Development at Tincan
text: |
<p>Oliver was fantastic to work with - pro-active and highly responsive, he worked well remotely and as part of a project team. His understanding of the project requirement(s) and ability to translate it into working code was essential and he delivered.</p>
image: brian-healy.png
-
name: Marlon Duncanson
tagline: 'Brand & Web Specialist'
text: |
<p>Oliver is a great guy and really easy to work with. He really goes the extra mile to make sure the project is done properly. I would recommend him and will not hesitate to use him again in future.</p>
image: ~
-
name: Brian Hartwell
tagline: Interactive Creative Director
text: |
<p>Oliver was great to work with. He has expert knowledge with Drupal and delivered exactly what we were looking for on time. He's understanding, friendly and easy to get along with. I would enjoy working with him again in the future.</p>
image: ~
-
name: Daniel Easterbrook
tagline: Digital Strategy Consultant
text: |
<p>Oliver is seasoned Drupal and all round highly skilled and experienced web developer. I have worked with Oliver on an important project where he was reliable, prompt and ensured strict client deadline delivery and confidentiality at all times.</p>
image: ~
-
name: James Chapman
tagline: Director at Development Done Right
text: |
<p>We used Oliver on a number of occasions throughout 2012 and I have to say we've been delighted with his work. His skills working with Drupal are excellent particularly with custom module development and we wouldnt hesitate to recommend him others.</p>
image: james-chapman.png
-
name: Léonie Watson
tagline: Director of Accessibility at Nomensa
text: |
<p>Oliver is a flexible and hardworking developer, with a terrific knowledge of Drupal. He promotes accessibility best practice within the Drupal community, and is always happy to share his knowledge with other people.</p>
image: leonie-watson.jpg
-
name: Holly Ross
tagline: Executive Director at Drupal Association
text: |
<p>Oliver has been an outstanding contributor to the Drupal Association team. He is a talented developer who writes great code and applies his curiosity and love of learning to every project. He is also a fantastic team member, who gives to the team as much as he gets.</p>
<p>Oliver is the embodiment of everything good about the Drupal community.</p>
image: holly-ross.png
-
name: Josh Mitchell
tagline: CTO at Drupal Association
text: |
<p>Oliver is a skilled Drupal developer with a passion for the Drupal community. As his direct supervisor, I was able to watch Oliver grow with the Drupal Association and contribute an amazing amount of effort and integrity to all of his work.</p>
<p>Everything we have thrown at Oliver, he has approached with an open and flexible mind that has allowed him to work on a wide range of projects and features for Drupal products.</p>
image: josh-mitchell.png
-
name: Chris Jarvis
tagline: Developer at Microserve
text: |
<p>Oliver is an amazing colleague, he's professional, full of knowledge and I could not recommend him more.</p>
image: chris-jarvis.jpg
hidden: true
-
name: Owen Phillips
tagline: Director at Operation Fitness Ltd
text: |
<p>I have been working to build and develop my website with Oliver over the last year and I couldn't recommend higher. His ideas, knowledge and completion are to a very high standard and I look forward to continuing my build with him.</p>
image: owen-phillips.jpeg
-
name: Chris Knox
tagline: Creative Director
text: |
<p>Oliver is a skilled and enthusiastic developer, always putting the clients interests first. His approach to work is diligent and confident and this makes working with him a pleasure!</p>
image: chris-knox.jpeg
-
name: Jon Hallett
tagline: Senior Systems Administrator at the University of Bristol
text: |
<p>We use Oliver for maintaining a couple of Drupal sites for which we no longer have the skills ourselves. We became aware of Oliver through his work in the Drupal community, and about a year ago we approached him to help us with the deep dive aspects of maintaining and developing Drupal sites. He's been really helpful and very responsive. Much appreciated!</p>
image: jon-hallett.jpeg
-
name: Alan Hatch
tagline: Senior Drupal Developer at Microserve
text: |
<p>I have had the pleasure of working with Oliver on several projects at Microserve. He is a natural innovator and a great mentor who inspires others to explore new technologies and approaches. He is a highly knowledgeable professional with a passion for all things Drupal and the tenacity required to get the job done well.</p>
image: alan.jpeg
-
name: Adam Cuddihy
tagline: Web Development Manager
text: |
<p>A fantastic and highly knowledgeable Drupal Developer. Oliver saved a struggling Drupal project with his wealth of Drupal experience.</p>
image: adam.jpeg
-
name: Duncan Davidson
tagline: Director at Rohallion
text: |
<p>Oliver is a pleasure to work with, and I would engage him again without hesitation. He communicates regularly, ensures that he meets requirements, and suggests improvements to the potential solutions to the brief.</p>
image: duncan.jpeg
-
name: Anonymous client
tagline: Marketing Strategist
text: |
<p>We have only worked together for a short while but I can see Oliver is a Drupal expert.</p>
<p>His technical knowledge means we have been able to make improvements to the sites we manage quickly and efficiently.</p>
<p>If we have complex issues to contend with in the future I feel confident he will be able to deal with them.</p>
-
name: "Huw Davies"
tagline: "Web Dev Manager / DevOps / Team Manager at Admiral Group Plc"
text: |
<p>I had the pleasure of working with Oliver whilst building the first version of our drupal based intranet. His knowledge of Drupal and the wider infrastructure required to run a site was really invaluable.</p>
<p>At the time, we were very new to Drupal, so it gave us a great platform to learn from and expand our own knowledge.</p>
<p>He's the only external contractor that we've kept in touch with over the years, which goes to show how much we valued his input.</p>
image: huw.jpeg
---
<div class="space-y-8">
{% for recommendation in page.recommendations|reverse if not recommendation.hidden %}
<article>
<h2>{{ recommendation.name }}</h2>
<header>{{ recommendation.tagline }}</header>
<div class="mt-4">
<div class="flex flex-col-reverse space-y-3 space-y-reverse md:flex-row md:space-y-0 md:space-x-6">
<div class="markdown">
{{ recommendation.text|raw }}
</div>
{% if recommendation.image %}
<div class="flex-shrink-0">
<img class="w-16 h-16 bg-white rounded-full border md:w-24 md:h-24 border-gray" src="/images/recommendations/{{ recommendation.image }}">
</div>
{% endif %}
</div>
</div>
</article>
{% endfor %}
</div>

View file

@ -0,0 +1,36 @@
---
title: Speaker Information
---
<div class="markdown" markdown="1">
## Bio
<a href="https://www.oliverdavies.uk">Oliver Davies</a> (<a href="{{ site.twitter.url }}">@{{ site.twitter.name }}</a>) has been building websites since 2007, and speaking at meetups and conferences since 2012. He is a Full Stack Developer and a certified Drupal expert who also has experience developing with Symfony, Laravel, Sculpin and Vue.js, as well as with DevOps and systems administration.
He is a {{ site.work.role}} at <a href="{{ site.work.company.url }}? utm_source=oliverdavies.uk&amp;utm_medium=speaker-information"> {{ site.work.company.name }}</a>, a Drupal core contributor and mentor, and an open source and contribution advocate.
He regularly blogs and gives talks on various topics, maintains and contributes to various open source projects, and organises the PHP South Wales user group.
## Photos
- <https://www.dropbox.com/s/say1muiqedik0l4/0188395_thumb.jpg>
## Some events that Ive spoken at
- BlueConf 2019 (Cardiff, UK)
- DrupalCamp Brighton 2015
- DrupalCamp Bristol 2016
- DrupalCamp Dublin 2017
- DrupalCamp London (2014, 2015, 2016, 2017, 2019, 2020)
- DrupalCamp North 2015 (Sunderland, UK)
- DrupalCon Amsterdam 2019
- DrupalCon Europe 2020 (Online)
- Nomad PHP
- PHP North West 2017 (Manchester, UK - 10 year anniversary)
- PHP South Coast 2016 (Portsmouth, UK)
- PHP UK Conference 2018 (London, UK)
- WordCamp Bristol 2019
I also [gave a number of talks remotely](/blog/speaking-remotely-during-lockdown) for various user groups and conferences during COVID-19.
</div>

View file

@ -0,0 +1,25 @@
---
title: Talks and workshops
use: [talks]
---
<p>Starting with my first talk in September 2012, I have given
{{ get_past_talk_count(data.talks) }} presentations and workshops at various
conferences and meetups, in-person and remotely, on topics including PHP,
Drupal, automated testing, Git, CSS, and systems administration.</p>
<div class="mt-10">
<div class="space-y-8">
{% for talk in data.talks|sort((a, b) => get_last_event_date_for_talk(b) <=> get_last_event_date_for_talk(a)) %}
<article>
<h2>
<a class="dark:text-blue-400 text-blue-primary" href="{{ talk.url|trim('/', 'right') }}">
{{ talk.title }}
</a>
</h2>
<p class="mt-1">{{ talk.description }}</p>
</article>
{% endfor %}
</div>
</div>

View file

@ -0,0 +1,53 @@
---
title: 'Test-Driven Drupal: The Book'
---
<div class="p-6 my-10 border border-gray-300 dark:bg-gray-800 dark:border-gray-700">
<p>I'm currently (in January 2022) working on this book again, and will
update this page in due course.</p>
<p class="mt-4">For now, bookmark the <a href="https://leanpub.com/test-driven-drupal">book's page on LeanPub</a> or take a look at the
<a href="https://github.com/opdavies/test-driven-drupal-app">example
application that I'm building</a> on GitHub.</p>
</div>
<div class="markdown spaced-y-4 mb-6">
<p>Having <a href="/talks/tdd-test-driven-drupal">given talks</a> and <a href="https://web.archive.org/web/20200422110605/https://drupalcamp.london/training/Automated-Testing-and-Test-Driven-Development-in-Drupal-8">workshops</a>, been a guest on podcasts and <a href="/articles/tags/testing">written articles</a> about automated testing in Drupal, Im currently in the planning phase of a book and potentially some accompanying screencasts about it, focussing on Drupal 8.</p>
<p>Im still thinking about what use-cases to cover and examples to include, but
here are some of the things Im considering:</p>
<ul>
<li>What things to test, and what not to test</li>
<li>The different types of available tests, and when to use each</li>
<li>How to write testable code</li>
<li>What happens when I run a test?</li>
<li>How to run tests in the Drupal UI</li>
<li>How to run tests with the <code>run-tests.sh</code> script</li>
<li>How to install, configure and run tests with PHPUnit in Drupal 8</li>
<li>Viewing HTML from run tests</li>
<li>How to write your first test</li>
<li>Debugging tests</li>
<li>How to organise your test files</li>
<li>Selecting the right base class and using test traits</li>
<li>Writing your own base test classes, traits and assertions</li>
<li>Managing dependencies for your tests (fields, configuration)</li>
<li>Creating users, checking access with roles and permissions</li>
<li>Creating pages and blocks with Views and testing the output</li>
<li>Creating pages with routes and controllers and testing the output</li>
<li>Testing custom plugins</li>
<li>Testing queuing items and processing queues</li>
<li>Testing sending emails</li>
<li>Testing custom Twig filters and functions
<li>Running tests as part of your continuous integration pipeline</li>
</ul>
<p>Ill most likely be publishing it via Leanpub, and will be sending free
chapters, early-bird discounts and links to screencasts and blog posts as I
write the book to subscribers of the mailing list.</p>
<p>If you have questions or would like to suggest something for me to include in
the book, please <a href="mailto:oliver@testdrivendrupal.com">contact me</a>.</p>
{% include 'test-driven-drupal-subscribe-form.html.twig' %}
</div>

View file

@ -0,0 +1,62 @@
---
title: Things you should know about PHP
---
Thanks for attending my [Things you should know about PHP](/talks/things-you-should-know-about-php) talk.
I hope that you learned some things about PHP, its ecosystem, and its communities, and if you haven't tried using PHP yet, I'd encourage you to do so.
Here are links to the resources that I mention in the talk, plus a couple of extras.
## Resources
- [Composer](https://getcomposer.org) - dependency manager
- [Drupal](https://www.drupal.org) - content management system
- [Jigsaw](https://jigsaw.tighten.co) - static site generator
- [Laravel](https://laravel.com) - framework
- [Nomad PHP](https://nomadphp.com) - online user group
- [PHP official images on Docker Hub](https://hub.docker.com/_/php)
- [PHPStan](https://phpstan.org) - static analysis tool
- [PHPUnit](https://phpunit.de) - testing framework
- [Pest](https://pestphp.com) - testing framework
- [Psalm](https://psalm.dev) - static analysis tool
- [Sculpin](khttps://sculpin.io) - static site generator
- [WordPress](https://wordpress.org) - content management system
- [php.net](https://www.php.net) - online documentation
- [php[architect]](https://www.phparch.com) - online magazine
## Books
- [Laravel: Up & Running](https://www.oreilly.com/library/view/laravel-up/9781492041207)
- [Symfony: The Fast Track](https://symfony.com/book)
## Videos
- [Codecourse](https://codecourse.com)
- [How to Code Well](https://www.howtocodewell.net)
- [Laracasts](https://laracasts.com)
- [SymfonyCasts](https://symfonycasts.com)
## Podcasts
- [How to Code Well podcast](https://howtocodewell.fm)
- [PHPUgly](https://www.phpugly.com)
- [Talking Drupal](https://talkingdrupal.com)
- [The Laravel Podcast](https://laravelpodcast.com)
- [The PHP Roundtable](https://phproundtable.com)
- [Voices of the elePHPant](https://voicesoftheelephpant.com)
{% include "horizontal-rule" %}
## Can I help?
Do you want to introduce PHP to your company or team, or add one of these tools to your existing PHP application?
I offer consulting calls and services to reduce your onboarding time and get you up and running quicker and easier.
<div class="mt-6">
{% set href = "mailto:" ~ site.email ~ "?subject=Book in my call" %}
{% embed "link-button" with { href: href, size: "normal" } only %}
{% block text "Book in your call →" %}
{% endembed %}
</div>

View file

@ -0,0 +1,43 @@
---
title: Working with me
draft: true
---
<div class="markdown" markdown="1">
## What I'm good at
- **Self-organising**
I'm a big fan of productivity processes and tools like to-do lists and checklists to manage everything.
- **Thinking out of the box.**
I try and
- **Communicating.**
You shouldn't need to ask me what I'm working on because you should already know. I keep a daily note with a list of tasks and post this somewhere at the end of the day to keep everyone in the loop, as well as posting updates to email, Slack, JIRA tickets, GitHub issues etc.
- **Processes**
- **Documentation**
I like to document things, for myself and for others. Whether it's in an issue tracking system, a wiki, a GitHub gist, a commit message, an Evernote note, or a blog post on this site, I'd rather have a document to refer back to than try and remember how I did something or why something was done in a certain way.
- **Best practices**
## What I'm not good at
-
## How to work with me
- **Tell me why.**
Don't just say "You must use the Adapter pattern", for example, but explain why something would be good and what benefits it offers. Then I can learn, and can apply it myself next time.
- **Give me timely, direct feedback.**
Good or bad, I'd rather know and can address things if needed, and I always appreciate good feedback!
</div>