12 Aug

John Craig


How Mobile Apps Improve Government Inspector Productivity


A July 2013 Deloitte University Press article shared the following 5 ways for how mobile application deployment can improve the productivity of government mobile workers:

  • Reduce time spent on data entry
  • Enable better situational awareness for frontline employees
  • Enable work from any location
  • Improve accuracy and reduce the effort involved in performing tasks
  • Enhance collaboration and data sharing among employees/agencies

Depending on the workflow of the job being performed, the Deloitte article suggests as much as a 45% improvement in productivity for the workers involved. The Deloitte article focused on workflows for caseworkers, emergency responders and the police. At 14 Oranges we have focused on mobile applications for inspectors as our primary target market based on our work with the BC Safety Authority, an agency that performs inspections on all manners of electrical and mechanical devices, including boilers, elevators and amusement rides. Our Mobile Workforce Management Service addresses each of the five key value points above with the following feature sets:

  • Deliver simplified, customizable forms to mobile inspectors for rapid data entry
  • Provide heads-up maps for managers and inspectors to find the next inspection site
  • Complete workflow and schedule visibility in both offline and online modes
  • On-device data validation and required data enforcement
  • Push notifications to field workers with important updates

Our experience with the BC Safety Authority points to a 40% improvement in productivity, and an improvement in the job satisfaction of the mobile workforce. Being able to do a job well apparently makes a job more pleasant! Who would have thought that!? Not to mention the added benefit of being able to serve more businesses and the public in a given day helps to highlight how government processes, no matter how onerous they appear, don’t have to take forever to complete.

Any a happy, well served public tends to re-elect their officials! Food for thought if your council is up for re-election this year.

Both Sylvain and I will be attending the GMIS Event in Atlantic City at Caesar’s Palace, starting on Monday August 14, 2015 and look forward to sharing our solution with CIOs from across governments in the US next week. See you there!

10 Aug

Shane Todhunter


Pokémon GO Has Created the World’s Largest Mobile Workforce!


So I have to admit when I got home from work a few weeks ago, I was tired and ready to relax, when I heard my wife say, “Sure … Dad will know how to get that game on your tablet.”

I cringed a bit.

But I bit the bullet and got it done! I installed the Pokémon Go app and signed my son up to give it a try. He immediately caught a Charmander. Being over 40, Pokémon was not a ‘thing’ for my generation, and I wasn’t personally familiar with the game until my oldest started talking about it a couple years ago. My wife had found someone on Craigslist giving away thousands of Pokémon cards and the game 52 pickup took on a whole new meaning. Pokémon Go is 250 pickup … with a lot of walking.

So for those unfamiliar I will give a total ground level view of the Pokémon world as I know it. Basically, it is a collection of games, trading cards, etc. that revolve around a world where humans live in conjunction with Pokémon; creatures with various special powers. These creatures are captured and trained by humans known as Trainers. Trainers then pit their Pokémon against others in mini-battles.

There are actually more than 700 different Pokémon and it has grown in popularity for more than 15 years now crossing through a couple of generations.


So what is Pokémon Go?

Well I will give you two versions of the same answer. Tech and non tech.

The Non-Tech Answer

Pokémon Go is an interactive video game, played on tablets and phones, where players assume to role of Pokémon Trainers attempting to Level Up by gaining experience points. Players explore the world by navigating around their actual physical location, using a map interface, attempting to find/capture Pokémon, visit Poke Stops to get rewards and Gyms. Pokémon appear from time to time or can be enticed to appear using various lures found at Poke Stops. At higher levels players go to Gyms to battle using their Pokémon against other Trainers’ Pokémon.

Tech Answer

Pokémon Go is an interactive video game developed to run on GPS enabled mobile devices with a data connection. Players create a persona in the game and are encouraged to explore the literal world in search of data points corresponding to characters/locations in the game. The game takes place on top of a Google Maps interface where the whole Earth is represented.

My Assumption – Data points are created worldwide algorithmically allowing users to play the game nearly everywhere. The locations are often in public places like schools and parks.

Cultural Phenomena

As a side note, at this point I want to mention some interesting cultural phenomena which have become apparent as a result of the launch of this new game.

First, it doesn’t appear twenty-somethings are embarrassed to play this game. This may not seem a big deal to many of you but to me I was really surprised that these late teens to mid twenties are right out there playing it and loving it.

Second, this game is really social. When my son and I went out on a bike ride to play the first week this game was released we ran into a dozen people playing and all of them would come running over to say hey and ask what we had found. I just about fell of my bike. At one point it was me (40), my son (7), and a collection of guys and gals in their 20’s. Totally inclusive.

A New Age Of GPS Enabled Games (and Businesses?!)

What has really struck me as interesting about this game is the successful use of GPS and world maps along with a game. This is by no means the first time this has been done but I would certainly argue this is the most viral example to date. This is such an excellent example of a creative blend of pop culture and technology. Geocaching has been around for years and we at 14 Oranges developed a product called Questogo that allows organizations to create location enabled scavenger hunts. Check out Questogo it is a really cool product and a very useful tool in teaching and team building.

What Pokémon Go has done is to leverage an existing group of kids already familiar with the Pokémon universe, with ready access to the required technology. This made its growth viral. I absolutely anticipate a huge number of these types of games to come in the near future, many likely to use the same platform with different character sets.

Would this Apply to Mobile Workers?

For sure! Again, Pokémon Go is really just an excellent example of leveraging technology to provide a new interface into how we work. Gaming (or Gamification as this approach is sometimes called) is just an approach that could create a more interactive and enjoyable experience for field service workers and their customers. Now, there is no real job (yet) that pays money to collect Pokémon, but there are ways this technology could be applied to improve and measure how mobile workforces function.

Now there is nothing all that new about Pokémon Go. The technology of GPS and mobile data access has been around for a long time, and we have used it to underpin our new Mobile Workforce Management Service. But Pokémon Go has shown how changing the interface and introducing novel themes and rewards can drive rapid engagement towards greater productivity. In its own right, it has instantly created a crowd sourced workforce collecting Pokémon!

Getting back to business … think about the ROI in these terms for a second:

1 Mobile worker can complete an average of 5 tasks per day
1 Dispatcher/admin person is required per 15 mobile workers.

Effectively leveraging mobile software tools that are location enabled and aware could change this scenario to:

1 Mobile worker can now complete 8 tasks per day.
1 Dispatcher/admin person can now handle 30 or more mobile workers.

These numbers are not made up. They are actually based on our experience with a real customer using our Mobile Workforce Management Service. Now our service doesn’t have as many battles with Bubasaurs and Rattatas (sounds like furniture from an Ikea catalog …), but if you do the math on the return in productivity, solutions like this pay for themselves in short order.

In summary, Pokémon Go is definitely a novel new use of GPS and data technology, and I’ll admit, it’s pretty fun. However, I won’t be playing it much unless my son twists my arm. It does illustrate to me that the next generation of mobile enabled software is on its way pulling together real time data with location + context aware software. Pulling in open data as required these apps are already changing the way we play outside, and there is more innovation to come from this.

We see customers adopting these technologies see startup costs as a barrier to entry, but the benefits in productivity and customer satisfaction stand to change the way we are served in the future.

Now excuse me while I go help my son catch a Pikachu! download

18 Jul

John Craig


We Have the Cure for Summertime Mobile App Sadness


The Apple iOS 10 release is looming large for mobile app owners and managers this summer, and 14 Oranges has a way for you to beat the heat; let us do the app update for you.

iOS 10 is filled with new features, an updated interface design and new support and testing requirements. If you are looking to refresh your app on any level, Apple is going to enforce your development team support these new iOS 10 testing requirements, as well as all the iOS 9 requirements you may have skipped over last year, like IPv6 testing.

One of the more interesting features introduced in iOS 10, is that Apple is opening up Siri for 3rd party developers. This means that you will now be able to add voice support for your application. App content can be searched and actions such as playing back videos or notifications through an application can be accessed by Siri, which will usher in a new approach for your user base in interfacing with your app.

However, if you want to introduce support for Siri, or one of the other new features, you are going to have to update your app to support all the current Apple requirements.

That’s a whole lot of trash to take care of, and you might not be staffed to handle it. To quote Homer J. Simpson’s campaign slogan for Sanitation Commissioner of Springfield, “Can’t somebody else do it?”



Yes, 14 Oranges can do it for you. And we have two ways to do it.

The first is good ol’ custom app development support. We can augment your team to help you update, test and release your application in time for the iOS 10 update. It’s one-and-done.

The second is our mobile application management approach, where you engage us to support your app today and into the future with an annual service and maintenance agreement to keep your app up to date.

So instead of pulling your development team off it’s current project to update your mobile app for iOS 10, give us a ring because:

Who can change your app out?
Clean it up for you?
Fix the iOS 10 and do the Siri thingy too?
14 Oranges Can!

23 Jun

Shane Todhunter


Tour de Delta Part of BC Superweek - the 14 Oranges Connection


BC Superweek is one of the most prestigious pro-cycling events in North America and we at 14 Oranges are the proud website sponsors of the headlining Tour de Delta races which run from July 9th to July 11th 2016. BC Superweek then moves onto Gastown (July 13), Burnaby (July 14), Port Coquitlam (July 15) and wraps up in White Rock on July 16th and 17th.

The Tour de Delta itself features three different events. The first is the MK Delta Criterium event on Friday night in North Delta around a tight 1.2 km route. The second is the Brenco Criterium on Saturday night in the heart of Ladner. The last is the White Spot | Delta Road Race, an internationally sanctioned Union Cycliste Internationale (UCI) event running through the streets of Tsawwassen.


Professional racers from around the world make their way to BC for these races. Because the the road race in Tsawwassen is a UCI sanctioned event, racers will be pushing to earn points towards qualifying for international races, including the Tour de France. You and I can expect to see some world-class racing!

As the Community Engagement Director for the Tour de Delta, I have been working hard this year to help bring awareness and engagement to this wonderful event. Along with my fellow Tour de Delta board members, we came up with and executed a number of new ideas to this end including a photobooth and school sports day packages.

Both the North Delta and Tsawwassen events have community events attached to them including food, entertainment, and lots of family friendly activities. All three events also feature kids races and the North Delta and Tsawwassen events will feature a Rotary Bike Obstacle park including teeter-totters, ramps, and tabletops perfect for kids between the ages of 5 and 13.


When I joined the organizing board this year I was made aware that there were some issues with the website. It had recently been hacked, and was in need of a facelift. It made sense to offer our website development services to resolve both these issues and now their new website is ready to roll!

The website features a parallax wordpress theme that has been customized to suit the Tour’s needs. It incorporates responsive (aka mobile-friendly) design making it look great on both mobile devices and desktops.

So check out our new website for the Tour de Delta and come out and enjoy the races with me! This community event really allows you to get up close with some of the best racers in the world, and I hope to see you there!

03 Jun

John Craig


Towards a More Efficient Mobile Government Workforce

Dashboard - Map

Before I head out to the MISA Ontario Conference, the annual gathering of the technology managers inside Canada’s municipal governments, I wanted to pause and outline the question I’m going to be asking the attendees I meet this weekend:

How are you managing your various mobile workers in each of your departments?

I’m expecting a wide variety of answers, including:

• GPS tracking solutions for snowplow fleet managers
• Whiteboards or paper schedules for lifeguards
• Tough-books for fire/police forces
• Push-to-talk phones for security staff
• iPads for my site managers

In other words, I’m expecting each department to have their own way of communicating with and organizing their mobile workforce. And I expect each of these workers will be managed by a different back-end system, with a few of them working with more than one back-end system, including:

• Licensing and permitting systems
• Route management systems
• Bylaws and ticketing systems
• Geo-spatial databases
• Customer relationship management (CRM) systems
• Asset management databases
• Billing and point of sale systems
• Time sheets and scheduling systems

Multiple interfaces, multiple workflows, multiple back-ends hosted inside the municipality and some in the cloud. It’s confusing, hard to report holistically on and ultimately inefficient and costly to government.

This is why we are introducing our mobile workforce management solution.

The concept is to make the mobile worker’s job simple, by providing them with one mobile application interface that shows them all the information they need, and all the information they need to collect. They see their next job, and where exactly to go on the map to do it.

Job Details-android_framed-540

The mobile worker’s manager/dispatcher can see their workers on the map too, ensuring their safety and the tracing necessary to ensure that service is being provided to every taxpayer. The manager/dispatcher can drag and drop jobs into or out their mobile workers’ work queue for that day, allowing them to re-prioritize assignments on-the-fly to deal with priority needs.

Dashboard - Map

The system’s flexibility is in it’s ability to define customized workflows for every job that is needed to be done in the city, along with the built-in scheduling capability to assign the job to the right full-time or part-time worker with the right skill set to go the site and get the job done the first time, preventing costly revisits.


Data is collected in the field and it flows back to the service and distributed to whatever back-end system needs it through their well defined service interfaces and APIs.

Reports will be able to provide insights to managers/dispatchers on improving the processes, and help to identify ways of maximizing employee on-site time vs. off-duty tasks.

Custom workflow, custom forms. Custom reporting.

14 Oranges will give you the actionable insights you need to make your workforce more efficient. We are looking forward to these conversations at MISA this upcoming week.

01 Jun

Sylvain Marcotte


Hiring – Web Developer

We are looking for a senior web developer to join our team on a full time basis. You will be working on some of our new customer projects.

Responsibilities May Include:
– Development of web sites and back end systems
– Interface with customers throughout life of projects
– Fix bugs in existing code base

Desired Qualifications:
– At least 2 years of PHP/mySQL development
– 2 years working with Javascript and/or jQuery
– MVC Framework Experience (Laravel or similar)
– Experience working with WordPress
– Experience with JSON and/or REST API development
– Experience with Twitter Bootstrap, Photoshop, and GIT would be a plus
– Good communication skills
– Good attitude
– Good aptitude

Please send your resume and cover letter in PDF format to hr@14oranges.com with REF 14O-WD16-W

17 May

Shane Todhunter


Creating an API FAST with Slim Framework


We develop API’s very regularly at 14 Oranges, being that almost every app we have developed requires some sort of back end data source. Developing an API is really not a difficult process but there are lots of little things to consider and building one from scratch is just not always the best use of your time. We do about 90% of our server side development in php and have over the past 15 years done everything from creating our own frameworks to using popular frameworks like Cake, laravel, symfony, zend and codeigniter. But up until this week I had always ignored Slim framework. I figured if I didn’t need all the bells and whistles on a project offered by a full featured framework, I would be better just going to my own toolset.

Andrew, one of our developers, mentioned recently he was using Slim for an api related project, so when I had to develop a really quick proof of concept for a client recently, I figured I would take the time to try it out and I thought I would put some notes down for other developers that might be curious. I ended up turning it into a presentation for our company and decided to share my findings here in this post.

I figured I would jump right in and install it, then look at a few examples, write some code and get it working before reading the documentation. I know, I know, RTFM, and I do … eventually. But I am a quick study and manuals more often than not put me to sleep.

My shortcut in this case paid off. I hadn’t gotten to reading the manual yet and my API was working as intended.. So I guess what I am saying is learning curve on Slim is really low.

I began by installing it via composer. You will have to have php installed first to complete this.

On my mac I created a new directory, opened up terminal and navigated to that directory and simply installed composer with this command.

curl -s https://getcomposer.org/installer | php

There are a couple routes to take next. You could install just the Slim framework and go from there or you could start with the slim-skeleton which basically does some of the initial setup for you and points you in the right direction. I went with the basic install but in retrospect I think installing the skeleton would be a better option.

I created my composer.json file containing the following:

   "require": {
     "slim/slim": "^3.0"

Lastly installed via composer with:

php composer.phar install

There you have it … took about 1 minute.

I created my index.php file and added some rewrite rules to ensure all requests were routed to this file in an .htaccess file. Lots of tutorials out there on how to do this so I will skip it. Inside the index.php file I had to require the autoload.php file that the Slim installation created, instantiate Slim and get going on my routing. Here is what that looks like.

 use \Psr\Http\Message\ServerRequestInterface as Request;
 use \Psr\Http\Message\ResponseInterface as Response;

require 'vendor/autoload.php';

The Slim Framework’s router is built on top of the nikic/fastroute component, and its fast and easy to use. Here is what my index.php file ended up looking like with my first route defined, a base route basically just saying you need to authenticate.

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require '../vendor/autoload.php';

$app = new \Slim\App;
$app->any('/', function (Request $request, Response $response) {
   ->write("Welcome to the API. Please authenticate.")
   ->withHeader(''Content-type', 'application/json');
   return $response;


The use statements at the top of the script are bringing the Request and Response classes in. Slim framework now supports PSR-7, a PHP standard for HTTP messaging. We then setup $app to contain an instance of Slim and add a route. When adding a route to a Slim application you can choose an HTTP request method (POST, GET, PUT, OPTIONS, PATCH, DELETE) or as I have done in this case you can allow the listener to accept requests with any HTTP method.

Every HTTP request has a method that is typically one of:

OPTIONS – a request for information about the communication options available on the request/response chain identified by the Request-URI.

GET – retrieve whatever information (in the form of an entity) is identified by the Request-URI.

HEAD – identical to GET except that the server MUST NOT return a message-body in the response.

POST – used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI

PUT – requests that the enclosed entity be stored under the supplied Request-URI.

DELETE – requests that the origin server delete the resource identified by the Request-URI

PATCH – requests that the items in the enclosed entity be stored under the supplied Request-URI (not a wholesale update).

SLIM implements each of these methods and allows you to create your own custom methods as well. The methods are not strictly enforced by SLIM so you can work with them as you see fit. You could really throw the other devs for a loop by returning error code 69 on HEAD but I really would not recommend that.

The second parameter for the route method is the callback function which is being passed the PSR-7 request and response objects. A route can look at the request and manipulate the response as required then return the response. Once all of the logic and business stuff is done you run the $app and away we go.

So in about 5 minutes of coding we have our api’s first endpoint operational. Any request to the base url of our API will respond with a 200 HTTP status (default in Slim) with a JSON content type and a response body of ‘Welcome to the API. Please authenticate.’.

Obviously the API the way it stands now is not overly useful but all we have to do is add our routes corresponding to the endpoints of our API and we will have the job done. So here is a full API implementing a really simple Authentication endpoint. Obviously this is not something I would use in the real world but it is a great example of how fast and easy Slim is to use.

 use \Psr\Http\Message\ServerRequestInterface as Request;
 use \Psr\Http\Message\ResponseInterface as Response;
 require '../vendor/autoload.php';
$app = new \Slim\App;

 $app->post('/auth/',function (Request $request, Response $response) {
   $allPostVars = $request->getParsedBody();
   if($allPostVars['username'] !== "shane@14oranges.com" || $allPostVars['password'] !==password_hash("superSecretPassword")) {
     $app->halt(403, 'Invalid Credentials.');
   }else {
     $token = password_hash ('SuperSecretToken');
     echo json_encode(array("status" => "success", "code" => 1, "token" => $token, "message"=> "App API Success" ));

 $app->get('/tickets', function (Request $request, Response $response) {
   if($token !== password_hash ('14Oranges')) {
     $app->halt(403, 'Invalid Token.');
   } else {
      $mapper = new TicketMapper($this->db);
      $tickets = $mapper->getTickets();
     $response->getBody()->write(var_export($tickets, true));
     return $response;

So there you have it. An Auth endpoint listening for username/passwordhash returning a token on success. A tickets endpoint sending back a list of tickets and verifying a valid token. All said and done very quickly. There are lots of useful features that I haven’t illustrated here but the documentation is good and the community is also pretty active so you can pretty easily find the answer you need.

Lots of handy helpers

Slim comes with a bunch of helper methods as well. Pretty self explanatory and easy to use. Here are a few examples.

$headers = $request->getHeaders();

$headerValueArray = $request->getHeader(‘Accept’);

$contentType = $request->getContentType();

$mediaType = $request->getMediaType();

$charset = $request->getContentCharset();

$length = $request->getContentLength();

$parsedBody = $request->getParsedBody();

$body = $request->getBody();


My Findings

Slim is small, fast and easy to use. I would definitely recommend trying it out if you are developing an api. Keep in mind that Slim takes a barebones approach to development, though. The routing is basic yet functional, but relies on the developer being able to extend it. The Slim team realize this, and have made it easy to do so, notably with middleware and their use of Dependency Injection.

Templating is available too. Slim ships with support for Twig and PHP-View, but there are many other options as well. There are some very useful organizational tools such as route hierarchy and groupings allowing you to keep a complex API well organized.

I am not about to get Slim Framework tattooed across my back at this point but I know a few guys that might!.image00

17 May

John Craig


Sylvain Marcotte Reveals the Origin of the Name 14 Oranges

Evolution 107.9

Evolution 107.9

Mike Turcotte from the British Columbia Institute of Technologies’ (BCIT) radio station Evolution 107.9 interviews 14 Oranges CEO Sylvain Marcotte on his experience in the mobile application development industry. Sylvain shares insights for students, the growth taking place in the industry and also reveals the origin of our firm’s name, 14 Oranges!

Listen to the interview here on Soundcloud, and download the Evolution 107.9 mobile apps for Android and Apple to stay on top of the latest BCIT news, provided by 14 Oranges!

26 Apr

John Craig


Carrots: Free Mobile App Icon Generation Tool

Carrots icon

If you have found this blog post, you are likely well acquainted with the painful step of generating all the required different sized graphics files for your mobile app icon before you submit your app to the Apple iTunes or Google Play stores. Maybe you were a patient, saintly soul who had been leveraging Preview or Photoshop to resize your 1024×1024 icon file but forgot one to many times to name it with the right @2 or @3 extension, and have finally lost your mind. You are also likely well versed in the mercurial decisions by Apple to change certain icon sizes by 3 pixels or, add new one like they did when they released the Apple Watch. Well fear no more, we have felt your pain and suffering and have your solution, it is the 14 Oranges Free Carrots Icon Generator


With Carrots (we were feeling botanically enlightened when we came up with the name), you can simply drop one square 1024×1024 image into the Carrots tool and it will generate all the images for you with the correct dimensions and names. We even tossed in the Android graphics for all the cross-platform developers out there.

Here are the steps:

1) Visit carrots.14oranges.com

2) Select the platforms you want the images for (Apple, Android, Apple Watch)

3) Drop your 1024×1024 image in the drop area (or click the upload button if you prefer old school)

Screen Shot 2016-04-26 at 3.25.31 PM

4) Wait for the image to upload

5) Click one of the Download Zip buttons to download a zip file of the resulting files or click the download button for only the files you want to have

Screen Shot 2016-04-26 at 3.26.58 PM

6) Import them into Xcode or Android Studio

7) Huzzah! (to borrow someone’s else expression)

PS. If you see any new file sizes that we forgot about, feel free to drop us a line at support@14oranges.com and we will add the extra size.

20 Apr

John Craig


Hedge Connection Launches Audience Voting Mobile App for Fund Manager Pitch Event

Screen Shot 2016-04-20 at 2.33.05 PM

Hedge Connection, the patented marketing platform for hedge funds, has announced the release of their audience voting mobile app for their annual Deal Ring event, which was most recently held on March 16, 2016 in Chicago. The apps and event website were developed by 14 Oranges for Hedge Connection, and allowed the audience to vote in real-time on fund manager pitch sessions during the event.

Today, Hedge Connection is announcing the release of their Deal Ring event app for iOS and Android. Deal Ring is a Shark Tank style event where fund managers pitch to a panel of hedge fund investors, called Ringmasters, before a live audience. The app allows the audience, also made up of investment professionals, to participate in judging the fund manager pitches.

The website and audience voting apps feature an easy to navigate design that worked in real-time to provide both a voting interface and a voting results display for all the attendees at the event. Based on the audience and Ringmaster feedback, the managers would land a meeting with a Ringmaster to discuss a potential allocation in their fund.

The mobile apps and website were developed by 14 Oranges, one of the leading custom web and mobile application development firms in the the Pacific Northwest. Based in Vancouver, BC, 14 Oranges is known for its custom app development work across a broad spectrum of event, retail, government and telecom customers, including the Blo Dry Bar, the Jim Pattison Broadcast Group and the BC Safety Authority.


“We were looking for a mobile app solution that we could tie into this unique event format,” said Rob Arthurs, Co-Founder at Hedge Connection. “14 Oranges was able to provide their audience voting app in a timely fashion, and it helped to make our event very engaging for our attendees.”

“Our experience in developing data-capture and reporting solutions for our customers allowed us to roll out the required solution quickly and efficiently,” explained Shane Todhunter, Vice President of Business Development with 14 Oranges. “We applaud Hedge Connection’s vision to engage their event audience through their mobile app.”