<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' 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'><id>tag:blogger.com,1999:blog-30433900</id><updated>2020-08-31T22:55:27.081+12:00</updated><category term=".net"/><category term="C#"/><category term="Code Sample"/><category term="Devices"/><category term="Pos .Net"/><category term="POS"/><category term="strings"/><category term="Windows Phone 7"/><category term="sql server"/><category term="Microsoft"/><category term="Tools"/><category term="WP7"/><category term="app"/><category term="exceptions"/><category term="sql"/><category term="debug"/><category term="smartphone"/><category term="threading"/><category term="user interface"/><category term="Internet"/><category term="Windows CE"/><category term="cellphone"/><category term="compact framework"/><category term="generic"/><category term="Humour"/><category term="UWP"/><category term="WinRT"/><category term="Windows Forms"/><category term="ce"/><category term="deployment"/><category term="download"/><category term="event"/><category term="performance"/><category term="Ontempo Store"/><category term="QR Code"/><category term="TFS"/><category term="VB6"/><category term="Windows"/><category term="class library"/><category term="collection"/><category term="compatibility"/><category term="controls"/><category term="debug visualizer"/><category term="delegate"/><category term="documentation"/><category term="help"/><category term="install"/><category term="msmq"/><category term="screen"/><category term="visual studio"/><category term="visualiser"/><category term="xml"/><category term="Behaviours"/><category term="Bugs"/><category term="Build"/><category term="Code Contracts"/><category term="Connectivity"/><category term="Conspiracy Theories"/><category term="IE"/><category term="Network"/><category term="Obsolescence"/><category term="Operator"/><category term="Software Quality"/><category term="Tech Ed"/><category term="VCard"/><category term="WPF"/><category term="WebAPI"/><category term="Work Items"/><category term="XAML"/><category term="activate"/><category term="activecontrol"/><category term="animation"/><category term="asyncronous"/><category term="barcode"/><category term="break on all errors"/><category term="database"/><category term="dispose"/><category term="focus"/><category term="framework"/><category term="html"/><category term="icon"/><category term="image"/><category term="intellisense"/><category term="interface"/><category term="invoke"/><category term="json"/><category term="member"/><category term="scripts"/><category term="serialization"/><category term="setup"/><category term="sqlce"/><category term="sqlcompact"/><category term="sqleverywhere"/><category term="sqlmobile"/><category term="tooltip"/><category term="web browser"/><category term="zxing"/><title type='text'>Yort on .NET</title><subtitle type='html'>This is where &#39;Yort&#39; praises, rants, raves and otherwise talks nonsense about Microsoft .NET and Visual Studio. Or anything else related to software development or Microsoft that he feels like throwing in. It&#39;s his blog after all...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default?alt=atom&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default?alt=atom&amp;start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>150</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30433900.post-939294059275582622</id><published>2016-06-23T22:51:00.003+12:00</published><updated>2016-06-23T22:52:08.863+12:00</updated><title type='text'>Share Contact for Windows Phone Privacy Policy</title><content type='html'>Share Contact&amp;nbsp;for Windows Phone is used to deliberately and explicitly share  contact information, either your own or other peoples,&amp;nbsp;from your phone address  book. It will only share data when you specifically ask it to, and it allows you  to choose which data is shared. When sharing by email or SMS, you will be able  to see the message before it is sent, allowing for final control over the data  shared. &lt;br /&gt;&lt;br /&gt;The app may capture your own contact information for the purposes of later  sharing with other people. In this case you will be explicitly asked to provide  the contact information yourself. The information will be stored on your device,  but will only be shared when you specify. &lt;br /&gt;&lt;br /&gt;When sharing other people’s contact information please ensure you respect  their privacy and only share their details with their consent. You are  responsible for the act of and information shared. The application may gather anonymous usage data, as aggregate values, or data  stored against anonymous device or user id’s which are not directly linked to  your identity. This data will be used for the purposes of improving and fixing  the app. It will not be sold or deliberately shared. The data may be collected  and/or stored in 3rd party systems such as cloud services, but only as private  data and not shared with the 3rd party host. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Your Consent&lt;/strong&gt;&lt;br /&gt;By using our services and application, you  consent to our privacy policy and disclaimer.  &lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;Contacting Us &lt;/strong&gt;If there are any questions regarding this  privacy policy you may contact us using the information below; &lt;br /&gt;email: &lt;a href=&quot;https://www.blogger.com/null&quot;&gt;yort@yortondotnet.com&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;&lt;br /&gt;This  program is provided &quot;as is&quot; without warranty of any kind, either express or  implied, including but not limited to, the implied warranties of merchantability  and fitness for a particular purpose. &lt;br /&gt;The entire risk as to the quality and  performance of the program is with you. Should the program prove defective, you  assume the cost of all necessary servicing, repair and/or correction. In no  event unless required by applicable law will any copyright holder, or any other  party be liable to you for damages, including any general, special, incidental  or consequential damages arising out of the use, misuse or inability to use the  program (including but not limited to loss of use, data or profits), even if  such holder or other party has been advised of the possibility of such damages.  &lt;br /&gt;By accepting this disclaimer you agree to use the software at your own risk  and irrevocably waive all your rights to seek damages or relief of any nature  from us arising out of or in connection with your use of the software. &lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;i&gt;&lt;/i&gt;&lt;u&gt;&lt;/u&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sup&gt;&lt;/sup&gt;&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/939294059275582622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2016/06/share-contact-generator-for-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/939294059275582622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/939294059275582622'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2016/06/share-contact-generator-for-windows.html' title='Share Contact for Windows Phone Privacy Policy'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-417792343550591802</id><published>2016-01-11T19:21:00.000+13:00</published><updated>2016-01-11T19:22:24.919+13:00</updated><title type='text'>Azure Notification Hub &quot;Tags&quot; Cannot Contain Spaces</title><content type='html'>A quick word&amp;nbsp;on&amp;nbsp;Azure Notification Hub &quot;Tags&quot;. &lt;br /&gt;&lt;br /&gt;&quot;Tags&quot; cannot contain spaces. This isn&#39;t covered/obvious is most of the  samples/tutorials. They don&#39;t use spaces and don&#39;t discuss restrictions on the  tag content. &lt;br /&gt;&lt;br /&gt;The only documentation I&#39;ve found so far on allowed characters&amp;nbsp;is this;&amp;nbsp;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows/apps/xaml/dn792122.aspx&quot;&gt;&lt;span style=&quot;color: #2187bb;&quot;&gt;https://msdn.microsoft.com/en-us/library/windows/apps/xaml/dn792122.aspx&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Before I found this I spent some time trying to figure out why my push  notifications weren&#39;t working. It appears the Microsoft.Azure.NotificationHub  packages doesn&#39;t report errors with invalid tags when registering them. &lt;br /&gt;&lt;br /&gt;Calling methods such as&amp;nbsp;CreateMpnsTemplateRegistrationAsync with an invalid  tag will &lt;b&gt;not&lt;/b&gt; throw an exception. The result object will appear correct, with a  valid registration id. The only hint of a problem (apart from it not working)  is&amp;nbsp;the tags collection on the result&amp;nbsp;will be empty. If more than one  tag&amp;nbsp;is&amp;nbsp;supplied but only some&amp;nbsp;are&amp;nbsp;invalid, none register. &lt;br /&gt; &lt;br /&gt;SendTemplateNotificationAsync &lt;strong&gt;does&lt;/strong&gt; throw an exception if you  send to an invalid tag.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;In my case I was sending to a valid tag, but it was not registered because  one of the other tags was invalid during registration. It took me a while to  figure it out&amp;nbsp;since the registration looked like it was working and the send was  successful but no notification arrived. &lt;br /&gt;&lt;br /&gt;The lack of spaces is pretty sad given my requirements (many of my tags come  from&amp;nbsp;user configuration). What is most annoying though is the lack of  validation/error reporting on registration. An exception with a good error  message would have saved me a lot of time. Hopefully this note saves someone  else the time I wasted.&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;i&gt;&lt;/i&gt;&lt;u&gt;&lt;/u&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sup&gt;&lt;/sup&gt;&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/417792343550591802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2016/01/azure-notification-hub-tags-cannot.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/417792343550591802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/417792343550591802'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2016/01/azure-notification-hub-tags-cannot.html' title='Azure Notification Hub &quot;Tags&quot; Cannot Contain Spaces'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-2227143976117826087</id><published>2015-08-27T18:31:00.001+12:00</published><updated>2015-08-30T14:37:03.794+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="json"/><category scheme="http://www.blogger.com/atom/ns#" term="serialization"/><category scheme="http://www.blogger.com/atom/ns#" term="WebAPI"/><title type='text'>Getting Lazy with LINQ, Json.Net and WebAPI</title><content type='html'>&lt;p&gt;I&#39;ve been working on a project that uses a &lt;a href=&quot;http://www.asp.net/web-api&quot;&gt;WebAPI&lt;/a&gt; hosted via &lt;a href=&quot;http://owin.org/&quot;&gt;OWIN&lt;/a&gt; inside a Win32 client application. Yes, inside a client application. Forgive me. Let&#39;s not quibble about it.  &lt;p&gt;My Controller Actions generally return an IEnumerable&amp;lt;T&amp;gt;, with T varying depending on the Action. Most of my Actions return the (raw) result of a LINQ query, which is convertible to IEnumerable&amp;lt;T&amp;gt;. A contrived example;&lt;pre class=&quot;csharpcode&quot;&gt;[HttpGet]&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; IEnumerable&amp;lt;ApiCustomer&amp;gt; GetAllCustomers()&lt;br /&gt;{&lt;br /&gt;  &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; (from customer &lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; _CustomerRepository.GetAll &lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;where&lt;/span&gt; c.IsPublic &lt;br /&gt;    select GetApiCustomerFromFullCustomer(customer));&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;All was well until I needed to return an IEnumerable&amp;lt;BaseType&amp;gt; with the elements as different derived types. To enable this, you must tell the serialisation formatter to include type information. This allows the client to determine what type to create and populate from the serialised data. Luckily, the awesome Json.Net solves this problem. Just configure your default serialiser to include the type information;&lt;pre class=&quot;csharpcode&quot;&gt;config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;TypeNameHandling.Object should also work. The difference is Auto is only adds the type information where it detects a difference in the types used. Object always includes the type information. &lt;br /&gt;&lt;p&gt;Unfortunately, this is where I came unstuck. I have declared a return type of IEnumerable&amp;lt;T&amp;gt;, but I&#39;m not returning one. Sort of. IEnumerable&amp;lt;T&amp;gt; is an interface, so you can&#39;t actually return an instance of it. You can, and I do, return something that is castable/convertible to it. &lt;br /&gt;&lt;p&gt;The result of a LINQ statement is actually a generic type, created by the compiler at runtime. If you check the type at runtime you&#39;ll see a name like &quot;WhereSelectIterator`2&quot;. This object instance is an enumerator (IEnumerator&amp;lt;T&amp;gt; or IEnumerator) that allows lazy enumeration of the query. It is also convertible to IEnumerable&amp;lt;T&amp;gt;, so without type information (de)serialises fine. &lt;br /&gt;&lt;p&gt;Json.Net serialises the LINQ result with type information of &quot;WhereSelectIterator`2&quot; (or similar). Presumably because &quot;WhereSelectIterator`2&quot; isn’t exactly IEnumerable&amp;lt;T&amp;gt;. When the client deserialises the data it can&#39;t find &quot;WhereSelectIterator`2&quot;. That type only existed at runtime on the server, it&#39;s not defined in any assembly on the client. This results in an exception being thrown. &lt;br /&gt;&lt;p&gt;Json.Net already knows how to serialise some types when returned as IEnumerable&amp;lt;T&amp;gt;. Lists and arrays work (serialised as a Json array), and maybe other collection types too. Because of that behaviour, I had expected anything convertible to IEnumerable&amp;lt;T&amp;gt; would do the same. Unfortunately the enumerators from LINQ queries aren&#39;t treated the same way. I&#39;m not sure if this is a bug in Json.Net. I haven&#39;t checked the Json.Net code, so I don&#39;t know what it actually does in detail. I&#39;m also not sure if there are use cases I&#39;m unaware of that might depend on this behaviour. It’s possible this behaviour is by design. Either way, I had a problem. &lt;br /&gt;&lt;p&gt;I needed a solution. The obvious one, often given on the interwebs, is to &quot;just add ToList or ToArray&quot; to the LINQ queries, so they return a type that exists on the client. This does work, but it didn&#39;t suit me. &lt;br /&gt;&lt;p&gt;I have a lot of Controllers and Actions using this pattern and I don&#39;t want to change them all. Calling ToList/ToArray also has a cost in terms of memory allocation and CPU usage. These may be minor and we shouldn&#39;t &quot;prematurely optimise&quot;, but ignoring these issues felt sloppy. There&#39;s also the environment to consider. The API is running in a long lived instance of a client application, on low spec hardware and often in use by a local interactive user simultaneously. It wasn&#39;t designed up front to host the API, or to serve more than one user at once.&amp;nbsp; Memory fragmentation, garbage collections and excessive CPU usage would all be cause for alarm. In a perfect world we&#39;d have a different design. At the moment time to market and available resources are choosing our path. Another concern is every developer who ever works on this has to avoid the same issue. This isn&#39;t obvious. The code compiles and runs fine on the server. It&#39;s only when you try to deserialise it in a remote process that you&#39;ll find a problem. Even then, you might not understand the problem or how to solve it. That moves the &quot;&lt;a href=&quot;http://blogs.msdn.com/b/brada/archive/2003/10/02/50420.aspx&quot;&gt;pit of success&lt;/a&gt;&quot; out of the common path. &lt;br /&gt;&lt;p&gt;I could have written a WebAPI filter which automatically called ToArray/ToList when appropriate. This would have solved some of the problems above, but not the efficiency issues. &lt;br /&gt;&lt;p&gt;There&#39;s always a question of &quot;did you look hard enough?&quot; but I only found one other published solution. This is to change the Action return type to IList&amp;lt;T&amp;gt;, List&amp;lt;T&amp;gt;, or Array&amp;lt;T&amp;gt; or something similar that is a &#39;more concrete&#39; type. This has pretty much all the same issues as the other solution, perhaps more. Some people insisted this was more correct architecture anyway, which I question. It&#39;s possible Array&amp;lt;T&amp;gt; is more &#39;correct&#39;, but even then I think it&#39;s questionable. List/IList definitely doesn&#39;t seem better to me. &lt;br /&gt;&lt;p&gt;So without further ado, I present my solution: A JsonConverter for generic enumerators. This class plugs into the Json.Net serialiser, detects when the object to serialise is an IEnumerator&amp;lt;T&amp;gt; and writes out a Json array. Deserialisation is left to Json.Net to handle with its default logic. With this class and one line of code to use it, all my Controller Action methods now work as I expect. &lt;br /&gt;&lt;p&gt;Consider this code released under the &lt;a href=&quot;http://opensource.org/licenses/MIT&quot;&gt;MIT license&lt;/a&gt;, and with the caveat that it &quot;works for me&quot;. I&#39;m not aware of any immediate short comings, but I didn&#39;t code it for anyone else. There&#39;s no error handling, no unit tests. I haven&#39;t checked if it copes with nulls. I didn&#39;t worry about the naming. I haven&#39;t optimised the code for maximum performance. I didn’t try it with other generic types. It’s provided “as is” and I do not want to set any expectations of quality. YMMV. &lt;br /&gt;&lt;p&gt;You can configure the default serialiser to use it like this;&lt;pre class=&quot;csharpcode&quot;&gt;config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(&lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; LinqToIEnumerableJsonConverter());&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here&#39;s the class itself (also &lt;a href=&quot;https://gist.github.com/Yortw/6c7d8927af289fd4f5c3&quot;&gt;available as a gist&lt;/a&gt;);&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;internal&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; LinqToIEnumerableJsonConverter : JsonConverter&lt;br /&gt;{&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;bool&lt;/span&gt; CanConvert(Type objectType)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (!objectType.IsGenericType) &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;false&lt;/span&gt;;&lt;br /&gt;        var genericType = objectType.GenericTypeArguments.First();&lt;br /&gt;&lt;br /&gt;        var enumeratorType = &lt;span class=&quot;kwrd&quot;&gt;typeof&lt;/span&gt;(IEnumerator&amp;lt;&amp;gt;).MakeGenericType(genericType);&lt;br /&gt;&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; (objectType.GetInterface(enumeratorType.Name) != &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;bool&lt;/span&gt; CanRead&lt;br /&gt;    {&lt;br /&gt;        get&lt;br /&gt;        {&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;false&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;bool&lt;/span&gt; CanWrite&lt;br /&gt;    {&lt;br /&gt;        get&lt;br /&gt;        {&lt;br /&gt;            &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;true&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; ReadJson(JsonReader reader, Type objectType, &lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; existingValue, JsonSerializer serializer)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; WriteJson(JsonWriter writer, &lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;value&lt;/span&gt;, JsonSerializer serializer)&lt;br /&gt;    {&lt;br /&gt;        writer.WriteStartArray();&lt;br /&gt;        &lt;span class=&quot;kwrd&quot;&gt;foreach&lt;/span&gt; (var item &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; (IEnumerable)&lt;span class=&quot;kwrd&quot;&gt;value&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            serializer.Serialize(writer, item);&lt;br /&gt;        }&lt;br /&gt;        writer.WriteEndArray();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now go forth and serialise!&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/2227143976117826087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2015/08/getting-lazy-with-linq-jsonnet-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/2227143976117826087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/2227143976117826087'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2015/08/getting-lazy-with-linq-jsonnet-and.html' title='Getting Lazy with LINQ, Json.Net and WebAPI'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-8217975740227396458</id><published>2015-07-27T10:44:00.001+12:00</published><updated>2015-07-27T10:44:23.746+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="UWP"/><category scheme="http://www.blogger.com/atom/ns#" term="WinRT"/><title type='text'>Compose Tasks, UWP &amp; Crash Workarounds</title><content type='html'>&lt;p&gt;&lt;br&gt;If you’ve worked on WP Silverlight applications you’re probably familiar with the ‘compose tasks’. These present consistent UI for &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows/apps/hh394003(v=vs.105).aspx&quot;&gt;composing email&lt;/a&gt;, &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows/apps/hh394005(v=vs.105).aspx&quot;&gt;sms messages&lt;/a&gt; or &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows/apps/hh394025(v=vs.105).aspx&quot;&gt;making a phone call&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Recently I needed similar behaviour in a UWP application where the API is different. The good news is this functionality still exists. It&#39;s just not always be obvious where to look.  &lt;p&gt;The replacement for PhoneCallTask is &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows.applicationmodel.calls.phonecallmanager.showphonecallui.aspx&quot;&gt;Windows.ApplicationModel.Calls.PhoneCallManager.ShowPhoneCallUI&lt;/a&gt;.  &lt;p&gt;The replacement for EmailComposeTask is the &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows.applicationmodel.email.emailmanager.showcomposenewemailasync.aspx&quot;&gt;Windows.ApplicationModel.Email.EmailManager.ShowComposeNewEmailAsync&lt;/a&gt; method and the &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows.applicationmodel.email.emailmessage.aspx&quot;&gt;Windows.ApplicationModel.Email.EmailMessage&lt;/a&gt; class.  &lt;p&gt;The ComposeSmsTask also has a replacement API. &lt;strong&gt;&lt;font color=&quot;#ff0000&quot;&gt;There is a significant&amp;nbsp; issue using this on the desktop versions of Windows 10.&lt;/font&gt;&lt;/strong&gt;  &lt;p&gt;The replacement for ComposeSmsTask is the &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows.applicationmodel.chat.chatmessagemanager.aspx&quot;&gt;Windows.ApplicationModel.Chat.ChatMessageManager. ShowComposeSmsMessageAsync&lt;/a&gt; method and &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows.applicationmodel.chat.chatmessage.aspx&quot;&gt;Windows.ApplicationModel.Chat.ChatMessage&lt;/a&gt; class.  &lt;p&gt;This is a universal API and thus is available on desktop and mobile platforms. In the pre-release bits for UWP, this works fine on mobile but will crash the app on desktop. Whether this will be fixed before the official release is unknown. Note I really mean crash. There is no exception to catch and the unhandled exception event doesn&#39;t get raised. The process just dies in a nasty way. ApiInformation.IsTypePresent and such don&#39;t help because the API is intentionally available on both platforms.&amp;nbsp;&amp;nbsp; &lt;p&gt;This leaves you with no (good) way to support the feature and avoid the crash. Thankfully &lt;a href=&quot;https://twitter.com/aruntalkstech&quot;&gt;@aruntalkstech&lt;/a&gt; has &lt;a href=&quot;https://aruntalkstech.wordpress.com/2015/07/24/chatmessagemanager-showcomposesmsmessageasync-crashes-on-windows-10-desktop/&quot;&gt;the answer&lt;/a&gt;. You can use &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows.applicationmodel.chat.chatmessagemanager.gettransportsasync.aspx&quot;&gt;ChatMessageManager.GetTransportsAsync&lt;/a&gt; to determine if the current device supports any messaging protocols. If it does, it’s safe to call the compose API, if not then you should avoid it. For &lt;a href=&quot;https://aruntalkstech.wordpress.com/2015/07/24/chatmessagemanager-showcomposesmsmessageasync-crashes-on-windows-10-desktop/&quot;&gt;more information sample code, see Arun’s blog post.&lt;/a&gt;&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/8217975740227396458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2015/07/compose-tasks-uwp-crash-workarounds.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/8217975740227396458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/8217975740227396458'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2015/07/compose-tasks-uwp-crash-workarounds.html' title='Compose Tasks, UWP &amp;amp; Crash Workarounds'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-291536084780912095</id><published>2015-07-26T14:22:00.000+12:00</published><updated>2015-07-31T21:41:51.337+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="barcode"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="cellphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="QR Code"/><category scheme="http://www.blogger.com/atom/ns#" term="smartphone"/><category scheme="http://www.blogger.com/atom/ns#" term="UWP"/><category scheme="http://www.blogger.com/atom/ns#" term="WinRT"/><category scheme="http://www.blogger.com/atom/ns#" term="zxing"/><title type='text'>Mobile Barcode Scanning With Zxing.Net</title><content type='html'>&lt;p&gt;&lt;br&gt;A LOB mobile application I’m working on requires the ability to scan barcodes. A proper hardware solution would be best but sourcing something suitable has proven challenging. As a result we’re trying to scan barcodes using the device’s camera.  &lt;p&gt;When we started the app was a &lt;a href=&quot;file:///C:/Users/troy.ONTEMPO/AppData/Local/Temp/WindowsLiveWriter1286139640/9E6A0C43059D/www.xamarin.com/&quot;&gt;Xamarin&lt;/a&gt; project&lt;a href=&quot;http://components.xamarin.com/view/zxing.net.mobile/&quot;&gt; &lt;/a&gt;so we tried &lt;a href=&quot;http://components.xamarin.com/view/zxing.net.mobile/&quot;&gt;Zxing.Net.Mobile&lt;/a&gt;. Unfortunately performance was abysmal. Many barcodes wouldn’t scan at all and the ones that did required many seconds to get a read. To be fair, we may have configured the settings badly. We found little guidance on the right settings. Even on iOS, enabling Apple&#39;s native API’s for decoding barcodes only made marginal difference.  &lt;p&gt;We then looked at commercial solutions. We&#39;re not against paying for quality. Most of these SDK&#39;s provided a great experience. Yet we found the licenses over the top and difficult to understand. One company wanted tens of thousands of dollars because we will distribute the app via the store. This is despite our app requiring a specialised back end, limiting the audience to a few thousand people. Several others wanted per user per symbology, or per user per platform licenses.&amp;nbsp; These quickly rack up into the tens of thousands as well. The licenses were all yearly or monthly renewals too. Tracking the exact number of users is problematic. Our devices may not connect to the internet, or connect only periodically.&amp;nbsp; These devices aren’t personal the same way most mobile phones are. We will have several different users using the same device at different times.&amp;nbsp; There isn’t an accurate way to track users per device, or total users. No one talked about these issues, or how to report active users for licensing purposes. Another problem is most of these SDK’s only support one or two platforms not all three.  &lt;p&gt;When we changed to a UWP application the situation was even worse. There are few SDK’s for the Windows platform and none that currently target UWP. There are some for WinRT that work in a UWP project, but they have separate binaries for x86/x64 and arm. None have packaged these binaries in a way a UWP project can reference and remain &#39;universal&#39;. I believe this can be solved by repackaging the binaries ourselves but we never tried.  &lt;p&gt;So we returned to &lt;a href=&quot;https://www.nuget.org/packages/ZXing.Net/&quot;&gt;Zxing.Net&lt;/a&gt;-, but this time only for decoding the barcodes. We wrote our own camera integration, based on the &lt;a href=&quot;https://github.com/Microsoft/Windows-universal-samples&quot;&gt;CameraGetPreviewFrame&lt;/a&gt; sample from Microsoft. We also configured Zxing differently. Now we have something with ‘acceptable’ performance for camera based barcode scanning. Unscientific tests show it out performs some implementations our competitors have used on iOS. What follows are tips based on our experience for getting the best out of Zxing. Your mileage may vary. Hardware, environmental conditions and use cases can have an impact. These tips should serve as a good starting point though.  &lt;p&gt;&lt;strong&gt;Speed is King&lt;/strong&gt;  &lt;p&gt;The key take away is this: ensure decoding the barcode is fast. Slow decoding of the barcode is death to the user experience. This might seem counter-intuitive because accuracy would seem just as important. The trick is, with camera based scanning you have a lot of ‘dead’ frames. Frames where the barcode isn&#39;t present, isn&#39;t in focus or isn&#39;t lit correctly. The longer it takes to process each dead frame, the longer it will take to get a read.  &lt;ul&gt; &lt;li&gt;Use a low to medium resolution. In my testing resolutions between 640x480 and 1024x768 work best. A higher resolution might seem better, as it should improve the barcode definition. In reality it slows down the decoding process and doesn’t help. Most mobile devices pick the highest resolution by default. They assume you’re trying to take video for the sake of video. You need to choose a sensible resolution for barcode scanning. &lt;br&gt; &lt;li&gt;Don’t queue frames. I never actually tried this, but I did think about it. Later I found someone who had tried it, and abandoned it as a bad idea. Most queued frames will be ‘dead’ frames. Processing dead frames means getting a valid read will take longer. Just get a frame, attempt a decode, then get another frame. Don’t worry about the frames that get dropped. &lt;br&gt; &lt;li&gt;Configure Zxing for best performance. Your use cases determine the best settings for you. I recommend these settings as a starting point.&amp;nbsp; &lt;ul&gt; &lt;li&gt;AutoRotate = false. Turning this on means decodes take about three times as long. Note you &lt;strong&gt;may&lt;/strong&gt; need to enable this if you&#39;re scanning 2D barcodes. For 1D barcodes it is generally not helpful as orientation doesn&#39;t matter anyway.&amp;nbsp; &lt;br&gt; &lt;li&gt;TryHarder = false. This setting isn’t intended for mobile scanning. It’s for large documents (say A4 document scans) that may contain barcodes anywhere. It makes a big impact to speed. Turn this off. You don’t need it. Trust me. &lt;br&gt; &lt;li&gt;TryInverted = false. I haven&#39;t found this ever helped.&amp;nbsp; &lt;br&gt; &lt;li&gt;Only add barcode formats you need to decode. As a &lt;em&gt;general&lt;/em&gt; rule every barcode symbology you add increases the decode time. Get rid of the ones you don’t need. In our app we either enable all 1D barcodes and QR codes, or just all 1D barcodes. Which set is based on the context we are scanning in.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;If you need to rotate the preview frames, do so efficiently. The Microsoft sample referenced above shows the most efficient way. There is a more discoverable, simpler mechanism but it is significantly slower. Use the one from the sample.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Using these settings we get a decode rate of 80-110ms per frame on a Lumia 636. We average about 10 decoded frames a second. While this might not sound great, we get a pretty good experience.  &lt;p&gt;&lt;strong&gt;Auto Focus is Overrated&lt;/strong&gt;  &lt;p&gt;My last tip concerns focus. There’s a lot written about the need for ‘auto focus’ to get fast accurate reads. There’s also ‘continuous focus’ supported on some phones which sounds like a great idea. We have abandoned both of these. Continuous focus was never good enough to get a barcode read, in my experience. The frames looked ok to my eyes but Zxing.Net never found a barcode.  &lt;p&gt;Auto focus is a bit more complex. It does work. We do use it in our app. We will perform an auto-focus if the user taps on the frame preview control on screen. This helps if the user is having difficulty or is scanning small or large barcodes. We don&#39;t perform auto-focus by default or automatically though.  &lt;p&gt;Our default focus when scanning starts is a manual focus. We ask the camera to focus, once, at it’s smallest focal length. Depending on your hardware you may want to use some other (manual) value, but this works well for us.  &lt;p&gt;The manual focus eliminates the camera seeking back and forth through the focal range. This improves the read speed. A user familiar with the system will get an instant read by holding the barcode the right distance away. For those not so familiar the read is still quick. If the barcode isn’t in focus immediately, the user can move the barcode or the phone slightly closer or further away. Scan times under a second are common.  &lt;p&gt;Give manual focus try and see how it works for you.  &lt;p&gt;Obviously none of this matches the performance of dedicated barcode scanning hardware. Yet it’s the best we’ve been able to achieve with what we have. It’s also better than where we started, and so far it’s been free.  &lt;p&gt;&lt;strong&gt;One Last Thing&lt;/strong&gt;  &lt;p&gt;We haven’t tried this. It&#39;s just supposition.  &lt;p&gt;It’s possible recompiling Zxing as a UWP library using .Net Native may improve things further. This should provide better performance for the decoding process.&lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/291536084780912095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2015/07/mobile-barcode-scanning-with-zxingnet.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/291536084780912095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/291536084780912095'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2015/07/mobile-barcode-scanning-with-zxingnet.html' title='Mobile Barcode Scanning With Zxing.Net'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-7388838131946041969</id><published>2015-07-25T13:24:00.000+12:00</published><updated>2015-07-25T14:28:32.928+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net"/><category scheme="http://www.blogger.com/atom/ns#" term="animation"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="Behaviours"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="exceptions"/><category scheme="http://www.blogger.com/atom/ns#" term="user interface"/><category scheme="http://www.blogger.com/atom/ns#" term="UWP"/><category scheme="http://www.blogger.com/atom/ns#" term="WinRT"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>PointerDownThemeAnimation, PointerUpThemeAnimation &amp; Null Reference Exceptions</title><content type='html'>&lt;p&gt;&lt;br&gt;WinRT and UWP projects have access to &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.animation.pointerdownthemeanimation.aspx&quot;&gt;PointerDownThemeAnimation&lt;/a&gt; and &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.animation.pointerupthemeanimation.aspx&quot;&gt;PointerUpThemeAnimation&lt;/a&gt;. These animations provide a consistent visual feedback experience with the OS and other apps. Unfortunately these animations have some specific implementation details and don’t always behave as expected. This is most often true when using them from code behind instead of declaring them in XAML. This usually happens when you’re building a templated control, behaviour or similar reusable component.&lt;/p&gt; &lt;p&gt;The most common issue that occurs is an &lt;a href=&quot;https://social.msdn.microsoft.com/Forums/windowsapps/en-US/adf98a1f-13d4-4600-a4b4-ee1555d9bace/pointerdownthemeanimation-crashing?forum=wpdevelop&quot;&gt;unexpected null reference exception&lt;/a&gt;. To avoid this; &lt;ul&gt; &lt;li&gt;Ensure the target element (the one to be animated) has a name. The easiest way is to assign one in XAML at design time. If no name is present at runtime you need to assign one.&lt;br&gt; &lt;li&gt;Ensure you set the TargetName property on the animation. &lt;strong&gt;Setting the Target property won’t work&lt;/strong&gt;. You must set the TargetName property, and that’s why you need a name set on the target.&lt;br&gt; &lt;li&gt;You must add the animation into the logical tree for the target. My suggestion is to add it to the resources collection for the target. If you don’t do this the system has no context to search in so it still won’t find the target. This will also result in a null reference exception.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;It&#39;s a shame there isn’t a better error message. The inability to assign a target object without a name is also disappointing. &lt;p&gt;Another issue is the duration property for these animations. You can set it without receiving an error, but the duration won’t change. This is fine as you should be seeking consistency with other apps. It&#39;s just sad that this is a silent failure. It is noted on MSDN though. &lt;p&gt;Below is a &lt;strong&gt;draft&lt;/strong&gt; XAML Behaviour to apply these animations to any visual element. Feel free to use it (&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0.html&quot;&gt;Apache 2.0 license&lt;/a&gt;). I have Windows 10 UWP code based on this and it should work in WinRT for Windows 8.1 too. In both cases it requires the &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/windows/apps/dn457340.aspx&quot;&gt;Behaviours SDK for WinRT&lt;/a&gt;.&amp;nbsp; &lt;p&gt;This custom behaviour adds both the animation and a command binding. If specified the bound command will execute after the animation completes. If the command reports as not executable, neither the animation nor the command executes.&lt;br&gt; &lt;div class=&quot;csharpcode&quot;&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   1:  &lt;/span&gt;    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; BehaviourBase&amp;lt;T&amp;gt; : DependencyObject, IBehavior &lt;span class=&quot;kwrd&quot;&gt;where&lt;/span&gt; T : DependencyObject&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   2:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   3:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   4:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; T _AssociatedObject;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   6:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; DependencyObject AssociatedObject&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   7:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;   8:  &lt;/span&gt;            get&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;   9:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  10:  &lt;/span&gt;                &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; _AssociatedObject;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  11:  &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  12:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  13:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  14:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; T TypedAssociatedObject&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  15:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  16:  &lt;/span&gt;            get { &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; _AssociatedObject; }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  17:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  18:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  19:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; Attach(DependencyObject associatedObject)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  20:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  21:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (associatedObject == &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;) &lt;span class=&quot;kwrd&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; ArgumentNullException(&lt;span class=&quot;str&quot;&gt;&quot;associatedObject&quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  22:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  23:  &lt;/span&gt;            _AssociatedObject = (T)associatedObject;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  24:  &lt;/span&gt;            Attached(_AssociatedObject);&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  25:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  26:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  27:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;virtual&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; Attached(T associatedObject)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  28:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  29:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  30:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  31:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; Detach()&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  32:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  33:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (_AssociatedObject != &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  34:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  35:  &lt;/span&gt;                Detatching();&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  36:  &lt;/span&gt;                _AssociatedObject = &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  37:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  38:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  39:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  40:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;virtual&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; Detatching()&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  41:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  42:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  43:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  44:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  45:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  46:  &lt;/span&gt;    &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;class&lt;/span&gt; VisualTapBehavior : BehaviourBase&amp;lt;UIElement&amp;gt;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  47:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  48:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  49:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;readonly&lt;/span&gt; DependencyProperty CommandProperty = DependencyProperty.Register(&lt;span class=&quot;str&quot;&gt;&quot;Command&quot;&lt;/span&gt;, &lt;span class=&quot;kwrd&quot;&gt;typeof&lt;/span&gt;(ICommand), &lt;span class=&quot;kwrd&quot;&gt;typeof&lt;/span&gt;(VisualTapBehavior), &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; PropertyMetadata(&lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;));&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  50:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;readonly&lt;/span&gt; DependencyProperty CommandParameterProperty = DependencyProperty.Register(&lt;span class=&quot;str&quot;&gt;&quot;CommandParameter&quot;&lt;/span&gt;, &lt;span class=&quot;kwrd&quot;&gt;typeof&lt;/span&gt;(&lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt;), &lt;span class=&quot;kwrd&quot;&gt;typeof&lt;/span&gt;(VisualTapBehavior), &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; PropertyMetadata(&lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;));&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  51:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  52:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; Storyboard _PointerDownStoryboard;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  53:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; Storyboard _PointerUpStoryboard;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  54:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  55:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; Storyboard Storyboard { get; &lt;span class=&quot;kwrd&quot;&gt;internal&lt;/span&gt; set; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  56:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  57:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; ICommand Command&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  58:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  59:  &lt;/span&gt;            get { &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; (ICommand)&lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.GetValue(CommandProperty); }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  60:  &lt;/span&gt;            set&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  61:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  62:  &lt;/span&gt;                &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.SetValue(CommandProperty, &lt;span class=&quot;kwrd&quot;&gt;value&lt;/span&gt;);&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  63:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  64:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  65:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  66:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; CommandParameter&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  67:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  68:  &lt;/span&gt;            get { &lt;span class=&quot;kwrd&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.GetValue(CommandParameterProperty); }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  69:  &lt;/span&gt;            set&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  70:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  71:  &lt;/span&gt;                &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.SetValue(CommandParameterProperty, &lt;span class=&quot;kwrd&quot;&gt;value&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  72:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  73:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  74:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  75:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; Attached(UIElement associatedObject)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  76:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  77:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;base&lt;/span&gt;.Attached(associatedObject);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  78:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  79:  &lt;/span&gt;            &lt;span class=&quot;rem&quot;&gt;//Stupidly, these theme animations require the object to have a name :(&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  80:  &lt;/span&gt;            var fe = ((FrameworkElement)associatedObject);&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  81:  &lt;/span&gt;            var name = fe.Name;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  82:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (String.IsNullOrEmpty(name))&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  83:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  84:  &lt;/span&gt;                name = Guid.NewGuid().ToString();&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  85:  &lt;/span&gt;                fe.Name = name;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  86:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  87:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  88:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (fe.Resources.ContainsKey(&lt;span class=&quot;str&quot;&gt;&quot;VisualTapDownAnimation&quot;&lt;/span&gt;))&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  89:  &lt;/span&gt;                _PointerDownStoryboard = (Storyboard)fe.Resources[&lt;span class=&quot;str&quot;&gt;&quot;VisualTapDownAnimation&quot;&lt;/span&gt;];&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  90:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  91:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  92:  &lt;/span&gt;                var pointerDownStoryboard = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; Storyboard();&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  93:  &lt;/span&gt;                var downAnimation = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; PointerDownThemeAnimation();&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  94:  &lt;/span&gt;                Storyboard.SetTargetName(downAnimation, name);&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  95:  &lt;/span&gt;                pointerDownStoryboard.Children.Add(downAnimation);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  96:  &lt;/span&gt;                _PointerDownStoryboard = pointerDownStoryboard;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  97:  &lt;/span&gt;                fe.Resources.Add(&lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; KeyValuePair&amp;lt;&lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt;, &lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt;&amp;gt;(&lt;span class=&quot;str&quot;&gt;&quot;VisualTapDownAnimation&quot;&lt;/span&gt;, pointerDownStoryboard));&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt;  98:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt;  99:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 100:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (fe.Resources.ContainsKey(&lt;span class=&quot;str&quot;&gt;&quot;VisualTapUpAnimation&quot;&lt;/span&gt;))&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 101:  &lt;/span&gt;                _PointerUpStoryboard = (Storyboard)fe.Resources[&lt;span class=&quot;str&quot;&gt;&quot;VisualTapUpAnimation&quot;&lt;/span&gt;];&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 102:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 103:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 104:  &lt;/span&gt;                var pointerUpStoryboard = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; Storyboard();&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 105:  &lt;/span&gt;                var upAnimation = &lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; PointerUpThemeAnimation();&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 106:  &lt;/span&gt;                Storyboard.SetTargetName(upAnimation, name);&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 107:  &lt;/span&gt;                pointerUpStoryboard.Children.Add(upAnimation);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 108:  &lt;/span&gt;                pointerUpStoryboard.Completed += PointerUpStoryboard_Completed;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 109:  &lt;/span&gt;                _PointerUpStoryboard = pointerUpStoryboard;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 110:  &lt;/span&gt;                ((FrameworkElement)associatedObject).Resources.Add(&lt;span class=&quot;kwrd&quot;&gt;new&lt;/span&gt; KeyValuePair&amp;lt;&lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt;, &lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt;&amp;gt;(&lt;span class=&quot;str&quot;&gt;&quot;VisualTapUpAnimation&quot;&lt;/span&gt;, pointerUpStoryboard));&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 111:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 112:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 113:  &lt;/span&gt;            associatedObject.PointerPressed += AssociatedObject_PointerPressed;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 114:  &lt;/span&gt;            associatedObject.PointerReleased += AssociatedObject_PointerReleased;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 115:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 116:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 117:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; async &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; PointerUpStoryboard_Completed(&lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; sender, &lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; e)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 118:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 119:  &lt;/span&gt;            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 120:  &lt;/span&gt;                () =&amp;gt;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 121:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 122:  &lt;/span&gt;                    var command = &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.Command;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 123:  &lt;/span&gt;                    var commandParameter = &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.CommandParameter;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 124:  &lt;/span&gt;                    &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (command != &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt; &amp;amp;&amp;amp; command.CanExecute(commandParameter))&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 125:  &lt;/span&gt;                        command.Execute(commandParameter);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 126:  &lt;/span&gt;                });&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 127:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 128:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 129:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; Detatching()&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 130:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 131:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;base&lt;/span&gt;.Detatching();&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 132:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 133:  &lt;/span&gt;            TypedAssociatedObject.PointerPressed -= &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.AssociatedObject_PointerPressed;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 134:  &lt;/span&gt;            TypedAssociatedObject.PointerReleased -= &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.AssociatedObject_PointerReleased;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 135:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 136:  &lt;/span&gt;            _PointerDownStoryboard = &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 137:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 138:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 139:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; AssociatedObject_PointerPressed(&lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 140:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 141:  &lt;/span&gt;            ((FrameworkElement)sender).CapturePointer(e.Pointer);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 142:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 143:  &lt;/span&gt;            var command = &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.Command;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 144:  &lt;/span&gt;            var commandParameter = &lt;span class=&quot;kwrd&quot;&gt;this&lt;/span&gt;.CommandParameter;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 145:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (command == &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt; || command.CanExecute(CommandParameter))&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 146:  &lt;/span&gt;                RunStoryboardIfNotNull(_PointerDownStoryboard);&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 147:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 148:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 149:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; AssociatedObject_PointerReleased(&lt;span class=&quot;kwrd&quot;&gt;object&lt;/span&gt; sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 150:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 151:  &lt;/span&gt;            ((FrameworkElement)sender).ReleasePointerCapture(e.Pointer);&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 152:  &lt;/span&gt;            RunStoryboardIfNotNull(_PointerUpStoryboard);&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 153:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 154:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 155:  &lt;/span&gt;        &lt;span class=&quot;kwrd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kwrd&quot;&gt;void&lt;/span&gt; RunStoryboardIfNotNull(Storyboard storyboard)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 156:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 157:  &lt;/span&gt;            &lt;span class=&quot;kwrd&quot;&gt;if&lt;/span&gt; (storyboard != &lt;span class=&quot;kwrd&quot;&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 158:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 159:  &lt;/span&gt;                storyboard.Stop();&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 160:  &lt;/span&gt;                storyboard.Begin();&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 161:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;lnum&quot;&gt; 162:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;lnum&quot;&gt; 163:  &lt;/span&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/7388838131946041969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2015/07/pointerdownthemeanimation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/7388838131946041969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/7388838131946041969'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2015/07/pointerdownthemeanimation.html' title='PointerDownThemeAnimation, PointerUpThemeAnimation &amp;amp; Null Reference Exceptions'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-7037034720378775882</id><published>2014-04-09T22:00:00.001+12:00</published><updated>2014-04-09T22:00:59.220+12:00</updated><title type='text'>Fantasy Name Generator for Windows Privacy Policy</title><content type='html'>&lt;p&gt;   &lt;br /&gt;Fantasy Name Generator for Windows does not deliberately or explicitly collect any private data, such as your identity or location. Your internet connection is used only to serve adverts from the &lt;a href=&quot;http://www.microsoft.com&quot; target=&quot;_blank&quot;&gt;Microsoft&lt;/a&gt; Advertising system. &lt;/p&gt;  &lt;p&gt;This policy and software behaviour is subject to change without notice.&lt;/p&gt;  &lt;p&gt;Information about app usage and crashes are collected using the standard Windows Store Application reporting mechanisms.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Additional License Terms Section &lt;/strong&gt;This app is supported by ads from Microsoft Advertising. Learn more about Microsoft’s privacy practices and your choices. Learn more link: &lt;a href=&quot;https://choice.microsoft.com/AdvertisementChoice/&quot;&gt;https://choice.microsoft.com/AdvertisementChoice/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Advertising and Privacy &lt;/strong&gt;This application may display adverts. The choice of advertising system(s) or source(s) is subject to change without notice.&amp;#160; We currently use the Microsoft Advertising SDK. This system can use an anonymous id to help target and track ads better, if this feature is enabled in your operating system and not disabled within our application (see the Settings charm). We do not explicitly provide any additional personal details (such as location) to the advertising system, but do not make any specific promises relating to information gathered or used directly by that system at any time.     &lt;br /&gt;You may opt-out or configure settings relating to advertising at this link; &lt;a href=&quot;http://choice.microsoft.com/en-US/opt-out&quot;&gt;http://choice.microsoft.com/en-US/opt-out&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Your Consent&lt;/strong&gt;    &lt;br /&gt;By using our services and application, you consent to our privacy policy and disclaimer.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Contacting Us &lt;/strong&gt;If there are any questions regarding this privacy policy you may contact us using the information below;     &lt;br /&gt;email: &lt;a href=&quot;mailto:yort@yortondotnet.com&quot;&gt;yort@yortondotnet.com&lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;    &lt;br /&gt;This program is provided &amp;quot;as is&amp;quot; without warranty of any kind, either express or implied, including but not limited to, the implied warranties of merchantability and fitness for a particular purpose.     &lt;br /&gt;The entire risk as to the quality and performance of the program is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair and/or correction. In no event unless required by applicable law will any copyright holder, or any other party be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use, misuse or inability to use the program (including but not limited to loss of use, data or profits), even if such holder or other party has been advised of the possibility of such damages.     &lt;br /&gt;By accepting this disclaimer you agree to use the software at your own risk and irrevocably waive all your rights to seek damages or relief of any nature from us arising out of or in connection with your use of the software. &lt;/p&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/7037034720378775882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2014/04/fantasy-name-generator-for-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/7037034720378775882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/7037034720378775882'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2014/04/fantasy-name-generator-for-windows.html' title='Fantasy Name Generator for Windows Privacy Policy'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-5504520077819108262</id><published>2014-03-02T22:04:00.000+13:00</published><updated>2014-04-27T15:26:07.980+12:00</updated><title type='text'>Flupr for Windows – Privacy Policy</title><content type='html'>&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;What Information Do We Collect and How Do We Use It ?&lt;/strong&gt;&lt;strong&gt;    &lt;/strong&gt;We collect information you provide to us for the purposes of submitting to the Yahoo Flickr photo sharing service. This includes but is not limited to; images for upload, titles, and descriptions. This information is collected by our application and submitted to Flickr, but is not sent to or stored on our own or third party servers, except for statistical analysis or possibly unintentionally as part of crash reports.     &lt;br /&gt;We also collect some information from the Yahoo Flickr photo sharing service relating to your account. This may include but is not limited to; your Flickr user name, id, avatar, existing sets, groups, tags, images, and contacts. This information is collected by our application and may be stored locally on your device, it is not submitted to our own or third party servers except possibly unintentionally when crash reports are submitted.     &lt;br /&gt;In the event any Flickr or other personal data is unintentionally captured in a crash report, this information will be used solely for the purpose of diagnosing and fixing the issue causing the crash.     &lt;br /&gt;We also collect statistics and information about our application usage, both &#39;globally&#39; and anonymously per user. That is statistics and data relating to your usage of the application will be grouped together under a single anonymous identity, but we will not be able nor attempt to tie them to you as an individual, ensuring your privacy. This data includes but is not limited to; number of application launches, number of photos uploaded, crash information and details, feature usage counts, and number of times adverts could not be fulfilled.&amp;nbsp; This information is used primarily for the purposes of improving the application, user experience and deciding which features to add or remove. However, we reserve the right to use some basic, anonymous or aggregate data for marketing and advertising purposes. This includes but is not limited to; total number of users, total number of uploads, total number of uses etc. This data may be hosted for us by a third party, and the host is subject to change without notice.     &lt;br /&gt;We reserve the right to delete or destroy any information gathered and stored by us or a third party on our behalf, without notice.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Do We Disclose Any Information To Outside Parties ?     &lt;/strong&gt;We do not sell, trade or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our website, gathering an storing statistics, conducting our business or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our service policies, or protect ours or others rights, property or safety. However, non-personally identifiable visitor information may be provided to other parties for marketing, advertising or other uses. We can also release your information when you allow us to do so.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Your Privacy - What We Won’t Do &lt;/strong&gt;&lt;br /&gt;We will not sell your personal data or contact information to any third party.     &lt;br /&gt;We will NOT use your images or unique content for marketing or advertising purposes without your consent.     &lt;br /&gt;We will NOT collect or store your Flickr account login details. We use the standard OAuth mechanism to connect to Flickr and obtain a token, which is then used for subsequent logins. Your user name and password are only ever submitted to Flickr, not to our application or services. You can revoke our application&#39;s access to your Flickr account at any time using the Flickr service.     &lt;br /&gt;&lt;strong&gt;    &lt;br /&gt;Advertising and Privacy &lt;/strong&gt;&lt;br /&gt;This application may display adverts. The choice of advertising system(s) or source(s) is subject to change without notice.     &lt;br /&gt;We currently use the Microsoft Advertising SDK. This system can use an anonymous id to help target and track ads better, if this feature is enabled in your operating system and not disabled within our application (see the Settings charm). We do not explicitly provide any additional personal details (such as location) to the advertising system, but do not make any specific promises relating to information gathered or used directly by that system at any time.     &lt;br /&gt;You may opt-out or configure settings relating to advertising at this link; &lt;a href=&quot;http://choice.microsoft.com/en-US/opt-out&quot;&gt;http://choice.microsoft.com/en-US/opt-out&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;    &lt;br /&gt;Bing Maps &lt;/strong&gt;&lt;br /&gt;Some optional features may use the Bing Maps services. See the end user terms of use for the Bing Maps service here; &lt;a href=&quot;http://www.microsoft.com/maps/assets/docs/terms.aspx&quot;&gt;http://www.microsoft.com/maps/assets/docs/terms.aspx&lt;/a&gt;  &lt;br /&gt;&lt;br /&gt;When using the geo-tagging feature we may also use your current location, as provided by your device, if you allow access. This used only to display your current location on the map, and tag the image at that location if it doesn’t already contain geo co-ordinates or if you manually choose to tag at that location. First use of this feature will prompt for access, and access can be granted or revoked via Windows settings at anytime.   &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Additional License Terms Section &lt;/strong&gt;This app is supported by ads from Microsoft Advertising. Learn more about Microsoft’s privacy practices and your choices. Learn more link: &lt;a href=&quot;https://choice.microsoft.com/AdvertisementChoice/&quot;&gt;https://choice.microsoft.com/AdvertisementChoice/&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;Your Consent&lt;/strong&gt;     &lt;br /&gt;By using our services and application, you consent to our privacy policy and disclaimer.     &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;Contacting Us &lt;/strong&gt;If there are any questions regarding this privacy policy you may contact us using the information below;     &lt;br /&gt;email: &lt;a href=&quot;mailto:yort@yortondotnet.com&quot;&gt;yort@yortondotnet.com&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;     &lt;br /&gt;This program is provided &quot;as is&quot; without warranty of any kind, either express or implied, including but not limited to, the implied warranties of merchantability and fitness for a particular purpose.     &lt;br /&gt;The entire risk as to the quality and performance of the program is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair and/or correction. In no event unless required by applicable law will any copyright holder, or any other party be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use, misuse or inability to use the program (including but not limited to loss of use, data or profits), even if such holder or other party has been advised of the possibility of such damages.     &lt;br /&gt;By accepting this disclaimer you agree to use the software at your own risk and irrevocably waive all your rights to seek damages or relief of any nature from us arising out of or in connection with your use of the software.     &lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com). The opinions here in are probably (but not necessarily) those of Yort, but are certainly not those of any person, company, or organisation related or unrelated to Yort, unless otherwise stated.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/5504520077819108262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/5504520077819108262'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2014/02/flupr-for-windows-privacy-policy.html' title='Flupr for Windows – Privacy Policy'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-7644228229732214418</id><published>2012-03-10T17:09:00.000+13:00</published><updated>2012-03-11T15:14:47.577+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="download"/><category scheme="http://www.blogger.com/atom/ns#" term="smartphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7"/><category scheme="http://www.blogger.com/atom/ns#" term="WP7"/><title type='text'>Share Contact for Windows Phone 7</title><content type='html'>&lt;a href=&quot;http://windowsphone.com/s?appid=4766ff33-7447-462b-84ee-8f3acb8742e0&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 12px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;BannerAdvert&quot; border=&quot;0&quot; alt=&quot;BannerAdvert&quot; align=&quot;right&quot; src=&quot;http://lh6.ggpht.com/-CzKNaioWD4M/T1wJXyByMqI/AAAAAAAAAKU/zLXxNG_SiJA/BannerAdvert%25255B3%25255D.jpg?imgmax=800&quot; width=&quot;244&quot; height=&quot;204&quot; /&gt;&lt;/a&gt;  &lt;p&gt;   &lt;br /&gt;Unlike other contact sharing applications for &lt;a href=&quot;http://www.windowsphone7.com&quot; target=&quot;_blank&quot;&gt;Windows Phone 7&lt;/a&gt;, &lt;a href=&quot;http://windowsphone.com/s?appid=4766ff33-7447-462b-84ee-8f3acb8742e0&quot; target=&quot;_blank&quot;&gt;Share Contact&lt;/a&gt; allows you to both (easily) send and receive contact details. Other apps allow you to send contact information or turn it into a QR code, but Share Contact is one of the few (or possibly the only app) that allows you to easily save contact data from an SMS or email message into your phone book. Like other apps you can share a contacts details via email, SMS or QR code. The receive function works best with data that was also sent by Share Contact, but can also handle data from a number of other popular contact sharing applications in the &lt;a href=&quot;http://www.windowsphone.com/marketplace&quot; target=&quot;_blank&quot;&gt;WP7 marketplace&lt;/a&gt;. Note that when you want to receive a contact’s details via QR code, you don’t need an app on WP7 at all – just use Bing Vision Search.&lt;/p&gt;  &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://windowsphone.com/s?appid=4766ff33-7447-462b-84ee-8f3acb8742e0&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Download-EN-Small&quot; border=&quot;0&quot; alt=&quot;Download-EN-Small&quot; src=&quot;http://lh5.ggpht.com/-3000crzXH4c/T1wJZJGoOcI/AAAAAAAAAKc/pOM8RT---t0/Download-EN-Small3.png?imgmax=800&quot; width=&quot;114&quot; height=&quot;40&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Finding a Contact&lt;/h4&gt;  &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-Vv4MbgaQpHA/T1wJaY11TDI/AAAAAAAAAKk/-ykj5sY7RDo/s1600-h/Share1%25255B3%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 12px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Share1&quot; border=&quot;0&quot; alt=&quot;Share1&quot; align=&quot;left&quot; src=&quot;http://lh4.ggpht.com/-fAeDC7VSqDM/T1wJbi8ZkLI/AAAAAAAAAKs/Mi0l5imsgJE/Share1_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;148&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Finding a contact works much like the people hub in Windows Phone 7. You are presented with a list of contact which you can scroll through by flicking or panning vertically with your finger. Alternatively you can press one of the boxes with a letter in it to bring up a ‘jump list’ which allows you to quickly move to a particular location in the list if it’s very large. Finally, you can press the search button in the app bar at the bottom of the screen to display a search field, simply key part of a name into the search field and the list will be filtered to show only contacts that match your search criteria.&lt;/p&gt;  &lt;p&gt;On the settings screen you can also choose to filter out contacts that don’t have certain types of information (i.e phone number or email). More on that later.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Sharing a Contact&lt;/h4&gt;  &lt;p&gt;Once you’ve found a contact, just tap on them once to bring up the share screen. On the first page of the share screen you’ll &lt;a href=&quot;http://lh4.ggpht.com/-ZmQF1mRdsfs/T1wJdKbH7GI/AAAAAAAAAK0/YXU47kDZr-Y/s1600-h/Share2%25255B3%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 12px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Share2&quot; border=&quot;0&quot; alt=&quot;Share2&quot; align=&quot;right&quot; src=&quot;http://lh4.ggpht.com/-ZgALlayLwY8/T1wJeRQqvBI/AAAAAAAAAK8/4qdJRFSNQZw/Share2_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;148&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;see options for which kinds of data you want to share, i.e business details, personal details, website etc. Check the box next to each kind of information you want to share. You can now either press one of the share option buttons at the bottom of the screen (SMS, Email or QR code). If the contact you’ve selected has multiple profiles linked together then the information from each profile will be merged together into a single set of information to be shared. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-KpRczL4Kaqc/T1wJfyapG_I/AAAAAAAAALE/DRcPAVHAp8Y/s1600-h/Share3%25255B3%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 12px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Share3&quot; border=&quot;0&quot; alt=&quot;Share3&quot; align=&quot;left&quot; src=&quot;http://lh5.ggpht.com/-FvEYuKyEDhQ/T1wJhSf_5uI/AAAAAAAAALM/wOwLj83Y0OQ/Share3_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;148&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;If you want to share information only from one profile for this contact, such as a specific Microsoft Exchange account then flick left or right with your finger to pan through the linked profiles for this contact. Each page will show the name of the account and then the contact details that account contains for this contact. When you find the account with the details you want to share, press one of the share buttons in the app bar at the bottom of the screen. The choices you made on the first screen for what kinds of data you want to share will still apply, so if you chose to only share business contact details and the profile you’ve selected contains both personal and business details, only the business data will be included.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Using Favourites&lt;/h4&gt;  &lt;p align=&quot;left&quot;&gt;&lt;a href=&quot;http://lh4.ggpht.com/-SQ4GwdRTwQA/T1wJi0EcRYI/AAAAAAAAALU/n8d2XV3iPEY/s1600-h/Favourites%25255B3%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 12px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Favourites&quot; border=&quot;0&quot; alt=&quot;Favourites&quot; align=&quot;right&quot; src=&quot;http://lh5.ggpht.com/-bt9jvtoDdQc/T1wJkAwkoDI/AAAAAAAAALc/IOl75lC7EEA/Favourites_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;148&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can mark a contact as a favourite by performing a tap-and-hold&amp;#160; on the contact in the main contact list, then tapping on the ‘favourite’ menu that pops-up. When you mark a contact as a favourite it moves to the favourites page and becomes an animated tile, switching between the contacts name and profile image. You can access the favourites list by swiping left or right with your finger while on the main screen showing the contact list.&lt;/p&gt;  &lt;p&gt;If you tap on a favourite tile for a contact the share page for that contact is shown. Using favourites can be very convenient when you have contacts you often share, such as work colleagues.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Sharing Your Own Details&lt;/h4&gt;  &lt;p&gt;Often you want to pass your own details on to somebody. This couldn’t be easier. From the main screen with the contacts list displayed, just tap on the ‘share me’ button (which looks like a person with an arrow sticking out of them). If you’ve already setup your contact details then you’ll go straight to the share page for yourself. If you haven’t setup your details yet, you’ll be prompted to do so. You can add or edit information about yourself at any time on the settings screen, and if you have yourself in your phonebook as a contact you can even loaded your details automatically from that contact record. Unfortunately due to restrictions on what 3rd party applications can do, we can’t automatically read your phone number, name and email addresses etc. from the phone, so you need to setup this information at least once.&lt;/p&gt;  &lt;h4&gt;Receiving a Contact from SMS or Email&lt;/h4&gt;  &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-8Q8ESsPeCjY/T1wJl_sKZCI/AAAAAAAAALk/1hY5C8B9PF0/s1600-h/Receive1%25255B3%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 12px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Receive1&quot; border=&quot;0&quot; alt=&quot;Receive1&quot; align=&quot;left&quot; src=&quot;http://lh6.ggpht.com/-UMboIiXKj48/T1wJnei0LJI/AAAAAAAAALs/Xcp8nNcWc5E/Receive1_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;148&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;Receiving a contact from SMS or email is pretty much the same process, although slightly easier for SMS messages. First you need to open the SMS or email message and copy the text of the message. For an SMS message just tap-and-hold on the balloon for the message, then choose ‘copy’ from the menu that pops-up. For email messages, you need to tap once on a word inside the email message so the word highlights, then drag the arrows at the end of the highlight until the full message is highlighted. When all the text is highlighted, tap the copy icon (two pages in a circle) that will be displayed just above the selected text.&lt;/p&gt;  &lt;p&gt;When you have copied the text, open Share Contact and flick left to go to the ‘Receive’ page. Tap in the large box&lt;a href=&quot;http://lh3.ggpht.com/-ammfBoyLJxk/T1wJpIim91I/AAAAAAAAAL0/lCUIGLIxJZQ/s1600-h/Receive2%25255B3%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 12px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Receive2&quot; border=&quot;0&quot; alt=&quot;Receive2&quot; align=&quot;right&quot; src=&quot;http://lh4.ggpht.com/-W1h6JHxeo4A/T1wJqTlmloI/AAAAAAAAAL8/yim72EEXP1c/Receive2_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;148&quot; height=&quot;244&quot; /&gt;&lt;/a&gt; display, and then press the ‘paste’ button just above the keyboard (looks like a clipboard in a circle). The text of your message will now be shown in the box you tapped in before. Now just tap the ‘save’ button (looks like a floppy disk in a circle) in the app bar at the bottom of the screen. This will bring up the standard WP7 Save Contact screen with all the field prepopulated for you. You can edit the data if you want, or else just choose to save the contact by pressing the save button at the bottom of the screen again.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Settings&lt;/h4&gt;  &lt;p&gt;The settings screen has two pages. The first page allows you to choose settings for how the application works and looks. The options include filtering out contacts that don’t have a particular type of contact information such as phone number, email address or physical address. These options are used in an ‘or’ fashion, so if you check phone number and email, then contacts that have either a phone number, an email address or both will be displayed.&lt;/p&gt;  &lt;p&gt;You can also choose whether or not a link to Share Contact is automatically included in SMS and email messages sent from the application, to make it easier for people receiving the message to make it easier to find the app and download it themselves.&lt;/p&gt;  &lt;p&gt;Finally, you can choose whether contacts are sorted by first or last name when displayed in the contact list.&lt;/p&gt;  &lt;p&gt;If you swipe left or right on the settings screen, you’ll go to the ‘my details’ page which allows you to enter and edit your own contact details for later sharing. There is also a ‘load from contact’ button which will import your details from an existing contact record, if you have yourself loaded as a contact for some reason.&lt;/p&gt;  &lt;hr /&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:020e3948-ffac-4aae-bb59-fb8c4789cc5a&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/WP7&quot; rel=&quot;tag&quot;&gt;WP7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/app&quot; rel=&quot;tag&quot;&gt;app&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/download&quot; rel=&quot;tag&quot;&gt;download&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/devices&quot; rel=&quot;tag&quot;&gt;devices&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/smartphone&quot; rel=&quot;tag&quot;&gt;smartphone&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Windows+Phone+7&quot; rel=&quot;tag&quot;&gt;Windows Phone 7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Share+Contact&quot; rel=&quot;tag&quot;&gt;Share Contact&lt;/a&gt;&lt;/div&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/7644228229732214418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2012/03/share-contact-for-windows-phone-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/7644228229732214418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/7644228229732214418'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2012/03/share-contact-for-windows-phone-7.html' title='Share Contact for Windows Phone 7'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-CzKNaioWD4M/T1wJXyByMqI/AAAAAAAAAKU/zLXxNG_SiJA/s72-c/BannerAdvert%25255B3%25255D.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-1139517072688802393</id><published>2012-02-26T19:51:00.001+13:00</published><updated>2012-02-28T20:22:53.558+13:00</updated><title type='text'>Why No One Has The Smartphone Right Yet</title><content type='html'>&lt;p&gt;   &lt;br /&gt;The &lt;a href=&quot;http://www.smh.com.au/digital-life/mobiles/more-iphones-sold-per-second-than-babies-born-20120216-1tbx4.html&quot; target=&quot;_blank&quot;&gt;number of iPhones sold per second now outnumbers babies born per second&lt;/a&gt;, Android is selling &lt;a href=&quot;http://www.dailymail.co.uk/sciencetech/article-2086144/CES-2012-More-Androids-activated-day-babies-born.html&quot; target=&quot;_blank&quot;&gt;even faster&lt;/a&gt;, and &lt;a href=&quot;http://www.microsoft.com&quot; target=&quot;_blank&quot;&gt;Microsoft&lt;/a&gt; are &lt;a href=&quot;http://blogs.technet.com/b/next/archive/2011/09/19/windows-phone-wins-another-design-award.aspx&quot; target=&quot;_blank&quot;&gt;winning awards&lt;/a&gt; and great user reviews everywhere for their &lt;a href=&quot;http://www.windowsphone7.com&quot; target=&quot;_blank&quot;&gt;Windows Phone 7&lt;/a&gt; platform (although they have only a tiny market share right now). Given all that, my title for this post might seem a bit provocative, so let me explain.&lt;/p&gt;  &lt;p&gt;Regardless of the success of an individual platform in terms of reviews, user approval or sales, there seems to be one area where smartphone manufacturers are failing many consumers (myself included). This failing is the &lt;a href=&quot;http://www.ted.com/talks/barry_schwartz_on_the_paradox_of_choice.html&quot; target=&quot;_blank&quot;&gt;paradox of choice&lt;/a&gt;. You see, if I decided I wanted to buy a new phone today, I could not decide which one to to get, and no matter what I decided I would still come away with some level of buyer’s remorse.&lt;/p&gt;  &lt;p&gt;On the &lt;a href=&quot;http://www.apple.com&quot; target=&quot;_blank&quot;&gt;Apple&lt;/a&gt; platform, assuming you want an actual phone (rather than an iPod touch or iPad), you don’t really have any choice. All you can get is the iPhone, and all the models are pretty similar. Sure, there are different models, like the iPhone 3, 3GS, 4, 4S etc. but the choice is often between a new model and an older model or two models that are very similar and differ only in in minor hardware specs or the OS version. Basically, if you want an iPhone with a 4.3 inch screen then you’re out of luck. If you want one with a faster processor, a different type of camera sensor or megapixel rating, a better quality external speaker etc. then you have to look at another platform. You are forced to choose from a very narrow band of options from Apple. On the plus side, you don’t suffer so much from the paradox of choice because your options were limited in the first place. You can be confident you bought &lt;em&gt;the iPhone that best suits you&lt;/em&gt;, even if it isn’t the perfect &lt;em&gt;smartphone&lt;/em&gt; for you. Of course if you really need or want something Apple doesn’t offer, then your only choice is to go to one of the other platforms.&lt;/p&gt;  &lt;p&gt;Android has the reverse problem. There are too many options to possibly evaluate them all, so you can’t know you bought the phone that best suits you. What’s more most manufacturers and carriers heavily customise the user interface of Android (to the point where two different android users can’t necessarily use each others phones for simple tasks like searching contacts). This adds another dimension of choice over and above the hardware. No matter what you buy, there will probably be something not quite right about it, and given you had all those other choices you didn’t explore you’ll no doubt get some quantity of buyer’s remorse, sooner if not later. This is especially true since the quality of Android phones can vary greatly, especially across price ranges.&lt;/p&gt;  &lt;p&gt;Windows Phone 7 sits somewhere in the middle. The minimum spec for the devices has, so far, kept truly awful devices off the market. Like Apple and unlike Android, you don’t buy a WP7 device that just doesn’t run well because the hardware can’t cope. There’s also more variety and more brands of phone than you get from Apple, and fewer than you get from Android. Unfortunately, this &lt;strong&gt;isn’t&lt;/strong&gt; the best of both worlds.&lt;/p&gt;  &lt;p&gt;Yes, you have a choice with WP7, but that still means you have to go out and evaluate as many phones as you can before deciding on one. It turns out, evaluating a phone in a store is really hard (for any platform or manufacturer, although slightly better for Apple product if you’ve used one before). Even when you know the OS fairly well, it’s not until you’ve taken the phone home that you find out whether the camera works in low light, or how the manufacturers customisations work, or what specialised apps the manufacturer has released that only work on their phones, whether that reception on that phone is better or worse in the places you regularly visit (or if the new models antenna is flawed) etc. There really should be a business that allows you to rent a phone for a week under no obligation to buy (but for a small fee) and then sells it to you (perhaps less the rental fee) if you decide you do actually like that model, otherwise you return it for a different model to try.&lt;/p&gt;  &lt;p&gt;In any case, not only is the evaluation hard but comparing two models of WP7 often leaves you with an impossible choice. For example, if I was going to buy a new phone today the first two models I would look at (assuming they were available in my region) would be the &lt;a href=&quot;http://www.nokia.com/us-en/products/phone/lumia900/&quot; target=&quot;_blank&quot;&gt;Nokia Lumia 900&lt;/a&gt; and the &lt;a href=&quot;http://www.phonearena.com/phones/HTC-Titan-II_id6819&quot; target=&quot;_blank&quot;&gt;HTC Titan II&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The Titan has a larger screen, which I really like for all non-phone call activities (i.e txting, apps, games, browsing). Larger screens do make phones a little uncomfortable to use for calls but I’m prepared to live with that. Some reviews I’ve seen online suggest the camera is better than that on the Lumia (at least for now, apparently Nokia are working on a software update to improve camera quality on the Lumia models). I also know that HTC produce a really simple but good Flashlight application that is only available on their devices, and the HTC Attentive phone app. There other other flashlights in the &lt;a href=&quot;http://www.windowsphone.com/marketplace&quot; target=&quot;_blank&quot;&gt;WP7 marketplace&lt;/a&gt; so I’m sure I can replace that easily, I just like the one I already have. The Attentive Phone app is harder to replace however. Third party app developers don’t have access to the API needed to create an app like this, so it has to come from the manufacturers and I don’t believe Nokia have built anything like this. Really, I think the features provided by Attentive Phone should be built into the OS (perhaps as options), but they aren’t.&lt;/p&gt;  &lt;p&gt;So if I buy the Titan I get a big screen, probably a good camera, and HTC Attentive Phone all of which are good. On the other hand Nokia have their ‘clear black’ display, which is really nice even if the screen is smaller. They also have Nokia Maps and Nokia Drive which are far superior to the maps offering baked into the OS. As far as I know, HTC (nor any other manufacturer) has a competing offering in that space for now. There are (expensive) navigation apps available in the marketplace, so I could get something for the HTC, but the Nokia offering for maps seems like the best. The Nokia is also very nice to hold and look at (I’ve seen the 800, I presume the 900 is similar). While I haven’t seen the Titan II in person, my existing HTC device has some quality issues with buttons that rattle and cracked chrome surfaces and I think the Lumia is probably better in that regard. &lt;/p&gt;  &lt;p&gt;The OS will be pretty much the same on both although not comparing the two phones side by side I can’t be sure of what differences I might find. My HTC has tethering and can send MMS message fine, while my friends Samsung WP7 device can’t do either even though we’re both running Mango (on his phone there is no setup for the MMS stuff, and no OS update yet for his phone to enable tethering support). On the other hand his (in-built OS) camera app has more scene modes, and more options for controlling the camera itself (exposure settings and the like). Does either the Lumia or the Titan support tethering ? My HD7 didn’t use to but a recent update added the feature. My bosses Lumia 800 didn’t when he first got it, and he hasn’t mentioned an upgrade having added it so does that mean if I buy the Lumia I loose tethering ? Does the 900 have it and the 800 doesn’t ?&lt;/p&gt;  &lt;p&gt;Given all of this you might think it’s impossible to buy a smartphone and be happy with it. That’s clearly not the case. I &lt;strong&gt;am&lt;/strong&gt; happy with my HD7, and I know users of all three platforms who are happy with their handsets. What I’m really saying is that despite the proliferation of choices, and the fanboi-ism around each platform, there is still a section of the consumer market that is not perfectly catered for by any of the major platforms and the situation isn’t necessarily getting better. &lt;/p&gt;  &lt;p&gt;Microsoft and their handset partners could fix at least some of the WP7 platform problems by ensuring that (hardware and firmware allowing) all manufacturer specific apps were available for purchase on other handsets. Microsoft could even mandate this. For example, if I bought a Nokia handset I would get Nokia Drive and maps free because that’s what happens now, but if I buy another brand of handset I can still purchase and use those apps (even if at exorbitant prices). &lt;/p&gt;  &lt;p&gt;This probably won’t happen because manufacturers and carriers will be afraid of losing their competitive advantage, but that’s not necessarily true. If I did decide to buy a Titan rather than a Lumia but I bought the Nokia apps, Nokia would still earn money from me they wouldn’t have got otherwise and I’d still be staying in touch with the Nokia brand. That might lead me to buy a Nokia again in the future, rather than just putting them out of mind because I’m now an HTC customer. Right now, whichever brand I go with leads me to pretty much ignore the other (if only to avoid further buyer’s remorse), and profits only one manufacturer. I would suggest it’s better to compete on hardware as much as possible while still profiting from your losses when a consumer chooses another brand of handset.&lt;/p&gt;  &lt;hr /&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c2a43682-4d41-4e1c-88ab-1140df1ec753&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/Smartphone&quot; rel=&quot;tag&quot;&gt;Smartphone&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Device&quot; rel=&quot;tag&quot;&gt;Device&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Manufacturer&quot; rel=&quot;tag&quot;&gt;Manufacturer&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/WP7&quot; rel=&quot;tag&quot;&gt;WP7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Android&quot; rel=&quot;tag&quot;&gt;Android&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Apple&quot; rel=&quot;tag&quot;&gt;Apple&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/iPhone&quot; rel=&quot;tag&quot;&gt;iPhone&lt;/a&gt;&lt;/div&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/1139517072688802393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2012/02/why-no-one-has-smartphone-right-yet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/1139517072688802393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/1139517072688802393'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2012/02/why-no-one-has-smartphone-right-yet.html' title='Why No One Has The Smartphone Right Yet'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-5416137514018588788</id><published>2012-02-19T11:25:00.001+13:00</published><updated>2012-02-19T11:25:11.076+13:00</updated><title type='text'>Windows Phone 7 – Syncing Email Over VPN</title><content type='html'>&lt;p&gt;   &lt;br /&gt;At the moment the Exchange server we use at my office isn’t available over the internet in the way it needs to be in order to sync email, contacts, calendar etc. to my WP7 device. Even with the ‘Mango’ update to &lt;a href=&quot;http://www.windowsphone7.com&quot; target=&quot;_blank&quot;&gt;Windows Phone 7&lt;/a&gt; VPN connectivity is not supported on the phone, so I can’t connect via VPN over the internet from the phone either. This means my work mail only syncs while I’m near the office and connected to the WiFi network. This is actually ok with me, and we’ll probably change the Exchange server configuration later anyway.&lt;/p&gt;  &lt;p&gt;However, I recently discovered I can sync my phone to the Exchange server via a VPN if I use a PC as the middle man. For example, I can connect my phone (via cable) to my laptop, and open the VPN connection on the laptop. This will then allow the email app on the phone t connect to the Exchange server and sync.&lt;/p&gt;  &lt;p&gt;I believe this needs the Zune software correctly installed on the PC (so that it opens automatically when the phone is connected), but it certainly seems to work fine if that is the case.&lt;/p&gt;  &lt;hr /&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0b4b210e-cee5-4374-8411-71918ad47922&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/WP7&quot; rel=&quot;tag&quot;&gt;WP7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Windows+Phone7&quot; rel=&quot;tag&quot;&gt;Windows Phone7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Sync&quot; rel=&quot;tag&quot;&gt;Sync&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Email&quot; rel=&quot;tag&quot;&gt;Email&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Exchange&quot; rel=&quot;tag&quot;&gt;Exchange&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/VPN&quot; rel=&quot;tag&quot;&gt;VPN&lt;/a&gt;&lt;/div&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/5416137514018588788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2012/02/windows-phone-7-syncing-email-over-vpn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/5416137514018588788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/5416137514018588788'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2012/02/windows-phone-7-syncing-email-over-vpn.html' title='Windows Phone 7 – Syncing Email Over VPN'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-3289970304624468865</id><published>2012-02-19T11:18:00.001+13:00</published><updated>2012-02-19T11:19:03.570+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="QR Code"/><category scheme="http://www.blogger.com/atom/ns#" term="VCard"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7"/><category scheme="http://www.blogger.com/atom/ns#" term="WP7"/><title type='text'>Windows Phone 7 Supports vCards</title><content type='html'>&lt;br /&gt;This may not be news to everyone, but something I learned today is &lt;a href=&quot;http://www.windowsphone7.com/&quot; target=&quot;_blank&quot;&gt;Windows Phone 7&lt;/a&gt; supports vCards for receiving contact information.&lt;br /&gt;To receive a contact via a vCard you can;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Email yourself a .vcf file (which can be exported from Outlook or many other contact management applications). Open the attachment in your WP7 email application and the OS will automatically open an ‘Add Contact’ page&amp;nbsp; with the fields pre-populated.     &lt;/li&gt;&lt;li&gt;Download a .vcf file from the internet. A great way to do this is via SkyDrive, but be warned (as with many file formats) you need to use the SkyDrive website to download the file not the app. The app only allows downloading files with a limited number of file extensions, and .vcf isn’t one of those.     &lt;/li&gt;&lt;li&gt;Turn the contents of the vCard file into a QR code. This is sort of the more obvious way to do it, as there are several apps in the marketplace that allow sharing contacts this way. However, you can also use an online tool to convert the data (just try a Google search for ‘qr code generator’) into a qr code if you don’t want to go the app route. Just open the .vcf file with notepad, copy the text and then paste it into the web page to generate the QR code.&lt;/li&gt;&lt;/ul&gt;All of these are great ways of sharing contact info. Unfortunately the WP7 API for third party apps doesn’t allow sending apps sending emails with attachments, so you can’t email a contact out of your phone in VCF format (at least not easily). &lt;br /&gt;&lt;hr /&gt;&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:01e1211d-5a09-4513-b60b-05af026ae990&quot; style=&quot;display: inline; float: none; margin: 0px; padding: 0px;&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/WP7&quot; rel=&quot;tag&quot;&gt;WP7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Windows+Phone+7&quot; rel=&quot;tag&quot;&gt;Windows Phone 7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/VCard&quot; rel=&quot;tag&quot;&gt;VCard&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Contact&quot; rel=&quot;tag&quot;&gt;Contact&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/QR+Code&quot; rel=&quot;tag&quot;&gt;QR Code&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/3289970304624468865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2012/02/windows-phone-7-supports-vcards.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/3289970304624468865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/3289970304624468865'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2012/02/windows-phone-7-supports-vcards.html' title='Windows Phone 7 Supports vCards'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-8417872612626614097</id><published>2012-02-12T16:11:00.001+13:00</published><updated>2012-02-12T16:14:58.550+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="smartphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7"/><category scheme="http://www.blogger.com/atom/ns#" term="WP7"/><title type='text'>Fixing Zune Sync Error c00d11e4 (800c000e) on Your HTC HD7 Windows Phone</title><content type='html'>&lt;p&gt;   &lt;br /&gt;&lt;a title=&quot;Day Thirty Seven - HTC HD 7 (Windows Phone 7)&quot; href=&quot;http://www.flickr.com/photos/52293377@N03/5433068556/&quot;&gt;&lt;img style=&quot;display: inline; float: left&quot; border=&quot;0&quot; hspace=&quot;5&quot; alt=&quot;Day Thirty Seven - HTC HD 7 (Windows Phone 7)&quot; vspace=&quot;5&quot; align=&quot;left&quot; src=&quot;http://farm6.static.flickr.com/5011/5433068556_55055bc803.jpg&quot; /&gt;&lt;/a&gt;I fixed this over 6 months ago, but I forgot to blog about it then and only just remembered.&lt;/p&gt;  &lt;p&gt;When I first got my &lt;a href=&quot;http://www.htc.com/www/product/hd7/overview.html&quot; target=&quot;_blank&quot;&gt;HTC HD7&lt;/a&gt;&amp;#160;&lt;a href=&quot;http://www.windowsphone7.com&quot; target=&quot;_blank&quot;&gt;Windows Phone 7&lt;/a&gt; device I discovered the Zune sync didn’t work for getting photo’s and video off the phone. I could get stuff onto it fine, music synced fine, and all the app stuff worked, just no pictures/video came off the phone.&lt;/p&gt;  &lt;p&gt;Apparently I wasn’t alone, it appears &lt;a href=&quot;http://answers.microsoft.com/en-us/winphone/forum/wp7-wpstart/zune-and-wp7-syncing-error-code-c00d11e4-800c000e/5f3413db-156e-4bf4-b874-2f9390a2e9f7&quot;&gt;a number of HTC users have had the same problem&lt;/a&gt;. I tried a number of Google searches for a solution but didn’t find any quick answers on how to fix it. Eventually I stumbled upon the post I linked above at the &lt;a href=&quot;http://answers.microsoft.com/en-us&quot; target=&quot;_blank&quot;&gt;Microsoft Answers&lt;/a&gt; site and after digging through the posts I found the solution.&lt;/p&gt;  &lt;p&gt;Apparently the problem is to do with file associations for images and video &lt;strong&gt;on the PC&lt;/strong&gt; (nothing to do with the phone). I had jpg and other image files set to be opened with an old copy of Paint Shop Pro I bought years ago, not the default programs Windows normally has associated with these file types. &lt;strong&gt;Once I reset the file associations for the images and video, the sync starting working again&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;I’ve since been able to reset Paint Shop Pro to be associated with those file types again, and the sync is still working. So, if you’re having this problem, try resetting your file associations for the afflicted media file types. A reboot before attempting to sync again may also be required (I can’t recall now).&lt;/p&gt;  &lt;p&gt;As pointed out by ‘Ashedd’ on the relevant &lt;a href=&quot;http://www.microsoft.com&quot; target=&quot;_blank&quot;&gt;Microsoft&lt;/a&gt; Answers post, here’s the steps to reset your file associations;&lt;/p&gt;  &lt;p align=&quot;center&quot;&gt;&lt;strong&gt;&lt;u&gt;WARNING:&lt;/u&gt;&lt;/strong&gt; Altering your registry incorrectly can cause serious problems with your Windows operating system. If you are not confident of your ability to make these changes or recover from a serious software failure, get someone more experienced to help you or Google for other ways to reset your file associations.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Click &lt;strong&gt;Start &lt;/strong&gt;, and then click &lt;strong&gt;All Programs&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;Accessories&lt;/strong&gt;, and then click &lt;strong&gt;Run&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Type &lt;strong&gt;regedit&lt;/strong&gt;, and then click &lt;strong&gt;OK&lt;/strong&gt;. If you are prompted for an administrator password or for a confirmation, type the password, or click &lt;strong&gt;Allow&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In the navigation pane, locate and then click the following registry subkey:      &lt;br /&gt;&lt;strong&gt;HKEY_CLASSES_ROOT\.jpg&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;In the right-hand pane, double-click &lt;strong&gt;(Default)&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In the &lt;strong&gt;Value data&lt;/strong&gt; box, enter &lt;strong&gt;jpegfile&lt;/strong&gt; and then click&lt;strong&gt;OK&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Exit Registry Editor. &lt;/li&gt;    &lt;li&gt;Try to sync a photo\video taken with the phone. &lt;/li&gt; &lt;/ol&gt;  &lt;hr /&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b43645a1-74da-4077-80f6-be3128fd7ce9&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/WP7&quot; rel=&quot;tag&quot;&gt;WP7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Windows+Phone+7&quot; rel=&quot;tag&quot;&gt;Windows Phone 7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Smartphone&quot; rel=&quot;tag&quot;&gt;Smartphone&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Zune&quot; rel=&quot;tag&quot;&gt;Zune&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/HTC&quot; rel=&quot;tag&quot;&gt;HTC&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/HD7&quot; rel=&quot;tag&quot;&gt;HD7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Sync&quot; rel=&quot;tag&quot;&gt;Sync&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Error&quot; rel=&quot;tag&quot;&gt;Error&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Images&quot; rel=&quot;tag&quot;&gt;Images&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Media&quot; rel=&quot;tag&quot;&gt;Media&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Video&quot; rel=&quot;tag&quot;&gt;Video&lt;/a&gt;&lt;/div&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/8417872612626614097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2012/02/fixing-zune-sync-error-c00d11e4.html#comment-form' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/8417872612626614097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/8417872612626614097'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2012/02/fixing-zune-sync-error-c00d11e4.html' title='Fixing Zune Sync Error c00d11e4 (800c000e) on Your HTC HD7 Windows Phone'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm6.static.flickr.com/5011/5433068556_55055bc803_t.jpg" height="72" width="72"/><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-8386245048283510852</id><published>2012-01-31T18:40:00.000+13:00</published><updated>2012-02-07T15:28:47.015+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="cellphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="download"/><category scheme="http://www.blogger.com/atom/ns#" term="smartphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7"/><category scheme="http://www.blogger.com/atom/ns#" term="WP7"/><title type='text'>1 Tap Reminder for Windows Phone 7</title><content type='html'>&lt;br /&gt;My second &lt;a href=&quot;http://www.windowsphone.com/&quot;&gt;WP7&lt;/a&gt; application, &lt;a href=&quot;http://windowsphone.com/s?appid=efc885af-61ab-454c-9d73-4e98149cc141&quot;&gt;1 Tap Reminder&lt;/a&gt;, is now available in the &lt;a href=&quot;http://www.windowsphone.com/marketplace&quot;&gt;marketplace&lt;/a&gt;.&lt;br /&gt;1 Tap Reminder is almost certainly the quickest and easiest way to set reminders on your &lt;a href=&quot;http://www.windowsphone7.com/&quot; target=&quot;_blank&quot;&gt;Windows Phone 7&lt;/a&gt; device. Set alarms for a certain period from now, or a specific time of day with as little as one tap. &lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;a href=&quot;http://windowsphone.com/s?appid=efc885af-61ab-454c-9d73-4e98149cc141&quot;&gt;&lt;img alt=&quot;Download 1 Tap Reminder for Windows Phone 7&quot; border=&quot;0&quot; height=&quot;40&quot; src=&quot;http://lh6.ggpht.com/-6zyMoqUgf_0/Tyw55nVP5SI/AAAAAAAAAG4/bjCWc9gb3n8/Download-EN-Small4.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;Download WP7 App&quot; width=&quot;114&quot; /&gt;&lt;/a&gt;&lt;/div&gt;So, how does it work ?&lt;br /&gt;&lt;h4 align=&quot;left&quot;&gt;     Really Quick Reminders&lt;/h4&gt;&lt;div align=&quot;left&quot;&gt;&lt;a href=&quot;http://lh4.ggpht.com/-xHmYl8WMf7M/Tyw568u8fiI/AAAAAAAAAHA/upSAmG6H28o/s1600-h/TimerPageScreenshot2.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;TimerPageScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh5.ggpht.com/-Pj4nOKS8sGY/Tyw58EFwwGI/AAAAAAAAAHI/hL5Rm8H1oXc/TimerPageScreenshot_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;TimerPageScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://lh6.ggpht.com/-k9Kl2hQmXhM/Tyw59d8cdyI/AAAAAAAAAHQ/yotVqHqefAs/s1600-h/SmallTilesScreenshot62.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;SmallTilesScreenshot6&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh3.ggpht.com/-ko4QLA3-Zjc/Tyw5-is8T8I/AAAAAAAAAHY/VpRlJuR9Dsc/SmallTilesScreenshot6_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;SmallTilesScreenshot6&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;When you first open 1 Tap Reminder you’ll see the ‘one-tap timers’ screen where you can choose when you want a reminder set. Depending on your preferences you can use the full size tile screen which makes it easy to select a timer even while on the move but requires scrolling to see more timers, or the smaller tile size which allows more timers to be seen at once.&lt;/div&gt;The two timers you use the most will automatically sort to the top left of the list, and the ‘Specific Time’ timer will always be the last entry in the list. This makes it easy to locate your favourite timers.&lt;br /&gt;To set a timer quickly, just tap on it with your finger. Depending on your settings either;&lt;br /&gt;&lt;ol&gt;Your phone will set the reminder and vibrate to confirm, then the app will exit (the default behaviour), or, your phone will switch to the ‘reminders’ page and show you the newly set reminder.  &lt;/ol&gt;&lt;ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;When the designated time arrives, your phone will show your reminder even if the app isn’t open. You’ll also have the &lt;a href=&quot;http://lh5.ggpht.com/-JY9OHVUUVzM/Tyw5__JtCxI/AAAAAAAAAHg/hTYMrUzVsPs/s1600-h/SimpleReminderScreenshot2.png&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;SimpleReminderScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh3.ggpht.com/-gNaPGidlzCw/Tyw6BNIGUNI/AAAAAAAAAHo/HMQ3jZUxOTk/SimpleReminderScreenshot_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;SimpleReminderScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;option of snoozing the reminder (this is provided by the WP7 OS and I can’t change the snooze options, sorry).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;     &amp;nbsp;&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;     Viewing and Cancelling Reminders&lt;/h4&gt;&lt;a href=&quot;http://lh6.ggpht.com/-VRK3oKmd1U0/Tyw6CVzwz3I/AAAAAAAAAHw/g7Oia66UMRo/s1600-h/RemindersPageScreenshot2.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;RemindersPageScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh3.ggpht.com/-_bPBkql-dqU/Tyw6DzIDglI/AAAAAAAAAH4/mJRX4q0CYks/RemindersPageScreenshot_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;RemindersPageScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;br /&gt;From the main screen you can swipe left or right to see the reminder page. This page shows you both reminders that have passed and reminders that are yet to occur. Reminders that have passed are shown with either a slightly darker or lighter background colour (depending on your theme) than reminders that haven’t occurred yet.&lt;br /&gt;To cancel a reminder, just tap on it once then choose ok on the confirmation message box that appears.&lt;br /&gt;Reminders are automatically removed 24 hours after they have past, so you don’t need to cancel old ones (unless you’re bored or suffering from OCD).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;     Setting Reminders with Text&lt;a href=&quot;http://lh5.ggpht.com/-_8UFFmaZ6WA/Tyw6FE8YBqI/AAAAAAAAAIA/JbhoOxOyWpE/s1600-h/TimerContextMenuScreenshot7.png&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;TimerContextMenuScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh5.ggpht.com/-z8Du3fLvOG4/Tyw6GRCD5xI/AAAAAAAAAII/2kOpVql8t2w/TimerContextMenuScreenshot_thumb3.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;TimerContextMenuScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;/h4&gt;Got too many reminders, or one set so far in the future you’re afraid you’ll forget what it’s for ? You can set custom text for your reminder nearly as easily as setting a quick reminder. Just tap and hold on the timer you want to set, and choose ‘set reminder’ from the menu that pops-up. This will display the “reminder details” screen.&lt;br /&gt;&lt;a href=&quot;http://lh5.ggpht.com/-1RGKHcIT5QY/Tyw6Hb6zCGI/AAAAAAAAAIQ/IBaap7F3Q8k/s1600-h/ReminderDetailScreenshot2.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;ReminderDetailScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh5.ggpht.com/-cHNjnkU1N1Y/Tyw6Iiu--5I/AAAAAAAAAIY/Yx1lSnSrDyg/ReminderDetailScreenshot_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;ReminderDetailScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;br /&gt;On the reminder details page you can tap in the ‘reminder text’ field and key in your own text, or you can tap on one of the preset prompts to quickly set the text. Double tap on an item in the preset list to choose that text and set the reminder. Alternatively tap once on an item in the list, then tap in the text field to edit the text if you desire, and finally click the tick button at the bottom of the screen to set the reminder.&lt;br /&gt;To cancel setting the reminder, tap the back button on your phone.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;        &lt;br /&gt;Setting a Reminder for a Specific Time of Day&lt;a href=&quot;http://lh6.ggpht.com/-C1rKBQEUykQ/Tyw6J2Z-VcI/AAAAAAAAAIg/SkRuhsMHLRE/s1600-h/SpecificTimeOfDayScreenshot2.png&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;SpecificTimeOfDayScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh6.ggpht.com/-MUTzmbWG5XY/Tyw6LMS5HuI/AAAAAAAAAIo/dqjZp5OvjNo/SpecificTimeOfDayScreenshot_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;SpecificTimeOfDayScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;/h4&gt;When you choose the ‘Specific Time’ timer, regardless of whether you single tap or use the tap and hold menu, you will be shown a variation on the details screen. Like the normal details screen this allows you to set custom text for your reminder, but it also allows you to pick a specific date and time for the reminder to occur at.&lt;br /&gt;You choose the time first. Tap on the time field to bring up the time picker and enter the time. If the time you choose is after the current time today, then the date field defaults to today. If the time you choose is before the current time today, the date field automatically changes to tomorrow. In either case, you can tap on the date field and choose a different date if you wish.&lt;br /&gt;When you’ve set the date and time, and selected your text, tap the tick button at the bottom of the screen to set the reminder. &lt;br /&gt;&lt;h4&gt;     &lt;/h4&gt;&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;&lt;h4&gt;Pinning Timers&lt;/h4&gt;&lt;a href=&quot;http://lh6.ggpht.com/-jX3-ugjDbIM/Tyw6MdSQ3HI/AAAAAAAAAIw/LakxfBUw3eY/s1600-h/PinnedTimerScreenshot12.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;PinnedTimerScreenshot1&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh6.ggpht.com/-eUH-_V0UqjU/Tyw6NoMz_CI/AAAAAAAAAI4/WG2p8n8jIgI/PinnedTimerScreenshot1_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;PinnedTimerScreenshot1&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;br /&gt;For truly one-tap reminders, you can pin timers to your start screen. Just tap and hold on a timer inside the app, then choose ‘pin to start’ from the menu that pops-up. A new tile will be created on your start screen for the timer. From that point on, you can set the timer just by clicking the tile on your phones main page, no need to open the app first.&lt;br /&gt;This works for any timer, including custom timers for specific times of day and/or with text assigned, or for simple timers that are just a period of time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;     &amp;nbsp;&lt;/h4&gt;&lt;h4&gt;     &lt;/h4&gt;&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;&lt;br /&gt;&lt;h4&gt;Customising the Timers List (Paid Feature)&lt;/h4&gt;If you don’t like the default list of timers, you can change it. To remove a timer, just tap and hold on it and then choose ‘remove’ from th&lt;a href=&quot;http://lh4.ggpht.com/-5W_--Vb4dyE/Tyw6OwI8u1I/AAAAAAAAAJA/OKQv39OjfVk/s1600-h/MainAppBarMenuScreenshot2.png&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;MainAppBarMenuScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh4.ggpht.com/-ZWfwtv1yaio/Tyw6QL0_ySI/AAAAAAAAAJI/0Czxq0mqI6U/MainAppBarMenuScreenshot_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;MainAppBarMenuScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;e menu that pops-up.&lt;br /&gt;To add a new timer, tap on the three dots at the lower right of the screen, then on the menu that slides up choose ‘add timer.’ This will bring up a new screen that allows you to enter the details of the timer you want to add.&lt;br /&gt;&lt;a href=&quot;http://lh6.ggpht.com/-R3uz4LHLerE/Tyw6RUS0TeI/AAAAAAAAAJQ/wSTEaNHsQu8/s1600-h/AddTimerScreenshot2.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;AddTimerScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh3.ggpht.com/-wF3DaiPFI60/Tyw6ShIAxlI/AAAAAAAAAJY/Q704lq-sUZU/AddTimerScreenshot_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;AddTimerScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;br /&gt;On the add timer screen you first select the type of timer you want to create. You can choose between a timer for a ‘duration’, i.e 23 minutes from the time the timer is set, or you can create a timer for a specific time of day, i.e 3:00 p.m.&lt;br /&gt;Next, enter either the number of hours and minutes for the timer (if you chose ‘duration’), or the time of day. The fields available will change to suit, depending on the type of timer selected.&lt;br /&gt;Finally, you can optionally enter the default text for your timer. If you enter no text, the word ‘reminder’ will be used by default. If the text you enter happens to match an entry in the preset prompts list then the image associated with that text will be shown in some places where the reminder is displayed (such as the reminders page, and the back of pinned tiles).&lt;br /&gt;To save your reminder, tap the tick button at the bottom of the screen. To cancel, tap the back button on your phone.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;     Customising Preset Prompts (Paid Feature)&lt;a href=&quot;http://lh3.ggpht.com/-4MU3KKeqfB0/Tyw6T4dz4EI/AAAAAAAAAJg/nzN7GxrFiTA/s1600-h/AddPresetScreenshot2.png&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;AddPresetScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh3.ggpht.com/-o-IWhxc4Fqo/Tyw6U6avsCI/AAAAAAAAAJo/kmwN9T6F27U/AddPresetScreenshot_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;AddPresetScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;/h4&gt;On the detailed reminder screen you can remove a preset prompt by tapping and holding on it and then choosing ‘remove’ from the menu that pops-up. &lt;br /&gt;You can add a new prompt by clicking the three dots at the lower right hand corner of the screen (while on the reminder details page) and then choosing ‘add preset text’ from the menu the slides up.&lt;br /&gt;On the ‘add preset’ screen you can enter the text for your preset by tapping in the text field and keying in the value you want to use.&lt;br /&gt;You can also tap on the green square to choose an (optional) image to associate with this preset. This image will be shown on the reminders page inside the app, and on the backs of timers you pin to your start screen.&lt;br /&gt;When you’ve made your choices you save the preset by tapping the tick button at the bottom of the screen. To cancel, tap the back button on your phone.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;     Settings&lt;/h4&gt;&lt;a href=&quot;http://lh5.ggpht.com/-7MWkdfuMStw/Tyw6WIUA_XI/AAAAAAAAAJw/7yXhGDin9TE/s1600-h/SettingsScreenshot2%25255B1%25255D.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;SettingsScreenshot&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh6.ggpht.com/-3O1PX2vMpJs/Tyw6XkCn2yI/AAAAAAAAAJ4/AFJMyLejimQ/SettingsScreenshot_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;SettingsScreenshot&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;The settings screen allows you to change the behaviour of the app and to reset the app data to the default values. You can scroll the screen up and down by flicking with your finger to see more options. To access this screen, tap the three dots in the lower right corner of the screen while on the main page.&lt;br /&gt;&lt;h5&gt;     Enable 1 tap reminder set&lt;/h5&gt;If this setting is on, tapping once on a timer sets the reminder immediately with the default text. If this setting is off, tapping once on a timer &lt;strong&gt;&lt;em&gt;always&lt;/em&gt;&lt;/strong&gt; shows the reminder details page.&lt;br /&gt;&lt;h5&gt;     Auto-exit on 1 tap reminder set&lt;/h5&gt;If this setting is on, setting a reminder via a single tap causes the phone to vibrate to confirm the reminder has been set, then automatically closes the app. If you don’t like this behaviour, turn this setting off and the app will move to the reminders page and show the newly set reminder instead of closing.&lt;br /&gt;&lt;h5&gt;     Auto-exit on detailed reminder set&lt;/h5&gt;This setting is the same as the previous one (Auto-exit on 1 tap reminder set) but applies to reminders set via the the reminder details page rather than the one-tap method.&lt;br /&gt;&lt;h5&gt;     Use small tiles&lt;/h5&gt;This setting changes the size of the tiles shown on the timer screen, small tiles mode show more timers at once and reduces the need for scrolling, but make the touch area for each timer smaller.&lt;br /&gt;&lt;a href=&quot;http://lh3.ggpht.com/-94QDHrFgy0g/Tyw6Yta4FsI/AAAAAAAAAKA/pCL4idvOqcE/s1600-h/SettingsScreenshot22.png&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;SettingsScreenshot2&quot; border=&quot;0&quot; height=&quot;244&quot; src=&quot;http://lh3.ggpht.com/-LXOSd20QUZg/Tyw6aFy-SuI/AAAAAAAAAKI/2iXnwgPsh0M/SettingsScreenshot2_thumb.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: right; margin: 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;SettingsScreenshot2&quot; width=&quot;148&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h5&gt;     Add Timer&lt;/h5&gt;This button allows you to add a new timer, just like the ‘add timer’ menu option on the main screen.&lt;br /&gt;&lt;h5&gt;     Add Preset Text&lt;/h5&gt;This option allows you to add a new preset prompt to the list available on the detailed reminder screen, just like the ‘add preset text’ menu option on the reminder details screen.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Reset Buttons&lt;/strong&gt;&lt;br /&gt;These buttons reset the data named on each button to it’s default values.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fd52f467-c82c-4f79-a2f9-d2aa95173f53&quot; style=&quot;display: inline; float: none; margin: 0px; padding: 0px;&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/WP7&quot; rel=&quot;tag&quot;&gt;WP7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/1+Tap+Reminder&quot; rel=&quot;tag&quot;&gt;1 Tap Reminder&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Windows+Phone+7&quot; rel=&quot;tag&quot;&gt;Windows Phone 7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Mango&quot; rel=&quot;tag&quot;&gt;Mango&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Application&quot; rel=&quot;tag&quot;&gt;Application&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/8386245048283510852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2012/01/1-tap-reminder-for-windows-phone-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/8386245048283510852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/8386245048283510852'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2012/01/1-tap-reminder-for-windows-phone-7.html' title='1 Tap Reminder for Windows Phone 7'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-6zyMoqUgf_0/Tyw55nVP5SI/AAAAAAAAAG4/bjCWc9gb3n8/s72-c/Download-EN-Small4.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-357816423665086655</id><published>2012-01-17T21:10:00.001+13:00</published><updated>2012-02-07T15:24:01.853+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="cellphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="download"/><category scheme="http://www.blogger.com/atom/ns#" term="smartphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7"/><category scheme="http://www.blogger.com/atom/ns#" term="WP7"/><title type='text'>Meal Timer</title><content type='html'>&lt;br /&gt;&lt;a href=&quot;http://windowsphone.com/s?appid=5c740fc6-11f9-47fd-a430-240709e84c6e&quot; target=&quot;_blank&quot;&gt;Meal Timer&lt;/a&gt; is my first &lt;a href=&quot;http://www.windowsphone7.com/&quot; target=&quot;_blank&quot;&gt;Windows Phone 7&lt;/a&gt; application (requires Mango update for WP7). There are a number of apps in the &lt;a href=&quot;http://www.windowsphone.com/marketplace&quot; target=&quot;_blank&quot;&gt;WP7 Marketplace&lt;/a&gt; that are ‘kitchen timers’ and allow you to set reminders or alarms for&amp;nbsp; particular time, but Meal Timer is unique (as far as I know) in that it allows multiple timers to be set so they all end at the same time. This means the application itself ensures your meat, vegetables, sauces and other meal components are &lt;strong&gt;all ready at the same time&lt;/strong&gt;. Unlike most other kitchen timers that assume you are cooking immediately, you can schedule the meal to be ready at a particular time, and Meal Timer will set alarms so everything is ready at that time (or you can start cooking right away if you want).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://windowsphone.com/s?appid=5c740fc6-11f9-47fd-a430-240709e84c6e&quot;&gt;&lt;img alt=&quot;Download-EN-Small&quot; border=&quot;0&quot; height=&quot;40&quot; src=&quot;http://lh5.ggpht.com/-ixMHCORRxTw/TxU6qVhGrWI/AAAAAAAAAGs/diaSUwz53JU/Download-EN-Small%25255B3%25255D.png?imgmax=800&quot; style=&quot;background-image: none; border: 0px currentColor; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;Download-EN-Small&quot; width=&quot;114&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, how does it work ?&lt;br /&gt;First, &lt;a href=&quot;http://windowsphone.com/s?appid=5c740fc6-11f9-47fd-a430-240709e84c6e&quot; target=&quot;_blank&quot;&gt;download the application&lt;/a&gt; from the Marketplace. Then open the application from your application list (or pin it to your start menu for a beautiful tile showing a tasty homemade hamburger, and open it via the tile).&lt;br /&gt;&lt;br /&gt;When you first open Meal Timer you will see the main ‘panorama screen’ which will be set which will be scrolled to the ‘components’ page and looks like this;&lt;br /&gt;&lt;a href=&quot;http://lh6.ggpht.com/-DPgZ9sUJJEk/TxUsdPyUv1I/AAAAAAAAAE8/ajiK176eWjc/s1600-h/EmptyComponentsPage6.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;EmptyComponentsPage&quot; border=&quot;0&quot; height=&quot;370&quot; src=&quot;http://lh5.ggpht.com/-AAtMgUsN8vI/TxUse4cYRcI/AAAAAAAAAFE/jeDTcHTkCBM/EmptyComponentsPage_thumb2.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;EmptyComponentsPage&quot; width=&quot;220&quot; /&gt;&lt;/a&gt;To start, you need to add some items to cook. Do this by pressing the button at the bottom of the screen marked with a + symbol. This will bring up the ‘Add Component’ window.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://lh4.ggpht.com/-sr5jAK0a6t0/TxUsiDK6DXI/AAAAAAAAAFM/IkPYt6rdYaU/s1600-h/EmtpyAddItemDialog4.png&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;EmtpyAddItemDialog&quot; border=&quot;0&quot; height=&quot;385&quot; src=&quot;http://lh4.ggpht.com/-0s4PPXUtckI/TxUskVlFDQI/AAAAAAAAAFU/BPpo321ZJN4/EmtpyAddItemDialog_thumb2.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;EmtpyAddItemDialog&quot; width=&quot;226&quot; /&gt;&lt;/a&gt;Click in the ‘Name’ field and type the name of something you’re going to cook, i.e &#39;Chicken’. Note, you don’t have to add the items in any particular order, Meal Timer will sort the items into the correct cooking order based on time, later when we tell it we’re ready to start or schedule cooking.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://lh6.ggpht.com/-T_MENIzp-4k/TxUsmcjL1bI/AAAAAAAAAFc/MnCNZtEsmmQ/s1600-h/AddItemDialogItemNameOnly4.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;AddItemDialogItemNameOnly&quot; border=&quot;0&quot; height=&quot;392&quot; src=&quot;http://lh6.ggpht.com/-KcBQ093qawk/TxUsn_rhBgI/AAAAAAAAAFk/ugmSKMRXk-A/AddItemDialogItemNameOnly_thumb2.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;AddItemDialogItemNameOnly&quot; width=&quot;230&quot; /&gt;&lt;/a&gt;With the item name entered, you now need to enter the cooking time. First, you need to go to the cooking time box. The easiest way to do this is to press the enter button on the on-screen keyboard. Otherwise, you can tap in the visible portion of the Cooking Time field (you can flick up on any part of the dark background area behind the text fields to scroll them up so it’s easier to see and tap on the Cooking Time field). Alternatively, you can press the back button on the phone itself to close the keyboard, then tap in the Cooking Time field, but pressing enter is the easiest thing to do.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://lh5.ggpht.com/-gWbkjn7H0rk/TxUsqPg35mI/AAAAAAAAAFs/he6ExSCGW4M/s1600-h/EnterCookingTime4.png&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;EnterCookingTime&quot; border=&quot;0&quot; height=&quot;415&quot; src=&quot;http://lh3.ggpht.com/-sTepRGGb9_8/TxUsrkXL9TI/AAAAAAAAAF0/eqju76Xgt9s/EnterCookingTime_thumb2.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;EnterCookingTime&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;Once you’re in the cooking time field, simple enter either a number of whole minutes, or a number of hours and minutes separated by a colon (:) character. For example, 75 and 1:15 both refer to 1 hour and fifteen minutes. When you’ve entered the time, either press enter on the on-screen keyboard or the button at the bottom of the screen marked with a plus to add this item and start entering another. If you’ve entered all the items you want to enter (or if this is the last item you intend to enter), you can press the button at the bottom of the screen marked with a tick (check mark). If you’ve changed your mind about entering the item currently shown on screen, press the back button on your phone to return to the main screen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://lh4.ggpht.com/-6d6Vm36K7x0/TxUst6InfJI/AAAAAAAAAF8/GyEuCk8gRlw/s1600-h/ComponentsListScreenshot4.png&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;ComponentsListScreenshot&quot; border=&quot;0&quot; height=&quot;395&quot; src=&quot;http://lh5.ggpht.com/-2HAeONnCaZY/TxUsvbKiUZI/AAAAAAAAAGE/kIJJFYXWTqs/ComponentsListScreenshot_thumb2.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;ComponentsListScreenshot&quot; width=&quot;232&quot; /&gt;&lt;/a&gt;Back on the main screen the components list will now show all the items you’ve entered.&lt;br /&gt;If you want to change the time you entered on one of these items, click on the red area representing the item. If you want to remove an item from the list entirely, click on the trash can icon on the right hand side of the item you want to delete.&lt;br /&gt;You can scroll the list of meal components up and down by swiping with your finger.&lt;br /&gt;To start or schedule cooking, press the button at the bottom of the screen marked with an arrow head (like the play button on a DVD player). This will bring up the Start Cooking dialog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img align=&quot;right&quot; alt=&quot;StartCookingScreenshot&quot; border=&quot;0&quot; height=&quot;412&quot; src=&quot;http://lh4.ggpht.com/-T_DPZ6Z01jE/TxUs0qp0HOI/AAAAAAAAAGU/WdrDcU2LGHY/StartCookingScreenshot_thumb2.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: right; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;StartCookingScreenshot&quot; width=&quot;242&quot; /&gt;If you want to start cooking right away, click the Start Now check box to place a check mark in it. Alternatively leave the Start Now check box unchecked, select the time you want your meal to be ready at below it. Note, you can use the settings screen to change the default meal time. When you’ve made your choice, press the button at the bottom of the screen marked with a tick (check mark). If you’re not ready yet or have changed your mind, press the back button on your phone. When you do start or schedule cooking you will be returned to the main page and the meal components you entered earlier will move across to the timers page. You can move between the components and timers pages by swiping left or right on screen when the main page is shown.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img align=&quot;left&quot; alt=&quot;TimersScreenshot&quot; border=&quot;0&quot; height=&quot;420&quot; src=&quot;http://lh4.ggpht.com/-_3RibDnigM0/TxUs43nLG6I/AAAAAAAAAGk/jkontOsdpJA/TimersScreenshot_thumb2.png?imgmax=800&quot; style=&quot;background-image: none; border-width: 0px; display: inline; float: left; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;TimersScreenshot&quot; width=&quot;247&quot; /&gt;The various components of the meal will be sorted by cooking time so the item that is going to take the longest to cook is started first, and so on. An ‘alarm’ will be set on your phone for the time each item needs to start cooking, and another alarm will be set for when all the items are ready. These alarms will go off even if you close the Meal Timer application.&lt;br /&gt;If you leave Meal Timer running, the components on the timers page will turn read when they need to start cooking (as well as the alarm going off) and the system will start counting down the time left for that item. Each timer shows you the scheduled start time, the total cooking time for that item, and the time remaining (counting down while the timer is running). &lt;br /&gt;Timers that are grey indicate they have not started yet. When a timer completes, it turns black for about a second and then disappears.&lt;br /&gt;You can scroll the list of timers up and down by swiping with your finger.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And that’ about it ! There is a setting screen, which you can access from the main page by pressing the three little dots near the bottom right and then choosing ‘settings’ from the menu that pops up. The settings screen allows you to set the sound used for the alarm and the default meal time, as well as delete any data the application has saved, and there are also shortcuts to rate/review and buy the application in the WP7 Marketplace.&lt;br /&gt;So, what if you want to schedule multiple courses for a single meal ? Easy, just perform the steps above once for each course and choose a different ‘Meal Ready at Time’ for each course on the Start Cooking screen. All the timers will mix in together on the timers page, but all the items for each course (scheduled together) will be ready at the same time. Simple !&lt;br /&gt;If you have any suggestions, problems or queries please contact me via &lt;a href=&quot;mailto:yort@yortondotnet.com&quot;&gt;yort@yortondotnet.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.facebook.com/mealtimer&quot;&gt;Visit Meal Timer on Facebook&lt;/a&gt;.&lt;br /&gt;&lt;hr /&gt;&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:587a862e-a06a-4c67-b906-e8e36dc9c9a2&quot; style=&quot;display: inline; float: none; margin: 0px; padding: 0px;&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/meal+timer&quot; rel=&quot;tag&quot;&gt;meal timer&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/windows+phone+7&quot; rel=&quot;tag&quot;&gt;windows phone 7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/wp7&quot; rel=&quot;tag&quot;&gt;wp7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/application&quot; rel=&quot;tag&quot;&gt;application&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/mango&quot; rel=&quot;tag&quot;&gt;mango&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/357816423665086655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2012/01/meal-timer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/357816423665086655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/357816423665086655'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2012/01/meal-timer.html' title='Meal Timer'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-ixMHCORRxTw/TxU6qVhGrWI/AAAAAAAAAGs/diaSUwz53JU/s72-c/Download-EN-Small%25255B3%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-2384483054661911902</id><published>2011-06-30T11:06:00.001+12:00</published><updated>2011-06-30T11:06:39.905+12:00</updated><title type='text'>DataViews and Filter Expressions</title><content type='html'>&lt;p&gt;   &lt;br /&gt;Yesterday I helped a colleague with a problem involving a DataView that would not find any rows when given a valid filter expression that should have returned rows. It took a little while to figure the problem out, so I thought I’d post the solution in case anyone else is stuck with the same issue.&lt;/p&gt;  &lt;p&gt;In our case we had a DataTable (as part of a DataSet) that contained rows. Using the Debug Visualiser for the DataSet we could view the rows and see the data we expected. We had a column called BranchId and we wanted to find rows with a specific value in this column. If we wrote our own loop (we’re working in .Net 2.0 so no LINQ etc.) to iterate all the rows, request the value of the BranchId column and check it against the value we were searching for (17 in the first case) we found the row no problem. However, if we created a DataView with a filter expression of “[BranchId] = 17” now rows were returned.&lt;/p&gt;  &lt;p&gt;The usual culprit here is ‘RowState’, where you must tell the DataView whether to include added rows, deleted rows, or to look at the modified or original versions of the rows. However, our code was correctly telling the DataView which row states to check, and the row state for the rows in question matched, so this was not the problem. Interestingly if we called AcceptChanges on the DataSet then the view would work fine, but we couldn’t do this because we needed to retain the current row state value for later in our algorithm, and AcceptChanges resets the row state.&lt;/p&gt;  &lt;p&gt;In the end it turned out the problem was caused by a failure to call ‘EndEdit’ on the row. Specifically, the BranchId value for these rows had been programmatically set via code earlier in the application and EndEdit hadn’t been called on the row afterwards. This meant the &lt;strong&gt;proposed&lt;/strong&gt; value was 17, but the &lt;strong&gt;current &lt;/strong&gt;and original values were‘unset’ (note, not actually null as requesting the original value threw an exception saying the value didn’t exist, even though nulls were allowed). Calling EndEdit on the row moved the value from ‘Proposed’ to the current value without affecting the RowState, and then the DataView filter worked fine.&lt;/p&gt;  &lt;p&gt;Of course this all makes perfect sense when you think about it, and of course you should call EndEdit to commit changes to a DataRow when you’ve finished making them. The confusing issue in this case was that ONLY DataView was checking the ‘current’ value of the field. Everything else (the Debugger Visualiser and other debug tools, and any code we wrote to check the column value without specifying which value to check) was checking the proposed value by default. This made it appear like the DataView or filter expression was at fault, and there was no help, guidance or clear hint that the issue was caused by the same field having two different values simultaneously. Also, since most of our edits occur through controls like the DataGrid, EndEdit usually gets called for us by the control. It was only because we had (unusually) set the DataSet value programmatically that we needed to manually call EndEdit ourselves. Interestingly, there also doesn’t appear to be anyway to tell the DataView to check the proposed value rather than the current (committed) value.&lt;/p&gt;  &lt;p&gt;So, moral of the story (and a good thing to remember anyway), always call EndEdit on your DataRows after you’ve programmatically made changes to them (and you want to keep/commit those changes in memory).&lt;/p&gt;  &lt;hr /&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:17185074-f86a-41c4-9900-34f0731995ba&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/.Net&quot; rel=&quot;tag&quot;&gt;.Net&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/C%23&quot; rel=&quot;tag&quot;&gt;C#&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/DataSet&quot; rel=&quot;tag&quot;&gt;DataSet&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/DataView&quot; rel=&quot;tag&quot;&gt;DataView&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Expression&quot; rel=&quot;tag&quot;&gt;Expression&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Filter&quot; rel=&quot;tag&quot;&gt;Filter&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/RowState&quot; rel=&quot;tag&quot;&gt;RowState&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/EndEdit&quot; rel=&quot;tag&quot;&gt;EndEdit&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/AcceptChanges&quot; rel=&quot;tag&quot;&gt;AcceptChanges&lt;/a&gt;&lt;/div&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/2384483054661911902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/06/dataviews-and-filter-expressions.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/2384483054661911902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/2384483054661911902'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/06/dataviews-and-filter-expressions.html' title='DataViews and Filter Expressions'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-5907695453021066445</id><published>2011-06-24T15:55:00.000+12:00</published><updated>2011-06-24T15:55:13.206+12:00</updated><title type='text'>Windows 8 for software developers: the Longhorn dream reborn?</title><content type='html'>I really wish there would be a public anouncement from Microsoft themselves clarifying a few things, but at least this puts some of the recent rumours/leaks in a positive light (rather than all the drama and doomsaying that has been going on);&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://arstechnica.com/microsoft/news/2011/06/windows-8-for-software-developers-the-longhorn-dream-reborn.ars/2&quot;&gt;Windows 8 for software developers: the Longhorn dream reborn?&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel="related" href="http://arstechnica.com/microsoft/news/2011/06/windows-8-for-software-developers-the-longhorn-dream-reborn.ars/2" title="Windows 8 for software developers: the Longhorn dream reborn?"/><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/5907695453021066445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/06/windows-8-for-software-developers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/5907695453021066445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/5907695453021066445'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/06/windows-8-for-software-developers.html' title='Windows 8 for software developers: the Longhorn dream reborn?'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-559167429914808849</id><published>2011-06-07T17:06:00.000+12:00</published><updated>2011-06-07T17:06:09.712+12:00</updated><title type='text'>Why Apple Enthusiasts Are Wrong About Windows 8 - Techland - TIME.com</title><content type='html'>&lt;a href=&quot;http://techland.time.com/2011/06/02/why-apple-enthusiasts-are-wrong-about-windows-8/&quot;&gt;Why Apple Enthusiasts Are Wrong About Windows 8 - Techland - TIME.com&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel="related" href="http://techland.time.com/2011/06/02/why-apple-enthusiasts-are-wrong-about-windows-8/" title="Why Apple Enthusiasts Are Wrong About Windows 8 - Techland - TIME.com"/><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/559167429914808849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/06/why-apple-enthusiasts-are-wrong-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/559167429914808849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/559167429914808849'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/06/why-apple-enthusiasts-are-wrong-about.html' title='Why Apple Enthusiasts Are Wrong About Windows 8 - Techland - TIME.com'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-6412104103589990950</id><published>2011-06-07T09:58:00.001+12:00</published><updated>2011-06-07T09:58:58.497+12:00</updated><title type='text'>Will Microsoft Own the Web (Again) ?</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Contentious title, I know, but that’s just to get you here. If you’re reading this, it worked.&lt;/p&gt;  &lt;p&gt;With the recent &lt;a href=&quot;http://news.cnet.com/8301-31021_3-20068119-260/sinofsky-shows-off-windows-8-at-d9/&quot; target=&quot;_blank&quot;&gt;news about Windows 8&lt;/a&gt; from &lt;a href=&quot;http://www.microsoft.com&quot; target=&quot;_blank&quot;&gt;Microsoft&lt;/a&gt;, like many, I’ve been pondering their future. Since I work for a software development company heavily invested in Microsoft tools and technologies, my future is tied to theirs so this makes sense. It’s hard to know what Microsoft’s strategy is, or if they have one at all. Sometimes it looks like they’re doing new cool things (WP7), although uptake by the market doesn’t always follow. Other times it looks like the right hand isn’t talking to the left, or the whole company is in panic mode. Much has been written about how Microsoft is behind it’s competitors, or no longer relevant, &lt;a href=&quot;http://www.geekwire.com/2011/chart-ballmers-approval-rating-plummets&quot; target=&quot;_blank&quot;&gt;how Ballmer is (allegedly) driving it under&lt;/a&gt; and so on. There have also been the debacles over the question of &lt;a href=&quot;http://team.silverlight.net/announcement/pdc-and-silverlight/&quot; target=&quot;_blank&quot;&gt;the future Silverlight&lt;/a&gt; and the use of the admittedly idiotic term “&lt;a href=&quot;http://news.slashdot.org/story/11/04/15/1716234/Rivals-Mock-Microsofts-Native-HTML5-Claims&quot; target=&quot;_blank&quot;&gt;Native HTML&lt;/a&gt;” all of which have caused laughter from some sections of the industry. All this may or may not be true at present, but I’m wondering if there isn’t a secret plan that’s being missed by most. I wonder if perhaps those laughing should stop and think about this a little bit longer.&lt;/p&gt;  &lt;p&gt;Microsoft could be said to have owned the web at one stage, Netscape/Mozilla created the first browser but Microsoft came out with IE and basically crushed them. Let’s not forget that Microsoft is generally pretty good at playing catch-up even when it’s later to the game, it is good and experienced at being the underdog. We can argue about which product was actually better, or whether the business practices employed by Microsoft were fair and so on, but in the end they had far more of the browser market than any other. Of course, while IE is still widely used today, other browsers are growing faster and have stolen a significant portion of that market share. &lt;/p&gt;  &lt;p&gt;Combine that with the up take in portable devices, mostly Smartphones and tablets like the iPhone, iPad, and Android phones and tablets, and Microsoft seems to be fighting a losing battle. Are Windows 8 and IE 9 part of a plan to turn that around ? That might sound ridiculous, obviously Microsoft are going to release new products, obviously they’re supposed to be better than what came before, and obviously Microsoft hopes those products will save them. What I’m asking is are Windows 8 and IE 9 the first steps in a plan to create the web client platform of choice ?&lt;/p&gt;  &lt;p&gt;Hardware acceleration in the browser (IE9), a (supposedly, depending on your personal taste) cool and striking new UI for Windows based on the already much lauded WP7 interface, and an OS designed to run across a variety of platforms and form factors ? HTML5 and JScript as the development tools of choice for Windows 8? What if “Native HTML&amp;quot; is supposed to mean “Native and HTML” or something similar ? Taking HTML5 and JScript seriously opens up a lot of applications to running on Windows 8 and being sold through the new Windows 8 app store that wouldn’t have been if it was native only. If Windows 8 actually provided additional capabilities for web applications, things that couldn’t be done on other platforms, then web developers (at least some of them) would get excited about that. All of a sudden we have a class of (good/excellent) web applications that either only work, or work best on Windows. What if the plan is to produce the killer client OS for using the web ?&lt;/p&gt;  &lt;p&gt;You may be terrified by this concept, after all, many see the web as a place free of dominance by a single client platform and want it to remain that way. Or you might just hate the idea of Microsoft being the winner here. You may scoff. Who knows if Microsoft can actually pull this off (no doubt many would argue they can’t)… but what if Microsoft turned Windows into the iOS of the web ? What if you could get web and internet experiences like no other, but only on the Windows platform&amp;#160; and that platform ran on your smartphone, your tablet, your laptop, your TV ? &lt;/p&gt;  &lt;p&gt;What if having the fastest or best standards support or whatever in a browser doesn’t matter because the web is no longer separate to your OS, constrained inside the browser ? Is this Microsoft’s answer to ChromeOS, albeit with a different view… instead of the browser being the operating system shell, the OS is a bigger, better browser ? What if the point here is not to kill non-web applications or move away from them, but to actually enable web based applications to compete with non-web applications on performance, beauty, offline support and general user experience ? What if Microsoft made Windows the coolest platform for consuming the web and internet (on any device) as &lt;a href=&quot;http://www.apple.com&quot; target=&quot;_blank&quot;&gt;Apple&lt;/a&gt; made the iPhone coolest smartphone ?&lt;/p&gt;  &lt;p&gt;Ok, so Microsoft have been building the internet and the web into Windows in various ways for a while, this isn’t exactly a new concept. Security is also a problem that gets bigger the more you integrate the internet and web to the OS. Microsoft may or may not pull it off, and if they do it’s likely to be Windows 10 before we see the full fruits of this (possible) plan (if any). Just for a moment though, throw out any bias you might have and consider what the world would be like if Microsoft managed this feat. What would the world be like if no one wanted to access the web unless they were using Windows ? What if Microsoft owned the web again ?&lt;/p&gt;  &lt;hr /&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b7be9f38-ad4c-4791-9794-30848026ead4&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/Microsoft&quot; rel=&quot;tag&quot;&gt;Microsoft&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Windows&quot; rel=&quot;tag&quot;&gt;Windows&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Windows+8&quot; rel=&quot;tag&quot;&gt;Windows 8&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Silverlight&quot; rel=&quot;tag&quot;&gt;Silverlight&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/HTML5&quot; rel=&quot;tag&quot;&gt;HTML5&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/JScript&quot; rel=&quot;tag&quot;&gt;JScript&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/OS&quot; rel=&quot;tag&quot;&gt;OS&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Future&quot; rel=&quot;tag&quot;&gt;Future&lt;/a&gt;&lt;/div&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/6412104103589990950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/06/will-microsoft-own-web-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/6412104103589990950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/6412104103589990950'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/06/will-microsoft-own-web-again.html' title='Will Microsoft Own the Web (Again) ?'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-3574519610264593577</id><published>2011-06-03T12:53:00.000+12:00</published><updated>2011-06-03T12:53:39.862+12:00</updated><title type='text'>Mobile Opportunity: Windows 8: The Beginning of the End of Windows</title><content type='html'>Check out the following blog post by Michael Mace on Windows 8 and the future of Microsoft. It is an an excellent article with an interesting and well thought out analysis of both the possible success and failure Windows 8 represents for Microsoft. There&#39;s even a warning for traditional web companies, the likes of Google and Facebook, should everything come together in Microsoft&#39;s favour.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://mobileopportunity.blogspot.com/2011/06/windows-8-beginning-of-end-of-windows.html&quot;&gt;Mobile Opportunity: Windows 8: The Beginning of the End of Windows&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel="related" href="http://mobileopportunity.blogspot.com/2011/06/windows-8-beginning-of-end-of-windows.html" title="Mobile Opportunity: Windows 8: The Beginning of the End of Windows"/><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/3574519610264593577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/06/mobile-opportunity-windows-8-beginning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/3574519610264593577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/3574519610264593577'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/06/mobile-opportunity-windows-8-beginning.html' title='Mobile Opportunity: Windows 8: The Beginning of the End of Windows'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-4220022518253188879</id><published>2011-05-24T14:06:00.000+12:00</published><updated>2011-05-24T14:06:56.899+12:00</updated><title type='text'>500+ features coming to a Win 7 &quot;Mango&quot; phone tomorrow? | ZDNet</title><content type='html'>&lt;a href=&quot;http://www.zdnet.com/blog/gadgetreviews/500-features-coming-to-a-win-7-mango-phone-tomorrow/24983&quot;&gt;500+ features coming to a Win 7 &amp;quot;Mango&amp;quot; phone tomorrow? | ZDNet&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel="related" href="http://www.zdnet.com/blog/gadgetreviews/500-features-coming-to-a-win-7-mango-phone-tomorrow/24983" title="500+ features coming to a Win 7 &quot;Mango&quot; phone tomorrow? | ZDNet"/><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/4220022518253188879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/05/500-features-coming-to-win-7-mango.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/4220022518253188879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/4220022518253188879'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/05/500-features-coming-to-win-7-mango.html' title='500+ features coming to a Win 7 &quot;Mango&quot; phone tomorrow? | ZDNet'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-755001696226090768</id><published>2011-05-02T09:44:00.000+12:00</published><updated>2011-05-02T09:44:42.429+12:00</updated><title type='text'>Windows Phone 7: A Better Keyboard - Microsoft Research</title><content type='html'>&lt;a href=&quot;http://research.microsoft.com/en-us/news/features/wp7keyboard-042811.aspx&quot;&gt;Windows Phone 7: A Better Keyboard - Microsoft Research&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel="related" href="http://research.microsoft.com/en-us/news/features/wp7keyboard-042811.aspx" title="Windows Phone 7: A Better Keyboard - Microsoft Research"/><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/755001696226090768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/05/windows-phone-7-better-keyboard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/755001696226090768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/755001696226090768'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/05/windows-phone-7-better-keyboard.html' title='Windows Phone 7: A Better Keyboard - Microsoft Research'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-6042425169643083708</id><published>2011-04-28T14:41:00.001+12:00</published><updated>2011-04-28T14:41:24.046+12:00</updated><title type='text'>Windows Forms : Beware the Tab Control</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I discovered an interesting memory leak in one of my Windows Forms applications today. The cause and symptom are entirely obvious once you think about it, but it’s easy not to notice when you’re writing the code initially.&lt;/p&gt;  &lt;p&gt;In this particular case I had a tab control with several tabs on it, and some of those tabs needed to be visible or invisible based on either the state of the application or configuration settings. Unfortunately the .NET control for Windows Forms has neither enabled or visible properties for individual tabs, so the common solution is to remove ‘invisible’ tab pages from the tab control (or not add them in the first place).&lt;/p&gt;  &lt;p&gt;In my case the form and each tab page had been constructed and laid out with the VS designer, so all the controls and tab pages were created in the VS generated InitializeComponent method. As a result, my form start-up code then checked the state/configuration and removed the unnecessary tabs rather than just not creating them in the first place.&lt;/p&gt;  &lt;p&gt;That’s all good… works as expected. The problem is that when I removed the tab pages I didn’t explicitly dispose them. You don’t normally dispose tab pages, or any control, since the form normally does this for you when it’s own Dispose method is called. However, the form only does this for controls it can find, via it’s Controls property (recursively through the control hierarchy). Since I’d removed the tab page from the tab control, the form never found it to dispose.&lt;/p&gt;  &lt;p&gt;To make matters worse, some controls (in this case my own custom controls, but I believe at least the &lt;a href=&quot;http://www.microsoft.com&quot; target=&quot;_blank&quot;&gt;Microsoft&lt;/a&gt; provided DataGridView control does the same thing) connect to events on external objects, and disconnect on dispose. Since dispose was never called, they never disconnected from those event handlers and so an external reference to them survived which in turn caused the garbage collector to leave them alone. Viola, memory leak !&lt;/p&gt;  &lt;p&gt;It is of course a well known issue in Windows Forms that whenever you dynamically add and remove controls from a parent control you must explicitly dispose them, it was just that in this case I’d written the code many years ago and either hadn’t known that myself at the time or hadn’t realised what I was doing. As a result, I ended up with a leak.&lt;/p&gt;  &lt;p&gt;So, if you’re removing tab pages from a tab control make sure to dispose them. Just ensure you do this at the right time. If there is any possibility that you might want to re-add the control back into the tab, you either can’t dispose it until the parent control (or more likely form) is disposed. Either that or you’ll need to create and populate (with child controls) a &lt;strong&gt;new&lt;/strong&gt; instance of the tab page to add back into the tab control. Otherwise, if you add back in the old disposed instance, you’ll get errors about disposed objects being accessed.&lt;/p&gt;  &lt;hr /&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:75ae4191-480b-4d80-bd5c-4e3a3185d953&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/Windows+Forms&quot; rel=&quot;tag&quot;&gt;Windows Forms&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/.NET&quot; rel=&quot;tag&quot;&gt;.NET&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Tab&quot; rel=&quot;tag&quot;&gt;Tab&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Tab+Control&quot; rel=&quot;tag&quot;&gt;Tab Control&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Memory+Leak&quot; rel=&quot;tag&quot;&gt;Memory Leak&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Dispose&quot; rel=&quot;tag&quot;&gt;Dispose&lt;/a&gt;&lt;/div&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/6042425169643083708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/04/windows-forms-beware-tab-control.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/6042425169643083708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/6042425169643083708'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/04/windows-forms-beware-tab-control.html' title='Windows Forms : Beware the Tab Control'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-5177132834218717886</id><published>2011-04-05T10:34:00.000+12:00</published><updated>2011-04-05T10:34:12.115+12:00</updated><title type='text'>Hello World, cut four ways</title><content type='html'>&lt;a href=&quot;http://boredzo.org/helloworld/&quot;&gt;Hello World, cut four ways&lt;/a&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel="related" href="http://boredzo.org/helloworld/" title="Hello World, cut four ways"/><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/5177132834218717886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/04/hello-world-cut-four-ways.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/5177132834218717886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/5177132834218717886'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/04/hello-world-cut-four-ways.html' title='Hello World, cut four ways'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30433900.post-4525419598844137326</id><published>2011-03-26T10:28:00.001+13:00</published><updated>2011-03-26T10:28:16.227+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cellphone"/><category scheme="http://www.blogger.com/atom/ns#" term="Connectivity"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="Network"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7"/><category scheme="http://www.blogger.com/atom/ns#" term="WP7"/><title type='text'>Windows Phone 7 Connectivity Issue</title><content type='html'>&lt;p&gt;   &lt;br /&gt;It would appear that with WP7 devices you are often, at least with free wireless hotspots while out and about, better off disabling your Wi-Fi connection if you actually want to be able to connect to the internet. As far as I can tell, if you are connected to a Wi-Fi network with a weak signal, the phone doesn’t automatically fall back to one of the other connection methods (i.e 3G) on a failed/timed out network request. This means if you’re connected to a network via a bad Wi-Fi connection most or all network operations will fail until you manually disconnect. &lt;/p&gt;  &lt;p&gt;That’s the bad news. The even worse news is that WP7 doesn’t seem to have any way to manually disconnect from a Wi-Fi network. You can delete the Wi-Fi entry, which means you are disconnected from it AND the phone won’t reconnect next time that network is in range, or you can disable the Wi-Fi feature entirely. If you do the latter, then you have to remember to turn it back on later when you want to use a good Wi-Fi network (like your home or office one). &lt;/p&gt;  &lt;p&gt;This can lead to frustrating experiences. Earlier in the week I was in ‘store A’ which is next door to ‘store B’. Store B I have previously visited, has free Wi-Fi which I’d connected to and because my phone could see this from store A it automatically reconnected. Of course I wasn’t actually in store B, I didn’t realise I was connected to their network, and the connection was flaky because the Wi-Fi isn’t boosted and there were concrete walls and what not between the two stores. The end result was that everything I tried to do on my phone involving the internet failed… until I realised there was a Wi-Fi connection. Once I finally realised why I was having connectivity problems I tried to disconnect. Problem was, I want my phone to reconnect to that Wi-Fi the next time I visit store B, I just don’t want to be connected to it right now. That means if I delete the Wi-Fi network I have to manually reconnect next time I visit store B… not what I want. The only other thing I can figure out how to do is to turn off the Wi-Fi altogether, which I did.&lt;/p&gt;  &lt;p&gt;The good news is that once I did that, my phone reverted to the 3G connection and I could access the internet again. The bad news is I then forgot to turn the Wi-Fi back on when I left so I used more of my monthly data plan than I intended because it was a day or two later before I realised the Wi-Fi was still off.&lt;/p&gt;  &lt;p&gt;None of this is ideal. At the very least I should be able to manually disconnect from a Wi-Fi network without ‘deleting’ it. At best, and this is what I expected to happen, the OS should revert to the next most desirable (based on cost and speed) network when it finds the currently preferred network isn’t working as expected. &lt;a href=&quot;http://www.microsoft.com&quot; target=&quot;_blank&quot;&gt;Microsoft&lt;/a&gt; have people much smarter than me, and I’m sure at least one of them can invent some sort of heuristic algorithm to decide when to change connections and which connection to pick next.&lt;/p&gt;  &lt;p&gt;As it stands, many ‘consumers’ would be confused by their phone not working in some places (not understanding the whole weak Wi-Fi signal issue), and technical users will be frustrated by the inability to just disconnect this one time.&lt;/p&gt;  &lt;hr /&gt;  &lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cef45eb5-2853-47d9-880b-2b7d04ba0486&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/WP7&quot; rel=&quot;tag&quot;&gt;WP7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Windows+Phone7&quot; rel=&quot;tag&quot;&gt;Windows Phone7&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Network&quot; rel=&quot;tag&quot;&gt;Network&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Connectivity&quot; rel=&quot;tag&quot;&gt;Connectivity&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Cellphone&quot; rel=&quot;tag&quot;&gt;Cellphone&lt;/a&gt;&lt;/div&gt;  &lt;div class=&quot;blogger-post-footer&quot;&gt;The post was from the Yort On .NET Blog (http://www.yortondotnet.blogspot.com).
The opinions here in are probably (but not necessarily) those of Yort, but are 
certainly not those of any person, company, or organisation related or unrelated 
to Yort, unless otherwise stated.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.yortondotnet.com/feeds/4525419598844137326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.yortondotnet.com/2011/03/windows-phone-7-connectivity-issue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/4525419598844137326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30433900/posts/default/4525419598844137326'/><link rel='alternate' type='text/html' href='http://www.yortondotnet.com/2011/03/windows-phone-7-connectivity-issue.html' title='Windows Phone 7 Connectivity Issue'/><author><name>Yort</name><uri>http://www.blogger.com/profile/05345639234245424753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/-_mRahGhz5W0/UTPG21tFVVI/AAAAAAAAAQE/IqOFx_w6DQ0/s220/_MG_2390.jpg'/></author><thr:total>0</thr:total></entry></feed>