<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Technical on Resolver Engineering Blog</title>
    <link>https://engineering.resolvergroup.com/categories/technical/</link>
    <description>Recent content in Technical on Resolver Engineering Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>Copyright © 2026 Resolver Group</copyright>
    <lastBuildDate>Fri, 31 Mar 2023 13:45:35 +0100</lastBuildDate>
    <atom:link href="https://engineering.resolvergroup.com/categories/technical/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Hack week 2023: OpenAI for dispute resolution</title>
      <link>https://engineering.resolvergroup.com/2023/03/hack-week-2023/</link>
      <pubDate>Fri, 31 Mar 2023 13:45:35 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2023/03/hack-week-2023/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post was partially written by and edited using &lt;a href=&#34;https://openai.com/blog/chatgpt&#34;&gt;ChatGPT&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Last month the Resolver development team had their first official hack week, which was dedicated to checking out the potential to improve our software with the help of &lt;a href=&#34;https://openai.com/&#34;&gt;OpenAI&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;what-is-openai&#34;&gt;What is OpenAI?&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;ve probably heard of OpenAI since their ChatGPT program has made headlines frequently in recent months.&lt;/p&gt;
&lt;p&gt;According to my assistant editor:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;OpenAI is an artificial intelligence research laboratory consisting of a team of experts and researchers in the field of machine learning, natural language processing, robotics, and other related areas. The organization aims to develop advanced artificial intelligence in a safe and beneficial manner to benefit humanity as a whole. They conduct cutting-edge research and also develop various AI-based products and tools such as language models, chatbots, and robotics applications.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ChatGPT&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Talking robots! Let&#39;s talk about APIs</title>
      <link>https://engineering.resolvergroup.com/2022/03/talking-robots-lets-talk-about-apis/</link>
      <pubDate>Fri, 11 Mar 2022 14:45:17 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2022/03/talking-robots-lets-talk-about-apis/</guid>
      <description>&lt;h2 id=&#34;what-is-an-api&#34;&gt;What is an API?&lt;/h2&gt;
&lt;p&gt;API stands for Application Programming Interface, let&amp;rsquo;s break that down:&lt;/p&gt;
&lt;p&gt;Interface - Every device we use has some kind of interface. Your TV has a remote with buttons on it, while a light switch has an even more straightforward interface- on or off. We use these interfaces to get the device to do what we want.&lt;/p&gt;
&lt;p&gt;Application Programming - The Application Programming bit is easier to understand. An API is how applications talk to each other. All software that you can interact with through code has some form of an API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AWS S3 UTF-8 Content Disposition</title>
      <link>https://engineering.resolvergroup.com/2022/02/aws-s3-utf-8-content-disposition/</link>
      <pubDate>Fri, 18 Feb 2022 16:09:29 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2022/02/aws-s3-utf-8-content-disposition/</guid>
      <description>&lt;p&gt;Have you ever tried to make the download filename of an AWS S3 object be in Korean? No…? Being a developer who, until recently, had only written in English, I hadn&amp;rsquo;t either. However, it turns out using some UTF-8 characters in S3 object request parameters can lead to some interesting errors.&lt;/p&gt;
&lt;h2 id=&#34;how-to-change-the-filename-of-a-download&#34;&gt;How to Change the Filename of a Download&lt;/h2&gt;
&lt;p&gt;When downloading a file directly from the browser using a HTML anchor tag, the &lt;code&gt;download=&amp;lt;filename&amp;gt;&lt;/code&gt; attribute can be used. However, the attribute will only work for same-origin URLs and the &lt;code&gt;blob:&lt;/code&gt; and &lt;code&gt;data:&lt;/code&gt; schemes. For example:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rolling back AWS Elastic Container Service (ECS) Deployments</title>
      <link>https://engineering.resolvergroup.com/2021/10/rolling-back-aws-elastic-container-service-ecs-deployments/</link>
      <pubDate>Wed, 13 Oct 2021 13:07:43 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/10/rolling-back-aws-elastic-container-service-ecs-deployments/</guid>
      <description>&lt;h2 id=&#34;what-is-ecs&#34;&gt;What is ECS?&lt;/h2&gt;
&lt;p&gt;AWS Elastic Container Service (ECS) is a fast and popular way to orchestrate containerised applications in AWS&amp;rsquo;s cloud computing platform. ECS comes with autoscaling baked in and natively runs containers on AWS&amp;rsquo;s Fargate serverless compute engine. What makes ECS particularly nice to use is that it abstracts away much of the operations management that comes along with rolling your own deployment, either on-site or on cloud-based computing, such as AWS EC2.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Upgrading to Rails 6.0</title>
      <link>https://engineering.resolvergroup.com/2021/09/upgrading-to-rails-6-0/</link>
      <pubDate>Wed, 29 Sep 2021 10:00:02 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/09/upgrading-to-rails-6-0/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Whenever a Ruby on Rails developer hears the phrase “New Rails update!” they will no doubt experience a mixture of excitement and fear. It’s always very exciting to see the new tools that come with a new Rails version and all the new possibilities that go with it. But at the same time, you know that you are bound to have some hiccups with some legacy code or some old gem that you use on your application. Nevertheless, I decided it was time to upgrade our Rails app.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a Gem in Ruby: a Jewelcrafting guide for Developers</title>
      <link>https://engineering.resolvergroup.com/2021/08/creating-a-gem-in-ruby-a-jewelcrafting-guide-for-developers/</link>
      <pubDate>Wed, 25 Aug 2021 13:05:38 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/08/creating-a-gem-in-ruby-a-jewelcrafting-guide-for-developers/</guid>
      <description>&lt;h2 id=&#34;what-is-a-gem&#34;&gt;What is a Gem?&lt;/h2&gt;
&lt;p&gt;Gems are small chunks of code used to perform specific duties without interfering with, or becoming a direct part of our code. The code required for a gem will still be a part of our project’s ecosystem, but we will ultimately remove some overhead, and avoid unnecessary duplication by using a gem instead of coding it ourselves.&lt;/p&gt;
&lt;h2 id=&#34;why-create-a-gem&#34;&gt;Why create a Gem?&lt;/h2&gt;
&lt;p&gt;Gems are a helpful byproduct created when you either have a piece of self contained code, or else when a developer realizes the code might benefit others. If we want to use that code elsewhere or want to share it, that’s when it’s time to make a gem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Awesomplete for auto-complete inputs</title>
      <link>https://engineering.resolvergroup.com/2021/08/using-awesomplete-for-auto-complete-inputs/</link>
      <pubDate>Tue, 10 Aug 2021 17:43:04 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/08/using-awesomplete-for-auto-complete-inputs/</guid>
      <description>&lt;p&gt;Awesomplete is a front-end autocomplete tool that compares a user’s input to a defined data list, and if it recognises the input will make suggestions for the user to choose from.&lt;/p&gt;
&lt;p&gt;We chose to use the Awesomplete tool in the Accord team while building the journey to enable users to create and submit their dispute. Awesomplete provided a neat solution to our problem of how to let the user choose the organisation they are raising a dispute against. The simplest solution would have been a dropdown list of all available organisations. However, as we will be working with ADR providers representing potentially hundreds or thousands of organisations, a dropdown list would not have been a feasible solution. Enter Awesomplete!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up VPC peering</title>
      <link>https://engineering.resolvergroup.com/2021/03/setting-up-vpc-peering/</link>
      <pubDate>Mon, 29 Mar 2021 08:00:00 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/03/setting-up-vpc-peering/</guid>
      <description>&lt;p&gt;VPCs are a way of partitioning infrastructure in AWS to isolate them from communication with other infrastructure. They operate at the network level similar to VLANs and block all external communication by default.&lt;/p&gt;
&lt;p&gt;However, sometimes it is necessary to allow some inter-VPC communication. For example, if you have multiple AWS accounts that need to access some shared service, that will require infrastructure in one VPC to access infrastructure in another VPC.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cross-region deployments with CodePipeline</title>
      <link>https://engineering.resolvergroup.com/2021/03/cross-region-deployments-with-codepipeline/</link>
      <pubDate>Mon, 15 Mar 2021 08:00:00 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/03/cross-region-deployments-with-codepipeline/</guid>
      <description>&lt;p&gt;Last time, we looked at &lt;a href=&#34;https://engineering.resolvergroup.com/2021/03/triggering-aws-ecs-deployments-via-github-codepipeline-and-ecr/&#34;&gt;building a deployment pipeline using CodePipeline&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Given the increasing number of countries that are implementing data residency policies, we now need to be able to deploy a copy of our application in a different region along with its database and connected services at the same time as in the main region (London &lt;code&gt;eu-west-2&lt;/code&gt; in this case).&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll look at how we can amend our earlier CodePipeline deployment pipeline to deploy the same application image to ECS in two different regions simultaneously.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Triggering AWS ECS deployments via GitHub, CodePipeline and ECR</title>
      <link>https://engineering.resolvergroup.com/2021/03/triggering-aws-ecs-deployments-via-github-codepipeline-and-ecr/</link>
      <pubDate>Mon, 01 Mar 2021 08:00:00 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/03/triggering-aws-ecs-deployments-via-github-codepipeline-and-ecr/</guid>
      <description>&lt;p&gt;Deployments are a key part of running a web application, but most of the time, they are an afterthought when it comes to process and developer ease-of-use.&lt;/p&gt;
&lt;p&gt;However, using a number of AWS services, deployments can be made much easier, with most of the process automated.&lt;/p&gt;
&lt;p&gt;On the Accord ODR project, we use ECS to host our application using Docker containers. Here, I&amp;rsquo;ll show how GitHub, CodePipeline and ECR (Elastic Container Registry) can be used to create an easy-to-use process that mostly just happens in the background and is very light touch.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding cron jobs with error recovery to AWS using Lambda, Step Functions and EventBridge</title>
      <link>https://engineering.resolvergroup.com/2021/02/adding-cron-jobs-with-error-recovery-to-aws-using-lambda-step-functions-and-eventbridge/</link>
      <pubDate>Mon, 15 Feb 2021 08:00:00 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/02/adding-cron-jobs-with-error-recovery-to-aws-using-lambda-step-functions-and-eventbridge/</guid>
      <description>&lt;p&gt;Scheduled jobs (or Cron jobs) are a standard part of web development. Whether you want to update comment counts every night or check for updates once a week, a scheduled job allows you to &amp;ldquo;set and forget&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;There are a number of methods to implement scheduled jobs. Some rudimentary web apps check the schedule each time someone visits a page. This works as long as there are regular visitors, otherwise the schedule may slip during quiet periods. Better methods include either using the underlying server&amp;rsquo;s &lt;code&gt;cron&lt;/code&gt; implementation (if possible) or possibly using a background worker like Sidekiq that also has scheduling capabilities.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Allowing CloudFront to access load balancers through Security Groups</title>
      <link>https://engineering.resolvergroup.com/2021/02/allowing-cloudfront-to-access-load-balancers-through-security-groups/</link>
      <pubDate>Mon, 01 Feb 2021 08:00:00 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/02/allowing-cloudfront-to-access-load-balancers-through-security-groups/</guid>
      <description>&lt;p&gt;Security Groups are a best practice feature of VPCs in AWS that act similar to a firewall. They allow access to various resources such as EC2 instances, load balancers or RDS databases to be controlled to other resources or a set of IP addresses.&lt;/p&gt;
&lt;p&gt;For example, you may set up an EC2 instance to only be accessible by a load balancer. This means uses cannot bypass the load balancer to access your instance directly. You might set this up as follows:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending emails using Mandrill/Mailchimp with Ruby on Rails</title>
      <link>https://engineering.resolvergroup.com/2021/01/sending-emails-using-mandrill-mailchimp-with-ruby-on-rails/</link>
      <pubDate>Mon, 18 Jan 2021 08:00:00 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2021/01/sending-emails-using-mandrill-mailchimp-with-ruby-on-rails/</guid>
      <description>&lt;p&gt;I recently started working on a ticket where I was asked to add a new mail template and the logic behind it. I have not really worked with either Mandrill or Mailchimp much before, so I started doing research into how to do this. Every blog post and Stack Overflow post that I could find is aimed at doing this for the first time, i.e. integrating a Ruby on Rails app to use Mandrill/Mailchimp. After looking at documentation and reading through our codebase I managed to work it out in the end, but I hope that this post will explain to any other developer how to do this off the bat.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up Athena to analyse CloudFront access logs</title>
      <link>https://engineering.resolvergroup.com/2020/12/setting-up-athena-to-analyse-cloudfront-access-logs/</link>
      <pubDate>Mon, 14 Dec 2020 08:00:00 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/12/setting-up-athena-to-analyse-cloudfront-access-logs/</guid>
      <description>&lt;p&gt;One of the best ways of working out who is how many people are visiting your site, see patterns of traffic and analyse them over time is to look at your access logs.&lt;/p&gt;
&lt;p&gt;Most web servers collect some form of access logs, mostly in a standard format such as the &lt;a href=&#34;https://en.wikipedia.org/wiki/Common_Log_Format&#34;&gt;Common Log Format&lt;/a&gt;. As a CDN, CloudFront can also collect access logs when configured to do so, storing them in an S3 bucket ready for analysis.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Virus scanning files in S3 and integrating with Rails</title>
      <link>https://engineering.resolvergroup.com/2020/11/virus-scanning-files-in-s3-and-integrating-with-rails/</link>
      <pubDate>Mon, 16 Nov 2020 08:00:00 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/11/virus-scanning-files-in-s3-and-integrating-with-rails/</guid>
      <description>&lt;p&gt;If you have an app that accepts file uploads, then either you&amp;rsquo;re aware of the potential risks, or you should be.&lt;/p&gt;
&lt;p&gt;With Accord ODR, we started by limiting the types of files that can be uploaded by users. This is the easy part: disallow executable files or anything else that can be scripted. This includes not only obvious candidates like JavaScript files but also things like &lt;a href=&#34;https://en.wikipedia.org/wiki/Windows_Metafile_vulnerability&#34;&gt;WMF images&lt;/a&gt;, since these can contain executable code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using VCR in tests</title>
      <link>https://engineering.resolvergroup.com/2020/11/using-vcr-in-tests/</link>
      <pubDate>Mon, 02 Nov 2020 08:00:00 +0000</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/11/using-vcr-in-tests/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/vcr/vcr&#34;&gt;VCR&lt;/a&gt; is a gem that is super helpful if your Ruby application is using an external API. When testing, if an actual API is called, this will result in slow test performance. Although a single test may not seem &lt;em&gt;that&lt;/em&gt; slow when run individually, the impact of using many API calls in tests will significantly slow down the time it takes to run tests.&lt;/p&gt;
&lt;p&gt;This is why VCR is so handy! What it allows you to do is to record a ‘cassette’ of your API request and will save the results and then use the cassette in testing from then on. This means that once set up, the first time that the test is run, VCR uses the actual API and records the actual response in a (pretend!) ‘cassette’, this saved response is then used in place of using the actual API each time the test is run. The benefits of this is that now your tests will run faster, but also that the tests will not be dependent on the external service working.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CI using GitHub and AWS CodeBuild</title>
      <link>https://engineering.resolvergroup.com/2020/10/ci-using-github-and-aws-codebuild/</link>
      <pubDate>Mon, 19 Oct 2020 08:00:28 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/10/ci-using-github-and-aws-codebuild/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://engineering.resolvergroup.com/2020/09/sending-slack-alerts-to-approve-codepipeline-deployments/&#34;&gt;Last time&lt;/a&gt;, we mentioned CI as one of things that we try to automate as much as possible. This time, we&amp;rsquo;ll go through more details about our CI setup and how it relates to our deployment pipeline.&lt;/p&gt;
&lt;h2 id=&#34;setting-up-the-codebuild-project&#34;&gt;Setting up the CodeBuild project&lt;/h2&gt;
&lt;p&gt;As well as being used as part of a CodePipeline, CodeBuild can also be used on its own as a script-runner of sorts. This makes it ideal as somewhere to run automated tests, and this is exactly what we do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending Slack alerts to approve CodePipeline deployments</title>
      <link>https://engineering.resolvergroup.com/2020/09/sending-slack-alerts-to-approve-codepipeline-deployments/</link>
      <pubDate>Mon, 28 Sep 2020 08:00:00 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/09/sending-slack-alerts-to-approve-codepipeline-deployments/</guid>
      <description>&lt;p&gt;At Resolver, we aim to automate as much of the boring technical jobs as possible, and that includes the whole continuous integration (CI) and deployment pipeline. We trigger these from GitHub, so a mere push or merge can kick-off our automated test suite or deploy to our staging environment for more automated and manual testing.&lt;/p&gt;
&lt;p&gt;Our deployment pipeline also happens to deploy the same artefacts that have been deployed to our staging environment to our production environment. The end goal is to be able to do this automatically, but for that to be viable, we need to have 100% trust in our testing strategy, and as with most organisations, we&amp;rsquo;re not there yet. Therefore, for the time being, we want to be able to pause the pipeline after the staging deployment, and manually approve it to continue to production.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running database migrations on deployment for Fargate containers</title>
      <link>https://engineering.resolvergroup.com/2020/09/running-database-migrations-on-deployment-for-fargate-containers/</link>
      <pubDate>Mon, 14 Sep 2020 08:00:00 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/09/running-database-migrations-on-deployment-for-fargate-containers/</guid>
      <description>&lt;p&gt;One of the tenets of modern framework-based web development is the management of your database state in code. Rather like infrastructure-as-code, it means there is an immutable history of the state of the application database at any point in time, which can be re-applied or rolled back as necessary. In addition, the desired state of the database and the application are tied together at any point in time to reduce the chances of divergence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finally forcing computers to think like humans</title>
      <link>https://engineering.resolvergroup.com/2020/08/finally-forcing-computers-to-think-like-humans/</link>
      <pubDate>Mon, 31 Aug 2020 08:00:00 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/08/finally-forcing-computers-to-think-like-humans/</guid>
      <description>&lt;p&gt;On 17th June 2020 I attended my first AWS summit. New to the industry, it was one of the first tech conferences I’d been to (other than the Women in Development conference earlier this year, back in that beautiful time when people were allowed to meet in groups&amp;hellip;) and was certainly the first virtual online conference I’ve been to. I didn’t quite know what to expect, but it ended up being an intense, engaging half-day where I learnt a LOT.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing HTTP Basic Auth for Fargate using Lambda@Edge and CloudFront</title>
      <link>https://engineering.resolvergroup.com/2020/08/implementing-http-basic-auth-for-fargate-using-lambdaedge-and-cloudfront/</link>
      <pubDate>Mon, 17 Aug 2020 08:00:00 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/08/implementing-http-basic-auth-for-fargate-using-lambdaedge-and-cloudfront/</guid>
      <description>&lt;p&gt;Ask any developer the quickest and hackiest way of locking unauthorised users out of your website and they will probably mention HTTP Basic Auth. As an extremely simple method of authentication that is built-in to the HTTP protocol standard and supported by every web browser, it&amp;rsquo;s the universal, go-to method of setting up a username and password authentication prompt with minimal work.&lt;/p&gt;
&lt;p&gt;Simplicity and minimalism of course bring with them compromise, and most things you may associate with authentication systems cannot be achieved easily or at all with HTTP Basic Auth, so you would probably not consider it your primary authentication method for anything but the most basic of needs. But for our needs, it&amp;rsquo;s the perfect method of stopping casual snooping and accidental usage of a non-live system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>If you only learn 5 Docker Compose commands, it should be these</title>
      <link>https://engineering.resolvergroup.com/2020/08/if-you-only-learn-5-docker-compose-commands-it-should-be-these/</link>
      <pubDate>Mon, 03 Aug 2020 08:00:04 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/08/if-you-only-learn-5-docker-compose-commands-it-should-be-these/</guid>
      <description>&lt;p&gt;In my &lt;a href=&#34;http://a-beginners-guide-to-docker-and-containerisation&#34;&gt;previous blog post&lt;/a&gt;, I gave a brief introduction to containerisation, and the differences between Docker and Docker Compose. Here I’m going to share the Docker Compose commands that I use on a daily basis and have found the most essential.&lt;/p&gt;
&lt;p&gt;In my opinion, if you only learn 5 Docker Compose commands, they should be:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;docker-compose up&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Run this command to launch your project.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;up&lt;/code&gt; command builds or creates all the services in the docker-compose file and starts a container for each of them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A beginner’s guide to Docker and containerisation</title>
      <link>https://engineering.resolvergroup.com/2020/07/a-beginners-guide-to-docker-and-containerisation/</link>
      <pubDate>Mon, 20 Jul 2020 08:00:00 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/07/a-beginners-guide-to-docker-and-containerisation/</guid>
      <description>&lt;p&gt;I joined Resolver in February 2020 and was put into the Accord team, working on a brand new project (they had literally typed the words ‘&lt;code&gt;rails new&lt;/code&gt;’ the week before I joined). This meant I would be involved from the ground up, that I would see the app grow and develop from the very start, and that I wouldn’t need to get to grapple with years of legacy code.&lt;/p&gt;
&lt;p&gt;As we had decided to build the app with Docker, which I haven’t used before, it also meant I was about to get to grips with it very quickly! This whale of a task initially felt quite daunting, but thanks to the gloriously comprehensive &lt;a href=&#34;https://docs.docker.com/reference/&#34;&gt;Docker documentation&lt;/a&gt;, Linux Academy courses about Orchestration, Containers and Docker, Rob Isenberg’s invaluable &lt;em&gt;Docker for Rails Developers&lt;/em&gt; book, and, of course, a lot of Googling, I’m now happy to share my understanding of containers and Docker in my next few blog posts. I hope they can help make the topic a little less confusing!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Granting time-limited access to assets in S3 using CloudFront</title>
      <link>https://engineering.resolvergroup.com/2020/07/granting-time-limited-access-to-assets-in-s3-using-cloudfront/</link>
      <pubDate>Mon, 06 Jul 2020 08:00:00 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/07/granting-time-limited-access-to-assets-in-s3-using-cloudfront/</guid>
      <description>&lt;p&gt;There was a time when asset storage was one of the problems facing web app developers - maybe you stored assets on the web server (easy if you only have one, more difficult if you need to sync them up between multiple servers), or maybe you had a shared disk mounted using NFS. In any case, the easier part was granting access to these assets to the right users. Given that assets are normally stored outside the web server&amp;rsquo;s root directory, it&amp;rsquo;s easy to write a script that checks user access then serves the asset.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to redirect an apex domain to www using CloudFront and S3</title>
      <link>https://engineering.resolvergroup.com/2020/06/how-to-redirect-an-apex-domain-to-www-using-cloudfront-and-s3/</link>
      <pubDate>Mon, 08 Jun 2020 08:00:00 +0100</pubDate>
      <guid>https://engineering.resolvergroup.com/2020/06/how-to-redirect-an-apex-domain-to-www-using-cloudfront-and-s3/</guid>
      <description>&lt;p&gt;A common issue for developers and operations staff when it comes to domain names is whether to choose the apex domain (e.g. &lt;code&gt;example.com&lt;/code&gt;) or the www subdomain (e.g. &lt;code&gt;www.example.com&lt;/code&gt;) as their primary domain, and then how to redirect one to the other.&lt;/p&gt;
&lt;h2 id=&#34;choosing-to-use-www-over-the-apex&#34;&gt;Choosing to use www over the apex&lt;/h2&gt;
&lt;p&gt;At Resolver, we use AWS for the majority of our infrastructure, and we generally have staging and production environments for each product or service we build. We use subdomains as namespaces to separate the environments whilst providing similar URLs for each.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
