<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0YNSXs-eSp7ImA9WhFSE0g.&quot;"><id>tag:blogger.com,1999:blog-33176002</id><updated>2013-06-16T04:59:58.551+01:00</updated><category term="nokia_dev" /><category term="user groups" /><category term="Mobile" /><category term="Windows Mobile" /><category term="Customer service" /><category term="Book Notes" /><category term="DevDays" /><category term="Windows 8" /><category term="Project52" /><category term="ThisIsBroken" /><category term="DevEvening" /><category term="smsdejavu" /><category term="PhoneGap" /><category term="misc" /><category term="Windows Phone" /><category term="Windows Phone 7" /><category term="wpug" /><category term="evdevshokno" /><category term="About this site" /><category term="business [common] sense" /><category term="alphalabs" /><category term="quotes" /><category term="software dev" /><category term="Android" /><category term="writing" /><category term="usability" /><category term="rant" /><category term="database" /><category term="presentations" /><title>Matt Lacey: Awesome with Windows Phone</title><subtitle type="html">Windows Phone development tips, tricks and thoughts to help you make awesome apps.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.mrlacey.co.uk/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>577</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MattLacey" /><feedburner:info uri="mattlacey" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C08FQXg-fip7ImA9WhFSE00.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-252987579324246047</id><published>2013-06-15T14:10:00.001+01:00</published><updated>2013-06-15T14:10:10.656+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-15T14:10:10.656+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="nokia_dev" /><title>Renewing a Windows Phone developer subscription with an MSDN token</title><content type="html">For the last 3 years I've paid (yes, with real money) for my Windows Phone developer subscription. As I've just come up for renewal again I wanted to use the token I get as part of my MSDN subscription (that I also pay for).&lt;br /&gt;
&lt;br /&gt;
In the phone dev centre there was a nice link prompting me to renew. On that renewal page there was an option to pay for renewal or enter a code. Obviously I wanted the "enter a code" option but where to get that code from? Unfortunately it wasn't as easy to find as I would have liked so I thought I'd share it here.&lt;br /&gt;
&lt;br /&gt;
It's actually quite simple (once you know how)&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Log into your account on msdn.microsoft.com.&lt;/li&gt;
&lt;li&gt;Got to &lt;a href="https://msdn.microsoft.com/en-us/subscriptions/manage/"&gt;https://msdn.microsoft.com/en-us/subscriptions/manage/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Under the Subsccription Benefits find "Windows Phone developer account"&lt;/li&gt;
&lt;li&gt;Click on the "get code" link to reveal your code - it is a GUID&lt;/li&gt;
&lt;li&gt;Enter that code (GUID) in to the phone dev center renewal page.&lt;/li&gt;
&lt;li&gt;Done!&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Hope this helps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/srJMF1mA_eg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/252987579324246047/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=252987579324246047" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/252987579324246047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/252987579324246047?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/srJMF1mA_eg/renewing-windows-phone-developer.html" title="Renewing a Windows Phone developer subscription with an MSDN token" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/06/renewing-windows-phone-developer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYGSH04fCp7ImA9WhFSEEo.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-2019702335282524491</id><published>2013-06-12T22:22:00.001+01:00</published><updated>2013-06-12T22:22:09.334+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-12T22:22:09.334+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="nokia_dev" /><title>ShellTile.ActiveTiles sometimes forgets about one of the tiles</title><content type="html">A couple of times, when working with an app with lots of tiles pinned, I've seen `ShellTile&lt;span&gt;.&lt;/span&gt;ActiveTiles` "forget" about one of the tiles.&amp;nbsp; By that I mean that when updating all the tiles from a background agent one of them isn't updated.&lt;br /&gt;
&lt;br /&gt;
This is with code like:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (var tile in ShellTile.ActiveTiles)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // update the tile. &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the moment I only have anecdotal evidence of this behaviour but wondered if anyone else could shed any knowledge or experience of this while I continue to investigate.&lt;br /&gt;
&lt;br /&gt;
Deleting and repinning the tile in question seems to make the problem go away but this isn't a real solution.&lt;br /&gt;
Additionally it doesn't seem like it's the first or last created pin but I can't be sure of this. &lt;br /&gt;
&lt;br /&gt;
Has anyone else seen this?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/X-92oSgcKFQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/2019702335282524491/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=2019702335282524491" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2019702335282524491?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2019702335282524491?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/X-92oSgcKFQ/shelltileactivetiles-sometimes-forgets.html" title="ShellTile.ActiveTiles sometimes forgets about one of the tiles" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/06/shelltileactivetiles-sometimes-forgets.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8EQXY-fCp7ImA9WhFTGUU.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-1767522543599298426</id><published>2013-06-08T12:35:00.000+01:00</published><updated>2013-06-11T22:56:40.854+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-11T22:56:40.854+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="nokia_dev" /><title>LongListSelector does not "play nicely" with a static DataContext</title><content type="html">Here's a lesson from a day lost to debugging an obscure issue.&lt;br /&gt;
&lt;br /&gt;
Microsoft &lt;a href="http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/05/23/windows-phone-8-xaml-longlistselector.aspx"&gt;recommend &lt;/a&gt;that you should "use the LongListSelector instead of &lt;b&gt;ListBox&lt;/b&gt; for phone apps".&lt;br /&gt;
&lt;br /&gt;
That's great advice, especially if upgrading an existing app where ListBox wass used previously. But there's a gotcha you may need to be aware of.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;If a LongListSelector is bound to a static ItemsSource then a reference is held that stops the page being collected. &lt;i&gt;This means that such a page would leak memory!&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
If it's a large or complex page or one that is opened a lot (so you end up with lots of copies in memory) this could be very bad for your app.&lt;br /&gt;
&lt;br /&gt;
This doesn't happen when bound to a non-static source. It also doesn't happen when using a ListBox bound to either a static or non-static object.&lt;br /&gt;
&lt;br /&gt;
If you're upgrading an app built several years ago when using a static view model seemed like a not unreasonable way to architect an app you may be more likely to hit this. (That's why I discovered the issue-when upgrading an app originally written in 2011.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Don't believe me or want to see this in action for yourself?&lt;br /&gt;
I've put a project at &lt;a href="https://github.com/mrlacey/WPMisc/tree/master/LlsStaticTest"&gt;https://github.com/mrlacey/WPMisc/tree/master/LlsStaticTest&lt;/a&gt; which demonstrates all the above.&lt;br /&gt;
It allows opening of pages which contain:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;a ListBox bound to a static object;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;a ListBox bound to a non-static object;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;a LongListSelector bound to a static object;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;a LongListSelector bound to a non-static object;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;and a way to force garbage collection.&lt;/li&gt;
&lt;/ul&gt;
Each page also outputs creation, navigation and destruction information to the debug window.&lt;br /&gt;
To see this in action, open each page then tap "FORCE GC" twice and you should see the destructors for all but the static LongListSelector page being called.&lt;br /&gt;
You can also see the same by running the app through the memory profiler but I think it's easier and faster to see this problem via the debug output.&lt;br /&gt;
&lt;br /&gt;
There are two ways to address this issue:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Remove the use of a static view model. Depending on your application this may or may not be a viable solution but I would recommend against using a static view model whenever possible.&lt;/li&gt;
&lt;li&gt;Remove the binding when backing out of the page. It feels slightly imperfect but works and is easy to do.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
To remove the binding when leaving the page, just do something like this.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background: white; color: black; font-family: Consolas; font-size: 16px;"&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;OnNavigatedFrom(&lt;span style="color: #2b91af;"&gt;NavigationEventArgs&lt;/span&gt;&amp;nbsp;e)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnNavigatedFrom(e);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&amp;nbsp;The&amp;nbsp;following&amp;nbsp;removes&amp;nbsp;the&amp;nbsp;binding&amp;nbsp;of&amp;nbsp;the&amp;nbsp;LLS&amp;nbsp;to&amp;nbsp;the&amp;nbsp;VM
    // so&amp;nbsp;the&amp;nbsp;page&amp;nbsp;can&amp;nbsp;be&amp;nbsp;collected&lt;/span&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(e.NavigationMode&amp;nbsp;==&amp;nbsp;&lt;span style="color: #2b91af;"&gt;NavigationMode&lt;/span&gt;.Back)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.DataContext&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;
&lt;br /&gt;
Note that this is done in OnNavigat&lt;b&gt;ed&lt;/b&gt;From and not in OnNavigat&lt;b&gt;ing&lt;/b&gt;From as if done before you have navigated away from the page the removal of the binding may cause the UI to update and you may see screen flicker before the page closes. &lt;br /&gt;
&lt;br /&gt;
This discovery was found via a lot of experimentation, insight and a process of elimination.I couldn't find any indication of what was holding a reference via the profiler. If you know where this would be indicated (or even hinted at) I'd love to know.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/6xjyzyrpKak" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/1767522543599298426/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=1767522543599298426" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/1767522543599298426?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/1767522543599298426?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/6xjyzyrpKak/longlistselector-does-not-play-nicely.html" title="LongListSelector does not &quot;play nicely&quot; with a static DataContext" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/06/longlistselector-does-not-play-nicely.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UAQXw5fyp7ImA9WhFTFko.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-4894558908077697702</id><published>2013-06-08T09:14:00.000+01:00</published><updated>2013-06-08T09:14:00.227+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-08T09:14:00.227+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rant" /><category scheme="http://www.blogger.com/atom/ns#" term="business [common] sense" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="Mobile" /><title>App store credibility</title><content type="html">&lt;span style="font-size: x-small;"&gt;I'm thinking out loud here. If I wander I'm sorry. If I cause you to jump to conclusions, please don't attribute them to me if they're your conclusions rather than mine.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Do apps that get featured in the marketplace/app store matter?&lt;/b&gt;&lt;br /&gt;
It's been well documented that being featured in the store directly leads to an increase in downloads. In that respect, being featured matters to the person who owns/created the app. But I wonder...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Do they have a bigger impact?&lt;/b&gt;&lt;br /&gt;
Do featured apps impact more than just those who created or downloaded the app?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Does the quality of a featured app impact opinion on other apps?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If it's the featured app I'd expect it to be either highly popular or (and hopefully "and" as well) of a very high quality.&lt;br /&gt;
&lt;br /&gt;
If a featured app isn't very good (however that's defined) isn't it reasonable to assume that, as a consumer of apps, I should not hope for very much from other apps either? Afterall isn't the purpose of a featured app to highlight something I may want to install and use? Why would something that isn't very good be featured?* &lt;i&gt;You want me to install crummy apps that aren't as good as others which do the same thing?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I see many featured apps that aren't very good, do not give me confidence in the general quality of other apps, are buggy or otherwise very poorly designed. :(&lt;br /&gt;
&lt;br /&gt;
And a related question:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Does the credibility of the store affect apps? and the platfom?&lt;/b&gt;&lt;br /&gt;
Let's take, as an example, a recently featured app.&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;I'm
 anonymising the app in case my comments are taken as being focused 
directly at the app. That's not my aim. I'm trying to look at the wider 
picture.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It had no description (just the default text of "Check out this Featured App of the Day!") and a single rating.&lt;br /&gt;
&lt;br /&gt;
That's right the app that the store thinks I should know about today, because it's good, relevant to me or in some other way useful has only ever had a single review. That's not encouraging, because we konw that ratings are a two part feedback mechanism. The number of ratings is an indicator of the number of people who have also used that app - there are very, very few apps with large numbers of users and very few ratings. The average (mean) value of the the ratings (subject to skewing from a small sample size) gives an indication of the quality of the app.&lt;br /&gt;
&lt;br /&gt;
So, from that we can infer that the "best" app in the store today has a small user base. But maybe that's because it's new. Nope. It's had 5 updates and the last of which was 8 months ago.&lt;br /&gt;
&lt;br /&gt;
Maybe the featured app is being targetted directly at me based on some heuristics or algorithm based on my other app and device usage? I doubt it and I hope not because if that's the case the algorithms are way off. &lt;br /&gt;
&lt;br /&gt;
And what of that review:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-dUtIdab6Qdk/Ua220Fp0OuI/AAAAAAAAAd8/XP9uStFOzCk/s1600/wp_ss_20130604_0003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-dUtIdab6Qdk/Ua220Fp0OuI/AAAAAAAAAd8/XP9uStFOzCk/s1600/wp_ss_20130604_0003.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I've anonymized it because the app in question doesn't count and the review included three potentially offensive words which weren't filtered or masked by the store.&lt;br /&gt;
&lt;br /&gt;
I find the ratings count potentially confusing. It says there was one 4 star rating but we can only see one review. There's lots of potential here for confusion. Can't the store count? And if not what confidence should I put in it?&lt;br /&gt;
Actually zero star ratings aren't included in the average. If they were there would be 2 ratings with an average of 2 stars. This would bring average ratings down and so, while potentially misleading, ignoring them improves the overall perceived quality of apps. - I'm not sure what I think about this.&lt;br /&gt;
This is a consequence of there not being a way to actually give a no star review because the interface for leaving reviews and ratings doesn't have a way to distinguish between a rating not being left and a rating of zero. Ignoring no star ratings may be preferable to including the scores from reviwers who forget to give a rating though. I don't have the figures to say if this is an issue. I bet the people who are genuinely wanting to leave no star reviews (like the one above) are disappointed their rating is ignored though. &lt;b&gt;Do people realise that zero star ratings are ignored and if you want to rate an app badly you must give it a 1 star review&lt;/b&gt;? &lt;br /&gt;Anyway, I think I'm getting off topic.&lt;br /&gt;
&lt;br /&gt;
If the store doesn't look great (i.e. doesn't appear to be able to count) then won't your opinion of the apps it sells be tainted? When you buy something from a physical store does that affect your opinion of the products you can buy in that store?&lt;br /&gt;
&lt;br /&gt;
And what about the store as an app. The quality of it, like any app, impacts the perception of the platform. It's easier to say "that phone's rubbish" rather than "app X on phone Y is rubbish" or "it's hard to find good apps on phone Y".&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Am I against apps and their developers getting promotion?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
No, I want people to create successful apps. But I'd rather they had an awesome app that was successful, offered real value, helped people and showed what was possible with an app.&lt;br /&gt;&lt;b&gt;&lt;i&gt;The quality of apps impacts the whole ecosystem and that in turn affects all of us, both the consumers and creators of apps.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;* I'm aware of some of the finer points about what is featured and the business deals and implications that impact marketplace promotion. I've just chosen to ignore them for the sake of this post. They don't impact every featured app and would just serve to complicate the above thoughts. Anyway - my blog, my rules. ;)&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/PKyYwwbom-4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/4894558908077697702/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=4894558908077697702" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/4894558908077697702?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/4894558908077697702?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/PKyYwwbom-4/app-store-credibility.html" title="App store credibility" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-dUtIdab6Qdk/Ua220Fp0OuI/AAAAAAAAAd8/XP9uStFOzCk/s72-c/wp_ss_20130604_0003.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/06/app-store-credibility.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQMRXwzeyp7ImA9WhFTEkU.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-2279782608890153476</id><published>2013-06-03T20:39:00.001+01:00</published><updated>2013-06-03T20:39:44.283+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-03T20:39:44.283+01:00</app:edited><title>New business cards :)</title><content type="html">&lt;div class="separator" style="clear: both;"&gt;
I've given them an update and added some new background colours. :)
&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
Nothing really to see here. Feel free to move on.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-nfOxp3jM_LY/UazwRSBA-PI/AAAAAAAAAds/icuO-KPPuow/s1600/new-business-cards.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="492" src="http://4.bp.blogspot.com/-nfOxp3jM_LY/UazwRSBA-PI/AAAAAAAAAds/icuO-KPPuow/s640/new-business-cards.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/TvKdXpzjDAE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/2279782608890153476/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=2279782608890153476" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2279782608890153476?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2279782608890153476?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/TvKdXpzjDAE/new-business-cards.html" title="New business cards :)" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-nfOxp3jM_LY/UazwRSBA-PI/AAAAAAAAAds/icuO-KPPuow/s72-c/new-business-cards.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/06/new-business-cards.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8CQno6eCp7ImA9WhBaF0o.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-2476063056642964223</id><published>2013-05-28T22:01:00.000+01:00</published><updated>2013-05-28T22:01:03.410+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-28T22:01:03.410+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Win phones for getting your PhoneGap app running on Windows Phone</title><content type="html">Built an app with PhoneGap? If so you could win a phone and a Surface if you also release it for Windows Phone.&lt;br /&gt;
&lt;br /&gt;
Just head on over to &lt;a href="http://www.phonegapwpchallenge.com/"&gt;http://www.phonegapwpchallenge.com/&lt;/a&gt; for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://blogs.windows.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-53-84-metablogapi/clip_5F00_image002_5F00_thumb_5F00_43F15E0B.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://blogs.windows.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-53-84-metablogapi/clip_5F00_image002_5F00_thumb_5F00_43F15E0B.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Almost 3 years ago I made the first port of PhoneGap to support Windows Phone. I know it's a popular subject as it's &lt;a href="http://blog.mrlacey.co.uk/2010/08/wp7dev-phonegap-and-windows-phone-7.html"&gt;the most popular subject here on my blog&lt;/a&gt;. Since then PhoneGap has taken on that code and and incorporated Windows Phone (7 &amp;amp; 8) as an officially supported platform and Microsoft have helped too.&lt;br /&gt;
While there have been a number of &lt;a href="http://phonegap.com/app/windows_phone/"&gt;apps built with PhoneGap so far&lt;/a&gt; but it'd be great to see a lot more there. Afterall, that's why I did all that work in the first place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/FJqyBz75f_Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/2476063056642964223/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=2476063056642964223" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2476063056642964223?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2476063056642964223?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/FJqyBz75f_Y/win-phones-for-getting-your-phonegap.html" title="Win phones for getting your PhoneGap app running on Windows Phone" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/05/win-phones-for-getting-your-phonegap.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEERHk5eSp7ImA9WhBaEU4.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-3992259304695726156</id><published>2013-05-21T11:48:00.000+01:00</published><updated>2013-05-21T11:53:25.721+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-21T11:53:25.721+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Want to build an app, but don't know what?</title><content type="html">I've spoken with a number of people recently who want to build an[other] app but they don't know what.&lt;br /&gt;
&lt;br /&gt;
Does this sound like you?&lt;br /&gt;
&lt;br /&gt;
If so, check out &lt;a href="https://ideasproject.com/" target="_blank"&gt;IdeasProject&lt;/a&gt;.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://ideasproject.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-o4WHeL9JzRo/UZtQpeyFqpI/AAAAAAAAAdc/aP4cuB_sykk/s1600/ideasproject.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://ideasproject.com/ideasproject-theme/images/header_bg_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;
Officially:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
IdeasProject is an online global community of people who have a passion 
for brainstorming and creating innovation. The community enables the 
exchange of ideas among mobile enthusiasts, designers, developers and 
incubators. IdeasProject is based on co-creation through Open Innovation
 and has delivered consumer inspired applications and mobile 
technologies.&lt;/blockquote&gt;
&lt;br /&gt;
What that means is it's a place where people with ideas go when they want help to help with developing an app.&lt;br /&gt;
&lt;br /&gt;
If you're stuck for ideas it could be just the palce for you.&lt;br /&gt;
&lt;br /&gt;
Also, if you're a member of &lt;a href="http://www.dvlup.com/" target="_blank"&gt;DVLUP&lt;/a&gt; then some of the suggestions from IdeasProject become challenges there, which can help you earn extra XP which in turn can be exchanged for "fabulous" goodies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/vCrHxHqARHU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/3992259304695726156/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=3992259304695726156" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/3992259304695726156?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/3992259304695726156?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/vCrHxHqARHU/want-to-build-app-but-dont-know-what.html" title="Want to build an app, but don't know what?" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-o4WHeL9JzRo/UZtQpeyFqpI/AAAAAAAAAdc/aP4cuB_sykk/s72-c/ideasproject.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/05/want-to-build-app-but-dont-know-what.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQBQXw6cSp7ImA9WhBaEU4.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-9095815660049799009</id><published>2013-05-14T02:07:00.000+01:00</published><updated>2013-05-21T11:49:10.219+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-21T11:49:10.219+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Champions, Ambassadors and MVPs</title><content type="html">Nokia and Microsoft use these titles to identify certain people and reward certain community members. Quite what the different terms mean can be confusing though. Let me clarify.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nokia Developer Champion&lt;/b&gt;&lt;br /&gt;
Someone who does not work for Nokia but is recognised by them as an exceptional member of the developer community.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nokia Developer Ambassador&lt;/b&gt;&lt;br /&gt;
Someone who works (usually part-time) for Nokia with a responsibility for helping people create apps.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Microsoft Valuable Professional (MVP)&lt;/b&gt;&lt;br /&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;Someone who does not work for Microsoft but is recognised by them as an exceptional member of the developer community&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;&lt;b&gt;Microsoft Windows Phone Champion&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;Originally this term referred to people who work for Microsoft who could serve as a point of contact for people wanting help with Windows Phone development. This term is also now includes Windows Phone developer MVPs too.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;I hope that's clear now.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="background-color: rgba(255, 255, 255, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/T7ZeelZn6no" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/9095815660049799009/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=9095815660049799009" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/9095815660049799009?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/9095815660049799009?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/T7ZeelZn6no/champions-ambassadors-and-mvps.html" title="Champions, Ambassadors and MVPs" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/05/champions-ambassadors-and-mvps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYHSX07cSp7ImA9WhBVFks.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-1952258429786744443</id><published>2013-04-22T22:28:00.001+01:00</published><updated>2013-04-22T22:28:58.309+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-22T22:28:58.309+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Windows Phone app submission "signing failed"</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-A7Y5FQcIRXo/UXWqHAM4LwI/AAAAAAAAAc4/BBPWmroOvR8/s1600/signing_failed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="419" src="http://4.bp.blogspot.com/-A7Y5FQcIRXo/UXWqHAM4LwI/AAAAAAAAAc4/BBPWmroOvR8/s640/signing_failed.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
If you ever get a submission report like this (above) it can be quite disconcerting. It's realisitic to think that you may have done something wrong or missed something that caused this.&lt;br /&gt;
&lt;br /&gt;
If you get this it can also be hard to know what to do next. The dev center will provide no more information and there isn't a lot in the forums either.&lt;br /&gt;
&lt;br /&gt;
If this happens to you though, fear not. If you've run the xap through the store test kit and verified capabilities and requirements there could be another reason for this status.&lt;br /&gt;
&lt;br /&gt;
Simply try uploading the XAP again. You may get this if there was a problem (corruption?) during the upload process.&lt;br /&gt;
&lt;br /&gt;
It worked for me :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/1fQQZcxYJlI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/1952258429786744443/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=1952258429786744443" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/1952258429786744443?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/1952258429786744443?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/1fQQZcxYJlI/windows-phone-app-submission-signing.html" title="Windows Phone app submission &quot;signing failed&quot;" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-A7Y5FQcIRXo/UXWqHAM4LwI/AAAAAAAAAc4/BBPWmroOvR8/s72-c/signing_failed.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/04/windows-phone-app-submission-signing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QHRnk5eip7ImA9WhBVFks.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-5083233855290713422</id><published>2013-04-22T21:08:00.004+01:00</published><updated>2013-04-22T21:08:57.722+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-22T21:08:57.722+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>I'm speaking at MobDevCon in July - Tickets on sale now</title><content type="html">On July 3rd, &lt;a href="http://nakedelement.co.uk/" target="_blank"&gt;Naked Element&lt;/a&gt; will be hosting &lt;a href="http://mobdevcon.com/#location" target="_blank"&gt;Norfolk's&lt;/a&gt; first ever Mobile Developer Conference. I'll be there to speak about &lt;a href="http://mobdevcon.com/#mattSession" target="_blank"&gt;Windows Phone and application pricing&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://mobdevcon.com/img/HethelEng2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://mobdevcon.com/img/HethelEng2.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Early bird tickets are now on sale from &lt;a href="http://mobdevcon2013.eventbrite.co.uk/#"&gt;http://mobdevcon2013.eventbrite.co.uk/#&lt;/a&gt;.&lt;br /&gt;
You can find out more about the conference at &lt;a href="http://mobdevcon.com/"&gt;http://mobdevcon.com/&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/elYLNvn5sWY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/5083233855290713422/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=5083233855290713422" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5083233855290713422?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5083233855290713422?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/elYLNvn5sWY/im-speaking-at-mobdevcon-in-july.html" title="I'm speaking at MobDevCon in July - Tickets on sale now" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/04/im-speaking-at-mobdevcon-in-july.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMER3c4fCp7ImA9WhBWEEw.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-2625216448950343238</id><published>2013-04-03T19:40:00.001+01:00</published><updated>2013-04-03T19:40:06.934+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-03T19:40:06.934+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Why Windows Phone isn't more popular - the view from the phone shop</title><content type="html">&lt;span id="goog_1212140278"&gt;&lt;/span&gt;&lt;span id="goog_1212140279"&gt;&lt;/span&gt;I know there are lots of people developing apps for Windows Phone who bemoan it's small marketshare. There are lots of opinions on the success (or lack of-depending on your perspective) and these are often informed based on the perspective of the person talking. That is, developers typically think from a development perspective, etc.&lt;br /&gt;
&lt;br /&gt;
Last week I had the opportunity to talk with a number of people who have a very different perspective to me and a different view of the mobile marketplace. I got to speak with a number of people who work in the operator, and independently owned, stores where a large number of people get their phones. They advise people on what phones people should get and know exactly what people are after when they choose a phone.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span id="goog_1212140285"&gt;&lt;/span&gt;&lt;a href="http://www.channel4.com/programmes/phoneshop"&gt;&lt;span id="goog_1212140291"&gt;&lt;/span&gt;&lt;img border="0" height="225" src="http://www.channel4.com/assets/programmes/images/phoneshop/a982acc1-0145-46c9-9dc3-b5a989b14f7c_625x352.jpg" width="400" /&gt;&lt;span id="goog_1212140292"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span id="goog_1212140286"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
When asked about Windows Phone they were generally positive about the platform and spoke highly of the cheaper devices (Lumia 610, 620 &amp;amp; Ascend W1) and have seen some of these sell faster than they can stock them. It's when I talked about apps that things got interesting though.&lt;br /&gt;
&lt;br /&gt;
There were 4 key points that I think developers should take note of (even if there is one that they probably can't do anything about themselves.)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. The number of apps on a platform doesn't matter to people buying phones&lt;/b&gt;&lt;br /&gt;
700,000, 500,000, 130,000 - they're just big numbers and don't really impact purchasing decisions. I suspected this was the case. They're just a useful metric for journalists to compare platforms. I suspect changes in the rate of new submissions and updates is a more useful metric for platform health but harder to obtain than number of apps in store.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Having certain apps on a platform matters&lt;/b&gt;&lt;br /&gt;
While the total number of apps isn't seen as important, there are certain apps which are seen as essential. These fall into two categories: &lt;b&gt;communication &lt;/b&gt;and &lt;b&gt;flavour of the month&lt;/b&gt;.&lt;br /&gt;
Apps which enable communication between users on different devices (be that text based messaging, voice calls, picture calling or anythign else) need to be on the platform. If a person choosing a phone used a certain app on their old phone and all their friends/contacts use that app too (on other platforms). They won't choose a phone which doesn't have it. It'd mean being unable to communicate with their friends/contacts and isn't that the primary purpose of a phone anyway-communication?&lt;br /&gt;
"Flavour of the month" apps are those that everyone is talking about and using right now. Be that a game (usually it's a game) that allows you to throw animals, guess words or draw pictures, if "everyone" you know is talking about and using such an app you risk being left out if you can't get that app too. Coming to a platform 6 months after everyone elase has stopped talking about or even using the app doesn't help.&lt;br /&gt;
These may seem trivial issues and you could argue that there are alternatives available, but these are things that affect the phone people choose!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Feature parity matters&lt;/b&gt;&lt;br /&gt;
If an app is on multiple platforms but doesn't have the same features users can feel tricked. Say, for instance, you and your friends use a certain app for group messaging of texts and photos. If you get a new phone and have been told that it supports that app, it'll reflect badly on both the app and the phone if you get home to discover that the app on your phone only supports text messaging and not picture messaging as you'd suddenly be excluded from certain conversations. Not something you or the people using your apps want.&lt;br /&gt;
If an app is missing key features it would be better, in some peoples eyes, if it wasn't there at all!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Quality matters&lt;/b&gt;&lt;br /&gt;
While the number of apps doesn't really matter, the quality of the apps that people do choose to use does.&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Windows Phone apps are generally perceived as being of a lower quality than apps on other platforms - people you need to raise your game!&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What can we, as developers, take from this?&lt;br /&gt;
Three things:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Focus on quality&lt;/b&gt;, not just quantity.&lt;/li&gt;
&lt;li&gt;Support multiple platforms. Especially if there's a social aspect to your app.&lt;/li&gt;
&lt;li&gt;Aim for feature parity (especially core features) when moving to multiple platforms&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/HNTKuOLhy2M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/2625216448950343238/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=2625216448950343238" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2625216448950343238?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2625216448950343238?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/HNTKuOLhy2M/why-windows-phone-isnt-more-popular.html" title="Why Windows Phone isn't more popular - the view from the phone shop" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/04/why-windows-phone-isnt-more-popular.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEGQ347cCp7ImA9WhBXFko.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-5347132518163947823</id><published>2013-03-30T21:07:00.000Z</published><updated>2013-03-30T21:07:02.008Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-30T21:07:02.008Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Where to get icons for your app?</title><content type="html">So, you need some icons for use in your app. &lt;br /&gt;
&lt;br /&gt;
If you just need icons for the application bar buttons, then start with the ones that come with the SDK. You'll find them at "C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Icons\Dark\" and these are also the ones that Blend can add for you.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-CHp0tLB9Pe0/UVdOcjy6rqI/AAAAAAAAAcQ/Ej8uaqzEOyM/s1600/appbar-icons.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="278" src="http://1.bp.blogspot.com/-CHp0tLB9Pe0/UVdOcjy6rqI/AAAAAAAAAcQ/Ej8uaqzEOyM/s640/appbar-icons.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
If you need more then there are a numberof free resources available:&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;a href="http://www.syncfusion.com/downloads/metrostudio" target="_blank"&gt;Metro Studio 2&lt;/a&gt; &lt;span style="font-size: x-small;"&gt;(By SyncFusion)&lt;/span&gt; &lt;/h3&gt;
It's a downloadable app that comes with 1700 FREE icon templates that can be sized and modified as required. You can see all the icons at &lt;a href="http://www.syncfusion.com/downloads/IconPackagePopup/Application"&gt;http://www.syncfusion.com/downloads/IconPackagePopup/Application&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;a href="http://thenounproject.com/" target="_blank"&gt;The Noun Project&lt;/a&gt;&lt;/h3&gt;
Loads and loads of icons that you can search online. Download what you want in vector formats. Most are creative commons licensed and/or very cheap to license. (I've never paid more than $1.99 for an icon there.)&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-N_gMv-jSA5Q/UVdRwiefnpI/AAAAAAAAAcg/ti6gR-4PwFs/s1600/appbar-icons-noun.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-N_gMv-jSA5Q/UVdRwiefnpI/AAAAAAAAAcg/ti6gR-4PwFs/s1600/appbar-icons-noun.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;a href="http://modernuiicons.com/" target="_blank"&gt;Modern UI Icons&lt;/a&gt;&lt;/h3&gt;
A collection of almost 1000 free icons. They're availabel sized for the application bar and in vector formats.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-ifRufpPHQNA/UVdRThA6OjI/AAAAAAAAAcY/Stzj5fFTirg/s1600/appbar-icons-modern.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-ifRufpPHQNA/UVdRThA6OjI/AAAAAAAAAcY/Stzj5fFTirg/s1600/appbar-icons-modern.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;a href="http://iconmonstr.com/" target="_blank"&gt;iconmonstr&lt;/a&gt;&lt;/h3&gt;
1300+ icons thast are free to use in personal and commercial projects. They're also helpfully categorized to make it easy to find what you're after.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-nKc9k8HWfKs/UVdS1UOlzAI/AAAAAAAAAco/pLsmI6-C2ms/s1600/appbar-icons-iconm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-nKc9k8HWfKs/UVdS1UOlzAI/AAAAAAAAAco/pLsmI6-C2ms/s1600/appbar-icons-iconm.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
There are also other sources and you could always make your own or commission an icon if you needed something special.
&lt;br /&gt;
&lt;br /&gt;
As an extrs tip, it's usually best, as far as possible, to get all your icons for an app from the same source. This helps make it look like they all belong together. If you have small/subtle differences between icons (e.g. differing line weights or the radius on rounded corners) then some people will spot this and will think it looks bad. Remember, the little details matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/CMNjHWKR8Zw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/5347132518163947823/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=5347132518163947823" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5347132518163947823?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5347132518163947823?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/CMNjHWKR8Zw/where-to-get-icons-for-your-app.html" title="Where to get icons for your app?" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-CHp0tLB9Pe0/UVdOcjy6rqI/AAAAAAAAAcQ/Ej8uaqzEOyM/s72-c/appbar-icons.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/where-to-get-icons-for-your-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQARXg-eCp7ImA9WhBXFEo.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-7799230815933699090</id><published>2013-03-28T13:45:00.000Z</published><updated>2013-03-28T13:45:44.650Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-28T13:45:44.650Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Microsoft's advice about Panoramas is wrong!</title><content type="html">&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;br /&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-GB&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin-top:0cm;
 mso-para-margin-right:0cm;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0cm;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Calibri","sans-serif";
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;
 mso-fareast-language:EN-US;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
The &lt;a href="http://channel9.msdn.com/Series/Windows-Phone-Design-Bootcamp/Windows-Phone-Design-Bootcamp-Composition" target="_blank"&gt;advice Microsoft's designers will tell you&lt;/a&gt; &lt;span style="font-size: x-small;"&gt;(23:30 into the video)&lt;/span&gt; about a page
hosting a Panorama control is that the page should not also include the System
Tray.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;This is wrong!&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Let me tell you why.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-df5U-mUEkeY/UVRGrxO8R8I/AAAAAAAAAcA/9_IOSCHUOFk/s1600/system-callout-order-icons.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-df5U-mUEkeY/UVRGrxO8R8I/AAAAAAAAAcA/9_IOSCHUOFk/s1600/system-callout-order-icons.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Consider this scenario:&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
A person launches your app and upon starting it attempts to
load the latest data from a web server or other external source. - Hopefully
you'll agree that so far this is a reasonable and common scenario.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
After a few seconds no data is displayed and the app still
indicates that it is "Loading...". - Again, a common occurrence.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Now what?&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Well, the person wonders if the delay is due to not having a
connection or maybe they've only got 1 bar on a 2G network. - I hope you still
think this is a not unreasonable scenario.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
So, having wondered about connectivity, what does our person
do?&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Well, they swipe down from the top of the screen to reveal
the network connectivity indicators that are included in the System Tray.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
And it's at this step that we reach the crux of my argument.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
If the page includes the System Tray the person will be able
to see the state of their connectivity. If they have a connection they'll
probably wait a little longer. If not they can, hopefully, do something about
it.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
But if the page doesn't include the System Tray what can
they do?&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
They can do 1 of two things.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
1. They can wait longer, but with the uncertainty of not
knowing if the connection is there and if they'll ever get a response (at least
until the connection times out.)&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
2. They can leave the app and check connectivity there.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
If 1, you're forcing the person using your app into a
situation of uncertainty with your app that can't be a good thing. Uncertainty
in what your app will do, or when, is not a feeling you want to instil in
people. &lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
If 2, you're forcing people to leave your app when they want
to use it. You're also increasing the likelihood that they won't come back. I'd
be amazed if you want the people who have downloaded and installed your app to
not be using it when they have wanted to.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
My advice:&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;Include the System Tray on any page that has content that comes
from a remote source.&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Microsoft doesn’t even follow their own advice!&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Checking on the WP8.0 device in my pocket I can see that:&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
While the store, music and video hub, games hub, photos hub and
wallet don't include the system tray, the &lt;b style="mso-bidi-font-weight: normal;"&gt;People
hub&lt;/b&gt; and the &lt;b style="mso-bidi-font-weight: normal;"&gt;Office hub DO&lt;/b&gt; include
the System Tray&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
The exception when this isn't true.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
My reasoning above is based on a Panorama with dynamic
content that is obtained from an external source. Obviously there are apps
which use a Panorama control but don't use external content. (I've even written
some.) In this scenario there is, potentially, very little value to the
including the System Tray and so there may be an argument for not including it.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Yes there is potentially an argument for including a System
Tray even if the Panorama uses entirely local content so that it's possible to
see things like the clock and battery status. Include it at your discretion in
these scenarios.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Disclaimer. Yes the title of this post is quite broad-brush
and I'm only talking about a potentially minor issue here. I understand that
but &lt;b style="mso-bidi-font-weight: normal;"&gt;small details matter&lt;/b&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;tl;dr: DO &lt;/b&gt;include the System Tray on Panoramas. Even though Microsoft tell you not to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/QTn1GyWTukQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/7799230815933699090/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=7799230815933699090" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7799230815933699090?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7799230815933699090?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/QTn1GyWTukQ/microsofts-advice-about-panoramas-is.html" title="Microsoft's advice about Panoramas is wrong!" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-df5U-mUEkeY/UVRGrxO8R8I/AAAAAAAAAcA/9_IOSCHUOFk/s72-c/system-callout-order-icons.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/microsofts-advice-about-panoramas-is.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAEQXs9eyp7ImA9WhBQGUk.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-7732029274382156511</id><published>2013-03-22T09:15:00.000Z</published><updated>2013-03-22T09:15:00.563Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-22T09:15:00.563Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="software dev" /><category scheme="http://www.blogger.com/atom/ns#" term="Mobile" /><title>10 Tips for designing your mobile APIs</title><content type="html">It's common for a mobile application to need to communicate with a web/cloud based service. At its simplest this will be just to retrieve data but it could also include sending data and user authorisation and management.&lt;br /&gt;
If you have to build the API that your application will use the following tips may be useful:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Version your API (from the very beginning)&lt;/b&gt;&lt;br /&gt;
At some point in the future the API will need to change. This may be to add, remove or change functionality. When this happens you may have to stop the use of part of the API or allow the consuming application to be clear about which behaviour, and type of response, it is expecting to be returned.&lt;br /&gt;
Your API is like a contract between your backend and the apps that use it. Without proper versioning you are risking the situation where one party can change the contract without the other even knowing. Having support for multiple versions of the API you can also continue to support users of your application who haven't been able to upgrade to the latest version of your app that uses the latest version of the app that knows all about the latest API changes.&lt;br /&gt;
Without versioning of the API you make it much easier to, inadvertently, stop applications working when changes are made to the API.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Don't return more data than you need to&lt;/b&gt;&lt;br /&gt;
The amount of data that is sent between the application and the server will, to some extent, impact the time it takes for the request to be made and the response to be received. Not only does this impact the amount of time a person spends staring at a loading animation, it may also impact the amount they spend on data charges.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Compress the data that is sent and received&lt;/b&gt;&lt;br /&gt;
In addition to not returning more data than is necessary, by compressing the data that is sent you can experience further benefits in speed and cost of data transfer.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Don't require unnecessary steps/requests&lt;/b&gt;&lt;br /&gt;
It's very common for APIs to be designed to provide separate discrete steps that reflect how the service is intended to be used. Quite often though, such discrete steps aren't the most efficient way of implementing a mobile application.&lt;br /&gt;
Let's take a simple example. Imagine the situation where a user has to log in (provide valid credentials) before being able to request data. It would be perfectly reasonable and understandable to think of this as two separate steps:&lt;br /&gt;
Step 1: The credentials are provided and, if valid, the API responds with a session token.&lt;br /&gt;
Step 2: The session token is passed when the request is made for the data.&lt;br /&gt;
That's probably unnecessary though. It would be much better if a single request could be made, passing credentials and the details of the data that is desired and, assuming valid credentials, both the data and a session token, for use in future requests, are returned.&lt;br /&gt;
The benefit of this is that fewer requests are faster and cheaper for the person using the app and may also (depending on how it's implemented) lead to simpler application code, which can lower development and support costs.&lt;br /&gt;
This may mean that you have to build the API to support both types of usage. This may lead to higher costs to support, document and maintain. But, if you're building your API just (or primarily) for your own use this may be more acceptable.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. Combine requests (and responses)&lt;/b&gt;&lt;br /&gt;
In addition to multiple requests being made as part of an authentication or app start up process, it can also be common for multiple requests to be made to retrieve all the data for a single page or view in an application. Making a single request for all the data that a page requires, will be faster and cheaper than making multiple calls. Both factors that will be seen positively by the people using the application.&lt;br /&gt;
Again, this can also make the application code simpler. Especially with regard to handling the situations where multiple calls are made and not all of them are successful. If it becomes an all or nothing scenario the exception cases become much simpler.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;6. Consider security from the beginning&lt;/b&gt;&lt;br /&gt;
Security is a massive and potentially complicated subject. This makes it particularly difficult to add on in a hurry in response to a security issue.&lt;br /&gt;
Remember to consider: securing data in transit; securing your data at rest; inappropriate or unauthorised use of the API; and potentially malicious or unexpected data having unintended consequences.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;7. Plan and implement your caching policy carefully&lt;/b&gt;&lt;br /&gt;
If the data your API returns doesn't change very often be sure to implement appropriate caching strategies. This could involve keeping data in memory, rather than repeatedly reading it from disk. This should almost certainly involve the caching capabilities that are part of HTTP (assuming that that's the protocol you're communicating over).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you do implement caching on your server, be sure to offer a way to forcibly invalidate it though.&lt;br /&gt;
Also make sure that you implement appropriate caching in the client application that consumes the API. You save time and resources if you can make a call and be told to keep using the data that was returned last time. You save more time and resources if you can avoid making that call in the first place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;8. Integrate analytics&lt;/b&gt;&lt;br /&gt;
Analytics are an essential part of understanding how an application is used. It's common for calls to an analytics service to be made in addition to the requests for data that are made during normal use of an app. For instance, if the app will attempt to call the server to refresh the displayed data on a page every time that the user navigates to that page then there is redundancy in adding a separate tracking/analytics call to track navigating to that page as well.&lt;br /&gt;
At its most primitive, the use of the API can serve as an indication of how and when the application is used. At the other end of the scale there are rich analytics tools and frameworks which can provide very detailed information about how users interact with the app. If you're somewhere in between then think carefully about how or if you're making additional/unnecessary calls purely for the purpose of tracking usage when you could get this from the calls made as part of the usage of the app.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;9. Consider names carefully&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The names you give the methods, objects, properties and parameters of your API will greatly impact the way those who are using the API understand it. It can be very tempting to use whatever terms or wording first come to mind when creating the API. As with all code though, the words you use play a great part in how the API is understood and expected to behave. Poorly named APIs can be a great source of confusion. Confusion leads to mistakes, mistakes lead to bugs, bugs lead to delays and support costs. Spend time on naming.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;10. Don't forget your privacy policy and responsibilities&lt;/b&gt;&lt;br /&gt;
If you're capturing user data (and if you have logging on your server to record requests then you are) you need to have a privacy policy that details how you'll use the data. You'll also need to think about how you store and protect that data. Especially if it's personal and/or belongs or relates to children.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/bImQknxU9fY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/7732029274382156511/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=7732029274382156511" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7732029274382156511?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7732029274382156511?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/bImQknxU9fY/10-tips-for-designing-your-mobile-apis.html" title="10 Tips for designing your mobile APIs" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/10-tips-for-designing-your-mobile-apis.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYHQnc5fSp7ImA9WhBQGE8.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-5139151099242679738</id><published>2013-03-20T23:28:00.000Z</published><updated>2013-03-20T23:28:53.925Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-20T23:28:53.925Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Debugging binding issues is hard. Having simpler code makes it easier.</title><content type="html">Recently I had to deal with a strange bug.&lt;br /&gt;
Sometimes the menu option to create a secondary tile was not being enabled when it should be.&lt;br /&gt;
After analysis I was able to get the most consistent reproduction of the issue on a lower spec device (a Lumia 620).


Obviously this isn't acceptable so a solution had to be found.&lt;br /&gt;
&lt;br /&gt;
I tracked the most likely candidate to the `CanPin()` method. You can see the "before" version below.&lt;br /&gt;
You'll notice that it "smells" of all sorts of issues. It's also not something that can be debugged or instrumented easily.&lt;br /&gt;
It also isn't immediately obvious how it works because it's not easy to read.&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/mrlacey/5161035.js"&gt;&lt;/script&gt;&lt;br /&gt;
There's definitely the possibility for something funny to be going on there.&lt;br /&gt;
Could all those checks be being made in an order differently to how they're listed? &lt;br /&gt;
Could there be a bug in the logic?  &lt;br /&gt;
Could the time it takes for them to be run be taking longer than is available to trigger the binding to update?&lt;br /&gt;
&lt;br /&gt;
The only option available is to refactor to make the method clear about what it does and in what order.&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/mrlacey/5209344.js"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
And, as if by magic the problem went away.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;So what was the problem?&lt;/b&gt;&lt;br /&gt;
I can't be 100% certain.&lt;br /&gt;
But I'm not sure that matters.&lt;br /&gt;
That well written, easily understandable code doesn't display unexpected, unintended consequences--that's a good thing. Why badly written, hard to undertand code has certain unintended consequences--isn't a priority for me just now.&lt;br /&gt;
&lt;br /&gt;
This leads me to be reminded of three important lessons:&lt;br /&gt;
&lt;b&gt;- Debugging binding issues is hard&lt;/b&gt; (Bind to simple properties to help avoid binding issues.)&lt;br /&gt;
&lt;b&gt;- Simple code is better&lt;/b&gt; (both to debug and to maintain)&lt;br /&gt;
&lt;b&gt;- Be sure to test on real devices&lt;/b&gt; (both low and high spec)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;TL-DR:&lt;/b&gt;&lt;br /&gt;
Bind to simple properties to help avoid binding issues.&lt;br /&gt;
Write code that is easy to read so it's easier to maintain in the future.
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/mY7bnzPniEg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/5139151099242679738/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=5139151099242679738" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5139151099242679738?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5139151099242679738?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/mY7bnzPniEg/debugging-binding-issues-is-hard-having.html" title="Debugging binding issues is hard. Having simpler code makes it easier." /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/debugging-binding-issues-is-hard-having.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYFSHo8eSp7ImA9WhBQGEw.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-6069152144850252699</id><published>2013-03-20T20:41:00.002Z</published><updated>2013-03-20T20:41:59.471Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-20T20:41:59.471Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rant" /><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="Mobile" /><title>3 MiFi topup fail</title><content type="html">&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;br /&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-GB&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin-top:0cm;
 mso-para-margin-right:0cm;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0cm;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Calibri","sans-serif";
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;
 mso-fareast-language:EN-US;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;br /&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;One of the devices I have to keep me and my
devices connected to the Internet is a MiFi unit (portable access point) for
(UK network) 3.&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;I don't use it very often but sometimes I
can't use Wi-Fi or Internet sharing from another device. Today was one of those
times so I got out the unit and, as I have it on PAYG (because I don't use it
enough to justify a contract) I attempted to top up.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;I turned on the MiFi unit and paired with a
device, a Nokia Lumia 620. All good so far, then I opened the browser to be
automatically redirected to the top up site.&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;&lt;b&gt;1st problem &lt;/b&gt;- I was given the full site, as
I'd expect on a PC or other large screen device. This meant I had to wait ages
for the page to download (over HSDPA) and render on a device which wasn't
suited to displaying all that content and wasn't related to the task I was
trying to achieve.&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;&lt;b&gt;2nd problem&lt;/b&gt; - I had to go through lots of
unnecessary steps/pages to achieve what I wanted. The page I was initially
taken to had what looked like 4 big buttons for each of the available top up
options. The only problem was they weren't buttons - just images. There was
actually a text link to top up but I had to zoom into the page to see it.
Clicking the "I want to top up" link redirected me to the account
overview page. From there I had to click another I want to top up link. This
took me to a page that provided a drop down list for each of the top up
options. Selecting from this list caused the page to reload. There were then
separate pages for selecting to use my preconfigured credit card and entering
the card security code (CVV number). This finally led to another page for...&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;&lt;b&gt;3rd problem&lt;/b&gt; - the 3D secure step in the
payment process tried to open a page which had a mime type or other content
that the phone couldn't display and so prompted me to visit the store to
download an app to view the content. Of course, the problem here is that I
couldn't connect to the store as I had no Internet connection. Even if I could
connect to the store I doubt my credit card provider has an app that could
allow me to complete the in browser transaction. In fact I don't just doubt it
- I know it's not possible, at least not without having some Microsoft
implemented changes to the browser and as the bank and card provider have
nothing in the way of apps in the windows phone store, what are the chances
that Microsoft have built something into the OS for them?&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;Ok, that's a partial HSBC/MasterCard and
Microsoft/Internet Explorer failure but still, it's left me a very frustrated
and disappointed customer. :(&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;I ended up getting out my iPad to top up.&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;So, rather than just moan about the
situation, what can we learn from it?&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;Be smart about the content you serve to
devices. Especially ones with small screens.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;Remove unnecessary steps, page reloads
and redirects from processes. Especially sign up and payment processes.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;Provide, simple, easily identifiable
short cuts to do often repeated tasks.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt;"&gt;Yes these are all obvious and often
repeated recommendations. I hope by repeating them again here it'll help
someone remember them next time it's appropriate.&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: .0001pt; margin: 0cm;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/3iZltt_qoDo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/6069152144850252699/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=6069152144850252699" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/6069152144850252699?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/6069152144850252699?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/3iZltt_qoDo/3-mifi-topup-fail.html" title="3 MiFi topup fail" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/3-mifi-topup-fail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MHRnc-fip7ImA9WhBQFkw.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-996147118100977759</id><published>2013-03-18T14:03:00.001Z</published><updated>2013-03-18T14:03:57.956Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-18T14:03:57.956Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="Mobile" /><title>Online privacy when building apps for kids</title><content type="html">This weekend just gone I was at the &lt;a href="http://www.eventbrite.com/event/5295539100" target="_blank"&gt;Windows Phone 8 Lock-in organised by Dev4Good&lt;/a&gt;, so issues around apps for children and young people&amp;nbsp;is on my mind at the moment. That's probably why this caught my eye:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://momswithapps.com/category/online-privacy/"&gt;http://momswithapps.com/category/online-privacy/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
It's a set of resources relating to online privacy curated specifically for people creating educational apps for children. If you're building apps for this audience they're an invaluable read.&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/Qq0Ue1R9ox4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/996147118100977759/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=996147118100977759" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/996147118100977759?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/996147118100977759?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/Qq0Ue1R9ox4/online-privacy-when-building-apps-for.html" title="Online privacy when building apps for kids" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/online-privacy-when-building-apps-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0INQH84eyp7ImA9WhBQFUw.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-9179444905058045875</id><published>2013-03-17T09:13:00.000Z</published><updated>2013-03-17T09:13:11.133Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-17T09:13:11.133Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Azure Mobile Services error: "The request could not be completed.  ()"</title><content type="html">Having just published my first (Windows Phone - obviously) app using Azure Mobile Services, I thought I'd share something I learnt in the process.
When first testing on an actual device (always test on actual devices!) I hit an issue where the MobileServicesClient was failing with the following message being intercepted by the Application level UnhandledExceptionHandler:
&lt;br /&gt;
&lt;blockquote&gt;
"The request could not be completed.  ()"&lt;/blockquote&gt;
&lt;br /&gt;
Notice the empty brackets at the end. In most cases (based on similar exceptions that others have reported and Google helped me find) these would include an indicator of the issue. Such as "(Internal Server Error)" or "(Send failure)".&lt;br /&gt;
&lt;br /&gt;
The call stack wasn't much help either:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Microsoft.WindowsAzure.MobileServices.MobileServiceClient.CreateMobileServiceException(String errorMessage, IServiceFilterRequest request, IServiceFilterResponse response)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Microsoft.WindowsAzure.MobileServices.MobileServiceClient.ThrowInvalidResponse(IServiceFilterRequest request, IServiceFilterResponse response, JToken body)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Microsoft.WindowsAzure.MobileServices.MobileServiceClient.&amp;lt;RequestAsync&amp;gt;d__f.MoveNext()&lt;br /&gt;--- End of stack trace from previous location where exception was thrown ---&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Microsoft.WindowsAzure.MobileServices.MobileServiceTable.&amp;lt;SendInsertAsync&amp;gt;d__8.MoveNext()&lt;br /&gt;--- End of stack trace from previous location where exception was thrown ---&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()&lt;br /&gt;&amp;nbsp;&amp;nbsp; at Microsoft.WindowsAzure.MobileServices.MobileServiceTable`1.&amp;lt;InsertAsync&amp;gt;d__21.MoveNext()&lt;br /&gt;--- End of stack trace from previous location where exception was thrown ---&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.TaskAwaiter.GetResult()&lt;br /&gt;&amp;nbsp;&amp;nbsp; at RadioNow.MainPage.&amp;lt;OnNavigatedTo&amp;gt;d__8.MoveNext()&lt;br /&gt;--- End of stack trace from previous location where exception was thrown ---&lt;br /&gt;&amp;nbsp;&amp;nbsp; at System.Runtime.CompilerServices.AsyncMethodBuilderCore.&amp;lt;ThrowAsync&amp;gt;b__0(Object state)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Even when I wrapped all my uses of the client in try..catch blocks this exception was still only getting caught at the application level unhandled exception handler.&lt;br /&gt;
&lt;br /&gt;
Anyway, the issue came down to the devicenot having Wi-Fi enabled and for some reason it wasn't using 3G ro USB passthrough to connect instead.&lt;br /&gt;
&lt;br /&gt;
So, 2 lessons:&lt;br /&gt;
1. The WP8 AMS client might throw errors, based on connectivity, that you'll have to catch and deal with at an application level.&lt;br /&gt;
2. Be sure to check/test Wi-Fi connections on devices when tethered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/XWfh6brztdI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/9179444905058045875/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=9179444905058045875" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/9179444905058045875?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/9179444905058045875?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/XWfh6brztdI/azure-mobile-services-error-request.html" title="Azure Mobile Services error: &quot;The request could not be completed.  ()&quot;" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/azure-mobile-services-error-request.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8ARH4_eyp7ImA9WhBQEk0.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-8641315030975597777</id><published>2013-03-13T20:34:00.000Z</published><updated>2013-03-13T20:34:05.043Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-13T20:34:05.043Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>AccentComplimentBrush v2.0</title><content type="html">&lt;a href="http://blog.mrlacey.co.uk/2013/03/using-complimentary-accent-color.html" target="_blank"&gt;Yesterday I showed my new AccentComplimentBrush&lt;/a&gt; as a way of having a second color that can be used within an app and will work with whatever accent color has been chosen.&lt;br /&gt;
&lt;br /&gt;
There was one big issue though. It only worked with the default accent colors in Windows Phone 8.&lt;br /&gt;
&lt;br /&gt;
I've just &lt;a href="https://github.com/mrlacey/WPMisc/blob/master/AccentComplimentBrush.cs" target="_blank"&gt;pushed a new version to GitHub&lt;/a&gt; that is both forwards and backwards compatible.&lt;br /&gt;
&lt;br /&gt;
It now works on both Windows Phone 7.X and Windows Phone 8.&lt;br /&gt;
It also works with operator and manufacturer defined accent colors. In fact it will work with any accent color whatsoever (yes, even for the people who've hacked in their own colors) as it now determines the compliment on the fly, rather than relying on a precomputed list of compliments.&lt;br /&gt;
&lt;br /&gt;
Please enjoy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/JXb2g-bKaok" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/8641315030975597777/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=8641315030975597777" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/8641315030975597777?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/8641315030975597777?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/JXb2g-bKaok/accentcomplimentbrush-v20.html" title="AccentComplimentBrush v2.0" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/accentcomplimentbrush-v20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cEQXY-cSp7ImA9WhBQEks.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-6085806808615171364</id><published>2013-03-12T21:38:00.000Z</published><updated>2013-03-14T12:43:20.859Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-14T12:43:20.859Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Using a complimentary accent color</title><content type="html">&lt;br /&gt;
Sometimes you may want to use two colors in an app. If it was just one then I'm sure you'd just go with the Accent color.&lt;br /&gt;
The acccent colors all work well when on Black or White.&lt;br /&gt;
The problem though is that there is no single other color that can be combined well with any accent color and you probably want black and white elsewhere on the page. What you really want to avoid is a design that looks bad with one (or more) accent color(s).&lt;br /&gt;
&lt;br /&gt;
If only there was a way to have another brush resource available that would adjust to the selected accent color and work in compliment to it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Introducing the AccentComplimentBrush&lt;/b&gt;&lt;br /&gt;
It lets you have another SolidColorBrush available via a an Application wide resource that will work with any of the default accent colors. The complimentary color is based on the exact opposite position on the color wheel. See how the two pairs all go together:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-FmdMPGt39f4/UT-XqizkU5I/AAAAAAAAAbw/VoeiF3seFFw/s1600/accent-compliment.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://3.bp.blogspot.com/-FmdMPGt39f4/UT-XqizkU5I/AAAAAAAAAbw/VoeiF3seFFw/s640/accent-compliment.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;span style="font-size: x-small;"&gt;The accent color above and it's compliment below.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;How do you use it?&lt;/b&gt;&lt;br /&gt;
Just 2 simple steps&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Add the resource.&lt;/b&gt;&lt;br /&gt;
&lt;a href="https://github.com/mrlacey/WPMisc/blob/master/AccentComplimentBrush.cs" target="_blank"&gt;Get the file&lt;/a&gt;, add it to your project and then reference it. (Either at the application level or on a specific page.)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;phone:PhoneApplicationPage.Resources&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mrlacey:AccentComplimentBrush x:Key="MustBeSetButCanBeAnything" /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/phone:PhoneApplicationPage.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the key value I've used above. Resources must have a key, but we don't actually ever use it. Because of this, ReSharper (or equivelent) might try and tell you that the resource isn't used. It is. Usage just can't automatically be detected at design time it because it's implemented with some run time trickery.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Use it!&lt;/b&gt;&lt;br /&gt;
Just refer to it in the XAML.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextBlock Text="accent"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Foreground="{StaticResource PhoneAccentBrush}" /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextBlock Text="compliment"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Foreground="{StaticResource AccentComplimentBrush}" /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or in code:&lt;br /&gt;
&lt;br /&gt;
(SolidColorBrush)Application.Current.Resources["AccentComplimentBrush"];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Important!&lt;/b&gt;&lt;br /&gt;
1. It currently only works with the default accent colors, not any added by the operator or OEM. If you use this and want some help with adding support for any accent color let me know.&lt;br /&gt;
2. Because it uses "run time trickery" it doesn't work with the designer (in Visual Studio or Blend). If you know a way that would allow design time support I'd love to hear it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What do you think? Useful?&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Update&lt;/strong&gt;&amp;nbsp;I've now made a &lt;a href="http://blog.mrlacey.co.uk/2013/03/accentcomplimentbrush-v20.html" target="_blank"&gt;version 2.0 of this code&lt;/a&gt; which supports 7.X too and will even work with OEM/MO defined accent colors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/vWMiOdD60YU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/6085806808615171364/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=6085806808615171364" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/6085806808615171364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/6085806808615171364?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/vWMiOdD60YU/using-complimentary-accent-color.html" title="Using a complimentary accent color" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-FmdMPGt39f4/UT-XqizkU5I/AAAAAAAAAbw/VoeiF3seFFw/s72-c/accent-compliment.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/using-complimentary-accent-color.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8CSX09cSp7ImA9WhBQEE4.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-5410930876429420961</id><published>2013-03-11T20:31:00.000Z</published><updated>2013-03-11T20:31:08.369Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-11T20:31:08.369Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="user groups" /><title>Telford: done! Next it's Bristol.</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.dotnetdevnet.com/Portals/0/Logo2a.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.dotnetdevnet.com/Portals/0/Logo2a.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Last month I talked about Windows Phone 8 development at the university in Telford. Next week it's the UWE in Bristol.&lt;br /&gt;
&lt;br /&gt;
The feedback from Telford was very positive.&lt;br /&gt;There were 3 questions on the feedback form and each was marked on a scale of 1 to 10.&lt;br /&gt;
&lt;br /&gt;
The talk was well delivered and I could understand the concepts discussed: &lt;b&gt;9.1 / 10&lt;/b&gt;&lt;br /&gt;
I got something out of this that I could use in a project, either in work or as a hobby project: &lt;b&gt;8.5 / 10&lt;/b&gt;&lt;br /&gt;
I would attend one of your talks again: &lt;b&gt;8.9 / 10&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'm particularly proud of those results considering only 1 person in the room with a Windows Phone 8 device and no one there had any previous experience developing for Windows Phone.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you're in the Bristol area next Tuesday and are interested in hearing about Windows Phone 8 development,why not come along. &lt;a href="http://www.dotnetdevnet.com/Meetings/tabid/54/EntryID/76/Default.aspx"&gt;More details, registration, etc.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/KL3N6UceSu0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/5410930876429420961/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=5410930876429420961" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5410930876429420961?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5410930876429420961?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/KL3N6UceSu0/telford-done-next-its-bristol.html" title="Telford: done! Next it's Bristol." /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/telford-done-next-its-bristol.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcFQ3gzfyp7ImA9WhBRF0k.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-7778473089218557211</id><published>2013-03-08T12:00:00.000Z</published><updated>2013-03-08T12:00:12.687Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-08T12:00:12.687Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>NCLDR on Windows Phone 8</title><content type="html">Earlier this week, uber-UK-community-bod and I18n expert, &lt;a href="https://twitter.com/GuySmithFerrier"&gt;Guy Smith-Ferrier&lt;/a&gt; announced the &lt;a href="http://www.guysmithferrier.com/post/2013/03/Announcing-NCLDR-(Alpha).aspx"&gt;alpha launch of NCLDR&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you're not familiar with &lt;a href="http://cldr.unicode.org/"&gt;CLDR&lt;/a&gt; you can think of it as being like a version of the Globalization parts of the .net framework with lots of added extras. &lt;a href="http://www.ncldr.com/"&gt;NCLDR&lt;/a&gt; is a .net port that allows access to all these lovely goodies.&lt;br /&gt;
&lt;br /&gt;
As is my way and because I was interested if I could use the data in a phone app so I attempted a &lt;a href="https://github.com/mrlacey/NCLDR/commit/2dc98bd77e6ae6faee95605d9131f0f103f093e6"&gt;port/conversion to Windows Phone 8&lt;/a&gt;. It's just a POC at the moment, but look, I can get a regex for validating postcodes for each (well most) supported culture(s). If you're capturing a postal or zip code in your app this would allow you to validate it on the device, regardless of which country it was in.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-NoCM4LvKcXo/UTk9V72F1lI/AAAAAAAAAbg/j9Blrz0jQV8/s1600/wp_ss_20130308_0001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-NoCM4LvKcXo/UTk9V72F1lI/AAAAAAAAAbg/j9Blrz0jQV8/s1600/wp_ss_20130308_0001.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I'll be honest, it wasn't as simple as I'd hoped. There was a lot more work and work arounds needed to get it to work than I would have liked and if Windows Phone support was to be officially added it would be better to add it in early and maybe remove use of some of the types and methods which are not supported on the phone, to aid greater cross platform code reuse.&lt;br /&gt;
&lt;br /&gt;
Here's the changes I had to make to get it to work:&lt;br /&gt;
&lt;br /&gt;
Biggest issue: WP doesn't support BinaryFormatter.&lt;br /&gt;
Second but related issue: By switching to using a JSON serializer I was potentially making the data file even bigger. I countered this by only including the minimum I needed in the generated file. This no only made the data file smaller but meant I had to load less and so save on precious memory consumption.&lt;br /&gt;
&lt;br /&gt;
Add missing System elements:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;CultureTypes&lt;/li&gt;
&lt;li&gt;DigitShapes&lt;/li&gt;
&lt;li&gt;ICloneable&lt;/li&gt;
&lt;li&gt;SerializableAttribute&lt;/li&gt;
&lt;/ul&gt;
Replace use of HashTable with Dictionary&amp;lt;string, string&amp;gt;. In:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Culture.cs&lt;/li&gt;
&lt;li&gt;Numbers.cs&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Replace verison of string.Compare that was used with a WindowsPhone supported version. In:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Calendar.cs&lt;/li&gt;
&lt;li&gt;CultureData.cs&lt;/li&gt;
&lt;li&gt;Currency.cs&lt;/li&gt;
&lt;li&gt;CurrencyPeriod.cs&lt;/li&gt;
&lt;li&gt;Language.cs&lt;/li&gt;
&lt;li&gt;MessageSet.cs&lt;/li&gt;
&lt;li&gt;NumberingSystem.cs&lt;/li&gt;
&lt;li&gt;NumberingSystemType.cs&lt;/li&gt;
&lt;li&gt;Numbers.cs&lt;/li&gt;
&lt;li&gt;PluralRule.cs&lt;/li&gt;
&lt;li&gt;Region.cs&lt;/li&gt;
&lt;li&gt;RegionMeasuringSystem.cs&lt;/li&gt;
&lt;li&gt;CultureInfoExtensions.cs&lt;/li&gt;
&lt;li&gt;RegionInfoExtensions.cs&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;Added some null exception handling/wrapping/suppressing to the following (but didn't really look into why it was needed):&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Language.cs&lt;/li&gt;
&lt;li&gt;Calendar.cs&lt;/li&gt;
&lt;li&gt;Region.cs&lt;/li&gt;
&lt;li&gt;CurrencyPeriod.cs&lt;/li&gt;
&lt;li&gt;NumberingSystem.cs&lt;/li&gt;
&lt;li&gt;Script.cs&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Hopefully unnecessary disclaimer: This is a quickly hacked together proof of concept on top of alpha code. Use at your own risk...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/Gc16YalHGG0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/7778473089218557211/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=7778473089218557211" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7778473089218557211?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7778473089218557211?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/Gc16YalHGG0/ncldr-on-windows-phone-8.html" title="NCLDR on Windows Phone 8" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-NoCM4LvKcXo/UTk9V72F1lI/AAAAAAAAAbg/j9Blrz0jQV8/s72-c/wp_ss_20130308_0001.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/03/ncldr-on-windows-phone-8.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQMQnY9eyp7ImA9WhBSGUw.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-9080544851472748588</id><published>2013-02-26T20:59:00.000Z</published><updated>2013-02-26T20:59:43.863Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-26T20:59:43.863Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="About this site" /><title>Why and what I blog about here</title><content type="html">I've been blogging here since August 2006. That's a long time (well it feels like it sometimes) but also shows I was late to the blogging party.&lt;br /&gt;
In that time I've used this blog for various things and covered a variety of subjects.&lt;br /&gt;
While there are still some exceptions, I mostly now write about Windows Phone related topics. Hence the current title of this blog. Yes it may sound a bit big-headed (but what is the web if not for self promotion ;) ) but the real aim is to help other people to be awesome with Windows Phone. Yes it's sometimes nice to blog things as a memory aid but I primarily write for others to read. Yes, it's nice when people (especially those I deem cleverer or most expert than me) let me know they found the answer to an question/issue/problem on my blog.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Why don't I blog more frequently?&lt;/b&gt;&lt;br /&gt;
Time. I just don't have enough of it and writing takes me ages. In fact one of the reasons for initially starting a blog was to encourage me to write more, in the hope of getting faster at it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How do I pick content?&lt;/b&gt;&lt;br /&gt;
If we just consider the Windows Phone related content I post you'll notice something about it. That content isn't anywhere else online. I'm deliberately only adding to the cumulative knowledge of the internet. I'm not trying to duplicate it.&lt;br /&gt;
There are already lots of tutorials on getting started with Windows Phone development. The MSDN documentation is very comprehensive. I don't have the time to and see no real value in creating yet another set of getting started or beginner instructions. I see no value in reposting what is already on MSDN (Yes, I'm looking at a few certain people here!).&lt;br /&gt;
What I want to do is document what isn't documented elsewhere.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Who for?&lt;/b&gt;&lt;br /&gt;
I see two main audiences for my WP related content.&lt;br /&gt;
Primarily I write for the long tail. I hope that at some point when someone hits the same problem or reached the same undocumented issue they'll find my site (thank you Google) and information that can help.&lt;br /&gt;
The secondary audience for my content is those few keen Windows Phone developers (like myself) who want to know everything they can. By sharing what I learn and discover I hope I can contribute knowledge that helps them with their apps and let them know new things or edge cases which aren't documented elsewhere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Personally, I want to be awesome at making awesome apps. But I know I can't change the world, and its apps, by myself. So I'm also trying to help others become better at making better apps. This is why I blog, answer questions on StackOverflow and organise user groups.&lt;br /&gt;
I want everyone to be building better software that helps create a better tomorrow. My first responsibility is to myself and the software I create but I also want to reach out to others and help them too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/gjI7dgavsLg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/9080544851472748588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=9080544851472748588" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/9080544851472748588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/9080544851472748588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/gjI7dgavsLg/why-and-what-i-blog-about-here.html" title="Why and what I blog about here" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/02/why-and-what-i-blog-about-here.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YDQHoyfip7ImA9WhBSGEU.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-4583362199823649903</id><published>2013-02-26T13:26:00.000Z</published><updated>2013-02-26T13:26:11.496Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-26T13:26:11.496Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software dev" /><title>CV tips</title><content type="html">A few tips for your CV:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Include your name in the file name - So it's easy to identify who's CV is who's when there are lots saved to a disk.&lt;/li&gt;
&lt;li&gt;Include your contact details - Agencies may remove them before forwarding to companies but if you're sending direct to a company you need it there.&lt;/li&gt;
&lt;li&gt;Spell check!&lt;/li&gt;
&lt;li&gt;Give it to someone else to spell check! - Seriously. There should be no spelling mistakes in it. Especially in titles/subheadings (I just saw someone list their "KILLS", when I sincerely hope they menat "SKILLS"). Technical jobs demand attention to detail. Be sure you display some when selling yourself.&lt;/li&gt;
&lt;li&gt;Put your work experience in order - Don't jump around in time. If the most relevant work experience you have is many years ago call it out separately and indicate clearly why it is still relevant. Don't put it between the work you did two years ago and three years ago when applying time headings.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/ShcSru1fuUk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/4583362199823649903/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=4583362199823649903" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/4583362199823649903?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/4583362199823649903?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/ShcSru1fuUk/cv-tips.html" title="CV tips" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/02/cv-tips.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cAQno8eSp7ImA9WhBSGE0.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-1219712261095149058</id><published>2013-02-25T14:04:00.000Z</published><updated>2013-02-25T14:04:03.471Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-25T14:04:03.471Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="user groups" /><title>Talking WP8 in Telford</title><content type="html">On Wednesday &lt;a href="http://www.shropshiredev.net/post/27-Feb-Matt-Lacey-Talks-WP8.aspx"&gt;I'll be speaking at ShropshireDevNet&lt;/a&gt;. If you're in the Telford area why not pop along and say hello.&lt;br /&gt;
&lt;br /&gt;
This will be the same as (or very similar to) the talk I gave in Southampton last week.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://photos2.meetupstatic.com/photos/event/2/1/e/a/highres_207248682.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://photos2.meetupstatic.com/photos/event/2/1/e/a/highres_207248682.jpeg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
Here's what some of the people who came last week said:&lt;br /&gt;
&lt;ul class="resetList dividedList comments tooltip-widget-root" data-original-title="" id="conversation"&gt;
&lt;/ul&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div class="figureset"&gt;
&lt;div class="figureset-description"&gt;
"Really great presentation. Good tempo. Dry humour worked well. Well executed and useful examples. Inspired."&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div class="figureset"&gt;
&lt;div class="figureset-description"&gt;
"Excellent.  So much to learn and explore!"&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div class="figureset"&gt;
&lt;div class="figureset-description"&gt;
"Excellent look at the features available for windows 8 phone."&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div class="figureset"&gt;
&lt;div class="figureset-description"&gt;
"Great session. Learnt a lot of useful nuggets of information. I realy want to push ahead with some app ideas now."&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div class="figureset"&gt;
&lt;div class="figureset-description"&gt;
"Good speaker. Whistlestop tour but useful. Speaker mentioned issues and problems as well as good features. "&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div class="figureset"&gt;
&lt;div class="figureset-description"&gt;
"A lot covered, in short time. The constant questioning and boucing around actually worked really well"&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
"Great session, fast paced and good atmosphere"&lt;/blockquote&gt;
&lt;blockquote class="tr_bq"&gt;
"very fast presentation but liked the examples"&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/JmeHQ0FD3pY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/1219712261095149058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=1219712261095149058" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/1219712261095149058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/1219712261095149058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/JmeHQ0FD3pY/talking-wp8-in-telford.html" title="Talking WP8 in Telford" /><author><name>Matt Lacey</name><uri>http://www.blogger.com/profile/11417850590999162080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="31" height="21" src="http://4.bp.blogspot.com/-9Ca05RfjCPU/UL572tixRlI/AAAAAAAAAZU/NUERGrpIZp4/s220/matt_lacey_vegas.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/02/talking-wp8-in-telford.html</feedburner:origLink></entry></feed>
