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.





On the 5th June 2018 MapQuest are retiring their JavaScript Maps API which is currently being used by a major client of ours to handle all of their logistics. Lucky for me the task fell on my list however, unlucky for me their documentation to help you migrate was none to great. MapQuest provided the basics as to what to do to migrate the main features i.e. overlays, markers, etc over to their new ‘MapQuest.js’ but we had some functions that required a little more work, to find out how to alter them.  These I have shared below, to assist in your migration to the new MapQuest API.


New Icons

The new icons are outlined as above, you define the icon object itself and then you assign that icon object to that of a marker you want to place.

  • The icon size – defines the size of the icon.
  • The icon URL – defines the URL of the icon image (here I’ve used the icon API provided by mapquest whereby you specify what you want, what colour you’d like and what number to be displayed on it).
  • The popup Anchor – defines where you’d want to offset the popup too, if your icon was to have a popup.



In the previous example we had spoken about popup anchors to allow the positioning of popups to be designated, I’m now going to give an example of how we actually create popups.

As you can see here we have binded a popup to the marker object and in order to open it we have to create a JavaScript function that we allow for the popup to open when the mouse is over the top of the marker, as opposed to having it open all the time.


Centering a Map

Previously all you would need to do to centre a map would be to call map.bestFit(); mapquest have removed this simple function and instead made it a little more work to centre your map, especially when you have multiple items on the page such as icons, overlays, etc.

As you can see you now have to build up an array of the coordinates present on the map and then pass that into the fitBounds method which then adjusts the map accordingly.


Drawing Lines

Drawing lines have been made easier!  Whereby you pass a set of coordinates into a function it is the same with drawing lines. This is one of the best things I have found with the migration the simplicity of drawing lines.



The final migration item I am going to talk about is the situation where you can have multiple markers at the same location. In the old API this was simple, you had to set the marker to .setDeclutterMode(true); this would allow for it to work out by itself if there were multiple markers at that location and spider out accordingly. They haven’t written this functionality in the new API so I had to use a plugin ( to give me the ability to this.

As you can see you create a new overlapping marker spiderfier object and pass in the map that you are currently working with. You then add the markers to the object and it works out for itself which ones overlap. I had to tweak the library slightly because it hadn’t been worked on since 2013 and I wanted the functionality to keep the spiderfied markers showing. So I removed the functionality to close the spiderfy and wrote a piece of JavaScript that would click all the icons open on load.


In Summary

So as you can see the migration was not as straightforward as I had hoped and more annoyingly the migration ‘guide’ ( provided was not as complete as it needed to be!  Hopefully some of the examples I have provided here will help you migrate your MapQuest solutions.

Happy Migrating!


  1. Thou Shalt add Comments

Who knows what is going on in your code if you don’t tell anyone. A good developer will make sure they add descriptive comments to help anyone who looks at their code to understand.


  1. Thou Shalt do Testing

Testing is imperative from Test driven development(TDD) to simple unit tests, although in the short term they might take longer to implement, in the long run they will be hugely beneficial. A good developer will start writing test as they go along sometimes even before they have even started writing any code.


  1. Thou Shalt Try and break

If you don’t try and break your own code someone else will. A good developer will add unexpected inputs, click in places that you wouldn’t expect, enter unknown web address, etc try and do whatever they can to break their own code to make sure that it is robust.


  1. Thou Shalt use good communication

There’s always this conception that developers are introvert and live in the dark, this isn’t the case in the majority. A good developer has the ability to communicate with not only another developer but various stakeholders in the project, from the end user to the project manager and not with the use of ‘technical jargon either’.


  1. Thou Shalt think about their end user

So the software is fantastic, does everything it was meant to do and more, yet it’s bright yellow and all the buttons are placed all over the screen. if your user can’t use what you have created what is the point? A good developer will make sure that they validate their  design choices with an end user.


  1. Thou Shalt be Full Stack

Yes developers can have particular areas of expertise: front-end, back-end, databases. A good developer should be rounded enough to be able to work with all of these areas. They can still have an area of expertise but being able to work on multiple areas is very important.


  1. Thou Shalt help thy fellow developer

Suppose you have a variable that determines whether a tap is on, if you call it tapOn, perfect. However if you call it longPieceOfMetalOnOrOff that isn’t going to help anyone, especially when it comes to the maintenance of your code. A good developer will make sure that things are named appropriately and logically.


  1. Thou Shalt make things simple

This comes to down to code structure and simplicity. If you have five methods all doing the same little bit of logic, turn that logic into one method and have all the methods call that same method, that way should you need to modify this it is all editable in one place. In a house you have separate rooms for separate things, you don’t do everything in the same room. A good developer will apply this principle to their code, they won’t put it all in one file, they will break it down and separate it out.


  1. Thou Shalt use source control

Source control, through the means of git, is very important. It has three main properties: as a form of backup, to allow multiple people to work on the same piece of code and to see the changes that have been made to code files. A good developer will regularly commit to their git branches to allow for their changes to be protected.


  1. Thou Shalt evolve

In such a fast moving industry constant learning is very important. A good developer will keep himself up to speed with the latest technologies and practices to allow themselves to have all the tools in their arsenal to tackle any problems.


Happy Easter Everyone!


We’ve got Saturday night fever here at QuayTech!  One of our clients requires a live sales dashboard that would essentially be ‘staying live’ ensuring it is constantly refreshing to show real-time data.  Live polling is the ability for a page to maintain/update itself without the need for user interaction.  The dashboard is utilising the DataTables widget ( to group the sales data, in different ways, tailored to the currently loggedin user.  How could we achieve live polling datatables to refresh the data currently being displayed on our dashboard?

THE How?

First things first your Datatable needs to be populated through a json web service call to return the data, as opposed to a model being passed to the view (if using C#).  In the code below you will see a URL is called, this endpoint needs to return the json object to the Datatable.  The data NEEDS to be returned in this format “{\”data\”: ” + jsonData + “}”; this allows the Datatable to see that the data being passed back is data for the Datatable.

Note: The “bDestroy” : true variable that is being set here, this tells the Datatable that it is allowed to be destroyed and remade as necessary.

As long as we can identify the Datatable through an id, we are then able to call a reload on the ajax which will update the rows. The setInterval method is where the magic really happens, this sends a call to the method every 20 seconds in order for the datatables to poll.

As a little bit of an extra, a count of the rows on the table is taken before the call and after, it is then noted if there is a difference and if so a notification is displayed to the user that a new order has been received as seen in the code below. I have added a two second delay on this check to allow the table to sort itself out before checking, else it is too fast to see any row changes.

Note: datatableIDs is a string array of the IDs of the datatables that you are polling. Timing in JavaScript is in milliseconds so 20000 in the setInterval is actually 20 seconds.

So there you have it, how to live poll a datatable.