I’ve read a book. Crazy I know. It’s called ‘The Phoenix Project’ and it’s basically a novel about IT DevOps, which basically stands for Development Operations. Not a once upon a time novel, but it’s situated in a fictional company whereby no IT DevOps is currently in place. It follows the new IT Operations manager trying to turn things around for this company and really opened my eyes to vast world of devops. So this got me thinking, here at Quaytech we not only build great systems, but we look after and maintain those systems for our clients going forward. Whether that be making changes, adding new features or simply hosting those systems, we handle it all. So I began looking into how can I implement more DevOps into our current setup. So what did I do?

I took the most recent major project the CRM system and thought how can I build confidence into every major release we do of the Web API (Application Programming Interface). We have written unit tests for this project which we can run to check whether the end points are working as expected. But this is still a manual process of clicking buttons. A part of DevOps is about automation, removing the manual tasks that you can get a tool to do for you. I began to look into ways to remove this manual process.

We build the majority of our systems using C# which is a Microsoft Technology, so I started looking into the Continuous Integration side of Azure Devops, which is contains Microsoft’s Continuous Integration tool. I watched this video which showed a basic overview of how to create a simple build and release from a checked-in git repository. So with this as my base I looked on how to expand this.

The first thing I looked at was how to remove the need to start the build yourself. So inside my build yml I added the ability for the build script to be triggered when a certain repository was pushed to in git. Using this command:

Note : Indentation is important in a .yml file

Next I wanted to create a build to make sure the project compiled okay, I used the azure provided Virtual Machines to do this. You can get up to 1800 minutes free using the basic tier. The script below basically says, using a visual studio 2017 on windows server 2016, build a copy of the project specified in this case CIPlaying.csproj in the release mode.

Next I added the ability to run the unit tests after the build was completed. This code specifies that using the .net core tasks run the test project.

Note: The test results are displayed in a separate test section of azure devops, it provides you with a good overview of which tests have passed and failed and any error messages associated with them.

Next I wanted to build a published version of the API project to release. Done like so:

This created an artifact that I could later pull down in the release pipeline and deploy to my chosen environment. Lastly I needed to create a second artifact this would contain our published api tests. Which would run against the new published version of the API.

To make this work I created a build for the Api Test Project and created a release artifact from the build for use in the release Pipeline. In part 2 of this blog I will discuss how I set up the Release Pipeline to pull down these artifacts and release them.

jQuery is the most used Javascript library in the world. It’s also one of the most hated. jQuery like all libraries has it’s advantages: it’s simple to use, is cross browser compatible and makes web pages interactive with only a few lines of code. Sounds great right? Only problem is that it impacts website performance!

To begin, in order to use jQuery you need to add an external javascript file like ‘jquery.min.js’ which is a 30kb file. This file load time can add 7 milliseconds of delay to your page load, this might not sound like a lot but imagine a user with slow internet or mobile connection.

If you’ve added the library using google’s jQuery url ‘https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js’ then this would normally already be cached in the browser because a lot of website use jquery. Still though a delay is a delay.

Excluding the delay from the external file, jQuery is a lot slower than pure javascript or ‘vanilla’ javascript as it’s known in the industry. Even a simple task like adding a node to the DOM (Document Object Model) instead of a simple api call, jQuery performs multiple unnecessary operations for changing the DOM.

So what alternatives are there, other than re-writing your jquery functions in pure javascript, which is supported by all modern browsers, an alternative is to use a lightweight alternative such as Cash.

Pure Javascript examples for common jquery functions.

JavaScript Get Request


JavaScript POST


JavaScript Hide & Show


JavaScript Find


JavaScript Append


JavaScript Remove


JavaScript Get Html


JavaScript Get Text


JavaScript Set Style


JavaScript Set Html


JavaScript Add Class


JavaScript Remove Class


A unit test is an automated test that makes calls to your code to check that they are returning output or working as expected. For example say I had written a calculator, inside this calculator there may be a method that adds two numbers together. It would take in to integers, and inside the method it would add them together and return you the result. Wouldn’t it be handy to know that this method is always working.

“But it’s a simple method and I would have to spend additional time writing tests, what’s the benefit I hear you ask” Okay so this is a simple example, but when you move onto more complex pieces of code it would be much more efficient in the long run to be able to say that all the code is working as expected. Granted it would take longer at the start to write these additional tests but for example let’s say you didn’t have them and someone pesky monkey went in and modified your calculator code to turn the add function into a minus. With a properly written unit testing you’ll be able to see this straight away, without it you’ll be spending your time scouring through code to see what is going wrong.

So how do we begin? Here is the calculator add method we spoke about earlier.


To test this you could write a test in your current to code to check that the method returns 20 when 15 and 5 are entered as x and y respectively. If it doesn’t throw some kind of exception to the system. Or you could write a unit test to automatically run that calculation.

To begin you’ll need to add a testing project to your current solution:

To test the method you’ll need to write a new test class, as we are using .net core in this example, we use the [Fact] attribute above a method as opposed to [TestMethod] as seen elsewhere.

This test will check the result and compare it to the expected value. The expected value is always put first in the assert test. The important part of this test is the Assert section, there are many different types of assert to test results against for a full list see here.

To run the tests in visual studio go to the menu at the top, click tests > run > and then all tests.

This will open a window that’ll show the status of the Test results.

Overall although this additional testing takes time the benefits in the long run you can see the benefits from the start, and it will hopefully allow you to find bugs in your code a lot quicker.


The Problem

Our client came to us with a problem: they were paying a lot of money to use their previous Customer Relationship Management software but weren’t using half of the functionality that it had to offer. On top of that the majority of their users found it too complicated. The final straw came when the provider upgraded their solution but accidentally removed a fundamental piece of their API (Application programming interface), which we were using to run custom reporting out of the software. This was not only annoying to our client but also costly, a fix was requested but 6 months later a fix still hasn’t been delivered.


The Solution

Our client needed a solution that would provide the core functionality of a CRM, but simple and not in any way over-complicated. They wanted it to be clear and concise, with only the functionality that they would use. They also wanted it to be usable on both a phone and a tablet. As a result of our conversations we: designed, built, tested and released their own bespoke CRM android application that worked on android devices running 6.0 onwards, alongside their own API and secure database storage. As we didn’t want to lose the data that had been stored in the previous system, we created a series of data extracts that pulled all the information from the old system into our new system.



The list of functionality is as follows:

  • Integrate with our client’s existing ERP system, to pull down the latest customer accounts
  • View Customer Account details
  • Book an appointment with a Customer
  • Schedule a task to complete for a Customer
  • Record Prospective Customer details
  • Book an appointment with a prospective Customer
  • Update appointments with notes on completion
  • View “What’s On Today”
  • KEY FEATURE:Work Offline, and sync to cloud automatically when Online again


Feedback so Far

We have had very positive feedback since it’s release and is close to a full roll out. We are looking forward to adding more functionality to the CRM, so our client can truly maximise the data being captured and could be captured going forward.


From initial discussions to release, this project took 3 months, and we’re very excited to see where it goes next …


A SQL database is a database that has relational data. For example Phil is in the database table Person, Phil has a car, Phil’s car is stored in the database table car. We know that Phil’s car belongs to Phil because we link the records together using a foreign key. This is called a relation. Hence relational database. NoSQL differs in the sent that data is not stored in a relational way. NoSQL has many different forms each suited to different needs, these are:

Document Databases: such as MongoDB, used to store JSON like objects.
Wide-Column stores: such as HBase, commonly used for big analysis, because of it’s ability to hold millions of columns.
Key-Value stores: such as Redis, used to store key and value pairs.
Graph stores: such as neo4j, a graph is composed of a node and a relationship.

Both Amazon and Google offer different services for these types of databases on their hosted platforms, Microsoft not so much as seen as they developed a lot of SQL.

NoSQL is in many ways the reverse of SQL, in SQL you’d be like I need to model this entity, this entity and this entity and they link by xyz. But in a NoSQL database it’s more of a case of what data am I going to be pulling back, so you’d design your queries and then base your data models on them.

This is because there is less structure to your data in a NoSQL database, although your application needs to be aware of the structure of the data that it would be receiving hence the reverse approach to SQL.

Without the need for a database scheme, data modelling is very important in NoSQL. You need to answer these questions, among others:
What kind of data am I going to store in a collection (table)?
How will nested data be structured?
What attributes do I need if any for each model?

There are many different strategies you can use to answer this question a few are:
Denormilisation – NoSql data duplication across rows and tables is okay. So instead of saving keys of referenced data, you can embed duplicated data itself in each row. As it is faster for you to get all the data as there are no joining of tables.

Application side joins – Sometimes duplicated data is a nuisance when updating frequently, in this case it may be a better idea to store keys instead of data itself and then join the data inside the application later when needed.

An example database model when sending a text
“sender”: “Dave”,
“type”: “text”,
“content”: “Test Text”,
“channel”: “1_12”,


In conclusion, hopefully this brief introduction into NoSQL has helped you in some way. As with all technology it depends on your needs and how you are going to use it. For example if you wanted to keep records of an Internet of things device that was sending you a lot of data, regularly I would use a NoSQL, but if I was creating a structured database where everything was in some way linked then I would use a regular SQL.

Thanks for reading,




Virtual Reality

Virtual Reality or VR for short is going to be taking a massive advancement into the year especially with more computing power being available. Virtual Reality is creating computerised objects in the real world to put in simply. Faster networks will help with this too, which I will talk about next. For more information on VR check out my blog post about it.


The technology for 5G networks has been recently demonstrated. 5G is the upgraded version of the 4G mobile network that we know and use today. 4G is currently capable of between 100Mbps – 300Mbps, whereas new 5G technology will be hitting 1-10Gbps depending on location, device, etc. The USA has already began to roll some of this technology out. A UK Date is set for 2019/2020 so we shall see.


As always drones continue to improve year on year, in terms of functionality and affordability. I don’t see this trend ending this year. Although with the incident at Gatwick Airport on the 20th December I think we will be seeing a higher regulation and even more improved anti drone technology.

Artificial Intelligence

We are only just beginning to scratch the service with artificial intelligence and this year it will improve even more. Smart devices such as Nest, Hive, automated alarms, cars, etc. Will continue to learn and improve. We will see the first automated car hit the streets in the UK?

Data Security

Lastly with the release of GDPR this year we will no doubt be seeing more improvements in the world of data protection and security.


So there you have it a couple of trends that will be hitting us during 2019.



Today I am going to outline to you the current popularity of different programming languages in 2018. I’m going to be using an index put together by TIOBE, a company that specialise in software quality. TIOBE stands for the ‘The Importance of Being Earnest’ a title for a comedy play written by Oscar Wilde for those wondering minds out there. The company have created an index of the popularity of programming languages. I am also going to be looking at an index, called PYPL (PopularitY of Programming Languages) created using the searches on google for tutorials of different languages.

The TIOBE index


The PYPL PopularitY of Programming Language Index



Java is the first programming language I learnt at university. It’s what I call a real programming language ,not like HTML, which doesn’t feature on the lists but is always a good starting block into programming. According to a lot of background reading Java has rarely lost it’s position as one of the top two programming languages. Created in 1995 and named after a type of coffee it is used by around 90 percent of Fortune 500 companies are using Java as their server side language and of course all android apps are based on Java, albeit can be written in different languages as I’ve shown previously.


Python is very much on the rise, it’s generally used for web development and as a support language for software developers. It can also be used in scientific computer, data mining and machine learning. Which fits well with the increase of talks of big data and machine learning.


JavaScript is the grandad of the programming world. It’s always been popular especially in the modern web era. It is used by 95% of all websites for anything interactive that happens on the web page. Facebook’s React and Google’s AngularJS are also built using JavaScript and both are used widely in the world for mobile devices, especially applications.


C# is the main language that we use here at QuayTech. So why are not using Java I hear you ask. C# is a more secure and robust program language. That is used by a lot of windows systems. It runs on the .NET framework developed by Microsoft, although .Net has now been made open source. It’s quite a difficult language to learn as opposed to Java or Python. But once you know Java, the syntax to C# is very similar.


I’ve touched over a few of programming languages. There are many different languages out there each with their own advantages and disadvantages, in fact there are 100’s the majority are useless. A website I was told about in college shows you how to print ‘99 bottles of beer’ in pretty much all of them.

If you’re thinking of learning programming I’d definitely consider beginning with Java. This will help you to learn the basics of programming such as: loops, ifs, variables, etc and will put you in good stead for any other programming language you want to encounter.


Thanks for reading,


That computerised watch on your wrist is more powerful than the computers that sent a man to the moon. Madness right. From the first Apple iPhone to the latest Samsung Galaxy, phones have got noticeably smaller if not a little wider. Recently we’ve looked at a project using wearable technology inside a warehouse, hence this blog post about them.

In 2012 a kickstarter was launched. For those of you who don’t know kickstarter is a crowdfunding campaign website. This kickstarter went on to be one of the greatest kickstarter campaigns of all time. It was for the first ever smart watch, the pebble. Using technology similar to the amazon kindle this watch would start a trend of wearable technology. With a goal of $100,000 the kickstarter ended raising over $10,266,845 and with it started a wave of new fitness wearables.

Fitness Trackers

With ever growing obesity levels in the UK I feel that this kind of wearable technology are the best form. They allow you to see things such as steps walked, heart rate, monitor your exercise etc. Even so much so as to remind you to drink every so often or move when you’ve been stationary for so long. They can monitor your sleep, tell you when you hit REM as well as give you a general overall about how you slept that night and more importantly in the active world we live in how much sleep you got. The importance of these futuristic technology is so great that an American insurance company is even refusing to sell a policy unless they can have the data from such a device.

Smart Watch

On 12th September 2018 Apple announced their 4th series of the iWatch. Samsung have their own version, the Galaxy Watch. These watches feature the majority of the fitness trackers abilities such as step tracking, sleep cycles, heart rate monitoring, etc. As well as that they open your world to having apps right on your wrist. Catch up with the weather, news and even Facebook on your wrist. You can even use these watches to pay. All without having to take your phone or wallet out of your pocket.

Dangerous Game

Are these wearables technologies the best thing to grace our earth, I’m not sure. In a world where social networks and technology rule. Are these devices really going to help us? They let us know when any app sends us a notification. They can vibrate your wrist and make you turn it. Apples new watch does more extensive heart ECG, is this helpful, will everyone start to panic visiting hospitals and telling them that their heart isn’t normal.

In Sum

In conclusion, if I were to get any form of wearable tech I’d be using it mainly for the fitness reasons I sit at a desk the majority of my day, things such as step tracking and telling me to move could be really handy for me. As for the apps and notifications on my wrist? I’m not so sure I’ll use them. I’ve turned off the majority of my notifications and I like to check them when I want. Not be forced to look at them. Give me a Fitbit over an Apple watch anyday.

Thanks for reading,


Is this the real life? Is this just fantasy?

We are entering an age of immersive technologies. Virtual Reality, 360 degree videos, real life simulators and augmented reality. Where did all this begin? For me, it was the introduction of google street view. Launched in 2007 in the United States, included with Google earth in 2008 before being added to Google maps in 2009. We had to the option to go anywhere in the world, right from our living rooms, so where did we all decide to go? Outside our own house. Amazing isn’t it! Below is me touring the external office right from my desk.


Virtual Reality allows you to become immersed into an environment right from your home. By now everyone has seen the virtual reality headsets that you can get, which allow you to be placed into environments such as games or movies. It can either fall into two categories: simulation of real environment or an imagined environment I.e. a game. The BBC have offered virtual reality technology for the world cup, which allows you to be on the pitch in various locations.


Augmented Reality allows for a mixture of real world and computer generated overlays. A major example of this is the Pokemon go app, which overlays Pokemon in real life and became a worldwide phenomenon in 2017. The Ikea augmented reality app allows you to place pieces of furniture in your home before actually buying them.



360 Degrees images and videos now enable you to get full immersive views of pretty much everywhere. Companies are now taking full advantage of this technology to. It all began with a panorama image but now you can go up, down, left and right or a complete circle if you so wish. A couple of interesting examples are the Emirates ‘immersive experience’ which allows you to explore different seating classes for the A380 and the deadliest catch 360 website that allows you to explore various boats 360 degrees.

Lastly I would just like to mention the Magic Leap company website. Magic Leap are an augmented reality company looking to release their own headset this year and I think the desktop version of their website is awesome.


Thanks for reading,


We have recently been tasked to build an app for one of our clients. So I am going to provide you with a basic outline of creating a Xamarin android app. Why Xamarin and not straight up android you ask? Here at QuayTech one of our specialisms is .Net and because .Net is a Microsoft technology they like to use either C# or Visual basic as a programming language. So we have chosen to use Xamarin as it is a framework written in C# that will allow us to write apps in C# as opposed to Java which standard Android apps are written in.

Getting Started

To begin open Microsoft Visual Studio, select New Project and choose Android on the left hand side and a blank android app as the project type. Note: As a pre-requisite you will need to have Xamarin installed for your visual studio (). You can then name your app and choose the location to save the app to.

The Layout

I’m going to talk to you about the basic overview layout of the Xamarin android project. The Assets folder is where you store assets that aren’t images for example database files. Inside the resources folder the drawable section is where you can store any images you have that are not icons. The various mipmap folders are designed for storing different icons and splashscreen images at different resolutions as outlined in this blog here. Inside the layout folder are .axml files. These are essentially different views, if you double click on you’ll see that it opens a designer in visual studio as I’ll demonstrate in a minute. Inside the values folder, the Strings.xml folder is used to store constants that are used throughout your app, for example the app name, a company slogan, etc i.e. things that may need updating throughout the app. The last important part of the layout is the MainActivity.cs file at the bottom. As you can see the convention here is that the activity matches to a designated layout file. The activity file essentially acts as your code behind for the layout.

The Designer

After double clicking on a .axml file you are presented with this screen. In the centre you can see the view that you are currently working with and the left is a toolbox which houses different components. As you can see in the bottom left of the centre screen you can switch between the design and the source of the view. It is now a case of dragging and dropping your components onto the page and editing the properties for each.

The Activity

As I said earlier the activity files are designed to act as the code behind for the views. For example this is the one for the Main layout which is created by default. At the top we can see that the title for the page is set, and we have told the application that this is the first page that we want to load by the MainLauncher flag being set. Inside the ‘oncreate’ method we can see that we have told the activity to link to the Main layout that we spoke about earlier.

So there you have it a basic overview of the Xamarin Android project. Now it’s time for you to go off and experiment with hopefully this very helpful tutorial/overview.