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.”

18 Apr

John Craig


4 Tips For Effectively Marketing Your New Mobile App


When it comes to bacon and eggs they say the chicken is involved, but the pig is committed.  When it comes to releasing mobile apps, the development of the app is involvement, but the marketing of the app is where you truly commit to your audience.

Put plainly, if you think your target audience will find your mobile app with no prompting on your part, you will be disappointed with the download results. Our experience has shown that not marketing your app will create a very low, straight line download rate.  Basically you are relying on your audience to discover the app on their own. While both Apple and Google are good at presenting your app for download, unless you have some timely, culturally significant content you will not get their attention to feature your mobile app in their app stores.  However, there are a number of both free and paid ways to effectively market your mobile app to your target audience, and better yet, measure the success of your campaign.

1)         You are your best advocate: App download pop-ups on your website.

By now you have surely noticed that more and more of your target audience has been connecting with your website from their mobile devices.  This may even have been your statistical justification for having a mobile app built.  With the addition of a very simple, pop-up on your website you can re-direct incoming visitors to download your newly minted mobile app.   

Links and advertisement on the front page of your website are also effective, but nothing grabs the attention of mobile users like an option to opt out of the mobile website and download an app.

2)         Social media marketing: The Freemium approach

That intern in the corner churning out click-bait?  Get them in the routine of posting that you have a mobile app to download!  Your social media following, if it is engaged in what you are posting, will take to this message quickly.  But remember, you can’t get away with posting once in the social media world.  Your posts are now getting buried in your target audience’s social media feeds, so it’s critical to re-post the app’s availability on a routine basis, and even think about paying to boost your posts.  Now, if you followed tip #1, all your social media posts that connect back to your website will also lead to the app being advertised immediately to your mobile users.   Think of this as the tag team of free digital marketing app techniques.

3)         Performance advertising: Targeted and measurable

Facebook and Google, as was pointed out by Gabe Laydon, the CEO of Machine Zone (Must watch interview) are performance marketing firms. They get paid to position ads to your target audience. Make use of these ads and position yourself against the right keywords and demographics.  TV and radio have proven to be effective ways of marketing, but as Gabe shares, try exhausting digital advertising before spending on these traditional media. Even if the numbers seem low at first, digital at least gives you an accurate measure of what your audience is clicking on versus the Hail Mary marketing approach still embraced by traditional broadcast media.

4)         Display advertising: Be seen where it counts

When your content is targeted to an audience sitting in a doctor’s office or standing in a bus shelter, why not just use a poster to ask them download your app?  While digital advertising is tightly targeted, it is constrained to the online world, and display advertising offers additional value based on the location context of the display which helps to trigger the desire to download an app. By using a vanity URL or even a QR code, you can easily extract a further digital measurement on the success of the display ad campaign.

In all the cases above, you will be able to benefit from a digital measure of your campaign’s success to get your mobile app downloaded.  So go on, be a pig, and commit to putting the best mobile app download marketing practices into your release plan!


14 Apr

Shane Todhunter


14 Oranges Brings Its Mobile App Software Development Expertise to Ottawa and Halifax

John Craig

14 Oranges today announced it is expanding its North American market coverage for custom mobile app software development beyond the west coast to Ottawa and Halifax. This move is timed with the hiring of John Craig as its new VP of Sales and Marketing, tasked with growing the organization’s sales across North America.


14 Oranges is today announcing the North American market expansion of its mobile application development businesses with the launch of sales offices in both Ottawa and Halifax. Having already established a market leading position and solid reputation for delivery in Vancouver and the north western United States, this move provides customers with two eastern touch points for the company, as well as future access to the world-class software engineering talent that both towns are known for.

“Ottawa and Halifax, both important government towns, are also hub towns for Canadian technology with strong historical ties to trade with United States,” said Sylvain Marcotte, CEO of 14 Oranges. “This expansion will help us to continue to grow our firm and position us to deliver on our next-generation of services to the largest population centers in the US and Canada.”

14 Oranges is also formally announcing the hiring of its new VP of Sales and Marketing, John Craig. Craig, an industry veteran with entrepreneurial experience in the development, deployment and delivery of mobile applications, has joined 14 Oranges to drive the expansion of 14 Oranges North American sales and establish a deeper position with both its traditional telecommunications clients and the next generation of mobile workforce solutions for both the private and public sector.

“14 Oranges has the critical mobile application development DNA needed to build the next generation of mobile telecom and mobile worker applications,” said Craig. “I am glad to be a part of expanding this team’s footprint to Halifax and Ottawa, as well as the prospects of continuing to contribute to the ongoing growth of entrepreneurism and technology across Canada.”

Victoria Lennox, the CEO of Startup Canada, also welcomed the expansion of 14 Oranges across Canada, “This is a great example of a firm with regional success expanding to provide pan-Canadian opportunity, and we too are hugely supportive of 14 Oranges as they expand to offer services across Canada.”

Melody Pardoe, the COO Volta Labs who provide co-working space to 14 Oranges in Halifax added, “Volta is happy to support small business expansion into the Atlantic region. It’s great to see 14 Oranges expand across the country and join the tech community in Nova Scotia.”