Release of Winner Winner App

Always fun releasing apps and especially so for apps you designed and built as something you need.  I do a number of presentation every year and handing out door prizes at the end tends to be a bit of a confused scramble and not the cherry on the top of a great presentation that I’d like.  So I needed something better, something easier, faster, more engaging, something smooth and professional, but I couldn’t find an app that worked for me, so being a Windows software developer I wrote my own.  May I present Winner Winner the easiest and fastest way to let people enter and win prizes that runs on a number of Windows 10 devices including desktop, tablets, phones, hub and even the HoloLens. Everyone carries or wears an electronic device with Bluetooth, so let that be their entry into your raffles or door prizes. No more hassles with lists, paper or tickets, as with Winner Winner you can quickly and easily have people enter your draws anywhere. Just have them put their Bluetooth device in discovery mode and Winner Winner will discover and enter them and even randomly select the winners. Want to limit the entries to only certain types of devices, no problem as Winner Winner can filter devices to only those you want. Winner Winner has addition features and controls will make your contests even easier and more successful and that’s what we call a Winner Winner.  You can see a brief overview of Winner Winner here

If you have been to one of my recent presentations then you have seen Winner Winner in action and seen how fast and easy it handled entering contestants and handing out prizes.  You can download Winner Winner for free here in the Microsoft App Store.

Confessions of an app store developer - One App One Month

After spending the last four or five years building and coding hardware devices and becoming an IoT expert, its time for a new challenge and a return to designing and building apps for users again. I first started writing code in the late 1970’s in FORTRAN on punch cards and over the years I’ve made a living from Shareware and creating my own Software companies which helped me learn a lot about users and business and prepared me for doing Startup companies and despite the success of creating almost a billion dollars worth of companies, I didn’t enjoy it as clearly the emphasis is on making money and not much else and its often a Survivor like game when the money hits the table which was enough to end my involvement in start-ups.

I love creating stuff, and the process of taking an idea to a finished product in the hands of users, is my thrill, so after spending years building IoT devices I wanted to get back to pure software again. I decided after looking at Windows 10, and the rapidly maturing UWP (Universal Windows Platform) and development tools (Visual Studio 2015 and beyond), that writing apps for the Microsoft App Store would be an interesting, toss in that I really love my Windows Phone (currently a Lumia 950XL) that building UWP apps which have a phone slant would be worthy and fun adventure and just be a great learning adventure.

Now I’ve been a Microsoft MVP winner for 13 years and in a number of different areas over the years as my interests change, so this year I’m ‘Visual Studio and Development Technologies’. NOTE I’m not a Microsoft employee, nor does Microsoft tell me what to do (other then my wife not many people do), but I’m awarded my MVP usually because I spend a lot of time giving presentations to various user groups, or teaching, or just sharing my knowledge and experiences with others as I’m a huge believer in the power of developer communities, and its for that purpose that I’m writing this blog entry.

One of the challenges I had when considering building apps for any app store is the lack of information as to what to expect as an app developer and in particular how much money do they make. I’m not particularly motivated by money, but I understand that you need money to live, to pay for a roof over your head and put food on your table and such. I’m not interested in driving a Lamborghini, but I am interested in making a reasonable living which is likely less then what some people consider making a living as I’m trend to live a more minimalistic lifestyle to reduce the amount of control that stuff has on me. The question is, how much money does a person need to make and can you do that as an app store developer? I can’t tell you how much money you need to make as it has been my experience that everyone is different, but I will tell you about how much money my first app has made in its first month and share some of my experiences and learning thus far.

Some important points concerning this first and please read these so you understand what I’m doing and what my objectives are.

  • In Calgary, we are currently around 10.3% unemployment and office space vacancy downtown is about 30% as the collapse of the petroleum business has hit hard and so some folks are scrambling to find alternate employment. So my first objective is to see if it is possible to make a living from or a reasonable income supplement or at least a self sustain hobby writing apps for the App Store.
  • The IT industry is very discriminatory and so a lot of qualified and capable people are without suitable employment for all the wrong reasons, could be gender, could be race, could be age, education or whatever, but in my experience of writing Shareware or apps for other app stores, users don’t discriminate, they just want quality software that does something they want done, or something that otherwise they like. An App Store is a great equalizer where as long as you don’t name your company something inflammatory, it comes down to who makes the customer happy and not much else other then some basic business skills.
  • There are other App Stores, but I’m only interested in Microsoft’s App Store so my focus is apps written using UWP just for Microsoft’s Windows 10 App Store. Reasons for this are both personal (I’ve been writing Windows code since 1990 and to paraphrase Roberto Clemente, Windows has been very good to me). I also believe that Microsoft is onto something with its Universal Windows Platform as it’s a logical extension to the concept of cross platform languages as it enables cross device development where I can write the same code and using Adaptive Display have it run on different devices and be able to take advantages of each device’s capabilities. Not only is this a powerful development tool, but will also simplify future maintenance which is very important to an Independent Software Vendor (ISV) as there are only so many hours in a day.
  • Microsoft seems to be working a long plan that the other platform vendors aren’t and that plan seems to be coming together (they still have some work in the mobile side, but they are making good progress but quietly). The platform, tools, devices, are all making great strides, and if they juice the App Store like they have Groove (and it appears they are), then jumping on to this now might be just good business timing.
  • I’ve been impressed with the user community and while it might be small they seem willing to support app developers and that is very important.
  • I want to write at least four apps in different areas in order to build up some expertise and hence be able to evaluate the concept as being viable or not or how to make it viable as I’m not a believer that one app does an expert make (there are some in IT who think reading one article makes you an expert).

First App, First Month

As the idea man behind a number of companies I have lots of ideas for apps, but I chose the Weather Barometer app as my first app as I wanted something simple where I could focus on the processes and such of getting an app into the store and my Pioneer Farmer Grandfather left me with a love of Barometers. Reading tips from other developers like Atley Hunter I also wanted to focus a bit on features which help build a developer user relationship like feedback. I also wanted to try HockeyApp for beta testing so the app took three months to write (not full time), so I could explore some different features and such and this is time while spent as every app I write will have features and such that I researched and built during this time.

wp_ss_20161119_0004

There were a number of things that I tried and certainly Template10 was a huge find as it gave me an excellent UWP foundation to build on and with the Template10 courses on Microsoft Virtual Academy I was very confident in using Template10 as my starting point.

HockeyApp I liked and I’ll talk more about why you should use HockeyApp below but my first impressions were its very useful for testing but still has some work to do for Phone Apps. For example deploying an app to my beta testers could be problematic if the app was using components/dependencies my testers didn’t already have installed as sending out the .appx file made the app installable by clicking on it, it didn’t install any of the dependencies, so I lost a few testers because of this complexity. If I deploy everything to my testers then they had to install a zip extractor and then work their way through the .appx files to install everything including the dependencies. I did find HockeyApp to be useful for finding problems during beta testing and will use it again and especially that I believe that they are constantly improving it and are addressing some of the issues I ran into.

Initial Release

Once I had completed beta testing the submission and release process is pretty straight forward and my app hit the store for download on Nov 2nd which was good as I was attending a MVP Summit Meeting at Microsoft starting on Nov 4th. I had included a way for user to email me suggestions, comments etc which some users used to send me messages about the units not displaying correctly. I had some code in the app which was supposed to check the user’s region/language setting and return if they used Metric or Imperial units and while I tested this for Canada and the USA, but it didn’t work for some countries/regions in Europe for example. I posted the problem in the developer forums and Microsoft jumped on it and are working on a fix for some language/regions where IsMetric doesn’t return the correct measurement units. That said however I had some users send me some feedback explaining cases where they might want to use the other units, so I planned to add the ability to select the measurement units in the app settings in the next release.

The other comment that I heard from a number of users was they didn’t like the ad banner. As I mentioned the idea of these app is to see if a developer could make a living doing this so I started with monetization via ad banners, which are pretty much trivial to add to your app and manage, so it allowed me to give the app away for free and yet hopefully make a small revenue stream. Users were ready, willing and wanting to ‘buy’ the app so they wouldn’t have to look at advertising.

Post mainscreen with ad

The other comment I heard fairly often was around updating the Live Tile which I thought was interesting as users really like that so upon returning from the MVP Summit I had an update to work on which included adding unit of measure preference to settings, In App Purchase of an ad free version, updating the Live Tile, using Feedback Hub and a small bug fix as when a user changes their font size it can change the screen width and/or height and messed up my adaptive display for rotating the screen.

Coding the Update

One thing that I should mention is Microsoft has made In App Purchases very easy to code and manage, but testing it is a bit of fuzzy area. Now there are two options for in app purchases in terms of what library you use, one library is old and in the process of being depreciated and the other new. I choose the new library as while it requires at least the Anniversary Update I could tell looking at my Store Reports that most of my users were running the Anniversary Update so it wouldn’t be much of a problem. The old library had better testing as it allowed you to connect to a ‘test’ store where you could test having, not having made the purchase etc, but the new version is pretty much a black and white affair so I tested all sorts of negative conditions first like no network access to the store etc, not purchased, canceled purchase etc as once you have purchased the ad in, its yours and the there is no going back to not having the purchase so plan your testing accordingly. I also created a testing Add-on just for testing so I could test an actual purchase of the no ads Add-On once it had gone live in the store.  The store process for the user is pretty good as once they select to purchase the Add-On in the app, they are taken to the store where they have to login and then approve the purchase and then the Add-On works immediately so they can be fairly confident that they are ultimately in control of the purchase process and get their purchased Add-On immediately.

wp_ss_20161118_0001

Live Tiles and toast messages are also fairly simple and I’d highly recommend using the UWP Community Toolkit as it made this fairly simple. The UWP Community Toolkit should be in front and center in your toolbox as its full of coder goodness and will save you many hours of coding and testing as its intent is make your apps better and your life easier, what's not to like about that?

wp_ss_20161118_0002

 

Releasing the Update

Again the store is pretty good for submitting and releasing your apps, but in my case my store reported crashes went up immediately which wasn’t good (the Developer Dashboard for the store gives you access to lots of reports so you can track how your application is doing). Looking at the crash data reported in the store I could see that the crash was happening in some countries but not others but I wasn’t getting enough information to figure out the cause of the crash, enter HockeyApp and some great users to the rescue. I built a version of the app using HockeyApp and then made the it available to some users who were having the problem and didn’t mind running the HockeyApp version which returned crash data to me immediately and from the stack I could see where in the code it was blowing up and with a little testing I found the exact cause of the crash, so now I could start on a fix. I sent the issue to Microsoft as if you called DateTimeFormatter.Format(DateTimeOffset.MaxValue) (which gives you a localized date time string) with some language/region combination, it would crash. I looked at the one case where because of threading I might pass a DateTimeOffse.MaxValue to the DateTimeFormatter.Format and determined that a correction for that which removed the problem from my app.

Releasing the Fix

Again the release process went very well and I took advantage of a store feature for promotions where you can generate free promo codes for apps and add-ons so that I could send those users who helped me find this bug a free add-on to remove the ads from their app, which was the right thing to do and again the promo codes were easy to generate and use so points again to the store there.

The Numbers

Downloads

clip_image002

You can certainly see the value of being mentioned on AppRaisin and WindowsCentral so when you release an app don’t forget to let the news sites know about it. So other then the opening rush, I’m seeing about 35 downloads a day, which isn’t a lot but really this doesn’t have a large market size as its Windows Mobile 10 and only for Lumia 950 and 950XL phones as they are the only ones with a barometer sensor so I wasn’t expecting huge download numbers.

Revenue

clip_image004

As you can see from the initial flat line, this app wasn’t making much from ads, but once the option to purchase an ad free version was released, revenue improved. This app made approximately $34.89 CAD for the month of November where about $1.48 CAD was from advertising and the rest $33.41 CAD was from users buying the ad free option over the last eight days of the month. So clearly, I should have had the ad free option available from the start, but the ad free option is generating about $4 CAD a day, which is more then I expected as I my target was about $3 a day so I’m happy.

Conclusions

For the first month, I’ve learned a ton and my revenue targets were passed by about 20% so I’d have to call this a good start. I’m currently working on another app and then once its released I’m thinking about going back and adding languages to this app to see what impact that will have. Currently this app is in 242 markets which are English only but available in a lot of countries and I see a lot of downloads in foreign countries so adding support for those countries likely makes sense and I have had users offer to help me with the translation, so once again Windows Phone users show that they are just a better class of user. I suspect that downloads and purchases will tail off in the future as there are only so many 950 and 950XL’s out there, but perhaps in the future someone will release a new Windows Phone which features a barometer sensor, or perhaps a Surface or other devices will a barometer, in which case it would be simple to support those with this app.

I do have a bunch more features that I want to add to this app which is good as it will help to keep the app fresh, so I’ll work on those as I get time between other apps that I’m writing, but otherwise I’m happy with the progress thus far and working on my next app which will work on a few more devices then just the phone and should be quite unique.

Metric or Imperial–what Windows 10 Mobile setting defines what is shown?

With the release of my Weather Barometer app I received a lot of feedback and questions around incorrect measurement units, so I thought I would put together a blog post about this as it’s a little more ‘interesting’ then one would expect.  Weather Barometer uses meters or feet for elevation and hectopascal (hPa which are the same as millibars) or inches Mercury (inHg) for barometric pressure.  The hectopascal is the international metric unit for measuring atmospheric or barometric pressure. One hectopascal is exactly equal to one millibar, and although the scientific community has officially adopted the hectopascal in preference to the millibar, the millibar is still used extensively throughout the world due to the proliferation of its use historically.  So we are using accepted measurement units, but the question is why don’t I see the unit of measurement I expect.

First let me describe the code that is responsible for displaying the units.  The native Windows GPS units are metric, so if we are going to display GPS elevation in metric then we don’t need to do anything, but if we want to display elevation in feet, however, then we need to convert the native GPS meters to feet; for that we use a Converter.

public sealed class ElevationValueToStringConverter : IValueConverter
    {
        public object ConvertBack(object value, Type targetType,
            object parameter, string language)
        {
            throw new NotImplementedException("Converting from string is not supported.");
            //return value;
        }

        public object Convert(object value, Type targetType,
            object parameter, string language)
        {
            double x;
            try
            {
                x = (double)value;
                if (Double.IsNaN(x))
                {
                    return "";
                }
            }
            catch (Exception)
            {

                return "";
            }

            if (RegionInfo.CurrentRegion.IsMetric)
            {
                return x.ToString("F0");
            }
            else
            {
                return (x * 3.2808).ToString("F0");
            }
        }
    }

NOTE the line RegionInfo.CurrentRegion.IsMetric is responsible for querying the system to see what units the user has selected.  The Microsoft documentation for this is here https://msdn.microsoft.com/en-us/library/system.globalization.regioninfo.ismetric(v=vs.110).aspx and states RegionInfo.IsMetric gets a value indicating whether the country/region uses the metric system for measurements, but why are we using ‘RegionInfo.CurrentRegion’, looking at the Microsoft documentation for this here https://msdn.microsoft.com/en-us/library/system.globalization.regioninfo.currentregion(v=vs.110).aspx we see that it gets the RegionInfo that represents the country/region used by the current thread, ie the Weather Barometer thread, so it should be returning a true or false concerning if the user’s region uses metric measurements or not.

The Windows Phone barometer sensor also returns pressures in metric so we have similar code for displaying pressure where 0.0295299830714 is the conversion factor for converting hPa to inHg.  I should mention that Converters are a cool and handy programming feature in UWP.

public sealed class PressureValueToStringConverter : IValueConverter
{
    public object ConvertBack(object value, Type targetType,
        object parameter, string language)
    {
        throw new NotImplementedException("Converting from string is not supported.");
        //return value;
    }

    public object Convert(object value, Type targetType,
        object parameter, string language)
    {
        double x;
        try
        {
            x = (double)value;
            if (Double.IsNaN(x))
            {
                return "";
            }
        }
        catch (Exception)
        {

            return "";
        }


        if (RegionInfo.CurrentRegion.IsMetric)
        {
            return (x).ToString("F2");
        }
        else
        {
            return (x*0.0295299830714).ToString("F2");
        }
    }
}

So now we know how the code works, how do the settings work to display the data in the units we want to see?  In the Windows Phone Settings there is ‘Time & Language’ which allows you to set ‘Speech, region, keyboard’.

wp_ss_20161103_0001

If we open that we see ‘Date & Time’, ‘Language’, ‘Region’, ‘Keyboard’ and ‘Speech’.

wp_ss_20161103_0002

Now I think that most people believe that unit of measure are controlled by the Region settings, which makes sense given that for most countries the units of measure mandated by the government.  Looking at the Region Settings we see we can change what Country/Region we are in by changing the selected country, so for example one would think that if the Country/Region is say set to ‘Canada’

wp_ss_20161103_0003

then metric units of measure would be used, whereas if we switch that to ‘United States’ that the phone would switch to using imperial given the United States uses the imperial system.  So first a screen shot of the Weather Barometer with Region set to Canada showing metric unit usage:

wp_ss_20161103_0005

Now if we change the Region to ‘United States’ and restart the phone as required,

wp_ss_20161103_0006

we see it is still displaying Metric units in the Weather Barometer.

wp_ss_20161103_0007

Now this isn’t what most people probably expected, so what is it that controls which units are used, if it’s not the Region setting?  If we switch the Region back to ‘Canada’, restart the phone to get back to our ‘all Canada settings’ and go into ‘LANGUAGE’ we see that I have ‘English (Canada)’ as the top listed language which makes it the active language.

wp_ss_20161103_00041

If we tap and hold our finger on ‘English (United States)’ such that the popup menu appears and then select ‘Move up’ until it is at the top of the list

wp_ss_20161103_0009

and then restart as required to make ‘English (United States)’ the active language and, when we run the Weather Barometer we see that the units used are now imperial. 

wp_ss_20161103_0010

So it’s the language setting which determines which units are used.  This might be confusing or counter-intuitive but it is how Microsoft set it up. I was thinking about this and I think it might because there is a country (or countries) that use different units of measure in different regions, and which might have different languages. Microsoft might have connected units to country/languages to accommodate this.  I don’t know of any countries where this is the case, but I can’t claim to be an expert on the topic.  Now remember on the REGION screen for Regional format we were using the default setting of ‘Match phone language’,

wp_ss_20161103_0006

what would happen if we changed that to say ‘English (Canada)’ and did a restart, leaving our active language as ‘English (United States)’?

wp_ss_20161103_0012

If we now run Weather Barometer the units are still shown in imperial,

wp_ss_20161103_0013

so clearly Language controls what units the system uses.

I hope this helps you understand how the Regions/Language setting determines whether your phone is using Metric or Imperial units. I would agree that it seems a little confusing and counter-intuitive, but I’m sure Microsoft has reasons why it is set up this way I’m still considering not using the system unit setting, however, and making it an application setting to make it easy for users to set and get the units they want.

As a follow up I have tested some language settings which should return metric but don’t, so I’m following up with Microsoft to see if its something I need to fix, a setting I’m missing or something else.  I’ll post as I get information.

Windows Phone, Continuum and MS Wireless Display Adapter

I have a 950XL (love it) and was using a Microsoft Wireless Display Adapter (very cool) connected to some projection system that had a HDMI input and a USB socket, so you plug the Display Adapter into the HDMI input and the other end of the Display Adapter into the USB socket (to power the device), connect up and you are rocking. So I fire up Power Point (sorry Don Box) and run my slide deck.


Now it would be great to get the presenter mode on the phone so I could read my notes for each slide, but I don't and I don't think you can, or if you can, to be honest I'm not sure how you get it. To advance the slide, I just tap the screen on my phone, which works great, but you might want to be careful how you hold your phone as I accidental powered my phone down once in the middle of a presentation (bugger). The phone has a range of about 20 feet from the display adapter, which is ample as I tend to move around a bit when I speak.
This presentation was a little over 2 hours long and it maybe used like a 1/5 of my battery, I was quite shocked actually how little battery it ate.


What was really cool is I was able to demo one of the apps I'm writing on Continuum and then I switched Continuum's display settings to display the Phone's screen so I could demo the same app running on the phone, so if you are an app developer I would consider Continuum and the display adapter to be pretty much mandatory in your tool kit.


I really liked showing up without a laptop, just less stuff is always good. Toss in that a lot of hotels have big screen TV with HDMI/USB sockets, I can travel even lighter now, toss a fold-able Bluetooth keyboard and mouse in the suitcase and I'm good to go for keeping up on email and such while on the road.


In short like everything around the Windows Phone, Continuum is a shamefully well keep secret, but it does indicate that Microsoft has plans for the phone, so at least that makes me happy.

Welcome to BlogEngine.NET

If you see this post it means that BlogEngine.NET is running and the hard part of creating your own blog is done. There is only a few things left to do.

Write Permissions

To be able to log in, write posts and customize blog, you need to enable write permissions on the App_Data and Custom folders. If your blog is hosted at a hosting provider, you can either log into your account’s admin page or call the support.

If you wish to use a database to store your blog data, we still encourage you to enable this write access for an images you may wish to store for your blog posts.  If you are interested in using Microsoft SQL Server, MySQL, SQL CE, or other databases, please see the BlogEngine docs to get started.

Security

When you`ve got write permissions set, you need to change the username and password. Find the sign-in link located either at the bottom or top of the page depending on your current theme and click it. Now enter "admin" in both the username and password fields and click the button. You will now see an admin menu appear. It has a link to the "Users" admin page. From there you can change password, create new users and set roles and permissions. Passwords are hashed by default so you better configure email in settings for password recovery to work or learn how to do it manually.

Configuration and Profile

Now that you have your blog secured, take a look through the settings and give your new blog a title.  BlogEngine.NET is set up to take full advantage of many semantic formats and technologies such as FOAF, SIOC and APML. It means that the content stored in your BlogEngine.NET installation will be fully portable and auto-discoverable.  Be sure to fill in your author profile to take better advantage of this.

Themes and Plugins

One last thing to consider is customizing the look and behavior of your blog. We have themes and plugins available right out of the box. You can install more right from admin panel under Custom.

On the web

You can find news about BlogEngine.NET on the official website. For tutorials, documentation, tips and tricks visit our docs site. The ongoing development of BlogEngine.NET can be followed at Github. You can also subscribe to our Youtube channel.

Good luck and happy writing.

The BlogEngine.NET team