Showing posts with label Technology. Show all posts
Showing posts with label Technology. Show all posts

Wednesday, July 31, 2013

Google Play Games App Overview


Last Wednesday, Google released the Google Play Games App.  According to Google:  "[it's] is the easiest way for you to discover new games, track achievements and scores, and play with friends around the world."

What I really enjoy about the app is the ability to easily see all of the games that I currently have installed that include the Game Play Services.  Previously you basically had to just look at the developer's release notes to find out if they had incorporated Game Services.

Furthermore, the release of this app is definitely an opportunity for developers who may have been sitting on the fence on whether they should give the Game Services a try.  You essentially get free exposure for your game by integrating with Google's service.  This could also really drive engagement, as each game the user plays is displayed prominently with a badge showing the current number of achievements they have won.

The interface is very simple and clean.  You have several pathways to discovering new games and new people for your Google+ circles.  Have you downloaded the new Google Play Games app yet?  What are your first impressions? Leave comments below.

Wednesday, June 19, 2013

[Android Tips]: Play Store 'staged rollouts' with Google Analytics

Recently the Google Play Store has added the ability for developers to release a new version of their application's apk progressively by means of staged rollouts.  According to Google this allows you to "get feedback on your new app or app update early in its development and make sure your users are happy with the results."  With the release of the latest version of Word Crank, our flagship game, we decided to take advantage of this new feature.

Staged Rollouts


We released version 1.5.0 of our application to 20% of users initially and then monitored the results in Google Analytics.  In order to distinguish the engagement of the users on the latest version of the app from the others, we created two new custom segments in our primary Dashboard view.  The first segment included all users with version 1.5.0 of the application and the other segment included all other versions of the application.

Custom Segments

 

Once these segments were created we monitored the statistics for a few days and then gradually increased the percentage of rollout to 100%.  This is an extremely useful tool in making sure your new release increases user engagement and the desired traffic goals of your application.

Have you tried staged rollouts?  Leave a comment below.

Tuesday, January 15, 2013

Creating An Elastic Beanstalk Application with AWS

In experimenting with new technologies and a possible server infrastructure for some of our future products, I came across the Elastic Beanstalk offering of Amazon AWS. Essentially, Elastic Beanstalk takes the guess work out of setting up a Cloud-based application environment.  According to Amazon,
"You simply upload your application, and AWS Elastic Beanstalk automatically handles the details of capacity provisioning, load balancing, scaling, and application health monitoring."

Elastic Beanstalk supports applications developed in Java, PHP, .NET, Python, and Ruby. To that end, I wanted to share through a series of screen shots how simple it is to get an application up and running.

Once you choose the type of application server that you want to use, in this case I chose Tomcat 7, you are presented with the following screen:

AWS Elastic Beanstalk 1

It takes a few minutes for your application stack to be created. I would recommend updating the notification settings to your personal email address.  If your application server becomes unhealthy or there are upcoming events that may affect your RDS instance, etc, you will be notified via email.  Next you just click on "Upload New Version" and fill out some very basic information, choose your war file and Amazon does the rest.

AWS Elastic Beanstalk 2

Within a few minutes you have your very own application deployed in the "Cloud"! For testing purposes I created a simple Hello World application using Spring MVC.

Hello_World_Beanstalk

Have you tried Elastic Beanstalk? Did it work for your needs? Leave comments below.

Monday, October 8, 2012

Game Development: Using Google Analytics to track user flow

Recently we have begun to take advantage of the flow visualizations available from Google Analytics for analyzing user behavior in Word Crank.



What is a Flow Report?
"Flow Reports in Google Analytics illustrate the paths visitors take through your website...In one graphic, you can see how visitors enter, engage, and exit your site. " -- Google Analytics

One aspect of these diagrams that I especially appreciate is the ability to compare two different time frames and see how the user flow differs.  I really recommend this if you include a new feature in your application and want to see what impact it has on user behavior.

How to Compare Two Dates:

  1. Select Compare to Past

  2. Choose a second date range

  3. Choose similar time periods ( full months or weeks )




Happy flow reporting!

Wednesday, August 8, 2012

Gimmie AR

You’re moving to a new place and are concerned that your furniture won’t fit.  That king size sleigh bed that you purchased and just can’t live without now seems to eclipse the space of your bedroom that reminds you more of a dorm minus the smell of stale pizza.

Instead of going for your measuring tape while crying inside over leaving behind a bed the size of your first car, you whip out your phone confident that if it’s physically possible, you’ll bring all your items.

With a simple scan of your mobile device around your room you’re able to take accurate measurements, place furniture, and get a 3D rendering of what your room will look like with all of your actual furniture.

In the nutshell, this illustrates what augmented reality is.

[caption id="attachment_297" align="alignright" width="150"] An example of Augmented Reality[/caption]

For the analytical mind, it can be defined as a live, direct or indirect, view of a physical, real-world environment whose elements are augmented by computer-generated sensory input such as sound, video, graphics or GPS data.

The abridged version - a view of reality (what you see) modified (augmented) by computer generation.

Augmented Reality “AR” has been around for years although many aren’t acquainted with its application.  Hollywood has been using the technology in the creation of countless movies.  What use to take millions of dollars and months of work can now be done with a computer and just a few minutes!

You may not be familiar with augmented reality but you’ve probably heard of its counterpart, virtual reality.  Difference being virtual reality replaces what you actually see, while augmented reality enhances it.  This technology will change how we view the entire world. 

Envision a world where a surgeon has at their disposal their patient’s vital signs and full medical records.

Or a navigation system that goes beyond providing just directions but gives information on weather, terrain and even traffic patterns all on your windshield.

No longer will your business card only encompass your contact information, but now can include a 3D reproduction of your product or even a video of services offered.

AR is not some gimmicky technology like “flying cars of the future” but is already being implemented by some of the top companies in the world.

Phones with the Android and IOS operating systems already contain applications that feature AR in a more embryonic version.

We have truly only scratched the surface of what may be the next revolution in technology.

Using Twitter Search Results for #babies

Our newest project Budding Baby, includes a tab with Twitter comments from the public that contains this hashtag, #babies. Not surprisingly, when you perform a generic Twitter search about babies almost anything could come back and does.  For instance, I just performed a search using the following:

[code]http://search.twitter.com/search.json?q=%23babies[/code]

Here is one of the many results:
"U will *neva knw until *dere* is a tragedy..eii so old people also cry *lyk* #babies"

Now that's not quite what we were going for, and that tweet really isn't very positive either.  So what can we do?

Twitter to the rescue...the Search API allows you to append an extra parameter to your query to filter out negative tweets. Wonderful!  So if I run the query again, this time using the "smiley face" parameter, I get much happier tweets.

Here is the new search query:

[code]http://search.twitter.com/search.json?q=%23babies%20:)[/code]

Much happier results:
"baby love. :) #babies #cute #love #life #motherhood http://t.co/mnhrqmlL"

Have you worked with the Twitter Search API?  Leave comments below.

Wednesday, June 27, 2012

Using the Android Monkey tool

Android comes with a command-line tool (Monkey) that allows you to stress-test your application.  Monkey generates some random user events and will stop and report any errors that it encounters. It is very useful in helping to flesh out some not so obvious bugs that could be lurking in your application.  Below is an example of how we used it to test one of our applications under development.


cmd> adb shell monkey -p com.sivart.buddingbaby -v 200


Results:
:Monkey: seed=0 count=200
:AllowPackage: com.sivart.buddingbaby
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
// 0: 15.0%
// 1: 10.0%
// 2: 15.0%
// 3: 25.0%
// 4: 15.0%
// 5: 2.0%
// 6: 2.0%
// 7: 1.0%
// 8: 15.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=com.sivart.buddingbaby/.SplashScreenActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.sivart.buddingbaby/.SplashScreenActivity } in package com.sivart.buddingbaby
:Sending Pointer ACTION_MOVE x=-4.0 y=2.0
:Sending Pointer ACTION_UP x=0.0 y=0.0
// activityResuming(com.android.launcher)
// Rejecting resume of package com.android.launcher
:Sending Pointer ACTION_DOWN x=47.0 y=496.0
:Sending Pointer ACTION_UP x=29.0 y=503.0
:Sending Pointer ACTION_DOWN x=255.0 y=143.0
:Sending Pointer ACTION_UP x=255.0 y=143.0
:Sending Pointer ACTION_DOWN x=295.0 y=659.0
:Sending Pointer ACTION_UP x=290.0 y=649.0
:Sending Pointer ACTION_MOVE x=-5.0 y=3.0
:Sending Pointer ACTION_MOVE x=0.0 y=-5.0
// Rejecting start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] cmp=com.android.launcher/com.android.launcher2.Launcher } in package com.android.launcher
:Sending Pointer ACTION_DOWN x=74.0 y=803.0
:Sending Pointer ACTION_UP x=74.0 y=803.0
:Sending Pointer ACTION_MOVE x=3.0 y=-2.0
:Sending Pointer ACTION_UP x=0.0 y=0.0
:Sending Pointer ACTION_MOVE x=-4.0 y=2.0
//[calendar_time:2012-06-22 22:19:07.777 system_uptime:307227]
// Sending event #100
:Sending Pointer ACTION_MOVE x=4.0 y=2.0
:Sending Pointer ACTION_DOWN x=309.0 y=694.0
:Sending Pointer ACTION_UP x=322.0 y=694.0
:Sending Pointer ACTION_MOVE x=0.0 y=-1.0
:Sending Pointer ACTION_DOWN x=294.0 y=319.0
:Sending Pointer ACTION_UP x=294.0 y=319.0
:Sending Pointer ACTION_DOWN x=118.0 y=497.0
:Sending Pointer ACTION_UP x=119.0 y=493.0
:Sending Pointer ACTION_DOWN x=137.0 y=284.0
:Sending Pointer ACTION_UP x=124.0 y=295.0
:Sending Pointer ACTION_DOWN x=258.0 y=403.0
// Rejecting start of Intent { act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity } in package android
:Sending Pointer ACTION_UP x=273.0 y=403.0
:Sending Pointer ACTION_MOVE x=-5.0 y=-5.0
// Rejecting start of Intent { act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity } in package android
Events injected: 200
Dropped: keys=0 pointers=0 trackballs=0 flips=0
## Network stats: elapsed time=6268ms (6268ms mobile, 0ms wifi, 0ms not connected)
// Monkey finished


Have you used Monkey successfully?  Leave a comment below to share your results.

Sunday, April 22, 2012

Adding a Application Rating Dialog to your Android Game

UPDATE: Also get users to recommend your app via Google+

In order to increase the number of engaged users who were rating the Android version of Word Crank, we used a small piece of code from Android Snippets that shows a dialog to the user after a number of predefined uses to rate your Application. What were the results?

There were 0.2 App Ratings/day previous to adding the App Rater Dialog, after adding the App Rater dialog we went to 0.33 App Ratings/day.  That is equivalent to a 65% increase in user app ratings by making such a small change.  We felt that this was an important change as user ratings can help increase your placement in the Android Market.  Also, we were hoping to get more positive ratings as the dialog only appears after a user has played the game at least 3 times.

So why not give it a try in your game?  Let us know your results in the comments below.

Monday, March 5, 2012

Android Market Publisher Statistics Gets an Update

Last Thursday when logging into my Publisher account on the Android Market, I was pleasantly surprised to find out that Google had updated the available statistics.  Previously, the available data was very limited; focusing primarily on Active Device Installs.

The new statistics page now exposes the number of daily uninstalls, active installs, and user installs.  It also provides a comparison of your application's numbers versus other apps in your same category.  This additional information was very useful in seeing how Word Crank stacked up to other apps in the Brain and Puzzle category.



Word Crank Daily Installs



Word Crank Daily Installs by Version



Word Crank Installs Compared to Other Brain and Puzzle Apps

Have you found the new format useful?  Leave a comment below.

Tuesday, January 24, 2012

Adding GameFeed to your OpenFeint Enabled Cocos2d App

In order for us to add the new GameFeed feature of OpenFeint to our Word Crank app on iOS we needed to upgrade to the latest version of OpenFeint, version 2.12.5.  After a few issues with linking errors we were finally running with the latest and greatest that OpenFeint has to offer. Complete instructions for upgrading are included here.

Next we wanted to include the GameFeed component, but only on the home screen.  We used a similar approach to how we included AdMob in the free version.  Some code snippets are included below to help others.

 

[sourcecode language="objc"]
-(id) init
{
if ( (self=[super init]) ) {

CGSize s = [[CCDirector sharedDirector] winSize];

controller = [[RootViewController alloc] init];
controller.view.frame = CGRectMake(0,0,s.width,s.height);

gameFeed = [OFGameFeedView gameFeedView];

[controller.view addSubview:gameFeed];
[[[CCDirector sharedDirector] openGLView]addSubview : controller.view];
}

return self;
}

- (void) dealloc
{
[controller.view removeFromSuperview];
[controller release];

[super dealloc];
}
[/sourcecode]

Do you know a different way to do it? Leave a comment below.