<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8681136</id><updated>2012-02-16T21:17:40.652+11:00</updated><category term='Me'/><category term='Life'/><category term='Vista'/><category term='User Interface'/><category term='Computers'/><category term='iPhone'/><category term='Internet'/><category term='Ninjas'/><category term='Date'/><category term='Work'/><category term='Everything'/><category term='Programming'/><category term='French'/><title type='text'>Infinite Improbability</title><subtitle type='html'>n. \ˈdrīv\ : A strong motivating tendency or instinct related to self-preservation, reproduction, or aggression that prompts activity toward a particular end.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default?start-index=101&amp;max-results=100'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>119</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8681136.post-7837297580746730239</id><published>2011-05-31T18:09:00.001+10:00</published><updated>2011-05-31T18:35:40.717+10:00</updated><title type='text'>Delivery</title><content type='html'>&lt;p&gt;Two weekends ago, we had a luverly delivery in the office…&lt;/p&gt;  &lt;p&gt;I took the cabinet in and we set it up!&lt;/p&gt;  &lt;p&gt;I just fits in the patrol:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-xhr0hu__gz8/TeSoWMCel0I/AAAAAAAABe0/iT33eGDf7SA/s1600-h/_MG_1886%25255B9%25255D.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="_MG_1886" border="0" alt="_MG_1886" src="http://lh6.ggpht.com/-jvHQyzNxBr8/TeSoW8Py4vI/AAAAAAAABe4/MoaNAKsSlJ0/_MG_1886_thumb%25255B1%25255D.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh4.ggpht.com/-Qcj33Eu1Qzw/TeSiCyVU0WI/AAAAAAAABdk/ArOdPsrrsls/s1600-h/_MG_1887%25255B3%25255D.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="_MG_1887" border="0" alt="_MG_1887" src="http://lh5.ggpht.com/-XZeX9siZ-kQ/TeSiDUfbUxI/AAAAAAAABdo/Ykx9ORiirlw/_MG_1887_thumb.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-JXg7Ta51mjY/TeSiEQ7g3AI/AAAAAAAABds/pQCY6cjn6O0/s1600-h/in%252520the%252520lobby%25255B4%25255D.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="in the lobby" border="0" alt="in the lobby" src="http://lh4.ggpht.com/-q3dAt5EWOPk/TeSiFOD3_-I/AAAAAAAABd0/HfT4aNabC4k/in%252520the%252520lobby_thumb%25255B1%25255D.jpg?imgmax=800" width="633" height="242" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Connecting up with Han and Boba looking on:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-j7rKFqw7-lI/TeSiF0ptSeI/AAAAAAAABd4/yPak5xfJHl0/s1600-h/_MG_1901%25255B3%25255D.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="_MG_1901" border="0" alt="_MG_1901" src="http://lh6.ggpht.com/-cbV9hu2WZWw/TeSiGtxb4JI/AAAAAAAABd8/n14ED5__-20/_MG_1901_thumb.jpg?imgmax=800" width="164" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh4.ggpht.com/-rutNKoKxQAI/TeSiIA17iWI/AAAAAAAABeA/LGeC8hGk868/s1600-h/_MG_1902%25255B3%25255D.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="_MG_1902" border="0" alt="_MG_1902" src="http://lh5.ggpht.com/-0-AAzPWoF3Y/TeSiIxP14LI/AAAAAAAABeE/LSaWaBSOzbc/_MG_1902_thumb.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/-nnE7L0bjmpw/TeSiJhcf42I/AAAAAAAABeI/XPFdoYBb0Sc/s1600-h/_MG_1904%25255B3%25255D.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="_MG_1904" border="0" alt="_MG_1904" src="http://lh5.ggpht.com/-w3epo8FdVvU/TeSiKc37n6I/AAAAAAAABeM/q8GDHPXT3i0/_MG_1904_thumb.jpg?imgmax=800" width="164" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And finally, the &lt;strong&gt;very first game&lt;/strong&gt;. (In the office.) Which was 1943!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-s6cC3IVK_eo/TeSiLJiHZwI/AAAAAAAABeQ/14QlLaPjd6M/s1600-h/_MG_1907%25255B3%25255D.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="_MG_1907" border="0" alt="_MG_1907" src="http://lh5.ggpht.com/-LEr74JBlB7s/TeSiLgKqbnI/AAAAAAAABeU/2tFaZERcx7k/_MG_1907_thumb.jpg?imgmax=800" width="244" height="164" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/-H29yKHy3twg/TeSiMl7c_kI/AAAAAAAABeY/7QWJ5v7tQtI/s1600-h/_MG_1906%25255B3%25255D.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="_MG_1906" border="0" alt="_MG_1906" src="http://lh6.ggpht.com/-oDREPWKwcv4/TeSiNAUBDBI/AAAAAAAABec/OX0SSMblM6Q/_MG_1906_thumb.jpg?imgmax=800" width="164" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh4.ggpht.com/-4nvAl9xDhM4/TeSiN8NclkI/AAAAAAAABeg/cVo0h1YKF3E/s1600-h/_MG_1909%25255B3%25255D.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="_MG_1909" border="0" alt="_MG_1909" src="http://lh3.ggpht.com/-3eKCPD8lvH4/TeSiOgzMdjI/AAAAAAAABek/eVlgX_9e_CA/_MG_1909_thumb.jpg?imgmax=800" width="164" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2 align="center"&gt;The End.&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-p0ZdtxjR0Ug/TeSiPaNGFOI/AAAAAAAABeo/dpQuc1Blfpc/s1600-h/joy%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="joy" border="0" alt="joy" src="http://lh6.ggpht.com/-HBBxsK8b3Tw/TeSiQLvVjzI/AAAAAAAABes/1PbD8qKhVyQ/joy_thumb.jpg?imgmax=800" width="244" height="172" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7837297580746730239?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7837297580746730239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/delivery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7837297580746730239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7837297580746730239'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/delivery.html' title='Delivery'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-jvHQyzNxBr8/TeSoW8Py4vI/AAAAAAAABe4/MoaNAKsSlJ0/s72-c/_MG_1886_thumb%25255B1%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6675610380667216034</id><published>2011-05-21T19:46:00.001+10:00</published><updated>2011-05-21T19:46:24.288+10:00</updated><title type='text'>Complete!</title><content type='html'>&lt;p&gt;That’s it. It is done. Just moved it to my place and tried it connected up to a TV for the first time. Looks and sounds awesome. Here are a couple of pic of the last things I had to complete, the drawer slide, and the handles:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/TdeJzZSzs_I/AAAAAAAABck/UV4DKdFhnyo/s1600-h/DSCN2464%5B3%5D.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="DSCN2464" border="0" alt="DSCN2464" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/TdeJ0ILAWDI/AAAAAAAABco/9A30wytzIz0/DSCN2464_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/TdeJ0u4isHI/AAAAAAAABcs/xz-oP97Z-rk/s1600-h/DSCN2462%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="DSCN2462" border="0" alt="DSCN2462" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TdeJ1ZBpnzI/AAAAAAAABcw/KxdzZM73t94/DSCN2462_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And here, for the final time in the workshop, is the finished cabinet, complete with control deck:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TdeJ2nSFVBI/AAAAAAAABc0/hToESlbqRpc/s1600-h/DSCN2465%5B4%5D.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="DSCN2465" border="0" alt="DSCN2465" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/TdeJ3aG_mzI/AAAAAAAABc4/lVLuXz3_8Vk/DSCN2465_thumb%5B1%5D.jpg?imgmax=800" width="585" height="440" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;Mic helped me bring it over. We had a quick session of 1943, Raiden, Galaga, Mortal Combat and Double Dragon.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TdeJ4t1HZZI/AAAAAAAABc8/ixplebJtemM/s1600-h/IMG_1520%5B3%5D.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="IMG_1520" border="0" alt="IMG_1520" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TdeJ5XxcV_I/AAAAAAAABdA/rboQGJ3iou8/IMG_1520_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TdeJ6kpZdAI/AAAAAAAABdE/qga-XqeW2kA/s1600-h/IMG_1518%5B3%5D.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="IMG_1518" border="0" alt="IMG_1518" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TdeJ7fYyQVI/AAAAAAAABdI/FnKKIDxHmUM/IMG_1518_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I have to fiddle with the control mappings a little tonight and then it will be in the office at 1300 hours tomorrow.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TdeJ78HfWiI/AAAAAAAABdM/Cl7-EVN1hBw/wlEmoticon-smile%5B2%5D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6675610380667216034?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6675610380667216034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/complete.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6675610380667216034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6675610380667216034'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/complete.html' title='Complete!'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_r1kDJNjQh8Q/TdeJ0ILAWDI/AAAAAAAABco/9A30wytzIz0/s72-c/DSCN2464_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-279543211557925771</id><published>2011-05-21T19:21:00.001+10:00</published><updated>2011-05-21T19:21:01.008+10:00</updated><title type='text'>Cable Porn</title><content type='html'>&lt;p&gt;Hard-core wiring action, you can see its cable ties!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TdeD6mOlvuI/AAAAAAAABcM/fLNne511ixE/s1600-h/DSCN2460%5B13%5D.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="DSCN2460" border="0" alt="DSCN2460" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TdeD7ZnpXTI/AAAAAAAABcQ/ZQNXYMkaHDE/DSCN2460_thumb%5B4%5D.jpg?imgmax=800" width="373" height="281" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TdeD8ixzm6I/AAAAAAAABcU/2u0PqE6U1vc/s1600-h/DSCN2461%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="DSCN2461" border="0" alt="DSCN2461" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TdeD9JwithI/AAAAAAAABcY/MkdtVUdNQxo/DSCN2461_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TdeD-Co6b2I/AAAAAAAABcc/MSgm79JwpxM/s1600-h/DSCN2459%5B3%5D.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="DSCN2459" border="0" alt="DSCN2459" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TdeD_MmxVJI/AAAAAAAABcg/Jy8GYCvPZwI/DSCN2459_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-279543211557925771?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/279543211557925771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/cable-porn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/279543211557925771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/279543211557925771'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/cable-porn.html' title='Cable Porn'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_r1kDJNjQh8Q/TdeD7ZnpXTI/AAAAAAAABcQ/ZQNXYMkaHDE/s72-c/DSCN2460_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2559571308862110229</id><published>2011-05-15T12:06:00.001+10:00</published><updated>2011-05-15T12:06:21.197+10:00</updated><title type='text'>All done bar the handles.</title><content type='html'>&lt;p&gt;Worked on hardware installation yesterday.&lt;/p&gt;  &lt;p&gt;Completed the doors, drawer and latches:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/Tc81A4jk5aI/AAAAAAAABbs/zgMtfeuzPsg/s1600-h/DSCN2457%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="DSCN2457" border="0" alt="DSCN2457" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/Tc81BxCghXI/AAAAAAAABbw/LUgvFbqkpHE/DSCN2457_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/Tc81DLc3zwI/AAAAAAAABb0/NtWn5YZNyDY/s1600-h/DSCN2454%5B3%5D.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="DSCN2454" border="0" alt="DSCN2454" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/Tc81Dv-s4GI/AAAAAAAABb4/t-mKs355w94/DSCN2454_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/Tc81Er7Ta_I/AAAAAAAABb8/Ts0MALoM9tM/s1600-h/DSCN2453%5B3%5D.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="DSCN2453" border="0" alt="DSCN2453" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/Tc81FUdZieI/AAAAAAAABcA/8Qob0qMA_Wg/DSCN2453_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;Attached the deck to the top frame:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/Tc81GFNd56I/AAAAAAAABcE/1yT20UcmuHY/s1600-h/DSCN2455%5B3%5D.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="DSCN2455" border="0" alt="DSCN2455" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/Tc81HGGdm9I/AAAAAAAABcI/DUA735zMxl4/DSCN2455_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;One day this week I will pop over and put one last coat on the outside. Another evening will be given over to wiring in the spinner and the trackball. Then next Sunday is MAME inauguration day – I’ll put the handles on the doors and the drawer in the morning, then drive the thing over to the office for a bit of a Sunday arvo MAME Party! &lt;/p&gt;  &lt;p&gt;Woohoo!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2559571308862110229?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2559571308862110229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/all-done-bar-handles.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2559571308862110229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2559571308862110229'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/all-done-bar-handles.html' title='All done bar the handles.'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_r1kDJNjQh8Q/Tc81BxCghXI/AAAAAAAABbw/LUgvFbqkpHE/s72-c/DSCN2457_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6766299539952136637</id><published>2011-05-12T22:53:00.000+10:00</published><updated>2011-05-14T06:31:32.159+10:00</updated><title type='text'>Last weekend…</title><content type='html'>&lt;p&gt;Just a pictorial update of the work I did last weekend. (Got a chance to take a photo just now)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TcvYLBoqt6I/AAAAAAAABbg/SikxWE-vS00/s1600-h/DSCN2450%5B4%5D.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="DSCN2450" border="0" alt="DSCN2450" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TcvYL2ar59I/AAAAAAAABbk/tQh8V0l9GNM/DSCN2450_thumb%5B1%5D.jpg?imgmax=800" width="532" height="400" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Oh yeah. It’s black!&lt;/p&gt;  &lt;p&gt;The doors and drawer front are just balancing in their positions… That is pretty much all that needs to happen this weekend: hinges, drawer slides and base, handles, attach the deck to the top frame.&lt;/p&gt;  &lt;p&gt;Last night I completed the control wiring for the sticks and buttons, spinner and trackball to go – will need to break out the soldering iron for those. I also had a bit of an issue with the I-PAC controller but after a &lt;em&gt;super&lt;/em&gt; fast response from Andy at Ultimarc it looks like it is a case of pebkac and rtfm. Will fix that after the weekend and should be able to deliver to the office the following weekend. The TV might even be on the wall by then… perhaps &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TcvYMrfHBOI/AAAAAAAABbo/oGNDHFeJ2Lo/wlEmoticon-smile%5B2%5D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6766299539952136637?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6766299539952136637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/last-weekend.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6766299539952136637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6766299539952136637'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/last-weekend.html' title='Last weekend…'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_r1kDJNjQh8Q/TcvYL2ar59I/AAAAAAAABbk/tQh8V0l9GNM/s72-c/DSCN2450_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4656355368998938797</id><published>2011-05-03T21:44:00.001+10:00</published><updated>2011-05-03T21:44:23.181+10:00</updated><title type='text'>Wiring harness</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/Tb_qbZB_hcI/AAAAAAAABao/5f0Ss5OvWaA/s1600-h/DSCN2440%5B4%5D.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="DSCN2440" border="0" alt="DSCN2440" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/Tb_qcUmJ2sI/AAAAAAAABas/4idubROcx5E/DSCN2440_thumb%5B1%5D.jpg?imgmax=800" width="428" height="570" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Got started on the wiring harness last night, did a little more tonight. I have the common ground for all the microswitches in and the active wires in for the player one controls:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/Tb_qduUb4GI/AAAAAAAABaw/6BqFLIWNKWg/s1600-h/DSCN2438%5B3%5D.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="DSCN2438" border="0" alt="DSCN2438" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/Tb_qep07BII/AAAAAAAABa0/Ohcz1UxQEnA/DSCN2438_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/Tb_qfrcpCmI/AAAAAAAABa4/Fe-tdbu2F-0/s1600-h/DSCN2439%5B3%5D.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="DSCN2439" border="0" alt="DSCN2439" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/Tb_qgtKWL6I/AAAAAAAABa8/qIAlfVraPTI/DSCN2439_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I took a couple more close-ups of the top side of the control deck. The player one controls, the spinner and the trackball, and the coin button!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/Tb_qiMtL3cI/AAAAAAAABbA/GfI6fd6bTkw/s1600-h/DSCN2446%5B3%5D.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="DSCN2446" border="0" alt="DSCN2446" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/Tb_qjOTuyiI/AAAAAAAABbE/2NmMsfjxJiE/DSCN2446_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/Tb_qkUA7qRI/AAAAAAAABbI/UORUDGZ7Zmg/s1600-h/DSCN2442%5B3%5D.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="DSCN2442" border="0" alt="DSCN2442" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/Tb_qlbFQroI/AAAAAAAABbM/tB5jGWs8CYI/DSCN2442_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;With the player one all wired in I can now try the deck out. I am just tidying up the machine that will be running the emulator, getting the rubbish off it, and getting MAME and the controller configuration programs on.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4656355368998938797?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4656355368998938797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/wiring-harness.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4656355368998938797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4656355368998938797'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/wiring-harness.html' title='Wiring harness'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_r1kDJNjQh8Q/Tb_qcUmJ2sI/AAAAAAAABas/4idubROcx5E/s72-c/DSCN2440_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6473716124577316999</id><published>2011-05-01T21:42:00.001+10:00</published><updated>2011-05-01T21:42:55.816+10:00</updated><title type='text'>Buttons</title><content type='html'>&lt;p&gt;What better to do while watching television? Buttons!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/Tb1HNtRYbFI/AAAAAAAABag/Bx1MB0S6-kA/s1600-h/DSCN2436%5B4%5D.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="DSCN2436" border="0" alt="DSCN2436" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/Tb1HPK4MVGI/AAAAAAAABak/isdVCmE7LUc/DSCN2436_thumb%5B1%5D.jpg?imgmax=800" width="637" height="479" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6473716124577316999?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6473716124577316999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/buttons.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6473716124577316999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6473716124577316999'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/buttons.html' title='Buttons'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_r1kDJNjQh8Q/Tb1HPK4MVGI/AAAAAAAABak/isdVCmE7LUc/s72-c/DSCN2436_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5797917579759299644</id><published>2011-05-01T18:53:00.001+10:00</published><updated>2011-05-01T18:53:52.327+10:00</updated><title type='text'>Putty, Paint and Perspiration</title><content type='html'>&lt;p&gt;First thing this afternoon was a couple of small jobs that I didn’t get time for when I was working on that part of the build. That is, the door and drawer front trim pieces, and the routed bit to get the joysticks a bit higher out of the deck surface:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/Tb0feI-t8ZI/AAAAAAAABZ4/wInhiodS-zk/s1600-h/DSCN2431%5B7%5D.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="DSCN2431" border="0" alt="DSCN2431" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/Tb0ffIqvXOI/AAAAAAAABZ8/jFQE8zZ6GDE/DSCN2431_thumb%5B1%5D.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/Tb0fgJYRVHI/AAAAAAAABaA/5BJcRzSOMNc/s1600-h/DSCN2432%5B3%5D.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="DSCN2432" border="0" alt="DSCN2432" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/Tb0fg-aVoLI/AAAAAAAABaE/aTS3_kWlucY/DSCN2432_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then, after a bit of putty work and a lot of sanding… Paint! I have grey primer on the whole of the outside and the edges:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/Tb0fiX6LEgI/AAAAAAAABaI/Sdf0EVtNC_s/s1600-h/DSCN2433%5B3%5D.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="DSCN2433" border="0" alt="DSCN2433" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/Tb0fjShERTI/AAAAAAAABaM/9UTm1e9prGw/DSCN2433_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/Tb0fk9R30_I/AAAAAAAABaQ/ON273Hj2SsI/s1600-h/DSCN2434%5B3%5D.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="DSCN2434" border="0" alt="DSCN2434" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/Tb0flhGXHwI/AAAAAAAABaU/S8LiiuGClVA/DSCN2434_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I got a good thick coat on because I want to give it a really light sand so the black coat rolls on nice and smooth. The edges certainly take a lot of paint.&lt;/p&gt;  &lt;p&gt;The last thing that I did just after I got home was to finish cutting out the holes in the vinyl for the buttons and other controls:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/Tb0fm2u8IsI/AAAAAAAABaY/DzgtP5I0jT0/s1600-h/DSCN2435%5B3%5D.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="DSCN2435" border="0" alt="DSCN2435" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/Tb0fn_cTnUI/AAAAAAAABac/alHG668ywYA/DSCN2435_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Awesome. It feels almost complete. I have the computer at work now. This week I can put in the buttons and get to wiring them up and configuring the controllers.&lt;/p&gt;  &lt;p&gt;Not long now!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5797917579759299644?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5797917579759299644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/putty-paint-and-perspiration.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5797917579759299644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5797917579759299644'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/05/putty-paint-and-perspiration.html' title='Putty, Paint and Perspiration'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_r1kDJNjQh8Q/Tb0ffIqvXOI/AAAAAAAABZ8/jFQE8zZ6GDE/s72-c/DSCN2431_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1970687395395215007</id><published>2011-04-24T23:10:00.001+10:00</published><updated>2011-04-25T21:09:36.968+10:00</updated><title type='text'>There’s a hole…</title><content type='html'>&lt;p&gt;First things first, small modifications to the plan, including nutting out the spacing for the top buttons. Actually, there were also “on the job” mods to the spacing around the spinner that I have incorporated here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TbQhNe75XfI/AAAAAAAABY4/kZgnClDVU3I/s1600-h/ScreenShot100%5B3%5D.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="ScreenShot100" border="0" alt="ScreenShot100" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TbQhOfsJkhI/AAAAAAAABY8/PZcyiGDiQJw/ScreenShot100_thumb%5B1%5D.png?imgmax=800" width="571" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The idea with the control sets is that they are centred about the midpoint between the stick and the first buttons. They are equally spaced between the sets on that centre, with a little extra for the centre sets (player 1 and 2). It does look like the right most set is closer to the edge than the leftmost, but the centres are the same distance – when you are standing in the playing position you feel like you are all pretty evenly spaced.&lt;/p&gt;  &lt;p&gt;Day two this weekend, holes marked out and centre punched:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TbQhPQ3jd1I/AAAAAAAABZA/LXv1IQKeOrc/s1600-h/DSCN2425%5B16%5D.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="DSCN2425" border="0" alt="DSCN2425" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/TbQhQAhfh1I/AAAAAAAABZE/4eK9vNPyFJU/DSCN2425_thumb%5B4%5D.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TbVWbM4IhII/AAAAAAAABZw/Rb8GeIT1pco/s1600-h/DSCN2426%5B8%5D.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="DSCN2426" border="0" alt="DSCN2426" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TbVWbzT-KGI/AAAAAAAABZ0/BQABN1CJYpo/DSCN2426_thumb%5B4%5D.jpg?imgmax=800" width="252" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Drilling them out in sets, 28mm for the buttons and the spinner, 16mm for the joysticks, one 24mm for the coin button, and a large one at 86mm for the trackball I did with the jigsaw:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TbQhSZnAZRI/AAAAAAAABZQ/xwTiGvkO38Y/s1600-h/DSCN2427%5B3%5D.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="DSCN2427" border="0" alt="DSCN2427" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/TbQhS6yI88I/AAAAAAAABZU/YzQWnHLbY-M/DSCN2427_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/TbQhToHtTpI/AAAAAAAABZY/qQl9fuA7q3o/s1600-h/DSCN2428%5B4%5D.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="DSCN2428" border="0" alt="DSCN2428" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TbQhUTOlygI/AAAAAAAABZc/_INOfEulC_w/DSCN2428_thumb%5B1%5D.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here is a shot of all them holes:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TbQhVF48y-I/AAAAAAAABZg/JrCi7e20wbc/s1600-h/DSCN2429%5B3%5D.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="DSCN2429" border="0" alt="DSCN2429" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TbQhWLaKobI/AAAAAAAABZk/OCgdPjJNmzI/DSCN2429_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After a dust off and a shop clean-up I got out the vinyl and the t-moulding for a nice, neat finish to the day:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TbQhW-FOY0I/AAAAAAAABZo/-HEzL17R8gk/s1600-h/DSCN2430%5B3%5D.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="DSCN2430" border="0" alt="DSCN2430" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TbQhXTeIJ7I/AAAAAAAABZs/CIe9dRqij_U/DSCN2430_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1970687395395215007?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1970687395395215007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/04/theres-hole.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1970687395395215007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1970687395395215007'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/04/theres-hole.html' title='There’s a hole…'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_r1kDJNjQh8Q/TbQhOfsJkhI/AAAAAAAABY8/PZcyiGDiQJw/s72-c/ScreenShot100_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-678319134339837004</id><published>2011-04-23T22:02:00.001+10:00</published><updated>2011-04-23T22:02:13.044+10:00</updated><title type='text'>Top and a lick of paint</title><content type='html'>&lt;p&gt;First thing completed today was the console deck frame:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TbK_ky2B3KI/AAAAAAAABX8/_PO2xoG40sY/s1600-h/DSCN2419%5B3%5D.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="DSCN2419" border="0" alt="DSCN2419" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TbK_liJMNuI/AAAAAAAABYA/cpP320um_-w/DSCN2419_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TbK_meF1JnI/AAAAAAAABYE/h0LGQDPoyU0/s1600-h/DSCN2418%5B3%5D.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="DSCN2418" border="0" alt="DSCN2418" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/TbK_njyfcCI/AAAAAAAABYI/67aPLo-9QPA/DSCN2418_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TbK_orPVBeI/AAAAAAAABYM/vu3W2VEwECw/s1600-h/DSCN2420%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="DSCN2420" border="0" alt="DSCN2420" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TbK_pRpyMaI/AAAAAAAABYQ/egnmTACBeQw/DSCN2420_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/TbK_qNJJdjI/AAAAAAAABYU/W53G6RBTK2I/s1600-h/DSCN2421%5B3%5D.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="DSCN2421" border="0" alt="DSCN2421" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TbK_q5Q0CRI/AAAAAAAABYY/_5F5zBRshNA/DSCN2421_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then there was a bit of clean-up of the edges to be done, they are planed flush with the sides.&lt;/p&gt;  &lt;p&gt;With the frame complete the top can be measured exactly and cut to size. I marked up some layout lines on the control surface, and freehanded some curves on the front:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TbK_sCB-w_I/AAAAAAAABYc/Htun2oRlBiE/s1600-h/DSCN2422%5B3%5D.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="DSCN2422" border="0" alt="DSCN2422" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/TbK_sydq1aI/AAAAAAAABYg/-_SHxI0GBog/DSCN2422_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The last thing today was the slot for the t-moulding, and I painted the edge of the top in preparation for the application of the top vinyl – the last step before I can make the holes and cut-outs for the controls, after that I can take the top home and wire up the controls at home.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TbK_tkA6LtI/AAAAAAAABYk/Gn3Tj9XSc7Q/s1600-h/DSCN2423%5B3%5D.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="DSCN2423" border="0" alt="DSCN2423" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TbK_uXQ9C1I/AAAAAAAABYo/EZOZVU8MxFo/DSCN2423_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Feels good to get a bit of paint on the thing &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TbK_vOU-pgI/AAAAAAAABYs/xeEHbEQLd2o/wlEmoticon-smile%5B2%5D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p&gt;Next time will be marking out and drilling for the controls, here is the layout for the deck:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TbK_wIg4RXI/AAAAAAAABYw/5Q6iQQa9si4/s1600-h/ScreenShot099%5B4%5D.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="ScreenShot099" border="0" alt="ScreenShot099" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TbK_w7BpAOI/AAAAAAAABY0/9aRuXXEtTBk/ScreenShot099_thumb%5B2%5D.png?imgmax=800" width="568" height="305" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-678319134339837004?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/678319134339837004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/04/top-and-lick-of-paint.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/678319134339837004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/678319134339837004'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/04/top-and-lick-of-paint.html' title='Top and a lick of paint'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_r1kDJNjQh8Q/TbK_liJMNuI/AAAAAAAABYA/cpP320um_-w/s72-c/DSCN2419_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2211357738552045202</id><published>2011-04-03T19:11:00.001+10:00</published><updated>2011-04-03T19:11:44.151+10:00</updated><title type='text'>Heavy…</title><content type='html'>&lt;p&gt;Made some good progress today. I Got the front panels on as you can see here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TZg5pfYsKEI/AAAAAAAABXM/u8JKlJjpQng/s1600-h/DSCN2411%5B3%5D.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="DSCN2411" border="0" alt="DSCN2411" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZg5qZG1DRI/AAAAAAAABXQ/MfdoesHv4JE/DSCN2411_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZg5rWAVNEI/AAAAAAAABXU/QuztNUVT4Hk/s1600-h/DSCN2410%5B3%5D.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="DSCN2410" border="0" alt="DSCN2410" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TZg5sKrUyFI/AAAAAAAABXY/PtQXINCq9CE/DSCN2410_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZg5tJQOQuI/AAAAAAAABXc/geX0Z31FbE8/s1600-h/DSCN2412%5B3%5D.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="DSCN2412" border="0" alt="DSCN2412" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZg5t1pP2KI/AAAAAAAABXg/BPNvIFtIQ3o/DSCN2412_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;I have the extra bracing from front to back (double width drawer sides) in also. The pocket screws hold the angle join nicely, very solid.&lt;/p&gt;  &lt;p&gt;After a late lunch break I finished off the rail around the top, 50mm down from the edge, that the console deck frame will sit on:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/TZg5vUOSo4I/AAAAAAAABXk/_nPAlKrWIYk/s1600-h/DSCN2414%5B3%5D.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="DSCN2414" border="0" alt="DSCN2414" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TZg5wEDEECI/AAAAAAAABXo/ECwHrQHEPRo/DSCN2414_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TZg5w8taeKI/AAAAAAAABXs/xxqTKpj-RVQ/s1600-h/ScreenShot098%5B2%5D.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="ScreenShot098" border="0" alt="ScreenShot098" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TZg5x0l68lI/AAAAAAAABXw/aXbEIsmc_cY/ScreenShot098_thumb.png?imgmax=800" width="244" height="150" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The rail part at the front (the long piece that you see above, plan one the right) is by far the most fiddly piece that I have had to do. With all the adjustments that I am having to make because of the 19mm ply I ended up doing them by marking up the piece off the assembled part of the job. Fits just fine.&lt;/p&gt;  &lt;p&gt;So here is where we are at now:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZg5zK7ajFI/AAAAAAAABX0/M9PnD5Yl5jw/s1600-h/DSCN2413%5B3%5D.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="DSCN2413" border="0" alt="DSCN2413" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZg5z4nTJDI/AAAAAAAABX4/_MZ3SkH_XR4/DSCN2413_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And I can &lt;em&gt;just&lt;/em&gt; lift it without putting my back out. Mostly because of the shape and no hand holds rather than the sheer weight, so I reckon that it must weigh in about 30kg. You can push it over if you try, but then again, you can push a fridge over as well.&lt;/p&gt;  &lt;p&gt;I’ve left it up on the saw horses (75cm dead lift, great way to finish the day) for a couple of minor glue ups – there were a couple of out of square corners that I needed to patch up a bit.&lt;/p&gt;  &lt;p&gt;Next weekend: Measuring up for the top. Will try to get the deck panel cut out and holes drilled so I can bring it home and work on the wiring over the following week. Should be able to do that and get some of the console deck frame started.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2211357738552045202?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2211357738552045202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/04/heavy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2211357738552045202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2211357738552045202'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/04/heavy.html' title='Heavy…'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_r1kDJNjQh8Q/TZg5qZG1DRI/AAAAAAAABXQ/MfdoesHv4JE/s72-c/DSCN2411_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5435523793453699186</id><published>2011-03-29T21:56:00.001+11:00</published><updated>2011-03-29T21:56:00.692+11:00</updated><title type='text'>Buttons and other stuff</title><content type='html'>&lt;p&gt;I didn’t work all night tonight, so I took the opportunity to take some shots of the arcade hardware that I will be using. Here is the spread:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZG6lVPkthI/AAAAAAAABWc/iL8SEnVNxqc/s1600-h/DSCN2401%5B3%5D.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="DSCN2401" border="0" alt="DSCN2401" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZG6mGXV9DI/AAAAAAAABWg/6wkyuLfTso0/DSCN2401_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So we have the main buttons, player 1 and 2 are going to be red v blue, 2 and 3 will be green and orange:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TZG6ndXr5nI/AAAAAAAABWk/P9miwtgLHtg/s1600-h/DSCN2402%5B3%5D.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="DSCN2402" border="0" alt="DSCN2402" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZG6oV7gjFI/AAAAAAAABWo/Tk5GYz2D2Go/DSCN2402_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There are some nice 1up, 2up, 3up and 4up buttons, also in this shot you can see the I-PAC and the OptiPAC – these are the keyboard emulator for the buttons (including joysticks) and the controller for the spinner and the trackball:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/TZG6pnCAcjI/AAAAAAAABWs/K1zQG0eVNYY/s1600-h/DSCN2404%5B3%5D.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="DSCN2404" border="0" alt="DSCN2404" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TZG6qdKuZTI/AAAAAAAABWw/iqoSws_j67c/DSCN2404_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The joysticks are Sanwa are feel really great:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TZG6rTIcWkI/AAAAAAAABW0/AYxs2Tfc8jU/s1600-h/DSCN2406%5B3%5D.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="DSCN2406" border="0" alt="DSCN2406" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TZG6sAhQu1I/AAAAAAAABW4/rBpfsf_WOeU/DSCN2406_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Other than that there is the spinner, and the (huge) trackball:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TZG6tPmruNI/AAAAAAAABW8/4elEs7pHP-s/s1600-h/DSCN2408%5B3%5D.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="DSCN2408" border="0" alt="DSCN2408" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TZG6uEK4WqI/AAAAAAAABXA/PKHZ5FB1e4k/DSCN2408_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;One neat find from OzStick is the coin button:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TZG6u_244cI/AAAAAAAABXE/rf6GX7Ai6E4/s1600-h/DSCN2409%5B3%5D.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="DSCN2409" border="0" alt="DSCN2409" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TZG6v4TI7KI/AAAAAAAABXI/MIgzBppLia8/DSCN2409_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The buttons came with pretty good micro-switches. In the overview you can also see the hook-up wire, spade connectors, the various bits of mounting hardware and the couple of USB cables. There are also 4 other white buttons, 8 black buttons, and 8 yellow buttons that I will probably put near the rotary controls (need at least a couple to the left of the trackball). Looking forward to getting the deck top cut out so I can wire up the switches and test out the controller boards. Must be patient though – need to measure the exact size once the console is built up.&lt;/p&gt;  &lt;p&gt;Bring on the weekend! (Plan is to get the front panels on, the rest of the top rail in and maybe get the doors on.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5435523793453699186?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5435523793453699186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/03/buttons-and-other-stuff.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5435523793453699186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5435523793453699186'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/03/buttons-and-other-stuff.html' title='Buttons and other stuff'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_r1kDJNjQh8Q/TZG6mGXV9DI/AAAAAAAABWg/6wkyuLfTso0/s72-c/DSCN2401_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-730256888386949810</id><published>2011-03-26T13:16:00.003+11:00</published><updated>2011-03-26T15:29:10.453+11:00</updated><title type='text'>Vote 1 MAME</title><content type='html'>&lt;p&gt;Just a small update today. After having to do my civic duty and throw my vote away I only had a couple of hours this morning to work in the shop.&lt;/p&gt;  &lt;p&gt;I made the sides, which have a chamfered edge to accommodate the front panels:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TY1MavddEQI/AAAAAAAABWE/9DQUdzp_aus/s1600-h/DSCN2395%5B3%5D.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="DSCN2395" border="0" alt="DSCN2395" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TY1Mb2vZztI/AAAAAAAABWI/gXXfPHz7xIc/DSCN2395_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TY1Mc8pFPiI/AAAAAAAABWM/neQo94gr0tM/s1600-h/DSCN2396%5B7%5D.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="DSCN2396" border="0" alt="DSCN2396" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/TY1MdyvTuwI/AAAAAAAABWQ/nfM8sUCbTXY/DSCN2396_thumb%5B1%5D.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Due to the problem with two of three sheets of the ply being 19mm rather than 17mm, the piece that I had roughed out for the front panels is not going to be suitable – the doors and other door frame parts are 19mm which would leave the doors 2mm proud or would have them inset to sit flush which I don't care for either. Unfortunately, the only piece that I have left of the 19mm that is big enough for the front panels has the grain running in the direction that would be up and down the panel, i.e. along the bend, not around the bend… I had a go of bending the sheet in that way, but it is just far too brittle.&lt;/p&gt;  &lt;p&gt;I am going the have to go with a corner there after all. Back to sketchup then to figure out the exact dimensions.&lt;/p&gt;  &lt;p&gt;Here is an overview of today’s progress (short day, but at least I did get to use a hand plane… mmm):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TY1MfdYiiPI/AAAAAAAABWU/qCxbhL5oJKA/s1600-h/DSCN2398%5B3%5D.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="DSCN2398" border="0" alt="DSCN2398" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TY1MjsitRcI/AAAAAAAABWY/SII4iPv737Y/DSCN2398_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, GO VOTE!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-730256888386949810?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/730256888386949810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/03/vote-1-mame.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/730256888386949810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/730256888386949810'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/03/vote-1-mame.html' title='Vote 1 MAME'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_r1kDJNjQh8Q/TY1Mb2vZztI/AAAAAAAABWI/gXXfPHz7xIc/s72-c/DSCN2395_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-8676079749060166401</id><published>2011-03-20T21:02:00.001+11:00</published><updated>2011-03-20T21:02:11.393+11:00</updated><title type='text'>Sunday is MAME day!</title><content type='html'>&lt;p&gt;Managed to spend about 5 hours in the workshop today.&lt;/p&gt;  &lt;p&gt;Did some test bends for the front case elements. In doing so I discovered that not all of the 17mm ply sheets are 17mm thick. Two of them are 19mm! This will put all of the measurements out, but I should been able to adjust most of them as I work. The main thing that I can’t adjust now is that the base with the sides attached will be 2mm wider on each side… I will be able to get back a little bit when I assemble it and I am hoping that the rest is taken up by the thickness of the t-moulding when applied. In the end, the whole thing is painted anyway so you are not going to be able to see small gaps in the joinery, and they could be filled anyway.&lt;/p&gt;  &lt;p&gt;I am a bit disappointed with the quality of the ply. It is certainly better than Bunnings (they can’t even supply flat stock), but this is no furniture grade stuff. I have future projects planned that will use ply finished like regular timber, and this stuff with great pink putty filled gouges and scallops of veneer patches even before you start is not what I would expect for $71 a sheet. Looks like you have to really go for the BB (this is CD) which is over $100 a sheet.&lt;/p&gt;  &lt;p&gt;Anyway, pics or it didn’t happen…&lt;/p&gt;  &lt;p&gt;This is what I got done today:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TYXQglGXMJI/AAAAAAAABVM/T83LBbNpNOI/s1600-h/DSCN2394%5B3%5D.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="DSCN2394" border="0" alt="DSCN2394" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TYXQhe3_S6I/AAAAAAAABVQ/0qIA4Qj10hI/DSCN2394_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What you see here is the base (completed last week) now joined to the back with its console deck support rail and the inner frame. The hole at the bottom is where the doors will be, the one at the top is the drawer. The whole thing is pretty sturdy already, with the front and sides attached it is going to be a solid unit. Definitely a two person lift. Anyone know how big the elevator is? (Just btw…)&lt;/p&gt;  &lt;p&gt;Here is the plan overview for this stage (oriented for easy comparison):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TYXQiKqRKNI/AAAAAAAABVU/ujRNXM2_nuo/s1600-h/ScreenShot097%5B2%5D.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="ScreenShot097" border="0" alt="ScreenShot097" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TYXQjGhxHEI/AAAAAAAABVY/rVZZZE5_COU/ScreenShot097_thumb.png?imgmax=800" width="244" height="206" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A couple of joinery close-ups. The cross pieces are what will hold the shape of the assembled cabinet, and are securely joined with 4 pocket screws each:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TYXQkN7Z5SI/AAAAAAAABVc/QMnfwXWCT_E/s1600-h/DSCN2390%5B3%5D.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="DSCN2390" border="0" alt="DSCN2390" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TYXQlC29KYI/AAAAAAAABVg/TVES4Ru83C0/DSCN2390_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can also see there the flush cabinet screws I am using where I can – here on the back rail, and also to join the base to the back from underneath. There could be quite a bit of load on the members that the doors attach to, so they are a composite joined in an L shape:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TYXQl1PE8mI/AAAAAAAABVk/CUGocn_E46Q/s1600-h/DSCN2392%5B3%5D.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="DSCN2392" border="0" alt="DSCN2392" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TYXQmoCvhZI/AAAAAAAABVo/iDS7rp5URhI/DSCN2392_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Probably with far too many pocket screws :) Here is a small detail of how the front part of the frame connects to the front-to-back members:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TYXQnmrJBQI/AAAAAAAABVs/QwtZRfqyZn4/s1600-h/DSCN2393%5B3%5D.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="DSCN2393" border="0" alt="DSCN2393" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TYXQojW5EEI/AAAAAAAABVw/VL3Zt43fozw/DSCN2393_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Fastener placement has been working out ok so far. I didn’t really plan the screw joints at all, just the joinery joints so, so far so good. The pocket screws are really good to use, they are pretty easy to get in. With the impact driver they are quick to go in even with one hand, and they are nice and tight when the joint is edge to face – they are less secure edge to edge, I do have some slightly longer screws though that I have used once or twice when the first one hogs the hole out too much. (They are too long for an edge to face join though – the point will come out of the opposite face)&lt;/p&gt;  &lt;p&gt;So, what’s next? Well I don’t have a lot of time next weekend, but having done the bend test today I might be able to attach the sides and front bent elements on Saturday morning.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-8676079749060166401?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/8676079749060166401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/03/sunday-is-mame-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8676079749060166401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8676079749060166401'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/03/sunday-is-mame-day.html' title='Sunday is MAME day!'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_r1kDJNjQh8Q/TYXQhe3_S6I/AAAAAAAABVQ/0qIA4Qj10hI/s72-c/DSCN2394_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1561230133541715262</id><published>2011-03-13T22:08:00.001+11:00</published><updated>2011-03-13T22:22:16.989+11:00</updated><title type='text'>MAME Cabinet</title><content type='html'>&lt;p&gt;Have been working on a MAME project for use in the break room at work. I have a mass of buttons, joysticks, switches, wire and other electronics. I also went out an bought plywood and other hardware. I have made a plan in SketchUp over several design iterations.&lt;/p&gt;  &lt;p&gt;I broke down the three plywood sheets last weekend to get them to more manageable sizes. Today I made a few design tweaks and got started on the construction for real. Here is a pic of the very first completed component part. It is the base panel:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TXylgoz87-I/AAAAAAAABT8/_7jYzd2DDV4/s1600-h/DSCN2381%5B3%5D.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="DSCN2381" border="0" alt="DSCN2381" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TXylhQSM4mI/AAAAAAAABUA/YyqC5O_ba6U/DSCN2381_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can see the roughly cut pieces for the top, front and doors behind the saw, and the other remaining ply on the right.&lt;/p&gt;  &lt;p&gt;Here is most of the other hardware that I will be using:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TXyli83KZtI/AAAAAAAABUE/0dpVV398UTQ/s1600-h/DSCN2386%5B3%5D.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="DSCN2386" border="0" alt="DSCN2386" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TXyljRMlefI/AAAAAAAABUI/L0xtX2yjNkE/DSCN2386_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Left to right you can see the latches that will hold the control console down to the base, the slides for the keyboard drawer, hinges for the front doors, various screws for joining the ply and attaching the other hardware, including some Kreg screws for pocket screwing, and of course it has got to be black!&lt;/p&gt;  &lt;p&gt;Here is an overview of the design (the left door is hidden as is the keyboard drawer front to give a bit of a view inside:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TXylkS-wU0I/AAAAAAAABUM/YIK9BkNWq30/s1600-h/ScreenShot091%5B2%5D.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="ScreenShot091" border="0" alt="ScreenShot091" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TXylkzYXxsI/AAAAAAAABUQ/_P5ydGoYJN4/ScreenShot091_thumb.png?imgmax=800" width="244" height="192" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The front is indicated as an angled join but it will be a kerf bend in the actual piece, the front ‘corners’ of the control deck will also be curved rather then exactly as indicated. Here is a closer view of the main player control spacing:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TXyllq947aI/AAAAAAAABUU/lDhsmmeGp7I/s1600-h/ScreenShot092%5B2%5D.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="ScreenShot092" border="0" alt="ScreenShot092" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/TXylmV15m-I/AAAAAAAABUY/wyNQlzQHGeQ/ScreenShot092_thumb.png?imgmax=800" width="244" height="137" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The final positions of the trackball and spinner are yet to be decided. There will be a row of button along the back edge of the deck for coin drop, 1up to 4up, start, etc. etc.&lt;/p&gt;  &lt;p&gt;Most of the joints will be concealed pocket screws, visible in this shot of the first two pieces actually to be joined together:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_r1kDJNjQh8Q/TXylnvwmKYI/AAAAAAAABUc/kNDPUybBSjA/s1600-h/DSCN2383%5B3%5D.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="DSCN2383" border="0" alt="DSCN2383" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TXyloUMsDhI/AAAAAAAABUg/hmAEx4870e0/DSCN2383_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After today’s session, the base is complete, here is an underside view showing the box bracing:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/TXylpToxGXI/AAAAAAAABUk/fy8meHzaNIE/s1600-h/DSCN2385%5B3%5D.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="DSCN2385" border="0" alt="DSCN2385" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/TXylqHqFo4I/AAAAAAAABUo/AcEOZ7wb9AI/DSCN2385_thumb.jpg?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here it is on the floor:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TXylrlHnOvI/AAAAAAAABUs/cDHBCzX-Ey8/s1600-h/DSCN2388%5B3%5D.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="DSCN2388" border="0" alt="DSCN2388" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/TXylsPS4iwI/AAAAAAAABUw/9ntSMzR2IkE/DSCN2388_thumb.jpg?imgmax=800" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The cabinet back needs to go on next, and then the inner frame can be constructed in place and after that the front skin panels, which reach to the floor concealing the spaces in the box work underneath the base.&lt;/p&gt;  &lt;p&gt;Lastly, here is the reasonably final construction diagram for the next piece of work – the internal frame and back. (What is missing is a cross piece for the drawer to close against, the short members at the top of where the sides should go I forgot to delete from the diagram, they are no longer needed as I removed a bent member across the top of the front to make the construction a bit simpler).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/TXyltRLAQII/AAAAAAAABU0/npf4PkLnUKM/s1600-h/ScreenShot093%5B2%5D.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="ScreenShot093" border="0" alt="ScreenShot093" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/TXyluUmCtoI/AAAAAAAABU4/OUr3zH1A388/ScreenShot093_thumb.png?imgmax=800" width="244" height="237" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Stay tuned for more updates, including some shots of the buttons, sticks, trackball, spinner, keyboard emulator, rotary control boards…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1561230133541715262?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1561230133541715262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/03/mame-cabinet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1561230133541715262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1561230133541715262'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2011/03/mame-cabinet.html' title='MAME Cabinet'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_r1kDJNjQh8Q/TXylhQSM4mI/AAAAAAAABUA/YyqC5O_ba6U/s72-c/DSCN2381_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3157292531182254935</id><published>2009-05-28T10:39:00.001+10:00</published><updated>2009-05-28T10:56:10.236+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>TomTom sucks for customisation.</title><content type='html'>&lt;p&gt;I recently emailed TomTom technical support stating that I was a software developer (and TomTom owner) interested in writing software for the TomTom device. I wanted to know where to get the SDK that they did have available up to about 1 year ago but now seems to have disappeared. This was their response:&lt;/p&gt;  &lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage"&gt;     &lt;pre&gt;Dear Mr Clark,

Thank you for your query. Your incident reference number is 090526-001861.

Unfortunately the Software Development Kit is no longer available from TomTom.

Please note that we are unable to offer any technical support for 3rd party add ons or software tools used in conjunction with your TomTom device.

Best Regards,

David A

TomTom Customer Support&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Damn that sucks. What is with companies that want to keep you locked down to the software they make on a device that you own. They don’t even sell the navcore, they make nothing from it – they sell the hardware and the maps! It should only increase the value of the device and maps if there is more software available, and the cost to them of releasing their SDK would be minimal. Pretty short sighted if you ask me.&lt;/p&gt;

&lt;p&gt;There are lots of little software projects that are now dead in the water due to the lack of an SDK for the latest version.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3157292531182254935?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3157292531182254935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/05/tomtom-sucks-for-customisation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3157292531182254935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3157292531182254935'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/05/tomtom-sucks-for-customisation.html' title='TomTom sucks for customisation.'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5237889435986832997</id><published>2009-05-26T10:35:00.001+10:00</published><updated>2009-05-27T14:28:37.498+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>How to make images look disabled (greyed out) when the Button or MenuItem they are within is disabled in WPF</title><content type='html'>&lt;p&gt;By default in WPF image controls that are within disabled menus and buttons will not be greyed out. One common way to achieve a standard look is to apply a style to the image that will cause it to be partially transparent when its parent is disabled. You create a style with &lt;span class="command"&gt;TargetType &lt;/span&gt;of &lt;span class="command"&gt;Image &lt;/span&gt;that is a &lt;span class="command"&gt;Setter &lt;/span&gt;for the &lt;span class="command"&gt;Opacity &lt;/span&gt;property with a &lt;span class="command"&gt;Style.Trigger &lt;/span&gt;bound to the &lt;span class="command"&gt;IsEnabled &lt;/span&gt;property of the image's parent (via &lt;span class="command"&gt;RelativeSource&lt;/span&gt;). (Code later...) I made two triggers initially, as some of my &lt;span class="command"&gt;Image&lt;/span&gt;s are in &lt;span class="command"&gt;Button&lt;/span&gt;s and some are in &lt;span class="command"&gt;MenuItem&lt;/span&gt;s. &lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://lh6.ggpht.com/_r1kDJNjQh8Q/Shy-Jc1sFjI/AAAAAAAABRU/cdnW16yhc-Q/s800/DisabledImages.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;Just looking at my output window, I noticed a whole bunch of errors when the UI was coming up, some like this:&lt;/p&gt;  &lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage"&gt;     &lt;pre&gt;System.Windows.Data Error: 4 : Cannot find source for binding with reference 
'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.MenuItem', 
AncestorLevel='1''. BindingExpression:Path=IsEnabled; DataItem=null; target 
element is 'Image' (Name=''); target property is 'NoTarget' (type 'Object')&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And others like this: 
  &lt;br /&gt;&lt;/p&gt;

&lt;div class="errormessage-wrapper"&gt;
  &lt;div class="errormessage"&gt;
    &lt;pre&gt;System.Windows.Data Error: 4 : Cannot find source for binding with reference 
'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Button', 
AncestorLevel='1''. BindingExpression:Path=IsEnabled; DataItem=null; target 
element is 'Image' (Name=''); target property is 'NoTarget' (type 'Object') &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Thinking about it for a second, you can see that both of the style triggers will get applied to each image. For each image one will work and one will fail - there can only be one type for the parent element, &lt;span class="command"&gt;Button &lt;/span&gt;or &lt;span class="command"&gt;MenuItem &lt;/span&gt;not both. It is a silent failure so could just be lived with but I wanted to fix it. &lt;/p&gt;

&lt;p&gt;First I was trying to find a way to choose which trigger to apply depending on the type of the parent*. I know you could remove the &lt;span class="command"&gt;TargetType &lt;/span&gt;from the style and apply it as a named style to each element, but that just becomes a mess. The whole idea of this solution is to make at as simple to use as possible - basically just letting it modify the behaviour of all images. The real solution of course is to realise that the &lt;span class="command"&gt;IsEnabled &lt;/span&gt;property is not a member of &lt;span class="command"&gt;Button &lt;/span&gt;nor &lt;span class="command"&gt;MenuItem &lt;/span&gt;directly, but it is on the &lt;span class="command"&gt;UIElement &lt;/span&gt;class. &lt;/p&gt;

&lt;p&gt;The fix then is to have only one &lt;span class="command"&gt;Style.Trigger &lt;/span&gt;with the &lt;span class="command"&gt;AncestorType &lt;/span&gt;of &lt;span class="command"&gt;UIElement&lt;/span&gt;:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&amp;lt;Style TargetType=&lt;span class="str"&gt;&amp;quot;{x:Type Image}&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &amp;lt;Style.Triggers&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &amp;lt;DataTrigger Binding=&lt;span class="str"&gt;&amp;quot;{Binding RelativeSource={RelativeSource AncestorType={x:Type UIElement}, AncestorLevel=1}, Path=IsEnabled}&amp;quot;&lt;/span&gt; Value=&lt;span class="str"&gt;&amp;quot;False&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            &amp;lt;Setter Property=&lt;span class="str"&gt;&amp;quot;Opacity&amp;quot;&lt;/span&gt; Value=&lt;span class="str"&gt;&amp;quot;0.3&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/Setter&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &amp;lt;/DataTrigger&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &amp;lt;/Style.Triggers&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;lt;/Style&amp;gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;* I would still like to know how to do this, but that will have to wait until another time when I really do need to do it. No time!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5237889435986832997?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5237889435986832997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/05/how-to-make-images-look-disabled-greyed.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5237889435986832997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5237889435986832997'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/05/how-to-make-images-look-disabled-greyed.html' title='How to make images look disabled (greyed out) when the Button or MenuItem they are within is disabled in WPF'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_r1kDJNjQh8Q/Shy-Jc1sFjI/AAAAAAAABRU/cdnW16yhc-Q/s72-c/DisabledImages.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-7672785347048915209</id><published>2009-05-26T10:27:00.001+10:00</published><updated>2009-05-27T14:58:57.554+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Programmatically changing TreeViewItem IsSelected fails to set IsFocused</title><content type='html'>&lt;p&gt;I was having an odd problem with the IsSelected property of &lt;span class="command"&gt;TreeViewItem&lt;/span&gt;s. After adding an item and setting its &lt;span class="command"&gt;IsSelected &lt;/span&gt;property, the originally selected item is no longer selectable.&lt;/p&gt;  &lt;p&gt;I am using the &lt;span class="command"&gt;Model-View-ViewModel &lt;/span&gt;pattern and a &lt;span class="command"&gt;HierarchicalDataTemplate &lt;/span&gt;to bind a &lt;span class="command"&gt;TreeView&lt;/span&gt;. The &lt;span class="command"&gt;ItemsSource &lt;/span&gt;is an &lt;span class="command"&gt;ObservableCollection&lt;/span&gt;. I noticed that when I added a new item to the collection (making it &lt;span class="command"&gt;IsExpanded &lt;/span&gt;and &lt;span class="command"&gt;IsSelected&lt;/span&gt;) it was added fine and was selected, but the parent item was no longer selectable. Any other item in the &lt;span class="command"&gt;TreeView &lt;/span&gt;was selectable, and if you select one then the parent was again selectable, but right after the &lt;span class="command"&gt;Add &lt;/span&gt;on the collection it was broken.&lt;/p&gt;  &lt;p&gt;Seems to be a known problem: the &lt;span class="command"&gt;IsFocused &lt;/span&gt;property is not updated when you change &lt;span class="command"&gt;IsSelected &lt;/span&gt;via code. I am a little surprised that it is also not kept up to date when you set it via a binding… but I guess in the end binding is just code that you didn’t have to write yourself. Hopefully someone, somewhere will decide that this is indeed a bug so I can remove the event handler that I have put in place as a workaround*&lt;/p&gt;  &lt;p&gt;Sample reproduction code:&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&amp;lt;Window x:Class=&lt;span class="str"&gt;&amp;quot;WpfApplication1.Window1&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    xmlns=&lt;span class="str"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    xmlns:x=&lt;span class="str"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    xmlns:local=&lt;span class="str"&gt;&amp;quot;clr-namespace:WpfApplication1;assembly=&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    Title=&lt;span class="str"&gt;&amp;quot;Window1&amp;quot;&lt;/span&gt; Height=&lt;span class="str"&gt;&amp;quot;300&amp;quot;&lt;/span&gt; Width=&lt;span class="str"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &amp;lt;Window.CommandBindings&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &amp;lt;CommandBinding Command=&lt;span class="str"&gt;&amp;quot;{x:Static local:Window1.AddChildItem}&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;                            CanExecute=&lt;span class="str"&gt;&amp;quot;AddChildItem_CanExecute&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;                            Executed=&lt;span class="str"&gt;&amp;quot;AddChildItem_Executed&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &amp;lt;/Window.CommandBindings&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &amp;lt;Window.Resources&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &amp;lt;HierarchicalDataTemplate DataType=&lt;span class="str"&gt;&amp;quot;{x:Type local:Item}&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;                                  ItemsSource=&lt;span class="str"&gt;&amp;quot;{Binding Children}&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            &amp;lt;TextBlock&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;                &amp;lt;TextBlock Text=&lt;span class="str"&gt;&amp;quot;Name -&amp;gt; &amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                &amp;lt;TextBlock Text=&lt;span class="str"&gt;&amp;quot;{Binding ItemName}&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;                &amp;lt;TextBox&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            &amp;lt;/TextBlock&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &amp;lt;/HierarchicalDataTemplate&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &amp;lt;Style TargetType=&lt;span class="str"&gt;&amp;quot;{x:Type TreeViewItem}&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;            &amp;lt;!-- property bindings --&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            &amp;lt;Setter Property=&lt;span class="str"&gt;&amp;quot;IsExpanded&amp;quot;&lt;/span&gt; Value=&lt;span class="str"&gt;&amp;quot;{Binding IsExpanded, Mode=TwoWay}&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;            &amp;lt;Setter Property=&lt;span class="str"&gt;&amp;quot;IsSelected&amp;quot;&lt;/span&gt; Value=&lt;span class="str"&gt;&amp;quot;{Binding IsSelected, Mode=TwoWay}&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            &amp;lt;!-- Workaround: Keep the IsFocused property up to date when the IsSelected property changes --&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;            &amp;lt;EventSetter Event=&lt;span class="str"&gt;&amp;quot;Selected&amp;quot;&lt;/span&gt; Handler=&lt;span class="str"&gt;&amp;quot;TreeViewItem_Selected&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &amp;lt;/Style&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &amp;lt;/Window.Resources&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &amp;lt;DockPanel LastChildFill=&lt;span class="str"&gt;&amp;quot;True&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &amp;lt;ToolBarTray DockPanel.Dock=&lt;span class="str"&gt;&amp;quot;Top&amp;quot;&lt;/span&gt; Height=&lt;span class="str"&gt;&amp;quot;21&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            &amp;lt;ToolBar&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;                &amp;lt;Button Command=&lt;span class="str"&gt;&amp;quot;{x:Static local:Window1.AddChildItem}&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                    &amp;lt;TextBlock Text=&lt;span class="str"&gt;&amp;quot;Add&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;                &amp;lt;/Button&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            &amp;lt;/ToolBar&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &amp;lt;/ToolBarTray&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &amp;lt;TreeView Name=&lt;span class="str"&gt;&amp;quot;tv1&amp;quot;&lt;/span&gt; ItemsSource=&lt;span class="str"&gt;&amp;quot;{Binding Items}&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &amp;lt;/TreeView&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &amp;lt;/DockPanel&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;lt;/Window&amp;gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.ObjectModel;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Input;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; WpfApplication1 {&lt;/pre&gt;

    &lt;pre class="alteven"&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; Window1 : Window {&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; ObservableCollection&amp;lt;Item&amp;gt; _items = &lt;span class="kwrd"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;Item&amp;gt;();&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; ObservableCollection&amp;lt;Item&amp;gt; Items {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _items; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&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; RoutedCommand AddChildItem = &lt;span class="kwrd"&gt;new&lt;/span&gt; RoutedCommand(&lt;span class="str"&gt;&amp;quot;AddChildItem&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Window1));&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Window1() {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            InitializeComponent();&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;            _items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Item { ItemName = &lt;span class="str"&gt;&amp;quot;One&amp;quot;&lt;/span&gt; });&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            _items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Item { ItemName = &lt;span class="str"&gt;&amp;quot;Two&amp;quot;&lt;/span&gt; });&lt;/pre&gt;

    &lt;pre class="alt"&gt;            _items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Item { ItemName = &lt;span class="str"&gt;&amp;quot;Three&amp;quot;&lt;/span&gt; });&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.DataContext = &lt;span class="kwrd"&gt;this&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddChildItem_CanExecute(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, CanExecuteRoutedEventArgs e) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt;(tv1 != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; tv1.SelectedItem != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                e.CanExecute = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alt"&gt;            }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddChildItem_Executed(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ExecutedRoutedEventArgs e) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt;(tv1.SelectedItem != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                (tv1.SelectedItem &lt;span class="kwrd"&gt;as&lt;/span&gt; Item).AddChildItem();&lt;/pre&gt;

    &lt;pre class="alt"&gt;            }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="rem"&gt;// Without this event handler you will see the problem&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TreeViewItem_Selected(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e){&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            TreeViewItem tvi = e.OriginalSource &lt;span class="kwrd"&gt;as&lt;/span&gt; TreeViewItem;&lt;/pre&gt;

    &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt;(tvi != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !tvi.IsFocused) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                tvi.Focus();&lt;/pre&gt;

    &lt;pre class="alt"&gt;            }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;    }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Item : INotifyPropertyChanged {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _itemName = &lt;span class="str"&gt;&amp;quot;New Item&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ItemName {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _itemName; }&lt;/pre&gt;

    &lt;pre class="alt"&gt;            set { _itemName = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; ObservableCollection&amp;lt;Item&amp;gt; _children = &lt;span class="kwrd"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;Item&amp;gt;();&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; ObservableCollection&amp;lt;Item&amp;gt; Children {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _children; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; Item _parent = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Item Parent {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _parent; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Item() : &lt;span class="kwrd"&gt;this&lt;/span&gt;(&lt;span class="kwrd"&gt;null&lt;/span&gt;) { }&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; Item(Item parent) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            _parent = parent;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AddChildItem() {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            Item i = &lt;span class="kwrd"&gt;new&lt;/span&gt; Item(&lt;span class="kwrd"&gt;this&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alt"&gt;            _children.Add(i);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            i.IsSelected = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; _isSelected;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsSelected {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _isSelected; }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            set {&lt;/pre&gt;

    &lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt;(_isSelected != &lt;span class="kwrd"&gt;value&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                    _isSelected = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alt"&gt;                    OnPropertyChanged(&lt;span class="str"&gt;&amp;quot;IsSelected&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                }&lt;/pre&gt;

    &lt;pre class="alt"&gt;            }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; _isExpanded = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsExpanded {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _isExpanded; }&lt;/pre&gt;

    &lt;pre class="alt"&gt;            set {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt;(_isExpanded != &lt;span class="kwrd"&gt;value&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;                    _isExpanded = &lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt;(_isExpanded &amp;amp;&amp;amp; _parent != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;                        _parent.IsExpanded = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                    }&lt;/pre&gt;

    &lt;pre class="alt"&gt;                    OnPropertyChanged(&lt;span class="str"&gt;&amp;quot;IsExpanded&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                }&lt;/pre&gt;

    &lt;pre class="alt"&gt;            }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="preproc"&gt;#region&lt;/span&gt; INotifyPropertyChanged Members&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnPropertyChanged(&lt;span class="kwrd"&gt;string&lt;/span&gt; propertyName) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt;.PropertyChanged != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.PropertyChanged(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyChangedEventArgs(propertyName));&lt;/pre&gt;

    &lt;pre class="alt"&gt;            }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        }&lt;/pre&gt;

    &lt;pre class="alt"&gt;    }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Just Comment out the call to &lt;span class="command"&gt;Focus &lt;/span&gt;to see the problem.&lt;/p&gt;

&lt;p&gt;Of note also is the fact that you must set &lt;span class="command"&gt;IsSelected &lt;/span&gt;&lt;em&gt;after&lt;/em&gt; the new item is inserted into the visual tree. For me that meant a small refactor (seen in the example in &lt;span class="command"&gt;AddChildItem&lt;/span&gt;) to create the item, add it to the collection then set its &lt;span class="command"&gt;IsSelected &lt;/span&gt;property rather than creating it with &lt;span class="command"&gt;IsSelected &lt;/span&gt;already set to true. Otherwise it seems that the call to &lt;span class="command"&gt;Focus &lt;/span&gt;fails.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;* I.e. my code was all nice and separated, I was not handling any TreeView or TreeViewItem events, it was all done with &lt;em&gt;smoke and mirrors&lt;/em&gt;** in a layer between the UI and the BO&lt;/p&gt;

&lt;p&gt;** Data binding&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7672785347048915209?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7672785347048915209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/05/programmatically-changing-treeviewitem.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7672785347048915209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7672785347048915209'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/05/programmatically-changing-treeviewitem.html' title='Programmatically changing TreeViewItem IsSelected fails to set IsFocused'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6429835525225567050</id><published>2009-04-09T08:40:00.001+10:00</published><updated>2009-04-09T08:40:59.278+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Tweet Delete?</title><content type='html'>&lt;p&gt;Ack! all of my twitterings since over a month ago have disappeared!&lt;/p&gt;  &lt;p&gt;I feel lost! They were only silly irrelevant mutterings for the most part, but they were &lt;em&gt;my&lt;/em&gt; silly irrelevant mutterings and I trusted you to store them!&lt;/p&gt;  &lt;p&gt;I have logged a ticket with twitter, hopefully they will return from the void…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6429835525225567050?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6429835525225567050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/04/tweet-delete.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6429835525225567050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6429835525225567050'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/04/tweet-delete.html' title='Tweet Delete?'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1344425772467860531</id><published>2009-04-08T14:17:00.001+10:00</published><updated>2009-04-08T14:17:27.965+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Page.IsAsync broken on ASP.Net MVC</title><content type='html'>&lt;p&gt;I was just trying to add a condition to my validation code so it would not run when the page was asynchronously posted (my controls were getting highlighted as an error before the user has even had the chance to enter any values because of some ajax that was updating another area of the page), but I found that the Page.IsAsync member is always false.&lt;/p&gt;  &lt;p&gt;I managed to find another member that you can access via the ScriptManager:&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;ScriptManager.GetCurrent(Page).IsInAsyncPostBack&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;
Which seems to work.  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1344425772467860531?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1344425772467860531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/04/pageisasync-broken-on-aspnet-mvc.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1344425772467860531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1344425772467860531'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/04/pageisasync-broken-on-aspnet-mvc.html' title='Page.IsAsync broken on ASP.Net MVC'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-7036807509303229490</id><published>2009-03-18T11:50:00.001+11:00</published><updated>2009-05-27T15:00:23.443+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>TextChanged event of TextBox not raised by the Internet Explorer AutoComplete feature</title><content type='html'>&lt;p&gt;As noted in this msdn article, &lt;a href="http://support.microsoft.com/kb/873198"&gt;The TextChanged event of a TextBox control may not fire if the AutoComplete feature is enabled in Internet Explorer&lt;/a&gt;. And it appears to be “by design” – I hate that.&lt;/p&gt;  &lt;p&gt;Fortunately, it is pretty easy to add some JavaScript to make the ‘right thing’ happen.&lt;/p&gt;  &lt;p&gt;All you need to do is raise the &lt;span class="command"&gt;onchange &lt;/span&gt;event at the appropriate time. For me that is when the &lt;span class="command"&gt;TextBox &lt;/span&gt;loses focus. As I am doing this from code behind (as usual) I am registering a client script, then when I add the &lt;span class="command"&gt;TextBox &lt;/span&gt;I set its &lt;span class="command"&gt;onblur &lt;/span&gt;attribute accordingly:&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;Page.ClientScript.RegisterClientScriptBlock(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(FormPage), &lt;span class="str"&gt;&amp;quot;RaiseOnChange&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;function RaiseOnChange(ctrl){ctrl.fireEvent('onchange');}&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;tb.Attributes[HtmlAttributes.OnBlur] = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;RaiseOnChange({0})&amp;quot;&lt;/span&gt;, tb.UniqueID);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The server side &lt;span class="command"&gt;TextChanged &lt;/span&gt;event only gets raised if the &lt;span class="command"&gt;TextBox.Value &lt;/span&gt;has really changed. I needed to do this because I am using the &lt;span class="command"&gt;TextChanged &lt;/span&gt;event of some &lt;span class="command"&gt;TextBox &lt;/span&gt;controls to trigger an &lt;span class="command"&gt;asyncpostback &lt;/span&gt;to update an &lt;span class="command"&gt;UpdatePanel&lt;/span&gt;. The code that sets the content of the &lt;span class="command"&gt;UpdatePanel &lt;/span&gt;is in the server side &lt;span class="command"&gt;TextChanged &lt;/span&gt;handler.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7036807509303229490?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7036807509303229490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/textchanged-event-of-textbox-not-raised.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7036807509303229490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7036807509303229490'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/textchanged-event-of-textbox-not-raised.html' title='TextChanged event of TextBox not raised by the Internet Explorer AutoComplete feature'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-396209456393474775</id><published>2009-03-13T10:35:00.001+11:00</published><updated>2009-03-13T10:38:35.980+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Quoted strings</title><content type='html'>&lt;p&gt;I posted something about this once before, but having just given myself a headache trying to fix something similar once again I feel like writing some more.&lt;/p&gt;  &lt;p&gt;Using the quote delimiter character inside of a quoted string at always a minor problem. There are two ways you can fix it – you can escape the quote &lt;em&gt;using whatever method is valid at the time*&lt;/em&gt; or you can change the type of quote delimiter, i.e. you can switch from &lt;span class="command"&gt;&amp;quot;&lt;/span&gt; to &lt;span class="command"&gt;'&lt;/span&gt; or vice-versa. There is a deeper problem though that is only really seen when you are not just embedding a delimiter in a string, but (as seems to be often the case with web development) when you are passing such a string to someone or something else. Say for example you are writing ASP.Net code behind to output a &lt;span class="command"&gt;__doPostback &lt;/span&gt;where one of the arguments is a string with an embedded delimiter. The string in .Net code will be delimited (say with &lt;span class="command"&gt;&amp;quot;&lt;/span&gt;) then the argument to &lt;span class="command"&gt;__doPostback&lt;/span&gt; will also be delimited (say with &lt;span class="command"&gt;'&lt;/span&gt;) but then the data in that string might contain &lt;span class="command"&gt;'&lt;/span&gt; (e.g. &lt;span class="command"&gt;O'Neil&lt;/span&gt;) which will have to be escaped.&lt;/p&gt;  &lt;p&gt;My exact situation this time was slightly more complicated still – I have three levels of indirection! I am in c# code behind, setting the &lt;span class="command"&gt;.Text &lt;/span&gt;property on a Telerik &lt;span class="command"&gt;DataGridItem &lt;/span&gt;to be an html anchor tag which will do a postback. So the .Net string is delimited (with &lt;span class="command"&gt;&amp;quot;&lt;/span&gt; naturally), the &lt;span class="command"&gt;onclick &lt;/span&gt;of the a tag is delimited (with &lt;span class="command"&gt;&amp;quot;&lt;/span&gt; also by convention, so escaped for .Net as &lt;span class="command"&gt;\&amp;quot;&lt;/span&gt;), the argument to the &lt;span class="command"&gt;__doPostback &lt;/span&gt;function is delimited (with &lt;span class="command"&gt;'&lt;/span&gt; because there is no way of escaping nested &lt;span class="command"&gt;&amp;quot;&lt;/span&gt; characters for html) and &lt;em&gt;finally&lt;/em&gt; the data in that argument might have &lt;span class="command"&gt;'&lt;/span&gt; characters so it needs to be escaped (by &lt;span class="command"&gt;\'&lt;/span&gt;)! And certain parts need to be &lt;span class="command"&gt;UrlEncode&lt;/span&gt;d also, but &lt;em&gt;before&lt;/em&gt; you put in the &lt;span class="command"&gt;\'&lt;/span&gt; escaping or else you will &lt;span class="command"&gt;UrlEncode &lt;/span&gt;the &lt;span class="command"&gt;\&lt;/span&gt; character. *Hum*&lt;/p&gt;   &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;item[colName].Text = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;&amp;lt;a href=\&amp;quot;#\&amp;quot; onclick=\&amp;quot;__doPostBack('', '{1}{0}{2}')\&amp;quot;&amp;gt;{3}&amp;lt;/a&amp;gt;&amp;quot;&lt;/span&gt;, QueryString.PostBackArgSep, postbackType, item[colName].Text.Replace(&lt;span class="str"&gt;&amp;quot;'&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;\\'&amp;quot;&lt;/span&gt;), item[colName].Text);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;hr /&gt;
&lt;p&gt;* Mmm, yes. Whatever method is valid at the time. This is not always straight forward with some situations calling for &lt;span class="command"&gt;\&lt;/span&gt; to give &lt;span class="command"&gt;\'&lt;/span&gt; or &lt;span class="command"&gt;\&amp;quot;&lt;/span&gt;, some for a doubling up of the offending character giving &lt;span class="command"&gt;''&lt;/span&gt; or &lt;span class="command"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, or even for escaping to be impossible in the current context, leaving you with only the ability to switch delimiters. This last problem with why I try to stick with &lt;span class="command"&gt;&amp;quot;&lt;/span&gt; as the delimiter most of the time and escaping where required rather than the simpler change to &lt;span class="command"&gt;'&lt;/span&gt; so as to save the other character for situations where it is the only method (e.g. html). I think that it is probably possible to get yourself into a situation where there is no possible way to pass the string ‘down the line’ as it were without breaking something. If that happens either you need to encode and decode the whole string somewhere, or admit that you are doing something the hard way and find the right way to do it… I &lt;em&gt;almost&lt;/em&gt; think that is what is going on here with my current problem – I think it could be solved by keeping the information that I am passing through to &lt;span class="command"&gt;__doPostback &lt;/span&gt;somewhere else and just passing a key to it to the code I am calling, but I don’t have the time to do that right now, and this form will be soon superseded by an ASP.Net MVC version.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-396209456393474775?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/396209456393474775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/quoted-strings.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/396209456393474775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/396209456393474775'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/quoted-strings.html' title='Quoted strings'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-416819698619826923</id><published>2009-03-04T10:05:00.001+11:00</published><updated>2009-03-04T10:12:34.401+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Virtual Root (~) gives 404 error</title><content type='html'>We had a server reboot after a power failure yesterday, and this morning an ASP.NET application that has been working for months started giving this error:   &lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage_ie"&gt;&lt;span&gt;       &lt;h1&gt;Server Error in '/' Application.          &lt;hr width="100%" color="#c0c0c0" size="1" /&gt;&lt;/h1&gt;        &lt;h2&gt;&lt;i&gt;The resource cannot be found.&lt;/i&gt; &lt;/h2&gt;     &lt;/span&gt;&lt;font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif "&gt;&lt;b&gt;Description: &lt;/b&gt;HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.&amp;#160; Please review the following URL and make sure that it is spelled correctly.         &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Requested URL: &lt;/b&gt;/~/direct.aspx         &lt;br /&gt;        &lt;br /&gt;        &lt;hr width="100%" color="#c0c0c0" size="1" /&gt;&lt;b&gt;Version Information:&lt;/b&gt; Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082 &lt;/font&gt;&lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Seems to me that it is not translating the ~ into the Application Root path, but I am at a loss as to why. I have posted a question about the &lt;a href="http://groups.google.com/group/microsoft.public.dotnet.framework.aspnet/browse_thread/thread/7ef613739948922e#"&gt;~ virtual root giving a 404&lt;/a&gt; on the ASP.NET newsgroup, but as is often the case with these WTF kind of posts I am not really expecting a response…&lt;/p&gt;  &lt;p&gt;It was easily ‘fixed’ by just making the form action use the absolute path to the aspx file, but I want to know why it is broken.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-416819698619826923?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/416819698619826923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/virtual-root-gives-404-error.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/416819698619826923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/416819698619826923'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/virtual-root-gives-404-error.html' title='Virtual Root (~) gives 404 error'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-7069537186870659255</id><published>2009-03-03T14:22:00.001+11:00</published><updated>2009-03-04T10:21:11.882+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Telerik RadUploadProgressHandler and ASP.NET MVC</title><content type='html'>&lt;p&gt;Just ran into a small problem with the Telerik &lt;span class="command"&gt;radUpload &lt;/span&gt;control and ASP.NET MVC.&lt;/p&gt;  &lt;p&gt;The upload progress needs to have a &lt;span class="command"&gt;httpHandler &lt;/span&gt;and &lt;span class="command"&gt;httpModule &lt;/span&gt;configured in &lt;span class="command"&gt;Web.config&lt;/span&gt; for it to work correctly – I think it is that which handles the GUID that it tacks onto the end of the url to maintain state (among other things). The path is normally &lt;span class="command"&gt;Telerik.RadUploadProgressHandler.ashx &lt;/span&gt;but with MVC this will be routed to a controller and the handler will not be found.&lt;/p&gt;  &lt;p&gt;I have added an exclusion to my &lt;span class="command"&gt;Global.asax.cs&lt;/span&gt; file and it seems to work.&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;routes.IgnoreRoute(&lt;span class="str"&gt;&amp;quot;Telerik.RadUploadProgressHandler.ashx/{*pathInfo}&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Remains to be seen if this is the right way to do it or if there is anything else wrong, but for now I am just trying to get two existing web applications merged together as one MVC application. A lot of the stuff that those apps are doing is not “correct” from a MVC point of view, but this is version 0.9 :)&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;[Edit] Meh. Don’t need to do that. There are instructions on the Telerik site for &lt;a href="http://www.telerik.com/help/aspnet-ajax/mvc-using-upload.html"&gt;how to configure the httpHandler for RadUpload under ASP.NET MVC&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7069537186870659255?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7069537186870659255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/telerik-raduploadprogresshandler-and.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7069537186870659255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7069537186870659255'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/telerik-raduploadprogresshandler-and.html' title='Telerik RadUploadProgressHandler and ASP.NET MVC'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3840196315934657902</id><published>2009-03-03T08:50:00.001+11:00</published><updated>2009-03-03T08:50:37.771+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>Shake to do something</title><content type='html'>&lt;p&gt;What? That has to be &lt;em&gt;the&lt;/em&gt; most stupid interface trick that I have ever heard of. Why the hell would I want to shake my iPhone to delete the current entry or shake it to start the recording? Jeebus. Perhaps if it was really sensitive and the shaking was totally in context with what you are using the device for, but shake to delete a database entry? That is just a stupid gimmick!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3840196315934657902?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3840196315934657902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/shake-to-do-something.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3840196315934657902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3840196315934657902'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/shake-to-do-something.html' title='Shake to do something'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4298661875949653973</id><published>2009-03-02T21:19:00.001+11:00</published><updated>2009-03-03T08:10:47.714+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>More iPhone icons</title><content type='html'>&lt;p&gt;I am not quite happy with the template that I made for these icons… The corners are not quite right. But at least the first page of my applications all are about the same brightness now, and they all have the same border look. One for Twittelator* and one for gNotes:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/Sauyufyv2VI/AAAAAAAABQU/Ypc1nf2xadM/s1600-h/Twittelator%5B3%5D.png"&gt;&lt;img title="Twittelator" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="60" alt="Twittelator" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/SauyvaLDmII/AAAAAAAABQY/aEOWOvi_S64/Twittelator_thumb%5B1%5D.png?imgmax=800" width="59" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/Sauyv3BVnwI/AAAAAAAABQc/jLS8_abL6cE/s1600-h/gNotes%5B6%5D.png"&gt;&lt;img title="gNotes" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="60" alt="gNotes" src="http://lh4.ggpht.com/_r1kDJNjQh8Q/Sauywr6-ToI/AAAAAAAABQg/qsIPWiwlHwA/gNotes_thumb%5B2%5D.png?imgmax=800" width="59" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next!&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;* The channels of the png are in the wrong order, or a different order, or something on the iPhone so you have to use fixpng or something to fix it before you can open it for editing… but that seems to modify the colours (fair enough I guess, you are changing the channels…). I thought it was just a straight negative, but I don’t think it is. Rather than fiddling too much though, I quite like the colour of the Twittelator one as it is – better than the aqua and purple one that is the default anyway.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4298661875949653973?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4298661875949653973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/more-iphone-icons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4298661875949653973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4298661875949653973'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/more-iphone-icons.html' title='More iPhone icons'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_r1kDJNjQh8Q/SauyvaLDmII/AAAAAAAABQY/aEOWOvi_S64/s72-c/Twittelator_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3019878375628287640</id><published>2009-03-02T19:40:00.001+11:00</published><updated>2009-03-03T08:24:16.511+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>iPhone themes…</title><content type='html'>&lt;p&gt;Wow, there are a bunch of themes out there for WinterBoard etc.&lt;/p&gt;  &lt;p&gt;I am using iGlassSol which is very nice, but there are a couple of things I didn’t like. The clock could have a better time on it, and there was no icon for WideEmail. So I made some:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_r1kDJNjQh8Q/SaudeUBhAnI/AAAAAAAABP8/jP-jq4Y8nK0/s1600-h/Clock%5B4%5D.png"&gt;&lt;img title="Clock" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="60" alt="Clock" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/SaudfO2P3nI/AAAAAAAABQA/3O0TfGBaYEM/Clock_thumb%5B1%5D.png?imgmax=800" width="59" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lh3.ggpht.com/_r1kDJNjQh8Q/Saudf5pgBsI/AAAAAAAABQE/L9s05BHnJB8/s1600-h/WideEmail%5B4%5D.png"&gt;&lt;img title="WideEmail" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="60" alt="WideEmail" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/Saudgtp5JAI/AAAAAAAABQI/zdBacEgqbBc/WideEmail_thumb%5B1%5D.png?imgmax=800" width="59" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The other thing that I made was a new dock with 5 icons on it… but it seems like there is a way to make it generate the glassy looking dock on the fly… but I can’t find it, only forum posts talking about it. Anyway, the dock (with WideEmail as the extra icon): &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_r1kDJNjQh8Q/SaudhFd8jbI/AAAAAAAABQM/iDbHi4tSidg/s1600-h/SBDockBG%5B4%5D.png"&gt;&lt;img title="SBDockBG" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="68" alt="SBDockBG" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/Saudh13O79I/AAAAAAAABQQ/pBIZKluX_fM/SBDockBG_thumb%5B1%5D.png?imgmax=800" width="240" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Fun.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3019878375628287640?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3019878375628287640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/iphone-themes.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3019878375628287640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3019878375628287640'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/03/iphone-themes.html' title='iPhone themes…'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_r1kDJNjQh8Q/SaudfO2P3nI/AAAAAAAABQA/3O0TfGBaYEM/s72-c/Clock_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-8938378344319553661</id><published>2009-02-24T13:55:00.001+11:00</published><updated>2009-02-24T19:29:23.270+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Call a method on an object only when that object is not null</title><content type='html'>&lt;p&gt;I have often wanted an operator or something that will do something like run a method on an object if that object is not null (returning a default value if it is null). An example: &lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; s = SomeClass.SomeMember.ToString(); &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;maybe for output or something. Now this works just fine, unless &lt;span class="command"&gt;SomeMember &lt;/span&gt;happens to be null, when this code will throw an exception. So the code has to become: &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; s = SomeClass.SomeMember != &lt;span class="kwrd"&gt;null&lt;/span&gt; ? SomeClass.SomeMember.ToString() : &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;or something like that. Upon finding the &lt;span class="command"&gt;?? &lt;/span&gt;‘null coalescing operator’ I thought that would do the trick, but that will only munge the &lt;span class="command"&gt;ToString &lt;/span&gt;(say) return value to &lt;span class="command"&gt;&amp;quot;&amp;quot;&lt;/span&gt; if it was null, not let you call members on a null reference. You could do something with a chain of &lt;span class="command"&gt;?? &lt;/span&gt;operators, but that looks nasty and if anything in the chain is actually a method call rather than a property access then it may be called multiple times…&lt;/p&gt;

&lt;p&gt;I think that I have come up with something neat and simple that works. &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; TResult Try&amp;lt;T, TResult&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; T left, Func&amp;lt;T, TResult&amp;gt; func) { &lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; Try(left, func, &lt;span class="kwrd"&gt;default&lt;/span&gt;(TResult)); &lt;/pre&gt;

    &lt;pre class="alt"&gt;} &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; TResult Try&amp;lt;T, TResult&amp;gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt; T left, Func&amp;lt;T, TResult&amp;gt; func, TResult defaultValue) { &lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt;(left != &lt;span class="kwrd"&gt;null&lt;/span&gt;) { &lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; func(left); &lt;/pre&gt;

    &lt;pre class="alteven"&gt;    } &lt;span class="kwrd"&gt;else&lt;/span&gt; { &lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; defaultValue; &lt;/pre&gt;

    &lt;pre class="alteven"&gt;    } &lt;/pre&gt;

    &lt;pre class="alt"&gt;} &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Which can be used like this: &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; s = SomeClass.SomeMember.Try(m =&amp;gt; m.ToString(), &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;); &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I named it &lt;span class="command"&gt;Try&lt;/span&gt; in reference to functions such as &lt;span class="command"&gt;TryParse&lt;/span&gt;. Perhaps not the best choice of name, but I am pretty phenomenally bad a choosing names for things… If you use it on a null reference you will get back the default value you specify or if you don't specify one you get the default value of type of the lambda expression. This second case (not specifying the default explicitly) is more useful when the type is not nullable... It is useful for calling functions on members of a class that might be null. More than that of course though, as that is a lambda (well actually a &lt;span class="command"&gt;Func&amp;lt;T, TResult&amp;gt;&lt;/span&gt; Generic Delegate which is most easily populated with a lambda) you can pretty much do whatever you like in there.&lt;/p&gt;

&lt;p&gt;Now I understand that this is not for everybody and that it is not going to work in all situations. Sometimes a null return value will not always have the same meaning as the default value for that type, but if you keep this in mind to does clean up a lot of code. &lt;/p&gt;

&lt;p&gt;Another example to illustrate: &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DataObject { &lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; Strings; &lt;/pre&gt;

    &lt;pre class="alt"&gt;} &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;DataObject myDataObject = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataObject(); &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="rem"&gt;// int stringCount = myDataObject.Strings.Count; // *boom!*&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; stringCount = myDataObject.Strings.Try(l =&amp;gt; l.Count); &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;So this does not give you all of the same information that you get from receiving the null value, but it makes some common stuff painless, like telling the user how many strings there are. I find myself hiding the null value a lot of the time anyway, converting it to &lt;span class="command"&gt;&amp;quot;&amp;quot;&lt;/span&gt; or &lt;span class="command"&gt;0&lt;/span&gt; or whatever, so there you go.&lt;/p&gt;

&lt;p&gt;Real world ‘improvement’. This:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;object&lt;/span&gt; obj = ExecuteScript(script);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(obj != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; obj.ToString();&lt;/pre&gt;

    &lt;pre class="alteven"&gt;} &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
Becomes this: 

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; ExecuteScript(script).Try(o =&amp;gt; o.ToString(), &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;Incidentally, I really love how well the type inference works now. There is no need to specify the types when calling the function - like &lt;span class="command"&gt;myDataObject.Strings.Try&amp;lt;string, int&amp;gt;(l =&amp;gt; l.Count)&lt;/span&gt; - and the return type gets updated when you add or change the return type of the lambda expression. Very neat.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-8938378344319553661?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/8938378344319553661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/call-method-on-object-only-when-that.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8938378344319553661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8938378344319553661'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/call-method-on-object-only-when-that.html' title='Call a method on an object only when that object is not null'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-8467833474084652876</id><published>2009-02-24T08:18:00.001+11:00</published><updated>2009-02-24T08:25:29.454+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>A little love for Windows Live Writer</title><content type='html'>&lt;p&gt;Problem solved.&lt;/p&gt;  &lt;p&gt;There was some odd “bug fixing” stuff in the blogger theme.&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;.post-body p {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  line-height: 1.4em;&lt;/pre&gt;

    &lt;pre class="alt"&gt;  &lt;span class="rem"&gt;/* Fix bug in IE5/Win with italics in posts */&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  margin: 0;&lt;/pre&gt;

    &lt;pre class="alt"&gt;  height: 1%;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  overflow: visible;&lt;/pre&gt;

    &lt;pre class="alt"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;This was confusing WLW a bit obviously. I just removed this (sorry no more support for IE5 *pfft*) and all is well. the problem that I thought I was going to have with the empty &lt;span class="command"&gt;p&lt;/span&gt; tags between each paragraph that I &lt;em&gt;was&lt;/em&gt; getting but do &lt;em&gt;not&lt;/em&gt; get when WLW is working properly is a non problem. The actually empty tags: &lt;span class="command"&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt; are not rendered at all, only the tags that WLW was inserting: &lt;span class="command"&gt;&amp;lt;p&amp;gt;&amp;amp;#160;&amp;lt;/p&amp;gt;&lt;/span&gt; with that non breaking space in there were causing the blank paragraph to be given some space – and these are not generated when your CSS is okay.&lt;/p&gt;

&lt;p&gt;So everything work as far as I can see. Looks like a real WYSIWYG editor now. I can click anywhere, I can insert lists, I can probably stop checking the mark-up like a freak…&lt;/p&gt;

&lt;p&gt;Thanks &lt;a href="http://jcheng.wordpress.com/"&gt;Joe Cheng&lt;/a&gt;! You rock.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-8467833474084652876?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/8467833474084652876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/little-love-for-windows-live-writer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8467833474084652876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8467833474084652876'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/little-love-for-windows-live-writer.html' title='A little love for Windows Live Writer'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5497077903154359142</id><published>2009-02-22T20:53:00.001+11:00</published><updated>2009-02-24T08:08:11.077+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Bad Xml – to accept or to reject, that is the question.</title><content type='html'>&lt;p&gt;Was just reading this post which touches on accepting &lt;a href="http://alumnit.ca/~apenwarr/log/?m=200902#22"&gt;invalid Xml communications&lt;/a&gt;. And I agree.&lt;/p&gt;  &lt;p&gt;I think it boils down to “make sure you produce good XML, but accept anything with the proviso that there may be odd behaviour if the format is not correct”. Library wise though, permissive reading is fine, but if your library &lt;em&gt;produces&lt;/em&gt; bad XML you deserve to be stamped out. I have to say that the Microsoft Xml stuff is really pretty good. They are an option 1 library though, so don’t expect to be able to read in any old just, but they will not produce invalid Xml*.&lt;/p&gt;  &lt;p&gt;This is the route that I have gone with all of the stuff that I have been doing lately. It is a little more complicated than that though because the data structure that I am using is created from the DTD** so I need to not only accept invalid XML but convert it into valid XML to store it.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;* This is something that I have had to explain a few times… Sometimes is is difficult, sometimes people understand. Mostly I don’t bother complaining too much about receiving nasty Xml, but forcing myself to produce bad Xml because someone’s hand coded parser reacts badly to something valid in my valid Xml (namespace definition).&lt;/p&gt;  &lt;p&gt;** Funny story. It’s their DTD, but they can’t manage to produce Xml that validates against it, and they expect values for certain elements that are not valid under it (&lt;span class="command"&gt;value=&amp;quot;&amp;quot; &lt;/span&gt;when value is an &lt;span class="command"&gt;NMTOKEN&lt;/span&gt;). Chuckle…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5497077903154359142?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5497077903154359142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/bad-xml-to-accept-or-to-reject-that-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5497077903154359142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5497077903154359142'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/bad-xml-to-accept-or-to-reject-that-is.html' title='Bad Xml – to accept or to reject, that is the question.'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-7562830616671331342</id><published>2009-02-22T14:02:00.001+11:00</published><updated>2009-02-24T08:07:34.271+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>WLW tag problems</title><content type='html'>&lt;p&gt;After looking at this &lt;a href="http://social.microsoft.com/Forums/en-US/writergeneral/thread/04c9bf03-f692-4404-b2ae-117784d24857"&gt;post from someone with formatting problems in WLW&lt;/a&gt;, I have switched WLW into editing without the template. Looks nasty, but the mark-up is nice.&lt;/p&gt;  &lt;p&gt;Only problem is that now it does not put a blank p tag in between each paragraph. So I would go and change the template to add some margin to the end of a paragraph to get my spacing back but then that is going to stuff up all of the old posts! Ugh. I do not want to go back and edit them all again! I already did that once…&lt;/p&gt;  &lt;p&gt;It would be nice if I could modify the tag that WLW puts in for a paragraph to include a class attribute – that way I could modify the template so it only affected these new posts… Actually, that is something that is a bit of a problem with Blogger in general – changes take effect on all old posts. E.g. if you change the time zone. Not much you can do about that though really.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7562830616671331342?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7562830616671331342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/wlw-tag-problems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7562830616671331342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7562830616671331342'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/wlw-tag-problems.html' title='WLW tag problems'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-7246925339298323741</id><published>2009-02-22T13:57:00.001+11:00</published><updated>2009-02-24T08:05:23.692+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>Just store it for me</title><content type='html'>&lt;p&gt;This is an interesting article: &lt;a title="http://daringfireball.net/2009/02/untitled_document_syndrome" href="http://daringfireball.net/2009/02/untitled_document_syndrome"&gt;untitled document syndrome&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the past I was firmly in the “no, I really do want to specify where you are putting my file” camp, but increasingly I prefer to succumb to human nature and let someone else do it for me.&lt;/p&gt;  &lt;p&gt;I still like to be able to configure the root of the storage. For example to put it into my svn working copy so I have a backup and can get at it from other machines. But once that is done, and as long as I can actually find the files &lt;em&gt;somewhere&lt;/em&gt; should I want to, I do quite like the way iTunes (for example) just takes what you put &lt;em&gt;into iTunes&lt;/em&gt; and stores it for you.&lt;/p&gt;  &lt;p&gt;It would be nice if more applications did this. It might be nice if this was some king of system service that an application could use. I think a lot of my applications could benefit from this – it is certainly true that for most business users the location (or the very existence) of the actual file is of little importance, as long as they can find the &lt;em&gt;work&lt;/em&gt; and get it back and use it. You only have to look at some people’s machines and the places they manage to get files saved to realise that most people either don’t know or don’t care that there is even a choice to make about the directory they save a file in.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7246925339298323741?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7246925339298323741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/just-store-it-for-me.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7246925339298323741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7246925339298323741'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/just-store-it-for-me.html' title='Just store it for me'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-7458216573949861875</id><published>2009-02-21T20:41:00.001+11:00</published><updated>2009-02-21T22:33:36.646+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>Login or Register</title><content type='html'>&lt;p&gt;When you have a site that uses user accounts, say for returning customers, I really hate the common theme of having a login fields area and a register fields area.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Mainly because I can’t always remember if I am registered or not. Why not make the forms do double duty as login and registration forms? You put in your email address* and what you think is your password and hit the button. If that user exists and the password is correct, let me in. If that user exists and the password is not correct, bounce me with a message. If that user does not exist, go on to a registration page and get the rest of my details**, and keep the hash of my password so you only have to confirm it not get me to type it twice again.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Streamlined. The only thing that I can see that is wrong with this idea is that it does give away some information, namely the form tells you that a certain email address is registered on that site. However the existing registration form does that anyway so…&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;* I am pretty much a believer in the email address as username idea. There is never going to be a problem with your desired username being take already, and people who complain that they have too many email addresses or they change them often or whatever… pfft.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;** Or better yet – don’t ask me for any more information, just to confirm the password. Oh, and make sure I can continue on with what I was doing.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7458216573949861875?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7458216573949861875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/login-or-register.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7458216573949861875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7458216573949861875'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/login-or-register.html' title='Login or Register'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4251114176911445128</id><published>2009-02-21T14:47:00.001+11:00</published><updated>2009-02-21T14:47:15.795+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Google JavaScript error AGAIN</title><content type='html'>&lt;p&gt;What the hell Google? A JScript error again? Last week it was AdSense, this week it is in the Followers gadget.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; I just happened to look at my blog before thinking about posting something and up pops a JScript error and then a blank blog page. Nice. Upon debugging I see the error is in this line:   &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;google.friendconnect.container.renderUrlCanvasGadget({&lt;span class="str"&gt;'id'&lt;/span&gt;: &lt;span class="str"&gt;'gadget-canvas'&lt;/span&gt;})&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Which look like it &lt;em&gt;might&lt;/em&gt; be the Followers gadget. I disable it and no more error. So not too hard to get by, but what the hell is with all these scripting errors?&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I think there might be some kind of problem with the QA and deployment strategy over at the big g…&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;[Edit] I went and put the gadget right back again, and the error does not reoccur… I can’t see that line of code anywhere at all, so I don’t know if that was not the problem or if it was fixed quickly or if adding and removing it updated the code or what… Gotta go.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4251114176911445128?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4251114176911445128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/google-javascript-error-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4251114176911445128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4251114176911445128'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/google-javascript-error-again.html' title='Google JavaScript error AGAIN'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4773370773029401904</id><published>2009-02-20T16:29:00.001+11:00</published><updated>2009-02-20T16:29:34.854+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Unfun things</title><content type='html'>&lt;p&gt;Programmers tend to loathe writing documentation. I always have great documentation in mind while I am developing a nice solution to a problem, but it rarely gets realised. Usually the bare minimum gets done – sometimes less than that.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Another thing that is probably number two on the list of most not fun to do is error handling and logging.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I have just spent a little time cleaning up the error handling in the couple of applications that I am writing right now.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;There are various components, running across various platforms – Windows and Web clients, .NET Remoting servers, Windows services, Web services, ASP.NET web sites (that are actually generated from specifications in xml files that are in turn created by a tool – one of the windows client applications). Anyway, the whole thing is getting a little too complex to hold in your head at once, and before it gets too complicated I wanted to put in a common logging component. I have wanted to do it for a while – get away from each component knowing how to ends an email or write the windows log. Now it is mostly done.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I guess the whole point of this ramble was just to say that I got myself to do something pretty unpleasant – fix up exception handling chains, move chunks of code around while deciding which of 3 similar implementations are correct, fix up dll referencing issues, test error conditions – by giving myself something a little but fun to do – write a nice class using generics to build and hold an error message (so a message can be build up as different components have more or less important problems), grow the re-usable library that I have and actually re-use it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4773370773029401904?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4773370773029401904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/unfun-things.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4773370773029401904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4773370773029401904'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/unfun-things.html' title='Unfun things'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-869136428459635149</id><published>2009-02-18T22:00:00.001+11:00</published><updated>2009-02-18T22:00:59.246+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>Adding text to a WLW post without screwing up the mark-up!</title><content type='html'>&lt;p&gt;Finally! I have discovered a way to add text at the end or middle of a post without causing horrible nesting problems with the &lt;span class="command"&gt;&amp;lt;p&amp;gt;&lt;/span&gt; tags.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;If you just go clicking at the end of an existing paragraph, or even on it, or even clicking in a space that looks blank, it is pretty easy to end up with this kind of mess:&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&amp;lt;p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  &amp;lt;p&amp;gt;para1&amp;lt;/p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  &amp;lt;p&amp;gt;para2&amp;lt;/p&amp;gt;&amp;lt;/p&amp;gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;But &lt;em&gt;now&lt;/em&gt; I have managed to work out how to avoid it! As an example, to add a paragraph to the end of a post:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Hover over the invisible box that represents the blank &lt;span class="command"&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt; that WLW sticks after each paragraph with text in it. You are looking for the North South East West arrow cursor.&lt;/p&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;p&gt;Click to select it. You need to end up with the eight little squares in the corners and on the edges showing that the whole element is selected, not the insertion point indicating that it is trying to add text inside the element.&lt;/p&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;p&gt;Now press the &lt;span class="command"&gt;right arrow &lt;/span&gt;key. You should end up with the insertion point below the element you clicked on. &lt;strong&gt;&lt;em&gt;Now&lt;/em&gt;&lt;/strong&gt; you can type and the text will go into the paragraph element &lt;em&gt;and&lt;/em&gt; pressing enter at the end will close the current paragraph, insert a blank one and start a new one. Remember also that you do need to press enter at the end of the paragraph, even the last one, to get the tag to close properly.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To insert a paragraph between two existing ones, you want to do the same thing with the invisible blank paragraph element between two with text in. When you press the &lt;span class="command"&gt;right arrow &lt;/span&gt;it will look like you are in the next paragraph with text, but you aren’t. Once you get to the end of your paragraph and hit enter all will be well again.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I feel like I am 90% of the way to being able to use WLW without switching to the source pane all the time – which is how you bloody well should be able to use it. It is just a bit unfortunate that I have to do it by being careful where I click and type and so on.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-869136428459635149?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/869136428459635149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/adding-text-to-wlw-post-without.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/869136428459635149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/869136428459635149'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/adding-text-to-wlw-post-without.html' title='Adding text to a WLW post without screwing up the mark-up!'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4203471572661602577</id><published>2009-02-18T18:33:00.001+11:00</published><updated>2009-02-18T21:34:14.998+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>Gmail 2.0 and scrolling in IE7</title><content type='html'>&lt;p&gt;Gmail’s new version 2 interface might be a slight improvement visually, but it sure does not like Internet Explorer 7 very much.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;If you use the scrollbar at all the cpu usage for &lt;span class="command"&gt;iexplore.exe &lt;/span&gt;gets pegged to 100% for a couple of seconds. I have not looked into what it is actually doing yet – not interested enough perhaps. If you switch back to the old interface (there is a link up on the top right of the page) the problem goes away. The only hassle is that this setting is not saved, the next time you log in you are back to the regular interface.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Curiously if you scroll with the keyboard it works fine. Scrolling with the scroll wheel or the edge of the touchpad hangs it up too. Seems to be in the handling of the &lt;span class="command"&gt;onScroll&lt;/span&gt; (or whatever) event.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;[Edit] It seems to be a problem with &lt;span class="command"&gt;FlashGet&lt;/span&gt;. Disabling the &lt;span class="command"&gt;FlashGet GetFlash Class &lt;/span&gt;makes the problem go away. Interestingly enough &lt;span class="command"&gt;FlashGet &lt;/span&gt;still seems to work just fine…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4203471572661602577?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4203471572661602577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/gmail-20-and-scrolling-in-ie7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4203471572661602577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4203471572661602577'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/gmail-20-and-scrolling-in-ie7.html' title='Gmail 2.0 and scrolling in IE7'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3073893962979921496</id><published>2009-02-18T14:08:00.001+11:00</published><updated>2009-02-18T14:26:01.145+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Remote debugging</title><content type='html'>&lt;p&gt;Yesterday I had quite a bit of fun trying to get remote debugging of a web application working.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I did solve this problem a little (very short) while ago… but I forgot what I had done.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;So after executing a couple (quite a few) iterations of a Modify, Compile, Deploy, TryToDebug, Uninstall loop I know what you have to do to get it working. At least if you are using a deployment project to put the files up on the server.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;You have to add the debug output from any project that you want to debug into to the deployment project*.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;You must make sure that those debug outputs are in the right directory in the &lt;span class="command"&gt;File System &lt;/span&gt;configuration pane so that the &lt;span class="command"&gt;TargetName &lt;/span&gt;will have the files going into the correct directory on the server**.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Then you can install and debug. The setup of the remote debugger is a bit complex too. Basically the way I got it to work was by adding my own domain user (I log into my machine by logging into the domain) to the Administrators group on the server, and then logged in (via &lt;span class="command"&gt;mstsc /console&lt;/span&gt;) to the server as myself (so that user could reconnect back to my machine). Bingo.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;* You can’t just copy them up to the server it seems. I don’t know what the difference is, but it just does not manage to find them. I have even tried loading the symbols from the modules window directly – if complains that the symbols are not for the same version of the dll. I have not seen what happens if you are not actually deploying with an msi – there could be trouble. It is just one of those cases where there is some mechanism there that is storing some information somewhere and when it works everything is rosy, but when it does not work it can be fairly opaque. I guess that is what comes from not technically knowing what you are doing, but we can’t all be experts on the internal workings of everything – there is just not time, and when most of the time it just automagically works there is not much point either.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;** The target name for the debug output of some project types (e.g. ASP.Net Web Application) will be &lt;span class="command"&gt;bin/AssemblyName.pdb&lt;/span&gt; so the output needs to be placed in the &lt;span class="command"&gt;Web Application Folder &lt;/span&gt;(where they seem to go by default), whereas other types (e.g. Class Library) will just be &lt;span class="command"&gt;AssemblyName.pdb &lt;/span&gt;so their output needs to be put into the bin folder – they won’t be there by default, they will be one level up in the &lt;span class="command"&gt;Web Application Folder&lt;/span&gt;. If you do not get this right the debug symbols will fail to load. You can look at information about what is being loaded from where in the &lt;span class="command"&gt;Modules &lt;/span&gt;window found in &lt;span class="command"&gt;Debug &amp;gt; Windows &amp;gt; Modules &lt;/span&gt;when you are &lt;em&gt;in&lt;/em&gt; debug mode.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3073893962979921496?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3073893962979921496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/remote-debugging.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3073893962979921496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3073893962979921496'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/remote-debugging.html' title='Remote debugging'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-8995496863099250612</id><published>2009-02-17T11:29:00.001+11:00</published><updated>2009-02-17T11:29:54.491+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Lotsa windows</title><content type='html'>I just had a weird occurrence… I was in gmail, clicked to archive a message, and it started to open a bunch of new windows with one certain address:  &lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage"&gt;     &lt;pre&gt;http://mail.google.com/mail/#..&amp;amp;remote_iframe_0@2&amp;amp;1&amp;amp;0&amp;amp;%7B%22s%22%3A%22resize_iframe%22%2C%22f%22%3A%22remote_iframe_0%22%2C%22c%22%3A0%2C%22a%22%3A%5B199%5D%2C%22t%22%3A%22r0rtgf-lsmnyy%22%7D&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;It got to about 20 or so before I managed to kill it with taskman.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-8995496863099250612?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/8995496863099250612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/lotsa-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8995496863099250612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8995496863099250612'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/lotsa-windows.html' title='Lotsa windows'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4792438359565232552</id><published>2009-02-16T11:32:00.001+11:00</published><updated>2009-02-18T14:27:00.292+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Security.dll</title><content type='html'>&lt;p&gt;I was getting a funky error when trying to call one of my WCF web service’s methods:&lt;/p&gt;  &lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage"&gt;     &lt;pre&gt;Unable to find an entry point named 'FreeCredentialsHandle' in DLL 'security.Dll'.&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Fortunately my brain is working this morning and I remembered the last time I saw this kind of odd error. Looking in the bin directory of the web site, sure enough I see a dll called &lt;span class="command"&gt;security.dll&lt;/span&gt;. Ruhroh… IIS kindly loads up any dlls that you ask it to, then when it tries to access the Microsoft &lt;span class="command"&gt;Security.dll &lt;/span&gt;it seems to find your dll and routes calls into it. These entry points (normally) don’t exist hence the error.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The moral of the story is: Do not call your dll &lt;span class="command"&gt;security.dll&lt;/span&gt;*.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I just went through the whole project and made sure that the outputs were called something useful like &lt;span class="command"&gt;Company.Project.Thing.dll&lt;/span&gt;. You do need to restart the web server too so it will reload the (correct) &lt;span class="command"&gt;Security.dll&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;* Other bad names are probably things like &lt;span class="command"&gt;System.dll&lt;/span&gt;, &lt;span class="command"&gt;mscorlib.dll&lt;/span&gt; etc. A much better idea is to create a proper namespace for your code and make the assembly name something like the namespace – or even the whole namespace, why not? Knock yourself out.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4792438359565232552?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4792438359565232552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/securitydll.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4792438359565232552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4792438359565232552'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/securitydll.html' title='Security.dll'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1383917023688751287</id><published>2009-02-15T21:06:00.001+11:00</published><updated>2009-02-17T10:28:12.678+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Reuse types in a Web Service</title><content type='html'>&lt;p&gt;For some time I have trying, with no success, to get the &lt;span class="command"&gt;Reuse types in referenced assemblies &lt;/span&gt;option to work after adding a web service reference to a project.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Finally I have found the answer: That option is not available for so called ‘legacy’ ASP.NET web services, only for WCF web services. So I just re-created my web service as a WCF service. My web service is a pretty simple one providing access to a .NET Remoting server hosted in a windows service. As such the code is pretty simple, and it was a matter of less than an hour to get it all going.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Just one small gotcha that I guess should be pretty obvious. The assembly with the types that you want to re-use must already be referenced in the project that you are adding the service reference to. I.e. it does not go and look for them. I don’t suppose it would have any way of doing that.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The only modification that I had to do was to the web service. It seems to work. I am a little surprised that I did not have to add the &lt;span class="command"&gt;DataContractAttribute &lt;/span&gt;to the classes to use them… They are already marked &lt;span class="command"&gt;Serializable &lt;/span&gt;and the members are &lt;span class="command"&gt;XmlElement&lt;/span&gt;s… perhaps that is why it works. I have not really tested it yet, just compiled the service and the client. I am thinking now that perhaps the data is not being passed at all. Will see tomorrow – when I am &lt;em&gt;supposed&lt;/em&gt; to be working (rather than now, the weekend).&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;[Edit] I does work just fine. I wonder then what is the difference between using &lt;span class="command"&gt;DataContract &lt;/span&gt;and just making them &lt;span class="command"&gt;Serializable&lt;/span&gt;. I also wonder what is the benefit of using the &lt;span class="command"&gt;ClientFactory &lt;/span&gt;rather than just using the Client object directly.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;[Edit] There are, it seems, times when you do need to add the &lt;span class="command"&gt;DataContractAttribute &lt;/span&gt;to your data classes. I just found that one class that I was using as a parameter caused an exception upon serialization:&lt;/p&gt;  &lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage"&gt;     &lt;pre&gt;There was an error while trying to serialize parameter http://tempuri.org/:Commands. The InnerException message was 'Type 'BSPG.Prism.Script.Table' with data contract name 'Table:http://schemas.datacontract.org/2004/07/BSPG.Prism.Script' is not expected. Add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.'.  Please see InnerException for more details.&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;This class contains members whose type is also not a standard class. The class that was working only had members of standard types. Fortunately, it seems to work if you just decorate the top level class with the &lt;span class="command"&gt;DataContractAttribute &lt;/span&gt;– no need to go and change each other class in there (this would have been quite a pain for me, as they are all generated classes). That said, it might turn out that it only works because after the first level they are all standard types… That is not necessarily true for all possible data though – this is a class hierarchy created by XSDObjectGen from a quite deeply nested DOM… We will see.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1383917023688751287?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1383917023688751287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/reuse-type-in-web-service.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1383917023688751287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1383917023688751287'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/reuse-type-in-web-service.html' title='Reuse types in a Web Service'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-8604932967723241051</id><published>2009-02-14T23:15:00.001+11:00</published><updated>2009-02-14T23:15:26.912+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Batteries</title><content type='html'>&lt;p&gt;The battery meter on my laptop is playing up.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;It seems to think the battery is always at 100%. The hours remaining displayed changed, and seems to be about correct, but the percentage is always at 100%. I am guessing that that is why it keeps shutting off with no warning. Hrm.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I had other stuff to post, but I am at 100% (18 minutes) so I butter go plug in.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-8604932967723241051?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/8604932967723241051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/batteries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8604932967723241051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8604932967723241051'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/batteries.html' title='Batteries'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5812011866834313020</id><published>2009-02-11T16:34:00.001+11:00</published><updated>2009-02-11T16:35:08.896+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Merging Help files</title><content type='html'>&lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage"&gt;     &lt;pre&gt;This may take several minutes...&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://lh4.ggpht.com/_r1kDJNjQh8Q/SZJitADpvMI/AAAAAAAABKM/f9ZAoyGHY0E/MergingHelp.png" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Boy you are not kidding… Why does this always take so long? And why can’t you do it in the background? I don’t need the help right now, but I would like to do something else with my machine.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5812011866834313020?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5812011866834313020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/merging-help-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5812011866834313020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5812011866834313020'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/merging-help-files.html' title='Merging Help files'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_r1kDJNjQh8Q/SZJitADpvMI/AAAAAAAABKM/f9ZAoyGHY0E/s72-c/MergingHelp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-589064241392118904</id><published>2009-02-11T15:31:00.001+11:00</published><updated>2009-02-18T14:28:04.839+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Changing the console font</title><content type='html'>&lt;p&gt;You can add new fonts to the list available in the &lt;span class="command"&gt;cmd.exe &lt;/span&gt;preferences screen.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;First you want to find a good mono-spaced font like &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&amp;amp;displaylang=en"&gt;Consolas&lt;/a&gt; and install it.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Then you need to add a new &lt;span class="command"&gt;String Value &lt;/span&gt;to the registry under &lt;span class="command"&gt;HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont&lt;/span&gt; called &lt;span class="command"&gt;00&lt;/span&gt;* with a value of the &lt;em&gt;exact&lt;/em&gt; font name (eg &lt;span class="command"&gt;Consolas&lt;/span&gt;)&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Something needs to happen before the font can be used, I am not sure what, but a reboot achieves it (logoff does not), so a reboot is next.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Finally, you can pop open a command prompt and change the preferences to use the new font. You might need to do this a couple of times if you use different ways of getting up a command prompt: the run command, the shortcut in accessories, or a shell extension - because of the way the system applies the preferences according to window title and not the actual executable.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;* the default TrueType font is specified by 0, so the next needs to be 00, if you want to add another you can add 000 etc.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-589064241392118904?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/589064241392118904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/changing-console-font.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/589064241392118904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/589064241392118904'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/changing-console-font.html' title='Changing the console font'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5732683052291349848</id><published>2009-02-11T08:30:00.001+11:00</published><updated>2009-02-18T14:29:00.247+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>AdSense JScript error</title><content type='html'>&lt;p&gt;I don’t know wether it is just IE7 or what but I do seem to be getting a lot of JScript runtime errors on lots of different sites… I have opened a few in the debugger and found them to be, for the most part strangely, coming from within jQuery…&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Now the AdSense stuff on this blog has started to have an error:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://lh3.ggpht.com/_r1kDJNjQh8Q/SZHxKTFAtfI/AAAAAAAABJs/AJUHC790VUo/ScreenShot012.png" /&gt;   &lt;p&gt;The bit where it barfs is: &lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&amp;lt;script&amp;gt;tick(&lt;span class="str"&gt;'1ad'&lt;/span&gt;)&amp;lt;/script&amp;gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;with: &lt;/p&gt;

&lt;div class="errormessage-wrapper"&gt;
  &lt;div class="errormessage"&gt;
    &lt;pre&gt;Object expected&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;so meh, not finding the &lt;span class="command"&gt;tick &lt;/span&gt;function. I have not changed anything, but I am beginning to wonder if it is not something that I have done to this machine. Perhaps I am just paranoid, but I do seem pretty capable of some kind of voodoo against windows installations… &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;[Edit] S’not just me - there are some posts on the &lt;a href="http://www.google.com/support/forum/p/AdSense?hl=en"&gt;AdSense Help forum&lt;/a&gt; (which has a JScript error, haha) about this already (&lt;a href="http://www.google.com/support/forum/p/AdSense/thread?tid=3ffdd94f476235db&amp;amp;hl=en"&gt;Recent Javascript Errors in Ads&lt;/a&gt;, &lt;a href="http://www.google.com/support/forum/p/AdSense/thread?tid=49ffd5ff0f3ab290&amp;amp;hl=en"&gt;Javascript errors&lt;/a&gt;, &lt;a href="http://www.google.com/support/forum/p/AdSense/thread?tid=2378e6c690bf2f32&amp;amp;hl=en"&gt;JavaScript error &amp;lt;script&amp;gt;tick('1ad')&amp;lt;/script&amp;gt;&lt;/a&gt;) but no response from Google so far...&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;[Edit] Silently fixed by Google. I did not keep a copy of the offending source file from this morning, but looking at the same file generated just now, they seem to have totally removed the call to &lt;span class="command"&gt;tick&lt;/span&gt;. That function by the way ends up injected into your main page and seems to be for storing timestamps for certain actions like the first load, the first time the page is scrolled, the load time of each ad etc.) Poor form really… perhaps an explanation will surface soon.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5732683052291349848?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5732683052291349848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/adsense-jscript-error.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5732683052291349848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5732683052291349848'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/adsense-jscript-error.html' title='AdSense JScript error'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_r1kDJNjQh8Q/SZHxKTFAtfI/AAAAAAAABJs/AJUHC790VUo/s72-c/ScreenShot012.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2947847108060863086</id><published>2009-02-10T22:02:00.001+11:00</published><updated>2009-02-10T22:02:09.608+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>Multiple selection</title><content type='html'>&lt;p&gt;I was watching someone the other day trying to select a number of different files from a directory to copy somewhere else. She had about four goes at it, control clicking on each file she wanted, skipping over the ones she didn’t, then accidentally clicking without holding control somewhere and undoing all of her selections, before she gave up and copied them one at a time.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Just now I was trying to move some gmail ‘suggested contacts’ to ‘my contacts’. I had never used that interface before, but I don’t like it. You select each contact by checking its checkbox, but for some odd reason they have made clicking on the name of the contact select the checkbox also – and unfortunately deselect all of the other ones! The nice thing, usually, about a list of checkboxes is that they avoid the accidental de-selection that is so easy with the control click way of doing things…&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;This all has just reminded me that it would be nice to have an explorer extension that made selecting multiple files more forgiving. Maybe by altering the selected state in a more robust way. You could do undo and redo of selection, you could do add to and subtract from selection, you could keep selections or save and re-load them… you could make it usable. As it is, it is just about inevitable that someone not hugely skilled with the mouse will loose all of their selections if they are trying to select a non-trivial number of files together.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2947847108060863086?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2947847108060863086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/multiple-selection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2947847108060863086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2947847108060863086'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/multiple-selection.html' title='Multiple selection'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1828963232387952358</id><published>2009-02-10T13:58:00.001+11:00</published><updated>2009-02-10T13:58:29.905+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>SQLServer 2005</title><content type='html'>&lt;p&gt;Having failed to install SQLServer 2008 – don’t ask, I grabbed the 2005 dvd and ‘installed’ it… But the server setup could not find any of the client msi files. I looked at the directory structure on the disk and where they used to have &lt;span class="command"&gt;Server &lt;/span&gt;and &lt;span class="command"&gt;Client &lt;/span&gt;directories, there are now &lt;span class="command"&gt;Server &lt;/span&gt;and &lt;span class="command"&gt;Tools&lt;/span&gt;. I am not sure if that is the problem but I went into the &lt;span class="command"&gt;Tools &lt;/span&gt;directory and ran the setup there. It got some way through its install, but still could not find the msi for the native client, and the ‘workstation, books online and development tools’ installer would not run. So I went spelunking in the \&lt;span class="command"&gt;Tools\Setup &lt;/span&gt;directory and ran a few msi files by hand and &lt;strong&gt;&lt;em&gt;now&lt;/em&gt;&lt;/strong&gt; it seems to be happy.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Yay, I have my SQL Server Management Studio!&lt;/p&gt;  &lt;p&gt;The msi installers that actually managed to do something were: &lt;span class="command"&gt;\Tools\Setup\sqlncli.msi &lt;/span&gt;and &lt;span class="command"&gt;\Tools\Setup\SqlRun_Tools.msi &lt;/span&gt;though there may be other stuff missing… we will see.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1828963232387952358?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1828963232387952358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/sqlserver-2005.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1828963232387952358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1828963232387952358'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/sqlserver-2005.html' title='SQLServer 2005'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6275798897118161159</id><published>2009-02-10T10:51:00.001+11:00</published><updated>2009-02-10T10:51:09.164+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>TortoiseSVN right drag</title><content type='html'>&lt;p&gt;I did not know this: &lt;a title="http://tortoisesvn.net/most-forgotten-feature" href="http://tortoisesvn.net/most-forgotten-feature"&gt;http://tortoisesvn.net/most-forgotten-feature&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6275798897118161159?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6275798897118161159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/tortoisesvn-right-drag.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6275798897118161159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6275798897118161159'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/tortoisesvn-right-drag.html' title='TortoiseSVN right drag'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1946402790144293717</id><published>2009-02-10T10:02:00.001+11:00</published><updated>2009-02-19T08:49:55.383+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>SVN global ignore pattern</title><content type='html'>&lt;p&gt;I have just been fiddling with my global ignore pattern so I thought I would post it here (more for my future self than anything else). This modification was triggered by my having fun trying to use the same repo from two different machines where the directory structure is not identical, so the &lt;span class="command"&gt;*.suo&lt;/span&gt; files and &lt;span class="command"&gt;*.user&lt;/span&gt; files can cause problems. I also noticed that there were a few other odd files in the repo that I don’t really want.&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;[Bb]in [Oo]bj Debug Release *.suo *.user _UpgradeReport_Files UpgradeLog.XML RECYCLER Thumbs.db Desktop.ini&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;So a little explanation:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class="command"&gt;[Bb]in [Oo]bj&lt;/span&gt; – directories containing build files generated by studio, seems like older versions of studio create the files in all lowercase where 2008 has an initial cap and as SVN is case sensitive you unfortunately need to deal with both &lt;/li&gt;

  &lt;li&gt;&lt;span class="command"&gt;Debug Release&lt;/span&gt; – directories created when building a deployment project &lt;/li&gt;

  &lt;li&gt;&lt;span class="command"&gt;*.suo *.user&lt;/span&gt; – user project setting and general studio user settings files &lt;/li&gt;

  &lt;li&gt;&lt;span class="command"&gt;_UpgradeReport_Files_&lt;/span&gt; – directory containing log files and stuff created when you migrate a project from an older version of studio &lt;/li&gt;

  &lt;li&gt;&lt;span class="command"&gt;UpgradeLog.XML&lt;/span&gt; – the main project migration report file &lt;/li&gt;

  &lt;li&gt;&lt;span class="command"&gt;RECYCLER&lt;/span&gt; – not sure if this is still needed, but I was finding this directory sometimes gets created, I guess it is for storing deleted files… was just searching for it in the repo local copy but could not find it, oh well &lt;/li&gt;

  &lt;li&gt;&lt;span class="command"&gt;Thumbs.db Desktop.ini&lt;/span&gt; – files created when you do certain things in explorer, like look at a directory of images in thumbnail view &lt;/li&gt;
&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1946402790144293717?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1946402790144293717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/svn-global-ignore-pattern.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1946402790144293717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1946402790144293717'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/svn-global-ignore-pattern.html' title='SVN global ignore pattern'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5702152067217692658</id><published>2009-02-09T15:10:00.001+11:00</published><updated>2009-02-10T09:27:33.164+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Office Live</title><content type='html'>&lt;p&gt;I have a new install of Microsoft Office Word 2007 with the Office Live plug-in installed. The Office live splash screen comes up and I was having trouble configuring it – it could not seem to deal with my Live account that had a Gmail address… anyway, that is sorted now (though all my cookies are gone in the process), but the splash screen still comes up each time. I thought it was because the sign-in process was failing, but I am all set up now and it is still showing up every time I open word.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Fortunately I have found the solution on TechNet: &lt;a href="http://blogs.technet.com/arykhus/archive/2009/01/26/get-started-with-office-live-add-in-window-keeps-popping-up-after-first-startup-of-word-excel-powerpoint-2007.aspx"&gt;Get Started with Office Live&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The workaround is to create a registry key called &lt;span class="command"&gt;OfficeLive &lt;/span&gt;under the key &lt;span class="command"&gt;HKEY_CURRENT_USER\Software\Microsoft&lt;/span&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5702152067217692658?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5702152067217692658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/office-live.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5702152067217692658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5702152067217692658'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/office-live.html' title='Office Live'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3791031680512994007</id><published>2009-02-09T14:04:00.001+11:00</published><updated>2009-02-10T09:27:20.472+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Group policy</title><content type='html'>&lt;p&gt;I hate that the group policies specified for our domain accounts have the Internet Explorer home page locked down, and the web proxy enabled. Those settings though are just registry entries, and as there is no inherent security on registry editing, you can just go back in and edit them after login.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;After some time interval though I have noticed that there must be a gpupdate or something that resets the keys to the values defined by the policy. I just wrote a quick VBScript to ensure that my preferred settings are made after login.&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;Set shell = WScript.CreateObject(&lt;span class="str"&gt;&amp;quot;WScript.Shell&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;shell.RegWrite &lt;span class="str"&gt;&amp;quot;HKCU\Software\Microsoft\Internet Explorer\Main\Start Page&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;http://www.google.com.au&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;REG_SZ&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;shell.RegWrite &lt;span class="str"&gt;&amp;quot;HKCU\Software\Microsoft\Internet Explorer\Main\Default_Page_URL&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;http://www.google.com.au&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;REG_SZ&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;shell.RegWrite &lt;span class="str"&gt;&amp;quot;HKCU\Software\Microsoft\Internet Explorer\Main\Search Bar&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;http://www.google.com.au&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;REG_SZ&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;shell.RegWrite &lt;span class="str"&gt;&amp;quot;HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable&amp;quot;&lt;/span&gt;, 0, &lt;span class="str"&gt;&amp;quot;REG_DWORD&amp;quot;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Most of the time when I pop open IE it is to go to Google. Plus the group policy had some stupid HP news site specified, and several times over the last week their first displayed news story was some model in a state of partial undress – difficult it is when the company policy enforces a breach of company policy…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3791031680512994007?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3791031680512994007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/group-policy.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3791031680512994007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3791031680512994007'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/group-policy.html' title='Group policy'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2933055484985956800</id><published>2009-02-08T22:02:00.001+11:00</published><updated>2009-02-10T09:28:19.351+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>WLW Plug-in</title><content type='html'>&lt;p&gt;I just finished working on a Windows Live Writer plug-in to allow insertion of snippets. You can define templates for snippets that you can then insert into the current document from the Insert list. The snippets can be anything basically, but I will be using it to insert HTML snippets of the right format to make error message blocks, command line blocks, basically all of the little bits of mark-up that I want to re-use all of the time.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;To create a new template you access the options dialog via &lt;span class="command"&gt;Tools &amp;gt; Options &amp;gt; Plug-ins &lt;/span&gt;where you select the Snippet plug-in and click &lt;span class="command"&gt;Options&lt;/span&gt;.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;You can insert the currently selected text or the clipboard contents into the template by specifying #content# or #clipboard# somewhere in the template. You can also take the content or the clipboard if the content is blank with #contentorclipboard# or the reverse with #clipboardorcontent#.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;There is no documentation (other than the info here), no installer (you just need to copy the dll file to &lt;span class="command"&gt;C:\Program Files\Windows Live\Writer\Plugins&lt;/span&gt;), and not too many features. So hopefully not too many bugs. There are a few things that I would like to work on: A context menu to select the #content# things; Pretty up the interface a bit; Add a different mode that can ask for user input to fill in the template; An installer.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I created a Google Code project for this one too, it is &lt;a href="http://code.google.com/p/wlwsnippetplugin/"&gt;wlwsnippetplugin&lt;/a&gt;. I &lt;em&gt;think&lt;/em&gt; that I have put the source up properly in the SVN repository… Regardless, the source is zipped there too, as is the &lt;a href="http://wlwsnippetplugin.googlecode.com/files/SnippetPlugin.dll"&gt;SnippetPlugin.dll&lt;/a&gt; file that you can just grab and copy to the right directory. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Enjoy! &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2933055484985956800?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2933055484985956800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/wlw-plug-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2933055484985956800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2933055484985956800'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/wlw-plug-in.html' title='WLW Plug-in'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1147488848064192101</id><published>2009-02-08T13:15:00.001+11:00</published><updated>2009-02-10T09:28:53.310+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Mark-up cleanup</title><content type='html'>&lt;p&gt;I have just spent some hours going through all of my old posts and editing them in WLW to get all the mark-up nice and neat and how Blogger and WLW likes it.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I have put everything in p tags, removed all of the display oriented tags (fonts, inline classes), and fixed up the code and error message and command text blocks that I had. I think I fixed most of the quote marks and apostrophes too - mainly because WLW does it automatically and they do look pretty neat. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I guess that is all a bit anal, but I do feel clean now.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1147488848064192101?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1147488848064192101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/mark-up-cleanup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1147488848064192101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1147488848064192101'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/mark-up-cleanup.html' title='Mark-up cleanup'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3132239107175518288</id><published>2009-02-06T14:47:00.001+11:00</published><updated>2009-02-06T15:14:17.620+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Erm… ForEach</title><content type='html'>&lt;p&gt;Why did I not see this before? I was pretty sure that I looked for a &lt;span class="command"&gt;ForEach&lt;/span&gt; function before I went off looking for &lt;span class="command"&gt;Map&lt;/span&gt; etc… but bugger me if there isn’t an extension method on &lt;span class="command"&gt;IEnumerable(Of T)&lt;/span&gt; that does just exactly what I want.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;It’s even called &lt;span class="command"&gt;ForEach&lt;/span&gt;!&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;List&amp;lt;thing&amp;gt; myList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;thing&amp;gt;();&lt;/pre&gt;

    &lt;pre class="alteven"&gt;myList.ForEach(item =&amp;gt; item.DoSomething());&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;[Edit] Okay, I feel a little better now… I know why I didn’t see it before - &lt;span class="command"&gt;ForEach&lt;/span&gt; is defined on &lt;span class="command"&gt;List(Of T)&lt;/span&gt; and &lt;em&gt;not&lt;/em&gt;, unfortunately, on &lt;font face="MS Sans Serif"&gt;IEnumerable(Of T)&lt;/font&gt; which is where I was looking for it. Perhaps next week in a spare moment I might get to try my hand at writing it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3132239107175518288?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3132239107175518288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/erm-foreach.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3132239107175518288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3132239107175518288'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/erm-foreach.html' title='Erm… ForEach'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2902887685443245298</id><published>2009-02-06T13:57:00.001+11:00</published><updated>2009-02-06T13:57:44.333+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Select method problems…</title><content type='html'>&lt;p&gt;An issue that I have run into using Select as Map HOF.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The Select function is only evaluated when the returned &lt;span class="command"&gt;Enumerable(Of T)&lt;/span&gt; is evaluated. That means that the code that I posted (which I did not test until now…) does not really do anything. I guess that means that the &lt;span class="command"&gt;foreach&lt;/span&gt; method is probably the way to go for calling a function for each item in a list.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Thinking about this, and re-reading some information about the Map function, I come to the realisation that it is perhaps my understanding of what Map is supposed to do that is incorrect. It does say that map is for transforming the items. Perhaps what I want is another, slightly different HOF that is &lt;em&gt;for&lt;/em&gt; operating on a list of items, i.e. calling a function for each of them, rather than for building a second list. Oh I don’t know, I will keep looking.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2902887685443245298?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2902887685443245298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/select-method-problems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2902887685443245298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2902887685443245298'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/select-method-problems.html' title='Select method problems…'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6681259187688366260</id><published>2009-02-06T13:45:00.001+11:00</published><updated>2009-02-08T13:12:58.558+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Windows Live Writer first paragraph problem</title><content type='html'>&lt;p&gt;I was having trouble with WLW messing up the mark-up for the first paragraph when I start a new blog entry.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Once I had typed the first paragraph then pressed enter, rather than starting a new paragraph tag after the first, it inserted a new one in the first one before the text. After that the paragraphs come up in pretty much the right order, but the nesting is all wrong and not at all what you would want.&lt;/p&gt;  &lt;p&gt;Here is an example of the mess that it manages:&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&amp;lt;p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  &amp;lt;p&amp;gt;Second paragraph.&amp;lt;/p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;Third paragraph.&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;  &amp;lt;p&amp;gt;First paragraph.&amp;lt;/p&amp;gt;&amp;lt;/p&amp;gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;What you want really is this:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&amp;lt;p&amp;gt;First paragraph.&amp;lt;/p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;lt;p&amp;gt;Second paragraph.&amp;lt;/p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;lt;p&amp;gt;Third paragraph.&amp;lt;/p&amp;gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I have finally worked out what was causing this. It was the fact that I was clicking in the edit area before typing! So if you edit the title, you need to NOT click in the post body area, you can just hit Enter after you are done with the title and it seems to work.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Unfortunately, clicking will have bad effects on the mark-up whenever you do it in a blank area… You need to be clicking in an existing paragraph or else it seems to get a bit stuffed up. I am still trying to work out exactly which action causes which problems and hot to possibly avoid them. One is to paste in the html for a paragraph with some text in it rather than clicking at the end of a post to add a new paragraph. This is a beta product though so I guess one is meant to deal with quirkiness.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Another related note: you really have to hit Enter at the end of a paragraph, even the last one. If you don’t you can end up with:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&amp;lt;p&amp;gt;Paragraph 1.&amp;lt;/p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;Paragraph 2.&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I like WLW. I am sure there is not much more to go before it is kind to your mark-up. The sad thing is that this kind of stuff is probably not that important to a lot of people.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6681259187688366260?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6681259187688366260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/windows-live-writer-first-paragraph.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6681259187688366260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6681259187688366260'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/windows-live-writer-first-paragraph.html' title='Windows Live Writer first paragraph problem'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3598681786267057264</id><published>2009-02-05T15:49:00.001+11:00</published><updated>2009-02-08T13:12:07.190+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>foreach to LINQ to HOF progression</title><content type='html'>&lt;p&gt;Three stages of a real world example.&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ReplaceFunctions(&lt;span class="kwrd"&gt;string&lt;/span&gt; messageTemplate) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; messageBody = messageTemplate;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    Regex ex = &lt;span class="kwrd"&gt;new&lt;/span&gt; Regex(&lt;span class="str"&gt;@&amp;quot;\$(?&amp;lt;name&amp;gt;[^\$]+)\$&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    MatchCollection functions = ex.Matches(messageTemplate);&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(Match function &lt;span class="kwrd"&gt;in&lt;/span&gt; functions) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt;(function.Groups[&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;].Success) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;            messageBody = messageBody.Replace(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;${0}$&amp;quot;&lt;/span&gt;, function.Groups[&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;].Value), &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alt"&gt;        }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    }&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; messageBody;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ReplaceFunctions(&lt;span class="kwrd"&gt;string&lt;/span&gt; messageTemplate) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; messageBody = messageTemplate;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    Regex ex = &lt;span class="kwrd"&gt;new&lt;/span&gt; Regex(&lt;span class="str"&gt;@&amp;quot;\$(?&amp;lt;name&amp;gt;[^\$]+)\$&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    MatchCollection functions = ex.Matches(messageTemplate);&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var function &lt;span class="kwrd"&gt;in&lt;/span&gt; (from Match f &lt;span class="kwrd"&gt;in&lt;/span&gt; functions &lt;span class="kwrd"&gt;where&lt;/span&gt; f.Groups[&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;].Success select f)) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;        messageBody = messageBody.Replace(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;${0}$&amp;quot;&lt;/span&gt;, function.Groups[&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;].Value), &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; messageBody;&lt;/pre&gt;

    &lt;pre class="alt"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ReplaceFunctions(&lt;span class="kwrd"&gt;string&lt;/span&gt; messageTemplate) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; messageBody = messageTemplate;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    Regex ex = &lt;span class="kwrd"&gt;new&lt;/span&gt; Regex(&lt;span class="str"&gt;@&amp;quot;\$(?&amp;lt;name&amp;gt;[^\$]+)\$&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    MatchCollection functions = ex.Matches(messageTemplate);&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    functions.OfType&amp;lt;Match&amp;gt;().Where(function =&amp;gt; function.Groups[&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;].Success).Select(function =&amp;gt; messageBody.Replace(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;${0}$&amp;quot;&lt;/span&gt;, function.Groups[&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;].Value), &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; messageBody;&lt;/pre&gt;

    &lt;pre class="alt"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3598681786267057264?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3598681786267057264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/foreach-to-linq-to-hof-progression.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3598681786267057264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3598681786267057264'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/foreach-to-linq-to-hof-progression.html' title='foreach to LINQ to HOF progression'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2602181193997370109</id><published>2009-02-05T15:33:00.001+11:00</published><updated>2009-02-08T13:10:45.347+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>C# Map HOF goodness</title><content type='html'>&lt;p&gt;The &lt;a href="http://en.wikipedia.org/wiki/Map_(higher-order_function)"&gt;Map higher order function&lt;/a&gt; is provided in C# as the &lt;a href="http://msdn.microsoft.com/en-us/library/bb548891.aspx"&gt;Select&lt;/a&gt; extension method.&lt;/p&gt;  &lt;p&gt;So to cover the last step that I was going on about this morning, i.e. to transform this: &lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var field &lt;span class="kwrd"&gt;in&lt;/span&gt; (from field &lt;span class="kwrd"&gt;in&lt;/span&gt; TheForm.Fields &lt;span class="kwrd"&gt;where&lt;/span&gt; field.Disabled select field)) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    field.DoSomething();&lt;/pre&gt;

    &lt;pre class="alt"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;We can use &lt;a href="http://msdn.microsoft.com/en-us/library/bb397947.aspx"&gt;method syntax&lt;/a&gt; (fluent) rather than query syntax to give the &lt;em&gt;one liner&lt;/em&gt;: &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;TheForm.Fields.Where(field =&amp;gt; field.Disabled).Select(field =&amp;gt; field.DoSomething());&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Neato!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Incidentally though, this seems to only work when DoSomething returns a non void. For example, if you try to compile:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;TheForm.Fields.Where(field =&amp;gt; field.Disabled).Select(field =&amp;gt; Console.WriteLine(field.Name));&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;You will get an error:&lt;/p&gt;

&lt;div class="errormessage-wrapper"&gt;
  &lt;div class="errormessage"&gt;
    &lt;pre&gt;The type arguments for method 'System.Linq.Enumerable.Select&amp;lt;TSource,TResult&amp;gt;(System.Collections.Generic.IEnumerable&amp;lt;TSource&amp;gt;, System.Func&amp;lt;TSource,TResult&amp;gt;)' cannot be inferred from the usage. Try specifying the type arguments explicitly.&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;This is pretty easy to fix though by changing the &lt;a href="http://msdn.microsoft.com/en-us/library/bb397687.aspx"&gt;expression lambda&lt;/a&gt; to a statement lambda: &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;TheForm.Fields.Where(field =&amp;gt; field.Disabled).Select(field =&amp;gt; { Console.WriteLine(field.Name); &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;; });&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2602181193997370109?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2602181193997370109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/c-map-hof-goodness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2602181193997370109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2602181193997370109'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/c-map-hof-goodness.html' title='C# Map HOF goodness'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3101862758469612291</id><published>2009-02-05T12:14:00.001+11:00</published><updated>2009-02-08T13:09:12.679+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Windows Live Writer and Blogger formatting</title><content type='html'>&lt;p&gt;I think I have it worked out.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;There is a Blogger setting that stuffs up edits done with Live Writer. &lt;span class="command"&gt;Settings &amp;gt; Formatting &amp;gt; Convert line breaks&lt;/span&gt; needs to be set to No. Then you don’t seem to get the double line spacing.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The trick with WLW seems to be to let it put in paragraph tags and to never ever edit the post in blogger. Or at least to never switch between the blogger html editor and the compose editor – that really screws things up.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;In the end, WLW is still in beta so there are issues. Undo does not do what I would expect. You can’t just type away and press enter to get a new paragraph… Seems like for the first paragraph you have to hit enter then the down arrow otherwise the insertion point is above the first paragraph container. Odd.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I will just resign myself to being careful with the editor, then being prepared to fix the mark-up by hand.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The CodeSnippet pug-in works best if you do not embed the styles but copy them to your template to be re-used. That is how I wanted to do it anyway. Here is a little code snippet:&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="rem"&gt;// Check for required fields&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var f &lt;span class="kwrd"&gt;in&lt;/span&gt; from f &lt;span class="kwrd"&gt;in&lt;/span&gt; TheForm.Fields&lt;/pre&gt;

    &lt;pre class="alt"&gt;                 &lt;span class="kwrd"&gt;where&lt;/span&gt; f.RequiredForEmail&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                 select f) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;    prop = requestType.GetProperty(f.Name);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt;(prop == &lt;span class="kwrd"&gt;null&lt;/span&gt; || prop.GetValue(data, &lt;span class="kwrd"&gt;null&lt;/span&gt;).IsBlank()) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;        Ok = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    }&lt;/pre&gt;

    &lt;pre class="alteven"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3101862758469612291?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3101862758469612291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/windows-live-writer-and-blogger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3101862758469612291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3101862758469612291'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/windows-live-writer-and-blogger.html' title='Windows Live Writer and Blogger formatting'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2661404733717863176</id><published>2009-02-05T11:11:00.006+11:00</published><updated>2009-02-08T22:44:25.986+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Query pattern problem</title><content type='html'>&lt;p&gt;I have been getting this error with some LINQ expressions:&lt;/p&gt;  &lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage"&gt;     &lt;pre&gt;Could not find an implementation of the query pattern for source type 'System.Text.RegularExpressions.MatchCollection'. 'Where' not found. Consider explicitly specifying the type of the range variable 'v'&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;You get this error because &lt;span class="command"&gt;MatchCollection &lt;/span&gt;implements only &lt;span class="command"&gt;IEnumerable &lt;/span&gt;and not &lt;span class="command"&gt;IEnumerable(Of T)&lt;/span&gt; All you need to do is change:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;from v &lt;span class="kwrd"&gt;in&lt;/span&gt; ex.Matches(template)&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;from Match v &lt;span class="kwrd"&gt;in&lt;/span&gt; ex.Matches(template)&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I.e. do what it says and specify the type of the range variable.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2661404733717863176?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2661404733717863176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/query-pattern-problem.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2661404733717863176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2661404733717863176'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/query-pattern-problem.html' title='Query pattern problem'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-18881128777591926</id><published>2009-02-05T10:57:00.008+11:00</published><updated>2009-02-08T22:33:33.918+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>CodeSnippet plug-in</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Dammit. Those code snippets look so nice in Live Writer… grr. They get all sorts of horrible linebreaks and the formatting does not work at all. Work dammit!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Explorer: &lt;/p&gt; &lt;img src="http://lh6.ggpht.com/_r1kDJNjQh8Q/SY42s1XwGLI/AAAAAAAABHE/Jy8vRLW1zyg/ScreenShot003.png" /&gt;   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Live Writer:&lt;/p&gt; &lt;img src="http://lh5.ggpht.com/_r1kDJNjQh8Q/SYornbE5xEI/AAAAAAAABDs/c7BI687h8F4/ScreenShot002.png" /&gt;   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Grumble. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-18881128777591926?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/18881128777591926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/codesnippet-plug-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/18881128777591926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/18881128777591926'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/codesnippet-plug-in.html' title='CodeSnippet plug-in'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_r1kDJNjQh8Q/SY42s1XwGLI/AAAAAAAABHE/Jy8vRLW1zyg/s72-c/ScreenShot003.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-389593128678815164</id><published>2009-02-05T10:23:00.006+11:00</published><updated>2009-02-08T12:30:21.718+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>LINQ expression syntax</title><content type='html'>&lt;p&gt;I have been recently starting to use LINQ expression syntax a little more. One refactoring that I have been doing is changing things like:&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(SomeItem item &lt;span class="kwrd"&gt;in&lt;/span&gt; items) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt;(item.SomeProperty == someValue) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;        item.DoSomething();&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    }&lt;/pre&gt;

    &lt;pre class="alt"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;into the &lt;em&gt;slightly&lt;/em&gt; nicer:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var item &lt;span class="kwrd"&gt;in&lt;/span&gt; (from i &lt;span class="kwrd"&gt;in&lt;/span&gt; items&lt;/pre&gt;

    &lt;pre class="alteven"&gt;                     &lt;span class="kwrd"&gt;where&lt;/span&gt; i.SomeProperty == someValue&lt;/pre&gt;

    &lt;pre class="alt"&gt;                     select i)) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    item.DoSomething();&lt;/pre&gt;

    &lt;pre class="alt"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;… My only hesitation is the nastiness of the syntax (if you try to get it inline with no extra variable definitions – yes I know the extra parentheses are not required, but I find &lt;span style="font-family: courier new"&gt;var item in from i in items&lt;/span&gt; to be very unreadable, plus I am often adding method syntax to these things at a later stage)… Some syntactic sugar might be nice to get:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var item from items                                      &lt;/pre&gt;

    &lt;pre class="alteven"&gt;                 &lt;span class="kwrd"&gt;where&lt;/span&gt; item.SomeProperty == someValue                 &lt;/pre&gt;

    &lt;pre class="alt"&gt;                 select item) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    item.DoSomething();&lt;/pre&gt;

    &lt;pre class="alt"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;There is probably also a higher order function way to do this for simple cases of just calling one function on each match, but most of the time the code is not as simple as a single method call. Ideally I would love to do something like:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;(from i &lt;span class="kwrd"&gt;in&lt;/span&gt; items &lt;span class="kwrd"&gt;where&lt;/span&gt; i.SomeProperty == someValue select i).Map(DoSomething);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;P.S. Do not like the new Windows Live Writer editor. I just want an editor that makes it easy to create nice neat mark-up! Why is it so difficult to NOT put in paragraphs and other containers that I don’t need? And why can’t I see them in edit mode? And why do I drop out of the edit container and then have the backspace key delete the whole container?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-389593128678815164?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/389593128678815164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/linq-expression-syntax.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/389593128678815164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/389593128678815164'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/02/linq-expression-syntax.html' title='LINQ expression syntax'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3898975069523957314</id><published>2009-01-30T08:07:00.010+11:00</published><updated>2009-02-08T12:29:16.078+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>WindowsUpdate</title><content type='html'>&lt;p&gt;Installing Studio and stuff on my new desktop (laptop is almost officially dead) I was having a problem with Microsoft Update... &lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;img height="425" src="http://lh5.ggpht.com/_r1kDJNjQh8Q/SYIbmUN98gI/AAAAAAAABDk/dlX4ES9D8x0/s800/windowsupdate.PNG" width="620" /&gt;   &lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage"&gt;     &lt;pre&gt;The website has encountered a problem and cannot display the page you are trying to view. The options provided below might help you solve the problem.&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The error code is 0x8007000B. Looking in the WindowsUpdate.log shows: &lt;/p&gt;

&lt;div class="errormessage-wrapper"&gt;
  &lt;div class="errormessage"&gt;
    &lt;pre&gt;WARNING: DownloadFileInternal failed for http://download.windowsupdate.com/v8/windowsupdate/b/selfupdate/WSUS3/x86/Other/wsus3setup.cab: error 0x8007000b&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;So I tried to download that file in ie and get: &lt;/p&gt;

&lt;div class="errormessage-wrapper"&gt;
  &lt;div class="errormessage"&gt;
    &lt;pre&gt;Access to http://download.windowsupdate.com/v8/windowsupdate/b/selfupdate/WSUS3/x86/Other/wsus3setup.cab has been blocked by WebMarshal&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Ah ha! &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;(P.S. I don't remember the blogger editor being this bad... the format of this post is terrible right now.) &lt;/p&gt;

&lt;p&gt;[Edit] Formatting maybe fixed...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3898975069523957314?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3898975069523957314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/01/windowsupdate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3898975069523957314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3898975069523957314'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/01/windowsupdate.html' title='WindowsUpdate'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_r1kDJNjQh8Q/SYIbmUN98gI/AAAAAAAABDk/dlX4ES9D8x0/s72-c/windowsupdate.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6053359009432496343</id><published>2009-01-29T15:56:00.000+11:00</published><updated>2009-02-08T12:24:26.313+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Lambda expressions</title><content type='html'>&lt;p&gt;I just used a lambda expression for the first time. They are neat!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6053359009432496343?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6053359009432496343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/01/lambda-expressions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6053359009432496343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6053359009432496343'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/01/lambda-expressions.html' title='Lambda expressions'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-9141051464888698473</id><published>2009-01-02T15:44:00.002+11:00</published><updated>2009-02-08T12:23:13.514+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Gunner gunner</title><content type='html'>&lt;p&gt;I was going to write about some things that I am going to do this year... but I think that kind of thing might be part of the problem... Gonna neva duzzit. So I'm not gonna right nuffink. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I will say though that I have changed something. As in already, it is done. Not going to be done, not only started, but done. I changed the template. They all pretty much suck though so I am going to... no wait. Scratch that. Let's leave it at they suck. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I realise that I have now screwed up the code snippet thingy but too bad. I just wanted a change. What do I need to look for in a template? &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Quote callouts must look nice &lt;/li&gt;    &lt;li&gt;Code samples &lt;/li&gt;    &lt;li&gt;Picture and Video posts must look nice &lt;/li&gt;    &lt;li&gt;Simple, block oriented &lt;/li&gt;    &lt;li&gt;Should use my own images not generic ones &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-9141051464888698473?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/9141051464888698473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/01/gunner-gunner.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/9141051464888698473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/9141051464888698473'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2009/01/gunner-gunner.html' title='Gunner gunner'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2953478995336833985</id><published>2008-08-27T00:29:00.002+10:00</published><updated>2009-02-08T12:21:29.356+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Why do we not have...</title><content type='html'>&lt;p&gt;A spell checker that can be run on an entire studio solution, that checks all strings, all mark-up, basically any plain text for spelling errors. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The Code Analysis stuff can now check identifiers which is nice, but why are we still lacking a feature that has been in Word forever.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2953478995336833985?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2953478995336833985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/08/why-do-we-not-have.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2953478995336833985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2953478995336833985'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/08/why-do-we-not-have.html' title='Why do we not have...'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-9054788500547281201</id><published>2008-08-20T03:49:00.008+10:00</published><updated>2009-02-08T12:20:19.226+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Debugger side effects FTW</title><content type='html'>&lt;p&gt;Trying to (quickly) get my generated form site working in Firefox...&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The first problem was that getElementById was returning null when the client side validation function was firing. A quick look at the source and I see that the Name attribute is set but not the Id on the control that I a looking for. IE &amp;quot;copes&amp;quot; by looking at the Name if the Id is not there, Firefox though &amp;quot;follows the standard&amp;quot;. Ok, so why is ASP.Net not generating an Id?&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Due to time constraints I tried setting the Id when I create the control, but though it looks fine in the source and the validation works, now I don't get any data in the Text member after postback? Huh? I guess that ASP does not like it when it does not generate the Id, probably have to munge the ViewState to store my Id... No thanks.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;So I am just playing in the debugger, trying to see what is populated after adding the control, maybe I can set the Id to be the same as the genereated Name... I add a watch for Control.ID, it's null, then I add a Watch for Control.ClientID, its &amp;quot;ctrl09&amp;quot;, now if I just set the contr... wait a second, what?... the watch item for Control.ID just got updated with a value.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;blockquote&gt;Accessing Control.ClientID causes Control.ID to be populated.&lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I look in the source, sure enough, for the control that I frigged with, the Id is defined. I add this after adding the control to the page:&lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt; f.Control.ID = f.Control.ClientID;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And we still let ASP choose the value of the ClientId and hence the Name, but trick it into populating the Id also. (Which I really think that it should anyway...) The assignment is really only for clarity, as this works just as well: &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; MicrosoftIsTehSuck = f.Control.ClientID;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Which at least puts a little smile on my face... &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-9054788500547281201?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/9054788500547281201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/08/debugger-side-effects-ftw.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/9054788500547281201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/9054788500547281201'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/08/debugger-side-effects-ftw.html' title='Debugger side effects FTW'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-8958899864821556204</id><published>2008-08-16T08:11:00.007+10:00</published><updated>2009-02-08T12:15:45.060+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Windows Live Writer</title><content type='html'>&lt;p&gt;I finally got it set up. A big Fuck(*) You Very Much goes out to whomever wrote the automatic configuration part. Use the damn default web browser to go get your pages, not Internet Explorer! Why would you hard code it to use Explorer? My explorer is configured to only work when I am connected to the VPN and hen only for internal addresses! I had to go change the proxy configuration (after I worked out why it wouldn't work)... Now I just wonder if other parts of Live Writer do this and get upset every time I reboot and reset the proxy configuration? Stupid.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Anyway, looks nice enough.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Where do the drafts go? ... Only local looks like for Blogger, the publish draft is greyed out.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Apparently, by installing a little &lt;a href="http://gallery.live.com/liveItemDetail.aspx?li=d4409446-af7f-42ec-aa20-78aa5bac4748&amp;amp;l=8"&gt;code snippet&lt;/a&gt; (... painless) one can post neat looking code samples:&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; color: #f4f4f4; max-height: 200px; line-height: 12pt; padding-top: 4px"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: #f4f4f4; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: white; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;controls:PathDuplicator&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: #f4f4f4; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;controls:PathDuplicator.ItemStyle&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: white; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Style&lt;/span&gt; &lt;span style="color: #ff0000"&gt;TargetType&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;controls:Item&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: #f4f4f4; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Setter&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Property&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Template&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: white; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: #f4f4f4; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ControlTemplate&lt;/span&gt; &lt;span style="color: #ff0000"&gt;TargetType&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;controls:Item&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: white; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;                         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Grid&lt;/span&gt; &lt;span style="color: #ff0000"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;RootElement&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Height&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Left&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Top&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;100&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;RenderTransformOrigin&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;0.8,0.8&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: #f4f4f4; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;                             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Path&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;18,9.36900043487549,37.2080001831055,27.5090007781982&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Data&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;M50,14 C42.942787,12.875842 37.481071,3.0378544 31,16 C29.399416,19.201166 27,22.378658 27,26 C27,31.253759 25.183334,31 34,31 C35.521332,26.436005 38.284637,24.241812 43,21 C49.555965,16.492775 47.970417,15.455626 55,26 C63.315838,38.473759 64.010223,47.474442 57,65 C55.737644,68.155891 49.410244,76.01281 43,68 C37.249264,60.811581 38.936535,57.9706 36,50 C34.534855,46.023182 28.36919,45.217796 23,51 C17.748837,56.655098 20.123365,57.791729 18,65&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Fill&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;#00FFFFFF&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Stretch&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Fill&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Stroke&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;#FF000000&amp;quot;&lt;/span&gt;  &lt;span style="color: #ff0000"&gt;RenderTransformOrigin&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;0.8,0.8&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: white; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;                         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: #f4f4f4; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: white; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: #f4f4f4; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Setter&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: white; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: #f4f4f4; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;controls:PathDuplicator.ItemStyle&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: white; border-top-style: none; line-height: 12pt; padding-top: 0px; border-right-style: none; border-left-style: none; background-: nonefont-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;controls:PathDuplicator&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Hrm. How does one modify the styleses? I guess if I go put them in the configuration of the blog that is easy enough. Would be nice to see the actual styles in the plugin though. Nevermind! Also, the view HTML thingy in the plugin does not show the correct html if you select not to embed the styles, it still shows only the html with the styles embedded. Also also, why not define the styles inline as actual styles rather than setting the style property of each element... just saying.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;After stylish modification:&lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnApplyTemplate() {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   2:&lt;/span&gt;     &lt;span class="kwrd"&gt;base&lt;/span&gt;.OnApplyTemplate();&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   4:&lt;/span&gt;     RootElement = (Panel)GetTemplateChild(&lt;span class="str"&gt;&amp;quot;RootElement&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   6:&lt;/span&gt;     &lt;span class="rem"&gt;// Just make some transformation adjustments&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:&lt;/span&gt;     &lt;span class="kwrd"&gt;for&lt;/span&gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 10; i++) {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;   8:&lt;/span&gt;         Item item = &lt;span class="kwrd"&gt;new&lt;/span&gt; Item();&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  10:&lt;/span&gt;         &lt;span class="preproc"&gt;#region&lt;/span&gt; Silly Stuff&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:&lt;/span&gt;         item.Style = ItemStyle;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  12:&lt;/span&gt;         item.Angle = 10 * i;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:&lt;/span&gt;         &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  14:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:&lt;/span&gt;         RootElement.Children.Add(item);&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="lnum"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Well, wow. Now if only I could get Studio to do alternate line colouring... Can you do that? :) I guess I would also like to see the plugin support more of the Studio display items. But it looks pretty close to how it looks with my settings.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I guess I just need to find out when it uses each of the styles... and go create the styles for each type of code snippet...&lt;/p&gt;

&lt;p&gt;Joy!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(*) Fuck is not in the dictionary... well &lt;strong&gt;now&lt;/strong&gt; it fucking(**) is!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(**) So is that :)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;[Edit] Not joy! Unjoy! What is with the 3 line spacing in the code samples?! Grumble... In fact, what is with the massive amounts of extra space all over the place. Grr. &lt;/p&gt;

&lt;p&gt;[Edit] Fixed spacing. WLW editing still a bit dodgy, but it is easily fixable in the source edit view. Can't way that I could recommend it to anyone that does not know html – i.e. 90% of people who want to blog and would love a real WYSIMYG editor... Mind you those kind of people probably would not really care about how their markup looks - which incidentally makes it all the more vital to help them produce good markup.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-8958899864821556204?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/8958899864821556204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/08/windows-live-writer.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8958899864821556204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8958899864821556204'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/08/windows-live-writer.html' title='Windows Live Writer'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5657348847823581330</id><published>2008-08-15T06:00:00.001+10:00</published><updated>2009-02-08T12:04:41.015+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Magic mystery fields</title><content type='html'>&lt;p&gt;[Just found this draft post that I was waiting to post for some reason... it is from the middle of last year. Almost just a rant but I typed it up so I may as well post it.] &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Liaising with customers, particularly ones who are managers of their company - highly experienced in their own field, though not in IT - can sometime suck. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I constantly find myself having to explain in detail why something cannot work that exact way or why something is a problem that needs to be worked through. Their opinion seems often to be that I don't want to do it or that I say it can't be done because I don't know how. Usually it seems to stem from the problem of what is easy for humans, or obvious to us on paper is not something that the computer can do or represents some information that the system does not have. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;An example from today: Employees have 4 digit employee numbers, their cards have a single digit issue number that is used after their first replacement. When they lose their card again and get a new one the issue number increments. So employee 1234's first card is 1234, their second is 12341, third is 12342 etc. (Whoever thought this kind of arrangement was a good idea needs their fingers broken.) &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;There are two problems that I tried to broach today (right now, before they break the system). There will soon be the need for 5 digit employee numbers (we are up to like 8500), there seem to be some people with more than 9 cards (21, 51!). The system (of course, as it stands) cannot tell the difference between employee 10001 and the second card of employee number 1000 (also 10001). The second card of employee 10001 (100011) and the 12th card of employee 1000 etc. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Trying to explain that the system cannot just take off the last 2 numbers when the person has had more than 10 cards and take of the last 1 number otherwise, did get a little frustrating. Basically when there are 2 dynamic length fields in a composite id, without any other information it is not possible to reliably extract them.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5657348847823581330?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5657348847823581330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/09/magic-mystery-fields.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5657348847823581330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5657348847823581330'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/09/magic-mystery-fields.html' title='Magic mystery fields'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5210234946161499894</id><published>2008-07-11T07:59:00.005+10:00</published><updated>2009-02-08T22:41:40.275+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>AjaxControlLibrary</title><content type='html'>&lt;p&gt;So it takes a little dicking around to do it, but you can use the &lt;span class="command"&gt;DropShadowExtender &lt;/span&gt;with the &lt;span class="command"&gt;ModalPopupExtender&lt;/span&gt;. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I had a little problem getting it to work some time ago, then when I noticed the &lt;span class="command"&gt;DropShadow &lt;/span&gt;attribute on the popup class I thought that there must have been a problem with using them together so I just used the internal drop shadow. Well, after finding a couple of other issues with the &lt;span class="command"&gt;DropShadow &lt;/span&gt;attribute, and finding no way to specify opacity or rounded corners, I went back to trying the two extenders together. The solution makes sense in the end I guess. You just need to put the drop shadow on an element inside the one that has the popup, not on the same panel. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;An example should be fairly clear: &lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&amp;lt;asp:Panel ID=&lt;span class="str"&gt;&amp;quot;pExecuteProgress&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; style=&lt;span class="str"&gt;&amp;quot;display:none;&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &amp;lt;asp:Panel ID=&lt;span class="str"&gt;&amp;quot;pExecuteProgressContent&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; CssClass=&lt;span class="str"&gt;&amp;quot;ExecuteProgress&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;        &amp;lt;div&amp;gt;Processing...&amp;lt;/div&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;        &amp;lt;div&amp;gt;&amp;lt;img alt=&lt;span class="str"&gt;&amp;quot;...&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;images/status_anim.gif&amp;quot;&lt;/span&gt; /&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &amp;lt;/asp:Panel&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;    &amp;lt;cc1:DropShadowExtender ID=&lt;span class="str"&gt;&amp;quot;DropShadowExtender1&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; TargetControlID=&lt;span class="str"&gt;&amp;quot;pExecuteProgressContent&amp;quot;&lt;/span&gt; TrackPosition=&lt;span class="str"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; Opacity=&lt;span class="str"&gt;&amp;quot;0.3&amp;quot;&lt;/span&gt; Width=&lt;span class="str"&gt;&amp;quot;8&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;lt;/asp:Panel&amp;gt;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&amp;lt;cc1:ModalPopupExtender ID=&lt;span class="str"&gt;&amp;quot;mpeExecuteProgress&amp;quot;&lt;/span&gt; runat=&lt;span class="str"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; PopupControlID=&lt;span class="str"&gt;&amp;quot;pExecuteProgress&amp;quot;&lt;/span&gt; TargetControlID=&lt;span class="str"&gt;&amp;quot;pExecuteProgress&amp;quot;&lt;/span&gt; BehaviorID=&lt;span class="str"&gt;&amp;quot;ExecuteProgress&amp;quot;&lt;/span&gt; BackgroundCssClass=&lt;span class="str"&gt;&amp;quot;ModalBackground&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;lt;/cc1:ModalPopupExtender&amp;gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
A couple of notes about this example: 

&lt;ul&gt;
  &lt;li&gt;I have specified the same control for the &lt;span class="command"&gt;TargetControlID &lt;/span&gt;- it has to be non null, but I am showing this popup only via JS &lt;/li&gt;

  &lt;li&gt;The &lt;span class="command"&gt;display:none &lt;/span&gt;on the outer panel is to prevent the flashing of the control on page load that you can sometimes get &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just for interest sake, here are the two css classes mentioned: &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;.ExecuteProgress {&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  border: 1px solid #000000;&lt;/pre&gt;

    &lt;pre class="alt"&gt;  background-color: #FFFFFF;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  padding: 30px 80px 30px 80px;&lt;/pre&gt;

    &lt;pre class="alt"&gt;  font-family: Arial;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  font-size: large;&lt;/pre&gt;

    &lt;pre class="alt"&gt;  color: #3366FF;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;}&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;.ModalBackground {&lt;/pre&gt;

    &lt;pre class="alt"&gt;  background-color: #C0C0C0;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;  filter: alpha(opacity=70);&lt;/pre&gt;

    &lt;pre class="alt"&gt;  opacity: 0.7;&lt;/pre&gt;

    &lt;pre class="alteven"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I gotta find a better way to post code... I just used &lt;a href="http://www.opinionatedgeek.com/DotNet/Tools/HTMLEncode/Encode.aspx"&gt;an online encoder&lt;/a&gt; to &lt;span class="command"&gt;HTMLEncode &lt;/span&gt;the text, then it is just in a &lt;span class="command"&gt;&amp;lt;pre&amp;gt;&lt;/span&gt; *sigh*&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
[Edit] Code posting fixed. 

  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5210234946161499894?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5210234946161499894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/07/ajaxcontrollibrary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5210234946161499894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5210234946161499894'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/07/ajaxcontrollibrary.html' title='AjaxControlLibrary'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-7808517363153687324</id><published>2008-05-18T12:40:00.003+10:00</published><updated>2009-02-08T11:35:29.572+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>One bad apple?</title><content type='html'>&lt;p&gt;It's funny, just about every website you go to sign up on that wants your email address gives you those TWO boxes to fill in. Email and Verify Email. I don't who started this, or why everyone thinks they should follow, but I wish it would stop. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I understand where this malady came from: it was some smart web monkey seeing the Password and Validate Password combo and adopting it. But I don't think they quite understood why this mechanism is needed in that case. Just to be explicit - it is only needed &lt;em&gt;because you can't read what you just typed in&lt;/em&gt; in the Password box. For the email address, I can re-read that just fine thanks. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Besides, I figure if you can't either type in your correct email address, or read that is not correct and correct it, then you failed my minimum user requirements. There is a certain limit to how far you need to go holding people's hands.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7808517363153687324?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7808517363153687324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/05/one-bad-apple.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7808517363153687324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7808517363153687324'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/05/one-bad-apple.html' title='One bad apple?'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6878763931371109920</id><published>2008-03-19T13:29:00.002+11:00</published><updated>2009-02-08T11:30:57.496+11:00</updated><title type='text'>TortoiseSVN</title><content type='html'>&lt;p&gt;The global ignore pattern that I am using at the moment is: &lt;/p&gt; &lt;span class="command"&gt;*bin *obj RECYCLER thumbs.db *Debug *Release&lt;/span&gt;   &lt;p&gt;Which is probably fine for a single developer. When working in a team you would probably want to block &lt;span class="command"&gt;*.suo&lt;/span&gt; also.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6878763931371109920?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6878763931371109920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/03/tortoisesvn.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6878763931371109920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6878763931371109920'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2008/03/tortoisesvn.html' title='TortoiseSVN'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-911221280560361409</id><published>2007-11-28T02:19:00.001+11:00</published><updated>2009-02-08T11:26:38.375+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>The tale of Mister Splashy Pants</title><content type='html'>&lt;p&gt;Online polling is broken. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;With sites like digg and reddit and many others, the ease with which a group of people can sway the vote is demonstrated time and again. The problem is differentiating “real” voters from “funny” voters. It is just too easy for someone to give a voting link to a large number of people who are not really interested in the outcome of the poll, who will totally unbalance the results. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Perhaps what online polls need is to use some of the mechanics of regular political voting systems. An electoral roll with a defined closing date that is before polling commences. No need to keep voter information long term, just long enough to have the people interested in a certain poll indicate their participation, and ensure that there are no band-wagon jumpers at the last minute. An online news site post saying “Quick, register to vote on the name of the Greenpeace whale - there is sure to be a funny option: we will let you know which option we think is the funniest in a few days!” is not likely to attract the &lt;a href="http://reddit.com/info/61gqb/comments/"&gt;same level of attention&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-911221280560361409?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/911221280560361409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/11/tale-of-mister-splashy-pants.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/911221280560361409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/911221280560361409'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/11/tale-of-mister-splashy-pants.html' title='The tale of Mister Splashy Pants'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3296396189710395106</id><published>2007-11-07T02:22:00.000+11:00</published><updated>2009-02-07T22:44:14.933+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>‘S not my job.</title><content type='html'>&lt;p&gt;“It's not my responsibility to fix that” or “I did not think I had the authority to ask for a certain action” You have to ask yourself a question. Am I happy with my current position in the hierarchy? If you want advancement, more responsibility, one way to get it is to assume it. Take on new roles and new responsibilities and they will become yours. That or you will be put in your place. (It may be time to move on.) &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;There is nothing more frustrating than someone who continually counters your requests with one of the two phrases at the top there. When I hear it some from someone's mouth what I really hear is “I am quite happy just plodding along in my job and I never want a raise again.” If I hear it come out of my own mouth... (It may be time to move on!) &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Don't wait to be given responsibility. Don't wait for the person who &lt;em&gt;should&lt;/em&gt; be doing something to do it - make it happen. It makes you look dynamic. Perhaps you will overstep the bounds of your current position, but that may just make someone realise that you don't belong there.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3296396189710395106?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3296396189710395106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/11/s-not-my-job.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3296396189710395106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3296396189710395106'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/11/s-not-my-job.html' title='‘S not my job.'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5289388396307652616</id><published>2007-09-20T06:42:00.000+10:00</published><updated>2009-02-07T22:40:20.662+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>I smells somethin'</title><content type='html'>&lt;p&gt;Programmer 1: “What the... That code is horrible. Who did that?”&lt;/p&gt;  &lt;p&gt;Programmer 2: “Erm... Yeah that was me. I know it's crap.”&lt;/p&gt;  &lt;p&gt;Programmer 1: “Crap? This code gives crap a bad name. This code goes right by crap and out the other...”&lt;/p&gt;  &lt;p&gt;Programmer 2: “Yeah, yeah okay, that'll do, I know, but I wrote that shit like 3 years ago.”&lt;/p&gt;  &lt;p&gt;Programmer 1: “Uhuh. Umm... This code over here is just as bad... You wrote this shit yesterday!”&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Everyone knows that the worst code you have ever seen is the code that you wrote 6 months ago. However you are supposed to &lt;strong&gt;learn from your mistakes&lt;/strong&gt;*. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;* &lt;em&gt;That way you get to make new and interesting ones each time.&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5289388396307652616?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5289388396307652616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/09/i-smells-somethin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5289388396307652616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5289388396307652616'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/09/i-smells-somethin.html' title='I smells somethin&amp;#39;'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4890247561363753062</id><published>2007-09-19T06:20:00.001+10:00</published><updated>2009-02-07T22:36:11.649+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>So don't press that button!</title><content type='html'>&lt;p&gt;It was (probably) Murphy who said (something like) if there are two ways to do something and one of them with have disastrous consequences, the probability that someone will do it that way is 1. Thus, all good programmers ensure that pressing the wrong button at the wrong time will not cause things to blow up. Lumped in here are things like checking input, clicking in the wrong spot, pressing the delete key at the wrong moment. For these things and more we can ignore, correct or confirm inputs. Good. But you can't be pissed off when you click the wrong, but valid from the context, button and that functionality completes successfully. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;For instance, there is functionality A and functionality B that both act on the current input. These functionalities are both executed thousands of times per day, there is no way to tell from context (previous operations) which one is more likely, and there is no time to have a confirmation. So when you have operators that click B when they mean A (and not notice - it is not like you can't cancel you B and put in an A) you have a training issue. There is nothing the system can do about it! That is not the worst of it though. What I really love is the service calls and bug requests saying that the reports for the operations on a certain terminal are “all screwed up, there are B's where there should not be.” So I take the 10 minutes that it takes to verify that there were no problems with the processing and what I find amounts to “That place where there was a B is because the operator pressed B.” &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;“Why is my transaction cancelled?” Because the operator cancelled it. &lt;/p&gt;  &lt;p&gt;“Why did the upstairs bell ring?” Because the person pressed the top button. &lt;/p&gt;  &lt;p&gt;“Why is there a charge of $0.01 on my credit card?” Uhh, because the cashier ran a transaction for 1 cent on your card?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4890247561363753062?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4890247561363753062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/09/so-dont-press-that-button.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4890247561363753062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4890247561363753062'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/09/so-dont-press-that-button.html' title='So don&amp;#39;t press that button!'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5890513587161436894</id><published>2007-07-31T09:07:00.000+10:00</published><updated>2009-02-07T22:30:42.915+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>ClickOnce - or: how to instafuck your whole installed base with one click of the mouse!</title><content type='html'>&lt;p&gt;Fuck me that was fucked. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;We are rolling out a new version of a program which is updated via ClickOnce. We currently (luckily) have about 12 of 80 machines installed - the rest are using the old, manually updated software. I am actually pretty glad that we had today's problem today and not in a couple of days time when the whole thing was rolled out - _that_ would have been a major shit fight. &lt;/p&gt;  &lt;p&gt;This morning I got a request for changes. Nothing huge. Thought it would be a nice demonstration for the live update feature of the new system. 10 minutes to code. Took my time testing, 1 hour. Published the changes onto the beta site, let the test machines auto-update. Cool. I sign off on the mods, the client give the go-ahead for live. I publish on the live server. Sweet. Now I keep a test machine connected up to the live publication just so I can have a last minute test to make sure all is well. I go and run the client on that machine. The auto-update barfs. Crap. I go to look in the program group for the program. The machine freezes. Crap crap. I reboot and try again. No go. Now I am starting to get a little worried. I connect up to one of the client's live machines which is not being used at the moment and let the auto-update run. Barf. Crap crap crap. Machine freezes. Fuck. I try to uninstall the program, the item does not disappear from the control panel. I try again. Freeze. Reboot. Uninstall. Okay. Now I reinstall the new version, and it works. However the calls have started to come into the call centre... “We logged out and logged in again and it did its auto-update and now the computer is broken”. Fuuuck. So the technicians get to work some overtime uninstalling the broken update then reinstalling it from scratch, and I get to do some overtime to work out why the fuck it did not work. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;After a 30 or so re-deployments in different configurations I find out that some kind soul has installed Windows Installer 3.1 on my testbed. I add it as a prerequisite so it gets installed first - now the auto-update works. So that is why my initial deployment test did not fail - there seems to be some kind of problem with the default version of Windows Installer, and I didn't see it because the testbed already was using a later version. I go check in with the technicians and we run a test on a machine that was not yet fucked up - installed Windows Installer 3.1, then let the auto-update run - no problemo. Fuck. I wanna break someone's fingers! &lt;/p&gt;  &lt;p&gt;So after an hour of downtime for &amp;gt; 10% of the system I know what we have to do - re-do the install from scratch with Windows Installer 3.1 as a prerequisite. We have to start again because it has to be installed as Administrator. I am not going to be popular with the technicians... &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I used to like ClickOnce. But now I am not so sure. It is very difficult to integrate into a responsible deployment strategy. When the whole system is deployed that way, how can you test a new update? I have never seen a case where the re-install (rather than the auto-update) does not work, so you can't just say that if the clean install works the auto-update will work. So imagine that all the machines are deployed from the live site - the auto-update is kind of all or nothing, you can't point a few machines at a different server to make sure the update works. I guess you could copy the live site to a test site, install from there, then update the test site and let an update go through. There is also no rollback. Once you let the update go, it's gone baby. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Just goes to show you - must have test machine that is identical to the live. Well, I'm off to padlock up the test machine... where did I put those thumbscrews? &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5890513587161436894?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5890513587161436894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/07/clickonce-or-how-to-instafuck-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5890513587161436894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5890513587161436894'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/07/clickonce-or-how-to-instafuck-your.html' title='ClickOnce - or: how to instafuck your whole installed base with one click of the mouse!'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6706085735748400495</id><published>2007-07-07T03:49:00.000+10:00</published><updated>2009-02-07T22:26:58.605+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Wake up!</title><content type='html'>&lt;p&gt;For a while now I have had an alarm clock that can wake you up to a CD. I used it a bit to wake up to music, but I had always thought that I could do better than that and create a playlist specifically for waking up. Mostly I had to have the volume up loud enough to ensure that I woke up eventually, meaning that it was too loud at the start, jarring me awake - which I wanted to avoid. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Some things that I have noted about waking up. Waking up to the beep beep alarm is not nice, but it is certain to make you leave the bed. Waking up to white noise it better, but it is possible to sleep through. Waking up to nice music is the best, but again sleeping through is a distinct possibility. When I am not super tired, I will generally wake up at the sound of the CD spinning up, or the light pop sound the amplifier makes when turning on. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;So what I have thought might be nice is a kind of ramping up in the volume and wakeability of the noise. I was thinking something like: Low volume environmental sounds, white noise like, waves, wind. Most time I would wake up to this, perhaps drifting in and out of sleep, remembering dreams, getting ready to get up. Low volume relaxing music. This will make me up if I miss the first sounds, I may even get up now if I was fully awoken by the first phase. Medium volume energetic music. This signals the time to rise. Could be possible to sleep until now, if so this will wake me. Loud music that it is basically not possible to sleep through, techno, metal, something like that. The three remaining are the backup plan. I basically don't see getting to this point very often. Medium to loud white noise tones. Loud beeping. David calls in dead. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;So what remains now is choice of musics. I am thinking one of the tracks from the glasshouse CD for the environmental sounds. Either one of the early movements from a Bach cannon and fugue or something from hallucinogen for the relaxing. Good wake up music... indy rock, thinking female vocal, rising crescendo... have to think about this one for the medium volume energetic. Loud music backup. So many choices... PWEI, Rage, anything a bit violent and raucous. &lt;/p&gt;  &lt;p&gt;Should play with the audio levels on the MP3s that I create for this so that the volume ramps up nicely. May not even have to worry about the final stages, just put another loud sound on with the levels really tweaked in the MP3. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;(Might also be interesting to make the playlist, then merge it all into one track so that I can do different ones with different music and use them on shuffle so I don't get sick of the same music every morning...)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6706085735748400495?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6706085735748400495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/07/wake-up.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6706085735748400495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6706085735748400495'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/07/wake-up.html' title='Wake up!'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-6977258763004671665</id><published>2007-07-06T22:22:00.000+10:00</published><updated>2009-02-07T22:23:42.618+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Just do it</title><content type='html'>&lt;p&gt;I feel like productivity people (the GTD crowd, that sleep guy, zenhabits) explaining how to lose bad habits, how to have a morning routine, how to organise your life is much the same as some happy person telling a depressed person to “just feel happy”. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I read somewhere today that when introducing a new habit into your lifestyle, “the first step is getting yourself to do it”. Fuck no buddy - the WHOLE THING is getting myself to do it. Do you not understand that what I have trouble getting myself to do is ‘getting myself to do things’? &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Why so glum little girl? “I'm depressed”. Well cheer up, you'll feel much better if you just smile and be happy. Being happy is the first step on the road to not being depressed.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;*Barf*&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-6977258763004671665?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/6977258763004671665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/07/just-do-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6977258763004671665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/6977258763004671665'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/07/just-do-it.html' title='Just do it'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4710577558762968679</id><published>2007-06-22T01:11:00.001+10:00</published><updated>2009-02-07T22:20:43.467+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Not my problem (I wish)</title><content type='html'>&lt;p&gt;It can suck sometimes to be left working on a project after the original project manager has left the company. All their mistakes and oversights become your property - even the ones that are invisible until the fan is at full speed and the excrement is in flight. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Customer: “We tried to use the system today with the PC disconnected from the network and it does not work.” &lt;/p&gt;  &lt;p&gt;Me: “No I don't suppose that it would. It needs to connect via the network to its [hardware device] at all times.” &lt;/p&gt;  &lt;p&gt;C: “Well what about each year when we sell things outside of the store with no network?” &lt;/p&gt;  &lt;p&gt;Me: “I don't know.” &lt;/p&gt;  &lt;p&gt;C: “Why didn't you think of this before?” &lt;/p&gt;  &lt;p&gt;Me: (Because it's not my job? How the fuck should I know? Maybe you should ask the guy who is not here anymore. Maybe you should ask why we don't have a project manager at all?) “We will certainly have to look into that.” &lt;/p&gt;  &lt;p&gt;C: “You realise we need this to work by [the day two days from now] don't you?”&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4710577558762968679?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4710577558762968679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/06/not-my-problem-i-wish.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4710577558762968679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4710577558762968679'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/06/not-my-problem-i-wish.html' title='Not my problem (I wish)'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4394701214947959514</id><published>2007-06-20T03:34:00.001+10:00</published><updated>2009-02-07T22:16:49.288+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Output filter!</title><content type='html'>&lt;p&gt;A corollary to the input filtering rule: &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;blockquote&gt;Couch your demands in terms that will make your actual desires apparent to the person whose assistance you are soliciting, rather than explicitly telling them what to do. &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Let them work with you to solve the problem. Explain what effects you would like to see rather than how they should act. Let them figure that out for themselves. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;One, they are probably better qualified than you to judge what they really need to do - assuming that you are involving them because it is their area of expertise. &lt;/p&gt;  &lt;p&gt;Two, people are more likely to want to do something if (they think) it was their own idea to do so. Rather than looking at your demand and defensively trying to avoid change, the impetus for the action comes from within and they will likely feel empowered in its performance.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4394701214947959514?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4394701214947959514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/06/output-filter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4394701214947959514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4394701214947959514'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/06/output-filter.html' title='Output filter!'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-8969089748871550347</id><published>2007-06-20T03:22:00.001+10:00</published><updated>2009-02-07T22:14:20.971+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>A, B, C</title><content type='html'>&lt;p&gt;What part of “it has to done in the order A then B then C” do you not understand? &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;First you do A. Then later you can do B. Finally, when A and B are done, you may do C. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;“Okay so, I have not done A yet, but B is done. Can I just do A now then C?”&lt;/p&gt;  &lt;p&gt;Nooo! You have to do A first, then B then C.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-8969089748871550347?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/8969089748871550347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/06/b-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8969089748871550347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8969089748871550347'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/06/b-c.html' title='A, B, C'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-7635900378058238276</id><published>2007-06-20T01:46:00.000+10:00</published><updated>2009-02-07T22:11:56.115+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Input filtering</title><content type='html'>&lt;p&gt;One important difference between working with a boss and working without one is how you think about what you are asked to do. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Normally when you get a demand from you boss it comes with an express or implied priority, you slip it into your schedule, do it, and report back. Sometimes you may have some say in modifying the priority, sometimes you may question the validity of the task, but mostly you just do it. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Working now without any direct boss, just vague priorities from on high, this sequence of “receive work unit”, “execute” is often counterproductive. I knew that some filtering would be required, but I did fully understand the extent to which one must think about what people are asking for, why they might think they want that, hence what they really want, weigh that with who they are, and decide what I should give them. People seldom take the time to explain why they want something, and often what they want is not the right thing. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I need to focus on getting them to explain the problem they are trying to solve rather than let them specify which actions they think I should take. From there I can understand what really needs to be done (perhaps nothing) and help them to understand how this new action actually solves their problem. Only then can we decide on who will do what and when. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;It is the same as with any problem solving. It is important to start with the definition of the problem - particularly when you are asking the help or advice of someone else. It is important not to colour their thinking with your supposed framework for the solution.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7635900378058238276?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7635900378058238276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/06/input-filtering.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7635900378058238276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7635900378058238276'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/06/input-filtering.html' title='Input filtering'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-7955593547303976567</id><published>2007-06-01T01:05:00.000+10:00</published><updated>2009-02-07T22:09:53.174+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Hungarian notation</title><content type='html'>&lt;p&gt;This (useful) notation prefixes each variable with a label or tag indicating the kind of information that is being stored - what is its purpose. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;KIND. Not type. Please, either go and read the original (Simonyi) specification of Hungarian or just don't use it. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Calling your variables bSomething or iNumber or lpszBlahBlah is worse than useless. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-7955593547303976567?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/7955593547303976567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/hungarian-notation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7955593547303976567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/7955593547303976567'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/hungarian-notation.html' title='Hungarian notation'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1264420922505593525</id><published>2007-05-28T23:38:00.001+10:00</published><updated>2009-02-07T22:08:19.597+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Everything'/><title type='text'>Creationism</title><content type='html'>&lt;p&gt;The universe is complex. &lt;/p&gt;  &lt;p&gt;Far too complex to have been produced by random processes from nothing. &lt;/p&gt;  &lt;p&gt;It is just not possible for more-complex things to evolve from less-complex things. &lt;/p&gt;  &lt;p&gt;There must have been a creator. &lt;/p&gt;  &lt;p&gt;The complex universe was created by a creator. &lt;/p&gt;  &lt;p&gt;[logical continuation...] &lt;/p&gt;  &lt;p&gt;The creator must therefore have been more complex than the universe. &lt;/p&gt;  &lt;p&gt;The creator is very complex. &lt;/p&gt;  &lt;p&gt;Far, far too complex to have come from nothing... &lt;/p&gt;  &lt;p&gt;...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1264420922505593525?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1264420922505593525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/creationism.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1264420922505593525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1264420922505593525'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/creationism.html' title='Creationism'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2396030519550604206</id><published>2007-05-25T02:01:00.000+10:00</published><updated>2009-02-07T22:07:00.371+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>ReSharper - Awesome, Expensive, Slow</title><content type='html'>&lt;p&gt;&lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper&lt;/a&gt; (R#) is great. The refactorings and code completions and cleanups and warnings are truly awesome. I now really want all the code that I work on to pass with few or no warnings. But I am going to have to uninstall it for two fairly mundane (i.e., should be easy to fix) reasons: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It totally has screwed up all of the keyboard shortcuts. Even after flipping back to all VS 2005 shortcuts there are some things that don't work, and worse, there are many nice features of R# that are no longer available at the touch of a button. &lt;/li&gt;    &lt;li&gt;God damn it's slow! Not on a new file, or a small file. But on big old files that have lots (200 or more it seems) warnings. Each time you make an edit to the file it re-analyses it which takes a looong time. (7000 line file, 280 warnings, 15 seconds) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;These should both be reasonably easy to fix: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Don't frig with the shortcuts! Give me a list of functions for which you would like to add shortcuts and I will assign them. Maybe this is doable by the end user - I'm sure that I could eventually get my old studio shortcuts working again, but I am not paying US$250 for a tool only to spend hours repairing the damage it has done. &lt;/li&gt;    &lt;li&gt;Let me disable the automatic analysis of the current file. Maybe in that nice little coloured box at the top of the colour bar there that had a hand icon but does not seem to actually DO anything. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I have used R# for a couple of days now, and I love it! You have a convert people! But I CAN'T use it like it is. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2396030519550604206?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2396030519550604206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/resharper-awesome-expensive-slow.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2396030519550604206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2396030519550604206'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/resharper-awesome-expensive-slow.html' title='ReSharper - Awesome, Expensive, Slow'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3816624424137180189</id><published>2007-05-23T04:58:00.000+10:00</published><updated>2009-02-07T22:03:27.375+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Web 2.0 style guide</title><content type='html'>&lt;p&gt;Orange! Light green! Dark blue! Light blue! &lt;/p&gt;  &lt;p&gt;Very faint diagonal or way off-centre circular gradients. &lt;/p&gt;  &lt;p&gt;Dark text on light same coloured background. &lt;/p&gt;  &lt;p&gt;Dotted (light coloured) borders (and horizontal rules). &lt;/p&gt;  &lt;p&gt;Shiny glass or gel (jelly!) looking buttons (that are not usually buttons) and text. &lt;/p&gt;  &lt;p&gt;Text sitting on a shiny table and all manner of other (3d) surface effects. &lt;/p&gt;  &lt;p&gt;Big bold headlines. Often multiple down or diagonally across the page. &lt;/p&gt;  &lt;p&gt;Smaller (gray) body text with lots of white padding. &lt;/p&gt;  &lt;p&gt;Many pointed stars. &lt;/p&gt;  &lt;p&gt;Cute icons. &lt;/p&gt;  &lt;p&gt;No underlined links. &lt;/p&gt;  &lt;p&gt;Digg this, post on reddit, blog this, tag on del.icio.us, etc., etc., etc. buttons. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I'm not saying that any of this is good or bad, just what I have been noticing.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3816624424137180189?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3816624424137180189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/web-20-style-guide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3816624424137180189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3816624424137180189'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/web-20-style-guide.html' title='Web 2.0 style guide'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-3121203140364052811</id><published>2007-05-23T01:05:00.000+10:00</published><updated>2009-02-07T22:01:08.555+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Implementing IExceptionHandler</title><content type='html'>&lt;p&gt;When using the Enterprise Library Exception Handling Block, there are (at least) two things that you have to do to get your custom handler to work that I missed when I looked at the docs. Specify &lt;span class="command"&gt;CustomHandlerData&lt;/span&gt; as the &lt;span class="command"&gt;ConfigurationElementType&lt;/span&gt; for the handler class: &lt;/p&gt;  &lt;div class="csharpcode-wrapper"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;[ConfigurationElementType(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(CustomHandlerData))]&lt;/pre&gt;

    &lt;pre class="alteven"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; WatchdogHandler : IExceptionHandler {&lt;/pre&gt;

    &lt;pre class="alt"&gt;...&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Provide a constructor that takes a &lt;span class="command"&gt;NameValueCollection&lt;/span&gt;: &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; WatchdogHandler(NameValueCollection attributes) { }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Final note. &lt;/p&gt;

&lt;p&gt;I have had weird problems with the Enterprise Library Configuration tool. When I first created the handler class it would not load the assembly in the tool. It said that no class that implemented &lt;span class="command"&gt;IExceptionHandler&lt;/span&gt; could be found. When I fixed the problems with my class it still would not load. Frustrated, I created another handler class from scratch (no other classes in the assembly, no other bits of code lurking around to cause problems) and that one loaded. Then, magically, the other class loaded as well!? Perhaps it was after all the closing and re-opening of the tool that it started to work, but I am not convinced. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-3121203140364052811?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/3121203140364052811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/implementing-iexceptionhandler.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3121203140364052811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/3121203140364052811'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/implementing-iexceptionhandler.html' title='Implementing IExceptionHandler'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5985458200233197355</id><published>2007-05-17T23:48:00.000+10:00</published><updated>2009-02-07T21:55:20.521+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Phrases which flip my “no-longer debateable” switch</title><content type='html'>&lt;p&gt;For the bible tells me so. &lt;/p&gt;  &lt;p&gt;If you have nothing to hide, what is the problem? &lt;/p&gt;  &lt;p&gt;I'm not a racist but... &lt;/p&gt;  &lt;p&gt;It's just a theory. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Others that just make my sigh and shake my head:&lt;/p&gt;  &lt;p&gt;Anything that is described as having an infinite number of configurations or settings.&lt;/p&gt;  &lt;p&gt;That [insert mechanical device here] totally breaks all the laws of physics.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5985458200233197355?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5985458200233197355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/phrases-which-flip-my-no-longer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5985458200233197355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5985458200233197355'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/phrases-which-flip-my-no-longer.html' title='Phrases which flip my “no-longer debateable” switch'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1469236045946631013</id><published>2007-05-02T03:56:00.000+10:00</published><updated>2009-02-07T21:53:12.244+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ninjas'/><category scheme='http://www.blogger.com/atom/ns#' term='Everything'/><title type='text'>Item: Ninjas, two score. Check.</title><content type='html'>&lt;p&gt;Is there any problem that could not be solved by 40 Ninjas? Didn't think so. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Ninjas: not just for breakfast anymore.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1469236045946631013?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1469236045946631013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/item-ninjas-two-score-check.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1469236045946631013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1469236045946631013'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/item-ninjas-two-score-check.html' title='Item: Ninjas, two score. Check.'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4136138388733747654</id><published>2007-05-01T23:48:00.000+10:00</published><updated>2009-02-07T21:52:16.184+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='User Interface'/><title type='text'>No, that's not it, try again.</title><content type='html'>&lt;p&gt;If there is only one valid entry for some field in an interface, why don't you just put it in for me? &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I was using this form created by someone here today, it is a form for our overtime: “Please enter the date for last Saturday” Uh... okay. I guess that was the 22nd of April. 04 22 Bzzt! No sorry that is not the correct date. Please Enter the date for last Saturday. Oh yeah, it is the 21st. Bzzt, that date is too far in the past. Are you serious? The only date that I can enter is 28th April? Bingo. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Well bugger me. If you will only accept one value, and you know what that value is, why don't you just put that in there!? And why can't I enter a date from a past week? It is not an automated system, this gets sent to our HR department for manual human entry into another system. She asked me to resubmit my form from 2 weeks ago. Sheesh. I can see why you would want to make sure that someone selected a Saturday (the start of our billing week), but why force a single Saturday? The people in HR know what they are doing, I am not going to be able to slip in old forms just by putting in an old date, if they are not expecting them they are not going to process them. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;If there is really no date selection, don't ask me to select one.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4136138388733747654?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4136138388733747654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/no-thats-not-it-try-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4136138388733747654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4136138388733747654'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/05/no-thats-not-it-try-again.html' title='No, that&amp;#39;s not it, try again.'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-413495384020357404</id><published>2007-04-20T23:50:00.000+10:00</published><updated>2009-02-07T21:46:43.538+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Make ‘em mandatory!</title><content type='html'>&lt;p&gt;There is a town in the states called &lt;a href="http://wnd.com/news/article.asp?ARTICLE_ID=55288"&gt;Kennesaw&lt;/a&gt; with what might be called the opposite of gun control laws. Each household is required to own and maintain a gun. Must be a real shoot-em-up town right? People gettin’ popped left and right? Check out the article. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;When you think about it, the proposition “If we make guns illegal there will be less gun crime” is pretty nonsensical. I would suggest the simplified relation “Gun crime is proportional to the difference between the number of armed bad guys and the number of armed good guys”. From this it seems likely that decreasing the number of guns the bad guys have would be good, just as increasing the number of guns the good guys have should have a reducing effect on the level of gun crime. This subtraction however is problematic: it is difficult to actively reduce the number of bad guns. Installing gun control laws causes the good guys who have guns to turn them in and the bad guys to snigger. Arming the populace may well put guns in the hands of the bad guys, but I would argue that on balance more good guns are created than bad - criminals don't feel they need gun licences, don't register their guns, don't pay retail, don't install gun safes, don't enrol in official how to shoot safely courses. Gun control laws have the opposite to the intended effect. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;blockquote&gt;If you make gun ownership criminal, only criminals will own guns.&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-413495384020357404?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/413495384020357404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/make-em-mandatory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/413495384020357404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/413495384020357404'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/make-em-mandatory.html' title='Make ‘em mandatory!'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-1058409739430312426</id><published>2007-04-18T08:28:00.000+10:00</published><updated>2009-02-07T21:40:59.089+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Are you packing?</title><content type='html'>&lt;p&gt;I would like to live in a world without guns. I would like to live in a world without violence of any sort. If people were never even verbally abusive to one another I would consider that we were on our way to the perfect society. If someone threatens your security with violence, I believe the first response should be to try to defuse the situation, to remove yourself and those dear to you from danger into safety. Only as a last resort would I consider meeting violence with violence. But to not take that last step. To turn the other cheek as it were - well I leave that to other folk. For me, if you threaten me and you leave me no other recourse than to violence, then violence you will get. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I am starting to believe that in some societies this necessarily extends to a willingness to counter gun violence with guns. I have often thought, and heard said by others, that the death toll in shooting rampages would be very much diminished[1] by some of the people involved (witnesses, victims) having guns (heroes). I think that is a very difficult argument to dismiss outright. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I recently watched a video by Penn &amp;amp; Teller on the &lt;a href="http://www.washingtonceasefire.com/content/view/47/45/"&gt;bullshit that is gun control&lt;/a&gt;. Their argument is very America centric (citing constitutional amendments), but I think the arguments within translate nonetheless. Then yesterday there was the &lt;a href="http://en.wikipedia.org/wiki/Virginia_Tech_massacre"&gt;shooting at Virginia Tech&lt;/a&gt;. I wonder how far a lone gunman would progress into his spree if some significant portion of the populace were armed. I wonder how many criminals, who now find themselves in the wonderful position of being likely the only person with guns in a couple of minute radius, would reconsider all manner of crimes. Overnight there was also a &lt;a href="http://www.abc.net.au/news/newsitems/200704/s1899898.htm"&gt;shooting by a security guard of a man in Sydney&lt;/a&gt;. Two men approached him with a drawn gun, likely not expecting any resistance. He shot them and they fled. Criminals use guns to have a power advantage. By reducing the power of the populace (removing their guns) you let criminals easily tip the balance in their favour - carry a handgun. An armed populace (maybe as few as 2% carrying weapons) could greatly reduce a lone criminal's expectation of being ‘the most powerful’ in a certain situation merely by carrying a gun. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I am not saying that everyone should or needs to have a gun. But those considered stable enough, those who can show they can do so safely, those who wish to take on the responsibility of using a gun if the situation requires, why not? &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Gun control folks are always carrying on about needing to ban guns. “If only we could remove all the guns we would be safe”. Well think about this: Virginia Tech was a gun free zone. For the 30 minutes or so between 9am and 9.30am there was only one person in the area who had a gun, and I think we all know now what he decided to do with it. I just wonder what may have happened if some of the teachers, the RA, the seniors, the janitors were armed. I wonder even what would have been different about that morning if the gunman had even the slightest doubts that perhaps he would meet with people in that place that were armed and prepared to defend themselves and others. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I don't think ideas that appear logically sound ought to be dismissed outright by ‘zero tolerance’ style arguments. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;[1] &lt;em&gt;There was a shooting at another school in Virginia, not so many years ago. Though there was a different outcome at the &lt;a href="http://en.wikipedia.org/wiki/Appalachian_School_of_Law_shooting"&gt;Appalachian School of Law&lt;/a&gt;. Two students at the scene were armed. They subdued the gunman after he took his first victims.&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-1058409739430312426?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/1058409739430312426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/are-you-packing.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1058409739430312426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/1058409739430312426'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/are-you-packing.html' title='Are you packing?'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2169271514868804184</id><published>2007-04-06T04:43:00.000+10:00</published><updated>2009-02-07T21:31:06.389+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>*Sniff*</title><content type='html'>&lt;p&gt;You know how when sometimes you are just sitting there and you smell this smell and like, you smell it and you can't work out whether it's toast or dog shit... Yeah, I hate that.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2169271514868804184?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2169271514868804184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/sniff.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2169271514868804184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2169271514868804184'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/sniff.html' title='*Sniff*'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2426366508881213539</id><published>2007-04-06T03:10:00.000+10:00</published><updated>2009-02-07T21:29:17.004+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Everything'/><title type='text'>Moo</title><content type='html'>&lt;p&gt;The communist utopia can be build from a socialist regime by force in much the same way that a glass of milk can be build from a cow by cutting it in half. (Sounded better before I wrote it down...)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2426366508881213539?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2426366508881213539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/moo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2426366508881213539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2426366508881213539'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/moo.html' title='Moo'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-218421472490555273</id><published>2007-04-05T07:13:00.000+10:00</published><updated>2009-02-07T20:29:01.776+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Turn up the suck</title><content type='html'>&lt;p&gt;I need to work out why the company I work for sucks. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;We all want to know why our product sucks. I guess I could benefit from knowing why (you think) I suck. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Seth Godin's new book &lt;a href="http://sethgodin.typepad.com/the_dip/"&gt;The Dip&lt;/a&gt; (under the &lt;a href="http://www.squidoo.com/theDipBook/"&gt;lens&lt;/a&gt; here) seems just the ticket. I have not had much trouble in the past knowing when to quit. My problem has been more quitting when it is time to... (I just want to know how they get the little guy on the cover to walk along like that) &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;[Edit: I totally read “help you see what's causing your organization (or you) to suck” rather than “to get stuck”. Seth: Please tell us why we suck too! But in the end, one could say that people and companies and enterprises and relationships get stuck precisely because they suck.] &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-218421472490555273?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/218421472490555273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/i-need-to-work-out-why-company-i-work.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/218421472490555273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/218421472490555273'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/i-need-to-work-out-why-company-i-work.html' title='Turn up the suck'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-4498740338723375640</id><published>2007-04-05T01:50:00.000+10:00</published><updated>2009-02-07T20:25:59.145+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Swap Mouse</title><content type='html'>&lt;p&gt;So I swap sides with the mouse a lot. I have to say I mostly use my left hand (even though I am a righty), but I swap often enough to have looked for a utility to easily swap the buttons. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I downloaded a couple of them and found them to be horrible. Some had graphical interfaces. One wanted to install and run at startup. One wanted to leave its little icon on the notification area. Geez Louise. All I want is a utility that I can double click that will swap the damn buttons around then go away. Silently if possible. So I made one. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;It is all of two or three lines of code. (Well, okay, you know what I mean, three that I had to write myself). It is about 20KB, does not install, does its job quietly, and has a cool looking icon (well maybe not, but I had fun making it). &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I used this as an opportunity to check out Google Code at the same time. So I have created a project called &lt;a href="http://code.google.com/p/swapmouse/"&gt;swapmouse&lt;/a&gt;, the executable is there now, the source will be linked up when I get home. Here is a link to the bare executable for &lt;a href="http://swapmouse.googlecode.com/files/SwapMouse.exe"&gt;SwapMouse&lt;/a&gt; for your convenience. Just put it in a directory under Program Files or somewhere (I usually make a Program Files\Utilities just for storing nice little programs that don't need to be installed) and make a shortcut to it. Enjoy.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-4498740338723375640?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/4498740338723375640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/swap-mouse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4498740338723375640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/4498740338723375640'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/swap-mouse.html' title='Swap Mouse'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-5816695361145685971</id><published>2007-04-04T22:30:00.000+10:00</published><updated>2009-02-07T20:21:48.060+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Date'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>404</title><content type='html'>&lt;div class="errormessage-wrapper"&gt;   &lt;div class="errormessage"&gt;     &lt;pre&gt;


&lt;span style="font-size: 180%; font-family: times new roman"&gt;    Error 4.04 - Date Not Found &lt;/span&gt;&lt;span style="font-size: 100%; font-style: italic; font-family: times new roman"&gt;    Please try again at a later date. Maybe the 5th.&lt;/span&gt;


&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-5816695361145685971?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/5816695361145685971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/404.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5816695361145685971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/5816695361145685971'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/404.html' title='404'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-8986984530275228921</id><published>2007-04-03T06:25:00.000+10:00</published><updated>2009-02-07T20:16:53.418+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Last.FM gadget</title><content type='html'>&lt;p&gt;This past weekend I have been working on a windows vista gadget for last.FM &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Most of Saturday was spent fooling around with javascript for the first time in a long while. Trying to find syntax errors using notepad. Ugh. I finally relented and downloaded visual web designer. Next time I play with it I will hook up the script debugger. The rest of the time was spent parsing the XML and text responses that the last.fm 'APIs' respond with. It is a shame that the whole thing is not done in XML - the np.php (now playing) for example just responds with name value pairs in text. Not so nice. Plus it seems to me that the whole shebang is a little iffy at times. Just not responding to requests. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I will have a bit more of a look at the last.fm source tomorrow, for now I have only really looked at the myLastFm source code... Perhaps going back to the original source would be better. I want to know for instance whether the 'real' client polls the np.php for track updates (say every 5 seconds) or if it has some other way. I had envisioned getting the remaining track time and then waiting until around about the time the track should finish and then requesting new track info. But time remaining field seems to have been left out of the response (the myLastFm client looks for it too). &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;So for now I have working: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Basic gadget functionality (icons, page sizing, basic css and js) &lt;/li&gt;    &lt;li&gt;Username and password configuration. &lt;/li&gt;    &lt;li&gt;Password hashing. &lt;/li&gt;    &lt;li&gt;Recently played tracks fly-out. &lt;/li&gt;    &lt;li&gt;Now playing info (artist, album + cover art, track). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I think actual login (send username and password hash, receive sessionid and stream address) is close to working - just that when I was testing it last night the whole last.fm site stopped working, now np.php was not returning etc. Later it worked again, but I was past the stage of wanting to code - Guild Wars... &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-8986984530275228921?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/8986984530275228921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/lastfm-gadget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8986984530275228921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/8986984530275228921'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/04/lastfm-gadget.html' title='Last.FM gadget'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8681136.post-2453882807820175692</id><published>2007-03-29T05:14:00.000+10:00</published><updated>2009-02-07T20:07:47.621+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>x509 Certificates</title><content type='html'>&lt;p&gt;How do you create a self signed certificate (for SSL) that (don't know how best to put it) carries it's password with it. It is just for testing, I just want the certificate the be used by the server in its call to &lt;span class="command"&gt;AuthenticateAsServer&lt;/span&gt;. I (eventually) was able to create a self signed Root Authority certificate like this:&lt;/p&gt;  &lt;div class="commandline-wrapper"&gt;   &lt;div class="commandline"&gt;     &lt;pre&gt;makecert -n &amp;quot;CN=Test Root Authority&amp;quot; -r -pe -ss my -sr LocalMachine -sky exchange -sp &amp;quot;Microsoft RSA SChannel Cryptographic Provider&amp;quot; -sy 12 TestRootAuthority.cer&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;and from it create a self signed certificate: &lt;/p&gt;

&lt;div class="commandline-wrapper"&gt;
  &lt;div class="commandline"&gt;
    &lt;pre&gt;makecert -n &amp;quot;CN=Test Certificate&amp;quot; -in &amp;quot;Test Root Authority&amp;quot; -pe -ss my -sr LocalMachine -is my -ir LocalMachine -sky exchange -sp &amp;quot;Microsoft RSA SChannel Cryptographic Provider&amp;quot; -sy 12 Test.cer&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Which works, as long as the server runs on a machine where the certificate is installed in the certificate store. It will not work if I try to just use the Test.cer file. That gives me: &lt;/p&gt;

&lt;div class="errormessage-wrapper"&gt;
  &lt;div class="errormessage"&gt;
    &lt;pre&gt;The server mode SSL must use a certificate with the associated private key.&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Regardless, I am still seeing the http connection attempt (that I am assuming to be a revocation list check or something) that I am trying to avoid. (&lt;a href="http://groups.google.ca/group/microsoft.public.dotnet.security/browse_thread/thread/47803f1117504eba?hl=en"&gt;thread on microsoft.public.dotnet.security&lt;/a&gt;) &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Oh I don't know...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8681136-2453882807820175692?l=infiniteimprobability.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://infiniteimprobability.blogspot.com/feeds/2453882807820175692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/03/x506-certificates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2453882807820175692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8681136/posts/default/2453882807820175692'/><link rel='alternate' type='text/html' href='http://infiniteimprobability.blogspot.com/2007/03/x506-certificates.html' title='x509 Certificates'/><author><name>da5id</name><uri>http://www.blogger.com/profile/00415217155871041067</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
