diff --git a/hosts/nixedo/modules/nginx/oliverdavies.uk/default.nix b/hosts/nixedo/modules/nginx/oliverdavies.uk/default.nix deleted file mode 100644 index 7bcf0529..00000000 --- a/hosts/nixedo/modules/nginx/oliverdavies.uk/default.nix +++ /dev/null @@ -1,91 +0,0 @@ -{ config, ... }: - -let - ports = config.homelab.ports; - port = ports.nginx.website-sculpin; - - redirects = builtins.concatStringsSep "\n" ( - map (r: "rewrite ^${r.from}/?$ ${r.to} redirect;") (import ./redirects.nix) - ); - - tome = { - root = "/var/www/vhosts/website-tome"; - - paths = [ - "core" - "sites/default/files" - "themes/custom/opdavies" - - # TODO: move back to Sculpin. - "archive" - "automated-testing" - "daily/.+" - "examples" - "homelab" - "podcast" - "rss/bb.xml" - "rss/daily.xml" - "testing" - ]; - - port = ports.nginx.website-tome; - }; - - tomeLocations = builtins.listToAttrs ( - map (path: { - name = "~ ^/${path}"; - - value = { - root = tome.root; - tryFiles = "$uri $uri.html $uri/index.html =404"; - }; - }) tome.paths - ); -in -{ - services = { - nginx.virtualHosts = { - "www.oliverdavies.uk" = { - root = "/var/www/vhosts/website-sculpin"; - - listen = [ - { - inherit port; - - addr = "localhost"; - } - ]; - - locations = tomeLocations // { - "/".tryFiles = "$uri $uri.html $uri/index.html =404"; - }; - - extraConfig = '' - port_in_redirect off; - - # Remove trailing slashes. - rewrite ^/(.*)/$ /$1 permanent; - - error_page 404 /404; - - rewrite ^/talks/archive/?$ /talks permanent; - rewrite ^/talks/(.*)$ /presentations/$1 permanent; - rewrite ^/talks/?$ /presentations permanent; - - ${redirects} - ''; - }; - - "oliverdavies.uk" = { - forceSSL = true; - globalRedirect = "www.oliverdavies.uk"; - useACMEHost = "oliverdavies.uk"; - }; - }; - - cloudflared.tunnels."e1514105-327f-4984-974e-e2fbaca76466".ingress = { - "oliverdavies.uk" = "http://localhost:${toString port}"; - "www.oliverdavies.uk" = "http://localhost:${toString port}"; - }; - }; -} diff --git a/hosts/nixedo/modules/nginx/oliverdavies.uk/redirects.nix b/hosts/nixedo/modules/nginx/oliverdavies.uk/redirects.nix deleted file mode 100644 index 56bc82e9..00000000 --- a/hosts/nixedo/modules/nginx/oliverdavies.uk/redirects.nix +++ /dev/null @@ -1,3074 +0,0 @@ -[ - { - from = "/10-useful-drupal-6-modules-i-use-every-project"; - to = "/blog/10-useful-drupal-6-modules"; - } - { - from = "/2010/04/05/styling-drupal-6s-taxonomy-lists-with-php-css-and-jquery"; - to = "/blog/style-drupal-6s-taxonomy-lists-php-css-jquery"; - } - { - from = "/2010/04/28/using-imagecache-and-imagecrop-for-my-portfolio"; - to = "/blog/using-imagecache-imagecrop-my-portfolio"; - } - { - from = "/2010/05/29/importing-images-using-the-imagefieldimport-module"; - to = "/blog/quickly-import-multiples-images-using-imagefieldimport-module"; - } - { - from = "/2010/06/23/creating-a-block-of-social-media-icons-using-cck-views-and-nodequeue"; - to = "/blog/create-block-social-media-icons-using-cck-views-nodequeue"; - } - { - from = "/2010/07/05/thanks"; - to = "/blog/thanks"; - } - { - from = "/2010/08/17/create-a-better-photo-gallery-in-drupal-part-2"; - to = "/blog/create-better-photo-gallery-drupal-part-2"; - } - { - from = "/2014/05/21/git-format-patch"; - to = "/blog/git-format-patch-your-friend"; - } - { - from = "/2PxmyqP"; - to = "/articles/examples-of-laravel-collections-in-drupal"; - } - { - from = "/39CoG"; - to = "/articles/drupalcamp-london-testing-workshop"; - } - { - from = "/3eGQr"; - to = "https://github.com/howToCodeWell/howToCodeWellFM/blob/c927e0b3589f1d7375002f7fd70f0bfc9fc90449/composer.json#L17"; - } - { - from = "/6UhLN"; - to = "https://github.com/opdavies/sculpin-twig-markdown-bundle/pull/1"; - } - { - from = "/6i3YZ"; - to = "https://www.youtube.com/watch?v=vUK5sEbd-dk"; - } - { - from = "/9rv0Z"; - to = "https://www.drupal.org/project/override_node_options/issues/3109852"; - } - { - from = "/BhMZi"; - to = "https://git.drupalcode.org/search?utf8=%E2%9C%93&snippets=&scope=&repository_ref=8.x-1.x&search=baz&project_id=23203"; - } - { - from = "/NBi5h"; - to = "https://git.drupalcode.org/search?utf8=%E2%9C%93&search=bar&group_id=&project_id=23203&search_code=true&repository_ref=8.x-1.x&nav_source=navbar"; - } - { - from = "/P5KQ5"; - to = "https://www.npmjs.com/package/tailwindcss-skip-link"; - } - { - from = "/S8ZDA"; - to = "/articles/rebuilding-bartik-with-vuejs-tailwind-css-part-2"; - } - { - from = "/Wh48P"; - to = "https://github.com/opdavies/oliverdavies.uk/blob/master/source/_partials/talk/video.html.twig"; - } - { - from = "/XbzS2"; - to = "https://github.com/opdavies/gmail-filter-builder"; - } - { - from = "/YK1VH"; - to = "/articles/psr4-autoloading-test-cases-drupal-7"; - } - { - from = "/YilTZ$"; - to = "https://drupalcamp.london/tickets/training"; - } - { - from = "/about"; - to = "/"; - } - { - from = "/about/cv"; - to = "/cv"; - } - { - from = "/about/speaker"; - to = "/speaker"; - } - { - from = "/about/speaker-information"; - to = "/speaker-information"; - } - { - from = "/acquia-certifications"; - to = "https://certification.acquia.com/registry?fname=Oliver&lname=Davies&city=&state=&country=United+Kingdom&org=&exam=All"; - } - { - from = "/acquia-certified"; - to = "https://certification.acquia.com/?fname=Oliver&lname=Davies"; - } - { - from = "/ansible"; - to = "https://galaxy.ansible.com/opdavies"; - } - { - from = "/ansible-molecule"; - to = "/articles/test-driven-ansible-role-development-molecule"; - } - { - from = "/ansistrano-code"; - to = "https://github.com/opdavies/dransible"; - } - { - from = "/ansistrano-demo"; - to = "https://www.youtube.com/watch?v=PLS4ET7FAcU"; - } - { - from = "/ansistrano-slides"; - to = "/talks/deploying-php-ansible-ansistrano"; - } - { - from = "/archive"; - to = "/blog"; - } - { - from = "/archive/2022-08-28/how-started-programming"; - to = "/daily/2022-08-28/how-started-programming"; - } - { - from = "/archive/2022/08/20/return-to-offline-meetups-conferences"; - to = "/daily/2022/08/20/return-to-offline-meetups-conferences"; - } - { - from = "/archive/2022/08/23/git-gui-command-line"; - to = "/daily/2022/08/23/git-gui-command-line"; - } - { - from = "/archive/2022/08/25/why-i-work-in-neovim"; - to = "/daily/2022/08/25/why-i-work-in-neovim"; - } - { - from = "/archive/2022/08/26/always-be-learning"; - to = "/daily/2022/08/26/always-be-learning"; - } - { - from = "/archive/2022/08/27/giving-back"; - to = "/daily/2022/08/27/giving-back"; - } - { - from = "/archive/2022/08/29/why-like-drupal"; - to = "/daily/2022/08/29/why-like-drupal"; - } - { - from = "/archive/2022/08/30/why-dont-only-use-drupal"; - to = "/daily/2022/08/30/why-dont-only-use-drupal"; - } - { - from = "/archive/2022/08/31/monorepo-or-not"; - to = "/daily/2022/08/31/monorepo-or-not"; - } - { - from = "/archive/2022/09/01/conventional-commits-changelogs"; - to = "/daily/2022/09/01/conventional-commits-changelogs"; - } - { - from = "/archive/2022/09/02/automating-all-the-things-with-ansible"; - to = "/daily/2022/09/02/automating-all-the-things-with-ansible"; - } - { - from = "/archive/2022/09/04/using-ansible-for-server-configuration"; - to = "/daily/2022/09/04/using-ansible-for-server-configuration"; - } - { - from = "/archive/2022/09/05/using-ansible-for-local-configuration"; - to = "/daily/2022/09/05/using-ansible-for-local-configuration"; - } - { - from = "/archive/2022/09/06/deploying-applications-with-ansible"; - to = "/daily/2022/09/06/deploying-applications-with-ansible"; - } - { - from = "/archive/2022/09/07/my-tailwind-css-origin-story"; - to = "/daily/2022/09/07/my-tailwind-css-origin-story"; - } - { - from = "/archive/2022/09/08/keeping-secrets-with-ansible-vault"; - to = "/daily/2022/09/08/keeping-secrets-with-ansible-vault"; - } - { - from = "/archive/2022/09/09/refactoring-tailwind-component"; - to = "/daily/2022/09/09/refactoring-tailwind-component"; - } - { - from = "/archive/2022/09/10/automating-ansible-deployments-ci"; - to = "/daily/2022/09/10/automating-ansible-deployments-ci"; - } - { - from = "/archive/2022/09/11/custom-styles-tailwind-css-apply-theme-custom-plugins"; - to = "/daily/2022/09/11/custom-styles-tailwind-css-apply-theme-custom-plugins"; - } - { - from = "/archive/2022/09/12/month-/daily-emails"; - to = "daily/2022/09/12/month-daily-emails"; - } - { - from = "/archive/2022/09/14/simpletest-drupal-test"; - to = "/daily/2022/09/14/simpletest-drupal-test"; - } - { - from = "/archive/2022/09/16/why-mostly-write-functional-and-integration-tests"; - to = "/daily/2022/09/16/why-mostly-write-functional-and-integration-tests"; - } - { - from = "/archive/2022/09/17/thoughts-automated-code-formatting"; - to = "/daily/2022/09/17/thoughts-automated-code-formatting"; - } - { - from = "/archive/2022/09/19/useful-git-configuration"; - to = "/daily/2022/09/19/useful-git-configuration"; - } - { - from = "/archive/2022/09/20/why-like-trunk-based-development"; - to = "/daily/2022/09/20/why-like-trunk-based-development"; - } - { - from = "/archive/2022/09/21/being-drupal-contribution-mentor"; - to = "/daily/2022/09/21/being-drupal-contribution-mentor"; - } - { - from = "/archive/2022/09/22/releasing-drupal-module-template"; - to = "/daily/2022/09/22/releasing-drupal-module-template"; - } - { - from = "/archive/2022/09/23/adrs-technical-design-documents"; - to = "/daily/2022/09/23/adrs-technical-design-documents"; - } - { - from = "/archive/2022/09/25/using-component-library-for-front-end-development"; - to = "/daily/2022/09/25/using-component-library-for-front-end-development"; - } - { - from = "/archive/2022/09/26/experimenting-with-the-nix-package-manager"; - to = "/daily/2022/09/26/experimenting-with-the-nix-package-manager"; - } - { - from = "/archive/2022/09/27/mentoring-with-drupal-career-online"; - to = "/daily/2022/09/27/mentoring-with-drupal-career-online"; - } - { - from = "/archive/2022/09/28/mob-programming-php-south-wales"; - to = "/daily/2022/09/28/mob-programming-php-south-wales"; - } - { - from = "/archive/2022/09/30/store-wars-vuejs"; - to = "/daily/2022/09/30/store-wars-vuejs"; - } - { - from = "/archive/2022/10/12/overcoming-deployment-anxiety"; - to = "/daily/2022/10/12/overcoming-deployment-anxiety"; - } - { - from = "/archive/2022/10/17/14-years-drupalorg"; - to = "/daily/2022/10/17/14-years-drupalorg"; - } - { - from = "/archive/2022/10/18/pair-mob-programming"; - to = "/daily/2022/10/18/pair-mob-programming"; - } - { - from = "/archive/2022/10/20/cherry-picking-commits-is-an-anti-pattern"; - to = "/daily/2022/10/20/cherry-picking-commits-is-an-anti-pattern"; - } - { - from = "/archive/2022/10/20/run-vs-task-runners/?"; - to = "/archive/2022/10/19/run-vs-task-runners"; - } - { - from = "/archive/2022/10/21/automated-testing-and-test-driven-development-are-not-the-same"; - to = "/daily/2022/10/21/automated-testing-and-test-driven-development-are-not-the-same"; - } - { - from = "/archive/2022/10/24/looking-at-localgov-drupal"; - to = "/daily/2022/10/24/looking-at-localgov-drupal"; - } - { - from = "/archive/2022/10/25/what-are-drupal-distributions"; - to = "/daily/2022/10/25/what-are-drupal-distributions"; - } - { - from = "/archive/2022/10/26/neovim-as-a-personalised-development-environment"; - to = "/daily/2022/10/26/neovim-as-a-personalised-development-environment"; - } - { - from = "/archive/2022/10/27/getting-back-into-live-streaming"; - to = "/daily/2022/10/27/getting-back-into-live-streaming"; - } - { - from = "/archive/2022/10/28/why-write-framework-agnostic-packages"; - to = "/daily/2022/10/28/why-write-framework-agnostic-packages"; - } - { - from = "/archive/2022/10/29/the-open-source-first-development-workflow"; - to = "/daily/2022/10/29/the-open-source-first-development-workflow"; - } - { - from = "/archive/2022/10/30/refactoring-one-large-test-into-multiple-smaller-tests"; - to = "/daily/2022/10/30/refactoring-one-large-test-into-multiple-smaller-tests"; - } - { - from = "/archive/2022/11/08/are-sprints-incompatible-with-continuous-deployment"; - to = "/daily/2022/11/08/are-sprints-incompatible-with-continuous-deployment"; - } - { - from = "/archive/2022/11/09/your-conference-talk-has-been-accepted"; - to = "/daily/2022/11/09/your-conference-talk-has-been-accepted"; - } - { - from = "/archive/2022/11/12/building-a-minimum-viable-product-and-managing-technical-debt"; - to = "/daily/2022/11/12/building-a-minimum-viable-product-and-managing-technical-debt"; - } - { - from = "/archive/2022/11/12/creating-small-proof-of-concept-application-afternoon"; - to = "/daily/2022/11/12/creating-small-proof-of-concept-application-afternoon"; - } - { - from = "/archive/2022/11/13/how-i-manage-multiple-drupal-websites-using-the-same-codebase"; - to = "/daily/2022/11/13/how-i-manage-multiple-drupal-websites-using-the-same-codebase"; - } - { - from = "/archive/2022/11/14/camel-case-or-snake-case-for-test-methods"; - to = "/daily/2022/11/14/camel-case-or-snake-case-for-test-methods"; - } - { - from = "/archive/2022/11/15/writing-good-automated-test-names"; - to = "/daily/2022/11/15/writing-good-automated-test-names"; - } - { - from = "/archive/2022/11/16/why-don't-you-write-automated-tests"; - to = "/daily/2022/11/16/why-don't-you-write-automated-tests"; - } - { - from = "/archive/2022/11/17/agnostic-ci-pipelines-with-run-files"; - to = "/daily/2022/11/17/agnostic-ci-pipelines-with-run-files"; - } - { - from = "/archive/2022/11/18/one-test-a-day-keeps-bugs-away"; - to = "/daily/2022/11/18/one-test-a-day-keeps-bugs-away"; - } - { - from = "/archive/2022/11/19/are-missing-tests-a-blocker-to-refactoring"; - to = "/daily/2022/11/19/are-missing-tests-a-blocker-to-refactoring"; - } - { - from = "/archive/2022/11/20/version-controlled-commented-out-code"; - to = "/daily/2022/11/20/version-controlled-commented-out-code"; - } - { - from = "/archive/2022/11/21/git-tricks-to-avoid-committing-commented-out-and-other-unneeded-code"; - to = "/daily/2022/11/21/git-tricks-to-avoid-committing-commented-out-and-other-unneeded-code"; - } - { - from = "/archive/2022/11/22/tldr"; - to = "/daily/2022/11/22/tldr"; - } - { - from = "/archive/2022/11/23/do-you-need-to-branch"; - to = "/daily/2022/11/23/do-you-need-to-branch"; - } - { - from = "/archive/2022/11/24/doing-the-simplest-possible-thing"; - to = "/daily/2022/11/24/doing-the-simplest-possible-thing"; - } - { - from = "/archive/2022/11/25/plan-then-code"; - to = "/daily/2022/11/25/plan-then-code"; - } - { - from = "/archive/2022/11/30/ship-show-or-ask"; - to = "/daily/2022/11/30/ship-show-or-ask"; - } - { - from = "/archive/2022/12/01/writing-readable-code"; - to = "/daily/2022/12/01/writing-readable-code"; - } - { - from = "/archive/2022/12/02/commit-and-push-something-every-day"; - to = "/daily/2022/12/02/commit-and-push-something-every-day"; - } - { - from = "/archive/2022/12/03/what-to-do-with-todo-comments"; - to = "/daily/2022/12/03/what-to-do-with-todo-comments"; - } - { - from = "/archive/2022/12/04/writing-why-first-user-stories"; - to = "/daily/2022/12/04/writing-why-first-user-stories"; - } - { - from = "/archive/2022/12/05/outcomes-or-output"; - to = "/daily/2022/12/05/outcomes-or-output"; - } - { - from = "/archive/2022/12/06/should-you-comment-your-code"; - to = "/daily/2022/12/06/should-you-comment-your-code"; - } - { - from = "/archive/2022/12/07/separating-releases-from-deployments-with-feature-flags"; - to = "/daily/2022/12/07/separating-releases-from-deployments-with-feature-flags"; - } - { - from = "/archive/2022/12/08/the-decorator-design-pattern"; - to = "/daily/2022/12/08/the-decorator-design-pattern"; - } - { - from = "/archive/2022/12/09/how-and-why-i-started-using-postcss"; - to = "/daily/2022/12/09/how-and-why-i-started-using-postcss"; - } - { - from = "/archive/2022/12/10/managing-databases-with-neovim-and-docker"; - to = "/daily/2022/12/10/managing-databases-with-neovim-and-docker"; - } - { - from = "/archive/2022/12/15/happy-drupal-10-release-day"; - to = "/daily/2022/12/15/happy-drupal-10-release-day"; - } - { - from = "/archive/2022/12/20/automating-all-the-things,-including-infrastructure"; - to = "/daily/2022/12/20/automating-all-the-things,-including-infrastructure"; - } - { - from = "/archive/2022/12/21/duck-typing"; - to = "/daily/2022/12/21/duck-typing"; - } - { - from = "/archive/2022/12/22/the-boy-scout-rule"; - to = "/daily/2022/12/22/the-boy-scout-rule"; - } - { - from = "/archive/2022/12/23/speaking-at-php-stoke-and-nordevcon"; - to = "/daily/2022/12/23/speaking-at-php-stoke-and-nordevcon"; - } - { - from = "/archive/2022/12/28/debugging-gitignore-rules"; - to = "/daily/2022/12/28/debugging-gitignore-rules"; - } - { - from = "/archive/2022/12/29/what-is-the-cost-of-a-bug"; - to = "/daily/2022/12/29/what-is-the-cost-of-a-bug"; - } - { - from = "/archive/2022/12/30/tests-are-living-documentation"; - to = "/daily/2022/12/30/tests-are-living-documentation"; - } - { - from = "/archive/2022/12/31/just-start-writing"; - to = "/daily/2022/12/31/just-start-writing"; - } - { - from = "/archive/2023/01/01/types-and-static-analysis-saved-me-today"; - to = "/daily/2023/01/01/types-and-static-analysis-saved-me-today"; - } - { - from = "/archive/2023/01/02/dont-use-arbitrary-values-in-tailwind-css"; - to = "/daily/2023/01/02/dont-use-arbitrary-values-in-tailwind-css"; - } - { - from = "/archive/2023/01/03/tailwind-css-extensibility-is-one-of-its-best-features"; - to = "/daily/2023/01/03/tailwind-css-extensibility-is-one-of-its-best-features"; - } - { - from = "/archive/2023/01/04/testable-tailwind-css-plugins"; - to = "/daily/2023/01/04/testable-tailwind-css-plugins"; - } - { - from = "/archive/2023/01/05/adding-tailwind-to-an-existing-project"; - to = "/daily/2023/01/05/adding-tailwind-to-an-existing-project"; - } - { - from = "/archive/2023/01/06/utility-first-or-utility-last"; - to = "/daily/2023/01/06/utility-first-or-utility-last"; - } - { - from = "/archive/2023/01/07/reducing-utility-class-duplication"; - to = "/daily/2023/01/07/reducing-utility-class-duplication"; - } - { - from = "/archive/2023/01/16/back-after-php-stoke"; - to = "/daily/2023/01/16/back-after-php-stoke"; - } - { - from = "/archive/2023/01/17/things-to-know-about-php"; - to = "/daily/2023/01/17/things-to-know-about-php"; - } - { - from = "/archive/2023/01/18/drupal-turns-22"; - to = "/daily/2023/01/18/drupal-turns-22"; - } - { - from = "/archive/2023/01/19/long-term-maintainability-with-utility-classes-and-tailwind-css"; - to = "/daily/2023/01/19/long-term-maintainability-with-utility-classes-and-tailwind-css"; - } - { - from = "/archive/2023/01/20/tailwinds-classes-are-your-classes"; - to = "/daily/2023/01/20/tailwinds-classes-are-your-classes"; - } - { - from = "/archive/2023/01/21/tailwind-not-just-translating-css-to-utility-classes"; - to = "/daily/2023/01/21/tailwind-not-just-translating-css-to-utility-classes"; - } - { - from = "/archive/2023/01/22/building-bootstrap-css-examples-with-tailwind"; - to = "/daily/2023/01/22/building-bootstrap-css-examples-with-tailwind"; - } - { - from = "/archive/2023/01/23/debugging-with-git-bisect"; - to = "/daily/2023/01/23/debugging-with-git-bisect"; - } - { - from = "/archive/2023/01/24/small-commits-and-good-commit-messges"; - to = "/daily/2023/01/24/small-commits-and-good-commit-messges"; - } - { - from = "/archive/2023/01/25/to-squash-or-not-to-squash"; - to = "/daily/2023/01/25/to-squash-or-not-to-squash"; - } - { - from = "/archive/2023/02/07/astro-as-a-static-site-generator"; - to = "/daily/2023/02/07/astro-as-a-static-site-generator"; - } - { - from = "/archive/2023/02/08/fetching-api-data-with-astro"; - to = "/daily/2023/02/08/fetching-api-data-with-astro"; - } - { - from = "/archive/2023/02/09/creating-api-endpoints-with-astro"; - to = "/daily/2023/02/09/creating-api-endpoints-with-astro"; - } - { - from = "/archive/2023/02/16/tailwind-css-at-the-bristol-software-development-meetup"; - to = "/daily/2023/02/16/tailwind-css-at-the-bristol-software-development-meetup"; - } - { - from = "/archive/2023/02/17/upgrading-my-drupal-example-project-to-drupal-10"; - to = "/daily/2023/02/17/upgrading-my-drupal-example-project-to-drupal-10"; - } - { - from = "/archive/2023/02/18/drupal-10-version-of-override-node-options"; - to = "/daily/2023/02/18/drupal-10-version-of-override-node-options"; - } - { - from = "/archive/2023/02/19/clients-dont-care-which-design-pattern-you-use"; - to = "/daily/2023/02/19/clients-dont-care-which-design-pattern-you-use"; - } - { - from = "/archive/2023/02/20/tailwind-why-i-prefer-to-extract-html-components"; - to = "/daily/2023/02/20/tailwind-why-i-prefer-to-extract-html-components"; - } - { - from = "/archive/2023/03/01/tailwind-css-at-the-norfolk-developer-conference"; - to = "/daily/2023/03/01/tailwind-css-at-the-norfolk-developer-conference"; - } - { - from = "/archive/2023/03/02/busy-working-on-client-projects"; - to = "/daily/2023/03/02/busy-working-on-client-projects"; - } - { - from = "/archive/2023/03/03/adding-a-localgov-drupal-example"; - to = "/daily/2023/03/03/adding-a-localgov-drupal-example"; - } - { - from = "/archive/2023/03/04/why-i-built-a-tool-to-generate-configuration-files"; - to = "/daily/2023/03/04/why-i-built-a-tool-to-generate-configuration-files"; - } - { - from = "/archive/2023/03/05/mentoring-for-school-of-code"; - to = "/daily/2023/03/05/mentoring-for-school-of-code"; - } - { - from = "/archive/2023/03/08/automating-infrastructure-with-iac"; - to = "/daily/2023/03/08/automating-infrastructure-with-iac"; - } - { - from = "/archive/2023/03/09/in-what-language-should-i-write-my-automation"; - to = "/daily/2023/03/09/in-what-language-should-i-write-my-automation"; - } - { - from = "/archive/2023/03/13/what-problem-am-i-trying-to-solve"; - to = "/daily/2023/03/13/what-problem-am-i-trying-to-solve"; - } - { - from = "/archive/2023/03/14/automating-all-the-things"; - to = "/daily/2023/03/14/automating-all-the-things"; - } - { - from = "/archive/2023/03/15/the-benefits-of-automation"; - to = "/daily/2023/03/15/the-benefits-of-automation"; - } - { - from = "/archive/2023/03/21/there-isnt-a-tailwind-looking-site"; - to = "/daily/2023/03/21/there-isnt-a-tailwind-looking-site"; - } - { - from = "/archive/2023/03/22/with-utility-styles-your-css-stops-growing"; - to = "/daily/2023/03/22/with-utility-styles-your-css-stops-growing"; - } - { - from = "/archive/2023/03/27/software-development-solving-problems-and-adding-value"; - to = "/daily/2023/03/27/software-development-solving-problems-and-adding-value"; - } - { - from = "/archive/2023/04/07/speaking-at-php-london"; - to = "/daily/2023/04/07/speaking-at-php-london"; - } - { - from = "/archive/2023/04/08/why-i-use-tmux"; - to = "/daily/2023/04/08/why-i-use-tmux"; - } - { - from = "/archive/2023/04/09/nix-nixos-home-manager-and-wsl2"; - to = "/daily/2023/04/09/nix-nixos-home-manager-and-wsl2"; - } - { - from = "/archive/2023/04/10/how-i-use-neovim-for-writing-php"; - to = "/daily/2023/04/10/how-i-use-neovim-for-writing-php"; - } - { - from = "/archive/2023/04/11/just-vs-make"; - to = "/daily/2023/04/11/just-vs-make"; - } - { - from = "/archive/2023/04/12/cleaner-php-code-with-promoted-constructor-properties"; - to = "/daily/2023/04/12/cleaner-php-code-with-promoted-constructor-properties"; - } - { - from = "/archive/2023/04/13/immutable-read-only-properties-in-php-8-1"; - to = "/daily/2023/04/13/immutable-read-only-properties-in-php-8-1"; - } - { - from = "/archive/2023/04/14/data-transfer-objects-and-value-objects"; - to = "/daily/2023/04/14/data-transfer-objects-and-value-objects"; - } - { - from = "/archive/2023/04/15/automatically-running-commands-with-nodemon"; - to = "/daily/2023/04/15/automatically-running-commands-with-nodemon"; - } - { - from = "/archive/2023/04/16/refactoring-with-readonly-classes-in-php-8-2"; - to = "/daily/2023/04/16/refactoring-with-readonly-classes-in-php-8-2"; - } - { - from = "/archive/2023/04/17/introducing-feature-flags-to-build-configs"; - to = "/daily/2023/04/17/introducing-feature-flags-to-build-configs"; - } - { - from = "/archive/2023/04/18/consistency-is-key"; - to = "/daily/2023/04/18/consistency-is-key"; - } - { - from = "/archive/2023/04/19/camel-case-or-snake-case-for-drupal-code"; - to = "/daily/2023/04/19/camel-case-or-snake-case-for-drupal-code"; - } - { - from = "/archive/2023/04/20/micro-refactorings"; - to = "/daily/2023/04/20/micro-refactorings"; - } - { - from = "/archive/2023/04/21/making-my-drupal-module-template-drupal-10-compatible"; - to = "/daily/2023/04/21/making-my-drupal-module-template-drupal-10-compatible"; - } - { - from = "/archive/2023/04/22/build-configs-as-a-service"; - to = "/daily/2023/04/22/build-configs-as-a-service"; - } - { - from = "/archive/2023/04/23/laravel-pipelines"; - to = "/daily/2023/04/23/laravel-pipelines"; - } - { - from = "/archive/2023/04/24/ci-pipelines-should-start-locally"; - to = "/daily/2023/04/24/ci-pipelines-should-start-locally"; - } - { - from = "/archive/2023/04/25/shortening-the-feedback-loop-even-more"; - to = "/daily/2023/04/25/shortening-the-feedback-loop-even-more"; - } - { - from = "/archive/2023/04/26/tdd-structure-a-new-test-by-writing-comments-first"; - to = "/daily/2023/04/26/tdd-structure-a-new-test-by-writing-comments-first"; - } - { - from = "/archive/2023/04/27/tdd-write-the-test-backwards"; - to = "/daily/2023/04/27/tdd-write-the-test-backwards"; - } - { - from = "/archive/2023/04/30/will-we-see-drupal-7-100"; - to = "/daily/2023/04/30/will-we-see-drupal-7-100"; - } - { - from = "/archive/2023/05/01/should-drupal-7-support-be-extended-again"; - to = "/daily/2023/05/01/should-drupal-7-support-be-extended-again"; - } - { - from = "/archive/2023/05/02/does-it-depend-on-who-you-ask"; - to = "/daily/2023/05/02/does-it-depend-on-who-you-ask"; - } - { - from = "/archive/2023/05/03/just-because-core-is-supported"; - to = "/daily/2023/05/03/just-because-core-is-supported"; - } - { - from = "/archive/2023/05/04/speaking-at-the-symfony-uk-meetup-london"; - to = "/daily/2023/05/04/speaking-at-the-symfony-uk-meetup-london"; - } - { - from = "/archive/2023/05/05/getting-to-green"; - to = "/daily/2023/05/05/getting-to-green"; - } - { - from = "/archive/2023/05/06/why-its-important-to-see-the-test-fail"; - to = "/daily/2023/05/06/why-its-important-to-see-the-test-fail"; - } - { - from = "/archive/2023/05/07/you-dont-need-to-think-about-what-to-do-next"; - to = "/daily/2023/05/07/you-dont-need-to-think-about-what-to-do-next"; - } - { - from = "/archive/2023/05/08/only-write-enough-code-to-get-a-failing-test"; - to = "/daily/2023/05/08/only-write-enough-code-to-get-a-failing-test"; - } - { - from = "/archive/2023/05/09/the-single-responsibility-principle"; - to = "/daily/2023/05/09/the-single-responsibility-principle"; - } - { - from = "/archive/2023/05/10/tailwind-css-makes-change-easier"; - to = "/daily/2023/05/10/tailwind-css-makes-change-easier"; - } - { - from = "/archive/2023/05/11/why-i-like-pair-and-mob-programming"; - to = "/daily/2023/05/11/why-i-like-pair-and-mob-programming"; - } - { - from = "/archive/2023/05/12/always-listen-to-the-mob"; - to = "/daily/2023/05/12/always-listen-to-the-mob"; - } - { - from = "/archive/2023/05/13/when-you-do-things-right"; - to = "/daily/2023/05/13/when-you-do-things-right"; - } - { - from = "/archive/2023/05/14/releasing-small-changes-often-is-less-risky"; - to = "/daily/2023/05/14/releasing-small-changes-often-is-less-risky"; - } - { - from = "/archive/2023/05/15/is-the-drupal-release-cycle-too-fast"; - to = "/daily/2023/05/15/is-the-drupal-release-cycle-too-fast"; - } - { - from = "/archive/2023/05/16/mastering-your-tools-improves-productivity"; - to = "/daily/2023/05/16/mastering-your-tools-improves-productivity"; - } - { - from = "/archive/2023/05/17/what-is-deprecated-code"; - to = "/daily/2023/05/17/what-is-deprecated-code"; - } - { - from = "/archive/2023/05/18/why-is-backward-compatibility-important"; - to = "/daily/2023/05/18/why-is-backward-compatibility-important"; - } - { - from = "/archive/2023/05/19/semantic-versioning"; - to = "/daily/2023/05/19/semantic-versioning"; - } - { - from = "/archive/2023/05/20/a-minor-breaking-change"; - to = "/daily/2023/05/20/a-minor-breaking-change"; - } - { - from = "/archive/2023/05/21/drupal-9-almost-end-of-life-already"; - to = "/daily/2023/05/21/drupal-9-almost-end-of-life-already"; - } - { - from = "/archive/2023/06/05/how-long-should-a-feature-flag-live"; - to = "/daily/2023/06/05/how-long-should-a-feature-flag-live"; - } - { - from = "/archive/2023/06/06/drupal-7-end-of-life-extended"; - to = "/daily/2023/06/06/drupal-7-end-of-life-extended"; - } - { - from = "/archive/2023/06/07/what-does-the-drupal-7-eol-extension-mean-to-you"; - to = "/daily/2023/06/07/what-does-the-drupal-7-eol-extension-mean-to-you"; - } - { - from = "/archive/2023/06/08/write-less-drupal-code"; - to = "/daily/2023/06/08/write-less-drupal-code"; - } - { - from = "/archive/2023/06/09/drupal-is-built-by-people"; - to = "/daily/2023/06/09/drupal-is-built-by-people"; - } - { - from = "/archive/2023/06/10/how-do-you-know-when-to-remove-a-feature-flag"; - to = "/daily/2023/06/10/how-do-you-know-when-to-remove-a-feature-flag"; - } - { - from = "/archive/2023/06/11/failing-fast"; - to = "/daily/2023/06/11/failing-fast"; - } - { - from = "/archive/2023/06/12/feature-flags-in-a-multi-tenancy-application"; - to = "/daily/2023/06/12/feature-flags-in-a-multi-tenancy-application"; - } - { - from = "/archive/2023/06/13/should-you-feature-flag-everything"; - to = "/daily/2023/06/13/should-you-feature-flag-everything"; - } - { - from = "/archive/2023/06/14/what-if-there-was-no-open-source-software"; - to = "/daily/2023/06/14/what-if-there-was-no-open-source-software"; - } - { - from = "/archive/2023/06/15/done-is-better-than-perfect"; - to = "/daily/2023/06/15/done-is-better-than-perfect"; - } - { - from = "/archive/2023/06/16/make-the-easy-change"; - to = "/daily/2023/06/16/make-the-easy-change"; - } - { - from = "/archive/2023/06/17/avoid-git-merge-hell-with-trunk-based-development"; - to = "/daily/2023/06/17/avoid-git-merge-hell-with-trunk-based-development"; - } - { - from = "/archive/2023/06/18/are-you-doing-ci-cd"; - to = "/daily/2023/06/18/are-you-doing-ci-cd"; - } - { - from = "/archive/2023/06/19/should-you-upgrade-from-drupal-7-to-drupal-10"; - to = "/daily/2023/06/19/should-you-upgrade-from-drupal-7-to-drupal-10"; - } - { - from = "/archive/2023/06/20/should-you-deploy-on-a-friday"; - to = "/daily/2023/06/20/should-you-deploy-on-a-friday"; - } - { - from = "/archive/2023/06/21/deployments-or-releases"; - to = "/daily/2023/06/21/deployments-or-releases"; - } - { - from = "/archive/2023/06/22/fail-to-lear"; - to = "/daily/2023/06/22/fail-to-lear"; - } - { - from = "/archive/2023/06/23/why-keep-a-changelog"; - to = "/daily/2023/06/23/why-keep-a-changelog"; - } - { - from = "/archive/2023/06/24/credited-on-200-fixed-issues"; - to = "/daily/2023/06/24/credited-on-200-fixed-issues"; - } - { - from = "/archive/2023/06/25/do-you-need-permission-test-driven-development"; - to = "/daily/2023/06/25/do-you-need-permission-test-driven-development"; - } - { - from = "/archive/2023/06/26/is-any-code-without-tests-legacy"; - to = "/daily/2023/06/26/is-any-code-without-tests-legacy"; - } - { - from = "/archive/2023/06/27/ci-pipeline-additional-team-member"; - to = "/daily/2023/06/27/ci-pipeline-additional-team-member"; - } - { - from = "/archive/2023/06/28/theres-no-value-in-a-broken-ci-pipeline"; - to = "/daily/2023/06/28/theres-no-value-in-a-broken-ci-pipeline"; - } - { - from = "/archive/2023/06/29/tests-wont-tell-you-if-your-code-works"; - to = "/daily/2023/06/29/tests-wont-tell-you-if-your-code-works"; - } - { - from = "/archive/2023/06/30/how-did-you-learn-automated-testing"; - to = "/daily/2023/06/30/how-did-you-learn-automated-testing"; - } - { - from = "/archive/2023/07/01/once-you-start-writing-tests-you-cant-stop"; - to = "/daily/2023/07/01/once-you-start-writing-tests-you-cant-stop"; - } - { - from = "/archive/2023/07/02/docker-or-nix"; - to = "/daily/2023/07/02/docker-or-nix"; - } - { - from = "/archive/2023/07/03/why-write-custom-assertions-in-your-tests"; - to = "/daily/2023/07/03/why-write-custom-assertions-in-your-tests"; - } - { - from = "/archive/2023/07/04/think-smaller-with-tdd"; - to = "/daily/2023/07/04/think-smaller-with-tdd"; - } - { - from = "/archive/2023/07/05/services-vs-actions"; - to = "/daily/2023/07/05/services-vs-actions"; - } - { - from = "/archive/2023/07/06/automated-testing-is-more-than-just-unit-testing"; - to = "/daily/2023/07/06/automated-testing-is-more-than-just-unit-testing"; - } - { - from = "/archive/2023/07/15/test-driven-development-makes-you-more-productive"; - to = "/daily/2023/07/15/test-driven-development-makes-you-more-productive"; - } - { - from = "/archive/2023/07/16/when-writing-a-failing-test-youre-designing-your-code"; - to = "/daily/2023/07/16/when-writing-a-failing-test-youre-designing-your-code"; - } - { - from = "/archive/2023/07/17/too-many-choices"; - to = "/daily/2023/07/17/too-many-choices"; - } - { - from = "/archive/2023/07/18/tdd-as-a-concept-is-simple-but-tdd-is-difficult"; - to = "/daily/2023/07/18/tdd-as-a-concept-is-simple-but-tdd-is-difficult"; - } - { - from = "/archive/2023/07/19/tdd-is-like-clicker-training"; - to = "/daily/2023/07/19/tdd-is-like-clicker-training"; - } - { - from = "/archive/2023/07/20/tests-as-communication"; - to = "/daily/2023/07/20/tests-as-communication"; - } - { - from = "/archive/2023/07/21/comments-as-communication"; - to = "/daily/2023/07/21/comments-as-communication"; - } - { - from = "/archive/2023/07/22/more-code-more-problems"; - to = "/daily/2023/07/22/more-code-more-problems"; - } - { - from = "/archive/2023/07/23/tomorrow-is-easier-if-todays-code-is-simpler"; - to = "/daily/2023/07/23/tomorrow-is-easier-if-todays-code-is-simpler"; - } - { - from = "/archive/2023/07/24/testing-is-all-about-confidence"; - to = "/daily/2023/07/24/testing-is-all-about-confidence"; - } - { - from = "/archive/2023/07/25/working-backwards"; - to = "/daily/2023/07/25/working-backwards"; - } - { - from = "/archive/2023/07/26/prove-the-concept"; - to = "/daily/2023/07/26/prove-the-concept"; - } - { - from = "/archive/2023/07/27/stick-to-conventions"; - to = "/daily/2023/07/27/stick-to-conventions"; - } - { - from = "/archive/2023/07/28/generic-commit-messages"; - to = "/daily/2023/07/28/generic-commit-messages"; - } - { - from = "/archive/2023/07/29/should-i-wait-to-upgrade-from-drupal-7"; - to = "/daily/2023/07/29/should-i-wait-to-upgrade-from-drupal-7"; - } - { - from = "/archive/2023/07/30/commit-often-deploy-often"; - to = "/daily/2023/07/30/commit-often-deploy-often"; - } - { - from = "/archive/2023/07/31/upgrading-from-drupal-9-is-easier"; - to = "/daily/2023/07/31/upgrading-from-drupal-9-is-easier"; - } - { - from = "/archive/2023/08/01/maintaining-a-module-used-on-35000-drupal-websites"; - to = "/daily/2023/08/01/maintaining-a-module-used-on-35000-drupal-websites"; - } - { - from = "/archive/2023/08/02/a-crash-course-into-drupal-testing"; - to = "/daily/2023/08/02/a-crash-course-into-drupal-testing"; - } - { - from = "/archive/2023/08/03/what-problem-are-we-trying-to-solve"; - to = "/daily/2023/08/03/what-problem-are-we-trying-to-solve"; - } - { - from = "/archive/2023/08/04/laravel-prompts"; - to = "/daily/2023/08/04/laravel-prompts"; - } - { - from = "/archive/2023/08/05/use-drupal-to-own-your-content"; - to = "/daily/2023/08/05/use-drupal-to-own-your-content"; - } - { - from = "/archive/2023/08/06/yagni"; - to = "/daily/2023/08/06/yagni"; - } - { - from = "/archive/2023/08/07/tests-make-upgrades-less-risky"; - to = "/daily/2023/08/07/tests-make-upgrades-less-risky"; - } - { - from = "/archive/2023/08/08/8-years-of-dotfiles"; - to = "/daily/2023/08/08/8-years-of-dotfiles"; - } - { - from = "/archive/2023/08/09/vim-is-my-lightsaber"; - to = "/daily/2023/08/09/vim-is-my-lightsaber"; - } - { - from = "/archive/2023/08/10/testing-fixed-prices-and-bug-free-guarantees"; - to = "/daily/2023/08/10/testing-fixed-prices-and-bug-free-guarantees"; - } - { - from = "/archive/2023/08/11/everyone-tests-their-code"; - to = "/daily/2023/08/11/everyone-tests-their-code"; - } - { - from = "/archive/2023/08/12/does-not-writing-tests-actually-save-time"; - to = "/daily/2023/08/12/does-not-writing-tests-actually-save-time"; - } - { - from = "/archive/2023/08/13/dont-estimate-separately-for-testing"; - to = "/daily/2023/08/13/dont-estimate-separately-for-testing"; - } - { - from = "/archive/2023/08/14/why-keep-a-dotfiles-repository"; - to = "/daily/2023/08/14/why-keep-a-dotfiles-repository"; - } - { - from = "/archive/2023/08/15/writing-test-and-implementation-code-are-the-same-task"; - to = "/daily/2023/08/15/writing-test-and-implementation-code-are-the-same-task"; - } - { - from = "/archive/2023/08/16/writing-tests-in-your-own-time"; - to = "/daily/2023/08/16/writing-tests-in-your-own-time"; - } - { - from = "/archive/2023/08/17/writing-custom-assertions-in-your-tests"; - to = "/daily/2023/08/17/writing-custom-assertions-in-your-tests"; - } - { - from = "/archive/2023/08/18/types-vs-tests"; - to = "/daily/2023/08/18/types-vs-tests"; - } - { - from = "/archive/2023/08/19/asserting-all-the-things"; - to = "/daily/2023/08/19/asserting-all-the-things"; - } - { - from = "/archive/2023/08/20/php-types-and-assertions"; - to = "/daily/2023/08/20/php-types-and-assertions"; - } - { - from = "/archive/2023/08/21/which-part-of-the-ci-pipeline-has-the-most-value"; - to = "/daily/2023/08/21/which-part-of-the-ci-pipeline-has-the-most-value"; - } - { - from = "/archive/2023/08/22/deployments-with-your-ci-pipeline"; - to = "/daily/2023/08/22/deployments-with-your-ci-pipeline"; - } - { - from = "/archive/2023/08/23/dont-use-third-party-services-directly"; - to = "/daily/2023/08/23/dont-use-third-party-services-directly"; - } - { - from = "/archive/2023/08/24/testing-multiple-implementations-with-contract-tests"; - to = "/daily/2023/08/24/testing-multiple-implementations-with-contract-tests"; - } - { - from = "/archive/2023/08/25/start-with-a-vague-test"; - to = "/daily/2023/08/25/start-with-a-vague-test"; - } - { - from = "/archive/2023/08/26/work-in-small-chunks"; - to = "/daily/2023/08/26/work-in-small-chunks"; - } - { - from = "/archive/2023/08/27/pull-requests-are-great-for-open-source"; - to = "/daily/2023/08/27/pull-requests-are-great-for-open-source"; - } - { - from = "/archive/2023/08/28/pair-and-mob-programming-are-continuous-code-review"; - to = "/daily/2023/08/28/pair-and-mob-programming-are-continuous-code-review"; - } - { - from = "/archive/2023/08/29/ci-pipelines-are-an-automated-code-review"; - to = "/daily/2023/08/29/ci-pipelines-are-an-automated-code-review"; - } - { - from = "/archive/2023/08/30/tdd-and-unexpected-errors"; - to = "/daily/2023/08/30/tdd-and-unexpected-errors"; - } - { - from = "/archive/2023/08/31/code-review-discourages-small-refactorings"; - to = "/daily/2023/08/31/code-review-discourages-small-refactorings"; - } - { - from = "/archive/2023/09/01/non-blocking-code-reviews"; - to = "/daily/2023/09/01/non-blocking-code-reviews"; - } - { - from = "/archive/2023/09/02/planning-first-or-reviewing-last"; - to = "/daily/2023/09/02/planning-first-or-reviewing-last"; - } - { - from = "/archive/2023/09/03/including-time-for-tests-in-estimates"; - to = "/daily/2023/09/03/including-time-for-tests-in-estimates"; - } - { - from = "/archive/2023/09/04/charging-more-not-to-write-tests"; - to = "/daily/2023/09/04/charging-more-not-to-write-tests"; - } - { - from = "/archive/2023/09/05/spring-clean-before-upgrading"; - to = "/daily/2023/09/05/spring-clean-before-upgrading"; - } - { - from = "/archive/2023/09/06/verbosity-over-abstraction"; - to = "/daily/2023/09/06/verbosity-over-abstraction"; - } - { - from = "/archive/2023/09/07/what-s-the-simplest-test-to-begin-with"; - to = "/daily/2023/09/07/what-s-the-simplest-test-to-begin-with"; - } - { - from = "/archive/2023/09/08/do-you-proactively-refactor-your-code"; - to = "/daily/2023/09/08/do-you-proactively-refactor-your-code"; - } - { - from = "/archive/2023/09/09/a-lack-of-tests-discourages-refactoring"; - to = "/daily/2023/09/09/a-lack-of-tests-discourages-refactoring"; - } - { - from = "/archive/2023/09/10/code-is-read-more-than-it-s-written"; - to = "/daily/2023/09/10/code-is-read-more-than-it-s-written"; - } - { - from = "/archive/2023/09/11/dont-use-else"; - to = "/daily/2023/09/11/dont-use-else"; - } - { - from = "/archive/2023/09/12/dont-inject-too-many-dependencies"; - to = "/daily/2023/09/12/dont-inject-too-many-dependencies"; - } - { - from = "/archive/2023/09/13/which-type-of-test-should-i-use"; - to = "/daily/2023/09/13/which-type-of-test-should-i-use"; - } - { - from = "/archive/2023/09/14/outside-in-or-inside-out"; - to = "/daily/2023/09/14/outside-in-or-inside-out"; - } - { - from = "/archive/2023/09/15/types-or-no-types"; - to = "/daily/2023/09/15/types-or-no-types"; - } - { - from = "/archive/2023/09/16/how-not-to-break-36-000-websites"; - to = "/daily/2023/09/16/how-not-to-break-36-000-websites"; - } - { - from = "/archive/2023/09/17/how-much-refactoring-should-i-be-doing"; - to = "/daily/2023/09/17/how-much-refactoring-should-i-be-doing"; - } - { - from = "/archive/2023/09/18/increasing-test-coverage-with-regression-tests"; - to = "/daily/2023/09/18/increasing-test-coverage-with-regression-tests"; - } - { - from = "/archive/2023/09/19/stop-writing-tests"; - to = "/daily/2023/09/19/stop-writing-tests"; - } - { - from = "/archive/2023/09/20/why-i-prefer-types"; - to = "/daily/2023/09/20/why-i-prefer-types"; - } - { - from = "/archive/2023/09/21/buggy-software-causes-reputational-damage"; - to = "/daily/2023/09/21/buggy-software-causes-reputational-damage"; - } - { - from = "/archive/2023/09/22/documentation-and-comments-get-stale"; - to = "/daily/2023/09/22/documentation-and-comments-get-stale"; - } - { - from = "/archive/2023/09/23/not-everyone-writes-automated-tests"; - to = "/daily/2023/09/23/not-everyone-writes-automated-tests"; - } - { - from = "/archive/2023/09/24/test-to-save-your-job"; - to = "/daily/2023/09/24/test-to-save-your-job"; - } - { - from = "/archive/2023/09/25/should-you-use-a-staging-environment"; - to = "/daily/2023/09/25/should-you-use-a-staging-environment"; - } - { - from = "/archive/2023/09/26/which-branch-should-be-in-which-environment"; - to = "/daily/2023/09/26/which-branch-should-be-in-which-environment"; - } - { - from = "/archive/2023/09/27/separating-environments-with-feature-flags"; - to = "/daily/2023/09/27/separating-environments-with-feature-flags"; - } - { - from = "/archive/2023/09/28/feature-flags-enable-continuous-integration"; - to = "/daily/2023/09/28/feature-flags-enable-continuous-integration"; - } - { - from = "/archive/2023/09/29/92-changed-files-with-885-additions-and-156-deletions"; - to = "/daily/2023/09/29/92-changed-files-with-885-additions-and-156-deletions"; - } - { - from = "/archive/2023/09/30/automated-testing-offers-repeatability"; - to = "/daily/2023/09/30/automated-testing-offers-repeatability"; - } - { - from = "/archive/2023/10/01/tdd--repeat-and-refactor"; - to = "/daily/2023/10/01/tdd--repeat-and-refactor"; - } - { - from = "/archive/2023/10/02/only-comment-what-needs-to-be-commented"; - to = "/daily/2023/10/02/only-comment-what-needs-to-be-commented"; - } - { - from = "/archive/2023/10/03/there-is-no-perfect-solution"; - to = "/daily/2023/10/03/there-is-no-perfect-solution"; - } - { - from = "/archive/2023/10/04/the-best-solution-is-the-one-that-gets-the-tests-to-pass"; - to = "/daily/2023/10/04/the-best-solution-is-the-one-that-gets-the-tests-to-pass"; - } - { - from = "/archive/2023/10/05/some-solutions-are-good-enough"; - to = "/daily/2023/10/05/some-solutions-are-good-enough"; - } - { - from = "/archive/2023/10/06/software-development-is-like-going-to-the-dentist"; - to = "/daily/2023/10/06/software-development-is-like-going-to-the-dentist"; - } - { - from = "/archive/2023/10/07/a-breakdown-of-tests-from-a-current-project"; - to = "/daily/2023/10/07/a-breakdown-of-tests-from-a-current-project"; - } - { - from = "/archive/2023/10/08/is-test-driven-development-difficult"; - to = "/daily/2023/10/08/is-test-driven-development-difficult"; - } - { - from = "/archive/2023/10/09/spotting-new-things-in-drupal-10-1"; - to = "/daily/2023/10/09/spotting-new-things-in-drupal-10-1"; - } - { - from = "/archive/2023/10/10/why-use-composer-to-manage-drupal-dependencies"; - to = "/daily/2023/10/10/why-use-composer-to-manage-drupal-dependencies"; - } - { - from = "/archive/2023/10/11/do-you-need-that-module"; - to = "/daily/2023/10/11/do-you-need-that-module"; - } - { - from = "/archive/2023/10/12/business-logic-in-template-files"; - to = "/daily/2023/10/12/business-logic-in-template-files"; - } - { - from = "/archive/2023/10/13/writing-tests-is-an-investment"; - to = "/daily/2023/10/13/writing-tests-is-an-investment"; - } - { - from = "/archive/2023/10/14/do-you-need-to-write-tests-for-small-or-short-lived-projects"; - to = "/daily/2023/10/14/do-you-need-to-write-tests-for-small-or-short-lived-projects"; - } - { - from = "/archive/2023/10/15/off-to-drupalcon"; - to = "/daily/2023/10/15/off-to-drupalcon"; - } - { - from = "/archive/2023/10/23/when-should-run-your-tests"; - to = "/daily/2023/10/23/when-should-run-your-tests"; - } - { - from = "/archive/2023/10/24/how-to-test-code-you-didnt-write"; - to = "/daily/2023/10/24/how-to-test-code-you-didnt-write"; - } - { - from = "/archive/2023/10/25/automated-tests-prevent-regressions-when-upgrading"; - to = "/daily/2023/10/25/automated-tests-prevent-regressions-when-upgrading"; - } - { - from = "/archive/2023/10/26/is-decoupled-drupal-still-a-thing"; - to = "/daily/2023/10/26/is-decoupled-drupal-still-a-thing"; - } - { - from = "/archive/2023/10/27/work-with-me-and-support-the-drupal-association"; - to = "/daily/2023/10/27/work-with-me-and-support-the-drupal-association"; - } - { - from = "/archive/2023/10/28/can-you-move-faster-without-tests"; - to = "/daily/2023/10/28/can-you-move-faster-without-tests"; - } - { - from = "/archive/2023/10/29/i-can-drive-my-car-blindfolded-but-is-it-a-good-idea"; - to = "/daily/2023/10/29/i-can-drive-my-car-blindfolded-but-is-it-a-good-idea"; - } - { - from = "/archive/2023/10/30/is-drupal-a-cms-or-a-framework"; - to = "/daily/2023/10/30/is-drupal-a-cms-or-a-framework"; - } - { - from = "/archive/2023/10/31/one-official-drupal-development-environment"; - to = "/daily/2023/10/31/one-official-drupal-development-environment"; - } - { - from = "/archive/2023/11/01/drupal-9-is-now-end-of-life"; - to = "/daily/2023/11/01/drupal-9-is-now-end-of-life"; - } - { - from = "/archive/2023/11/02/is-code-coverage-an-objective-or-guideline"; - to = "/daily/2023/11/02/is-code-coverage-an-objective-or-guideline"; - } - { - from = "/archive/2023/11/03/why-your-company-should-contribute-to-open-source-software"; - to = "/daily/2023/11/03/why-your-company-should-contribute-to-open-source-software"; - } - { - from = "/archive/2023/11/04/why-you-should-contribute-to-open-source-software"; - to = "/daily/2023/11/04/why-you-should-contribute-to-open-source-software"; - } - { - from = "/archive/2023/11/05/i-m-starting-a-podcast"; - to = "/daily/2023/11/05/i-m-starting-a-podcast"; - } - { - from = "/archive/2023/11/06/the-first-beyond-blocks-podcast-episode-is-recorded"; - to = "/daily/2023/11/06/the-first-beyond-blocks-podcast-episode-is-recorded"; - } - { - from = "/archive/2023/11/07/it-depends"; - to = "/daily/2023/11/07/it-depends"; - } - { - from = "/archive/2023/11/08/building-build-configs"; - to = "/daily/2023/11/08/building-build-configs"; - } - { - from = "/archive/2023/11/09/readme-driven-development"; - to = "/daily/2023/11/09/readme-driven-development"; - } - { - from = "/archive/2023/11/10/retrofit-with-matt-glaman"; - to = "/daily/2023/11/10/retrofit-with-matt-glaman"; - } - { - from = "/archive/2023/11/11/work-in-small-batches"; - to = "/daily/2023/11/11/work-in-small-batches"; - } - { - from = "/archive/2023/11/12/drupal-gives-you-so-much-out-of-the-box"; - to = "/daily/2023/11/12/drupal-gives-you-so-much-out-of-the-box"; - } - { - from = "/archive/2023/11/13/phpunit-does-more-than-unit-testing"; - to = "/daily/2023/11/13/phpunit-does-more-than-unit-testing"; - } - { - from = "/archive/2023/11/14/why-i-prefer-integration-tests-to-unit-tests"; - to = "/daily/2023/11/14/why-i-prefer-integration-tests-to-unit-tests"; - } - { - from = "/archive/2023/11/15/dont-pre-optimise-and-over-customise"; - to = "/daily/2023/11/15/dont-pre-optimise-and-over-customise"; - } - { - from = "/archive/2023/11/16/avoiding-over-mocking"; - to = "/daily/2023/11/16/avoiding-over-mocking"; - } - { - from = "/archive/2023/11/17/drupal-s-alternate-realities"; - to = "/daily/2023/11/17/drupal-s-alternate-realities"; - } - { - from = "/archive/2023/11/18/writing-good-test-names"; - to = "/daily/2023/11/18/writing-good-test-names"; - } - { - from = "/archive/2023/11/19/why-ive-standardised-on-run-scripts"; - to = "/daily/2023/11/19/why-ive-standardised-on-run-scripts"; - } - { - from = "/archive/2023/11/20/whatll-be-in-drupal-11"; - to = "/daily/2023/11/20/whatll-be-in-drupal-11"; - } - { - from = "/archive/2023/11/21/why-i-built-build-configs"; - to = "/daily/2023/11/21/why-i-built-build-configs"; - } - { - from = "/archive/2023/11/22/frequency-reduces-difficulty"; - to = "/daily/2023/11/22/frequency-reduces-difficulty"; - } - { - from = "/archive/2023/11/23/partial-mocking"; - to = "/daily/2023/11/23/partial-mocking"; - } - { - from = "/archive/2023/11/24/are-conventional-commits-worth-it"; - to = "/daily/2023/11/24/are-conventional-commits-worth-it"; - } - { - from = "/archive/2023/11/25/community-engagement-for-non-technical-drupal-enthusiasts"; - to = "/daily/2023/11/25/community-engagement-for-non-technical-drupal-enthusiasts"; - } - { - from = "/archive/2023/11/26/to-docblock-or-not-to-docblock"; - to = "/daily/2023/11/26/to-docblock-or-not-to-docblock"; - } - { - from = "/archive/2023/11/27/finding-the-best-test-base"; - to = "/daily/2023/11/27/finding-the-best-test-base"; - } - { - from = "/archive/2023/11/28/which-phpstan-level-should-you-use"; - to = "/daily/2023/11/28/which-phpstan-level-should-you-use"; - } - { - from = "/archive/2023/11/29/the-lowest-level-is-better-than-no-level"; - to = "/daily/2023/11/29/the-lowest-level-is-better-than-no-level"; - } - { - from = "/archive/2023/11/30/are-bugs-good-for-users"; - to = "/daily/2023/11/30/are-bugs-good-for-users"; - } - { - from = "/archive/2023/12/01/the-contribution-first-workflow"; - to = "/daily/2023/12/01/the-contribution-first-workflow"; - } - { - from = "/archive/2023/12/04/writing-contrib-modules-as-glue-between-your-custom-code"; - to = "/daily/2023/12/04/writing-contrib-modules-as-glue-between-your-custom-code"; - } - { - from = "/archive/2023/12/05/open-source-encourages-open-source"; - to = "/daily/2023/12/05/open-source-encourages-open-source"; - } - { - from = "/archive/2023/12/06/open-source-first-doesnt-mean-you-need-to-cover-every-use-case"; - to = "/daily/2023/12/06/open-source-first-doesnt-mean-you-need-to-cover-every-use-case"; - } - { - from = "/archive/2023/12/07/a-drupal-case-study-from-oxfam"; - to = "/daily/2023/12/07/a-drupal-case-study-from-oxfam"; - } - { - from = "/archive/2023/12/08/dont-just-rewrite"; - to = "/daily/2023/12/08/dont-just-rewrite"; - } - { - from = "/archive/2023/12/09/rebuild-or-iterate"; - to = "/daily/2023/12/09/rebuild-or-iterate"; - } - { - from = "/archive/2023/12/10/suffixing-names"; - to = "/daily/2023/12/10/suffixing-names"; - } - { - from = "/archive/2023/12/11/custom-coding-standards-and-conventions"; - to = "/daily/2023/12/11/custom-coding-standards-and-conventions"; - } - { - from = "/archive/2023/12/12/drupalcon-session-survey-results"; - to = "/daily/2023/12/12/drupalcon-session-survey-results"; - } - { - from = "/archive/2023/12/13/reviving-an-old-php-project"; - to = "/daily/2023/12/13/reviving-an-old-php-project"; - } - { - from = "/archive/2023/12/14/save-time-and-effort-with-drupal-distributions"; - to = "/daily/2023/12/14/save-time-and-effort-with-drupal-distributions"; - } - { - from = "/archive/2023/12/15/building-your-own-in-house-drupal-distribution"; - to = "/daily/2023/12/15/building-your-own-in-house-drupal-distribution"; - } - { - from = "/archive/2023/12/16/adding-snapshot-tests-to-build-configs"; - to = "/daily/2023/12/16/adding-snapshot-tests-to-build-configs"; - } - { - from = "/archive/2023/12/17/fail-fast-fix-fast"; - to = "/daily/2023/12/17/fail-fast-fix-fast"; - } - { - from = "/archive/2023/12/18/static-analysis-on-tests"; - to = "/daily/2023/12/18/static-analysis-on-tests"; - } - { - from = "/archive/2023/12/19/php-tui-dan-leech"; - to = "/daily/2023/12/19/php-tui-dan-leech"; - } - { - from = "/archive/2023/12/20/hover-focus-hocus"; - to = "/daily/2023/12/20/hover-focus-hocus"; - } - { - from = "/archive/2023/12/21/new-year-coaching"; - to = "/daily/2023/12/21/new-year-coaching"; - } - { - from = "/archive/2023/12/22/best-language-cms-or-framework"; - to = "/daily/2023/12/22/best-language-cms-or-framework"; - } - { - from = "/archive/2023/12/23/using-a-whole-framework-or-part-of-it"; - to = "/daily/2023/12/23/using-a-whole-framework-or-part-of-it"; - } - { - from = "/archive/2023/12/24/this-should-never-happen"; - to = "/daily/2023/12/24/this-should-never-happen"; - } - { - from = "/archive/2023/12/25/zero-to-test"; - to = "/daily/2023/12/25/zero-to-test"; - } - { - from = "/archive/2023/12/26/good-code-is-not-about-being-easy-to-write"; - to = "/daily/2023/12/26/good-code-is-not-about-being-easy-to-write"; - } - { - from = "/archive/2023/12/27/writing-new-code-is-quick-to-begin-with"; - to = "/daily/2023/12/27/writing-new-code-is-quick-to-begin-with"; - } - { - from = "/archive/2023/12/28/pride-and-productivity"; - to = "/daily/2023/12/28/pride-and-productivity"; - } - { - from = "/archive/2023/12/29/decide-automate-document"; - to = "/daily/2023/12/29/decide-automate-document"; - } - { - from = "/archive/2023/12/30/weve-always-done-it-this-way"; - to = "/daily/2023/12/30/weve-always-done-it-this-way"; - } - { - from = "/archive/2023/12/31/just"; - to = "/daily/2023/12/31/just"; - } - { - from = "/archive/2024/03/03/centarro-and-drupal-commerce-with-ryan-szrama"; - to = "/daily/2024/03/03/centarro-and-drupal-commerce-with-ryan-szrama"; - } - { - from = "/atNOQ"; - to = "https://youtu.be/r41dkD2EOo8"; - } - { - from = "/automatically-updating-talk-created-date"; - to = "https://gist.github.com/opdavies/4e75e1753d8603113f07f8264bb783d6"; - } - { - from = "/blog.xml"; - to = "/rss.xml"; - } - { - from = "/blog/10-useful-drupal-6-modules"; - to = "/blog/useful-drupal-6-modules"; - } - { - from = "/blog/10-years-working-full-time-drupal"; - to = "/blog/10-years-working-full-time-drupal-php"; - } - { - from = "/blog/2010/04/05/style-drupal-6s-taxonomy-lists-php-css-and-jquery"; - to = "/blog/style-drupal-6s-taxonomy-lists-php-css-and-jquery"; - } - { - from = "/blog/2010/04/05/styling-drupal-6s-taxonomy-lists-with-php-css-and-jquery"; - to = "/blog/style-drupal-6s-taxonomy-lists-php-css-jquery"; - } - { - from = "/blog/2010/04/28/using-imagecache-and-imagecrop-my-portfolio"; - to = "/blog/using-imagecache-and-imagecrop-my-portfolio"; - } - { - from = "/blog/2010/05/06/conditional-email-addresses-webform"; - to = "/blog/conditional-email-addresses-webform"; - } - { - from = "/blog/2010/05/10/quickly-create-zen-subthemes-using-zenophile"; - to = "/blog/quickly-create-zen-subthemes-using-zenophile"; - } - { - from = "/blog/2010/05/25/create-slideshow-multiple-images-using-fancy-slide"; - to = "/blog/create-slideshow-multiple-images-using-fancy-slide"; - } - { - from = "/blog/2010/05/29/quickly-import-multiples-images-using-imagefieldimport-module"; - to = "/blog/quickly-import-multiples-images-using-imagefieldimport-module"; - } - { - from = "/blog/2010/06/02/improve-jpg-quality-imagecache-and-imageapi"; - to = "/blog/improve-jpg-quality-imagecache-and-imageapi"; - } - { - from = "/blog/2010/06/23/create-block-social-media-icons-using-cck-views-and-nodequeue"; - to = "/blog/create-block-social-media-icons-using-cck-views-and-nodequeue"; - } - { - from = "/blog/2010/06/25/10-useful-drupal-6-modules"; - to = "/blog/10-useful-drupal-6-modules"; - } - { - from = "/blog/2010/06/28/create-flickr-photo-gallery-using-feeds-cck-and-views"; - to = "/blog/create-flickr-photo-gallery-using-feeds-cck-and-views"; - } - { - from = "/blog/2010/07/01/change-content-type-multiple-nodes-using-sql"; - to = "/blog/change-content-type-multiple-nodes-using-sql"; - } - { - from = "/blog/2010/07/02/create-virtual-hosts-mac-os-x-using-virtualhostx"; - to = "/blog/create-virtual-hosts-mac-os-x-using-virtualhostx"; - } - { - from = "/blog/2010/07/07/add-taxonomy-term-multiple-nodes-using-sql"; - to = "/blog/add-taxonomy-term-multiple-nodes-using-sql"; - } - { - from = "/blog/2010/07/07/quickly-adding-taxonomy-term-multiple-nodes-using-sql"; - to = "/blog/add-taxonomy-term-multiple-nodes-using-sql"; - } - { - from = "/blog/2010/07/12/overview-teleport-module"; - to = "/blog/review-teleport-module"; - } - { - from = "/blog/2010/07/12/review-teleport-module"; - to = "/blog/review-teleport-module"; - } - { - from = "/blog/2010/08/10/review-adminhover-module"; - to = "/blog/review-adminhover-module"; - } - { - from = "/blog/2010/08/11/create-better-photo-gallery-drupal-part-1"; - to = "/blog/create-better-photo-gallery-drupal-part-1"; - } - { - from = "/blog/2010/08/11/how-create-better-photo-gallery-drupal-part-1"; - to = "/blog/create-better-photo-gallery-drupal-part-1"; - } - { - from = "/blog/2010/08/17/create-better-photo-gallery-drupal-part-2"; - to = "/blog/create-better-photo-gallery-drupal-part-2"; - } - { - from = "/blog/2010/08/20/review-image-caption-module"; - to = "/blog/review-image-caption-module"; - } - { - from = "/blog/2010/09/26/south-wales-drupal-user-group"; - to = "/blog/south-wales-drupal-user-group"; - } - { - from = "/blog/2010/10/10/create-and-apply-patches"; - to = "/blog/create-and-apply-patches"; - } - { - from = "/blog/2010/10/13/create-better-photo-gallery-drupal-part-3"; - to = "/blog/create-better-photo-gallery-drupal-part-3"; - } - { - from = "/blog/2010/10/22/create-better-photo-gallery-drupal-part-21"; - to = "/blog/create-better-photo-gallery-drupal-part-21"; - } - { - from = "/blog/2010/11/04/use-regular-expressions-search-and-replace-coda-or-textmate"; - to = "/blog/use-regular-expressions-search-and-replace-coda-or-textmate"; - } - { - from = "/blog/2011/02/14/easily-embed-typekit-fonts-your-drupal-website"; - to = "/blog/easily-embed-typekit-fonts-your-drupal-website"; - } - { - from = "/blog/2011/03/15/display-number-facebook-fans-php"; - to = "/blog/display-number-facebook-fans-php"; - } - { - from = "/blog/2011/03/31/proctor-stevenson"; - to = "/blog/proctor-stevenson"; - } - { - from = "/blog/2011/05/20/proctors-hosting-next-drupal-meetup"; - to = "/blog/proctors-hosting-next-drupal-meetup"; - } - { - from = "/blog/2011/05/23/imagefield-import-archive"; - to = "/blog/imagefield-import-archive"; - } - { - from = "/blog/2011/08/28/create-multigroups-drupal-7-using-field-collections"; - to = "/blog/create-multigroups-drupal-7-using-field-collections"; - } - { - from = "/blog/2011/10/19/install-and-configure-subversion-svn-server-ubuntu"; - to = "/blog/install-and-configure-subversion-svn-server-ubuntu"; - } - { - from = "/blog/2011/10/install-and-configure-subversion-svn-server-ubuntu"; - to = "/blog/how-install-configure-subversion-svn-server-ubuntu"; - } - { - from = "/blog/2012/01/04/site-upgraded-drupal-7"; - to = "/blog/site-upgraded-drupal-7"; - } - { - from = "/blog/2012/02/01/use-authorize-keys-create-passwordless-ssh-connection"; - to = "/blog/use-authorized-keys-create-passwordless-ssh-connection"; - } - { - from = "/blog/2012/04/16/create-omega-subtheme-less-css-preprocessor-using-omega-tools-and-drush"; - to = "/blog/create-omega-subtheme-less-css-preprocessor-using-omega-tools-and-drush"; - } - { - from = "/blog/2012/04/17/installing-nagios-centos"; - to = "/blog/installing-nagios-centos"; - } - { - from = "/blog/2012/04/19/adding-custom-theme-templates-drupal-7"; - to = "/blog/adding-custom-theme-templates-drupal-7"; - } - { - from = "/blog/2012/04/adding-custom-theme-templates-drupal-7"; - to = "/blog/adding-custom-theme-templates-drupal-7"; - } - { - from = "/blog/2012/05/23/add-date-popup-calendar-custom-form"; - to = "/blog/add-date-popup-calendar-custom-form"; - } - { - from = "/blog/2012/05/23/checkout-specific-revision-svn-command-line"; - to = "/blog/checkout-specific-revision-svn-command-line"; - } - { - from = "/blog/2012/05/23/forward-one-domain-another-using-mod-rewrite-and-htaccess"; - to = "/blog/forward-one-domain-another-using-mod-rewrite-and-htaccess"; - } - { - from = "/blog/2012/05/23/forward-one-domain-another-using-modrewrite-and-htaccess"; - to = "/blog/forward-one-domain-another-using-modrewrite-htaccess"; - } - { - from = "/blog/2012/05/23/prevent-apache-displaying-text-files-within-web-browser"; - to = "/blog/prevent-apache-displaying-text-files-within-web-browser"; - } - { - from = "/blog/2012/05/23/writing-info-file-drupal-7-theme"; - to = "/blog/writing-info-file-drupal-7-theme"; - } - { - from = "/blog/2012/05/24/dividing-drupals-process-and-preprocess-functions-separate-files"; - to = "/blog/dividing-drupals-process-and-preprocess-functions-separate-files"; - } - { - from = "/blog/2012/05/forward-one-domain-another-using-modrewrite-and-htaccess"; - to = "/blog/forward-one-domain-another-using-modrewrite-htaccess"; - } - { - from = "/blog/2012/07/12/my-new-drupal-modules"; - to = "/blog/my-new-drupal-modules"; - } - { - from = "/blog/2012/07/14/install-nomensa-media-player-drupal"; - to = "/blog/install-nomensa-media-player-drupal"; - } - { - from = "/blog/2012/07/27/writing-article-linux-journal"; - to = "/blog/writing-article-linux-journal"; - } - { - from = "/blog/2012/07/install-and-configure-nomensa-accessible-media-player-drupal"; - to = "/blog/install-configure-nomensa-accessible-media-player-drupal"; - } - { - from = "/blog/2012/07/nomensa-accessible-media-player-drupal"; - to = "/blog/install-configure-nomensa-accessible-media-player-drupal"; - } - { - from = "/blog/2012/08/18/display-custom-menu-drupal-7-theme-template-file"; - to = "/blog/display-custom-menu-drupal-7-theme-template-file"; - } - { - from = "/blog/2012/09/06/reflections-speaking-unifieddiff"; - to = "/blog/reflections-speaking-unifieddiff"; - } - { - from = "/blog/2012/10/25/my-sublime-text-2-settings"; - to = "/blog/my-sublime-text-2-settings"; - } - { - from = "/blog/2012/11/15/accessible-bristol-site-launched"; - to = "/blog/accessible-bristol-site-launched"; - } - { - from = "/blog/2012/11/17/open-sublime-text-2-mac-os-x-command-line"; - to = "/blog/open-sublime-text-2-mac-os-x-command-line"; - } - { - from = "/blog/2012/12/06/use-sass-and-compass-drupal-7-using-sassy"; - to = "/blog/use-sass-and-compass-drupal-7-using-sassy"; - } - { - from = "/blog/2012/12/use-sass-and-compass-drupal-7-using-sassy"; - to = "/blog/use-sass-and-compass-drupal-7-using-sassy"; - } - { - from = "/blog/2013/01/09/checking-if-user-logged-drupal-right-way"; - to = "/blog/checking-if-user-logged-drupal-right-way"; - } - { - from = "/blog/2013/02/16/creating-and-using-custom-tokens-drupal-7"; - to = "/blog/creating-and-using-custom-tokens-drupal-7"; - } - { - from = "/blog/2013/02/creating-and-using-custom-tokens-drupal-7"; - to = "/blog/creating-using-custom-tokens-drupal-7"; - } - { - from = "/blog/2013/03/02/quickest-way-install-sublime-text-2-ubuntu"; - to = "/blog/quickest-way-install-sublime-text-2-ubuntu"; - } - { - from = "/blog/2013/04/20/leaving-nomensa-joining-precedent"; - to = "/blog/leaving-nomensa-joining-precedent"; - } - { - from = "/blog/2013/04/27/display-git-branch-or-tag-names-your-bash-prompt"; - to = "/blog/display-git-branch-or-tag-names-your-bash-prompt"; - } - { - from = "/blog/2013/04/display-git-branch-or-tag-names-your-bash-prompt"; - to = "/blog/display-git-branch-or-tag-names-your-bash-prompt"; - } - { - from = "/blog/2013/06/13/some-useful-links-using-simpletest-drupal"; - to = "/blog/some-useful-links-using-simpletest-drupal"; - } - { - from = "/blog/2013/07/17/creating-local-and-staging-sites-drupals-domain-module-enabled"; - to = "/blog/creating-local-and-staging-sites-drupals-domain-module-enabled"; - } - { - from = "/blog/2013/07/26/going-drupalcon"; - to = "/blog/going-drupalcon"; - } - { - from = "/blog/2013/09/06/create-a-zen-sub-theme-using-drush"; - to = "/blog/create-a-zen-sub-theme-using-drush"; - } - { - from = "/blog/2013/09/create-zen-sub-theme-using-drush"; - to = "/blog/create-zen-sub-theme-using-drush"; - } - { - from = "/blog/2013/11/19/dont-bootstrap-drupal-use-drush"; - to = "/blog/dont-bootstrap-drupal-use-drush"; - } - { - from = "/blog/2013/11/27/useful-vagrant-commands"; - to = "/blog/useful-vagrant-commands"; - } - { - from = "/blog/2013/11/dont-bootstrap-drupal-use-drush"; - to = "/blog/dont-bootstrap-drupal-use-drush"; - } - { - from = "/blog/2013/12/24/quickly-apply-patches-using-git-and-curl-or-wget"; - to = "/blog/quickly-apply-patches-using-git-and-curl-or-wget"; - } - { - from = "/blog/2013/12/31/download-different-versions-drupal-drush"; - to = "/blog/download-different-versions-drupal-drush"; - } - { - from = "/blog/2013/12/quickly-apply-patches-using-git-and-curl-or-wget"; - to = "/blog/quickly-apply-patches-using-git-curl-or-wget"; - } - { - from = "/blog/2014/01/15/some-useful-git-aliases"; - to = "/blog/some-useful-git-aliases"; - } - { - from = "/blog/2014/02/09/drupalcamp-london-2014"; - to = "/blog/drupalcamp-london-2014"; - } - { - from = "/blog/2014/03/03/what-git-flow"; - to = "/blog/what-git-flow"; - } - { - from = "/blog/2014/05/03/drupal-association"; - to = "/blog/drupal-association"; - } - { - from = "/blog/2014/05/06/thanks"; - to = "/blog/thanks"; - } - { - from = "/blog/2014/05/21/git-format-patch"; - to = "/blog/git-format-patch"; - } - { - from = "/blog/2014/07/02/drush-make-drupalbristol"; - to = "/blog/drush-make-drupalbristol"; - } - { - from = "/blog/2014/10/06/fix-vagrant-loading-wrong-virtual-machine"; - to = "/blog/fix-vagrant-loading-wrong-virtual-machine"; - } - { - from = "/blog/2014/10/21/updating-features-and-adding-components-using-drush"; - to = "/blog/updating-features-and-adding-components-using-drush"; - } - { - from = "/blog/2014/11/18/include-css-fonts-using-sass-each-loop"; - to = "/blog/include-css-fonts-using-sass-each-loop"; - } - { - from = "/blog/2014/11/20/using-remote-files-when-developing-locally-with-stage-file-proxy-module"; - to = "/blog/using-remote-files-when-developing-locally-with-stage-file-proxy-module"; - } - { - from = "/blog/2014/11/27/pantheon-settings-files"; - to = "/blog/pantheon-settings-files"; - } - { - from = "/blog/2014/12/20/include-local-drupal-settings-file-environment-configuration-and-overrides"; - to = "/blog/include-local-drupal-settings-file-environment-configuration-and-overrides"; - } - { - from = "/blog/2015/04/03/how-to-define-a-minimum-drupal-core-version"; - to = "/blog/how-to-define-a-minimum-drupal-core-version"; - } - { - from = "/blog/2015/06/18/updating-forked-repositories-on-github"; - to = "/blog/updating-forked-repositories-on-github"; - } - { - from = "/blog/2015/07/19/sculpin-twig-resources"; - to = "/blog/sculpin-twig-resources"; - } - { - from = "/blog/2015/07/21/automating-sculpin-jenkins"; - to = "/blog/automating-sculpin-jenkins"; - } - { - from = "/blog/2015/12/22/programmatically-load-an-entityform-in-drupal-7"; - to = "/blog/programmatically-load-an-entityform-in-drupal-7"; - } - { - from = "/blog/2016/02/15/announcing-the-drupal-vm-generator"; - to = "/blog/announcing-the-drupal-vm-generator"; - } - { - from = "/blog/2016/05/03/simplifying-drupal-migrations-with-xautoload"; - to = "/blog/simplifying-drupal-migrations-with-xautoload"; - } - { - from = "/blog/2016/07/15/building-gmail-filters-with-php"; - to = "/blog/building-gmail-filters-with-php"; - } - { - from = "/blog/2016/12/30/drupal-vm-generator-291-released"; - to = "/blog/drupal-vm-generator-291-released"; - } - { - from = "/blog/2017/01/07/easier-sculpin-commands-with-composer-and-npm-scripts"; - to = "/blog/easier-sculpin-commands-with-composer-and-npm-scripts"; - } - { - from = "/blog/2017/01/31/nginx-redirects-with-query-string-arguments"; - to = "/blog/nginx-redirects-with-query-string-arguments"; - } - { - from = "/blog/2017/05/05/fixing-drupal-simpletest-docker"; - to = "/blog/2017/05/05/fixing-drupal-simpletest-issues-inside-docker-containers"; - } - { - from = "/blog/2017/05/05/fixing-drupal-simpletest-issues-inside-docker-containers"; - to = "/blog/fixing-drupal-simpletest-issues-inside-docker-containers"; - } - { - from = "/blog/2017/05/20/turning-drupal-module-into-feature"; - to = "/blog/turning-your-custom-drupal-module-feature"; - } - { - from = "/blog/2017/06/09/introducing-the-drupal-meetups-twitterbot"; - to = "/blog/introducing-the-drupal-meetups-twitterbot"; - } - { - from = "/blog/2017/07/13/publishing-sculpin-sites-with-github-pages"; - to = "/blog/publishing-sculpin-sites-github-pages"; - } - { - from = "/blog/2017/11/07/tdd-test-driven-drupal"; - to = "/blog/tdd-test-driven-drupal"; - } - { - from = "/blog/2017/11/07/writing-drupal-module-test-driven-development-tdd"; - to = "/blog/2017/11/07/tdd-test-driven-drupal"; - } - { - from = "/blog/2018/01/30/drupalcamp-bristol-2018"; - to = "/blog/drupalcamp-bristol-2018"; - } - { - from = "/blog/2018/02/05/using-tailwind-css-in-your-drupal-theme"; - to = "/blog/using-tailwind-css-in-your-drupal-theme"; - } - { - from = "/blog/2018/02/27/looking-forward-to-drupalcamp-london"; - to = "/blog/looking-forward-to-drupalcamp-london"; - } - { - from = "/blog/2018/02/27/queuing-private-messages-in-drupal-8"; - to = "/blog/queuing-private-messages-in-drupal-8"; - } - { - from = "/blog/2018/02/28/building-the-new-phpsw-website"; - to = "/blog/building-the-new-phpsw-website"; - } - { - from = "/blog/2018/03/02/yay-the-mediacurrent-contrib-half-hour-is-back"; - to = "/blog/yay-the-mediacurrent-contrib-half-hour-is-back"; - } - { - from = "/blog/2018/03/04/tweets-from-drupalcamp-london"; - to = "/blog/tweets-from-drupalcamp-london"; - } - { - from = "/blog/2018/04/23/back-to-the-future-git-diff-apply"; - to = "/blog/back-future-gits-diff-apply-commands"; - } - { - from = "/blog/2018/05/06/creating-a-custom-phpunit-command-for-docksal"; - to = "/blog/creating-a-custom-phpunit-command-for-docksal"; - } - { - from = "/blog/add-date-popup-calendar-custom-form"; - to = "/blog/how-add-date-popup-calendar-custom-form"; - } - { - from = "/blog/adding-methods-decorating-entity-metadata-wrapper"; - to = "/blog/decorating-entity-metadata-wrapper-add-refactor-methods"; - } - { - from = "/blog/announcing-drupal-vm-generator"; - to = "/blog/announcing-the-drupal-vm-generator"; - } - { - from = "/blog/announcing-the-drupal-vm-config-generator"; - to = "/blog/announcing-the-drupal-vm-generator"; - } - { - from = "/blog/back-to-the-future-git-diff-apply"; - to = "/blog/back-future-gits-diff-apply-commands"; - } - { - from = "/blog/building-gmail-filters-in-php"; - to = "/blog/building-gmail-filters-php"; - } - { - from = "/blog/building-new-phpsw-website"; - to = "/blog/building-the-new-phpsw-website"; - } - { - from = "/blog/building-presentation-slides-reveal-js-tailwind-css"; - to = "/blog/building-presentation-slides-rst2pdf"; - } - { - from = "/blog/building-speaker-leaderboard-php-south-wales-using-drupal-symfony"; - to = "/blog/building-speaker-leaderboard-php-south-wales-drupal-symfony"; - } - { - from = "/blog/create-and-apply-patches"; - to = "/blog/how-create-apply-patches"; - } - { - from = "/blog/create-flickr-photo-gallery-using-feeds-cck-and-views"; - to = "/blog/create-flickr-photo-gallery-using-feeds-cck-views"; - } - { - from = "/blog/creating-and-using-custom-tokens-drupal-7"; - to = "/blog/creating-using-custom-tokens-drupal-7"; - } - { - from = "/blog/creating-custom-docksal-commands"; - to = "/blog/creating-custom-phpunit-command-docksal"; - } - { - from = "/blog/debugging-drupal-commerce-promotions-illiminate-collections"; - to = "/blog/debugging-drupal-commerce-illuminate-collections"; - } - { - from = "/blog/decorating-entity-metadata-wrapper-add-add-refactor-methods"; - to = "/blog/decorating-entity-metadata-wrapper-add-refactor-methods"; - } - { - from = "/blog/dev-book-club-refactoring-chapter-1"; - to = "/blog/dev-book-club-notes-refactoring-chapter-1"; - } - { - from = "/blog/dividing-drupals-process-preprocess-functions-separate-files"; - to = "/blog/dividing-drupals-process-and-preprocess-functions-separate-files"; - } - { - from = "/blog/drupal-8-commerce-fixing-no-such-customer-error-(on-)?checkout"; - to = "/blog/drupal-8-commerce-fixing-no-such-customer-error-checkout"; - } - { - from = "/blog/drupal-vm-generator-291-released"; - to = "/blog/drupal-vm-generator-updates"; - } - { - from = "/blog/drupalcamp-london-2019-tickets"; - to = "/blog/drupalcamp-london-2019-tickets-available-call-sessions"; - } - { - from = "/blog/drush-make-drupalbristol"; - to = "/talks/drush-make-drupalbristol"; - } - { - from = "/blog/easier-git-repository-cloning-with-insteadof"; - to = "/blog/easier-git-repository-cloning-insteadof"; - } - { - from = "/blog/easier-sculpin-commands-with-composer-and-npm-scripts"; - to = "/blog/easier-sculpin-commands-composer-npm-scripts"; - } - { - from = "/blog/editing-meetup-videos-kdenlive"; - to = "/blog/editing-meetup-videos-linux-kdenlive"; - } - { - from = "/blog/examples-of-laravel-collections-in-drupal"; - to = "/blog/using-laravel-collections-drupal"; - } - { - from = "/blog/experimenting-with-events-in-drupal-8"; - to = "/blog/experimenting-events-drupal-8"; - } - { - from = "/blog/fix-vagrant-loading-wrong-virtual-machine"; - to = "/blog/how-fix-vagrant-loading-wrong-virtual-machine"; - } - { - from = "/blog/fixing-drupal-simpletest-docker"; - to = "/blog/fixing-drupal-simpletest-issues-inside-docker-containers"; - } - { - from = "/blog/forward-one-domain-another-using-modrewrite-and-htaccess"; - to = "/blog/forward-one-domain-another-using-modrewrite-htaccess"; - } - { - from = "/blog/forward-one-domain-another-using-modrewrite-and-htaccess"; - to = "/blog/forward-one-domain-another-using-modrewrite-htaccess"; - } - { - from = "/blog/git-format-patch"; - to = "/blog/git-format-patch-your-friend"; - } - { - from = "/blog/how-easily-embed-typekit-fonts-your-drupal-website"; - to = "/blog/easily-embed-typekit-fonts-your-drupal-website"; - } - { - from = "/blog/how-split-new-drupal-contrib-project-within-another-repository"; - to = "/blog/splitting-new-drupal-project-from-repo"; - } - { - from = "/blog/how-style-drupal-6s-taxonomy-lists-php-css-and-jquery"; - to = "/blog/style-drupal-6s-taxonomy-lists-php-css-jquery"; - } - { - from = "/blog/include-local-drupal-settings-file-environment-configuration-overrides"; - to = "/blog/include-local-drupal-settings-file-environment-configuration-and-overrides"; - } - { - from = "/blog/install-and-configure-subversion-svn-server-ubuntu"; - to = "/blog/how-install-configure-subversion-svn-server-ubuntu"; - } - { - from = "/blog/live-blogging-symfonylive-london"; - to = "/blog/live-blogging-symfonylive-london-2019"; - } - { - from = "/blog/minimum-core-version"; - to = "/blog/how-define-minimum-drupal-core-version"; - } - { - from = "/blog/nginx-redirects-with-query-string-arguments"; - to = "/blog/nginx-redirects-query-string-arguments"; - } - { - from = "/blog/null-users-and-system-users-in-drupal"; - to = "/blog/null-users-system-users-drupal"; - } - { - from = "/blog/overridding-phpcs-configuration-drupal-ci"; - to = "/blog/overriding-phpcs-configuration-drupal-ci"; - } - { - from = "/blog/pantheon-settings-files"; - to = "/blog/include-environment-specific-settings-files-pantheon"; - } - { - from = "/blog/pdfpc-pdf-presenter-console-notes"; - to = "/blog/presenting-pdf-slides-using-pdfpc-pdf-presenter-console"; - } - { - from = "/blog/php-apps-subdirectory-nginx"; - to = "/blog/how-put-your-php-application-subdirectory-another-site-nginx"; - } - { - from = "/blog/presenting-tailwind-css-ansible-cms-philly"; - to = "/blog/presenting-on-tailwind-css-and-ansible-at-cms-philly"; - } - { - from = "/blog/programmatically-load-(an-)?entityform-(in-)?drupal-7"; - to = "/blog/entityform"; - } - { - from = "/blog/published-my-first-docker-images-docker-hub"; - to = "/blog/published-my-first-docker-images-docker-hub-adr-tools-sculpin-rst2pdf"; - } - { - from = "/blog/publishing-sculpin-sites-(with-)?github-pages"; - to = "/blog/publishing-sculpin-sites-github-pages"; - } - { - from = "/blog/queuing-private-messages-in-drupal-8"; - to = "/blog/queuing-private-messages-drupal-8"; - } - { - from = "/blog/quick-project-switching-in-phpstorm"; - to = "/blog/quick-project-switching-phpstorm"; - } - { - from = "/blog/quickly-apply-patches-using-git-and-curl-or-wget"; - to = "/blog/quickly-apply-patches-using-git-curl-or-wget"; - } - { - from = "/blog/rebuilding-bartik-with-vuejs-tailwind-css"; - to = "/blog/rebuilding-bartik-drupals-default-theme-vuejs-tailwind-css"; - } - { - from = "/blog/rebuilding-bartik-with-vuejs-tailwind-css-part-2"; - to = "/blog/rebuilding-bartik-drupals-default-theme-vuejs-tailwind-css-part-2"; - } - { - from = "/blog/rebuilding-uis-tailwind-css"; - to = "/blog/uis-ive-rebuilt-tailwind-css"; - } - { - from = "/blog/restructuring-my-tailwindjs-config-files"; - to = "/blog/restructuring-my-tailwindjs-configuration-files"; - } - { - from = "/blog/retrieving-profile-data-user-using-entity-metadata-wrapper"; - to = "/blog/cleanly-retrieving-user-profile-data-using-entity-metadata-wrapper"; - } - { - from = "/blog/running-drupal-with-symfony-local-server"; - to = "/blog/running-drupal-88-symfony-local-server"; - } - { - from = "/blog/running-phpunit-tests-docksal-phpstorm"; - to = "/blog/how-run-drupal-8-phpunit-tests-within-docksal-phpstorm"; - } - { - from = "/blog/simplifying-drupal-migrations-with-xautoload"; - to = "/blog/simplifying-drupal-migrations-xautoload"; - } - { - from = "/blog/speaking-drupalcon-barcelona-2020"; - to = "/blog/speaking-drupalcon-europe-2020"; - } - { - from = "/blog/speaking-during-lockdown"; - to = "/blog/speaking-remotely-during-covid-19"; - } - { - from = "/blog/speaking-remotely-during-lockdown"; - to = "/blog/speaking-remotely-during-covid-19"; - } - { - from = "/blog/style-drupal-6s-taxonomy-lists-php-css-jquery"; - to = "/blog/style-drupal-6s-taxonomy-lists-php-css-and-jquery"; - } - { - from = "/blog/survey-results-my-drupalcon-europe-session"; - to = "/blog/survey-results-my-drupalcon-europe-session-test-driven-drupal"; - } - { - from = "/blog/system-users-null-users"; - to = "/blog/null-users-and-system-users-in-drupal"; - } - { - from = "/blog/test-driven-drupal-gitstore-leanpub"; - to = "/blog/test-driven-drupal-on-gitstore-leanpub"; - } - { - from = "/blog/test-driven-drupal-presentation-drupalcon-europe-0"; - to = "/blog/test-driven-drupal-presentation-drupalcon-europe"; - } - { - from = "/blog/test-driven-drupal-session-drupalcon-europe"; - to = "/blog/test-driven-drupal-presentation-drupalcon-europe"; - } - { - from = "/blog/test-driven-drupal-session-video-drupalcon-europe"; - to = "/blog/test-driven-drupal-presentation-drupalcon-europe"; - } - { - from = "/blog/testing-tailwind-css-plugins-with-jest"; - to = "/blog/testing-tailwind-css-plugins-jest"; - } - { - from = "/blog/testing-tailwindcss-plugins-with-jest"; - to = "/blog/testing-tailwind-css-plugins-jest"; - } - { - from = "/blog/tweets-from-drupalcamp-london"; - to = "/blog/tweets-drupalcamp-london"; - } - { - from = "/blog/updating-features-and-adding-components-using-drush"; - to = "/blog/updating-features-adding-components-using-drush"; - } - { - from = "/blog/updating-forked-repositories-github"; - to = "/blog/updating-forked-github-repos"; - } - { - from = "/blog/use-regular-expressions-search-and-replace-coda-or-textmate"; - to = "/blog/use-regular-expressions-search-replace-coda-or-textmate"; - } - { - from = "/blog/using-environment-variables-settings-docksal"; - to = "/blog/how-use-environment-variables-your-drupal-settings-docksal"; - } - { - from = "/blog/using-psr-4-autoloading-your-drupal-7-test-cases"; - to = "/blog/psr4-autoloading-test-cases-drupal-7"; - } - { - from = "/blog/using-tailwind-css-in-your-drupal-theme"; - to = "/blog/using-tailwind-css-your-drupal-theme"; - } - { - from = "/blog/using-the-pcss-extension-postcss-webpack-encore"; - to = "/blog/using-pcss-extension-postcss-webpack-encore"; - } - { - from = "/blog/weeknotes-june-5th"; - to = "/blog/weeknotes-2021-06-05"; - } - { - from = "/blog/writing-drupal-module-test-driven-development-tdd"; - to = "/blog/writing-new-drupal-8-module-using-test-driven-development-tdd"; - } - { - from = "/book"; - to = "/test-driven-drupal"; - } - { - from = "/calendars?"; - to = "https://savvycal.com/opdavies"; - } - { - from = "/cms-philly"; - to = "/articles/presenting-on-tailwind-css-and-ansible-at-cms-philly"; - } - { - from = "/code-enigma-interview"; - to = "https://blog.codeenigma.com/interview-with-a-drupal-expert-9fcd8e0fad28"; - } - { - from = "/consulting"; - to = "/"; - } - { - from = "/contrib-half-hour"; - to = "https://www.youtube.com/playlist?list=PLu-MxhbnjI9rHroPvZO5LEUhr58Yl0j_F"; - } - { - from = "/cv"; - to = "/cv.txt"; - } - { - from = "/d0P5z"; - to = "/talks/drupal-8-php-libraries-drupalorg-api"; - } - { - from = "/d7"; - to = "/drupal7"; - } - { - from = "/daily"; - to = "/blog"; - } - { - from = "/dcbristol-cfp"; - to = "https://www.papercall.io/drupalcamp-bristol-2019"; - } - { - from = "/dcbristol17-videos"; - to = "https://www.youtube.com/playlist?list=PLOwPvExSyLLngtd6R4PUD9MCXa6QL_obA"; - } - { - from = "/dcbristol19-announced"; - to = "/articles/drupalcamp-bristol-2019-speakers-sessions-announced"; - } - { - from = "/dclondon-sat"; - to = "https://drupalcamp.london/schedule/saturday"; - } - { - from = "/dclondon-sun"; - to = "https://drupalcamp.london/schedule/sunday"; - } - { - from = "/dclondon20"; - to = "/articles/drupalcamp-london-testing-workshop"; - } - { - from = "/ddev-phpunit-command"; - to = "/blog/creating-custom-phpunit-command-ddev"; - } - { - from = "/deploying-php-ansible"; - to = "/talks/deploying-php-ansible-ansistrano"; - } - { - from = "/dks7E"; - to = "https://www.youtube.com/watch?v=PLS4ET7FAcU"; - } - { - from = "/do-library"; - to = "https://github.com/opdavies/drupalorg-api-php"; - } - { - from = "/do-projects"; - to = "https://github.com/opdavies/drupal-module-drupalorg-projects"; - } - { - from = "/docksal-phpunit-phpstorm"; - to = "/articles/running-phpunit-tests-docksal-phpstorm"; - } - { - from = "/docksal-posts"; - to = "/articles/tags/docksal"; - } - { - from = "/dransible"; - to = "https://github.com/opdavies/dransible"; - } - { - from = "/dransible-drupal-9"; - to = "/blog/upgrading-dransible-project-drupal-9"; - } - { - from = "/drupal-bristol-march-19"; - to = "https://docs.google.com/presentation/d/1pk9LIN-hHX73kvDdo-lzgmKlAeH33_K_uvI0t7A-rvY/edit?usp=sharing"; - } - { - from = "/drupal-consultant"; - to = "/drupal-consulting"; - } - { - from = "/drupal-consulting"; - to = "/"; - } - { - from = "/drupal-core-live-stream"; - to = "https://www.youtube.com/watch?v=OK4FWwh1gQU"; - } - { - from = "/drupal-core-testing-gate"; - to = "https://www.drupal.org/core/gates#testing"; - } - { - from = "/drupal-first-time-issues"; - to = "https://www.drupal.org/project/issues/search?text=&projects=&assigned=&submitted=&project_issue_followers=&status%5B%5D=Open&issue_tags_op=%3D&issue_tags=Novice"; - } - { - from = "/drupal-forum-post"; - to = "http://www.webmaster-forums.net/webmasters-corner/developing-my-website-using-php-and-mysql#comment-1231537"; - } - { - from = "/drupal-marketplace-uk"; - to = "https://www.drupal.org/drupal-services?offices%5B%5D=24460"; - } - { - from = "/drupal-meetups-twitterbot"; - to = "/articles/introducing-the-drupal-meetups-twitterbot"; - } - { - from = "/drupal-novice-issues"; - to = "https://www.drupal.org/project/issues/search?text=&projects=&assigned=&submitted=&project_issue_followers=&status%5B%5D=Open&issue_tags_op=%3D&issue_tags=Novice"; - } - { - from = "/drupal-php-developer"; - to = "/drupal-consultant"; - } - { - from = "/drupal-php-developer-consultant-uk"; - to = "/drupal-php-developer"; - } - { - from = "/drupal-tailwind-demo"; - to = "https://www.youtube.com/watch?v=1eM-Gw6GI4g"; - } - { - from = "/drupal-tailwindcss"; - to = "https://www.drupal.org/project/tailwindcss"; - } - { - from = "/drupal-vuejs"; - to = "/talks/decoupling-drupal-vuejs/"; - } - { - from = "/drupal7"; - to = "/drupal-upgrade"; - } - { - from = "/drupalcamp-london-2019-tickets"; - to = "/articles/drupalcamp-london-2019-tickets"; - } - { - from = "/drupalcamp-nyc-training"; - to = "https://www.youtube.com/watch?v=3M9c4UUzKm0"; - } - { - from = "/drupalorg"; - to = "https://www.drupal.org/u/opdavies"; - } - { - from = "/drupalorg-project-issues"; - to = "https://www.drupal.org/project/issues/search?projects=Override+Node+Options%2C+Tailwind+CSS+Starter+Kit%2C+Block+ARIA+Landmark+Roles%2C+Copyright+Block+module%2C+System+User%2C+Null+User%2C+Collection+class%2C+Pathauto+Menu+Link%2C+Webform+ARIA&project_issue_followers=&status%5B%5D=1&status%5B%5D=13&status%5B%5D=8&status%5B%5D=14&status%5B%5D=15&issue_tags_op=%3D"; - } - { - from = "/drupalversary"; - to = "https://github.com/opdavies/drupal-module-drupalversary"; - } - { - from = "/elewant"; - to = "https://elewant.com/shepherd/admire/opdavies"; - } - { - from = "/feed"; - to = "/rss.xml"; - } - { - from = "/first-drupal-core-issue"; - to = "https://www.drupal.org/project/drupal/issues/753898"; - } - { - from = "/first-npm-package"; - to = "https://www.npmjs.com/package/tailwindcss-vuejs"; - } - { - from = "/freeagent"; - to = "https://opdavies.freeagent.com"; - } - { - from = "/git-flow"; - to = "/talks/git-flow"; - } - { - from = "/gitlab"; - to = "https://gitlab.com/opdavies"; - } - { - from = "/gitstore"; - to = "https://enjoy.gitstore.app/maintainers/opdavies"; - } - { - from = "/gmail-filters"; - to = "https://gitlab.com/opdavies/gmail-filters"; - } - { - from = "/images/me-precedent.jpg"; - to = "/sites/default/files/images/social-avatar.jpg"; - } - { - from = "/inviqa-tailwind-demo"; - to = "https://play.tailwindcss.com/Yfmw8O5UNN"; - } - { - from = "/inviqa-tailwind-notes"; - to = "https://gist.github.com/opdavies/e6f0f4938506a6859acf1aca8b4e1a74"; - } - { - from = "/join-php-south-wales-slack"; - to = "https://join.slack.com/t/phpsouthwales/shared_invite/zt-4vuetc43-AvtEK1WqNzp5k1w4yWKOJA"; - } - { - from = "/jy6rW"; - to = "https://www.meetup.com/PHP-South-Wales/events/264731393"; - } - { - from = "/kB6Jd"; - to = "/articles/running-drupal-with-symfony-local-server/"; - } - { - from = "/kmDRA"; - to = "https://www.bbc.co.uk/news/uk-46561779"; - } - { - from = "/leeds-php-drupal-9"; - to = "https://www.meetup.com/leedsphp/events/272504993"; - } - { - from = "/live"; - to = "https://www.youtube.com/channel/UCkeK0qF9HHUPQH_fvn4ghqQ"; - } - { - from = "/npm"; - to = "https://www.npmjs.com/~opdavies"; - } - { - from = "/oFlkS"; - to = "/articles/test-driven-drupal-on-gitstore-leanpub"; - } - { - from = "/oliver-davies-uk-based-drupal-symfony-developer"; - to = "/oliver-davies-uk-based-drupal-php-developer"; - } - { - from = "/pair-programming"; - to = "/pair"; - } - { - from = "/pair-with-me"; - to = "/pair"; - } - { - from = "/pairing"; - to = "/pair"; - } - { - from = "/php-ansible"; - to = "/talks/deploying-php-ansible-ansistrano"; - } - { - from = "/presentations/building-presenting-slide-decks-rst2pdf"; - to = "/presentations/rst2pdf"; - } - { - from = "/presentations/building-static-websites-sculpin"; - to = "/presentations/sculpin"; - } - { - from = "/qSHAl"; - to = "/articles/published-my-first-npm-package/"; - } - { - from = "/qT1Rb"; - to = "https://github.com/opdavies/drupal-meetups-twitterbot"; - } - { - from = "/rebuilding-acquia"; - to = "https://rebuilding-acquia.oliverdavies.uk"; - } - { - from = "/rebuilding-bartik"; - to = "/articles/rebuilding-bartik-with-vuejs-tailwind-css"; - } - { - from = "/rebuilding-bristol-js"; - to = "https://github.com/opdavies/rebuilding-bristol-js"; - } - { - from = "/rebuilding-pantheon"; - to = "https://play.tailwindcss.com/LND98XihGI?layout=horizontal"; - } - { - from = "/rebuilding-platformsh"; - to = "https://rebuilding-platformsh.oliverdavies.uk"; - } - { - from = "/rebuilding-symfony"; - to = "https://github.com/opdavies/rebuilding-symfony"; - } - { - from = "/rk29B"; - to = "https://www.meetup.com/PHP-South-Wales/events/268422525"; - } - { - from = "/roadmap"; - to = "/drupal-upgrade"; - } - { - from = "/rss"; - to = "/rss.xml"; - } - { - from = "/rst2pdf"; - to = "/talks/building-presenting-slide-decks-rst2pdf"; - } - { - from = "/s9MjJ"; - to = "https://symfonycasts.com/screencast/symfony"; - } - { - from = "/sculpin"; - to = "/talks/building-static-websites-sculpin"; - } - { - from = "/sculpin-encore-versioning"; - to = "https://github.com/opdavies/oliverdavies.uk/commit/d192b04aefa6e7a21bfc1f2e0fe0a16111e0e8a2"; - } - { - from = "/sites/default/files/images/social-avatar.jpg"; - to = "/images/social-avatar.jpg"; - } - { - from = "/skills"; - to = "https://opdavies-skills-tailwindcss.netlify.com/"; - } - { - from = "/slides-drupal-9"; - to = "https://slides-upgrading-to-drupal-9.oliverdavies.uk"; - } - { - from = "/slides-upgrading-to-drupal-9"; - to = "https://slides-upgrading-to-drupal-9.oliverdavies.uk"; - } - { - from = "/slides-upgrading-to-drupal-9/index.html"; - to = "https://slides-upgrading-to-drupal-9.oliverdavies.uk"; - } - { - from = "/slides-working-with-workspace"; - to = "https://slides-working-with-workspace.oliverdavies.uk"; - } - { - from = "/speaker"; - to = "/press"; - } - { - from = "/speaker-info"; - to = "/speaker"; - } - { - from = "/speaker-information"; - to = "/speaker"; - } - { - from = "/speaking-videos"; - to = "https://www.youtube.com/playlist?list=PLHn41Ay7w7kfAzczswrANch5oHAPZBlvu"; - } - { - from = "/stream"; - to = "https://www.youtube.com/channel/UCkeK0qF9HHUPQH_fvn4ghqQ/live"; - } - { - from = "/subscription"; - to = "/"; - } - { - from = "/swap-markdown-parser"; - to = "https://github.com/opdavies/sculpin-twig-markdown-bundle-example/tree/swap-markdown-parser"; - } - { - from = "/symfony"; - to = "https://connect.symfony.com/profile/opdavies"; - } - { - from = "/symfony-server"; - to = "/articles/running-drupal-with-symfony-local-server"; - } - { - from = "/symfonylive"; - to = "/articles/live-blogging-symfonylive-london"; - } - { - from = "/symposium"; - to = "https://symposiumapp.com/u/opdavies"; - } - { - from = "/tailwind-css-talk"; - to = "/talks/taking-flight-tailwind-css"; - } - { - from = "/tailwind-repos"; - to = "https://github.com/opdavies?utf8=%e2%9c%93&tab=repositories&q=tailwindcss"; - } - { - from = "/tailwind-talk"; - to = "/talks/taking-flight-with-tailwind-css"; - } - { - from = "/tailwindcss-demo"; - to = "http://tailwindcss-demo.oliverdavies.uk/"; - } - { - from = "/talks"; - to = "/presentations"; - } - { - from = "/talks-offer-tweet"; - to = "https://twitter.com/opdavies/status/1250870367712935938"; - } - { - from = "/talks/2012/09/05/what-is-this-drupal-thing-unified-diff"; - to = "/talks/what-is-this-drupal-thing"; - } - { - from = "/talks/2013/07/10/drupal-ldap-swdug"; - to = "/talks/drupal-ldap"; - } - { - from = "/talks/2014/03/01/git-flow-drupalcamp-london-2014"; - to = "/talks/git-flow"; - } - { - from = "/talks/2014/07/02/drush-make-drupalbristol-drupal-bristol"; - to = "/talks/drush-make-drupalbristol"; - } - { - from = "/talks/2014/08/19/drupal-association-swdug"; - to = "/talks/drupal-association"; - } - { - from = "/talks/2015/01/18/drupalorg-2015-drupalcamp-brighton-2015"; - to = "/talks/drupalorg-in-2015-whats-coming-next"; - } - { - from = "/talks/2015/02/28/drupalorg-2015-drupalcamp-london-2015"; - to = "/talks/drupalorg-in-2015-whats-coming-next"; - } - { - from = "/talks/2015/04/08/drupal-8-phpsw"; - to = "/talks/drupal-8"; - } - { - from = "/talks/2015/07/25/test-drive-twig-with-sculpin-drupalcamp-north-2015"; - to = "/talks/test-drive-twig-with-sculpin"; - } - { - from = "/talks/2015/08/25/dancing-for-drupal-umbristol"; - to = "/talks/dancing-for-drupal"; - } - { - from = "/talks/2015/10/14/sculpin-phpsw"; - to = "/talks/sculpin"; - } - { - from = "/talks/2016/03/05/drupal-8-module-development-drupalcamp-london-2016"; - to = "/talks/getting-started-with-drupal-8-module-development"; - } - { - from = "/talks/2016/03/09/drupal-vm-generator-nwdug"; - to = "/talks/drupal-vm-generator"; - } - { - from = "/talks/2016/04/02/drupal-vm-generator-drupal-bristol"; - to = "/talks/drupal-vm-generator"; - } - { - from = "/talks/2016/06/11/drupal-8-rejoining-the-herd-php-south-coast-2016"; - to = "/talks/drupal-8-rejoining-the-herd"; - } - { - from = "/talks/2016/07/23/drupal-vm-meet-symfony-console-drupalcamp-bristol-2016"; - to = "/talks/drupal-vm-meet-symfony-console"; - } - { - from = "/talks/2016/11/09/drupal-development-with-composer-phpsw"; - to = "/talks/drupal-development-with-composer"; - } - { - from = "/talks/2016/11/17/goodbye-drush-make-hello-composer-drupal-bristol"; - to = "/talks/goodbye-drush-make-hello-composer"; - } - { - from = "/talks/2017/01/18/getting-your-data-into-drupal-8-drupal-bristol"; - to = "/talks/getting-your-data-into-drupal-8"; - } - { - from = "/talks/2017/03/04/getting-your-data-into-drupal-8-drupalcamp-london-2017"; - to = "/talks/getting-your-data-into-drupal-8"; - } - { - from = "/talks/ansible-ansistrano"; - to = "https://www.oliverdavies.uk/talks/deploying-php-ansible-ansistrano"; - } - { - from = "/talks/deploying-php-applications-fabric"; - to = "/talks/deploying-php-fabric"; - } - { - from = "/talks/deploying-php-applications-with-fabric"; - to = "/talks/deploying-php-fabric"; - } - { - from = "/talks/drupal-vm-generator-2"; - to = "/talks/drupal-vm-generator"; - } - { - from = "/talks/drupalorg-2015-2"; - to = "/talks/drupalorg-2015"; - } - { - from = "/talks/drupalorg-in-2015-whats-coming-next"; - to = "/talks/drupalorg-2015"; - } - { - from = "/talks/getting-started-with-drupal-8-module-development"; - to = "/drupal-8-module-development"; - } - { - from = "/talks/having-fun-drupal-8-php-libraries-drupalorg-api"; - to = "/talks/drupal-8-php-libraries-drupalorg-api"; - } - { - from = "/talks/never-commit-master-introduction-git-flow"; - to = "/talks/git-flow"; - } - { - from = "/talks/sculpin"; - to = "/talks/building-static-websites-sculpin"; - } - { - from = "/talks/tailwind"; - to = "/talks/taking-flight-with-tailwind-css/"; - } - { - from = "/talks/taking-flight-tailwind-css"; - to = "/talks/taking-flight-with-tailwind-css"; - } - { - from = "/talks/using-laravel-collections-outside-laravel"; - to = "/talks/using-illuminate-collections-outside-laravel"; - } - { - from = "/talks/working-workspace"; - to = "/talks/working-with-workspace"; - } - { - from = "/tdd-blog"; - to = "https://github.com/opdavies/drupal-module-tdd-blog"; - } - { - from = "/tdd-test-driven-drupal"; - to = "/talks/tdd-test-driven-drupal/"; - } - { - from = "/team-coaching"; - to = "/"; - } - { - from = "/test-driven-drupal-book"; - to = "/test-driven-drupal"; - } - { - from = "/testing-drupal"; - to = "https://www.oliverdavies.uk/talks/tdd-test-driven-drupal"; - } - { - from = "/testing-drupal-intro"; - to = "https://inviqa.com/blog/drupal-automated-testing-introduction"; - } - { - from = "/testing-tailwind-plugins"; - to = "/articles/testing-tailwindcss-plugins-with-jest"; - } - { - from = "/testing-workshop"; - to = "https://github.com/opdavies/workshop-drupal-automated-testing"; - } - { - from = "/testing-workshop-code"; - to = "https://github.com/opdavies/workshop-drupal-automated-testing-code"; - } - { - from = "/todoist-filters"; - to = "https://gist.github.com/opdavies/6709fbdac5c3babbd94137bcc8b8e3c2"; - } - { - from = "/twitter-tweaks"; - to = "https://github.com/opdavies/chrome-extension-twitter-tweaks"; - } - { - from = "/upgrading-to-drupal-9"; - to = "/talks/upgrading-your-site-drupal-9"; - } - { - from = "/uxbjV"; - to = "https://www.drupal.org/project/copyright_block"; - } - { - from = "/vyTEF"; - to = "https://www.npmjs.com/package/tailwindcss-vuejs"; - } - { - from = "/webpack-encore-pcss-regex"; - to = "https://regexr.com/51iaf"; - } - { - from = "/wordcamp-bristol-tailwindcss"; - to = "https://2019.bristol.wordcamp.org/session/taking-flight-with-tailwind-css"; - } - { - from = "/wordpress-tailwind"; - to = "https://github.com/opdavies/wordcamp-bristol-2019"; - } - { - from = "/work"; - to = "/drupal-php-developer"; - } - { - from = "/working-with-workspace"; - to = "/talks/working-with-workspace"; - } - { - from = "/workshop-drupal-testing"; - to = "https://github.com/opdavies/workshop-drupal-automated-testing"; - } - { - from = "/workspace-demo"; - to = "https://github.com/opdavies/working-with-workspace-demo"; - } - { - from = "/wp-tailwind"; - to = "https://wp-tailwind.oliverdavies.uk"; - } - { - from = "/wp-tailwind-repo"; - to = "https://github.com/opdavies/wordcamp-bristol-2019"; - } - { - from = "/wp-tailwind-starter"; - to = "https://github.com/opdavies/wordpress-tailwindcss-startker-kit"; - } - { - from = "/wp-tailwind-static"; - to = "https://wp-tailwind.oliverdavies.uk"; - } - { - from = "/yXhoS"; - to = "/talks/things-you-should-know-about-php"; - } -]