The Skype sign outside the Palo Alto office

Once more unto the breach, dear friends, once more

As regular readers will know, I’m clearly not one for settling down and the time has come yet again for major changes in the Lakin household. Today marks a major step forwards in our next move because my passport came back from the US Embassy with my L1-A visa stamp in it, so we’re officially able to make that move.

Back in April 2012, I blogged about “New Challenges” as I moved from working for the most awesome Robby Ingebretsen at Pixel Lab to Skype for Windows Phone in Stockholm. Then in August 2013 it was time to move onto to move “From Windows Phone to Xbox One” where I had a great time and was really proud to be part of the Xbox One launch last year. Arguably the most enjoyable day of my working career as we all unboxed our white ship gift consoles and started playing games in the office!

Well, the cycle is slightly shorter this time, but so is the description of what I’m doing. All I can do is say that it’s new, it’s part of Skype, but not the regular Skype client. I’m moving lock, stock and barrel out to the Californian sunshine to the Skype Palo Alto office to work on exciting new things and I can’t wait to be able to talk about the project publicly!

Piccolo.Banner

BETA: Piccolo

Piccolo.Beta.QRI’m about to start the beta for a new Windows Phone app that I’ve been working on. This is a first for me, I usually go straight to market, but this time I want to get feedback before I go live to ensure I hit the market with as good a product as possible.

UPDATE: The beta is now available at http://is.gd/piccolo_beta

What is Piccolo?

I don’t know about you, but every morning I go through the same process:

  1. Unlock my phone.
  2. Check to see what appointments I have in my personal and work calendars.
  3. Check the weather forecast for today.
  4. Check for new tweets on a Twitter list of people I follow (the ones that I really wouldn’t want to miss any tweets from).
  5. Check the news for the current headlines.
  6. Check Instagram for new images from the small list of people I follow.

This involves using five different apps and whilst I do love the Start screen on Windows Phone and the Live Tiles that these apps I use provide, they just don’t give me enough information without loading the app. So every morning I’m in and out of five different apps and then I can get on with my day. The focus on content not chrome means that I can get the information I want relatively quickly and without distraction, but that’s still focused time before I can get started.

Piccolo is my attempt to solve this problem by providing the information that you want, all in one app. I understand that different people care about different things, not everyone uses Twitter or Instagram and some people are happy to just look out the window to see what the weather is like, but other people are hooked on Facebook, tumblr or other services. So, I decided to use a “data provider” model which enables me to have a single infrastructure that handles the presentation of data and settings, and then each data provider is responsible for fetching and displaying it’s own data.

At the moment, I have built data providers for reading Appointments from the calendars registered on the device and I’ve also built a weather forecast provider that uses data from Forecast.io. Needless to say, I have plans to implement plenty more data providers including Twitter, Facebook, news, and more, but I’m interested to know what data you want.

How can I get involved?

If you want to take part in the beta, just sign up to the beta mailing list and I’ll add you to the beta. As you use the beta, please add any bugs, feedback, comments or suggestions to the UserVoice forum over at http://piccoloapp.uservoice.com

The first version is being ingested right now, so what are you waiting for?

Screenshots

WebBrowser.Touch

Disabling Touch on a WebBrowser control

If you’re presenting content to the user with a WebBrowser control, but it’s not meant to be interacted with, then you will probably want to disable touch input to prevent the user from scrolling or zooming. Although setting IsEnabled or IsHitTestVisible to False can give you want you want, it’s also likely to mess with the appearance (a grey overlay). So, to work round this, use CSS in the source HTML like so:

<style type="text/css">
    html {
        overflow: hidden; /* Disable scrolling */
        -ms-content-zooming: none; /* Disable zooming */
    }
Markdown Notepad

APP: Markdown Notepad

Now available in the Store for Windows Phone 8 apps, my latest app is a simple notepad app that uses the Markdown format. Ingeniously called Markdown Notepad, this app builds on the Markdown features that were built into Visual Diary and extends it with note backup to the cloud. After a few false starts trying to use SkyDrive (a service which I love!) for the cloud backup feature I found that the SDK didn’t give me what I wanted, so I used Buddy instead. Whilst this meant that the service wasn’t quite as friction free as I’d have liked it to have been because I then had to create the user management (registration, login, forgotten password), the API was simple to use and I’ve been really happy. The Buddy team were really responsive and quick to fix the couple of bugs that I found. I’d be happy to share the service wrapper that I created and even consider turning the user management stuff into a reusable control if anyone is interested.

As always, your ratings and reviews are welcome in the Store, and you can give feedback at http://gapshooter.uservoice.com/

Page01 Page02 Page03 Page04 Page05 Page06

LaunchTeam_wide

Skype for Xbox One

Today sees the launch of the Xbox One around the world, which is another great landmark in my career. There’s plenty written about the road from Xbox 360 to Xbox One and there are plenty of reviews for you to read (my favourite is the Polygon review, which looks amazing in addition to being balanced, honest, and accurate), so I won’t jabber on about it for long. However, Xbox One brings to the living room not just gaming, but entertainment in general with HDMI pass-through for watching your TV through your Xbox, the amazing Skype client, and much more.

After a successful time with the Skype for Windows Phone team launching Skype on Windows Phone 8, I am totally stoked to be part of the team that has launch Skype for Xbox One and to be part of the launch of Xbox One in general and I’m really proud to have the “One Launch Team 2013″ watermark on my Xbox Live profile (which you can see in the image above). I think we’ve got an excellent launch product that the whole team are really proud of. As always, there’s plenty more to come!

We’d love to hear your thoughts and experiences over on the Skype Community.

P.S. If you want to see how cool Autozoom on Skype for Xbox One is, check out this video.

Microsoft Advertising

AdException using Microsoft Advertising SDK

When you’re developing Windows Phone apps using the Microsoft Advertising SDK, you may not see any ads when you were expecting to. This is likely to be accompanied by the following message in the Output window in Visual Studio:

An exception of type 'Microsoft.Advertising.Shared.AdException' occurred in Microsoft.Advertising.Mobile.DLL and wasn't handled before a managed/native boundary.

There’s a couple of things to check here:

  1. Make sure you have ID_CAP_PHONE_DIALER in your capabilities (I have no idea why the Ad SDK needs the capability!).
  2. If you’re running in the emulator and using actual Application and Ad Unit Ids, you won’t see any ads. You should use “test_client” and “Image480_80″ for testing (NOTE: the casing is important).
  3. If all else fails, add an event handler for the ErrorOccurred event on the AdControl to see what’s happening:
var ads = new AdControl;
  {
    "test_client",
    "Image480_80",
    true
  };
  ads.ErrorOccurred += (o, e) =>
  {
    System.Diagnostics.Debug.WriteLine(e);
  };

I’m sure this is fairly well covered elsewhere, so it’s more of a “note-to-self”.

Xbox One

From Windows Phone to Xbox One

Skype for Windows PhoneThe last time I wrote about New Challenges I’d been at Pixel Lab for 15 months. Well, it seems that 15 months is my new standard job duration because 15 months after starting at Microsoft working on Skype for Windows Phone, I’ve moved on again.

During my time on the Skype for Windows Phone I’ve worked on the initial release for Windows Phone 8 including background chat and calling and the numerous releases since then. We switched to a much shorter release cadence and have only skipped one release since. The app has gone from strength-to-strength including the significantly improved resume performance, much more reliable push (which I spent a lot of time working on) and there is much more greatness to come. The agile nature that the team works makes it hard to put your finger on individual things in the app that you have been responsible for, but needless to say, I’ve fixed a lot of bugs and been involved at all levels on the app. My most externally obvious contribution won’t be seen for another release yet, but I’m proud of what I’ve achieved and hope that users like it, too.

In December I was fortunate enough to take on a Senior Development Lead role within the team and was line manager for just over half of the development team. It’s been an honour and a privilege to work with them and the wider team and I wish them all the best for the future. Although I’m not actively working on the team any more, I am still a passionate Windows Phone user and will be keeping a close eye on the progress of the Skype app and the platform.

Xbox OneYesterday was my last day on the Windows Phone team and today is my first day on the Skype for Xbox One team. I’ve actually been sat amongst the team since my return to the UK, but have had very little opportunity to participate, but now there’s no holding me back :) I’ve got a console, a controller, and a screen on my desk and the source code on my laptop. The release is fast approaching and I’m really excited to be part of the team responsible for putting Skype on the best console!

Zune

Detecting Zune Connection for PhotoChooserTask

When you’re using the PhotoChooserTask to get the user to select or take a photo you may have experienced the problem when the user is connected to Zune because this prevents them from accessing their media library. Unfortunately, from a development point of view, the Complete event that fires simply provides Cancel as the Result, which is the same result for when the user simply presses the back button.

I’ve seen a few solutions to this problem; one was a timer based hack, one was a complicated solution regarding checking network interface types, and yet another tried to access the MediaLibrary and trap the resulting exception. I think these are relatively old solutions (taking into account that Windows Phone isn’t much over a year old!) and I flat out refused to use the timing hack, the network interface type solution didn’t work because it relied on reporting Ethernet when connected but I was getting None, and the final solution failed to throw the expected exception!

Fortunately, after some more investigation I stumbled across the solution. Not only does the Complete event give a result of Cancel, but the Error property is an InvalidOperationException, which gave me the following solution:

private void PhotoChooser_Complete(object sender, PhotoResult e)
{
    if ((TaskResult.Cancel == e.TaskResult) &amp;&amp;
        (e.Error is InvalidOperationException))
    {
        // Zune software connected.
        MessageBox.Show(
            "Your phone is connected to the Zune software and cannot select a photo. Close the Zune software or disconnect your phone and try again.",
            "Zune Connected",
            MessageBoxButton.OK);
    }
    else if (TaskResult.OK == e.TaskResult)
    {
        // Carry on as usual.
    }
}

NOTE: I actually use a toast-style notification here instead of a message box, but that’s a whole other post :)

Skype

New Challenges

Silverlight Jetpack ThemeI’ve been working for Pixel Lab for the last 15 months as a full-time employee and a while before that as a contractor and it’s been an absolutely crazy and amazing time. I’ve worked on some great projects including the Halo Silverlight website back when Halo: Reach was released (not the current one), the Silverlight JetPack theme, and the Windows Phone 7 templates for SketchFlow. I started working on Windows Phone projects before the devices were physically available and have been privileged to work on apps such as RunKeeper, Guardly, and another as yet unannounced app.

 

Robby and the rest of the team at Pixel Lab have been absolutely amazing to work with and my time at Pixel Lab has definitely been the highlight of my career so far. In all honesty, I thought I was staying there for good, however, sometimes in life opportunities arise that you simply can’t turn down, which is where I find myself right now. On Saturday myself and my family moved to Stockholm in Sweden and today I took up the position of Senior Software Development Engineer on the Windows Phone team at Skype!

I’m extremely passionate about user experiences and the Windows Phone platform and so I’m really excited about this opportunity and contributing to such a widely used app on such a great platform.

Overriding System Tray Colours

When branding an application you often want to enforce a specific theme (trying to fit in with light and dark themes often doesn’t work with many brands), then I would definitely reccomend using the ThemeManager by Jeff Wilcox. With one line of code you can enforce either the light or dark theme, and then just apply your own custom backgrounds, etc. With one extra line of code you can also change the accent color to a specific color (if you use the latest from NuGet).

However, the purpose of this blog post was not to highlight Jeff’s great work (though that’s a handy side effect), but to highlight a problem with the light theme. If you try to set the System Tray ForegroundColor property to White this won’t work; under the light theme you’ll be left with a black-on-black system tray.

If you look closely at the documentation for the SystemTray.ForegroundColor property, in the Remarks section it states:

You cannot set the foreground to white. Use a color close to white instead.

So, if you use a color such as #EFFFFFFF you will the desired effect that is almost indistinguishable from an actual white-on-black system tray.

Skype for Xbox dev writing Windows Phone apps in my own time