﻿<?xml version="1.0" encoding="utf-8"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><ttl>60</ttl><title>Nigel Spencer's Blog</title><link>http://blog.spencen.com</link><lastBuildDate>Mon, 20 May 2013 01:07:46 GMT</lastBuildDate><pubDate>Mon, 20 May 2013 01:07:46 GMT</pubDate><language>en</language><copyright /><itunes:subtitle> </itunes:subtitle><itunes:author /><itunes:summary /><description /><itunes:owner><itunes:name /><itunes:email>support@spencen.com</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:category text="Arts" /><item><title>Portable sound using the Soundwave SW50</title><link>http://blog.spencen.com/2012/07/10/portable-sound-using-the-soundwave-sw50.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;So tonight I got my hands on a new fun gadget - it’s a portble bluetooth speaker – the &lt;a href="http://www.mobilefun.co.uk/search/?searchterm=SW50" target="_blank"&gt;Soundwave SW50&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;The unit itself is very small – about 7cm triangular base and a little less than that in height. Its got a smooth stylish finish, an on-off switch, USB charger input, single button and an LED.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.mobilefun.co.uk/search/?searchterm=SW50" target="_blank"&gt;&lt;img title="33956" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: left; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="33956" align="left" src="http://blog.spencen.com/images/83489-72989/33956_3.jpg" width="240" height="240"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I took the unit out of the box, switched it on and had it paired to my phone and playing music in less than 2 minutes. I love the fact that the unit came already charged and that the pairing was automatic (no 4 digit pin entry). I also connected the unit to my laptop and wife’s iPod. The only slight annoyance was that in order to pair/connect it with a new device I first had to disconnect any existing device. &lt;/p&gt;  &lt;p&gt;Of course the entire point of having a unit like this is because speakers on most mobile devices (including my laptop) are terrible. Usually I resort to headphones – but there are occasions where that simple isn’t feasible. For instance, sharing a video on a laptop/phone with the kids, or if I’m doing some serious coding at home but don’t want the hassle of tangled headphone wires as I move around. I used to have a dedicated set of speakers hooked up in my study, but since I’m now living in a cramped apartment a portable speaker unit, paired with a mobile device is really very practical. In fact my Samsung Focus (WP7.5), Zune subscription and the SW50 make a great combination.&lt;/p&gt;  &lt;p&gt;The sound quality of the SW50 really surprised me – in a good way. When I saw the size of the device I was worried that the quality and volume would both be underwhelming. Thankfully that wasn’t the case, the little unit really does deliver in both these areas. The only criticism I have is that the sound is very… well… unidirectional. Compared to a good pair of headphones or a set of 5.1 surround speakers – but that’s not really a fair comparison since neither of those can be had for around $30 . (It did make me wonder though whether there is a market for a pair of similar devices each playing a single channel).&lt;a href="http://www.mobilefun.co.uk/cat/Jawbone-Speakers.htm" target="_blank"&gt;&lt;img title="27017" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: right; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="27017" align="right" src="http://blog.spencen.com/images/83489-72989/27017_3.jpg" width="216" height="160"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The unit’s single button can be used for answering or ignoring incoming calls on the connected bluetooth device. To be honest this isn’t a feature that I can really see using – but it may appeal to some.&lt;/p&gt;  &lt;p&gt;I guess for those that are more serious about their portable sound experience, forking out some extra cash on something like a &lt;a href="http://www.mobilefun.co.uk/cat/Jawbone-Speakers.htm" target="_blank"&gt;Jawbone Jambox&lt;/a&gt; would be the preferred option. Me though – I’m really happy with the SW50. &lt;/p&gt;  &lt;p&gt;Thanks very much for &lt;a href="http://www.mobilefun.co.uk"&gt;www.mobilefun.co.uk&lt;/a&gt; for&amp;nbsp; sending me this unit to review – you gals rock!&lt;/p&gt;</description><comments>http://blog.spencen.com/2012/07/10/portable-sound-using-the-soundwave-sw50.aspx#Comments</comments><guid isPermaLink="false">85f28e7f-6bad-404d-bb34-9db75ff405a3</guid><pubDate>Wed, 11 Jul 2012 04:07:00 GMT</pubDate></item><item><title>I miss having a local beach of my own</title><link>http://blog.spencen.com/2011/09/12/i-miss-having-a-local-beach-of-my-own.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;When I lived in Australia this used to be one of my local beaches…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/DSC09252%20Stitch%20Wide_4.jpg"&gt;&lt;img style="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" title="DSC09252 Stitch Wide" border="0" alt="DSC09252 Stitch Wide" src="http://blog.spencen.com/images/83489-72989/DSC09252%20Stitch%20Wide_thumb_1.jpg" width="668" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This was another…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/DSC01812.jpg"&gt;&lt;img style="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" title="DSC01812" border="0" alt="DSC01812" src="http://blog.spencen.com/images/83489-72989/DSC01812_thumb.jpg" width="422" height="183" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;and another…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/DSC07844.jpg"&gt;&lt;img style="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" title="DSC07844" border="0" alt="DSC07844" src="http://blog.spencen.com/images/83489-72989/DSC07844_thumb.jpg" width="423" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This one wasn’t local, but it still had the desired population count…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/DSC07596-601%20Stitch_2.jpg"&gt;&lt;img style="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" title="DSC07596-601 Stitch" border="0" alt="DSC07596-601 Stitch" src="http://blog.spencen.com/images/83489-72989/DSC07596-601%20Stitch_thumb.jpg" width="667" height="150" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now my local beach looks like this &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-confusedsmile" alt="Confused smile" src="http://blog.spencen.com/images/83489-72989/wlEmoticon-confusedsmile_2.png" /&gt;…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/i-DmBsGFS-XL_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="i-DmBsGFS-XL" border="0" alt="i-DmBsGFS-XL" src="http://blog.spencen.com/images/83489-72989/i-DmBsGFS-XL_thumb.jpg" width="668" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>General</category><comments>http://blog.spencen.com/2011/09/12/i-miss-having-a-local-beach-of-my-own.aspx#Comments</comments><guid isPermaLink="false">7cd6a8ea-5644-41e8-88e1-1686d80448aa</guid><pubDate>Tue, 13 Sep 2011 01:13:43 GMT</pubDate></item><item><title>WP7 Backgrounds</title><link>http://blog.spencen.com/2011/06/14/wp7-backgrounds.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;I’ve taken to swapping my Windows Phone 7 background to match the season, or to remind me of a recent vacation. Here’s some of the backgrounds that I’ve used to date, each cropped from a photo that I’ve taken over the last 15 months. One of these photos was even taken with the phone itself!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:66721397-FF69-4ca6-AEC4-17E6B3208830:1f380638-1b92-4024-b4a7-8eeb74c827e7" class="wlWriterEditableSmartContent"&gt;&lt;table border=0 cellspacing=0 cellpadding=0 style='outline:none;border-style:none;margin:0px;padding:0px;width:400px;border-collapse:collapse;' &gt;                     &lt;tr&gt;                        &lt;td colspan=2 style='outline:none;border-style:none;margin:0px;padding:5px 0px 5px 5px;width:157px;vertical-align:bottom;' &gt;                            &lt;a href="https://iili0a.bay.livefilestore.com/y1mjHmbBH97vAfezEWUa-azr2trh7-O_Gmh_APO5OJHp7TqPSxcplmsEER81RdGrXOt_E4sTug-05u1Gl069x-0_FeBU2W4kD14LcrjFccEgzzacz99roZZyFRWZHFcH51A8ccZpWFsy0L3AdFlTREawg/Horseshoe%20Falls.jpg?psid=1" target="_blank" border="0" style="outline:none;border-style:none;margin:0px;padding:0px;"&gt;                                &lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" alt="View album" title="View album" width="157" height="157" src="http://blog.spencen.com/images/83489-72989/8458907594CB549C0.png" /&gt;&lt;/a&gt;                        &lt;/td&gt;                        &lt;td colspan=3 style='vertical-align:middle;margin:0px;padding:5px 5px 5px 0px;outline:none;border-style:none;width:223px' &gt;                            &lt;div style="margin-left:10px;top:-3%;" &gt;                                &lt;div style='width:223px;overflow:visible;'&gt;&lt;a style="text-decoration:none;" href="https://cid-685d1a7aacddb89c.skydrive.live.com/redir.aspx?page=browse&amp;amp;resid=685D1A7AACDDB89C!611&amp;amp;type=5&amp;amp;authkey=sfrhdYLGyYs%24&amp;amp;Bsrc=Photomail&amp;amp;Bpub=SDX.Photos" target="_blank"&gt;&lt;span  style="line-height:1.26em;padding:0px;width:223px;font-size:26pt;font-family:'Segoe UI', helvetica, arial, sans-serif;"  defaultText="Enter album name here"&gt;Phone Backgrounds&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;                                &lt;div style="padding:10px 0px 0px 0px;margin:0px;"&gt;                                   &lt;table border=0 cellspacing=0 cellpadding=0 style="margin:0px;padding:0px;outline:none;border-style:none;border-collapse:collapse;width:auto;"&gt;                                        &lt;tr&gt;                                            &lt;td style="vertical-align:top;outline:none;border-style:none;margin:0px;padding:10px 15px 6px 0px;"&gt;&lt;a href="https://cid-685d1a7aacddb89c.skydrive.live.com/redir.aspx?page=play&amp;amp;resid=685D1A7AACDDB89C!611&amp;amp;type=5&amp;amp;authkey=sfrhdYLGyYs%24&amp;amp;Bsrc=Photomail&amp;amp;Bpub=SDX.Photos" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;VIEW SLIDE SHOW&lt;/a&gt;&lt;/td&gt;                                            &lt;td style="vertical-align:top;outline:none;border-style:none;margin:0px;padding:10px 0px 6px 0px;"&gt;&lt;a href="https://cid-685d1a7aacddb89c.skydrive.live.com/redir.aspx?page=downloadphotos&amp;amp;resid=685D1A7AACDDB89C!611&amp;amp;type=5&amp;amp;Bsrc=Photomail&amp;amp;Bpub=SDX.Photos&amp;amp;authkey=sfrhdYLGyYs%24" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;DOWNLOAD ALL&lt;/a&gt;&lt;/td&gt;                                        &lt;/tr&gt;                                                                           &lt;/table&gt;                                                                                                     &lt;/div&gt;                                                            &lt;/div&gt;                        &lt;/td&gt;                     &lt;/tr&gt;                    &lt;tr&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 5px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1m2iTnftFFC9bFhY81h5gdVhwocpcEdq1xpQvubPbWjSftQMsnkxIi4t_0ozFa0W73Fa6Lwcddm_uSj9t6bDh--ZxhyVUVz74NvA_YrrwLjr2R0zDa3UtXzVmUCHMEdD0y3nvR0wq4nhvt96q_3p6tkQ/Lantern%20in%20Park.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/-137348458728FC2226.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1m6OELzmHKz40kDThPVSM8oPdYV8GVoTxCM2QYJzJ7R9SDwqA7odueyg-vjxR4fMw14JwdC9gWhUt9wM42edhyHmYMdblNhYmKVwVlpTNREhYKrHGAm5diS_ntH92cOm06TSRuJViQtdbv9w3bzyF2aA/Washington%20Statue.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/-106194590441F7F26B.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1mb1lruz35eQrsNxMyvmBm41RGC9JXeAkumIjXsNusMryt8fyqPHlcQ-0Krvy_4MwlySUbzeaRqcKtj24Fk1z7wIQ-x5Bb_YHWQzQ1xIGKHS--WM02ew0mEnQSuk13TQwufjJ3wLmol1gGAs87wsqABA/Manhattan%20Bridge.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/20262242972D066FF8.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1mMgDUYTlh2OtyGSuaxV1_VARLVM-_1eejkuuWs9l5D9P0oEmXmrmHWCoHAjr8NHsqH5fwU9w3y3K0h9f1gBmYfdl05yaOSs1ebfpPeDLwxFKiSHM3_pWqbeYmheRMq_POi-uFg86WFNswleDKK3m6Zg/Capitol.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/142024206708E11569.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1mtHTw4wzuC1zFsYnN2t7qhsAgz-V4-U71MYRyJWdK4RPG33A9CXcfLbCpcSbjG6nxQHZmM973B2hiWCumVR7pzaeX5X0R0pBpF38xqOkqTIpI5OXJfRLKaJAQZe59QVVl1H5Lzp0BzIp1tktDRUPDHw/City%20Hall.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/-205796270973EF92F5.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 5px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1mGstoUzR9w8ekmjjJt1idB1mPzIsZ50QRD4YDG-muiGWqaO_4jPzApLXCWmBnm5y5ifDS0eq2H2noHZkGr4cbPIk5OQT6u966jYSo6sH54Euq_20q1dw_V8g5aW72XMI0WgYPM9dzZ2MRXk7MD48uqw/Lantern%20in%20Snow.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/-18153614310CEB633B.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1mXUmuFr8wnA-yZcssx9-mrXbX93pjD0YUyGna4K4C1MOiVM6YI6sAUED5mj9KcyUecXXxLXeak9tD5FMwLtX7M4C540T1Aboh3wRD3G4Vr9IhTTq9pPHftfwrUNFpRfM2IUnnQs9sQrjQ9wtZ_fMOfw/Rockerfeller.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/20450340893AD8B5F3.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1mpsvXzR8RYfRKer7ZPSZguO3RyOjoYmVb9dowL9pxxDQhjzpWEqlCLnNck1oHWyRp8jXg7XJljrJJC1TRpkB04_6GdaOg45R9mTyiFPoUD4t8uVOLoX37I8SKNqQ2sR58zQWsq3fBsb0poykqBJW5JQ/Snow%20on%20Bench.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/127146880153D48638.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1ml8nToQE286aOX7UqqfDYbChKbgBTjfKHdumZJDtGYvgbK7b7Ng5XZ_AtYvv9sLvX_Jf7t0t7mY-o_UlqfPw44RQC2pGN4NBrjP8c3_S6y1E03vl789UFc9VcbP9edAehwT4X-IgmA_rjCwoy57tBXA/Grass%20and%20Falls.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/11820133286CD0567D.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1mycDV4aiWt58rxzzJaAyaiszywLCamrnIZXgasP4bj-e7qpSrnyaHJ4q5qyTS40DC-C2xYPNxtPQVgNQctxoJ5Ctw18kDtvY03E3WXRpeEjdy5bgVKmTmT13jOfM5o9Ywd93BZMZati65taHEaptAGw/Bird.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/12998226641ABDA936.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 5px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1mXUmuFr8wnA_xLQgp74_MknndgWlKu5tBXexhxgHpIs06uSPrBMGr0im2wt851FSlnKeA4mDY4WLkQQ3fisK9oBUtWmG8Q_wlPKw_wW1nPB80IxO75j520tZlj6mxmR_IfpgT2x5SFILysFVYjgCO8A/Statue%20of%20Liberty.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/-208280726233B9797B.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&lt;a href="https://iili0a.bay.livefilestore.com/y1mO6vGpFSriRjY-M35cBfh3LI7Qo3Yq73VUDRMK1gpJMvuGbwLQEAMtfenkpyDD4qwRJaNBhUaA_tdJWlPQ3z68LlrqqjYynZ9H27XspQQb6oAXDFq8QP9vVlxWVci8-hjcGpo_RDOkQBxU6aVD4Vshg/Niagara%20Falls.jpg?psid=1" border="0" target="_blank" style="font-family:'Segoe UI', helvetica, arial, sans-serif;font-size:8pt;outline:none;border-style:none;text-decoration: none;padding:0px;margin:0px;"&gt;&lt;img style="outline:none;border-style:none;padding:0px;margin:0px;border:0px;background:none;background-image:none;vertical-align:bottom;" border="0" width="76" alt="View album" title="View album" height="76" src="http://blog.spencen.com/images/83489-72989/-3627116661A6CC33.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&amp;nbsp;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&amp;nbsp;&lt;/td&gt;&lt;td style='vertical-align:bottom;outline:none;border-style:none;padding:0px 5px 5px 0px;margin:0px;width:76px;height:76px;' &gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description><category>Windows Phone</category><category>General</category><comments>http://blog.spencen.com/2011/06/14/wp7-backgrounds.aspx#Comments</comments><guid isPermaLink="false">621de1ce-c2b5-49c8-bb67-96a5da068704</guid><pubDate>Wed, 15 Jun 2011 03:35:20 GMT</pubDate></item><item><title>Windows Phone &amp;lsquo;Reserved Space&amp;rsquo;</title><link>http://blog.spencen.com/2011/04/05/windows-phone-lsquoreserved-spacersquo.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;My Windows Phone is showing that almost half its paltry capacity of 8 GB is consumed by “reserved space and content from other computers”.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Windows Phone - Reserved Space" border="0" alt="Windows Phone - Reserved Space" src="http://blog.spencen.com/images/83489-72989/Windows%20Phone%20-%20Reserved%20Space_3.png" width="601" height="64" /&gt;&lt;/p&gt;  &lt;p&gt;I’ve gone into the Zune desktop software –&amp;gt; Settings/Phone/Reserved Space and set the amount reserved to zero.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Windows Phone - Reserved Space of 0" border="0" alt="Windows Phone - Reserved Space of 0" src="http://blog.spencen.com/images/83489-72989/Windows%20Phone%20-%20Reserved%20Space%20of%200_3.png" width="402" height="184" /&gt;&lt;/p&gt;  &lt;p&gt;So if the 3.36 GB isn’t “reserved” then it must be “content from other computers”. Hmm…. well I’ve never paired the phone with any other computer other than my &lt;a href="http://blog.spencen.com/2010/04/06/new-laptop-ndash-sony-z-series.aspx"&gt;awesome laptop&lt;/a&gt;, so what’s going on? &lt;a href="http://zuneinsider.com/archive/2009/01/31/demystifying-quot-reserved-space-and-content-from-other-computers-if-any-quot.aspx"&gt;This article&lt;/a&gt; strives to explain what could be going on. You might have to read that twice – I know I did.&lt;/p&gt;  &lt;p&gt;I tried the “Erase all content” button. The phone and Zune desktop software both showed zero music, video, pictures and podcasts. This had the following effect:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Windows Phone - Reserved Space with no Media" border="0" alt="Windows Phone - Reserved Space with no Media" src="http://blog.spencen.com/images/83489-72989/Windows%20Phone%20-%20Reserved%20Space%20with%20no%20Media_3.png" width="589" height="51" /&gt;&lt;/p&gt;  &lt;p&gt;I also found a few other links that asked the obvious question – how do I free up this capacity? Plenty of people questioning – but I didn’t find an answer that worked for me.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://answers.microsoft.com/en-us/winphone/forum/wp7-sync/how-to-shrink-reserved-space-or-content-from-other/5d81707a-ee5a-e011-8dfc-68b599b31bf5" href="http://answers.microsoft.com/en-us/winphone/forum/wp7-sync/how-to-shrink-reserved-space-or-content-from-other/5d81707a-ee5a-e011-8dfc-68b599b31bf5"&gt;http://answers.microsoft.com/en-us/winphone/forum/wp7-sync/how-to-shrink-reserved-space-or-content-from-other/5d81707a-ee5a-e011-8dfc-68b599b31bf5&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://answers.microsoft.com/en-us/zune/forum/music-pc/reserved-space-and-content-from-other-computers/11ba50dc-d8b8-40f7-b0c3-2bd3a4af836c" href="http://answers.microsoft.com/en-us/zune/forum/music-pc/reserved-space-and-content-from-other-computers/11ba50dc-d8b8-40f7-b0c3-2bd3a4af836c"&gt;http://answers.microsoft.com/en-us/zune/forum/music-pc/reserved-space-and-content-from-other-computers/11ba50dc-d8b8-40f7-b0c3-2bd3a4af836c&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://support.microsoft.com/kb/953593" href="http://support.microsoft.com/kb/953593"&gt;http://support.microsoft.com/kb/953593&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://forum.xda-developers.com/archive/index.php/t-904321.html" href="http://forum.xda-developers.com/archive/index.php/t-904321.html"&gt;http://forum.xda-developers.com/archive/index.php/t-904321.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The last link offers some hope. It suggests that the number may actually be &lt;strong&gt;nothing whatsoever&lt;/strong&gt; to do with “content from other computers” or “reserved space”. Its actually space used by the installed applications and games. Of course this now seems perfectly obvious. Not only is there the cost of installing the applications – but also the data that each keeps locally – for instance the mail boxes, map cache, saved games etc. What’s strange though is how much this allocated capacity seems to fluctuate. I tried uninstalling some apps, deleting the mapping history and removing one of my outlook mail boxes. That reduced the number a fraction – down to 2.6 GB.&lt;/p&gt;  &lt;p&gt;It would be great to be able to get more insight into what has that space allocated. Aside from resetting the phone (removing all apps) I’m not too sure where to go from here. Suggestions anyone? [Oh – and I’ve already tried installing a 32 GB memory card – that didn’t end well either].&lt;/p&gt;</description><category>Windows Phone</category><category>General</category><comments>http://blog.spencen.com/2011/04/05/windows-phone-lsquoreserved-spacersquo.aspx#Comments</comments><guid isPermaLink="false">83bef1fc-dead-455b-aff8-029e10524a99</guid><pubDate>Wed, 06 Apr 2011 02:02:51 GMT</pubDate></item><item><title>Smugmug API</title><link>http://blog.spencen.com/2011/03/20/smugmug-api.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;&lt;a href="http://www.smugmug.com/"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Smugmug Logo Small" border="0" alt="Smugmug Logo Small" align="right" src="http://blog.spencen.com/images/83489-72989/Smugmug%20Logo%20Small_1.png" width="127" height="37"&gt;&lt;/a&gt;My photo sharing site of choice is &lt;a href="http://www.smugmug.com"&gt;Smugmug&lt;/a&gt;. I can upload and view images at their original size, they offer effectively unlimited storage, support video streaming, protected sharing facilities and the website doesn’t suck. It comes with a price tag but I’m fine with that.&lt;/p&gt; &lt;p&gt;Over the last six months I’ve been playing with the Smugmug API. To date its been a somewhat painful experience. Roughly three months ago they introduced an additional security measure that meant most of the API calls required an additional parameter – which wasn’t documented on the &lt;a href="http://wiki.smugmug.net/display/API/API+1.2.2"&gt;API wiki&lt;/a&gt; (the _su cookie).&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/RestSharp%20Logo.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="RestSharp Logo" border="0" alt="RestSharp Logo" align="left" src="http://blog.spencen.com/images/83489-72989/RestSharp%20Logo_thumb.png" width="240" height="75"&gt;&lt;/a&gt;There are a number of helper wrappers already written for the API (though some are out of date) – but I figured it would be a good learning experience to put together something small for my own requirements. I decided on using the REST flavour of the API and initially implemented it with WebClient. However, after following up on a tip I got from attending the &lt;a href="http://nypug.groups.live.com/"&gt;New York Windows Phone User Group&lt;/a&gt; I switched to &lt;a href="http://restsharp.org/"&gt;RestSharp&lt;/a&gt; (using VS NuGet package installer) which made the code much more concise.&lt;/p&gt; &lt;p&gt;My most recent attempt was to add a feature to the application I’m writing that would allow me to view statistics for my Smugmug galleries. The website offers access to these statistics but in a pretty limited fashion. Having found an API (&lt;a href="http://wiki.smugmug.net/display/API/show+1.2.2?method=smugmug.albums.getStats"&gt;method.albums.getStats&lt;/a&gt;) I figured I could create a stats summary that was exactly was I was after. After several frustrating hours of tweaking the API call and getting nothing but zero hit counters back I resorted to Google. Sure enough – it seems that the API method &lt;a href="http://www.dgrin.com/showthread.php?t=169830"&gt;doesn’t work&lt;/a&gt;, and in fact has been broken for months. Would be nice to have that kind of information on the API Wiki page, no?&lt;/p&gt;</description><category>Development</category><category>.NET</category><comments>http://blog.spencen.com/2011/03/20/smugmug-api.aspx#Comments</comments><guid isPermaLink="false">cc804c5b-26ac-4f93-bc7d-fd3646f0fef6</guid><pubDate>Mon, 21 Mar 2011 01:19:55 GMT</pubDate></item><item><title>Silverlight Firestarter 2010</title><link>http://blog.spencen.com/2010/12/06/silverlight-firestarter-2010.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/Silverlight%20Firestarter%202010%20Banner_2.png"&gt;&lt;img style="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" title="Silverlight Firestarter 2010 Banner" border="0" alt="Silverlight Firestarter 2010 Banner" src="http://blog.spencen.com/images/83489-72989/Silverlight%20Firestarter%202010%20Banner_thumb.png" width="640" height="83" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Spawned from a &lt;a href="http://team.silverlight.net/announcement/pdc-and-silverlight/"&gt;communication at the recent PDC&lt;/a&gt; that was then somehow twisted and blown well out of proportion by the blogosphere, Microsoft recently held a Silverlight Firestarter event on campus in Redmond (and streamed live). The “main event” was the keynote which was primarily dedicated to talking about the future of Silverlight, and specifically show casing Silverlight 5.&lt;/p&gt;  &lt;h3&gt;What was announced&lt;/h3&gt;  &lt;p&gt;The current feature set of Silverlight 5 is impressive – see &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/12/02/announcing-silverlight-5.aspx"&gt;Scott Gu’s blog post&lt;/a&gt; for a comprehensive overview, the &lt;a href="http://www.microsoft.com/silverlight/future/"&gt;official futures page&lt;/a&gt;, or better yet go watch the keynote &lt;a href="http://www.silverlight.net/news/events/firestarter/"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Here’s what I’m looking forward to the most:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Implicit DataTemplates. How do Silverlight developers survive without this!? &lt;/li&gt;    &lt;li&gt;AncestorType support for RelativeSource binding. &lt;/li&gt;    &lt;li&gt;Data binding debugging. This looks awesome and could be a real time saver. Simply place a breakpoint on the binding declared in the XAML. When the debugger stops it gives you full access to the Target and binding results or error. This surely has to make it into WPF in an upcoming Visual Studio service pack, or at the very least vNext. &lt;/li&gt;    &lt;li&gt;For shear, jaw dropping visual effect the 3D medical modelling and globe demos were spectacular. Though it was a very quick portion of the demo the 3D globe – with separate land and cloud layers looked great. I hope this is the future for Bing maps now that they’ve scrapped the 3D plug-in version. &lt;/li&gt;    &lt;li&gt;BI with &lt;a href="http://team.silverlight.net/announcement/project-crescent/"&gt;Project Crescent&lt;/a&gt;. So this offering was shown at the recent PASS 2010 Summit and its seriously cool. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Timing&lt;/h3&gt;  &lt;p&gt;The problem of course is that the release date for Silverlight 5 isn’t until late 2011 – effectively a year away. Its understandable that Microsoft hadn’t originally planned on showing off Silverlight 5 until they were closer to the release – probably at the time the first beta (scheduled for Spring 2011). It seems they felt that their hand was forced by the recent “Silverlight is dead” debacle. What I saw demoed was certainly impressive but it really makes me crave those features now – and makes Silverlight 4 seem more incomplete as a result. It isn’t helped that Silverlight for Windows Phone is currently not even at Silverlight 4 level. So for now I get to develop on Silverlight 3.5 and 4.0 whilst eagerly awaiting the promise that is Silverlight 5. &lt;/p&gt;  &lt;p&gt;Of course any serious development I do is in WPF – ‘cause lets face it – browser dependent apps are just toys right?&lt;/p&gt;  &lt;h3&gt;Intro Sessions for Silverlight&lt;/h3&gt;  &lt;p&gt;The rest of the Firestarter event was devoted to standard presentation sessions. It started with a Silverlight Binding 101 session given by Jesse Liberty. This should have been dull, but Jesse was very entertaining. If you’re very new to the Silverlight scene I strongly recommend his session as an introduction. John Papa also did a very good introduction to MVVM session.&lt;/p&gt;  &lt;p&gt;Each session gradually increased in terms of depth of coverage. The last session by Jamie Rodriguez was a fast and furious dive into potential performance issues when developing for Windows Phone 7. It covered many pragmatic tips and tricks on monitoring and resolving these issues. Despite having seen much of this content previously presented by Jamie on Channel 9 I still found it to be a great session.&lt;/p&gt;  &lt;h3&gt;The Venue&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/Microsoft%20Campus%20Sign_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Microsoft Campus Sign" border="0" alt="Microsoft Campus Sign" align="right" src="http://blog.spencen.com/images/83489-72989/Microsoft%20Campus%20Sign_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt;This was my first trip to Seattle and unfortunately I was on a very tight schedule. I arrived very early Thursday morning and left the same night (with 6 hours of flight time either side). I caught the local bus from my hotel in Bellevue to the campus and the area looked very suburban, yet very beautiful too (certainly compared to the concrete jungle that is Manhattan). I also had a detour through downtown Seattle on the way back to the airport in a taxi I was sharing. I was impressed with the city, though I’m told the real test as to whether you could live in Seattle is being able to live through your first winter there.&lt;/p&gt;  &lt;p&gt;The event was held in Building 33 at the Conference Center. The room used to host the keynote and the developer sessions was a lecture theatre layout. This was awesome ‘cause it meant everyone could have their laptops set up the entire day, plugged in to power, recharging phones etc. I think about one third of the attendees at the keynote were Microsoft employees from teams other than the Silverlight team.&lt;/p&gt;  &lt;h3&gt;Is Silverlight Resuscitated?&lt;/h3&gt;  &lt;p&gt;So will this Firestarter event satisfy the seemingly fickle Silverlight development community? Will they be prepared to wait more that 12 months between versions (shock, gasp)! I heard someone in the audience complain that there wasn’t enough Windows Phone content – which was kind of amusing. Too much focus on Windows Phone would have probably been exactly the wrong message to send to the community.&lt;/p&gt;  &lt;p&gt;So where does this leave WPF? No mention in the PDC keynote, no separate Firestarter event – is WPF dead!? Bring on WPF Firestarter 2011 &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smilewithtongueout" alt="Smile with tongue out" src="http://blog.spencen.com/images/83489-72989/wlEmoticon-smilewithtongueout_2.png" /&gt;&lt;/p&gt;</description><category>Development</category><category>.NET</category><category>Lab49</category><comments>http://blog.spencen.com/2010/12/06/silverlight-firestarter-2010.aspx#Comments</comments><guid isPermaLink="false">ac7b0d59-929d-412d-b868-c1aadba7f883</guid><pubDate>Mon, 06 Dec 2010 05:05:04 GMT</pubDate></item><item><title>Windows Phone 7 Launch</title><link>http://blog.spencen.com/2010/11/09/windows-phone-7-launch.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;Today I finally purchase a Windows Phone 7 device. I choose the Samsung Focus on an AT&amp;amp;T plan. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Purchase&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First – I took the day off work. That may sound a little extreme – and certainly wasn’t my original intention. The day off work was actually due to a culmination of &lt;em&gt;things&lt;/em&gt;*.&lt;/p&gt;  &lt;p&gt;I got to the store just a fraction after early opening time at 8am. I saw a line of people queued up at the counter and walked inside ready to join the end of the queue. Instead I was pounced on by about three sales staff. [The line of people turned out to be there to grab the free Katy Perry tickets as part of the launch event promotions.]&lt;/p&gt;  &lt;p&gt;I was in the store for about 20 minutes and during that time I was the only customer purchasing a Windows Phone (or any phone for that matter). It wasn’t a small store in some out of the way town either – this was a fairly large store on Madison Ave, midtown Manhattan. There were no free Xbox 360s either, just some Katy Perry tickets which apparently anyone could grab – no purchase required. AT&amp;amp;T were selling the phone on its ludicrously priced plan – around $80 per month for 450 minutes and 2Gb data.&lt;/p&gt;  &lt;p&gt;I asked the salesman to install a 32Gb micro SD card to boost the memory from 8Gb to 40Gb. He was helpful enough to insert the card for me, but not knowledgeable enough to know that this requires a phone reset.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Hardware&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Samsung Focus is quite a nice piece of hardware. It’s very light and thin – which I like, and the 4 inch screen means that its quite a big device – in my opinion its too big. The finish is better than I was expecting given that its a predominantly plastic body. It isn’t as sexy (or effeminate) as an iPhone 4 – but its better looking that a lot of the other smartphone devices out there.&lt;/p&gt;  &lt;p&gt;The super AMOLED screen lives up to the hype – it is very beautiful – especially the blacks which blend perfectly into the black frame.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/Windows%20Phone%20Samsung%20Focus%20registered%20in%20Zune.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Windows Phone Samsung Focus registered in Zune" border="0" alt="Windows Phone Samsung Focus registered in Zune" align="right" src="http://blog.spencen.com/images/83489-72989/Windows%20Phone%20Samsung%20Focus%20registered%20in%20Zune_thumb.png" width="253" height="310" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s working&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Exchange, Windows Live and POP accounts syncing and merging. The Calendar merging is great. I’m very fortunate in that I’m not really a calendar power user so I only have one calendar in exchange and one in Live that I really use a lot – the merging works well. Email setup was very easy – as easy as the Blackberry in fact. I’m still coming to terms with not having a unified Inbox – I’ll have to wait and see how that works out.&lt;/p&gt;  &lt;p&gt;Games – not really my highest priority but the AT&amp;amp;T bundled Ilomilo was a real hit with the kids. I downloaded the Harvest demo and the graphics are certainly quite impressive.&lt;/p&gt;  &lt;p&gt;Picked up some basic free apps (mostly from Microsoft) and even purchased a NYC subway application ($0.99) that looks promising (but haven’t really tried it out yet).&lt;/p&gt;  &lt;p&gt;Bing map application works great on Wi-Fi but was too slow on 3G. That’s no different to the experience I’ve had with Google maps though on other phones – and says more about the network than the platform/app.&lt;/p&gt;  &lt;p&gt;Once I got everything synced with my PC the Zune software worked nicely. I’ve been looking forward to streaming media on the go – in addition to just having my podcasts etc. synced wirelessly.&lt;/p&gt;  &lt;p&gt;Marketplace client is much improved on the Windows Mobile 6.5 version. Browsing is now actually quite a pleasant experience. The only thing that I’d like to see is some way to launch an application from the store. It’s annoying that you can download and install a small app almost immediately – but in order to run it you have to exit out of the Marketplace back to the start screen and find the newly installed application in a long list. [Maybe I’ve missed something here?]&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What’s not working&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;How do I view or upload to Smugmug? I’ve got 10Gb+ worth of photos sitting in Smugmug galleries. I linked my Live ID to Smugmug a few months back but haven’t been able to figure out how this achieves anything. I was hoping that it just meant the Live web-site and Messenger were just behind the times, but it doesn’t seem that Windows Phone makes any use of this association either. I’d love to know how this is supposed to work – I’m being optimistic and just hoping that I’ve missed some simple setting somewhere. I need access to my photos - please!&lt;/p&gt;  &lt;p&gt;There were heaps of little things that didn’t work. Facebook integration gave me an “Oops” message with a “try again later”. At least three of the hyperlinks took me to a “Sorry can’t find that page” – these were Microsoft and AT&amp;amp;T links. Some things didn’t work how I expected because I spent the first hour or so playing with the phone in a coffee shop prior to connecting it to my computer. So when I signed into Zune using my Live ID (with Zune subscription) I couldn’t play any non-purchased music. I understand that the device has to be linked to my account but why can’t that be done from the phone itself?&lt;/p&gt;  &lt;p&gt;The on-screen keyboard is horrible. Don’t get me wrong – I’ve never really used a finger based on-screen keyboard before, so I’m not suggesting its any worse than the competition. I’m forever hitting the wrong letter and the auto-correct only seems to be available in some scenarios – certainly not for users names and passwords which I did a lot of in the initial setup. I also couldn’t figure out how to position the cursor within a word – it would always either highlight the entire word or move just before or after. Makes me wish for a stylus – I could be much quicker and more accurate (and I find its also a lot more comfortable). Anyway – guess I got to move with the times {sigh}…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Development&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;At first I just connected my phone, fired up Visual Studio changed the deployment target to &lt;em&gt;Windows Phone 7 Device &lt;/em&gt;and pressed F5. This generated a deployment error – something about developer unlock required. The embedded URL (which I had to manually retype into the browser) wasn’t much help…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/Windows%20Phone%20App%20Hub%20Page%20Not%20Found.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Windows Phone App Hub Page Not Found" border="0" alt="Windows Phone App Hub Page Not Found" src="http://blog.spencen.com/images/83489-72989/Windows%20Phone%20App%20Hub%20Page%20Not%20Found_thumb.png" width="683" height="111" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Doing a Bing search on the app hub didn’t get me anywhere either. I quickly resorted to googling for the answer and came across this blog post…&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.istartedsomething.com/20100611/windows-phone-7-developer-phone-unlock-detailed/" href="http://www.istartedsomething.com/20100611/windows-phone-7-developer-phone-unlock-detailed/"&gt;http://www.istartedsomething.com/20100611/windows-phone-7-developer-phone-unlock-detailed/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/Windows%20Phone%20Developer%20Device%20Registration.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Windows Phone Developer Device Registration" border="0" alt="Windows Phone Developer Device Registration" src="http://blog.spencen.com/images/83489-72989/Windows%20Phone%20Developer%20Device%20Registration_thumb.png" width="496" height="421" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once that was done, I hit F5 again and hey presto &lt;em&gt;Word Puzzle&lt;/em&gt; is deployed to my phone. Nice!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;First Impressions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Based on what I saw of the “launch” I’m not sure how well the devices are selling, nor how effective the marketing has been. I keep reading posts about low supply due to high demand which I find hard to fathom. My main priority was to get a device that I could easily write applications for, that had a decent media player and could keep me connected via e-mail and popular social networks. From that perspective I think the phone’s going to suffice. It also means I can get rid of my company Blackberry which is a semi-functional (it does e-mail OK but that’s about it) and truly un-inspiring device. &lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;* Those &lt;em&gt;things&lt;/em&gt; that led to me taking a day off included:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Finding out my company adheres to a barbaric but seemingly fairly common policy of not allowing staff to rollover annual leave from one year to the next (As the Windows Phone 7 adverts would say – &lt;em&gt;Really?&lt;/em&gt;).&lt;/li&gt;    &lt;li&gt;Having worked so many hours in the last few months that my hourly wage is roughly on par with what I used to earn delivering pizzas when I was 18 (OK – slight exaggeration). The main cause of working all these hours of course is that the work has just been so awesome. Having just pumped out a kick-ass version 1 release the product owner decided we should each get a day off this iteration to ‘recharge’.&lt;/li&gt;    &lt;li&gt;A bunch of odd-jobs that I’ve been putting aside finally needed some attention. Tedious stuff like buying new work clothes, getting a hair cut, landlord duties.&lt;/li&gt; &lt;/ul&gt;</description><category>Windows Phone</category><category>General</category><comments>http://blog.spencen.com/2010/11/09/windows-phone-7-launch.aspx#Comments</comments><guid isPermaLink="false">09e75b7d-342a-48c2-aaba-c1936b8a0149</guid><pubDate>Tue, 09 Nov 2010 06:24:08 GMT</pubDate></item><item><title>Windows Phone 7 Trivia</title><link>http://blog.spencen.com/2010/10/22/windows-phone-7-trivia.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;OK – so yesterday I had a bit of a rant. Today I figure I’ll make up for it by sharing a few quick pieces of Windows Phone 7 trivia that I’ve learned over the last couple of days.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Limited number of developer apps deployed to a device&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As a developer you can only have up to 10 of your own apps (deployed via Visual Studio) on your device. Of course you can uninstall some to make room to install others – but no more than 10 at a time. Probably not an issue for most people but a little quirky nonetheless.[I haven’t been able to confirm this myself].&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;No video out capabilities&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The OS comes with a pretty neat version of PowerPoint. It lets you playback your PowerPoint slide deck and whilst you can’t create decks from scratch there is limited edit capability for last minute changes. So how cool is this – you sync your slide deck with your phone (say via SkyDrive) walk into your next meeting. Rather than having to lug a laptop around with you its simply a matter of taking out your phone and plugging it into the projector. Or at least it would be… if any of the hardware devices supported video out in this fashion. This really makes me wonder how useful having PowerPoint on the phone is without this feature? [Sure there is PowerPoint streaming etc. but what’s wrong with just plugging the phone into a projector/TV – e.g. via mini HDMI].&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Buying a phone&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Telstra HTC Mozart" border="0" alt="Telstra HTC Mozart" align="left" src="http://blog.spencen.com/images/83489-72989/Telstra%20HTC%20Mozart_1.png" width="131" height="282" /&gt;Of all the retail package/plans I’ve seen to this point Australia’s Telstra seems to have the sweetest deal. They are doing the HTC Mozart for $0 up front on a $49 per month plan that includes generous call/sms caps plus 500Mb of data. So all up that’s AU$1176 for two years of Windows Phone goodness. (The Aussie dollar is currently a fraction under the US dollar). Telstra have plenty of flaws (there billing website is the worst of any I’ve had to use) but there network is 4G in all major Australian cities and is by far the best network in that country.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.telstra.com.au/mobile/phones/windows7/index.html?ti=TR:TR:Oct10:htcmozart:TCOMindex:325x200" href="http://www.telstra.com.au/mobile/phones/windows7/index.html?ti=TR:TR:Oct10:htcmozart:TCOMindex:325x200"&gt;http://www.telstra.com.au/mobile/phones/windows7/index.html?ti=TR:TR:Oct10:htcmozart:TCOMindex:325x200&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There is currently no official word on US pricing other than both AT&amp;amp;T and T-Mobile want to slug you $199 up front. Given the current US phone plan prices and the ridiculous cost of the iPhone I don’t expect to be getting anywhere near such a good deal as with Telstra.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://htc.t-mobile.com/hd7/" href="http://htc.t-mobile.com/hd7/"&gt;http://htc.t-mobile.com/hd7/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.att.com/shop/wireless/devices/windowsphone.jsp#fbid=8IXHCXcT8z7" href="http://www.att.com/shop/wireless/devices/windowsphone.jsp#fbid=8IXHCXcT8z7"&gt;http://www.att.com/shop/wireless/devices/windowsphone.jsp#fbid=8IXHCXcT8z7&lt;/a&gt;&lt;/p&gt;</description><category>Windows Phone</category><category>General</category><comments>http://blog.spencen.com/2010/10/22/windows-phone-7-trivia.aspx#Comments</comments><guid isPermaLink="false">bdd15a17-a20c-4b12-a302-4cdabf311fc4</guid><pubDate>Sat, 23 Oct 2010 03:24:48 GMT</pubDate></item><item><title>Charles Petzold at the NYC .NET Developers Group</title><link>http://blog.spencen.com/2010/10/21/charles-petzold-at-the-nyc-net-developers-group.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;Tonight I went along to the New York City .NET User Group to watch Charles Petzold presenting on Windows Phone 7. It was fun to see Petzold in person and though its obvious he’s more an author than a public speaker he still did a great job. He was very well prepared for the talk and did his best to accommodate the somewhat rowdy crowd. The talk was an introduction to the Windows Phone 7 development experience with a focus on the application lifecycle – specifically tombstoning. This seemed to be at the right level for the crowed as far as I could tell – it seemed the majority of people there knew very little about the new platform.&lt;/p&gt;  &lt;p&gt;I’d never been to a NYC .NET Developers Group meeting before. There was a pretty good turnout, well over a hundred people. For me though the event was certainly tarnished by the general lack of organization and some inane questions/observations from the audience.&lt;/p&gt;  &lt;p&gt;Firstly the pizzas. Charles did a very polished job of starting his talk with a reflection on how mobile devices have become ubiquitous. He then manoeuvred this into an introduction of Windows Phone 7. He had his talk prepared on a set of notes which he would keep glancing at, but I began not to notice that as I was drawn into the talk. At about 10 minutes in just as he has found his stride and captured the audience the pizzas arrived. Some people didn’t even wait for Charles to stop speaking, they just got up and went to the back of the room to help themselves. Eventually one of the organizers walked up the front and cut Charles off mid-sentence – suggesting now would be a good time for a break. I think his response was something like “ah… err… yeah ok”.&lt;/p&gt;  &lt;p&gt;Then there were the questions from the audience. A few people asked questions during the talk. In my mind it wasn’t really appropriate given the size of the audience and the style of presentation – more of a keynote. However, Charles hadn’t asked people to leave questions to the end and I understand that people are probably used to asking questions during a user group presentation. What was really annoying though were some of the questions themselves. Interrupting someone to ask them whether xyz is supported when it should have been clear he was just about to get to that. At the end of the session one guy from the audience went on a completely misinformed rave about the price of phones (including the prices in Pakistan!) , another was asking what video formats were supported, etc. These questions couldn’t be answered by Charles and the organizers (or Microsoft) hadn’t thought to have someone up front with him to answer them. Charles managed to stay very well composed throughout.&lt;/p&gt;  &lt;p&gt;One more amusing crowd moment was during the impromptu pizza break. Charles was patiently waiting for us all so a few attendees quite understandably took the opportunity to get a book signed, introduce themselves or ask some questions about the phone or his upcoming book. Charles was actually using his Windows Phone 7 device to run the PowerPoint presentation for his talk. He had the device setup at the front on a stand with a video camera so it could be projected onto the screens. So he’s standing there talking to a few people with the phone next to him on the stand at the current PowerPoint slide. One guy walks up and asks if he can play with the phone. “What now? Err.. . no.”. I’m sure the guy was just eager to get his hands on a real device but imagine someone asking you if they can play with your laptop half way through giving a well scripted talk/demo to a packed room of people? Seriously? Oh well… I got a chuckle out of it.&lt;/p&gt;</description><category>Development</category><category>.NET</category><category>Windows Phone</category><comments>http://blog.spencen.com/2010/10/21/charles-petzold-at-the-nyc-net-developers-group.aspx#Comments</comments><guid isPermaLink="false">fe15492b-3ec2-41e9-b933-3a50c1cebce0</guid><pubDate>Fri, 22 Oct 2010 02:52:56 GMT</pubDate></item><item><title>Free Windows Phone!</title><link>http://blog.spencen.com/2010/10/01/free-windows-phone.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;There has to be some benefits to living in the US right? Some incentive. I mean the economy is crumbling, &lt;a href="http://www.youtube.com/watch?v=TzV9K90-fx4"&gt;tornados&lt;/a&gt; and &lt;a href="http://online.wsj.com/article/SB10001424052748704029304575526293977082862.html"&gt;tropical storms&lt;/a&gt; seem to be a weekly occurrence – where is the “up” side?&lt;/p&gt;  &lt;p&gt;Well, of course it means you’re eligible for all those competitions that apply to US residents only. Like a &lt;a href="http://www.hanselman.com/blog/WINAFREEPhoneWithLikeNOEffortAndAttendTheWindowsPhone7DeveloperLaunch.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+ScottHanselman+%28Scott+Hanselman+-+ComputerZen.com%29"&gt;Windows Phone 7 giveaway&lt;/a&gt; courtesy of Scott Hanselman.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.msdnevents.com/wp7devlaunch/"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="wp7_signature_banner_lg" border="0" alt="wp7_signature_banner_lg" src="http://blog.spencen.com/images/83489-72989/wp7_signature_banner_lg_3.jpg" width="352" height="42" /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Windows Phone</category><category>General</category><comments>http://blog.spencen.com/2010/10/01/free-windows-phone.aspx#Comments</comments><guid isPermaLink="false">38a16064-87bc-4922-9d14-df75003de215</guid><pubDate>Sat, 02 Oct 2010 02:03:23 GMT</pubDate></item><item><title>Word Puzzle to Sliverlight Phone&amp;ndash;Part 3</title><link>http://blog.spencen.com/2010/09/04/word-puzzle-to-sliverlight-phonendashpart-3.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;Last night I dusted off &lt;a href="http://blog.spencen.com/2010/04/26/word-puzzle-to-silverlight-phone-ndash-part-2.aspx"&gt;Word Puzzle&lt;/a&gt; and decided to try out tombstoning in Window Phone 7 – just to see how much of a pain this is really going to be. The first hurdle I had was to convert the existing solution from the Windows Phone CTP to the Beta release. This turned out to be quite a bit harder than I had expected. On the upside I got a pretty good idea of some of the changes that were made – ditching the resource files, using the manifest to nominate the launch window, assembly consolidation etc.&lt;/p&gt;  &lt;p&gt;Once I had eventually gotten it to work with the Beta I decided to create a Settings page so that I could:    &lt;br /&gt;1) test the navigation and     &lt;br /&gt;2) have a simplified state object to persist to the application cache whilst de-activating.&lt;/p&gt;  &lt;p&gt;The settings page looked like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/WordPuzzle_Stage3_Settings_2.png"&gt;&lt;img style="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" title="WordPuzzle_Stage3_Settings" border="0" alt="WordPuzzle_Stage3_Settings" src="http://blog.spencen.com/images/83489-72989/WordPuzzle_Stage3_Settings_thumb.png" width="235" height="239" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It was bound to some of the properties on my pre-existing LetterBoardSetup class, e.g. AllowBackwards, AllowDiagonal, Width, Height.&lt;/p&gt;  &lt;p&gt;I added the following code to my App.xaml.cs file and everything worked just fine.&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Application_Activated(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, ActivatedEventArgs e)&lt;br /&gt;{&lt;br /&gt;    var myState = PhoneApplicationService.Current.State;&lt;br /&gt;    settings = myState[&lt;span style="color: #006080"&gt;&amp;quot;settings&amp;quot;&lt;/span&gt;] &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; LetterBoardSetup;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Application_Deactivated(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, DeactivatedEventArgs e)&lt;br /&gt;{&lt;br /&gt;    var myState = PhoneApplicationService.Current.State;&lt;br /&gt;    myState[&lt;span style="color: #006080"&gt;&amp;quot;settings&amp;quot;&lt;/span&gt;] = settings;&lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;When the application de-activates the state is saved, then restored correctly on re-activation. I decided to move on and save off the actual game state. The easiest (laziest) way to save the game state seemed to be to just save off the entire object graph (after all we are talking about a &lt;em&gt;very&lt;/em&gt; trivial game here). Several of my classes had private setters for public properties. No problem I figured – I’ll just use DataContract from System.Runtime.Serialization namespace/assembly. This does all sorts of wonderful things – like allowing private fields to be serialized, creating instances without invoking any constructors and the like. At least I thought that’s how it worked – and on the full .NET framework I would have been right. Through trial and error I determined that the &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer(v=VS.95).aspx#1"&gt;Silverlight version&lt;/a&gt; doesn’t have these capabilities – classes are required to have public setters and getters for properties (yuerk!).&lt;/p&gt;

&lt;p&gt;So – in the mindset of just “getting it done” I went through and opened up my object model – changing private setters to public, making getters do “on-demand” construction for things like collections etc. to make it more serialization friendly.&lt;/p&gt;

&lt;p&gt;Now I have a version of WordPuzzle that runs in the emulator and survives tombstoning with absolutely no data loss. Should I ever want to I also now have a version that could easily allow games to be saved. In fact all that’s really left to do is find a couple of images for the application bar buttons – oh – and actually make the game play itself something slightly more err… exciting.&lt;/p&gt;</description><category>Development</category><category>.NET</category><category>Windows Phone</category><comments>http://blog.spencen.com/2010/09/04/word-puzzle-to-sliverlight-phonendashpart-3.aspx#Comments</comments><guid isPermaLink="false">072b95ce-c46f-476b-8a12-e4f578cea895</guid><pubDate>Sun, 05 Sep 2010 02:56:31 GMT</pubDate></item><item><title>Should I buy an iPhone?</title><link>http://blog.spencen.com/2010/06/23/should-i-buy-an-iphone.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;I don’t own an iPhone – never have. In fact I’ve never purchased &lt;em&gt;any&lt;/em&gt; Apple product. I get the distinct impression that they are simple not designed for me. They’re for normal people. Even when I think I should buy one of their products just to see what I’m missing out on I can’t bring myself to do it. It would be too embarrassing. I may as well go and but a T-shirt with “Apple Fanboy” written in large letters (though elegant and with just the right amount of whitespace). I even get embarrassed for other people when I see them using Apple products. I feel like I should take them aside and explain to them politely how they’ve been deluded into buying an overpriced, under-performing an ultimately unsatisfying product.&lt;/p&gt;  &lt;p&gt;When I was living down-under Apple products were popular and I occasionally got to work with a developer who was a die-hard Apple fan. It was amusing, the rest of us would snigger at their misguided judgement and their uncanny ability to compare everything with the wonderful nirvana of the Apple Universe.&lt;/p&gt;  &lt;p&gt;Now I live in New York. The Big Apple. I work for a tech company that embraces Apple products. Not just the hippy UX crew either. Even the management, strong willed , hard-core professionals, have Mac books and iPhones littered on their desk next to their Apple branded widescreens. I could be wrong but I believe the standard company issued laptop is a Mac book of some description (probably the big screen one with the ridiculous overheating issue?).&lt;/p&gt;  &lt;p&gt;I’m currently working with a UX designer who comes to meetings with his iPad. Do I scream at him, telling him his ridiculously oversized iPhone is a 10 year old Slate device that lacks the fidelity that a stylus offered? No. Do I laugh when he starts describing how our new app is going to require a PopOver control – much more that just a PopUp? No. When he rounds every sharp angle and removes the right click? No.&lt;/p&gt;  &lt;p&gt;Why not? Because maybe, just maybe the time has come for me to face the music. It’s me. It just must be me.&lt;/p&gt;  &lt;p&gt;So what now… where to from here? So its finally come to this… should I just go and buy an iPhone 4?&lt;/p&gt;  &lt;p&gt;I’d have some reasonable excuses:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;My current US “cell” phone is a Blackberry – highly functional but about as exciting and attractive as a brick &lt;/li&gt;    &lt;li&gt;The iPhone 4 is &lt;a href="http://store.apple.com/us/browse/home/shop_iphone/family/iphone"&gt;only $199 dollars&lt;/a&gt; – the last two phones I purchased cost around $700 each -&amp;#160; so they’re cheap! &lt;/li&gt;    &lt;li&gt;There are lots fun accessories (including an &lt;a href="http://www.mobilefun.co.uk/cat/iPhone-4-Cases.htm "&gt;iPhone 4 case&lt;/a&gt; to protect) that I can buy with the money I saved. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Of course there are also some arguments against:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;New York seems to have the &lt;a href="http://consumerist.com/2009/12/att-customer-service-new-york-city-is-not-ready-for-the-iphone.html"&gt;worst phone coverage&lt;/a&gt; of any major city I’ve been to in recent times (OK I don’t get around much and yes I understand tall buildings and ultra high density population doesn’t help). I’ve tried AT&amp;amp;T and T-Mobile networks and both have frequent drop-outs/interference. I believe they are just introducing 4G networks but currently browsing and live video streaming on the existing 3G network is terrible. I believe the iPhones are fixed to AT&amp;amp;T? &lt;/li&gt;    &lt;li&gt;I can’t write programs for my new iPhone unless I buy an Apple computer. Worse still, I can’t just buy the computer and waste the OS to install Windows 7, I actually have to run OSX. [I’m guessing a bit here]. Now things are getting expensive – and I just don’t think I’m ready for such a big step into this hostile world. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So should I buy an iPhone 4? Comments welcome – maybe even a free phone accessory giveaway for the most amusing comment?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;font size="1"&gt;Just for the record, here’s the fine print:&lt;/font&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;font size="1"&gt;I’ve used many Apple products – some by choice, some mandated. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="1"&gt;I haven’t enjoyed any of these experiences. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="1"&gt;I realised this is largely based on my own prejudice that I’ve accumulated over the years from those experiences.&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="1"&gt;I recognize that the vast majority of Apple product owners consider the experience satisfying as voted by their continued purchases.&lt;/font&gt; &lt;/li&gt; &lt;/ol&gt;</description><category>General</category><comments>http://blog.spencen.com/2010/06/23/should-i-buy-an-iphone.aspx#Comments</comments><guid isPermaLink="false">3b10a790-5050-4fb4-b54a-aa8f3d7b4c9f</guid><pubDate>Thu, 24 Jun 2010 03:33:54 GMT</pubDate></item><item><title>Random thoughts for this week</title><link>http://blog.spencen.com/2010/05/09/random-thoughts-for-this-week.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/DSC00478%20View%20from%20Empire%20State_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 10px; display: inline; border-top: 0px; border-right: 0px" title="View uptown from 86th floor of Empire State Building" border="0" alt="View uptown from 86th floor of Empire State Building" align="right" src="http://blog.spencen.com/images/83489-72989/DSC00478%20View%20from%20Empire%20State_thumb.jpg" width="244" height="73" /&gt;&lt;/a&gt;I may have found a viable option for &lt;a href="https://www.fotoflot.com"&gt;printing panoramic photos&lt;/a&gt; that links in nicely with my &lt;a href="http://www.smugmug.com/"&gt;SmugMug&lt;/a&gt; account.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.geekbrief.tv/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Geekbrief_tv" border="0" alt="Geekbrief_tv" align="right" src="http://blog.spencen.com/images/83489-72989/Geekbrief_tv_1.png" width="172" height="62" /&gt;&lt;/a&gt; The internet TV options in Windows Media Center works much better in the States that it ever did for me back in Oz. I quite like &lt;a href="http://www.geekbrief.tv/"&gt;geekbrief&lt;/a&gt; as just one of the many tech gadget shows.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="HDR-CX550V" border="0" alt="HDR-CX550V" align="right" src="http://blog.spencen.com/images/83489-72989/HDR-CX550V_3.png" width="197" height="125" /&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="DCR-PC100E" border="0" alt="DCR-PC100E" align="left" src="http://blog.spencen.com/images/83489-72989/DCR-PC100E_3.png" width="200" height="150" /&gt;I finally got around to replacing my trusty video camera – a Sony DCR-PC100E purchased back in 1999. It was one of the early Mini DV cameras, packed full of manual options in what was then an incredibly compact body. In fact the camera I’m replacing it with (&lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10551&amp;amp;storeId=10151&amp;amp;langId=-1&amp;amp;productId=8198552921666073231"&gt;HDR-CX550V&lt;/a&gt;) is about the same weight and size and has pretty much the same feature set (viewfinder, manual focus, night shot). Of course everything is now HD and records to memory rather than tape which makes all the difference. I guess the main sign of progress though is that the new camera cost me 1/4 of what I paid for the old one.&lt;/p&gt;  &lt;p&gt;Having now had the chance to see an play with one first hand, I’m more convinced than ever that the iPad is an awkward form factor that just doesn’t compete well with the existing alternatives. I almost laughed out loud when I saw a guy trying to play a game on one in a busy subway. Kudos to him for being such a die-hard fan!&lt;/p&gt;  &lt;p&gt;Rob Relyea sparked an &lt;a href="http://blogs.windowsclient.net/rob_relyea/archive/2010/05/06/did-you-debate-using-silverlight-or-wpf-for-a-project.aspx#319960"&gt;interesting discussions on Sliverlight vs WPF&lt;/a&gt; which was fairly relevant to some talks we’ve been having at work recently. I was so impressed by the first commenter’s response – &lt;a href="http://codedreams.blogspot.com/"&gt;Mike Strobel&lt;/a&gt; - that I subscribed to his blog where he also had a very &lt;a href="http://codedreams.blogspot.com/2010/04/windows-phone-7-ux-part-1-usability.html"&gt;interesting take on the Windows Phone 7 UI&lt;/a&gt;. I have to admit I share many of Mike’s misgivings about the new UI.&lt;/p&gt;</description><category>General</category><comments>http://blog.spencen.com/2010/05/09/random-thoughts-for-this-week.aspx#Comments</comments><guid isPermaLink="false">d5b90445-b4ed-4cb0-9256-c8dc067b6dd0</guid><pubDate>Mon, 10 May 2010 04:59:11 GMT</pubDate></item><item><title>Preventing a bound TextBox from resetting the caret position</title><link>http://blog.spencen.com/2010/05/05/preventing-a-bound-textbox-from-resetting-the-caret-position.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;Someone posed a question on our internal mailing list today at work that reminded me of a problem I’d tackled previously whilst working as a &lt;em&gt;&lt;a href="http://blog.spencen.com/2010/01/28/wrapping-up-a-contract.aspx"&gt;developer of fortune&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Here’s the challenge. A TextBox is bound to a data value that is being constantly updated. In my scenario the TextBox was bound to a data feed coming from a serial port connected weigh bridge. Even though the value is being automatically updated the operator has the ability to override the value with their own – at which point it would normally cease being updated by the data service.&lt;/p&gt;  &lt;p&gt;Sounds fairly straight-forward. The main problem is that every time the TextBox value is updated via data-binding the selection text and position of the caret is reset. This is particularly annoying if the operator positions the caret about to make their change and a fraction of a second before they press a key the caret moves to the left edge.&lt;/p&gt;  &lt;p&gt;I can’t remember exactly how we solved this problem in my earlier engagement (Raaj if you’re listening you could jog my memory) but here was my quick re-attempt.&lt;/p&gt;  &lt;p&gt;First I’ll set the scene with a mock environment.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainWindow : Window
{
    &lt;span class="kwrd"&gt;private&lt;/span&gt; ViewModel viewModel;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; DispatcherTimer timer;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; MainWindow()
    {
        InitializeComponent();

        &lt;span class="kwrd"&gt;this&lt;/span&gt;.viewModel = &lt;span class="kwrd"&gt;new&lt;/span&gt; ViewModel();
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.DataContext = viewModel;

        &lt;span class="kwrd"&gt;this&lt;/span&gt;.timer = &lt;span class="kwrd"&gt;new&lt;/span&gt; DispatcherTimer(&lt;br /&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; TimeSpan(0, 0, 1), &lt;br /&gt;            DispatcherPriority.Background, &lt;br /&gt;            UpdateValue, &lt;br /&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Dispatcher);
    }

    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UpdateValue(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
    {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.viewModel.Value += 0.01;
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;






.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: verdana, consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;This sets up a simple form whose DataContext refers to a ViewModel with a Value property. The Value property is updated every second by a thread safe timer.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;TextBoxOverlay.MainWindow&amp;quot;&lt;/span&gt;
        &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
        &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
        &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;MainWindow&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;350&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;525&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;150&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBox&lt;/span&gt; 
                &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Value,StringFormat=0.00,UpdateSourceTrigger=PropertyChanged}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The XAML simple binds a TextBox to the Value property. Running this sample and the problem can be immediately realised. Attempting to edit the value in the TextBox using the keyboard is extremely frustrating. The caret won’t go where you want it to.&lt;/p&gt;

&lt;p&gt;So – the next step is to create a TextBlock that overlays the TextBox and instead bind this to the Value property. We set the IsHitTestVisible property on this TextBlock to False so that the user can still interact with the TextBox underneath. Then – and this is where things get a little sneaky – we make the TextBox’s text transparent. This allows us the strange freedom to interact with the TextBox’s content by selecting it and moving the caret – and because we can see the same text in the overlaid TextBlock things appear as normal.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;TextBoxOverlay.MainWindow&amp;quot;&lt;/span&gt;
        &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
        &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;
        &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;MainWindow&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;350&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;525&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;150&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBox&lt;/span&gt; 
                    &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding ModifiedValue,StringFormat=0.00,&lt;br /&gt;                                   UpdateSourceTrigger=PropertyChanged}&amp;quot;&lt;/span&gt;
                    &lt;span class="attr"&gt;PreviewTextInput&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;TextBoxPreviewTextInput&amp;quot;&lt;/span&gt;
                    &lt;span class="attr"&gt;Foreground&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Transparent&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; 
                    &lt;span class="attr"&gt;IsHitTestVisible&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt;
                    &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;5,0&amp;quot;&lt;/span&gt;
                    &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Value,StringFormat=0.00}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;You can see from the XAML that the TextBox is bound to a new field on our ViewModel called ModifiedValue. We also hook up to the PreviewTextInput event. We could have used an attached behaviour here rather than resorting to code-behind – but I wanted to keep things simple. So the code behind on the form has:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TextBoxPreviewTextInput(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, TextCompositionEventArgs e)
        {
            var textBox = sender &lt;span class="kwrd"&gt;as&lt;/span&gt; TextBox;
            var selectionStart = textBox.SelectionStart;
            var selectionLength = textBox.SelectionLength;
            var caretIndex = textBox.CaretIndex;

            &lt;span class="kwrd"&gt;this&lt;/span&gt;.viewModel.ModifiedValue = &lt;span class="kwrd"&gt;this&lt;/span&gt;.viewModel.Value;
            
            textBox.CaretIndex = caretIndex; &lt;br /&gt;            textBox.SelectionStart = selectionStart;
            textBox.SelectionLength = selectionLength;
        }&lt;/pre&gt;

&lt;p&gt;Here we save and restore the TextBox’s SelectionStart, SelectionLength and CaretIndex whilst updating the ModifiedValue that is about to be changed to equal the Value that the user can actually see (remember the ModifiedValue is transparent).&lt;/p&gt;

&lt;p&gt;The very last trick is within the ModifiedValue’s setter where we update the Value property. This ensures that whatever changes the operator makes to the TextBox are visible in the overlaid TextBlock. Of course the whole point of doing all of this is that the caret position and selection remains completely unchanged whilst the value appears to update.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt;? ModifiedValue
        {
            get
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.modifiedValue;
            }
            set
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.modifiedValue != &lt;span class="kwrd"&gt;value&lt;/span&gt;)
                {
                    &lt;span class="kwrd"&gt;this&lt;/span&gt;.modifiedValue = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
                    NotifyPropertyChanged(&lt;span class="str"&gt;&amp;quot;ModifiedValue&amp;quot;&lt;/span&gt;);
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.ModifiedValue.HasValue)
                        Value = ModifiedValue.Value;
                }
            }
        }&lt;/pre&gt;

&lt;p&gt;Source code &lt;a href="http://www.spencen.com/Downloads/TextBoxOverlay.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So aside from the tacky code-behind to keep the code here to a minimum, I’m wondering if there isn’t a neater solution? &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;UPDATE: Using an attached behaviour&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It was pointed out to me by a colleague that there is a simpler, more versatile solution. Simple encapsulate the text change with selection restore within an attached property. Then we can use multiple bindings to achieve the effect.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetNonIntrusiveText(DependencyObject obj)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;)obj.GetValue(NonIntrusiveTextProperty);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetNonIntrusiveText(DependencyObject obj, &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;)
        {
            obj.SetValue(NonIntrusiveTextProperty, &lt;span class="kwrd"&gt;value&lt;/span&gt;);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; DependencyProperty NonIntrusiveTextProperty =
            DependencyProperty.RegisterAttached(&lt;br /&gt;                &lt;span class="str"&gt;&amp;quot;NonIntrusiveText&amp;quot;&lt;/span&gt;, &lt;br /&gt;                &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt;), &lt;br /&gt;                &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(TextBoxExtensions), 
                &lt;span class="kwrd"&gt;new&lt;/span&gt; FrameworkPropertyMetadata(&lt;br /&gt;                    &lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;br /&gt;                    FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, &lt;br /&gt;                    NonIntrusiveTextChanged));

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NonIntrusiveTextChanged(&lt;br /&gt;             &lt;span class="kwrd"&gt;object&lt;/span&gt; sender, &lt;br /&gt;             DependencyPropertyChangedEventArgs e)
        {
            var textBox = sender &lt;span class="kwrd"&gt;as&lt;/span&gt; TextBox;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (textBox == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            var caretIndex = textBox.CaretIndex;
            var selectionStart = textBox.SelectionStart;
            var selectionLength = textBox.SelectionLength;

            textBox.Text = (&lt;span class="kwrd"&gt;string&lt;/span&gt;) e.NewValue;

            textBox.CaretIndex = caretIndex;
            textBox.SelectionStart = selectionStart;
            textBox.SelectionLength = selectionLength;
        }&lt;/pre&gt;

&lt;p&gt;Now the XAML no longer requires the tricky TextBlock overlay, we simple have a TextBox with two bindings.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBox&lt;/span&gt; 
    &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Value,StringFormat=0.00,&lt;br /&gt;                         UpdateSourceTrigger=PropertyChanged,&lt;br /&gt;                         Mode=OneWayToSource}&amp;quot;&lt;/span&gt;
    &lt;span class="attr"&gt;local:TextBoxExtensions&lt;/span&gt;.&lt;span class="attr"&gt;NonIntrusiveText&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Value,StringFormat=0.00,&lt;br /&gt;                                                                          UpdateSourceTrigger=PropertyChanged,&lt;br /&gt;                                                                          Mode=TwoWay}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
 &lt;/pre&gt;</description><category>Development</category><category>.NET</category><category>Lab49</category><category>WPF</category><comments>http://blog.spencen.com/2010/05/05/preventing-a-bound-textbox-from-resetting-the-caret-position.aspx#Comments</comments><guid isPermaLink="false">49404db1-dd70-4049-8c50-08057f3ec2a2</guid><pubDate>Fri, 07 May 2010 11:54:57 GMT</pubDate></item><item><title>Conditional Formatting of a TextBox</title><link>http://blog.spencen.com/2010/04/29/conditional-formatting-of-a-textbox.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 20px; display: inline; border-top: 0px; border-right: 0px" title="FormatAndPaste" border="0" alt="FormatAndPaste" align="right" src="http://blog.spencen.com/images/83489-72989/FormatAndPaste_3.png" width="263" height="197" /&gt; &lt;/p&gt;  &lt;p&gt;I recently came across a scenario where I needed to bind a TextBox to a domain property but also have the value formatted for display. To make things more interesting the format was to be dynamic and the value needed to be editable.&lt;/p&gt;  &lt;p&gt;The initial investigation led me to consider a ValueConverter. Ideally the TextBox.Text property could be bound and the Converter could be used to format to/from the required on-screen value. For a dynamic format it would be nice to bind the ConverterParameter to a property that exposed the format. Of course that doesn’t work because &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/88a22766-5e6f-4a16-98a6-1ab39877dd09"&gt;ConverterParameter doesn’t support data binding&lt;/a&gt;. I found a &lt;a href="http://marlongrech.wordpress.com/2008/08/03/my-wish-came-true-i-can-now-use-databinding-in-a-converterparameter/"&gt;hack that gets around this&lt;/a&gt; – but it isn't pretty. There are also some examples of using a &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/d6a95f05-4338-44a4-a834-bbfe71e893ac/"&gt;MultiValueConverter&lt;/a&gt; and passing both the value to format and the format string itself as separate individual bindings. This approach has some difficulties too when converting both ways and its just feels like an abuse of the ValueConverter.&lt;/p&gt;  &lt;p&gt;This lead me to think about the problem a little more… maybe a different approach is required? Thinking back to the WinForms days and I realised that I had solved this problem before, several times in fact. My approach to this problem for WinForms had been:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Subclass TextBox and add a Value property of type object that allows data binding to data types other than just string. Common types that could be used with a TextBox include int, decimal, double, bool, DateTime and enums. &lt;/li&gt;    &lt;li&gt;The inherited TextBox also has a Format property. On GotFocus the Value property is formatted and used to populate the Text property. On LostFocus the reverse happens, the Text property is parsed back into the Value property. Of course this requires the data type to be known so a DataType property is required as well. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The benefits that this has:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;TextBox works for data types other than string. &lt;/li&gt;    &lt;li&gt;The value is formatted as required for display but upon data entry (GotFocus) the formatting is removed. This actually makes it easier to enter/modify the value because you don’t need to parse currency symbols, percentage signs and the like. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So the approach sounds good and its worked well for me in WinForms but its… well… not very WPF’ish. Upon starting any major development the first requirement in WinForms was to subclass all the controls – because they were just so lacking if functionality and even more importantly didn’t expose a common set of interfaces. However, I very rarely subclass controls in WPF – instead we can use attached behaviors to extend the control. &lt;/p&gt;  &lt;p&gt;The attached behaviors required are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;object&lt;/span&gt; TypedValue&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Type&lt;/span&gt; DataType &lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; StringFormat&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In XAML instead of binding to the TextBox.Text property we bind to the TypedValue attached property. The StringFormat can also be bound. The DataType can be inferred by the TypedValue – but for nullable types its best to be set explicitly. With a sample class as follows:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ModelItem
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Value { get; set; }
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Format { get; set; }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;




















.csharpcode, .csharpcode pre
{
	font-size: big;
	color: black;
	font-family: verdana, "Consolas", "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The XAML is then:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataGrid&lt;/span&gt; &lt;span class="attr"&gt;ItemsSource&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Items}&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataGrid.Columns&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataGridTextColumn&lt;/span&gt; &lt;span class="attr"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Any Type TextBox&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataGridTextColumn.ElementStyle&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Style&lt;/span&gt; &lt;span class="attr"&gt;TargetType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{x:Type TextBlock}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Setter&lt;/span&gt; &lt;span class="attr"&gt;Property&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;local:TextBoxExtensions.StringFormat&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Format}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Setter&lt;/span&gt; &lt;span class="attr"&gt;Property&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;local:TextBoxExtensions.TypedValue&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Value}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Style&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DataGridTextColumn.ElementStyle&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataGridTextColumn.EditingElementStyle&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Style&lt;/span&gt; &lt;span class="attr"&gt;TargetType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{x:Type TextBox}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Setter&lt;/span&gt; &lt;span class="attr"&gt;Property&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;local:TextBoxExtensions.StringFormat&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Format}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Setter&lt;/span&gt; &lt;span class="attr"&gt;Property&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;local:TextBoxExtensions.TypedValue&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Value}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Style&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DataGridTextColumn.EditingElementStyle&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DataGridTextColumn&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataGridTextColumn&lt;/span&gt; &lt;span class="attr"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Format&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Binding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Format}&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;IsReadOnly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DataGridTextColumn&lt;/span&gt; &lt;span class="attr"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Value&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Binding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{Binding Value}&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;IsReadOnly&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DataGrid.Columns&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DataGrid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Which generates a DataGrid bound to a collection of ModelItems. Each ModelItem allows a different data type and format to be applied – great for a “user-defined fields” scenario.&lt;/p&gt;

&lt;p&gt;Populating the ModelItems collection as follows in our main ViewModel:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Model
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Model()
        {
            Primary = &lt;span class="kwrd"&gt;new&lt;/span&gt; ModelItem() { Format = &lt;span class="str"&gt;&amp;quot;{0:#,##0.0}&amp;quot;&lt;/span&gt;, Value = 12345678.765 };
            Items = &lt;span class="kwrd"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;ModelItem&amp;gt;();
            Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ModelItem() { Format = &lt;span class="str"&gt;&amp;quot;{0:C2}&amp;quot;&lt;/span&gt;, Value = 123.42 });
            Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ModelItem() { Format = &lt;span class="str"&gt;&amp;quot;{0&lt;img src="http://blog.spencen.com/emoticons/tongue.png" border="0" /&gt;2}&amp;quot;&lt;/span&gt;, Value= 0.125 });
            Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ModelItem() { Format = &lt;span class="str"&gt;&amp;quot;{0}&amp;quot;&lt;/span&gt;, Value = &lt;span class="str"&gt;&amp;quot;Fred&amp;quot;&lt;/span&gt; });
            Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ModelItem() { Format = &lt;span class="kwrd"&gt;null&lt;/span&gt;, Value = &lt;span class="kwrd"&gt;true&lt;/span&gt; });
            Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ModelItem() { Format = &lt;span class="str"&gt;&amp;quot;Uncle {0}&amp;quot;&lt;/span&gt;, Value = &lt;span class="str"&gt;&amp;quot;George&amp;quot;&lt;/span&gt; });
            Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ModelItem() { Format = &lt;span class="kwrd"&gt;null&lt;/span&gt;, Value = Colors.Black });
            Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ModelItem() { Format = &lt;span class="kwrd"&gt;null&lt;/span&gt;, Value = System.DayOfWeek.Monday });
            Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ModelItem() { Format = &lt;span class="str"&gt;&amp;quot;{0:0;minus 0;zip}&amp;quot;&lt;/span&gt;, Value = -123.4 });
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; ModelItem Primary { get; set; }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; ObservableCollection&amp;lt;ModelItem&amp;gt; Items { get; &lt;span class="kwrd"&gt;private&lt;/span&gt; set; }
    }&lt;/pre&gt;

&lt;p&gt;Generates the following grid, which allows for editing of the strongly typed values.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="FormatAndPaste" border="0" alt="FormatAndPaste" src="http://blog.spencen.com/images/83489-72989/FormatAndPaste_1.png" width="263" height="197" /&gt;&lt;/p&gt;</description><category>Development</category><category>.NET</category><category>WPF</category><comments>http://blog.spencen.com/2010/04/29/conditional-formatting-of-a-textbox.aspx#Comments</comments><guid isPermaLink="false">daf38d7a-87a5-4f2e-91b2-de18075e68f2</guid><pubDate>Thu, 29 Apr 2010 04:52:11 GMT</pubDate></item><item><title>Word Puzzle to Silverlight Phone &amp;ndash; Part 2</title><link>http://blog.spencen.com/2010/04/26/word-puzzle-to-silverlight-phone-ndash-part-2.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;Finally got interaction and feedback happening on the &lt;a href="http://blog.spencen.com/2010/04/08/porting-wpf-word-puzzle-to-windows-phone-silverlight-ndash-part-1.aspx"&gt;Silverlight port of Word Puzzle&lt;/a&gt;. This was so much more difficult than I had imagined – feels like learning WPF from scratch. I am beginning to believe that it would be easier to approach Silverlight with no WPF knowledge whatsoever.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I had to cater for not having DataTriggers – and then not being able to get behaviours/triggers/states to work like I wanted. In the end I used a ValueConverter to hack the &lt;em&gt;selection&lt;/em&gt; and &lt;em&gt;solved&lt;/em&gt; colours – yuk!&lt;/li&gt;    &lt;li&gt;Had some weird issues with the MouseMove event – had to use CaptureMouse to get position readings outside the original UI element – wasn’t a requirement for WPF.&lt;/li&gt;    &lt;li&gt;Spent ages working through really minor bugs that just aren’t reported properly in Silverlight. Things as simple as referencing a resource that doesn’t exist (due to misspelling) generates a super generic error message.&lt;/li&gt;    &lt;li&gt;Had to create a proper custom layout panel for the words to position and rotate the highlight boxes. This was actually an improvement on the original version.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Anyhow – now have a playable version on the emulator. Slow progress, but progress nonetheless.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/WordPuzzle_Stage2_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WordPuzzle_Stage2" border="0" alt="WordPuzzle_Stage2" src="http://blog.spencen.com/images/83489-72989/WordPuzzle_Stage2_thumb_1.png" width="198" height="386" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://blog.spencen.com/images/83489-72989/WordPuzzle_Stage2_EndGame_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WordPuzzle_Stage2_EndGame" border="0" alt="WordPuzzle_Stage2_EndGame" src="http://blog.spencen.com/images/83489-72989/WordPuzzle_Stage2_EndGame_thumb.png" width="198" height="386" /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Development</category><category>.NET</category><category>Windows Phone</category><comments>http://blog.spencen.com/2010/04/26/word-puzzle-to-silverlight-phone-ndash-part-2.aspx#Comments</comments><guid isPermaLink="false">4172f2e7-81a8-4887-840a-315939661878</guid><pubDate>Mon, 26 Apr 2010 04:37:07 GMT</pubDate></item><item><title>Desk Genie</title><link>http://blog.spencen.com/2010/04/19/desk-genie.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;I’ve recently had the opportunity to reduce my material possessions to no more than can be carried in eight suitcases. This was quite a liberating experience. Particularly when you take into account that those eight suitcases were for my entire family – only two contained my stuff.&lt;/p&gt;  &lt;p&gt;One of the fun parts of going through this experience is that we get to buy some essentials. Once all the boring stuff (like furniture) is out of the way I got to concentrate on replacing a few tech items. The idea being to create an area at home from which I can work remotely whilst remaining highly productive. First on the list was a &lt;a href="http://blog.spencen.com/2010/04/06/new-laptop-ndash-sony-z-series.aspx"&gt;more powerful, yet highly portable laptop&lt;/a&gt;, and a keyboard and &lt;a href="http://www.jr.com/acer-computer/pe/ACE_H243HBMID/"&gt;cheap wide screen monitor&lt;/a&gt; to go with it.&lt;/p&gt;  &lt;p&gt;This gave me the essentials but there were two minor flaws in the setup.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The laptop only had three USB ports (not uncommon for laptops). Obviously this isn’t going to be enough even at this early stage – keyboard, mouse, phone, external hard drive. (Luckily the printer is on the network).&lt;/li&gt;    &lt;li&gt;My aging &lt;a href="http://www.dpreview.com/reviews/sonydscv1/"&gt;Sony Cybershot DSC-V1&lt;/a&gt; uses the standard sized (old) memory stick format which doesn’t fit in the card reader on the Z-Series laptop. This means yet another device to connect via USB.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Enter the Desk Genie the perfect &lt;a href="http://www.mobilefun.co.uk/cat/HTC-Touch-Diamond2.htm"&gt;accessory for my HTC Touch Diamond2&lt;/a&gt;. This little gadget is designed to meet three simple objectives.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Act as a multi-format card reader&lt;/li&gt;    &lt;li&gt;Act as a USB hub and power charger&lt;/li&gt;    &lt;li&gt;Provide a platform on which to mount portable devices so they are easily visible when sat at a desk.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;em&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/Desk%20Genie%20Unboxed_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Desk Genie Unboxed" border="0" alt="Desk Genie Unboxed" src="http://blog.spencen.com/images/83489-72989/Desk%20Genie%20Unboxed_thumb.jpg" width="329" height="240" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://blog.spencen.com/images/83489-72989/Desk%20Genie%20what%20you%20get_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Desk Genie what you get" border="0" alt="Desk Genie what you get" src="http://blog.spencen.com/images/83489-72989/Desk%20Genie%20what%20you%20get_thumb.jpg" width="240" height="240" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;What’s in the box? &lt;/em&gt;&lt;em&gt;Comes with plenty of charger connections – the only two of interest for me were the mini and micro-USB.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I’ve had this item for almost a week now, and I’ve tried it out both at work and at home. Here’s my thoughts.&lt;/p&gt;  &lt;h3&gt;Pros&lt;a href="http://blog.spencen.com/images/83489-72989/DSC01319.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="DSC01319" border="0" alt="DSC01319" align="right" src="http://blog.spencen.com/images/83489-72989/DSC01319_thumb.jpg" width="214" height="95" /&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;It works well as phone holder. The “sticky” surface does exactly what it says – hold the phone firmly in place without having pesky catches, clips, Velcro etc. The viewing angle worked well for the desk and chair heights that I use both at home and work.&lt;/li&gt;    &lt;li&gt;Charger worked fine for charging my HTC Touch Diamond, though had trouble with the Blackberry (see below).&lt;/li&gt;    &lt;li&gt;As a USB hub it works flawlessly (as you’d hope). I’ve had my 1.5 Tb external drives connected through this and copied large volumes of data without any issues.&lt;/li&gt;    &lt;li&gt;Has a very muted blue “glow” indicator to let you know its connected.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Cons&lt;a href="http://blog.spencen.com/images/83489-72989/DSC01321.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="DSC01321" border="0" alt="DSC01321" align="right" src="http://blog.spencen.com/images/83489-72989/DSC01321_thumb.jpg" width="212" height="240" /&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;An extra USB outlet would have been nice.&lt;/li&gt;    &lt;li&gt;The memory stick reader isn’t a perfect fit. I had to insert the memory stick on a slight angle – was a bit of a knack getting the hang of it but once you worked it out wasn’t a big deal. I’ve had the same problem with other multi-card readers (like the one in my Zalman HD160 HTPC case).&lt;/li&gt;    &lt;li&gt;When connecting my Blackberry via the power charger (with the included micro-USB adapter) it didn’t work. Not sure what the problem was – maybe not enough “juice”? Connected via one of the USB ports and everything was fine – connectivity and charging.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/DSC01319.jpg"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;My favourite configuration for this device was to provide both charging and connectivity for my phone by using one of the USB ports rather than using the charging cable. Whilst this does mean I lose one of the two USB ports I like having the device connected for ActiveSync and for copying across podcasts.&lt;/p&gt;  &lt;p&gt;The number one feature of this gadget for me though is that it holds the phone at a perfect viewing angle whilst connected. I would have loved one of these at my previous work desk where I would continuously have to pick the phone up to look at whether I’d missed a phone call, email or text whilst away from my desk. If that’s what you really care about then&lt;/p&gt;  &lt;p&gt;I’m pretty happy with this gadget – it does what it says and for me it happened to come along at a time when I needed the USB and memory card features. Now all I have to do is figure out whether I keep it on the desk at home, or the one at work?&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Thanks to Natalie from &lt;/em&gt;&lt;a href="http://mobilefun.co.uk"&gt;&lt;em&gt;mobilefun.co.uk&lt;/em&gt;&lt;/a&gt;&lt;em&gt; who was kind enough to send me a Desk Genie to review.&lt;/em&gt;&lt;/p&gt;</description><category>Windows Phone</category><category>General</category><comments>http://blog.spencen.com/2010/04/19/desk-genie.aspx#Comments</comments><guid isPermaLink="false">aa855205-7ba6-4e72-a2f8-3c2093b57984</guid><pubDate>Mon, 19 Apr 2010 03:19:50 GMT</pubDate></item><item><title>Porting WPF Word Puzzle to Windows Phone Silverlight &amp;ndash; Part 1</title><link>http://blog.spencen.com/2010/04/08/porting-wpf-word-puzzle-to-windows-phone-silverlight-ndash-part-1.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;To date I’ve avoided doing any serious development in Silverlight. Every time I’ve tried to tackle it I get so frustrated with all the missing pieces. Besides which I’ve never had a good reason to do any Silverlight work – I’ve never been a fan of applications that run in a browser.&lt;/p&gt;  &lt;p&gt;With the release of the Windows Phone Series development tools however, I now have a good reason. So I figured I’d pick a relative simple, small scale WPF application that actually makes some sense to run on a mobile device. Rather than starting it from scratch I just wanted to port it from WPF – so I chose the &lt;a href="http://blog.spencen.com/2009/03/12/word-puzzle-v02.aspx"&gt;Word Puzzle program&lt;/a&gt; that I wrote a couple of years back. I figured it was a good choice because it met the criteria above, plus I’d already stripped it back a little to make sure it could run as an XBAP application.&lt;/p&gt;  &lt;p&gt;Inspired by &lt;a href="http://devlicio.us/blogs/rob_eisenberg/archive/2010/04/06/porting-nhprof-from-wpf-to-silverlight-day-7.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+Devlicious+%28Devlicio.us%29"&gt;Rob’s posts on porting NProf to Silverlight&lt;/a&gt; I thought it may be of some interest to list off the issues that I come up against as I go through the process of porting. This first list represents me starting a new Windows Phone project and copying over classes and XAML files to get &lt;em&gt;something&lt;/em&gt; to compile and look recognizable. The following represents about 2 hours work:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/WordPuzzle_Stage1_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WordPuzzle_Stage1" border="0" alt="WordPuzzle_Stage1" src="http://blog.spencen.com/images/83489-72989/WordPuzzle_Stage1_thumb_1.png" width="246" height="480" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;However, along the way I came across this list of issues:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;No Viewbox&lt;/li&gt;    &lt;li&gt;No MouseDown or MouseUp&lt;/li&gt;    &lt;li&gt;No UniformGrid&lt;/li&gt;    &lt;li&gt;No Image.StretchDirection&lt;/li&gt;    &lt;li&gt;x:Type is not supported&lt;/li&gt;    &lt;li&gt;No Style.Triggers&lt;/li&gt;    &lt;li&gt;No DockPanel&lt;/li&gt;    &lt;li&gt;No RoutedCommand&lt;/li&gt;    &lt;li&gt;No KeyGesture&lt;/li&gt;    &lt;li&gt;No DataType on DataTemplate?&lt;/li&gt;    &lt;li&gt;No ValueConversion&lt;/li&gt;    &lt;li&gt;No DefiningGeometry on Shape&lt;/li&gt;    &lt;li&gt;No BooleanToVisibilityConverter&lt;/li&gt;    &lt;li&gt;No DynamicResource&lt;/li&gt;    &lt;li&gt;No WrapPanel&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I haven’t verified the above list yet – save that they gave me compilation errors. I easily found a replacement UniformGrid, but there are a few items on the list that may pose more of a problem.&lt;/p&gt;  &lt;p&gt;The next step is to get some level of interaction working.&lt;/p&gt;</description><category>Development</category><category>.NET</category><category>Windows Phone</category><category>WPF</category><comments>http://blog.spencen.com/2010/04/08/porting-wpf-word-puzzle-to-windows-phone-silverlight-ndash-part-1.aspx#Comments</comments><guid isPermaLink="false">b856a911-d72f-44cd-b72e-9a3dd36d6268</guid><pubDate>Thu, 08 Apr 2010 02:15:05 GMT</pubDate></item><item><title>My views on Windows Phone 7 Series</title><link>http://blog.spencen.com/2010/04/08/my-views-on-windows-phone-7-series.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;I have mixed feelings about Windows Phone 7 Series. Whilst the new user interface is refreshingly different I’m not overly optimistic about its effectiveness. As more information about the new OS was made available I began to get a better idea of the target audience.&lt;/p&gt;  &lt;p&gt;&lt;img border="0" src="http://cache.windowsphone7series.com/images/logo.jpg" width="153" height="80" /&gt;&lt;/p&gt;  &lt;p&gt;My current feeling is that Windows Phone 7 Series will become a solid offering for the mass consumer market. It will throw off the shackles of the &lt;em&gt;Windows Mobile&lt;/em&gt; legacy and become a more stable, more consistent and vastly more appealing operating system for mobile devices. The only people that are likely to be disappointed by the new OS are the few die-hards that are currently running Windows Mobile 6.5 and below. The kind of people that wouldn’t be satisfied with an iPad when there are much more powerful and efficient &lt;a href="http://blog.spencen.com/2010/04/06/new-laptop-ndash-sony-z-series.aspx"&gt;means at hand&lt;/a&gt;. Those with such outlandish views that they believe touch interfaces (capacitive or otherwise) offer some amusement but just don’t cut it for serious tasks. People that believe copy/paste and multi-tasking are key operating system features. Alas I am once such person.&lt;/p&gt;  &lt;p&gt;I think Windows Phone 7 Series has the potential to be very successful and I certainly hope that it is. For me a lot about having a phone is having a mobile device for which I can write applications. The ability to &lt;em&gt;finally&lt;/em&gt; use Silverlight is something that I’m really excited about. So while the operating system itself is not something that I’m all that enthusiastic about the developer experience so far looks great.&lt;/p&gt;</description><category>Development</category><category>Windows Phone</category><category>General</category><comments>http://blog.spencen.com/2010/04/08/my-views-on-windows-phone-7-series.aspx#Comments</comments><guid isPermaLink="false">95742ed8-d6f0-4310-9bea-85985fe77813</guid><pubDate>Thu, 08 Apr 2010 00:55:43 GMT</pubDate></item><item><title>New Laptop &amp;ndash; Sony Z Series</title><link>http://blog.spencen.com/2010/04/06/new-laptop-ndash-sony-z-series.aspx?ref=rss</link><dc:creator>Nigel Spencer</dc:creator><description>&lt;p&gt;The last two months have been pretty hectic for me… new job, new residence, new country/continent/hemisphere.&lt;/p&gt;  &lt;p&gt;When we moved I packed all my desktop computers (dev box, HTPC, Home Server and son’s PC) into storage. This means for the last two months I’ve been using my &lt;a href="http://blog.spencen.com/2007/11/28/a-new-toy.aspx"&gt;Fujitsu tablet PC&lt;/a&gt; for all my computing requirements, occasionally also resorting to my HP mini notebook.&lt;/p&gt;  &lt;p&gt;The plan was to purchase a desktop PC when we got settled in – something powerful enough to by a good dev box and occasional gaming. However – two things quickly became apparent to me. Firstly – purchasing computer hardware in the US is not as convenient as I first imagined.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Online delivery times for most sites (including Dell and Sony) were measured in weeks – I want next day delivery!&lt;/li&gt;    &lt;li&gt;It’s nowhere near as cheap as I had hoped – especially when you always need to add taxes &lt;/li&gt;    &lt;li&gt;Laptops are cheaper to buy than desktops once you include screens, keyboards, wireless etc. Of course this point is debatable based on your requirements.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;My requirements were:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I5 or I7 processor &lt;/li&gt;    &lt;li&gt;Minimum 4Gb RAM &lt;/li&gt;    &lt;li&gt;Dedicated mid-range graphics card&lt;/li&gt;    &lt;li&gt;Dual monitor – with at least one 1920 x 1080 display&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Nice to have: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;120+ Gb SSD drive &lt;/li&gt;    &lt;li&gt;Wireless N&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The desktops I priced that matched these requirements were priced around $1200. Too expensive! I deliberated for two weeks, trying to find cheaper alternatives – including building a machine from components (which is how I normally buy desktop PCs) and then finally gave up. Figuring I was going to have to spend that kind of money I decided to look at higher end laptops that offered equivalent power. Eventually I settled on the new &lt;a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/CategoryDisplay?catalogId=10551&amp;amp;storeId=10151&amp;amp;langId=-1&amp;amp;categoryId=8198552921644570897&amp;amp;parentCategoryId=16154"&gt;Sony Z Series&lt;/a&gt; together with a cheap 24 inch screen.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/VPCZ112GXS_2_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="VPCZ112GXS_2" border="0" alt="VPCZ112GXS_2" src="http://blog.spencen.com/images/83489-72989/VPCZ112GXS_2_thumb.png" width="365" height="254" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pros&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Light – seriously light – much lighter than my Tablet PC – 3 lbs / 1.3kg&lt;/li&gt;    &lt;li&gt;I5 processor &lt;/li&gt;    &lt;li&gt;Dual graphics – dedicated when you need it then drops back automatically to use integrated for lower power use &lt;/li&gt;    &lt;li&gt;Wireless N / Bluetooth &lt;/li&gt;    &lt;li&gt;Reasonable battery life – 5 hours &lt;/li&gt;    &lt;li&gt;SSD drive is awesome &lt;/li&gt;    &lt;li&gt;Comes with a really nice set of active noise cancelling bud-style headphones &lt;/li&gt;    &lt;li&gt;Keyboard looks gimmicky – but actually works really well, has a really solid feel, possibly the best laptop keyboard I’ve used. This was really quite a surprise.&lt;/li&gt;    &lt;li&gt;Ambient light detector used to automatically set screen brightness (and optionally backlights keyboard) – works really well in our dimly lit apartment or when working near a window during the day. &lt;/li&gt;    &lt;li&gt;HDMI connection to 1920 x 1080 monitor – including sound (though the monitor I bought has ridiculously terrible speakers).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cons&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Doesn’t read original memory sticks – it has a MagicGate slot – presumable only takes the Duo format? &lt;/li&gt;    &lt;li&gt;Its expensive when you can get a lot of &lt;em&gt;reasonable&lt;/em&gt; laptops for around half the price.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.spencen.com/images/83489-72989/VPCZ112GXS_1_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="VPCZ112GXS_1" border="0" alt="VPCZ112GXS_1" src="http://blog.spencen.com/images/83489-72989/VPCZ112GXS_1_thumb.png" width="383" height="243" /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>General</category><comments>http://blog.spencen.com/2010/04/06/new-laptop-ndash-sony-z-series.aspx#Comments</comments><guid isPermaLink="false">513ba997-204a-4862-8334-3fcbfb7c0944</guid><pubDate>Tue, 06 Apr 2010 03:08:45 GMT</pubDate></item></channel></rss>