Showtime Turns to Parse to Power Next Gen TV Experiences

Example of Showtime Sync on a TVMore and more television viewers are multitasking during viewing, often engaging with content related to the show they are watching. Rather than try to combat this behavior, Showtime decided to embrace the opportunity and develop a multi-platform interactive experience that syncs to television programming. “We wanted to serve this audience of active fans with high-end synchronized content that enhances the viewing experience and provides deeper engagement,” said Showtime’s VP of Interactive Television, David Preisman.

SHO Sync offers fans enhanced viewing for many of the series on Showtime, including Homeland, Shameless, Ray Donovan, and Penny Dreadful. The second screen SHO Sync app is available for iPhone and iPad and, in an industry first, viewers can now interact on Smart TVs using their remote control.

The SHO Sync app uses Automated Content Recognition (ACR), to accurately synchronize interactive content with the program being viewed. According to Preisman, “Many subscribers watch Showtime series time shifted, from Showtime Anytime, Showtime On Demand or from a DVR. The ACR technology utilized by SHO Sync ensures that the interactive content is always synchronized with the show no matter how they choose to watch.” Fans can vote in polls, answer trivia, learn more about key characters, and make predictions. Interactive play earns users points, badges, and bragging rights, and everything in the app can be shared.

“When we were developing SHO Sync we heard about Parse from one of our developers, so we decided to give it a try. We were looking for a cloud-based backend to power SHO Sync across multiple platforms and with the free account, we decided to take it for a test run,” explains Preisman.

The development and launch of this complex product required close collaboration between Showtime, and developers from A Different Engine and Bottle Rocket. “What’s great about Parse is that it’s dead simple to use,” said Seth Piezas, Senior Developer, A Different Engine. “I’m a big fan of developing only code that is unique to a project. Being able to fall back on the existing data, analytics, and code management and reporting web UI is a fantastic win.” He added, “In this day and age, I think if you are building anything more than what makes your product unique you are simply focusing on the wrong thing. Parse lets you focus on your product.”

Showtime needed to integrate with half a dozen systems for content, images, data processing, and gamification. Parse allowed them to perform much of this integration once, in the cloud, to reduce the integration effort on the client applications. Showtime uses Parse Data and Cloud Code for common APIs so the TV and mobile client apps can access many of the various backend services and data processing.

“Our Interactive TV and Mobile teams strive to develop breakthrough apps where the technology goes away and the viewer can immerse themselves in the story,” says Preisman. “Since our launch in early 2013, Parse has provided a reliable cloud based solution, allowing our teams to focus on the user experience.”

Showtime offers SHO Sync for over 250 episodes of original programming. You can learn more about SHO Sync and check out a demo video here.

Courtney Witmer
April 18, 2014

Parse Command Line Gets a Power Up

As more people use Cloud Code, we strive to improve the tool that directly supports it, the Parse Command Line Tool. Today, we’re announcing three new features we’ve added to our command line tool: parse updateparse default, and parse jssdk.

parse update

As the name implies, this command helps you update the tool to its latest version. If you’ve previously updated the tool, you had to revisit the Parse docs and copy/paste this script to your terminal:

curl -s | sudo /bin/bash

This is where parse update comes to the rescue! Now, you can update directly from version 1.3.0 or later. This feature is currently only available for Unix-based operating systems, but we’re hard at work getting it added to Windows.

parse default

This command returns the default app that will be targeted with our existing features, such as parse deploy, parse log, parse releases and parse rollback, when an app is not explicitly provided. Before this patch, you had to edit your config file and the _default‘s link to your desired app if you wanted to leverage the default app behavior. Now, you can use parse default [app name] to set your default app.

parse jssdk

This feature returns the current Parse JavaScript SDK used on your Cloud Code. You can also explicitly set your current JavaScript SDK by using parse jssdk [version]. This allows you to have control over the Parse JavaScript SDK on your Cloud Code. You can see all available Parse JavaScript SDK versions by running parse jssdk -a.

$ parse jssdk -a
* 1.2.13

You’ll find the full docs here. Now, go update your command line tool and let us know what you think!

Listiarso Wastuargo
April 9, 2014

Meme, Inc Uses Parse in Top-Grossing Xtreme Slots

Xtreme Slots app open on iPhone 5Meme, Inc was co-founded in 2008 by Diego Yanivello, Mauro Vazquez, and Gonzalo Oxenford. A three-person company until this year, when they decided to expand their team to support other platforms, all of their games are built in house, from the math models and coding, to the illustrations and sound design.

With successful titles like Catcha Mouse, which climbed up to the #1 position in the App Store charts in the US, Canada, UK, Germany, France, Spain and Australia during the early days of the iTunes App Store, the team turned to Parse when they started working on newest title, Xtreme Slots.

A social casino game, Xtreme Slots launched on iOS in December of 2012 and on Facebook Canvas in November of 2013. The game began with 12 slot machines on the iOS version when it was first released, but after updates every two weeks to offer new slot machines and features, there are now 40 slots available to game players.

Looking for a unique, complete cloud storage service the team found Parse on Facebook and incorporated Parse into the development of Xtreme Slots. The app stores user data, sends emails, and enables Facebook Login with Parse Core, and sends targeted messages to specific players with Parse Push.

Like many apps, Xtreme Slots stores players’ progress using Parse Data. Not just a great tool for keeping track of levels and ranking, though, the team has also found that this lets them prevent user abuses that could arise from using different devices or platforms to repeat the same action, like collecting free gifts. They also use Cloud Code in Parse Core to perform validations before saving users’ progress, use scheduled jobs to send e-mails to users with promotions for upcoming events, and are in the process of developing new social features using Cloud Code and scheduled jobs.

One important Parse Core feature for the app is Social Login. The app allows people to log in with Facebook via the Parse Facebook SDK so they don’t need to create an account and remember new usernames and passwords. With a core aspect of the game’s structure dependent on social interaction, and Facebook sitting at #1 in social gaming, enabling Facebook Login with Parse was an easy decision for the team. The team has also found that having users log in with Facebook allows them to offer users more options to earn virtual currency, share the experience with their friends, compete on the leaderboards, and other new features that are still in development.

Company co-founder Gonzalo Oxenford reports that,

From our experience, Parse is a great solution for small teams that cannot afford to develop and maintain their own servers (and is worth it for large teams as well). We were looking for an OODB when we ran into Parse, and quickly fell in love with features like Push and Cloud Code. It is very well documented, easy and intuitive to use. Parse is a growing community, which means you’ll see a very active forum were you can learn from others’ experiences. They are constantly supporting the tool and adding new features, which makes it more interesting. The Basic plan is free and offers a generous free quota so you can try Parse by yourself and see if it fits your needs.

With 1M installs since launch, 300k monthly active users and 115k daily active users, it’s no surprise that Xtreme slots has reached as high as #150 in the US iPad App Store’s overall top grossing apps. And, at #24 in the overall grossing apps in the Australian iPhone App Store, it’s currently the second most downloaded casino app in Australia.

Download Xtreme Slots on iOS today or play on Facebook Canvas now. Also keep an eye out for the Android release, coming soon!

Courtney Witmer
April 4, 2014

A Toast to Windows Phone Users

Did you know that our Push Notifications product supports Windows devices? As developers, we know how important it is to maximize the ability to reach out to your users, regardless of which phone they might be using. For a rapidly growing subset of mobile phone owners, those devices are running Windows, and we wanted to make sure that sending notifications to those users was as easy and powerful as our existing offerings for iOS and Android.

With Windows Phone on our list of supported platforms, you can leverage our API to gain thorough control of when and where you send Windows Toast Notifications. Of course, if you’ve used us for Push before, you know that the simplest method for scheduling notifications has always been through our Push Console – don’t worry, you’ll find an option for Windows Phone there as well.

Windows Phone Push Console

You can configure your Windows Phone app to accept Push Notifications by following the instructions in our Docs. Once you have registered installations of your app, you’ll be able to select the Windows Phone checkbox in the Push Console and see a preview of the Toast Notification that will appear on your users’ devices. Selecting the times and recipients of your notifications is as easy as it always was with the Push Console – the query builder allows you to choose specific subsets of your users, making sure your message gets to exactly the right people.

As always, you can read about all of our Push Notification services in our Docs, including how to track app opens through notifications.

Andrew Imm
April 3, 2014

f8 2014 Schedule Now Available

The schedule for f8 is now available! Mark Zuckerberg will kick it off with a keynote in the morning and then we’ll have more than 20 technical sessions in the afternoon.

We’ll also be live streaming all the keynotes and tracks from f8. If you can’t join us in person, be sure and tune in to the live stream of all the keynotes and tracks to catch all the new stuff and great content. Register here to learn more and be notified when the live stream begins.

Everyone at Parse is really excited to be part of f8 this year and we hope to see you there!

Ashley Smith
April 2, 2014

Smart Indexing at Parse

We love running databases at Parse! We also believe that mobile app developers shouldn’t have to be DBAs to build beautiful, performant apps.

No matter what your data model looks like, one of the most important things to get right is your indexes. If your data is not indexed at all, every query will have to perform a full table scan to return even a single document. But if your data is indexed appropriately, the number of documents scanned to return a correct query result should be low.

We host over 200k mobile apps at Parse, so obviously we can not sit down and individually determine the correct indexes for each app. Even if we did, this would be an ineffective mechanism for generating indexes because developers can change their app schemas or query access patterns at any time. So instead we rely on our algorithmically generated smart indexing strategy.

We perform two types of index creation logic. The first generates simple indexes for each API request, and the second does offline processing to pick good compound indexes based on real API traffic patterns. In this blog post I will cover the strategies we use to determine simple single-column indexes. We will detail our compound indexing strategies in a followup post.

At a high level, our indexing strategy attempts to pick good indexes based on a) the order of operators’ usefulness and b) the expected entropy of the value space for the key. We believe that every query should have an index; we choose to err on the side of too many indexes rather than too few. (Every index causes an additional write, but this is a problem that is easier to solve operationally than unindexed queries.)

Operator usefulness is determined primarily based on its effectiveness in providing the smallest search space for the query. The order of operators’ usefulness is:

  • equals
  • <, <=, =>, >
  • prefix string matches
  • $in
  • $ne
  • $nin
  • everything else

For data types, we heavily demote booleans, which have very low entropy and are not useful to index. We also throw out relations/join tables, since no values are stored for these keys. We heavily promote geopoints since MongoDB won’t run a geo query without a geo index. Other data types are ranked by their expected entropy of the value space for the key. Data types in order of usefulness are:

  • array
  • pointers
  • date
  • string
  • number
  • other

We score each query according to the above metrics, and run ensureIndex() on the three top-scoring fields for each query. If the query includes a $or, we compute the top three indexes for each branch of the $or.

When we first started using smart indexing, all indexes were ensured inline with each API request. This created some unfortunate pile-on behavior any time a large app had schema or query pattern changes. Instead of ensuring the index in the request path, we now drop the indexing job in a queue where it is consumed by an indexer worker. This ensures that no more than one index can be generated at a time per replica set, which protects us from these pile-on effects.

Even the best indexing strategy can be defeated by suboptimal queries. Please see Abhishek’s primer from last week on how to write queries that aren’t terrible.

Charity Majors
April 1, 2014

Production vs Development Apps


It’s a very common use-case to have apps built on Parse that are both still in development and already in production. To help you make a clear distinction between Development Apps and Production Apps, we’re adding a switch in your app’s settings that lets you mark an app as a Production App. This will not only allow you to visually differentiate between your production apps and those still in development mode, but will in the future allow us to add security features that prevent you from accidentally editing content that is in production, or sending test push notifications to actual users (“Whoops!”).

We’re pretty excited about this, and hope you’ll find it useful!

Christophe Tauziet
March 31, 2014

FOX International Channels Uses Parse Push to Keep Audiences Engaged

FOX International Channels (FIC), part of 21st Century FOX (NewsCorp), is one of the top globalized TV businesses. Recognizing the need to create an online strategy to continue its growth, FIC set up departments in global regions focused on creating digital content. With Latin America emerging as the most developed region, Leonardo Rosales, Web Production Executive Director for Fox Latin American Channels, turned to Parse to power Push notifications for their mobile strategy.

FOX Sports Review on an Macbook on the left and Copa Bridgestone Libertadores on an iPhone 5 on the right.

Charged with developing mobile and web apps on all major platforms that will attract both new and existing users, Leonardo oversees the development of mobile apps for FIC brands. Beginning with a focus in Latin America, the team has developed two apps that use Parse Push to keep their audiences engaged.

Inspired by the success of a 2010 World Cup Facebook game built in partnership with Three Melons that had 17M installs in 6 months, the team adjusted to the new mobile market with Fox Sports Review. A soccer game built on Unity and available on Facebook (and coming to iOS and Android in April), the app lets you re-play the best goals in history.

The second app is a companion to Copa Bridgestone Libertadores, the most popular club soccer tournament in Latin America. Created after the team decided not to have a central sports app but to build one app for each tournament to get the best of organic traffic and appeal to specific segments, the app provides minute-by-minute coverage of games, news, videos, and galleries. One of the most exciting features, though, is that Leonardo’s team is integrating the live TV coverage with Parse-powered push notifications to enable TV audiences to participate in polls, with live results posted to TV using web services. Currently in beta testing, the team hopes to have the feature available by the first half of April, 2014.

According to Leonardo, if they hadn’t decided to use Parse for Push,

It would have taken a lot of time and resources for us to implement our own solution. Our developers would have to start from scratch: learn how to do it, best practices, etc. and then implement it. We don’t have the IT infrastructure, and don’t know how to build it, so it would have been a pain to put everything together. Parse is already up and running for a budget price.

Copa Bridgestone Libertadores is available to soccer fans now on iOS and Android, with over 600,000 installs to date. Fox Sports Review is now available on Facebook here and will be available on iOS and Android in April. The FOX International Channels and FOX Sports teams also have several more exciting Parse-powered apps on their road map over the next few months, so stay tuned for those as well!

Courtney Witmer
March 28, 2014

Writing Efficient Parse Queries

Any time you store objects on Parse, they get stored on a database. Usually, a database stores a bag of data on disk, and when you issue Parse queries it looks up the data and returns the matching objects. Since it doesn’t make sense for the database to look at all the data present in a particular Parse class for every query, the database uses something called an index. An index is a sorted list of items matching a given criteria. Indexes help because they allow the database to do an efficient search and return matching results without looking at all of the data. For the more algorithmically inclined, this is an O(log(n)) vs O(n) tradeoff. Indexes are typically smaller in size and fit in memory, resulting in faster lookups.

There are a couple of operations – $ne (Not Equal To) and $nin (Not In) which cannot be supported by indexes. When you run a query with a “Not Equal To” clause, the database has to look at all objects in the particular Parse class. Consider an example: we have a column “Color” in our Parse Class. The index helps us know which objects have “Color” blue, green and so on. When running the query:

 { "Color" : { "$ne" : "red" } }

The index is useless, as it can only tell which objects have a particular color. Instead, the database has to look at all the objects. In database language this is called a “Full Table Scan” and it causes your queries to get slower and slower as your database grows in size.

Luckily, most of the time a $ne query can be rewritten as a $in query. Instead of querying for the absence of values, you ask for values which match the rest of the column values. Doing this allows the database to use an index and your queries will be faster.

For example if the “User” object has a column called “State” which has values “SignedUp”, “Verified”, and “Invited”, the slow way to find all users who have used the app at least once would be to run the query:

 { "State" : { "$ne" : "Invited" } }

It would be faster to use the $in version of the query:

 { "State" : { "$in" : [ "SignedUp", "Verified" ] }

In a similar vein a $nin query is bad, too, as it also can’t use an index. You should always try to use the complimentary $in query. Building on the above example, if the “State” column had one more value, “Blocked”, to represent blocked users, a slow query to find active users would be:

 { "State" : { "$nin" : [ "Blocked", "Shadow" ] } }

Using a complimentary $in query will be always be faster:

 { "State" : { "$in" : [ "Active", "Verified" ] } }

We’re working hard here at Parse so that you don’t have to worry about indexes and databases, and knowing some of the tradeoffs in using the $ne, $nin operators goes a long way in making your app faster.

March 27, 2014

CyberAgent Uses Parse Push to Power Pashaoku Auction App

CyberAgent iTunes App Store screenshotsCyberAgent, Inc. is a leading online media and advertising company based in Tokyo, Japan. In addition to their media ventures, the company also develops social games and other apps, including Ameba, a popular Japanese blogging platform. CyberAgent came to Parse when they developed Pashaoku, a user-to-user auction service that became a subsidiary company, Pashaoku, Inc., in February of 2013.

Pashaoku (パシャオク) was designed with ease of use in mind, enabling users to create auction listings in less than 30 seconds. Optimized for smartphones, the app was developed based on the idea that all someone needs to post an auction is to snap a picture. In fact, the name says it all: “pasha” is the word for the “click” of a camera shutter, and “oku” is an abbreviation of the word for “auction.”

In addition to allowing people to create their own instant auctions, the company collaborates with celebrities to auction personal items and opportunities to participate in special events with them. For example, the chance to go on a triple-date with Japanese comedy trio “Panther” was recently auctioned off for ¥567,001 (about $5,600 USD).

The team working on Pashaoku turned to Parse when they started looking for a service to send mass push notifications to users on both iOS and Android. Parse’s Push services became the main draw for CyberAgent, who use it to send out targeted notifications to users. For example, when someone creates a new auction, a notification is sent to all of his or her followers.

In addition to push, Pashaoku also stores targeting data in Parse. App developer Caesar Wirth, an iOS and Android developer who worked on the iOS version of Pashaoku, explains that, “Since Parse is so flexible, it is easy to add or remove targeting criteria. We keep Parse synchronized with our own database, so everything is always up to date.” After using Parse in Pashaoku, Caesar continues:

I am a big fan of the data querying system and history log. We send pushes to certain subsets of users, and some of our queries can get a little complex. Parse handles it all. Afterwards, we can look back and see everything we sent, and to whom, so we can reproduce anything we want.

Parse provides such a stable and flexible infrastructure, that it would take many man hours to develop something internal. With the correct strategy, you could probably have something up and running within a matter of days as opposed to weeks. Even a free account provides many of the benefits.

With 520K+ downloads on iOS and 300K+ on Android, Pashaoku is still going strong long after its initial release. You can learn more about CyberAgent and the story behind its success here.

Courtney Witmer
March 26, 2014



RSS Feed Follow us Like us