GitHub Actions for UWP apps – the Good, the Bad and the Ugly

Introduction

At work, we were doing manual builds to share with the quality assurance team and to submit to Partner Center. Obviously, this was not optimal and then I started to look at GitHub Actions.

The Ugly

This was hard. I hit roadblocks. Do you feel sometimes you are the first person to work on something that never been done before? I felt this way with my UWP scenario. Please continue to read, it ends well.

The Good

  • GitHub Actions is by definition hyper versatile and highly customizable.
  • The price to use GitHub Actions is affordable: free! You can use 2000 minutes per month for free. For most developers, this should be enough to build your application daily.
  • There are already tons of Actions done by 3rd parties like Jira, AWS, Google. There are even more Actions done by the community that for example interact with Slack and non-Microsoft services.

Before I continue, my workflow would have not been possible without the great step-by-step guide by the Microsoft engineer Edward Skrod. His workflow is for a WPF app, so in a sense it is similar to a UWP app.

I created a blank UWP app that is available at my GitHub. My Release Builder workflow allows the creation of a release version of a UWP app ready that can be submitted to Partner Center.

Here is the explanation of every step of my workflow:

image
To trigger the workflow, create a tag with the format “vW.X.Y.Z”, please note the little “v” which is a standard to name an official version. “W.X.Y.Z” are numbers that will fix the version in the manifest and create the release with that version. GitHub Actions can be triggered by different sources (label, pull request, push, etc).

image
UWP is for Windows, so it needs Windows!

image
Environment variables that will be used in steps. My UWP project is at the same level as the solution file. If your project is in its folder, you can modify the solution path and UWP_Project_Directory.

image
This step is crucial if your project contains many Nugets and if you target ARM64. This was one of my major road blocks. Locally, I had no issues creating the app package, but when the solution was built on GTA (GitHub Actions), there was an error by an internal tool of .NET Native. I created an issue https://github.com/actions/virtual-environments/issues/1115#issuecomment-656186479 and it took 2 days of tries and errors until the owner of configure-pagefile-action gave me set of good parameters to use. The .NET Native team gave me another workaround of modifying the runtime directives of Default.rd.xml file, but I was a bit scared to alter that file. Anyway, setting the page file of the VM gives enough memory for the internal tool to run.

image
A GitHub Action context contains many environment variables, but some are missing like the current tag. The echo step is your best friend when you build your own step. It helps to show a variable value.

image
In order to extract the version from the tag v1.0.0.1 (just the 1.0.0.1), I used this action that call PowerShell. The value can be retrieved from ${{steps.getVersion.outputs.result}}.

image
This is the basic step that fetches the code into the virtual machine.

image
This configures the tooling to build the solution.

image
Set the version specified by the tag into the Package.appxmanifest file.

image
This create the certificate file on the virtual machine from a GitHub Secret variable. Edward’s guide already explain how to proceed. Note: if you try to install the release produced by my workflow, you won’t be able to install it, because I didn’t obtain a valid certificate.

image
This step compiles the solution. I copied it from Notepad because the run line is too long. This command compiles in Release and adds x86 and x64 into the upload package. The /restore is important to download the Nugets completely on disk. This was another roadblock.

image
It removes the certificate from the virtual machine. I doubt that it is needed.

image
This create the zip file of the app package produced by the compilation.

image
This creates the GitHub release with the specified tag and release name. You can change the values of draft and prerelease.

image
This adds the zip into the release.

Voilà!
image

The Bad

  • If your background is C#, the learning step is present. Using/creating/parsing variables are not simple. I would have liked to see more examples done by GitHub team.
  • When you browse for an action, the web page of an action (example Simple Merge) does not show if the action is compatible with Windows. I hit some disappointments when I found the perfect action, but it was not compatible. GitHub Actions seems more popular for the Linux world.
  • Building/debugging a workflow can be long. I recommend that you set your package to debug to speed up the compilation. When an error happens during the compilation, the log output produced by GTA can be gigantic. The sections are not super well divided. It’s a bunch of text.
  • I find their documentation more heavy than Microsoft Docs. The workflow syntax is a good example. I would expect more sub topics and more real examples.

Conclusion

As I wrote previously, the possibilities are endless with GitHub Actions. For example at my work, I created a feature builder workflow that creates a build for a feature branch. It is triggered by adding the label “Needs feature build” to a pull request. When the compilation succeeds, it move a Jira ticket from “Code Review” to “Queue to Test” automatically. It also adds the package zip into the Jira ticket. The best way to start your workflow is from an existing workflow.

To build my workflows at work, it took more time that I thought, but it was a good investment. The whole team that will beneficiate of the time saved for our future builds. I still find it magical that a workflow can do many actions. I highly recommend.

Microsoft’s 10 good and bad moves/decisions of 2018

Living day to day in the Microsoft world, I have some observations.
In no particular order, here are Microsoft’s 10 good and bad moves/decisions of 2018:

Thumbs down:

Microsoft Store
The store offers a 2nd class experience. Searching for an app does not always provide the best result. On a few occasions this year, Microsoft announced new apps but they were not yet available due to server propagation. The Store app’s design is not as good as its competitors.

Developer Partner Center
Through the year, the Partner Center where developers go to submit new apps or updates suffered from multiple bugs and delays in reports, and most of the time no status was given to help developers. In May, Microsoft announced that developers will receive 95% of revenue from their apps before the end of 2018, but this promise has yet to come true.

Native UWP apps in the Store
This year was the year of the desktop bridge based app. It started strong with the addition of iTunes in the Store catalog. However, I didn’t see tons of momentum of new native UWP apps. UWP apps still offer a 1st class experience when it comes to touch based apps. Electron seems to offer strong competition when it comes to cross platform desktop development. Twitch, Slack and Microsoft Teams have embraced Electron instead of UWP. I would like to see more momentum from 3rd party publishers.

Cortana
Microsoft entered into a surprising partnership with Amazon to have Alexa available in Windows 10. Alexa has a good market share so I’m still puzzled about what is next for Cortana. I don’t believe developers will jump into writing Cortana Skills when they can just write Alexa skills since Alexa is now available in Windows 10. The users have gained from the partnership, but Cortana itself has lost the consumer market battle.

The Windows 10 October Update

Edge
The December announcement that Edge will embrace Chromium was a big surprise. In short term, it seems like a defeat and in the short term, developers will be in for a bumpy transition until the new engine is ready. There is still a chance that this new strategy will pay off.

Windows Mixed Reality
This was a pretty quiet Windows Mixed Reality push. Many headsets are $200 off in the Microsoft Store. I didn’t see any major apps making big splashes in the news. Note: I have the same thought about Apple AR.

Windows S SKU
On paper, the idea was great, but preventing users from downloading legacy Win32 apps was probably a no-go to most consumers. At least, Microsoft didn’t spend years with this SKU and they just turned this SKU into a Windows option.

Windows on ARM
Qualcomm has a good chip that gives a good balance with CPU speed while preserving battery life while having Windows always on. Tablets were announced in February, but are not yet available in Canada. Microsoft still have in some area a US centric approach.

Skype
For an app that has as its core feature message delivery, I have been through many pains over the past year (and past years too). I have missed countless messages due to notifications that never showed up. I have seen messages in the wrong order. The UI changed often.

Thumbs up:

GitHub acquisition
It caused a major storm in the developer world (mostly to the non-Microsoft community members). It was considered an evil move like Microsoft used to do in the nineties, but Microsoft said out loud that GitHub will keep the same philosophy. In very short term, GitHub delivered new cool features and the trend is not stopping. Nat Friedman seems to fit perfectly as new GitHub CEO.

Surface lineup
The team delivered the Surface Go, Surface Studio 2, Surface Laptop 2, Surface Pro 6 and the new cool looking Surface Headsets. Panos confirmed that the brand is here to stay. I love the Surface lineup and the design keeps improving. Will 2019 deliver the not so secret Andromeda?

Xbox
Xbox One didn’t have the best start versus the PS4 few years ago, but today Microsoft keeps investing in new studios and promised exciting new hardware for gamers. Microsoft has the talent and the money to increase the future of gaming. They are also pushing the competitors to embrace cross-console play.

Employee reachability
If you are using the Microsoft stack and you are not on Twitter, you are doing it wrong! I see more and more employees interacting on Twitter with developers and mostly to help them. In the previous decade, in order to talk with a Microsoft engineer you had to deal with a leveling call support system and it was costly. Now, we are just 280 characters away from reaching an employee. I want to take the opportunity to thank everyone, you know who you are.

Azure Advocate team
I’m probably not wrong in saying that the Azure Advocate team has more than doubled this year alone. Azure itself is a non-contestable success story, but behind this there are humans helping developers to embrace the cloud. I like that Microsoft is doubling down in the cloud and doesn’t hesitate to invest in this space.

Open Source
It is not a secret anymore that Microsoft wants to be the best company when it comes to Open Source from Linux to Windows technology like WinForms, WPF and WinUI Library. At the end of the day, developers can even contribute to Microsoft stack to fix their own problem and have discussion about how to shape the future. It is a win-win for all.

MSDN Documentation
The documentation has improved greatly and now that it is mostly on GitHub, everyone can contribute and improve the help. Documentation is vital because it does not help to have the best technology if we don’t have the instructions on how to use it.

Machine learning and cognitive services
This is the technology of tomorrow that Microsoft is investing in today. The new text to speech engine blew my mind. I’m pretty sure that 2019 will deliver more services.

Revisiting old technology
Microsoft realized that WinForms and WPF are still popular technology. Instead of forcing developers to use newer technology, they did a turn around and proposed XAML Island to enable developers to use new UI controls of UWP in Win32 applications. They also have a roadmap for WPF and WinForms. That’s something that I haven’t seen for years.

Trust
No one would have said in January that Microsoft will be the most valuable company at the end of the year. Wall Street approves of Satya’s strategy more than ever and the numbers don’t lie. I have seem tons of positive articles about Microsoft and Satya than I ever have before. Satya is a down to earth person with a human touch and humility.

Have a good 2019!

Hang on!

Since the release of one of my UWP apps, the top crash was hang_quiesce.

image
Clicking on this failure, I was in confronted by a sea of nothing. I.E. nothing meaningful from my app and all Windows code.

image
I did a little survey among other UWP developers and some of them also confessed that this crash was quite common. It is good practice to fix crashes because if you have a high number of crashes, it affects the search ranking in the Microsoft Store.

I reached out to my friends at Microsoft. Stefan Wick was kind enough to tell me the possible causes: the app is hung or it forgot to release the deferral. Also, Brandon Paddock suggested a solution to the deferral issue: add the notion of duration of the App.OnSuspending event to force quit the execution after X time.

Note: I don’t know exactly how long the OS gives to the deferral before it takes the execution as hanging. This is probably not a good idea to do tons of database operations for example.

My simple solution was to introduce a delay task of 2 seconds and used Task.WhenAny to make sure that that either the Delay or Suspend method finishes before 2 seconds. For my app, it is not crucial if the Suspend method does not finish.

image

After one month, I was pleased to see this crash at 1.44% instead of 22%!

image

I don’t guarantee that your “hang_quiesce” issue will be the same as mine, but it is definitely worth a try.

Happy debugging!

Important information about the new capability of broadFileSystemAccess in UWP apps

Update: There has been a bit of misunderstanding on how this works. The broadFileSystemAccess is a restricted capability that an application could be granted, it is not an API. As a developer as well, I have to opt-in to using the capability. Any application in the store with the capability goes through extra verification by the Store team before any user gets it and the user is aware they are granting the application the permission to use the capability as well.

Users of the application can turn off this ability at any time via their Privacy settings, a dev should check that it has the permission to access files since a user can turn on / off as shown on my screenshot below.

While reporting this to Microsoft, we discovered there was a documentation bug here as well. As every developer knows, this is something that does happen and they are proactively fixing it.


Recently, I learned that an UWP app can access the entire file system i.e. the app is not restricted to use the LocalStorage or files and folders via a Picker. You can find all the info from MSDN.

The moment that I implemented the feature, it was before the October 2018 Update. I noticed that the first time that I used an hardcoded file in “C:\myAppData”, I didn’t get any message and it just worked despite that MSDN said: “On first use, the system will prompt the user to allow access”. The app is a LOB app in an environment controlled by my client outside the MS store, so I was even more glad that the app does not ask any questions until the October 2018 Update arrived…

After I installed the October 2018 Update, I realized that my app was crashing at startup. I found out that accessing my file above was crashing the app. I thought that the manifest was altered, but no. I contacted my friends at Microsoft and they confirmed me two important info:

1- The Windows dialog that is supposed to be shown the first time a file is accessed does not trigger is a *bug*.
2- Because it is a privacy issue, Microsoft decided with the October 2018 Update to set to OFF the value of the broad access file system.

I actually learned that the list of applications that can have access to the file system resides in Windows Settings > Privacy > File system:
image

Fortunately, you can guide the user and force the display of this page settings with the following call:

await Windows.System.Launcher.LaunchUriAsync(new Uri(“ms-settings:privacy-broadfilesystemaccess”));

You can call this method after you have done a file system access in a try/catch and then determine if you need to launch the settings view.

Please note that toggling the value in the Windows Settings will make your app crashes if it is running. Warn the user accordingly.

Despite all the hiccups, the capability broad file access is a great feature.

Happy coding!

Beware of using Edit Template in a UWP app

Hello Devs,

When Microsoft released the Windows 10 April 2018 update, I installed it and I updated Visual Studio with the latest SDK. If you develop UWP apps where the min version is set to the latest Windows update (in this case Windows 10, version 1803, build 17134), you can stop reading here. However, if for example, the min version if the Fall Creators Update, please read on.

image

The other day, I was testing on my desktop machine the style that I modified of a simple TextBox. It was working well, until I deployed on my Dell Venue Pro 8. When I navigated to a page where I modified the TextBox, the app crashes every single time. I was wondering what was going on since Visual Studio didn’t warn me of anything.

If you add an TextBox and you click on “Edit Template”, the latest SDK will introduce the usage of the ThemeResource IsApplicationFocusVisualKindReveal. This resource does not exist in previous Windows 10 updates, so when the app runs on previous version, the app will crash.

image

What is worrisome is Visual Studio does not warn about anything (no warning message and no wiggle underline under the resource name).

I wrote an email to my XAML friends at Microsoft and they acknowledged what I found. They were actually surprised by that too. I will report back when they will find the solution for it.

In the meantime, I highly suggest that if you do an Edit Template with the April 10 SDK, go ahead and try in all of your supported Windows 10 updates.

Happy testing Smile

PS: it’s been quite a long time from my previous blog. Having kids and a new passion (Magic the Gathering competition) took a lot of my free time. I still work full time on UWP projects for years and I enjoy this more than ever!

NavigationCacheMode: A property that can save you a headache!

Windows 10 is here. There is no better time to start developing apps for the Windows 10 ecosystem.

If you are new to Windows 10 app development (or even 8.1 if you want to target Windows 8.1 / Windows Phone 8.1 users), there are some basic concepts that you need to learn: reactive design, application lifecycle, navigation, and so on.

This article is about one important property related to navigation (please continue to read!). If you develop an application that only has one page, you don’t have to worry about navigation. However, if your application has more than one page, you will need to use some navigation methods.

To illustrate the default behaviour of basic navigation, let’s create a Super Calculator application. You can download the sample here

1- Open any version of Visual Studio 2015 and go to “File \ New \ Project…” and select the template “Visual C# \ Windows \ Universal \ Blank App (Universal Windows)”. You can name the project “Super Calculator” and click OK.

image

2- Open the MainPage.xaml file and replace the Grid with:

<StackPanel
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    VerticalAlignment="Center">
        
    <TextBox
        x:Name="TextBoxNumber1"
        Width="200" />

    <TextBlock 
        Margin="0,10"
        Text="+"
        TextAlignment="Center"/>
        
    <TextBox
        x:Name="TextBoxNumber2"
        Width="200" />
        
    <Button Click="OnButtonCalculate"
            Content="Calculate"
            HorizontalAlignment="Center"
            Margin="0,10,0,0"/>

</StackPanel>

3- Open the MainPage.xaml.cs file and add the following method:

private void OnButtonCalculate(object sender, RoutedEventArgs e)
{
    int number1 = int.Parse(TextBoxNumber1.Text);
    int number2 = int.Parse(TextBoxNumber2.Text);

    this.Frame.Navigate(typeof(ResultPage), number1 + number2);
}

Here Frame.Navigate will navigate to the page specified with the type of the class.

4- Right-Click on the project SuperCalculator and select “Add \ New item… \ Blank Page”. Rename BlankPage1.xaml to ResultPage.xaml and click OK.

image

5- Open the ResultPage.xaml file and add the following inside the Grid:

<StackPanel 
    HorizontalAlignment="Center"
    VerticalAlignment="Center">

    <TextBlock
        Text="Result" />
            
    <TextBlock
        x:Name="TextBlockResult"
        FontSize="25"/>
            
    <Button 
        Click="OnButtonBack"
        Content="Back"
        Margin="0,10,0,0"/>

</StackPanel>

6- Open the ResultPage.xaml.cs file and add these two methods:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    TextBlockResult.Text = e.Parameter.ToString();
}

private void OnButtonBack(object sender, RoutedEventArgs e)
{
    Frame.GoBack();
}

Here Frame.GoBack will return to the previous page in the stack. In our case, it returns to the MainPage.

7- Run the application and put numbers in the 2 fields and click on the button Calculate.

You will see the expected result. However, what do you think will happen if you click on the Back button? There are 2 possibilities:

a) Navigation to the MainPage will include the numbers that you entered.
b) Navigation to the MainPage will reset the numbers that you entered.

If you are familiar with the Silverlight model, you know that returning to the MainPage will include the numbers. However, in Windows 10, the MainPage will be instantiated again and the numbers will be reset. The decision is debatable, but we have to deal with it and fortunately, Microsoft offers the property NavigationCacheMode if you want to override the default behaviour of instantiating the page again.

For the pages that you want to preserve in memory, you only have to add NavigationCacheMode=”Required” to the page declaration.

<Page
    x:Class="App2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App2"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    NavigationCacheMode="Required">

Note: don’t try to change the NavigationCacheMode outside the page declaration in XAML or in the constructor, it will not work.

The NavigationCacheMode offers the “Enabled” value that will preserve the page in memory if the cache limit of the frame is not exceeded. Personally, I prefer to set the value to “Disabled” or “Required” value.

There are lots of scenarios where you will set the NavigationCacheMode to Required. One example is when a page contains a GridView or a ListView with many items. If a user clicks on an item to consult the details on another page, don’t make him scroll again when he returns. Not only will the user’s experience be better, the page will return faster because there is nothing to load as everything is in memory.

If you want to know more about Windows 10, here is a list of great resources from Microsoft (all free):

Happy coding!

Free Microsoft MVA classes

There is no secret that the world of programming is huge. You can make applications for enterprises, you can create games, websites and so on. Microsoft has invested a lot in in their Virtual Academy over the last two years. The best part is that all the classes are FREE.

I won’t try to convince you how great the content is, you can just take a look at the following topics to start with:
C#/XAML
Mobile Development
Game Development
Cloud Development
App Development
Web Development
Quick Start Challenges
Aspiring Technologists
HTML5

No surprise, my suggestion is to start with the first two.

Happy learning!

My 1st year as a remote developer consultant with Microsoft technology

Having a dream and making it possible.

With the arrival of the Windows Phone platform in 2010, I fell in love with mobile app development. After two years, I was creating professional looking applications and was confident enough to contemplate creating my own company. However, there was always an excuse to not pursue this goal.

In summer 2013, the timing was perfect and I decided to go ahead and create a company and, more precisely, to incorporate it.

In this article, I want to share my experiences, my feelings and some tips.

First step: Find a name for your company

It might sound easy to do, but finding the name of my company was the hardest part in the process of incorporation. I literally spent a week figuring out a name.

The challenges to finding a company name are:

  • Find a cool/unique name or combination of words.
  • Make sure that the web address is available. You have no idea how hard is to find an available web address. It is even harder when your company name is short. Pro tip: buy your domain name as soon as you decide on your company name and before you tell anyone.
  • Make sure that the name doesn’t violate any international or national copyrights.
  • Verify that the name is legit in your city. I live in a place where the company name should start with a French word.

I ended up with “AppVenture Solutions Inc.” in English and “Solutions AppVenture Inc.” in French. Don’t look for my website, I haven’t built it yet.

Second step: Fill out the paperwork

When you want to incorporate a company, filling the paperwork is a complex and error-prone process. It is not a mandatory to incorporate, but my research and my friends’ recommendations led me to the decision to incorporate.

You have essentially three choices:

  • Do it yourself. You can go to the local government employment office and they can help you out a bit, but they won’t fill out everything for you. You will have to do your own research beforehand. This option costs about $400 to $500.
  • Hire a lawyer or a notary to complete your incorporation. It costs about $1100 to $1500.
  • Proceed with online private services.

I choose to fill the paperwork with a lawyer. In Montreal, I attended a (paid) workshop at SAJE en Affaires about incorporating a company that included the actual incorporation by a lawyer. I was able to ask any questions I wanted. I found it very valuable.

The price is higher when you incorporate with a lawyer/notary, but the service is #1 for three reasons:

  • You can get your incorporation in two days, because they have special access to a government portal.
  • You can ask to set up the company to optimize your family situation. I will explain more below.
  • You can get a binder with all the legal structures such as administrator roles, company rules, stocks, conventions and so on.

Third step: Find a contract

When your company is registered, you’re ready to start. Finding a contract is like finding a full time job. There are plenty of websites that offer contract work. However, when you have contacts and a good community around you, they can help you find work. One piece of advice is to stay engaged in the community and meet people live or online.

Always stay professional, you never know if a previous client would want to hire you again or even recommend you to other clients.

Last step: Closing your year

I don’t know the legislation in every country, but I suspect that most counties require you to do your annual report. Here again, you can fill your tax reports out yourself, but that’s another bumpy road. My advice is to hire an accountant for the first few years, so you can concentrate on what you are good at and be confident that your annual tax reports will be error-free. I suggest that you set aside $2500 to $3000 for the service of an accountant.

Observations

After my first year, I’m very pleased with the results and I don’t regret a second of it. As if creating a new company was not enough, I survived my first year being a daddy to a beautiful daughter. Like every job situation, there is a good side and a bad side to being a consultant. Here are some advantages and disadvantages when you are independent and/or working remotely.

Advantages of being independent

  • There is no secret that being independent will give you a big boost in salary.
  • You have more flexibility when managing your personal finances. When you have an incorporation, you are a shareholder by default. You can also be an employee of your own company. Depending of your strategy, you have full control on the amount that you want to give yourself as dividends and salary. This way you can reduce the amount of personal taxes that you need to pay to the government. You can also do income splitting with a member of your family.
  • If you bill your client per hour, your overtime will also be paid. This is a big advantage, because when you are an employee of someone else, your overtime is not paid. You might be compensated later, but it will not be a one-for-one equivalent.
  • If you don’t like working on the same product for years, being independent will offer you the freedom to choose the contracts based on duration.
  • Between contracts, you can take as many weeks of vacation as you like.
  • Items related to work as computers, tablets, phone, office furniture are treated as expenses and are tax-free (the taxes are deducted from the amount that you bill to your clients). It is good excuse to renew your equipment more often.

Disadvantages being independent

  • You might feel insecure about what’s next. There is no 100% secure job in the world, but there are some companies where jobs are more secure than others. When you are on your own, you find your own contracts. Also, at any time, a client can abort a project.
  • Between contracts with different clients, they might be a delay that you don’t want. Also, you might get many interesting offers at the same time, but less opportunities in other periods of time. You can’t control when contracts appear.
  • You need to take care of your own benefits. If you want medical insurance, you need to find yourself an insurance company.
  • You need to be more responsible regarding your expenses and revenues. You need to be prepared to justify every penny of your company at any time.

Advantages working remotely

  • When you work remotely, most of the time, you can have a flexible work schedule. This is very useful when you need it.
  • You don’t waste any time in traffic or transport. You have more quality time for yourself.
  • If you have a family at home, you can spend some time with them at lunch and say hi during the day. I was happy to be able to see my baby growing up in her first year.
  • You can work in any type of clothing.

Disadvantages working remotely

  • If you are someone who likes meeting people in person in your day to day life, being a remote worker might not be the ideal situation for you. However, you can still create your company and be independent. In fact, most jobs are in the client’s offices.
  • You need to be more disciplined at home than at the office due to the fact that there are more distractions in your home than in an office.
  • You might feel guilty when there is a holiday and you want to take a day off. Since holidays are different from country to country, your client or team may not have a holiday on the same day as you. No work means no money for that day.
  • If you don’t do sports after work, you exercise much less because you walk less in your day.

Special shout-outs

Thanks to my friends at RedBit that offered me my first contract. It was a fun and busy three months working in C# and WPF.

My second contract started at the beginning of this year and at the time of writing this article, the contract is still going on for a minimum to end of the year. I’m working for the mobile app development company Lextech, based in Chicago. This company is headed by technology strategist Alex Bratton who also wrote the book Billion Dollar Apps.

Aside from my great teammates and the awesome Windows project that I’m working on, I like that Lextech is using Sococo as a virtual office tool. It helps to increase communication within the team and you can easily see the availability of your coworkers. A big thumbs up to Lextech for treating their contractors as employees; we attend their weekly meeting with employees and have access to their internal documentation.

Pssst: Lextech is growing fast and they have open positions. App mobile development is the place to be.

Conclusion

Creating your company is very exciting and a great challenge. The future might be a little bit scary, but work a day at a time and everything will be alright. If it turns out that it is not your thing, you can always go back to being an employee. Don’t hesitate to ask for advice from friends or mentors. There are plenty of entrepreneurs that succeeded and you can be one too.

Feel free to contact me if you have any questions.

Good luck!

Sébastien
@archiecoder

The full story of featured and spotlighted apps on Windows Phone

Last year on April 10th, I released App Spotlights. The primary goal of App Spotlights is to help developers; the app notifies them when their apps are in the spotlight in any of the 129 markets worldwide. The app also helps to analyze the competition. In addition, you can obtain the history of when your apps have been in the spotlight since February 17th, 2013.

After one year, my database has more than one million spotlighted apps. Throughout the year, the #1 complaint from users was that sometimes they saw their apps spotlighted on their phone, but App Spotlight was not reporting their apps. I explained to each user that Nokia had their own spotlighted apps (for Nokia phones only), and that I did not have access to this data.

Every day, I have a service on Microsoft Azure that fetches the data from http://www.windowsphone.com/store for each market.

SNAGHTML8b1097f

In order to access the Nokia data from Microsoft, you must log in with a Nokia phone.  As Microsoft Azure is a cloud service, it is impossible for it to log in as a Nokia phone, and therefore I am unable to fetch the Nokia spotlight data. I should write: “I was unable to fetch”… please read on.

Featured applications

Recently, I had an interesting discussion. I learned that each day Nokia can choose up to half of the featured apps for their Windows Phones in each market. Please note the word featured: when I started fetching the spotlighted app data, I was aware of featured apps, but I was a bit confused about the difference between featured and spotlighted. Now I know the difference.

The Spotlighted apps are a combination of the Featured apps and Featured games. You can see the links (you can replace the en-ca with any market code:

The spotlighted apps use the first few apps from the featured apps and featured games. As you can imagine, the big tiles on the spotlight page generate way more downloads for the first few apps than the last few apps.

When you open the Store application on Windows Phone, there is a major spotlighted app.

wp_ss_20131104_0003

This app is not featured anywhere on the Windows Phone website. This spot will have the biggest impact on your download count than any spotlight spot. Good luck getting there!

With more than one hundred markets, it is hard work for Microsoft and Nokia to decide on the featured apps. For key markets such as USA, UK and France, the featured apps are chosen manually. For small markets such as Kenya, the featured apps are based on an algorithm.

What’s new for App Spotlights

I’m pleased to announce that I have found the secret to obtaining the data for both the Microsoft and Nokia featured apps and featured games along with the big spotlight in the Windows Phone Store without relying on the Windows Phone website.

Starting today, App Spotlights fetches and displays the full list. The change has been applied on the backend only, so your app doesn’t need an update. Every day, you will have all the information about when and where your apps are featured. For the moment, App Spotlights doesn’t tell you if your apps are featured with Microsoft, Nokia or in both places. This feature might come later!

SNAGHTML8f33725

Calling All Canadian Windows Phone and Windows Developers!

Since the arrival of the Windows Phone, the Canadian evangelist team has offered great promotions each year to entice developers to create apps. In my opinion, their promotions for Canadian developers are the most attractive worldwide. This year the Developer Movement is back. To make things a little bit different, they have a new theme: Don’t just code… Code Kwondo.

You can watch three funny videos: Introduction, Strength, and Focus.

If you need convincing that apps will give you money, please take a look at the rewards list. The list is quite impressive. If you didn’t click the link: what about an Xbox One, Surface 2, ASUS Zenbook, GoPro HD, Dell Ultrasharp, etc…

If this is not enough, I have more good news for you: you can also participate in the DVLUP challenges. In other words, it is perfectly legal to do one Windows Phone application and submit it to the Developer Movement and DVLUP.

Masters of Code Kwondo

Now that my introduction about the Developer Movement is done, I can introduce you to the application Masters of Code Kwondo. In truth, it is two applications: one for Windows Phone and one for Windows. The purpose of the application is to showcase the list of applications that Canadian developers have made during the Developer Movement. The Canadian population is small compare to the United States, but we have good developers like Brock (over 600 000 XP on DVLUP) and Atley Hunter (over 400 apps), just to name two. In the app, you’ll also discover “Code Masters”, those people can help you if you have development issues.

Message to the Canadian developers: if you made applications any time after November 2013 and they are available in the store, please give me the name of your applications using my contact form. It will be a pleasure to showcase your apps in Masters of Code Kwondo.

At the beginning the list of apps will be short, but don’t worry, the Masters applications will notify you when new apps are added.

Masters-of-Code-Kwondo

WindowsStore_badge_en_English_Black_med_258x67

258x67_WPS_Download_blk

 

 

Masters of Code Kwondo

Happy coding and get rewards!