BlogBlog

Posts tagged with: Windows Phone

Stirling Birthday to be Featured in the Windows Phone Store on September 23rd

Sunday, September 22, 2013 2:42 PM

01.WVGAMy newest Windows Phone app, Stirling Birthday, was selected by Microsoft to be featured in the Windows Phone Store on Monday, September 23 in Andorra, Armenia, Armenia (English), Bosnia and Herzegovina, Bosnia and Herzegovina (Serbian (Latin)), Cyprus, Georgia, Japan, Liechtenstein, Macao SAR, Madagascar, Marshall Islands, Mauritius, Micronesia, Myanmar, Nauru, Palau, Samoa, Sri Lanka, Timor-Leste, Tonga, Uganda, Vanuatu (French) for all phones, Austria, Botswana, Bulgaria, Estonia, Ethiopia, Fiji, Greece, Hong Kong SAR, Hong Kong SAR (English), Hungary, Latvia, Lesotho, Lithuania, Macedonia, FYRO (Macedonian), Malta, Serbia, Singapore, Swaziland, Taiwan, Thailand, Tuvalu, Vietnam for all non-Nokia phones, and Belarus, Bhutan, Cambodia, Faroe Islands, Grenada, Kenya, Korea (south), Malawi, Montenegro, Montenegro (Serbian (Latin)), Nepal, Papua New Guinea, Rwanda, Seychelles (French) for Nokia phones.

The criteria Microsoft uses for these selections are:

  • Functionality
    • Strong performance and stability
    • Intuitive
    • Easy to navigate without instructions
  • Utility
    • Drives repeated and consistent use
    • Originality and innovation
    • Strong visual impact
  • Enjoyment
    • "Make your users say 'wow'"
    • Meaningful use of Windows Phone design features
    • Apps that take advantage of cross-platform synergy for platforms like Windows Phone, Windows 8, SkyDrive, etc...

This is the second time I’ve had an app selected to be featured and it is definitely an honor. Check out Stirling Birthday in the Windows Phone Store!

Windows Phone

 
By: shane
Comments

Comments

Be the first to comment on this post

Stirling Birthday Released!

Wednesday, September 11, 2013 4:20 AM

Download Stirling Birthday in Windows Phone Marketplace NowMy third Windows Phone application, Stirling Birthday, has just been published to the Windows Phone store! The app displays your friends' upcoming birthdays on a beautiful live tile. It is unlike any other app in the store in that it shows the profile photo of your next friend to have a birthday on the live tile.

Features:

  • Full support for all Windows Phone 8 tile sizes
  • Call, Text, or Email birthday greetings from the app
  • Quickly see all birthdays upcoming in the next month, birthdays from the previous month, and all birthdays for all of your contacts.
  • Call, Text, or Email birthday greetings from the app
  • Fully localized into 38 languages

Stirling Birthday is available in the Windows Phone Marketplace for $1.49 with an unlimited, ad-supported free trial download.

 
By: shane
Comments

Comments

Be the first to comment on this post

What I Eat Featured on Windows Store!

Monday, July 22, 2013 11:49 PM

What I Eat - ScreenshotWhat I Eat will be one of the featured apps in the Windows Phone Store in the United Kingdom and Australia tomorrow, July 23rd. I feel truly honored and excited by this selection.

According to Microsoft, the criteria for selection are:

  • Functionality - Strong performance and stability, intuitive, and easy to navigate without instructions
  • Utility - Drives repeated and consistent use, originality and innovation, and strong visual impact
  • Enjoyment - "Make your users say 'wow'", meaningful use of Windows Phone design features, and apps that take advantage of cross-platform synergy for platforms like Windows Phone, Windows 8, SkyDrive, etc...

More details on the selection criteria are on the Windows Phone Team blog. If you see the feature let me know!

Check out What I Eat on the Windows Phone Store!

 
By: shane
Comments

Comments

Be the first to comment on this post

4500+ Downloads!

Tuesday, June 11, 2013 7:21 PM

What I Eat ScreenshotI am truly overwhelmed by the response to What I Eat! In just over a month since I released What I Eat to the Windows Phone Store, there have been 4,683 downloads of the app. I’ve released two minor updates in response to feedback and it is truly humbling that a simple food journal has met such a need. Thank you all for your response and please send me feedback if you’re interested in other features!

If you haven’t tried it, check it out!

 
By: shane
Comments

Comments

Be the first to comment on this post

Moving to Azure

Sunday, December 30, 2012 8:01 PM

Windows Azure Logo

Wow. It’s hard to believe that it’s been two months since I last wrote something on here. In the interim, I’ve been some minor architecture work under the covers here at s-church.net. I moved the site to ASP.NET MVC 4 and .NET 4.5 and upgraded to Entity Framework for database access. The site is also now hosted on the new Windows Azure Web Sites with a SQL Azure database. I was very pleasantly surprised as to how easy it was to get up and running on Azure. Publishing the completed site to Azure was as simple as downloading the publish profile for my Azure site and then selecting that profile as the destination from the Publish command in the Visual Studio 2012 Web Application project menu. The publish process updates the database connection string as necessary to connect to the associated SQL Azure data store.

I’m also in the process of building a couple of new Windows Phone apps using the Azure Mobile Services backend. It’s not quite as straightforward to use Azure Mobile Services in Windows Phone 7.5 because I have to use the REST interface directly instead of the packaged clients available for Windows Store, Windows Phone 8, and iOS apps, but it’s still a big step forward from the Microsoft Sync Framework backend that I’ve used in the past. Sync Framework requires a dedicated server where I can do binary installs, which is quite a bit more expensive from a hosting perspective.

Once completed, the whole setup should be considerably cheaper than the hosting combination of Amazon Web Services and CrystalTech/The Small Business Authority that I’ve been using for over a year now and should also be more reliable since everything is co-located again.

 
By: shane
Comments

Comments

Be the first to comment on this post

Stirling Money 2.0 Released

Monday, October 15, 2012 1:24 PM

08Stirling Money has been updated to version 2.0 in the Windows Phone Marketplace. The new version contains a whole host of new features including:

  • Budgets
    • Set budgets for weekly, monthly, or yearly expenses
    • Set budgets for specific categories of expenses
  • Goals
    • Set savings goals for specific accounts and track your progress against those goals
  • Visualize your financial health with a series of charts including:
    • Net income by month
    • Spending by category
    • Spending in a given category by month
    • Performance versus budgets

 

Check it out and don’t forget to rate it highly in the Windows Phone Marketplace!

 
By: Shane
Comments

Comments

Be the first to comment on this post

Stirling Money in the Windows Phone Marketplace

Friday, May 25, 2012 12:20 PM

Stirling Money Accounts ScreenMy first Windows Phone 7 application, Stirling Money, has been published to the Windows Phone Marketplace.  It is a check register application that allows you to keep track of all of your financial accounts on your phone.

The main features are the ability to:

  • Manage multiple accounts
  • Pin live tiles for direct access to an individual account
  • Categorize transactions
  • Backup and restore from SkyDrive

Stirling Money does all of the math for you when you go to compare your bank statements to what you have recorded.  Stirling Money costs $1.49 and has a free trial version available in the Marketplace.  Check it out!

 
By: Shane
Comments

Comments

Be the first to comment on this post

Building Stirling Money

Thursday, May 24, 2012 3:38 PM

ScreenshotTransactionsBeing my first fully native Windows Phone 7 application, Stirling Money provided me lots of opportunities to learn more about the platform. I had written a check register application for Windows Mobile 6 and wanted to take the opportunity to update it to the new Windows Phone platform. Windows Phone 7 is a radical departure from Windows Mobile from both the user’s perspective and the developer’s perspective. Building applications for the older Windows Mobile platform utilized the Microsoft .NET Compact Framework, SQL Server Compact, and a more traditional, battleship gray, Windows Forms user interface (UI). In contrast, Windows Phone 7 uses Silverlight and XAML for the UI and LINQ to SQL to access a local database.

Getting Started

To get started in Windows Phone 7, the first thing I had to do is force myself to forget everything I had learned over almost 12 years of developing mobile applications for the Microsoft Pocket PC/Windows Mobile platform. Windows Phone 7 is such a radical departure that everything I had learned about building UIs and the underlying application architecture went completely out the window. Anyone who has taken the time to become an expert in a given field can tell you just how hard that can be, and it was no different for me. I found myself having to really consciously force myself out of my old Windows Mobile development patterns, but once I got to that point, I was actually very pleasantly surprised at how easy it was to build an attractive interface that performed really well and ran rings around anything I had ever done on the older Windows Mobile platform.

The first big thing that I discovered is that there three invaluable, free toolkits that really ease the development of a Windows Phone application:

The Microsoft Silverlight Toolkit provides a whole host of native Silverlight controls for Windows Phone that you can drag and drop into the designer and use the Visual Studio properties window to manipulate. The Coding4Fun Toolkit provides more controls that really should have been built into the main framework if you ask me such as AboutPrompt, ProgressOverlay, RoundButton, and many more.

Building the UI

Even with all of these controls, building a UI in XAML is a lot like learning a foreign language. It’s just enough like XML and HTML that I’m familiar with, but with its own twists to throw me off. Data binding in XAML is particularly different than in ASP.NET or the older Windows Forms, so that was probably the biggest difference to get used to. The concept of using a view model in order to make all of the properties available to the UI was familiar to me because I use it all the time in my ASP.NET MVC development, but the binding syntax in XAML and exactly which NotifyPropertyChanged event the binding ends up listening to took some figuring out. I ended up with a number of properties in my view models that looked like the code below, with multiple NotifyPropertyChanged events, in order to get all of the related properties on the page to update when I needed them to.

private ObservableCollection<AccountViewModel> _accounts;
public ObservableCollection<AccountViewModel> Accounts
{
    get { return _accounts; }
    set
    {
        if (_accounts != value)
        {
            _accounts = value;
            if (_accounts != null)
            {
                _accounts.CollectionChanged += delegate
                {
                    NotifyPropertyChanged("Accounts");
                    NotifyPropertyChanged("TotalBalance");
                    NotifyPropertyChanged("NoDataVisibility");
                };
            }
            NotifyPropertyChanged("Accounts");
            NotifyPropertyChanged("TotalBalance");
            NotifyPropertyChanged("NoDataVisibility");
        }
    }
}

The other thing that I learned in the process is that the XAML editor in Visual Studio 2010, while much improved over previous editions, has some quirks when using static resources inside the phone:PhoneApplicationPage.Resources tag. Editing data templates in that tag doesn’t give the WYSIWYG display that editing a template inside a control does, so I often found myself editing ListItem templates inline so I could see the results in the designer and then moving the template to the Resources section once I had the design solidified.  I was pretty amazed at the amount of markup required for seemingly simple tasks. For example, one single row in the list view above required the following markup:

<DataTemplate x:Key="transactionsItemTemplate">
        <StackPanel>
            <toolkit:ContextMenuService.ContextMenu>
                <toolkit:ContextMenu>
                    <toolkit:MenuItem x:Name="menuItemEdit" Header="edit" Tag="{Binding TransactionId}" Click="menuItemEdit_Click"/>
                    <toolkit:MenuItem x:Name="menuItemDelete" Header="delete" Tag="{Binding TransactionId}" Click="menuItemDelete_Click" />
                </toolkit:ContextMenu>
            </toolkit:ContextMenuService.ContextMenu>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="5"></ColumnDefinition>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="100"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Rectangle Grid.Column="0" 
                           Grid.Row="0" 
                           Grid.RowSpan="2" 
                           Margin="0,2,0,2"
                           Fill="{Binding TransactionColor}"/>
                <CheckBox IsChecked="{Binding Posted, Mode=TwoWay}" 
                           Tag="{Binding TransactionId, Mode=TwoWay}"
                           Grid.Row="0"
                           Grid.Column="1"
                           Grid.RowSpan="2"
                           VerticalAlignment="Center"
                           HorizontalAlignment="Center"/>
                <TextBlock Text="{Binding CheckNumber}" 
                           FontSize="{StaticResource PhoneFontSizeNormal}"
                           Padding="0,0,10,0"
                           Grid.Row="1"
                           Grid.Column="2"
                           VerticalAlignment="Center"
                           HorizontalAlignment="Left"
                           Visibility="{Binding CheckNumberVisibility}"/>
                <TextBlock Text="{Binding Location}" 
                           FontSize="{StaticResource PhoneFontSizeMediumLarge}"
                           Margin="0,0,0,0"
                           Grid.Row="0"
                           Grid.Column="2"
                           Grid.ColumnSpan="2"
                           VerticalAlignment="Center"
                           HorizontalAlignment="Left"/>
                <TextBlock Text="{Binding Category}" 
                           FontSize="{StaticResource PhoneFontSizeNormal}"
                           Margin="0,0,0,0"
                           Grid.Row="1"
                           Grid.Column="3"
                           VerticalAlignment="Center"
                           HorizontalAlignment="Left"/>
                <TextBlock Text="{Binding Amount, StringFormat=\{0:C\}}"
                           FontSize="{StaticResource PhoneFontSizeMedium}"
                           Grid.Row="0"
                           Grid.Column="4"
                           Grid.RowSpan="2"
                           Margin="5,0,5,0"
                           TextAlignment="Right"
                           VerticalAlignment="Center"/>
        </Grid>
    </StackPanel>
</DataTemplate>

Building and Accessing Data

Database support on the phone is provided through LINQ to SQL on top of SQL Server Compact 3.5.  Having used the Microsoft Entity Framework extensively in some of my recent work at EffectiveUI, using LINQ to SQL was relatively easy to pick up, though it does have some differences from the Entity Framework syntax that got me a bit in the early going. After that, it was simply a matter of translating from the database model to the view models and everything else just worked, which was way easier than writing the ADO.NET code and scripting the database creation that was required in Windows Mobile.

ScreenshotBackupThe other interesting complication was that Windows Phone does not sync files directly with the desktop. The only solution to allow the user to backup and/or restore their data from the phone is to sync with a cloud service such as SkyDrive. Fortunately the Microsoft Live SDK makes this very easy.  The following markup is all of the XAML needed to add the Sign in/Sign out button to the page:

<my:SignInButton ClientId="00000000400C1EB8" 
    Scopes="wl.signin wl.basic wl.offline_access wl.skydrive_update" 
    Branding="Skydrive" 
    Name="buttonSkyDriveSignIn" 
    SessionChanged="buttonSkyDriveSignIn_SessionChanged" />

After that, the C# code to handle the SkyDrive session changes was also very simple. All I had to do is listen for the SessionChanged event and check to see if the session status that was reported was Connected as shown in the snippet below.

private void buttonSkyDriveSignIn_SessionChanged(object sender, Microsoft.Live.Controls.LiveConnectSessionChangedEventArgs e)
{
    if (e.Status == LiveConnectSessionStatus.Connected)
    {
        _session = e.Session;
        _model.IsSignedIn = true;
        _client = new LiveConnectClient(_session);
        _client.GetCompleted += new EventHandler<LiveOperationCompletedEventArgs>(_client_GetCompleted);
        _client.PostCompleted += new EventHandler<LiveOperationCompletedEventArgs>(_client_PostCompleted);
        _client.UploadCompleted += new EventHandler<LiveOperationCompletedEventArgs>(_client_UploadCompleted);
        _client.DownloadCompleted += new EventHandler<LiveDownloadCompletedEventArgs>(_client_DownloadCompleted);
        _progress.Text = "Loading...";
        _progress.IsVisible = true;
        _client.GetAsync("me/skydrive/files?filter=folders", "me/skydrive/files?filter=folders");                
        _model.InfoBoxText = "Signed in.";
    }
    else
     {
         _client = null;
         _model.IsSignedIn = false;
         _model.InfoBoxText = "Not signed in.";
     }
}

Building a Trial Mode Application

Another place where the Windows Phone tools really shined is in building a trial feature into the application. Unlike in the past, where a developer had to deal with all of the registration algorithms themselves, Microsoft does a great job of providing these checks for the developer along with the hooks into the Windows Phone Marketplace to convert from trial to paid. The code to check to see if the application is running on a trial license is very simple as shown below:

private void DetermineIsTrial()
{
#if TRIAL    
    // return true if debugging with trial enabled (DebugTrial configuration is active)    
    App.IsTrial = true;
#else
    var license = new Microsoft.Phone.Marketplace.LicenseInformation();
    App.IsTrial = license.IsTrial();
#endif
}

This method is called when the application is loaded or is activated after the user switched to a different task and set in a static variable in the main app class so that I can check for trial functionality anywhere where that check is needed.

To convert the user to a paid user from the “Buy Now” button, I only have to execute the following code to launch the Marketplace app directly to my application page. If they purchase the application while there, the DetermineIsTrial method will be called when my application is reactivated and the user will automatically see the full functionality.

private void Button_Click(object sender, RoutedEventArgs e)
{
    MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
    marketplaceDetailTask.Show();
}

Conclusion

Being my first fully native application for Windows Phone 7, I was really pleasantly surprised as to how easy it was to build an attractive, performant app that took advantage of local database storage and cloud backup. Stirling Money took approximately 16 hours of total development time for the first release into the Windows Phone Marketplace. My next project is building a side by side comparison of building a fully-native Windows Phone application and building the same application functionality with PhoneGap/Apache Cordova and doing a comparison of the two approaches in addition to the approach of building a mobile web application within a native shell that I discussed in my article, Develop Hybrid Native and Mobile Web Apps, in the March 2012 issue of MSDN Magazine.

As of this writing, Stirling Money has been certified and published to the Windows Phone Marketplace, although it is not currently searchable yet. When it becomes available, it will be at this link. Prior to that, there is more information on my Windows Phone Software page. I will be publishing an additional post when the application goes live in the Marketplace.

 
By: Shane
Comments

Comments

Be the first to comment on this post