In today's data-driven world, it is more important than ever to have a complete view of the data that sits across your organisation. In daily operations, a business can generate and manage various data across multiple applications and sources, such as CRMs, daily operations, spreadsheets, and more.
Data engineering services can help you bring these disparate data sources together, and prepare them such that they can be analysed to gain powerful insights into your business. This information can help you to improve:
Decision-making: You can make better decisions by accessing the data across your business in a single place.
Efficiency: Data engineering can
Data engineering is a key function for all businesses in today's data-driven world. By leveraging the vast amounts of data they collect, SMBs can gain valuable insights which can help them make better decisions, improve their operations, and enhance their services to benefit their customers.
Some of the benefits to business of data engineering services include:
Improved decision-making: Your business can make more informed decisions with access to clean, accurate, and up-to-date data. This data can be used to identify trends, track progress, and measure the effectiveness of all aspects of your business.
Increased efficiency: Data engineering services can help businesses like yours
As part of our ongoing commitment to data protection and digital security, Plymouth Software are proud to have achieved the UK Cyber Essentials certification.
Cyber Essentials helps to ensure our business infrastructure and processes are protected against a wide range of the most common cyber attacks.
We were supported through the process by fellow PSP tenant BlueScreenIT who reviewed our IT setup and advised on any necessary updates to ensure our compliance with the scheme.
As a company, we have always focussed on strong security and data protection for our clients’ applications, and Cyber Essentials certification continues our commitment to this goal.
Our Code
Last month, Plymouth Software passed the 10 year milestone! The business was founded on 19 July 2010, originally launching with a web-based hosting management app - we still have the source code, written on Rails 2.3!
I quickly learned the dangers of focussing all my efforts on the technology and not enough on the marketing, though. Eventually, I had to shut down the app, as the company shifted to client services. While we focussed on native mobile apps, Rails was always the core of our business. We used it to build web-based systems and custom APIs that powered the content behind
Dockerising Webpacker
A github repo containing the code discussed in this tutorial can be found on my GitHub
1. Introduction
This article will create a starter Rails application (running Ruby 2.7.1), dockerise it, and teach you how to run the webpack-dev-server (key for developing with JS frameworks such as React or Vue) in Docker. If you have a pre-existing & already Dockerised app then skip to Dockerising Webpacker.
For the sake of brevity I'm not going to cover installing Docker or Rails. If you are looking for guides to cover these, I can recommend the Docker and Rails official documentation.
Finally, I could not have
This is the fourth installment in a series, describing a way to implement validation for your vue tables.
This tutorial assumes you have read the previous articles, starting from here. If you want to skip straight to this step, pick up a copy of the code you'll need from this repo
1. Why I avoided Vuelidate
If you've looked into validation on Vue components before, chances are you've encountered the Vuelidate package – if you're trying to validate a Vue component on it's own, this is a fantastic all-in-one solution. However, I'm approaching this as a Ruby developer first and foremost, and as
This is the third installment in a series, covering updating Rails data using an inline table editor made with Vue
This tutorial assumes you have read the previous articles, starting from here. If you want to skip straight to this step, pick up a copy of the code you'll need from this repo
1. Adding a static table
1. Install bootstrap-vue package
To create our table, we're going to use the bootstrap-vue package, chosen to help this table module more easily integrate with existing web apps.
$ yarn add bootstrap-vue
...
> info All dependencies
Plymouth Software were introduced to the Independent Schools Inspectorate (ISI) as they were looking to develop their existing Rails application, which serves the company purposes, and provides information to over 1000 independent schools across the UK.
Their custom analytics application for had been working for them, and as its use had grown, they were looking to enhance and expand its functionality.
With Rails 5 released, ISI were also aware that an action plan to upgrade the application was needed, in order to ensure that the reliability and security of the code was not impacted.
As well as migrating the infrastructure of the application
This tutorial assumes you have read the first article, found here. If you want to skip straight to this step, pick up a copy of the code you'll need from this repo
1. Adding a rails model
Vue components are fantastic on their own, but they really shine when we can pass data from our Rails backend into them. I'm going to explain how to achieve this, but first we need some data to use.
This part very briefly covers the creation of a model, an index page, and seeds for your database so that we have mock data to work with
# Create
This article assumes you have a fundamental knowlege of Ruby on Rails, but will discuss the complete basics of Vue
This is the first of a series of articles intended to be an introduction to the VueJS framework and it's integration with a Ruby on Rails backend
1. My favourite command - rails new
Sometimes, the best feeling in the world is starting a new, fast, and up-to-date project. That's why this article is going to start at the beginning and we're going to go through the classic steps of creating a new project and creating a Vue project from scratch.
If you are
System tests in Rails are a great way to test several aspects of your application. They also allow tests to be written in a user-centric way, focussing on user outcomes rather than technical implementation.
However, whilst Rails 5 makes system specs easy to configure in a standard environment, configuring them in a containerised environment can be a little trickier - even more so if you are using RSpec rather than Rails' default minitest framework.
At Plymouth Software, we are using the standalone Selenium Grid Chrome image to provide a container with chrome pre-installed, and configuring the test suite to use that container.
This
At time of writing, I've just finished the second year of my CompSci degree and am taking a placement year in industry. Two years ago, I had absolutely no programming experience and I'm sure there are other people in a similar situation.
Here's what I wish somebody had told me...
1. Make a GitHub profile, and put everything on there.
If your course is structured anything like mine, you might not encounter Git at all until second year. Given that it's such a fundamental part of this field, this is unacceptable. GitHub will become your public technical profile, a way to share your
We were really pleased to hear that the Mayflower Forest project smashed its funding target! This exciting project, which is part of the city's Mayflower 400 celebrations, will involve planting over 1000 trees to create a new green gateway to Plymouth on the Marsh Mills roundabout.
The team at Plymouth Software is proud to have played a small part in the success
of the project, being one of over 200 supporters to pledge to its Crowdfunder page.
We are incredibly proud of the city we call home, and 2020 is an exciting year
for the city with the Mayflower 400 celebrations. We're looking forward
When using Docker to run your Rails apps in development, you might come across a leftover server.pid file in your app's tmp/ folder.
This file is created when you run rails server to start your app. If your container is not shut down properly, this server.pid file is not removed.
This prevents you from starting a new container; as the file is copied into the new container, you will be confronted with the following message when you try to run your app:
web_1 | A server is already running. Check /usr/src/app/tmp/pids/server.pid.
...
web_1 | Exiting
Of course, the simple way
Launching your app into production is a huge step, and there are often lots of
different things you need to set up to ensure not only that the deployment works
as expected, but also that your app continues to run smoothly once it is running
in production.
Here are five things I like to check prior to deploying a Ruby on Rails app:
1. Customise the pages your users shouldn't really see
It's inevitable that at some point, your app will throw an error page - be it a server
issue (500) or even a missing page. Rails provides some basic templates for these pages,
but they aren't
Rails 5.1 introduced the front-end package manager Yarn into the standard tooling for new Rails projects. Yarn allows you to declare and manage your app's frontend dependencies (such as CSS frameworks and Javascript libraries) in a way similar to how Bundler manages Rails dependencies (gems).
If you're using Yarn to manage your app's frontend libraries, you'll need to ensure that Yarn is available to use when adding or precompiling your assets in your Docker container. To do this, you'll need to add a few extra lines to your app's Dockerfile.
Let's start by creating a new Rails app, and creating a basic
Updates
3 December 2018: Use ruby:2.5-alpine Docker images, and replace links with depends_on in docker-compose.yml.
In the Getting Started with Docker and Ruby on Rails, you learned how to get a simple Ruby on Rails app up and running on Docker containers.
As you work on your app, it often becomes difficult (and tiresome) to remember all the different configurations and arguments you need to create and link containers. The complexity increases as your app's dependencies grow (such as when you need to
Updates
3 December 2018: Use ruby:2.5-alpine Docker images.
Docker is a fantastic tool for isolating your app and its environment, and allows easy distribution and state-replication across multiple environments (dev, test, beta, prod, etc.). Using Docker can get rid of the "it works on my machine" problem, and help you to easily scale your app as it grows.
Docker is particularly great when your app has a lot of dependencies, or requires specific versions of libraries and tools to be configured.
In
Mark BowdenMark Bowden Ltd
"When I began working with Chris he provided me with a clear and concise breakdown of my existing app with recommendations on how to improve it.
Over the months following this I have been extremely impressed by his approach. His programming skills are unquestionable and he is able to get everything completed above and beyond what is required.
What has impressed me more than anything is his strategic approach and understanding of UX, marketing and business in general. Whereas many contractors fulfil the request of the customer, Chris has always been able to provide knowledge and experience
Whilst testing an app on the Jelly Bean emulator, I couldn't get the emulator
to mount the SD card. Calls to Environment.getExternalStorageState() would
always return Environment.MEDIA_REMOVED.
After some searching, I realised the found was being configured with
hw.sdCard=no during creation, despite specifying an SD card in the UI.
To fix the issue, open up the config.ini for the affected emulator, and
change the value to hw.sdCard=yes, e.g:
# ~/.android/avd/Nexus_5X_API_16.avd/config.ini
# ...
hw.sdCard=yes
After restart your emulator, it should now successfully mount the SD Card.
If you want to pass data between Rails and Coffeescript in your apps, you'll
find that interpolation doesn't work. For example:
# app/assets/javascript/home.coffee
$ ->
$('#some_element' ).text('<%= @user.id %>')
If you look at the resulting Javascript, you'll see that the string is
interpreted literally, rather than interpolating the user's id:
;(function () {
$(function () {
$("#some_element").text("<%= @user.id %>")
})
}.call(this))
Quickfix
You can quickly fix this by appending .erb to the Coffeescript's filename.
This will instruct the asset compiler to parse the file through ERB before
Coffeescript, resulting in the value being correctly interpolated:
# app/assets/javascript/home.coffee.erb
$ ->
$('#some_element' ).text('<%= @user.id %>')
// (resulting Javascript)
;(function ()
Ruby on Rails is a great framework for building modern web applications. But as with any technology, things move on quickly. Without proper care and attention, the web apps and sites you build using Rails can start to degrade. This means slow pages, security vulnerabilities and your users seeing error screens.
As building and supporting Rails apps is a core part of my business, I've adopted a few tools and techniques to ensure that the apps I build and manage are easy to maintain and improve.
Here are 3 things you can do today to keep your Ruby on Rails apps in
Rails 5.1, which is currently at release-candidate (RC) stage – continues to keep pace with these latest changes, bringing with it new features include encrypted secrets, javascript dependency improvements, and full-stack testing with Capybara baked in.
Let’s take a look at some of the changes that Rails 5.1 brings in detail:
Javascript Improvements
There’s no doubt that Javascript is becoming more and more pervasive across all platforms, especially with the advent of ECMAScript 6, Typescript, etc.
With Rails 5.1, Javascript dependencies can now be managed through YARN, a Bundler-esque package manager for NPM libraries. Any dependencies managed through YARN are made available to Rails’
Recently, I’ve been using with the latest version of Docker 1.13 and Swarm for deploying several Rails apps.
Previously, I’d used a combination of Docker Compose and systemd to manage containerised Rails apps. This approach worked, but always felt a little cobbled-together. There were too many moving parts, and sometimes containers would mysteriously shutdown, needing manually restart.
Whilst systemd kept things running relatively well, it didn’t always play very well with Docker Compose. The setup also made seamless deployments difficult without some manual load-balancing configuration.
Switching to Swarm
Docker Swarm, which became part of the core Docker engine in 1.12, adds built-in orchestration to
As I migrate all of my Rails apps to Docker, I've learned to avoid making changes to the Gemfile whenever possible.
Whilst there are workarounds that can help to speed things up, any change to your Gemfile results in a lengthy (re)download and install of all the gems in your app.
Sometimes I only needed to generate a new Gemfile.lock so that the image could be built, tested and published by our continuous deployment server. Frustratingly, this meant having to wait for the redundant local bundle install to complete before I could commit the new lock file.
Today, I discovered a way to
Google IO, the headline event in Google's product calendar was this year set in the Shoreline Amphitheatre in Mountain View, California. IO 16 opened up with the soothing sounds of stringed instruments before, under the sun soaked sky, Sundar Pichai introduced a range of new and evolving Google products. We attended the Digital Plymouth IO event hosted at ThinqTanq to view the main event with the local community.
As a continuation of Google's cardboard experiment, Day Dream, a platform for mobile based Virtual Reality played centre stage. The set of standards, coupled with the reference designs for headset and devices are
It’s fair to say that software will help shape all areas of our lives in the coming years. Whilst the benefits of automating repetitive tasks and providing useful and contextual information are self explanatory, there is one area that software is greatly under utilised: the personal touch.
The benefits of providing a user with even a minimal amount of personalisation, especially with regards to the internet, are well known. You would be hard pressed to find a webpage with a login that does not include some level of personalisation. Twitter, for example, shows the current user’s name and photo on every
Sketch is a modern design tool, perfect for creating layouts and user interfaces for the web and mobile apps. It's scaled back interface – when compared to incumbents like Photoshop – puts the tools needed for modern layouts at the tip of one's fingers.
Until this week I had only used it for scaling icons for different iOS screen resolutions. This used practically none of the application's powerful tools. With a few design jobs in the pipeline at Plymouth Software, it was time to dig a little deeper into Sketch.
By my own admission aesthetic design is not one of my stronger
Last week I was lucky enough to be invited to Enterprise Apps World in London to meet with Samsung and find out more about their SEAP developer program. SEAP is aimed at developers working on enterprise apps, and Samsung are building a number of APIs specifically aimed at this space.
One of the key benefits of the Knox APIs is the ability to put a device into a kiosk mode. Over the years, I've been asked time and time again whether a tablet could be locked down to provide a single-use device. For example, for public displays and interactive exhibition displays.
This
A recent project that I've been working on involves capture and storage of images. As part of the app, I needed to save and retrieve metadata from an image regardless of its origin, be it directly from the camera, or the user's camera roll albums.
Whilst this seems a relatively straight-forward task, it had me perplexed for a little while, so I wanted to share the eventual solution. This has been tested on iOS 7 and 8, and uses Swift 1.2.
Note If you target only iOS 8 upward, you can use Swift's new PhotoLibrary class.
When interacting with the photo library, the
Google's annual festival of technology (I/O) was recently held in San Francisco, announcing a raft of updates, improvements and new products. A week on and with the dust settled, it's time to take a look at some of the key announcements that came from the conference.
The general consensus amongst Googlers is that this conference was more about refining the wide range of existing products as opposed to reinventing the wheel. Here's a few of the key announcements and a few we thought were missing.
Android Pay
Google officially announced their own payment platform, Android Pay. The service, which rivals Apple Pay, uses
Plymouth Software are very pleased to be working with Plymouth GAIN as part of our Consulting Service. Also based on Plymouth Science Park, GAIN provide support and knowledge exchange for businesses and start-ups in the peninsular.
GAIN are one of the first clients to take advantage of our new monthly consulting and support plans. As well as ongoing maintenance development, these plans offer on-hand expert advice to your and your team to continue enhancing every aspect of your software product. Service plans come bundled with an allowance of bespoke development every month.
Plymouth Software will be working directly with the GAIN team
Plymouth Software has been selected to build a new version of the National Trust for Scotland's Trust Trails mobile application especially for Android devices.
Following the success of Trust Trails for iPhone, which Plymouth Software built earlier this year, the National Trust for Scotland began considering an Android equivalent. With a majority share of the mobile device market, Android was the logical next step for this exciting app.
“We wanted to bring the engaging experience of Trust Trails to our members and visitors with Android smartphones. We're delighted to be working with Plymouth Software again to build on the previous project's success.”
–
London-based agile specialists Unboxed Consulting have chosen Plymouth Software to work as part of their development team, building a new web site for the University of Plymouth.
Plymouth Software is working alongside developers from both the University and Unboxed Consulting to design and build the new site. As well as a putting the mobile experience first for visitors, the custom-built Web application provides powerful content management and publishing tools for the University's staff.
“Plymouth Software has been a great find for us. It is encouraging to see such fantastic talent in Ruby on Rails in the South West.”
– Richard Stobart, Managing Director,
Trust Trails for iPhone gives visitors to Scotland rich information about the National Trust for Scotland's range of attractions, as well as an engaging social experience.
The Brief
The National Trust for Scotland (NTS) wanted to increase members' engagement and enrich the visitor experience at their range of properties. We worked to realise the NTS's goals through ongoing technical consultation, rapid prototyping and a close-knit development process.
Trust Trails is primarily aimed at new and returning visitors to Scotland, as well as existing members of the National Trust for Scotland. Users of the app can choose to visit nearby NTS places