Category Archives: Programming

Vimeo Video Script

The Vimeo Video Script (AKA Maggie Script) is a basic Web Scrapper that retrieves video information from a Vimeo endpoint. This data includes fields such as quality, type, width/height, link, fps, etc. The script will then take the retrieved data and convert it into a CSV file.

While building the application I found that, due to the size of data Vimeo was returning, their Api would occasionally throw a 504 gateway timeout. This error is reasonable as the script was making a request for an array of 100 video objects that contained quite a bit of data. The request would take about 5-10 seconds, and depending on how many videos you want, could be up to 100 requests (The theoretical max). To work around this, I added a 2 second cool down between each request.

Features

  • Multi-threading
  • Settings page (Adjust access token & video count)
  • Progress messages
  • CSV Converter
  • Light Weight (< 1MB)

Images

You can download the executable below

Vimeo Video Download

New Student Classroom Management App – Kodiak Picker

We recently were contacted by a school in Kodiak Alaska to help them do a classroom management app. They had tried unsuccessfully several times to get someone to make this app for them, so we thought we’d take a crack at it. Overall it’s a pretty simple app, but we’re proud of it because we put it together very quickly for them, and they are enthralled with the results. It demonstrates the use of AngularJS and Google’s Material Design that was made originally for the latest Android OS. We made use of the Angular Material plugin on this project.

We released the source code for this project, Kodiak-Picker, under the open source GPL License and the code is freely available on Github: kodiak-picker – Github

The Kodiak Picker app itself is an application written to help track and manages students, quarters/semesters (referred to as “cycles”), and classes (referred to as “tutorials”). The application allows students to choose classes to sign up for out of those available. This can be overriden by teachers or administrators who may know better the needs of specific students. The software can also generate reports about which students are in any class, or search by student to find out what class they are in at any given time. Rooms and instructors are also included for each class. Registration for new cycles can occur while an existing cycle is ongoing.

Kodiak Picker Screenshot

Return JSONP with CakePHP

Here’s a nice way to turn on JSONP for CakePHP. JSONP, or JSON with padding, is necessary when you want to include JSON from a site different than the one you’re on.

A good explanation for what JSONP is can be found here: http://stackoverflow.com/questions/2067472/what-is-jsonp-all-about

Just include this code on any CakePHP controller that you will be using with JSONP (or you could put it in the AppController to make it work everywhere in your app but that may add a slight performance hit). It checks to make sure that JSON is being returned before trying to apply the padding. This code overrides the afterFilter() which is the last controller action CakePHP does after doing rendering.

    // This funciton makes so JSONP works
    public function afterFilter() {
      parent::afterFilter();
 
      if (empty($this->request->query['callback']) || $this->response->type() != 'application/json') {
          return;
      }
 
      // jsonp response
      App::uses('Sanitize', 'Utility');
      $callbackFuncName = Sanitize::clean($this->request->query['callback']);
      $out = $this->response->body();
      $out = sprintf("%s(%s)", $callbackFuncName, $out);
      $this->response->body($out);
    }

Find out what Subversion commits haven’t been merged to stable

We frequently use Subversion for version control, and use /trunk to commit all code in active development and merge code to a stable branch that represents what is currently on a production server.

Sometimes commits need to be done right away, so you merge them right away; others can wait until you do a push.  After developing a while with regular commits to trunk, you can have a state where several commits in trunk may already be in the stable branch while others aren’t.  When you’re ready to push a group of commits to stable or do a full release of everything from trunk to stable, it’s helpful to know which commits haven’t been merged to your stable branch yet.

Here’s a bash script that will show you the details of everything in trunk that hasn’t been merged to stable:

#!/bin/bash
for i in `svn mergeinfo --show-revs eligible svn://server/project/trunk svn://server/project/branches/stable | cut -c 2-`
do
svn log -c $i svn://server/project/trunk
done | less

The magic here is the “svn merginfo –show-revs eligible”.  Very useful.

Does Your Business Need a Mobile App?

As a business owner you may be asking yourself this question when it seems like the whole world is going mobile. There are some key points to consider in order to answer this question for your company.

The first thing to consider is your audience. What does your typical consumer look like? Nielson released a study in January 2012 with a sample of 20,000 consumers on reported smartphone ownership. The percent in each category is as follows:

  • 66% of 25-34 year olds
  • 54% of 18-24 year olds
  • 53% of 35-44 year olds

If your target audience is not in these age groups, you may not want to proceed with an app. However, if your audience is in a saturated bracket, consider if you have a following or would be able to create one with a little work. One thing to try before investing in a mobile app would be to create an online presence through a website and Facebook. Would your company be able to use an app to “push” products and services to your followers? Would a mobile app give you a competitive advantage?

Google released some other interesting data to consider:

  • Mobile searches have increased 4X since 2010, to over 100 billion mobile searches in 2011. Consumers are looking for information directly from their smartphones, often about local businesses, where to go and what to do.
  • 36% of all restaurant searches are done on the mobile phone.
  • 70% of smartphone users use their device while shopping in-store
  • 53% of searchers purchase as a result of a smartphone search
  • 95% of smartphone users have searched for local information
  • As a result of looking for local information, 77% contact a business and 44% purchased
  • By 2013, more people will use their mobile phones than PCs to get online

Does your business have the capability to benefit from this type of use to enhance shopping experiences, promote products or fill time-slots?

The last point to consider would be budget. Development costs can vary greatly depending on the complexity of the app. Meet with a development team to determine what functionality would be necessary and to craft the most useful tool for your business so your company’s costs will be returned exponentially.

Gaming to Grow Your Business

The Economist says “video games will be the fastest growing and most exciting form of mass media over the coming decade.” But why should that excitement end there? Businesses across the board are finding they can use the same idea, and the same audience, to increase business.

Today there are more than 180 million gamers of all ages in the US, and over 40 percent are female. Smartphones are adding to this increased audience. An example of merging business interests with gaming enthusiasm would be a new campaign by the Utah Division of Emergency Management and the Centers for Disease Control and Prevention which plans to capitalize on the recent rise in popularity of all things zombie. They are centering their new campaigns around “everyone’s favorite monster” in hopes of bringing increased attention to their cause and attendance to their events.

This same use of a modern gaming audience can be applied for business use in trainings, advertising, simulation or education. If you are looking for that extra something to bring attention to your business, business mobile app or desktop application, think about the possibilities of a gaming format.

References: Bloomberg Businessweek August 27-September 2 issue, ksl.com, The Economist

Html5 Audio restart playback in iOS Safari

When using html5 audio and Apple’s safari browser on iOS there is a problem that occurs when you try to set the audio’s time.

Html5 audio DOM object has an attribute called currentTime. This unfortunately isn’t available in iOS safari. This makes it difficult if you want to start the audio from the beginning.

An example code like this:

if($('#audio_' + id)[0].currentTime != undefined)
{
	$('#audio_' + id)[0].currentTime = 0;
}

will throw an exception.

There is an easy way around this problem and that is by removing the audio element from the DOM and then re-adding it.

Here is my code:

var audio = $('#audio_' + id).clone();
var parent = $('#audio_' + id).parent();
$('#audio_' + id).remove();

Post in the comments below if this has helped you in developing html5 audio in safari. Any questions are also welcome.

New mobile app – Vinny

We are excited to showcase a fantastic new mobile app we have helped develop. This app is still in beta but will be released soon!

Did you ever wonder what the dealer really paid for that car on the lot?

Check out Vinny, a new app that tells you the exact wholesale cost by simply scanning the VIN barcode. The creators of this idea put together a video highlighting how the new app works:

We created this app using PHP, Mongo DB datasource for Cakephp, and JQuery Mobile.

A Simple Popover Tooltip

I like the popover tooltip that Twitter designed and I want to use it in my web applications without having to include the full bootstrap project.  I included only the basics needed to give me the popover functionality.  Here is what it looks like once implemented:

To implement, you just include jquery and the files below, then in javascript, run popover() on the elements you want to turn popover on for:

$('#popover-link').popover({placement: 'right'});

Then you put the content of the popover in the title and data-content tags. Here is the code:

<a href="#popover-link" title="Title" 
   data-content="Text in the popover">Sample Link 1</a>

Here is a live demo of the bare-bones popover tooltip in action.

Here are links to the resources used in this project:

Javascript Object Switcheroo

So I found out something interesting with javascript and objects. Let’s say you have a cube object in javascript that is defined by this function.

function Cube(x, y, z);

Now lets say we had set the z value to be zero. Why would we want a cube object when it is really just a plane?

function Cube(x, y, z)
{
	this.x = x;
	this.y = y;
	this.z = z;
	this.type = 'Cube';
	if(z == 0)
	{
		return new Plane(x, y);
	}
}
 
function Plane(x, y)
{
	this.x = x;
	this.y = y;
	this.type = 'Plane';
}

If we do this code here:

var shape = new Cube(4, 2, 0);

If we were to inspect shape what type of object will it be?

If we did something like document.write(shape.type) the answer will be Plane.