Challenge Overview

draft document

Introduction

Welcome to "Interlochen Media -- iOS application code challenge for Vimeo Integration.

The nonprofit Interlochen Center for the Arts is a recipient of the National Medal of Arts and the only organization in the world that brings together: a 2,500-student summer camp program; a 500-student fine arts boarding high school; opportunities for hundreds of adults to engage in fulfilling artistic and creative programs; two 24-hour listener-supported public radio stations (classical music and news); more than 600 arts presentations annually by students, faculty and world-renowned guest artists; a global alumni base spanning eight decades, including leaders in the arts and all other endeavors. For information, visit Interlochen online at www.interlochen.org.

This tvOS application will be used by Interlochen as a central location to showcase the quality and diversity of their programs. In addition, the app will help promote the arts by allowing users to view videos of live performances and listen to recordings of concerts. We are looking forward to  your participation in this challenge!

 

Challenge Overview

This is a code challenge to build a model using Vimeo’s API. We earlier ran another code challenge for iOS. We have provided a starter project (see Run Application section) that contains a TVML UI Prototype created in two previous challenges. All of Interlochen’s Archived media will be delivered using Vimeo’s API. This challenge is to build off of the existing UI and TVML starter project, do not change anything in the UI that is not specifically called out in this challenge (see UI Section).

See our previous challenges:

 

Endpoints

All calls to Vimeo need an access token. The vimeo access token is stored in the configuration file (config/config.js). See screenshots below on how the data matches up in the UI.

 

Get User Info

[GET] https://api.vimeo.com/me

 

Fields of interest:

  • name

  • link

  • location

  • bio

  • pictures

    • Save link for each resolution

  • website

    • save all fields for each website

  • metadata

    • save all fields for each metadata line item

 

Get Albums for Authenticated User

[GET] https://api.vimeo.com/me/albums

 

Fields of interest:

  • Name

  • Description

  • created_time

  • Pictures


 

Get video in a album

[GET] https://api.vimeo.com/me/albums/{albumID}/videos

 

Fields of interest:

  • name

  • description

  • length

  • duration

  • width

  • height

  • created_time

  • Pictures

  • tags

  • files

    • Use HLS

  • status    

 

Search for a video within Interlochen’s video list

[GET] https://api.vimeo.com/me/videos

query = “keyword”


 

Code Specifications

use the existing code on github. Please follow the following requirements when coding for this challenge:

  • You may use tvOS (Xcode, Swift) or javascript layer to store albums and videos, which ever works best. Please document and explain reasoning.

    • use commonly known libraries to JS or Swift, please document any libraries used. If you are unsure ask in the forums.

  • Should cache content so the metadata does not load everytime the user clicks into a screen, Cache can be updated everytime the app is open and based on a global time interval (2 hours for now).

    • Again this can be handled by either tvOS or javascript layer.

  • Videos within an albums should support pagination with a method to support infinite scrolling.

  • All album metadata should be loaded on start (including featured videos).

  • You may utilize tvOS code (Swift in Xcode Project) if you find it useful, but please stick with TVML coding guidelines.

  • Once complete, content in Featured, Performances, News/Features, Mini Lessons & Search should be dynamically loaded and not depend on any local data on the client server. These section should only pull from Vimeo.

  • Play the HLS version of videos.


UI Integration

For this challenge organize the data based on the content-meta.json (data/content-meta.json). This file contains details for each category of the application. For this challenge only focus on categories with integration of “VIMEO”. In the category object you will find albums or album (featured) which will tell you how to organize the videos. below I have matched this up with the UI:

Featured:

Only contains one album and is displayed on the home page on the top carousel

Screen Shot 2016-02-01 at 12.48.06 PM.png
 

Performances, News & Mini Lessons

Can have multiple albums, should display a detail/child list if multiple or a single list if only one

example of view with multiple albums

Screen Shot 2016-02-01 at 12.53.16 PM.png

Example of a view with 1 album

This will need to be built out, currently no support for this in the current architecture.

Screen Shot 2016-02-01 at 1.31.39 PM.png

The above sections should dynamically display based on the number of albums in the content-meta.json file.

Search Page

The search page needs to be added and should searched based on the Vimeo search in point. use standard TVML search functionality. List search results as a line item and clicking take the user to the content detail screen with data of that video populated.

Screen Shot 2016-02-01 at 1.34.46 PM.png

Content Detail Screen:

Currently the content detail screen provides a section for multiple videos, for any Vimeo video we do not need this, please remove the multiple videos and provide an area for a longer description.

Screen Shot 2016-02-01 at 1.47.31 PM.png

Only focuses on sections with the “VIMEO” integration, no need to do anything for campus view or radio. Once completed this challenge should no longer use sample data for vimeo sections.


 

Running the project

Please post in the forums if you face any issues running the existing backend/ app.

Client Server (interlochen-heroku):

  • Request access to github project

  • Download repo

  • Change client base url in configuration.plist to localhost:9001/

  • Change protocol in appdelegate from HTTPS to HTTP.

  • install nodejs

  • install node package harp

  • run harp server --port 9001 in the Interlochen-Heroku directory

  • All code for the TVML server can be found in the public folder, you should not need to touch code outside of that folder.

Xcode Project (interlochen-appletv)

  • Have latest release of XCode (7.2) and open “Interlochen AppleTV.xcodeproj”

  • Run project Interlochen AppleTV in Simulator

    • Must run in a simulator since the server will be running on your local machine.


Final Submission Guidelines

-- All code should be written in Swift and JavaScript and be well commented

-- Submit a Deployment Guide with detailed configuration and verification steps
-- Upon Regestering you will again access to 3 github repositoies (tvOS Xcode Project, tvOS Client Server & iOS)
-- Use CocoaPods for any tvOS framework dependencies (Alamofire is included and requred for HTTP requests)

-- Code must compile against the latest version of tvOS.

-- Upload your source project as a zip
-- Provide a video overview of your submission

-- If you win, you will be asked to merge your code into the current code base on github. 

ELIGIBLE EVENTS:

2016 TopCoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30052223