Category Archives: Software Development

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.


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


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

New Product Release

We have been working with School Improvement Network on enhancing their line of educational products for the last few months. They offer a wide range of tools for professional development and teacher training throughout the United States, Canada, and overseas.

School Improvement Network has just released an app we helped create for them which streamlines the process administrators go through to conduct teacher assessments in the classroom. Check it out here:

Evidence 360

Coming soon from this partnership: a dynamic e-reader teachers can use to continue their professional development.

We created this app using Objective-C.

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:

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() {

      if (empty($this->request->query['callback']) || $this->response->type() != 'application/json') {

      // jsonp response
      App::uses('Sanitize', 'Utility');
      $callbackFuncName = Sanitize::clean($this->request->query['callback']);
      $out = $this->response->body();
      $out = sprintf("%s(%s)", $callbackFuncName, $out);

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,, The Economist

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:

Sample Link 1

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

Here are links to the resources used in this project:

OS X Server Lion Profile Manger

Working on one of the projects that I am on we have an iOS app that needed to be distributed via the enterprise distribution. Finding information about this though was very difficult as apple doesn’t have any information on the enterprise accounts without signing up first.

It is also hard to get any information on how to distribute these apps effectively across multiple devices while allowing app updates as well.

There is good news though. You don’t have to pay for a MDM (mobile device management) server unlike what Apple requests. If you buy OS X Lion Server in the app store there is a MDM server built into it. The cost is $49.99.

So here is what the software looks like.

Honestly if you ask me OS X Lion Server is a waste of $50 if you do not need this MDM server. Everything it includes is either built into the OS or is already available free on the web. Apple just rolled it into one application.

So what is the MDM server?

The MDM server is also known as the profile manager. This is a ruby application to manage iOS devices. If you have bought the actual application it can be found here /usr/shared/devicemgr/. There are two parts to this application. Backend/ and frontend/. Backend/ is the ruby application where as frontend is just a static html javascript page which calls upon the backend code to pull data.

I will go more in depth into these later. For now let’s see what it actually looks like. After browsing to your Mac’s address via https on a url like “https://localmacaddr/profilemanager” you will be redirected to a login screen. This login is the same as the login for Users under the OS X Lion Server software.

As you can see Apple didn’t leave out their eye candy designs in this application. One of the things you will learn about apple from this is that appearance is everything. Usability is second place. A good example of this is that you can only upload iOS applications with safari.

Once you are authenticated there really isn’t many options to the profile manager. Although you don’t really need much. If you look on the left hand menu you see Devices, Device Groups, Users, Groups, Active Tasks, Completed Tasks.

Devices are the Apple hardware connected to your MDM service. As you can see in the picture above the current type of devices we have are the iPod/iPhones and iPads. There is also support for OS X computers as well. The devices are shown with their name given to them by iTunes along with the user that they were enrolled under. For example Volunteer Enrollment is the user that enrolled Guru’s iPad.

By having a device enrolled in your profile manager you can set up pass codes on the device, network information, vpn information, manage certificates, restrict what services the device can use such as camera use, app purchasing, application use like safari, media ratings, and many more options. This is mostly for iPhone/iPad/iPod restrictions. There are different restrictions for OS X.

You can also get basic information about the device such as the installed apps (with their versions), Device UDIDs, serial numbers, MAC addresses, total space available, space remaining, battery life, and software version.

There are also features which allows you to remote wipe an app, clear the pass code, and lock the device.

Locking the device is basically the same as pressing the lock button on the top. If you have a pass code set locking the device requires you to re-enter the pass code.

Clear passcode removes the passcode on the device which prevents unlocking.

Wiping the device takes the device back to its out-of-the-box state.

The profile manager also allows you to set up device groups which allows you to push the same settings, restrictions, and apps to multiple devices instead of each individual device. In the picture above you can see we have 3 groups for our alpha, beta, and production version of the app.

There is also the same functionality for devices that a specific user enrolled. You can also set up user groups to allow for devices enrolled by multiple users.

These users and user groups are the same as the ones managed by OS X Server Lion.

If you go to a device, device group, users, user groups page at the bottom you see a cog for options. The bottom option says “edit apps”

This is where probably the most useful feature of this app takes place in terms of enterprise development.

If you click on edit apps you see a dialog pop down which shows a list of apps uploaded to the profile manager.

As you can see we have two apps in our MDM server. The apps are distinct by their bundle identifier. They also have a version as well.

You can upload apps which just asks you to select the .ipa file from your computer.

If you upload an app that has the same bundle identifier it will only overwrite the existing app if its version is higher than the one in the profile manager. Otherwise it will ignore the upload. You cannot have any spaces in the name of the .ipa that is uploaded to the server.

Clicking remove will instantly delete the app and the apps data from the device/device group/user’s devices/user group’s devices.

If you click add it will add the app to the device/device group/user’s devices/user group’s devices. Note: it will prompt the device upon app updates and application adding on the device to see if they wish to install it. Unlike removing it doesn’t happen automatically.

Lastly probably the most major downside is that this MDM application doesn’t allow you to update one specific device with a device version. If you update the app it updates all the devices who use that app. Not the specific device you are viewing. Apps are only unique by their bundle identifier and not their version as well.

That being said this application is just a simple ruby application. If you wish to change something about it you can easily do so. By default the application can be found in /usr/share/devicemgr/

There are two main sections of the app. The backend, and frontend sections. The backend is the rails application where as the frontend is a javascript/html interface to query the backend for information.

The application is served via apache and uses a postgres database.

If any web routes match {HOST}/profilemanager by default the frontend code is used.

If any web routes match {HOST}/devicemanagement/ the backend is used.

The backend can be hit via the url as stated {HOST}/devicemanagement/api/{controller}/{action}

There is a apache rewrite to rewrite {HOST}/mydevices to {HOST}/devicemanagement/api/device/start_ota

If you wish to do any database changes you can connect to the postgres database via command line by using this command.

sudo -u _devicemgr psql device_management

If you know Ruby on Rails and PSQL changing the profile manager should be easy.

How to Prevent Scope Creep

When our company develops software, one of the more difficult problems we face is taking a customer vision of a project and focusing it.  Software developers are generally very good at implementing functional requirements.  A skill that they aren’t as naturally good at is cutting and limiting requirements.

Why would we want to cut and limit features when the customer is asking for them?

Our experience has shown that our customers, not being developers, don’t always have a good handle on what features they ask for might entail or how important it is to prioritize them.   An article on scope creep says:

“…we are here to lead our clients, not to take their order. That requires being critical. Not critical in the sense of making value judgements (e.g. “that’s a dumb idea”) but in the sense of deconstructing ideas in order to justify them. We’ve got to get comfortable with challenging our clients’ requests by asking: Why? What is it for? How will it work? Who does it benefit? What does it cost? We can do this gently and kindly, by the way. I’m certainly not suggesting that we assault our clients with some kind of 3rd degree treatment. Our job is to help them make decisions, keeping in mind that there are priorities to consider with every possible feature: the purpose of it, the user experience, the content management experience, and of course, the cost-not necessarily of that specific thing, though that can be an issue, but of all these little features in the aggregate. In the end, managing the little things is the most powerful means of avoiding scope creep we have.”

Customers usually have a great vision for their products, but most of the time the budget doesn’t match the full vision, and more importantly, it’s better to have something smaller than the full vision but functional and actually released than to shoot for the full vision initially and miss the mark because the project is over budget.

One important way our team tries to solve this problem is by delivering software in small iterations rather than via “Big Design Up Front”.  This allows the customer to gauge how long it takes to see their ideas turn into something real and let’s them make adjustments along the way.

At Guru Technologies, we try to hire developers that can guide a project as well as be strictly write software.  We try to deliver something every week or every other week for the customer to look at, even if it is rough, to let them review, give feedback, and direct the next week’s work.

Read more at: How to Prevent Scope Creep.