Archive for the ‘Windows Phone 7’ Category

Still Alive and Kicking!

Wednesday, June 22nd, 2011

Its been a while since I have posted anything, just wanted to let you know that I am still alive and kicking.  Working very hard on the next application and its coming along nicely.  It is the largest application that Elucidsoft will have to offer up to this point and I am very excited about it.  I hope to have it on the market by August and hopefully sooner.  The first release of the application will be for Android, with Windows Phone to follow shortly after, to be followed up by iPhone and iPad versions.  I plan to pull this cross platform deployment to all future applications we release!

So keep an eye out, I will post something as soon as its available.

Mobile Platforms and Vertical Markets

Monday, April 25th, 2011

Let’s face it, mobile application development is targeted to a very small vertical market. Each platform being its own unique and distinct vertical market with some very minor horizontal growth.  If you focus on a single platform, you are not only limiting your applications growth to that market, but you are limiting your companies.  So how do you expand horizontally, without incurring massive expense?  Developing for multiple platforms is expensive, and time consuming.  Each platform has its own language, its own development tools, and their own unique constraints. The three platforms that IMO are worth discussing and targeting are Android, iOS, and Windows Phone 7.

For instance on Android you have to handle several different types of handsets, each with a unique screen type and resolution.   Each device may have some hardware components, while others may not, you may have a lot of memory on one and very little on the other, etc.  Android is also developed using Java with a custom framework.

The iOS devices on the other hand are an entirely different spectrum and at first glance bare nearly no similarities.  The iPhone has almost nearly the same specifications for all models, you know exactly what you are designing against.  iOS development is done using Objective-C with a custom framework, and you MUST have an Apple computer to do any kind of iOS development.

Next is Windows Phone 7 (WP7), which has a strong similarity to the way Android is handled but with key differences.  When Microsoft developed WP7 they setup a set of strict criteria that each WP7 handset must adhere to as a minimum specification.  So while you may not know exactly what you are targeting, you do know the minimum spec and you can develop against that in the very least.  WP7 development is done using the .NET Framework, with a custom framework for the phone.

So how do you target all three, without re-writing your code?  There are two solutions that I have found, and one that IMO is far superior and preferred.

The first option is to use Appcelerator Titanium, its free and supports iPhone, iPad, and Android.  I would imagine when WP7 releases IE9 with HTML 5 support they may also be able to support WP7, but this speculation on my part.  The way Titanium works is you develop your app using JavaScript and a custom JavaScript Framework that they have developed.  You then compile your JavaScript using a custom compiler they have designed, it will then output a native Objective-C application (iPhone, iPad) from your JavaScript, or a native Java application (Android).  I have several problems with this, first you are developing everything in JavaScript.

It is very difficult to develop a rich application entirely in JavaScript, it is not very object oriented and just a pain.  Also based on my experience, their framework has several bugs and if you write the app for iPhone and expect it to work on Android as they advertise it doesn’t always turn out that way and you may end up tweaking things.

The second option, and the preferred in my opinion is to use Mono.  Mono is a project by Novell to develop an open source version of .NET that is nearly 100% compatible with Microsoft .NET.  Mono has released MonoTouch which is for iPad, iPhone and iPod; and Mono Android which is for Android.  The beauty of this is that you write a Windows Phone 7 app in native code, take that code and it will work with both MonoTouch and Mono Android with some exceptions.

The exception here is that you will need to build a separate UI for each platform, but the rest of your code such as the Data Layer, Business Layer, Domain Model, etc. can be reused. Another caveat is that they are not free, they cost quite a bit of money. But the reason I think this option is superior, especially if you are a .NET developer is that you get to work with the .NET Framework.  It is object oriented, is very feature rich, and you can bring in already built frameworks in most cases to use in your project.  It has things like OData, Serialization, WebServices, out of the box.

As you can see there is no perfect option, each one has its pros and cons.  But if you plan to succeed, you must target multiple platforms, try to spread your application horizontally across multiple verticals.  If you do this you can potentially increase your target audience from 2 million to 200 million.

You may be thinking some developers have made huge money and only targeted one platform, you may have read about them in the news in fact!  But these successes are extremely rare, so rare that they are published in the news, otherwise it wouldn’t be newsworthy material.  You have about the same odds of having that kind of success as winning the lottery, its far and few between.  But by being smart, increasing your target audience, you can still do very well!

BlackOut 1.1

Tuesday, February 15th, 2011

BlackOut 1.1 was sent to Microsoft earlier today, just have to wait for it to get approved.  I wanted to get theme support out as soon as possible, so a lot of the new features mentioned in the previous post will trickle out in the next coming updates.  All of the bug fixes are in this release, and full theme support.  Expect another release shortly…

I will also be working to get the product page up for BlackOut, so expect it to show up under products soon as well!

BlackOut Theme Support

Wednesday, February 9th, 2011

Been working on the blackout theme support. I had to do some modifications to some of the storyboard animations on the board since they didn’t play well together.  Overall, I think I will release this next version with three themes, and build out further from that point.

Aqua Theme

The first them is Aqua —  Aqua is my own twist on an Apple look, it has some nice gradients, a  bit of fireworks in the background and some nice gloss on it.  I did keep it pretty dark, and muted it down a bit though so it doesn’t stick out too much on Windows Phone, it still fits right in if you ask me and it looks great!  I might even make it the default theme…

LED Theme

The second theme is LED — This one kind of borrows from the old school marquees where they had a bunch of LED bulbs and would scroll text in front of restaurants.  It’s very basic, but has just enough texture to it to make it stand out.

Metro Theme

The third theme is Metro — This is the current existing theme, which is basically no theme at all.  It’s the flat 2-d squares that we have all come to know and love about Windows Phone!

As a bonus, every single theme will still let you change the color to your choosing the same as before.  The color will blend into your theme and what you get is just absolutely stunning.

If you have any theme requests, please post them in the comments below!  I am open to any suggestions, even feedback on the existing themes, to bright, to dark, etc.

BlackOut Released!!

Sunday, February 6th, 2011

BlackOut v1.0 is now available for Windows Phone 7 on the marketplace. You can download it now for free!  BlackOut is a lights off game for Windows Phone 7.

The following is a list of features in the current version:

Version 1.0

- 338 Custom Tailored Levels
- Intelligent hint system to help you along
- Metro theme with customizable colors
- Fast and stylish animations to transform the board
- Score system to keep track of your scores

Now that version 1.0 is out, I have begun working on version 1.1 features.  Below is a list of the features that are slated for version 1.1:

Version 1.1

- Theme support
- Custom Level Designer
- Random Level Generator
- Leader Boards
- Various bug fixes

Theme Support

In addition to being able to select a color for your board, you will also be able to select a theme!  Below is an example of the aqua theme that is already complete and working in the game.

Custom Level Designer

The level designer is the same level designer that was used to create all 338 levels. It is being fixed up so it can be used by the public, currently it is not very user friendly and needs some UI work done on it.

The custom level designer will tell you how difficult the level is going to be, whether the level has a winnable solution, will allow visualization of hint patterns, will check for duplicate boards, and offers you the option to randomly generate a board using the random level generator.

At some point I would like to be able to build support so people can build their own levels, and share them online with other people, but for now that is in the future.

Random Level Generator

The random level generator will build unique and random levels. Currently when you get to the last level in the game (338), it will go back to level 1.  In version 1.1, it will ask if you would like to continue using the random level generator.  The random level generator will always builds a board that has a solution, and it will build up 300 unique boards back to back without ever repeating a previous design.  If you were to play a game using the random level generator, you are guaranteed at minimum 300 unique levels.

Leader Boards

The leader boards will store your high scores in our database so you can compete against other people from around the world.  I am unsure if this will make it into version 1.1 or if it will be in 1.2 at the moment. I am still working out the details.

Bug Fixes

- Fixed a bug where the board would flicker– this is only noticeable if you are using the lighter colors for your board.  It can be very distracting though and this has been resolved!
- Replaced the Microsoft ads with a new ad provider.  This one is a bit better and less resource intensive.  For whatever reason, the Microsoft one would cause an occasional hiccup in the game animations. This one does not so everything seems much more smooth.  Additionally, this one is supported around the world so it will show up in countries outside of the United States.
- High Scores will now only update if the previous score was worse than your new score. This was broken and the score would always update in the past. Also renamed the screen from “Scores” to “High Scores”
- Drastically improved the help screen based on user feedback– it now offers substantially better verbiage.  It also offers reference guidance from around the web on strategies for playing the game.

Leader Boards for Hanoi

Tuesday, February 1st, 2011

When I originally released Hanoi in September I promised world wide high scores as coming soon!  Well I am glad to let you know they are nearly done, it’s not nearly as easy as it sounds!  I had to setup my own server side database, web services, and high score system to get all of this to work.

I also would be introducing an element of instability into the game where it will now be reaching out onto the network to fetch data, there are lots of use cases around this where the server could be down for maintenance, the internet connection on the phone could be not working, airplane mode, etc.  So I have to take that into consideration when developing the platform, with that said, here is a screen shot of how its going to look on the game.  The server side piece is done, the client side piece is done, and I am working on finishing up some testing and some final details.

I should have the final push out very soon!  The lite version will have read only Leader Boards, while the Full Version will let you participate in the leader boards.

The below shot contains test data:

Sneak Peek at Next WP7 Game and the future…

Tuesday, December 28th, 2010

Been working very hard on a new Windows Phone 7 game, and at the same time I have pushed two new versions of Hanoi.  I have to admit that I am not doing a very good job at keeping this blog in the loop on what is going on with everything.  With that said, I am going to make 2011 my new attempt at trying to keep things more updated.

To the left is a sneak peek at the new game, it should be out very shortly.  Its about 75% completed, its fully functional, I only need to add some polish to the main menu, etc. If you can guess what it is from that then you definitely get some brownie points! ;)

This will be the last game that I write for a bit, I am going to focus on productivity and business applications for Windows Phone 7  at which point I may switch back and forth between the two of them.  I am also looking into Appcelerator to do some Android and iPhone work.  I have done Objective-C iPhone work in the past, but its pretty time consuming and I have been an Appcelerator beta tester for as before the company even existed but never really used any of their products.

Windows Phone 7 User Agents

Friday, November 19th, 2010

I ran into an issue where I needed to check for a Windows Phone 7 user agent, turns out however, each device has its own unique user agent.  Here are the following user agents I have been able to muster up so far, as of 03/24/2011:

Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) HTC;WP7
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; Microsoft Corporation; CEPC)
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) LG;LG-E900
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; LG; GW910)
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) SAMSUNG;SGH-i707
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; SAMSUNG; Taylor)
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; TOSHIBA; TSUNAGI)
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; SAMSUNG; SGH-i917)
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; LG; GW910)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; XBLWP7; ZuneWP7)
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) LG;LG-E900h)
Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; LG; LG-E900)

If you find any additional ones, post in the comments and I will add it!

Update: For Mango devices and for best practices around using the User Agent string from Windows Phone 7 please read the following Blog post from Microsoft.

WP7 Lessons Learned Part 1: Using IsTrial() Properly

Friday, November 12th, 2010

If you are developing for Windows Phone 7, and planning on publishing to the marketplace it is a good idea to support a trial mode of your product.  You will get a much wider audience if you support trial than if you don’t, Microsoft themselves said they found it increased sales and drove further demand.  In this post I am going to discuss how I went about implementing IsTrial following the Microsoft best practices, how I setup my development environment to make it extremely easy to switch between testing my game in trial mode and paid mode and other best practices to follow.

First and foremost, when using IsTrial() you should be aware of the Microsoft best practices as follows are some generalized ones:

  • Do not rely on usage time limited trials to protect your application’s value.
    Typically, it is best to protect the value of your full mode application by limiting trial access to key code paths. A user may uninstall and retry an application without restriction so a trial design that offers full mode behavior for a limited time provides only inconvenience as a barrier to reuse.
  • Cache license state if you check trial state frequently.
    Note that the IsTrial() and the Guide.IsTrialMode methods are designed to be event-driven. A typical call takes approximately 60 milliseconds or more.
  • Check the IsTrial() state when your application loads or resumes.
    You can avoid some potential trial design flaws especially if you cache the IsTrial() state.
  • Provide a way for users to buy your trial application before the end-of-trial.
  • Make sure that you help users understand why they want to buy your application, perhaps, by implementing your trial limit at a point in the application where they will naturally want more.
    For example, let users experience the first level of game play and require them to purchase the application to play higher levels, retain points, or to connect to a gaming service.

See the Microsoft site for more details.

One of the most important things to pay attention to here is where they state you should “Cache the IsTrial() state..”, since each call to IsTrial() could take up to 60 milliseconds if you call this in a loop or if you call this method often it could potentially affect performance of your application.  It may also cause your application to fail certification if they later enforce restrictions on calling this method a number of times.

For instance in my applicaiton Hanoi, I call IsTrial() one time on startup, and one time on resume.  That’s it, the rest of the time I am reading a cached value and I have found this to be extremely useful.  Here is how I have implemented my version of a Cached version IsTrial().

Here is the following code snippet for how to set it up in your App.cs:

public partial class App : Application    {
public static bool IsTrial = true;

private static void LoadIsTrial()
{
IsTrial = new LicenseInformation().IsTrial();

#if DEBUG_TRIAL
IsTrial = true;
#endif
}

private void Application_Launching(object sender, LaunchingEventArgs e)
{
LoadIsTrial();
}

private void Application_Activated(object sender, ActivatedEventArgs e)
{
LoadIsTrial();
}
}

Now in my opinion, this is very elegant because to access the cached variable all you need to do is App.IsTrial and you are accessing the cached version of IsTrial instead of calling the method, and you are guaranteed to have an up to date value.  Next as you may have noticed is I have some #if #endif statements in their, which is what makes debugging this a breeze, also note that when this gets compiled in release mode anything inside those lines will get optimized out of the final code, so theres no chance it will ever run.  I also assumed the IsTrial cached version is equal to True, I do this to play it safe in the event that something does go wrong the user will get the benefit of the doubt.

Below is how to setup Visual Studio so you can easily switch between Trial and Paid:

Note: If you are walking through you may notice I have already setup mine called “Debug_Trial”, just ignore that and follow along with the screen shots.

The first thing you need to do is open up the Configuration Manager in Visual Studio, so click on the drop down where it says “Debug” or “Release” and click “Configuration Manager”

Next, in the configuration manager there is another drop down listing all of the Active Solution Configurations, click on “<New…>”

Next, change the “Copy settings from:” drop down to “Debug” or “Release” whichever one you are creating.  If you are creating a profile to test IsTrial in debug mode than select debug and vice versa, then give it a name. I chose Debug_Trial.

Last but least, since this probably the most important step.  Go to the properties of your project, click the “Configuration” drop down and select the configuration you just created.  Then paste into the “Conditional compilation symbols” box “DEBUG_TRIAL” as it appears above, make sure there is a space between SILVERLIGHT and no leading space.

Now when you need to test your Trial mode, just go to the configuration menu select the “Debug_Trial” and then hit F5 or click Run.  If you want to test the paid, just change it to “Debug” and do the same.  This is the easiest way to implement this that I have found.  Requires nearly zero code, and once you have this setup you never have to touch it again!

Hanoi for WP7 Final Release

Tuesday, October 12th, 2010

After a lot of work, and still more work work down the road the final release of Towers of Hanoi is nearly complete!  A ton of new features have been added and I have a lot of features planned for future releases, I was going to try and submit early into the early access program that Microsoft is offering but I recently decided to go ahead and add the next wave of features to it for final release!

So what will Hanoi have for its final release?

  • 50+ high definition professional backgrounds
  • Theme support for the backgrounds so you can display Winter or Summer or both types of imagery
  • Rich settings support so you can control exactly how you want the game to work, you can turn off the toolbar, adjust how often the background rotates, disable sounds, etc.
  • High definition ambient background music (can be disabled in settings)
  • Speed Hanoi which can be enabled in settings (disabled by default), which allows you to tap the disc and then tap the destination instead of having to drag it.  This is for those who are trying to get the quickest times possible!
  • Time Trials with count down timer for each level so you can best your previous times
  • Local High Scores
  • Ability to select which level you want to play

It will be available for $0.99 USD and will have a Trial Mode, the trial version will be limited to basics.

Trial Version

  • 7 Levels (7 discs)
  • 7 high definition backgrounds (will not rotate during levels, only 1 per level)
  • Local high scores
  • Can not select level to play, must progress from each level

Future Versions

  • Worldwide High Scores so you can compete with other people from around the world
  • Profiles so you can setup different game styles such as “Relaxing” and “Competitive”
  • Different styles and colors of discs and shelves to choose such as marble or metal materials
  • Import your own photos to use as background images, and import your own sounds to use for background music

I will be posting a new video, and screen shots of everything very soon as these new additions progress so keep in touch!