<?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;CUcARH85eCp7ImA9WhBaFU0.&quot;"><id>tag:blogger.com,1999:blog-33176002</id><updated>2013-05-25T18:30:45.120+01:00</updated><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>571</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;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="1 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>1</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="0 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>0</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><entry gd:etag="W/&quot;A0EDR3w8fSp7ImA9WhBTF0U.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-7390612553152085167</id><published>2013-02-13T21:07:00.001Z</published><updated>2013-02-13T21:07:56.275Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-13T21:07:56.275Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>SD cards on WP8 - not good for much more than just storing music and video</title><content type="html">Today I was asked how to read office documents from an SD card on Windows Phone 8.&lt;br /&gt;
&lt;br /&gt;It turns out that the Office app (hub) doesn't support reading from SD cards. :(&lt;br /&gt;
&lt;br /&gt;
I then wondered if it was possible programatically.&lt;br /&gt;
A quick check of &lt;a href="http://msdn.microsoft.com/en-US/library/windowsphone/develop/jj207065(v=vs.105).aspx"&gt;the file extensions that are reserved and not available to 3rd party apps&lt;/a&gt; did not include any of the ones I was interested in: &lt;b&gt;.doc; .docx; .xls; &amp;amp; .xlsx.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
It seems that MSDN wasn't telling the whole truth. &lt;b&gt;There is no 3rd party access to file with those extensions either.&lt;/b&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/yzFSQXinX2o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/7390612553152085167/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=7390612553152085167" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7390612553152085167?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7390612553152085167?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/yzFSQXinX2o/sd-cards-on-wp8-not-good-for-much-more.html" title="SD cards on WP8 - not good for much more than just storing music and video" /><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/sd-cards-on-wp8-not-good-for-much-more.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4CSHk9eCp7ImA9WhBTEkk.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-5144671911920483099</id><published>2013-02-07T14:56:00.000Z</published><updated>2013-02-07T14:56:09.760Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-07T14:56:09.760Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rant" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>A live tile is more than just a square (or rectangle)</title><content type="html">The clue is in the name really but just because something is square (or rectangle)&amp;nbsp;that doesn't make it a live tile. At best it's just a tile.&lt;br /&gt;
&lt;br /&gt;
The "live" part of the name is there to imply &lt;strong&gt;IT'S ALIVE!&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.imdb.com/title/tt0090305/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" border="0" height="240" src="http://cold-fusion.us/wp-content/uploads/2011/12/weird-science.jpg" title="Weird Science" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;It moves&lt;/li&gt;
&lt;li&gt;It changes&lt;/li&gt;
&lt;li&gt;It updates (all by itself - seemingly)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
This is where the added value is.&lt;br /&gt;
If it just sits there and doesn't do anything it's probably just an icon.&lt;br /&gt;
Having icons may not be a bad thing. Just know the difference and that live tiles are like icons on steroids (but without the negative connotations).&amp;nbsp;:)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;rant state="over" /&amp;gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/0I5EXfE2TuU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/5144671911920483099/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=5144671911920483099" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5144671911920483099?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/5144671911920483099?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/0I5EXfE2TuU/a-live-tile-is-more-than-just-square-or.html" title="A live tile is more than just a square (or rectangle)" /><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/a-live-tile-is-more-than-just-square-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4EQXk4eip7ImA9WhNaFU4.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-872664879324545559</id><published>2013-01-30T08:35:00.000Z</published><updated>2013-01-30T08:35:00.732Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-30T08:35:00.732Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Pivot and Panorama have moved AND changed in WP8</title><content type="html">&lt;i&gt;This post contains content from a talk I gave at &lt;a href="http://wpug.net/"&gt;WPUG&lt;/a&gt; on Jan 29th.&lt;/i&gt;
&lt;br /&gt;
&lt;br /&gt;
As a Windows Phone developer you're, no doubt, intimately familiar with the Pivot and Panorama controls. If you've looked at porting an app that uses them from WP7.x to WP8.0 then you're probably aware that they've moved. &lt;br /&gt;
They used to be in the &lt;b&gt;Windows.Phone.Controls.dll&lt;/b&gt; assembly that you had to distribute with your app.&lt;br /&gt;
They're now in the &lt;b&gt;Windows.Phone.dll&lt;/b&gt; assembly and are already on the device.&lt;br /&gt;
&lt;br /&gt;
The plus side to this is that it means your XAPs can be smaller (due to not needing to include a 102k file) and that the pages which use these controls can load that little bit faster (due to use of a native control)&lt;br /&gt;
&lt;br /&gt;
The downside to this is that you cannot use the same XAML in a WP7.x and a WP8.0 application. If you're targeting both platforms this means duplication and that in turn leads to more work. :(&lt;br /&gt;
&lt;br /&gt;
On WP7.x you do this:
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"
&lt;/pre&gt;
But on WP8.0 you do this:
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
&lt;/pre&gt;
&lt;br /&gt;
That is all relatively well documented and easy to address if you've discovered it yourself. What isn't so well documented is how the controls themselves have changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Let's start with the Panorama&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Here you can see the default instances of the two versions of the Panorama. WP7.x on the left and WP8.0 on the right.&lt;br /&gt;
Notice in particular the differences in the headers.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-KqkvdL_2qCo/UQhfw28SryI/AAAAAAAAAbI/HQjVx1TAs0c/s1600/pano-wp7and8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="532" src="http://4.bp.blogspot.com/-KqkvdL_2qCo/UQhfw28SryI/AAAAAAAAAbI/HQjVx1TAs0c/s640/pano-wp7and8.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Not clear? Let me make it a bit more obvious:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/--yQfMvJoFms/UQhjrG8ZoMI/AAAAAAAAAbQ/fIpEcqVinSk/s1600/pano-wp7and8_lines.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="532" src="http://2.bp.blogspot.com/--yQfMvJoFms/UQhjrG8ZoMI/AAAAAAAAAbQ/fIpEcqVinSk/s640/pano-wp7and8_lines.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Yes, the layout (template) for the PanningTileLayer has changed in WP8.0.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Here's how it looks in WP7.x (obtained via Reflector)

&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;
&lt;localprimitives:panningtitlelayer cachemode="BitmapCache"
 content="{TemplateBinding Title}" contenttemplate="{TemplateBinding TitleTemplate}" fontfamily="{StaticResource PhoneFontFamilyLight}" fontsize="187" grid.row="0" horizontalalignment="Left" margin="10,-76,0,9" x:name="TitleLayer"&gt;
&lt;/localprimitives:panningtitlelayer&gt;&lt;/pre&gt;
And, this is it in WP8.0

&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&lt;localprimitives:panningtitlelayer characterspacing="-35" content="{TemplateBinding Title}" contenttemplate="{TemplateBinding TitleTemplate}" fontfamily="{StaticResource PhoneFontFamilyLight}" fontsize="170" grid.row="0" horizontalalignment="Left" margin="10,-34,0,0" x:name="TitleLayer"&gt;
&lt;/localprimitives:panningtitlelayer&gt;
&lt;/pre&gt;
The item headers have been changed too.
&lt;br /&gt;
WP7.x:

&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&lt;contentcontrol content="{TemplateBinding Header}" contenttemplate="{TemplateBinding HeaderTemplate}" fontfamily="{StaticResource PhoneFontFamilySemiLight}" fontsize="{StaticResource PhoneFontSizeExtraExtraLarge}" horizontalalignment="Left" margin="10,-2,0,26" x:name="header"&gt;
&lt;/contentcontrol&gt;&lt;/pre&gt;
&lt;br /&gt;
WP8.0:

&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&lt;contentcontrol characterspacing="-35" content="{TemplateBinding Header}" contenttemplate="{TemplateBinding HeaderTemplate}" fontfamily="{StaticResource PhoneFontFamilySemiLight}" fontsize="66" horizontalalignment="Left" margin="12,-2,0,38" x:name="header"&gt;
&lt;/contentcontrol&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Does this matter? Why might you care?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Well, if you've got a background image for your Panorama that was designed with the WP7.x layout in mind it may look wrong or out of alignment on WP8.0.
If this is the case then you probably want to change the WP8.0 template to match the 7.x one that was being used previously.&lt;br /&gt;
This is also probably easier than creating a new version of the background image.&lt;br /&gt;
The WP8.0 template also gives more space over to the header. This means you lose some content space.&lt;br /&gt;
In that the contents of the PanoramaItems are probably more important than the header you may want to give them more of the available screen real-estate.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How to roll it back?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Fortunately it's quite simple to add your own template to the WP8.0 version and "undo" the changes:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;    &lt;phone:PhoneApplicationPage.Resources&gt;
        &lt;DataTemplate x:Key="LikeWp7TitleTemplate"&gt;
            &lt;Grid Margin="-12,-41,0,18"&gt;
                &lt;TextBlock Text="{Binding}"
                           Style="{StaticResource PhoneTextHugeStyle}"
                           FontSize="187"
                           CharacterSpacing="0"/&gt;
            &lt;/Grid&gt;
        &lt;/DataTemplate&gt;
        &lt;DataTemplate x:Key="LikeWp7ItemHeaderTemplate"&gt;
            &lt;Grid Margin="-14,-10,0,-12"&gt;
                &lt;TextBlock Text="{Binding}"
                           Style="{StaticResource PhoneTextNormalStyle}"
                           FontFamily="{StaticResource PhoneFontFamilySemiLight}"
                           FontSize="72"
                           CharacterSpacing="0"/&gt;
            &lt;/Grid&gt;
        &lt;/DataTemplate&gt;
    &lt;/phone:PhoneApplicationPage.Resources&gt;
&lt;/pre&gt;

&lt;br /&gt;

&lt;i&gt;Yes some of these values may look odd at first look but this
will enable the title and header to be displayed in exactly the same position
as it would on WP7. (This was tested thoroughly by a designer with a very keen
eye for pixel differences.&lt;/i&gt; ;)

&lt;br /&gt;&lt;br /&gt;
You can then apply them like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: xml;"&gt;&lt;phone:Panorama Title="My application"
                TitleTemplate="{StaticResource LikeWp7TitleTemplate}" &gt;

    &lt;phone:PanoramaItem Header="first item"
                        HeaderTemplate="{StaticResource LikeWp7ItemHeaderTemplate}"&gt;
 ...
    &lt;/phone:PanoramaItem&gt;
... 
&lt;/phone:Panorama&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;And what about the Pivot control?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Well, this has changed in a much subtler way and, fortunately, is less likely to impact you. &lt;br /&gt;
&lt;br /&gt;
Something that is quite commonly done is to take a Pivot control and retemplate it to hide the header by removing the &lt;b&gt;PivotHeadersControl&lt;/b&gt; from the template, to create a simple swiping control.&lt;br /&gt;
&lt;br /&gt;
If this is missing in WP8.0 then the page with this on will cause the app to crash when opened.&lt;br /&gt;
You have been warned.&lt;br /&gt;
There are also other ways of hiding the item header if you so wish.&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/wS8qagULtMw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/872664879324545559/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=872664879324545559" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/872664879324545559?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/872664879324545559?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/wS8qagULtMw/pivot-and-panorama-have-moved-and.html" title="Pivot and Panorama have moved AND changed in WP8" /><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/-KqkvdL_2qCo/UQhfw28SryI/AAAAAAAAAbI/HQjVx1TAs0c/s72-c/pano-wp7and8.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/01/pivot-and-panorama-have-moved-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIEQXo4cCp7ImA9WhNbF0Q.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-4344455566953624469</id><published>2013-01-21T18:55:00.000Z</published><updated>2013-01-21T18:55:00.438Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-21T18:55:00.438Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>lorem ipsum in Windows Phone 8 calendar</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Here's a screenshot of my calendar on my phone.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/--Nf-T99wQjo/UP1jJbpL8zI/AAAAAAAAAas/QOI_sQ8fbNk/s1600/wp_ss_20130121_0001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/--Nf-T99wQjo/UP1jJbpL8zI/AAAAAAAAAas/QOI_sQ8fbNk/s320/wp_ss_20130121_0001.png" width="192" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
No, I'm not scared of you seeing my personal data as Window Phone won't even show it to me!&lt;br /&gt;
See (Zoomed 150%)&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/-r0wQ5OTGXoo/UP1j35ltZnI/AAAAAAAAAa0/l8yB7As5uc8/s1600/calendar_zoomed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="401" src="http://4.bp.blogspot.com/-r0wQ5OTGXoo/UP1j35ltZnI/AAAAAAAAAa0/l8yB7As5uc8/s640/calendar_zoomed.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
That's right, in the month view they just show placeholder text.&lt;br /&gt;
The number of entries corresponds to the number of items each day but the displayed text does not.&lt;br /&gt;
&lt;br /&gt;
I assume this is just for some performance optimization (probably when animating)&amp;nbsp;but it looks lazy :(&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/ufHpXDbD1wI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/4344455566953624469/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=4344455566953624469" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/4344455566953624469?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/4344455566953624469?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/ufHpXDbD1wI/lorem-ipsum-in-windows-phone-8-calendar.html" title="lorem ipsum in Windows Phone 8 calendar" /><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/--Nf-T99wQjo/UP1jJbpL8zI/AAAAAAAAAas/QOI_sQ8fbNk/s72-c/wp_ss_20130121_0001.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2013/01/lorem-ipsum-in-windows-phone-8-calendar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4ARnc8eCp7ImA9WhNVEE0.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-7019700077553045134</id><published>2012-12-20T12:02:00.000Z</published><updated>2012-12-20T12:02:27.970Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-20T12:02:27.970Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><title>Googles advice to those building Android tablet apps is also useful when porting from Windows Phone to Windows 8</title><content type="html">Goolgle has a &lt;a href="http://developer.android.com/distribute/googleplay/quality/tablet.html"&gt;tablet app quality checklist&lt;/a&gt; recommended for anyone wanting to publish an app for Android tablets in the Play store.&lt;br /&gt;
&lt;br /&gt;
It's no doubt useful for anyone porting their first Android app to run on a tablet (from a phone) but most of the points apply regardless of the OS being used and so could apply to those of you making the transition from Windows Phone to Windows 8.&lt;br /&gt;
&lt;br /&gt;
As an idea of how it is relevant, see this partial* list of section headings:&lt;br /&gt;
&lt;br /&gt;
1. Test for Core App Quality&lt;br /&gt;
2. Optimize your layouts for larger screens&lt;br /&gt;
3. Take advantage of extra screen area available on tablets&lt;br /&gt;
4. Use Icons and other assets that are designed for tablet screens&lt;br /&gt;
5. Adjust font sizes and touch targets for tablet screens&lt;br /&gt;
7. Offer the app's full feature set to tablet users&lt;br /&gt;
8. Don’t require hardware features that might not be available on tablets&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;* Android specific sections ommitted.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Check out the full details: &lt;a href="http://developer.android.com/distribute/googleplay/quality/tablet.html"&gt;http://developer.android.com/distribute/googleplay/quality/tablet.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Let me know if you find this useful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/IInr_igbHIo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/7019700077553045134/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=7019700077553045134" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7019700077553045134?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/7019700077553045134?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/IInr_igbHIo/googles-advice-to-those-building.html" title="Googles advice to those building Android tablet apps is also useful when porting from Windows Phone to Windows 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><thr:total>4</thr:total><feedburner:origLink>http://blog.mrlacey.co.uk/2012/12/googles-advice-to-those-building.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4MQX84cSp7ImA9WhNWF0k.&quot;"><id>tag:blogger.com,1999:blog-33176002.post-2698702653116871369</id><published>2012-12-17T12:23:00.000Z</published><updated>2012-12-17T12:23:00.139Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-17T12:23:00.139Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><title>Security and access to SMS</title><content type="html">Lots of Windows Phone developers want access to SMS*. It's an interesting data source and can allow the creation of lots of useful, helpful and interesting apps. There are security implications of allowing such access though and, unfortunately, most developers seem happy to ignore this or not take it seriously.&lt;br /&gt;
&lt;br /&gt;
Today I heard about a scam that was only possible due to SMS access and "stole an estimated &lt;strong&gt;36+ million Euros&lt;/strong&gt; from more than &lt;strong&gt;30,000 bank customers&lt;/strong&gt; from multiple banks" (emphasis mine).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can &lt;a href="http://www.checkpoint.com/products/downloads/whitepapers/Eurograbber_White_Paper.pdf"&gt;read more about the Eurograbber attack here&lt;/a&gt; but I think the important takeaway for developers is to focus on security and not easily dismiss or criticise platform limitations and restrictions that are there to protect the person who's phone it is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And for everyone entering passwords or security information on a website. Always type in the domain for a website directly. Avoid following links, especially if it's a shortened or redirect link.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If you don't know, Windows Phone does not allow developers of third party apps to access&amp;nbsp;a phone's&amp;nbsp;SMS history as part of it's strategy for protecting data security.&lt;br /&gt;
&lt;br /&gt;
Found via &lt;a href="http://mobilephonedevelopment.com/archives/1574"&gt;Simon Judge&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/MattLacey/~4/5zFy9pjyVwg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.mrlacey.co.uk/feeds/2698702653116871369/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=33176002&amp;postID=2698702653116871369" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2698702653116871369?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/33176002/posts/default/2698702653116871369?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MattLacey/~3/5zFy9pjyVwg/security-and-access-to-sms.html" title="Security and access to SMS" /><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/2012/12/security-and-access-to-sms.html</feedburner:origLink></entry></feed>
