The Punniest Parser

The Parse team dressed up for Halloween

Hi there! I’m Courtney, Parse’s Office Manager. I can’t talk to you about Pushes, Pulls, APIs or any of the exciting stuff that you usually read about here on Parse’s blog. But what I CAN do is give you a little more insight into the amazing people I get to work with every day.

There’s just something about the Parse team. They’re full of fun. They like to pun. They once did our morning stand-up meeting entirely in Haiku. When someone does something awesome, we do a dance or write him or her a song.

I won’t lie, as the only non-technical person in the office when I started, it’s not what I expected when I came to work in the tech industry. I thought it would be all coding, all the time.

But this team knows how to have fun and still crank out an amazing product, so with Halloween approaching, I knew I needed to come up with a way to celebrate that would incorporate the unique wonderfulness that is Parse. And so I introduce to you…

Parse’s (first annual?!) Punniest Parse Costume Competition!

We had Puck from Glee, a “.rar file,” a “law-suit,” an Apple Genius, a “dirty PFChild,” a “server,” a resque GOB, an Easter Island statue, and a pull request.

Happy Halloween from the Parse Team!

Courtney Witmer
October 31, 2012

Play Monster Mansion for a Frighteningly Good Time

To get in the spirit of Halloween today, we’d like to highlight the spooky and fun Parse-powered app, Monster Mansion. Monster Mansion was created by the team at Oceanside Interactive who are also responsible for MyDinos and several other great apps. In Monster Mansion, players build a hotel populated with classic monsters like bloody-thirsty vampires, ghastly ghouls and wild werewolves. Players can check-in each day to keep their monsters happy, haunt humans, and earn in-game currency that is spent customizing their scary mansion.

We sat down with James Cann and John Miller from Oceanside Interactive and and had a hauntingly great conversation about how Monster Mansion uses Parse to power all of the features of the app.

Where did the idea for Monster Mansion come from?

We wanted to create a flexible building management engine with a context that we thought would be interesting and different with monsters inspired by books, TV, comics, and movies.

How did Parse help to make Monster Mansion possible?

We have significantly reduced the overhead of our database cluster and found using the API greatly accelerated our client-server development effort. We have experienced a reduction in time to implement and debug new features letting us concentrate on game mechanics and content.

Can you tell me more about how you were able to decrease development time?

In a year-long development cycle, we would have spent a solid two months planning and supporting the infrastructure for Monster Mansion’s data store. We completely eliminated this effort by using Parse, which let us focus on the game and content.

What kind of growth is Monster Mansion experiencing?

We went from 15,000 to over 1 million API calls this past weekend and expect to see continued linear growth. So far, the Parse platform has performed very well.

What Parse features are used most in the game?

We are using Parse to push notification events for social features, in-game events, and user administration. We have moved all game development to Parse eliminating MySQL and Mongo in-house. We store configuration and user data in the cloud.

As a game development company, what has been the biggest benefit of using Parse?

The potential of scaling our game out to millions of users and continued focus on feature development without the overhead of managing the data infrastructure in-house.

Download Monster Mansion today in the App Store.

Ashley Smith
October 31, 2012

Fetching the User’s Current Location

Where am I? What am I surrounded by? How do I get where I want to go? With the advent of modern technology, existential questions like these can be easily answered – and, with the Parse SDK in hand, often in a mere handful of lines of code.

PFGeoPoint can now be leveraged to return the user’s current location, without having to manage your own CLLocationManager and delegate callbacks. With the newly added +geoPointForCurrentLocationInBackground:, you can work with the current user’s location directly as a PFGeoPoint:

[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error) {
    if (!error) {
        NSLog(@"User is currently at %f, %f", geoPoint.latitude, geoPoint.longitude);

        [[PFUser currentUser] setObject:geoPoint forKey:@"currentLocation"];
        [[PFUser currentUser] saveInBackground];
    }
}];

More information about our Geo functionality can be found in the iOS Guide.

Christine Yen
October 30, 2012

Pota-Toss Blends Zombie Potatoes with Location-Aware Levels for an Exciting New Gaming Experience

Pota-Toss is a stunning new Parse-powered game with location-aware levels, killer zombie potatoes, and social integration for playing your new favorite game against your favorite real-life opponents. Pota-Toss was created by Saborstudio, a Costa Rican based studio that specializes in developing innovative location-aware games for mobile devices. With all the mobile games on the market, the team at Saborstudio had to get innovative to make a game that was a standout in the mobile gaming world. Pota-Toss recognizes a player’s current GPS location and sets one of 100 custom levels from cities all around the world as your gaming location. With the backdrop being the closest city, Larry Potato, the game’s main character, must defend his home city from an evil gang of zombie potatoes, called Spuds. Using social integration with Facebook, you can play friends from across the world with each of you seeing your current, closest city as a backdrop. Pota-Toss received more than 71,000 downloads in its first week.

We sat down with Saborstudio CTO, Phillipe Casorla Sagot, and chatted with him about how Parse helped in the development of the wildly addictive Pota-Toss game.

Where did the idea for Pota-Toss come from?

My co-founder Jose Cayasoo had this idea about creating a multiplayer artillery game. At the time, people were playing Angry Birds a lot but there wasn’t a way to play with your friends. We proceeded to create a campaign in Kickstarter to validate the idea and see if people were really interested. We called this campaign our first minimum viable product and in the end it was a major success. We ended up collecting more than $14,000, making us part of the 5% of projects that were able to double the original goal.

If you had to name the most important benefit of using Parse as the backend for Pota-Toss, what would it be?

The biggest benefit of working with Parse is definitely speed. Parse gave us the opportunity to focus 90% of our time on creating a stunning game without worrying too much about server overload or security problems. The other 10% was just spent integrating with Parse. Thanks to Parse we were able not only to create an awesome game, but a metric-driven multiplayer platform where hundreds of users are playing from different locations all around the world.

What Parse features are used in Pota-Toss?

We are using ALL of the Parse framework features. Without Parse we couldn’t have built this game in 7 months with a team of just two guys; I am the only coder and my friend Jose is the only designer.

That is awesome! How are you using Parse Push?

The game is asynchronous, just like SongPop or DrawSomething, so users receive a push notification every time it’s their turn in a match. Also we have included a feature where we send a push notification every time a new friend from Facebook is playing. For example, if you have a friend named John who just downloaded the game, you will receive a notification such as: “John is now playing Pota-Toss. Challenge them NOW and earn some extra Potato Chips.”

What about Parse Social?

After completing the tutorial, users are able to log in using Parse or Facebook, which is all done using Parse. A user is the main entity in our game and we needed the ability to retrieve chips, current matches, and get a lot of data from Parse for each of the game’s users. With Parse Data together with Parse Social, we were able to achieve all of those things.

How does Pota-Toss use Parse Data?

Thanks to the Parse Data feature, we are able to download levels on demand. We have created a custom Mac Application for our design team so they can upload new level textures to the backend at any time without modifying the game.

I love the idea of location-aware levels. Can you tell us more about how you’re using Parse-powered geolocation?

We have attached a geo-point to every level in the backend so we can run queries against the current user position, which allows us to determine the top 5 levels nearest to the user.

We just launched Cloud Code less than 6 weeks ago so we’re excited that you’ve already incorporated it into Pota-Toss. Can you give us an overview of how Cloud Code is being used?

Absolutely. We are using Cloud Code to count user impressions for each of the paid advertising banners in each level. We believe iAds are annoying and intrusive and many users seem to agree with us, so we are integrating a new method of advertisement in Pota-Toss that is based on a real-world, GPS-based recipe for success.

You mentioned Parse allowed you to launch Pota-Toss much faster than originally anticipated. Do you have an idea of how much faster?

It would be almost impossible to develop our current platform in less than a year, especially with a team of two. We were able to launch the app in only 7 months with just one developer and one designer. Parse will continue to be our backend for a long time.

As a developer, what do you love most about Parse?

Parse tutorials are superb; you can’t deny they work a lot on that. It’s impossible to miss it. Another plus is the website – I love the design! Very clean and well done. Also, the integration is seamless. You can integrate your app with Parse in just 5 minutes, literally.

Today, Pota-Toss posted an infographic on their blog detailing their amazing growth trajectory boasting 4,032,271 potatoes thrown and 1,990,912 spuds killed! Pota-Toss continues to see rapid adoption of new users per day and with coverage on TheNextWeb, TechCrunch, Business Insider, CNN, and more, that growth doesn’t look like it will be slowing down any time soon. Download Pota-Toss in the App Store and let us know what you think.

Ashley Smith
October 29, 2012

App Spotlight: IVU Loto App

We’ve previously highlighted some of our customer’s Parse powered apps. Today, I’d like to talk about one of my own apps: IVU Loto App. It’s a results tracker for the sales tax lottery that takes place semiweekly in Puerto Rico, and it is using Parse as its backend.

A couple of years ago, the Puerto Rico government launched a sales tax lottery program, IVU Loto, with the goal of increasing sales tax collection. When a customer makes a taxable purchase, they receive a lottery ticket as part of their sales receipt. Each ticket grants you an entry into the semiweekly IVU Loto drawing for prizes ranging from $1,000 to $25,000. The idea is that customers will demand their receipts in order to increase their chances, and this in turn will increase sales tax collection as businesses need to report a transaction in order to generate an IVU Loto entry.

Tracking dozens of receipts per week can get unwieldy, so I decided to make the process easier for customers by designing a mobile app that would let them track each entry as they received them, as well as stay on top of lottery results. The app had a few requirements:

  • Users need quick and easy access to the latest results.
  • They should be able to look up past results.
  • Users want to track their receipts and be notified if they win the lottery.
  • New results should be delivered as soon as possible.
  • It should be available in both English and Spanish.

I’ve built mobile apps and their corresponding custom backends before, but this time I wanted to focus on the app itself. By using Parse, I did not need to worry about setting up servers, allowing me to get started building a great, beautiful app right away. Needless to say, I was able to ship the app in a fraction of the time it would have taken me had I needed to set up any servers beforehand.

Access to Latest & Historical Results

Each drawing is stored in a Drawing class. Individual results for each drawing are saved to a Result class, and each has a pointer to the drawing they belong to. The app uses the following PFQuery to make sure all users have access to the latest results.

Query Used to Display Latest Results

// Inner query to fetch non-expired Drawings
PFQuery *innerQuery = [PFQuery queryWithClassName:@"Drawing"];
[innerQuery whereKey:@"createdAt" greaterThanOrEqualTo:cutoffDate];

// Final query obtains all Results that belong to a current Drawing
PFQuery *query = [PFQuery queryWithClassName:@"Result"];
[query whereKey:@"drawing" matchesQuery:innerQuery];
[query includeKey:@"drawing"];
[query orderByDescending:@"createdAt"];
[query addDescendingOrder:@"prize"];

By adjusting the cutoff date, limit, and skip on the Result query, the app can show past results, too.

As lottery results become available, they are added to my Parse app using the REST API. By using Cloud Code beforeSave triggers, I can make sure that no duplicate results are added to my database. An afterSave trigger checks if any of the users have a winning ticket, and if they do, a push notification is sent from Cloud Code.

Receipt Tracking and Winner Notifications

The entries for the IVU Loto drawings consist of two pairs of five character alphanumeric strings. When users add their entries to the app, a beforeSave trigger validates the entry. This includes checking for the presence of a valid entry, making sure that the receipt is associated with the current user only, and checking if the user had previously added the same entry.

If the receipt is saved successfully, we use an afterSave trigger to check if this entry belongs to a drawing that has already occurred. If that’s the case, we send a push notification to the user to let them know about their winnings.

Send a Push Notification to this User

var query = new Parse.Query(Parse.Installation);
query.equalTo('user', Parse.User.current());

Parse.Push.send({
  where: query,
  data: {
    alert: "Your P4A2R-8S16E entry was drawn as winner for the $25,000 prize on October 22, 2012!"
  }
});

Localized New Results Notifications

When new drawing results are available, a push notification is sent to all users. Since the app is available in both English and Spanish, I need to make sure that the push notification is sent in the correct language. In order to do this, I track the user’s preferred language in their PFInstallation. Users can also opt out of these “new result” notifications, but they still want to receive a notification if they have a winner. This preference is also stored in their PFInstallation object. This makes it very easy to send a targeted push notification in the correct language to just those users who are interested in receiving these updates.

Send a Push Notification to Users in Their Preferred Language

var queryEnglish = new Parse.Query(Parse.Installation);
queryEnglish.equalTo('newResults', true);
queryEnglish.equalTo('language', 'en');

Parse.Push.send({
  where: queryEnglish,
  data: {
    alert: "New results for October 27, 2012 are now available."
  }
});

var querySpanish = new Parse.Query(Parse.Installation);
querySpanish.equalTo('newResults', true);
querySpanish.equalTo('language', 'es');
 
Parse.Push.send({
  where: querySpanish,
  data: {
    alert: "Los resultados para el 27 de octubre de 2012 ya están disponibles."
  }
});

As you can see, Parse has made my life as a developer very easy. With Cloud Code, I can guarantee that all data being saved is valid. My users are kept engaged and are automatically notified of any prizes they’ve won. They upload thousands of new receipts each day, but I can rest assured that my app can handle the load thanks to Parse.

IVU Loto App is available on the iTunes App Store.

Héctor Ramos
October 26, 2012

Parse Command Line Tools available for Windows

Today we announced a new SDK for Windows 8, and we are excited to see the great things our developers will build with it. Parse believes in a simple development process where developers can build connected apps without managing servers. Some apps still need server code, so we built Cloud Code to accomplish this complicated task with Parse’s signature simplicity.

One more (Windows 8) thing: our command line tools are now available for Windows as well. These tools will let you deploy Cloud Code from a Windows machine. Get the app here and check out our guide for more information. If you have any questions, check out our forums at parse.com/questions.

Thomas Bouldin
October 25, 2012

Introducing the Parse Windows 8 SDK

If you look outside your Windows in Redmond today, you’ll see more than just Seattle’s famous overcast skies–you’ll see the Parse Cloud approaching. Parse is always on the bleeding edge of what’s happening in the software development world, so alongside Microsoft’s Windows 8 announcement today, we are proud to introduce our very own Parse Windows 8 SDK.

With Windows 8, Microsoft has transformed its operating system into a powerful and beautiful mobile platform. As a developer you are empowered to build rich apps for their platform, and Parse makes building connected apps easy.

If you’re building your Windows 8 app using a .NET language like C# or Visual Basic, just install the Parse SDK using NuGet in Visual Studio, and you’ll have access to all of the power of Parse objects, files, cloud code, user authentication and management, role-based data access control, and queries. You can even use LINQ to access your data:

// Build a query
var query = from post in ParseObject.GetQuery("Post")
            where post["author"] == ParseUser.CurrentUser
            orderby post.CreatedAt descending
            select post;

// Retrieve the results
IEnumerable<ParseObject> postsByUser = await query.FindAsync();

Or, if you’re building an HTML and JavaScript Windows 8 application, you can use our JavaScript SDK to get up-and-running with Parse as your backend in minutes!

var query = new Parse.Query(BlogPost);
query.equalTo("author", Parse.User.current());
query.descending("createdAt");

query.find({
  success: function(postsByUser) {
    // The query succeeded
  },
  error: function(result, error) {
    // The query failed
  }
});

A number of Parse’s engineers have a Microsoft pedigree, with experience building core pieces of the Windows and .NET developer experiences. We’ve put a great deal of care into making development with Parse for Windows 8 as seamless and straightforward as possible, and we can’t wait for you to give it a try.

For more information, head over to our Windows Guide and Windows Quickstart or take a look at our sample app and start building your Windows 8 apps today!

David Poll
October 25, 2012

GitHub Login on Parse.com

Additional passwords are a pain. Many of our users already use GitHub to store their projects, and it’s exciting to be able to use existing tools to solve new problems. As a hat tip to our Octocat-loving potential users, you can now sign up and log in to Parse.com via your GitHub account. We’ve also polished our signup/login UI a bit, and added a shiny new login modal:

For users with existing Parse.com accounts, please continue to use your email/password combination to log in and access your apps – we’ll have a way to link existing accounts with GitHub accounts available soon.

Christine Yen
October 24, 2012

HTTP Requests and Other Awesome Cloud Code Enhancements

Since its launch, we have continued to add new features to Cloud Code. Cloud Code allows you to run custom app code in the Parse Cloud. We’d like to take some time now to highlight some of the new features like external HTTP requests and support for push.

General HTTP Requests

Cloud Code now allows sending of general HTTP requests which allows you to integrate with a third party service of your choice. For example, send an SMS with Twilio:

Parse.Cloud.httpRequest({
  method: "POST",
  url: "https://<account_sid>:<auth_token>@api.twilio.com/2010-04-01/Accounts/<account_sid>/SMS/Messages.json",
  body: {
     From:"+14085550693",
     To: "+14085551212",
     Body:"Hi, Parse can send SMS via Twilio!"
  }
});

Push

We’ve added push from Cloud Code, which can be done with:

Parse.Push.send({
  channels: [ "" ],
  data: {
    alert: "Cloud Code can send pushes!!!"
  }
});

After Save

We’ve added an after save hook which is as simple as doing:

Parse.Cloud.afterSave("ChatMessage", function(request) {
  Parse.Push.send({
    channels: [ request.object.get('room') ],
    data: {
      alert: request.object.get('message')
    }
  });
});

This will send a push all the users in a chat room when there is a new message.

Logging from Cloud Code

You can use console to print log messages to the Cloud Code log by doing:

console.log('My awesome log message');

Modules

Now, you can split your code up into multiple files and load modules using require.

cloud/names.js

var coolNames = ['Ralph', 'Skippy', 'Chip', 'Ned', 'Scooter'];
exports.isACoolName = function(name) {
  return coolNames.indexOf(name) !== -1;
}

cloud/main.js

var coolNames = require('cloud/names.js');
coolNames.isCoolName('Skippy');

For more information and documentation on these features of Cloud Code, take look at Cloud Code Guide. If you have any feedback or questions, let us know at Help.

Shyam Jayaraman
October 23, 2012

All About Push

Parse Push

Parse developers love the push notifications feature of our platform. It’s great for keeping users engaged and preventing your app from becoming irrelevant. We’ve put a lot of effort into releasing innovative push features like advanced targeting, scheduled pushes and seamless cross platform compatibility.

To make sure you can get the most out of these features, we are releasing today a brand new documentation page just for push. This guide combines the push information for all of our supported platform, so you’ll always know where to look when you have a question.

We are committed to creating an amazing developer experience, and great documentation is a key part of this. We’ll be working to continually improve upon what we have, so if you have any suggestions or comments, please get in touch.

Mattieu Gamache-Asselin
October 22, 2012

Archives

Categories

RSS Feed Follow us Like us