<?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-6973560</id><updated>2011-04-21T17:21:47.466-07:00</updated><title type='text'>Performing with .NET</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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>97</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6973560.post-111923729642775668</id><published>2005-06-19T20:14:00.000-07:00</published><updated>2005-06-19T20:14:56.433-07:00</updated><title type='text'>Please update your links...</title><content type='html'>I've moved to &lt;a href="http://www.msmvps.com/nickwienholt/"&gt;http://www.msmvps.com/nickwienholt/&lt;/a&gt;.  All the old posts are there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111923729642775668?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111923729642775668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111923729642775668' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111923729642775668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111923729642775668'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/06/please-update-your-links.html' title='Please update your links...'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6973560.post-111923677579006084</id><published>2005-06-19T20:06:00.000-07:00</published><updated>2005-06-19T20:06:15.843-07:00</updated><title type='text'>Always nice to get a good review...</title><content type='html'>Thanks for your &lt;a href="http://www.danielmoth.com/Blog/2004/11/book-review.html"&gt;kind words&lt;/a&gt; Daniel.  It seems so long since I actually wrote &lt;a href="http://www.apress.com/book/bookDisplay.html?bID=217"&gt;the performance book&lt;/a&gt;.  It is funny that one of the main concerns we had during the review phase of the book was that .NET 2.0 was coming so soon that the material would be out-of-date before it hit the shelves.  I guess that long, long delays for Whidbey has been good for me.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I've had a few emails about whether I am doing a peformance book for .NET 2.0.  I haven't committed to doing a new performance book in the short term, and I actually heading off on Friday for a six-month self-funded long service leave trip around Australia in a caravan.  It been about 10 years since I left my previous career of coastal engineering behind, so an extended break made sense.  The trip was also prompted by finishing off the current mortgage and having no burning desire to acquire another one straight away.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Back onto the writing, I need a bit of a break after doing the revision of Eric's C# book, which, based &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/1590595017"&gt;on Amazon's data&lt;/a&gt;, is shipping today.  A peformance book covering .NET 2.0/ WinFx/ Longhorn will probably make more sense, and give me more time for a more thorough revision.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111923677579006084?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111923677579006084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111923677579006084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111923677579006084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111923677579006084'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/06/always-nice-to-get-good-review.html' title='Always nice to get a good review...'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111909577960536434</id><published>2005-06-18T04:56:00.000-07:00</published><updated>2005-06-18T04:56:19.670-07:00</updated><title type='text'>Photo of the Week - 6 Jun 2005</title><content type='html'>A rather obvious subject - looking east over the Port Hacking from Warumbul.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I7463.jpg" width="1402" height="934" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111909577960536434?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111909577960536434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111909577960536434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111909577960536434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111909577960536434'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/06/photo-of-week-6-jun-2005.html' title='Photo of the Week - 6 Jun 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111788470871985572</id><published>2005-06-04T04:31:00.000-07:00</published><updated>2005-06-04T04:31:48.723-07:00</updated><title type='text'>Photo of the Week - 28 May 2005</title><content type='html'>This shot was taken in early May at sunrise over the rock platform between Big Marley and Little Marley looking north towards Marley Head.  The weather had been overcast and rainy the previous few days, and the track from the Bundeena road down to Marley becomes a shin-deep creek after rain, making the trek down to the coastline pretty unpleasant.  The walk took about an hour, and I lost the track quite a few times in the pre-dawn dark.&lt;br&gt;&lt;br&gt;&lt;br /&gt;There wasn't a lot of good light between the sunrise and the dull grey that occured once the sun climbed above the main cloud layer.  In the brief peroid of good light, the warm colours of sunrise contrasted nicely the cold light under the cloud cover.  The colour in the rock comliments the sunrise well, and leads the eye nicely into the shot.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I6630.jpg" width="1402" height="934" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111788470871985572?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111788470871985572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111788470871985572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111788470871985572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111788470871985572'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/06/photo-of-week-28-may-2005.html' title='Photo of the Week - 28 May 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111788127917134080</id><published>2005-06-04T03:34:00.000-07:00</published><updated>2005-06-04T03:34:39.246-07:00</updated><title type='text'>Apress Ebooks - a first look</title><content type='html'>I got my first Ebook from Apress yesterday - Simon Robinson's "Expert .NET 1.1 Programming".  I'll be doing the actual reading of the book on my upcoming 6 month round-the-country trip which I'm going on from 24 June till around Christmas, but thought it would be worth a quick post of the actual Ebook process itself.  I'm happy to report the Apress has really delivered well with their Ebooks.  The good points:&lt;br /&gt;&lt;li&gt;The book is available immediately after purchase.  It can take Amazon up to half an hour before a book is available for download (which can be a pain if you leave the purchase until just before a long flight).  There was no delay between purchase and download availability.&lt;br /&gt;&lt;li&gt;The book is available in PDF format, with full book and chapter download available.  The PDF pages are exactly as per the printed book.&lt;br /&gt;&lt;li&gt;The security lock-down on the PDF is pretty minimal.  The file is password protected by the email you use to set up your Apress account, but that's about it.  You can print and copy from the file with no restrictions, which is critical to get the book onto the Smartphone using readers like &lt;a href="http://www.cerience.com/products/repligo.htm"&gt;RepliGo&lt;/a&gt; which uses a print-driver to convert the file.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;The only addition I'd like would be Microsoft Reader availability, but given Microsoft themselves do such a crappy job of promoting and developing Reader, I can't blame Apress for not supporting this format.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Well done to the whole Apress crew for a great effort.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111788127917134080?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111788127917134080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111788127917134080' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111788127917134080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111788127917134080'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/06/apress-ebooks-first-look.html' title='Apress Ebooks - a first look'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111766607297224131</id><published>2005-06-01T15:47:00.000-07:00</published><updated>2005-06-01T15:47:53.016-07:00</updated><title type='text'>My Podcast with Dr Pete is up</title><content type='html'>Listening to &lt;a href="http://www.thepodcastnetwork.com/msdev/2005/05/27/the-microsoft-developer-show-4"&gt;the show&lt;/a&gt;, it seems we got carried away at times, so this isn't one for those with political correctness sensitivities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111766607297224131?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111766607297224131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111766607297224131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111766607297224131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111766607297224131'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/06/my-podcast-with-dr-pete-is-up.html' title='My Podcast with Dr Pete is up'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111710549803637677</id><published>2005-05-26T04:04:00.000-07:00</published><updated>2005-05-26T04:04:58.040-07:00</updated><title type='text'>SQL Down Under Podcast</title><content type='html'>I listened to the first half of &lt;a href="http://msmvps.com/greglow"&gt;Greg Low's&lt;/a&gt; &lt;a href="http://www.sqldownunder.com/"&gt;SQL Down Under Podcast&lt;/a&gt; today at lunchtime.  Great stuff Greg - looking forward to listening to the second half during tomorrows lunch break.  Kalen Delaney is a great first guest.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111710549803637677?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111710549803637677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111710549803637677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111710549803637677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111710549803637677'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/05/sql-down-under-podcast.html' title='SQL Down Under Podcast'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111710490072172690</id><published>2005-05-26T03:55:00.000-07:00</published><updated>2005-05-26T03:55:00.773-07:00</updated><title type='text'>Apress Ebooks now available!</title><content type='html'>Well done to Apress for responding to reader demand and making a heap of there totals available as Ebooks that can be purchased from the &lt;a href="http://www.apress.com/ecommerce/"&gt;Apress site&lt;/a&gt;.  As consultant without a regular desk, Ebooks are much, much more useful to me than paper books, and I have favoured MS Press in the past based purely on E-book availability.&lt;br&gt;&lt;br&gt;  &lt;br /&gt;You can get Maximizing .NET Performance &lt;a href="http://www.apress.com/ecommerce/cart.html?act=add&amp;bid=217"&gt;here&lt;/a&gt; at half the cover price (US22.50).  I'm taking 6 months off starting at the end of June, and am looking forward to catching up with a number of Apress titles on my PDA during my travels.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111710490072172690?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111710490072172690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111710490072172690' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111710490072172690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111710490072172690'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/05/apress-ebooks-now-available.html' title='Apress Ebooks now available!'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111702050504932503</id><published>2005-05-25T04:28:00.000-07:00</published><updated>2005-05-25T04:28:25.100-07:00</updated><title type='text'>Photo of the Week - 21 May 2005</title><content type='html'>This image is a merged panorama of five separate shots taken in portrait mode.  The merge image is 8200 by 2124 pixels (a whopping 17.4 megapixels - take that you punny 16.7 megapixel &lt;a href="http://www.dpreview.com/articles/canoneos1dsmkii/"&gt;1DsMkII&lt;/a&gt;), and is about 160 degrees (~ 4mm horizontal equivalent).  The shots where taken last Friday after some pretty heavy rain mid-week at a spot called Winifred Falls.  There are two falls between Audely and the road out to Maianbar, and AllThingsAus.com has a &lt;a href="http://www.allthingsaus.com/sydwaterfalls/anice.htm"&gt;good description&lt;/a&gt; of the falls (and all the other falls in the Sydney region).&lt;br&gt;&lt;br&gt;&lt;br /&gt;The shot was taken around lunchtime, and a 4 stop neutral filter was used to blur the water going over the falls.  My wife and daughter where at the top of the falls, and light rain began falling as I was setting up, so I had less than 20 minutes to set up and take the shots.  Luckily, there are only two vantage points where the falls are actually visible from the base, and this one was clearly the best.  The trees on either side of the small clearing nicely frame the shot, and the overcast conditions kept the light fairly even.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The shots where taken with the &lt;a href="http://www.canon.com.au/products/visual/cameras_lenses_accessories/ultrawide_zoom_lenses/ef%252017-40mm.html"&gt;EF 17-40mm f/4L USM&lt;/a&gt; set to around 29mm to avoid excessive distortion that can totally kill the merge process.  Photoshop's inbuilt merge was used, and this nailed the merge with no visible seams and no stuffing around choosing common points that made Pano Tools such a painful exercise.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/Pano2.jpg" width="1500" height="389" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111702050504932503?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111702050504932503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111702050504932503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111702050504932503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111702050504932503'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/05/photo-of-week-21-may-2005.html' title='Photo of the Week - 21 May 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111641522493766766</id><published>2005-05-18T04:20:00.000-07:00</published><updated>2005-05-18T04:20:24.940-07:00</updated><title type='text'>Photo of the Week - 16 May 2005</title><content type='html'>This shot was taken thirty-eight minutes after last weeks shot.  I hadn't actually been out on the Longreef rock platform before, but once I got out there, I realised that it would have been a much better location for the sunrise shot that last weeks fairly standard beach-shot-at-sunrise-with-a-few-rocks-thrown-in-for-foreground.  The reef has a wonderful series of small rock pools and mid-size scattered boulders that make composition a breeze.  A shot like this could be composed in nearly any direction.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Once I got out onto the rock platform, it was pretty obvious that I had somewhere near 15 minutes of good light before the sun broke through the cloud layer above the horizon and killed the good reflections and excellent diffused light.  This turned out to be heaps of time to get some good shots, and I took this shot hand-held as I was leaving to dry off my jeans and boots, and try to find the missing pieces of my tripod.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The two good shots made the 4.45am start worth it.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I6843.jpg" width="934" height="1402" alt="" border="0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111641522493766766?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111641522493766766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111641522493766766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111641522493766766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111641522493766766'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/05/photo-of-week-16-may-2005.html' title='Photo of the Week - 16 May 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111641413901548501</id><published>2005-05-18T04:02:00.000-07:00</published><updated>2005-05-18T04:02:19.060-07:00</updated><title type='text'>Photo of the Week - 9 May 2005</title><content type='html'>[I wrote this post last Tuesday (10 May), but have spent the better part of a week trying to get the orange sky (which looks great in Photoshop) accurately reproduced in the JPEG format.  On CRT screens it looks pretty good, but looks very dull and muddy on LCD screens.  The graphics guru at work who lives in Photoshop all day long wasn't able to get the image right when viewed on all monitors, but I've decided to post it anyway in the hope that some folks will get to see it on a monitor that displays it well]&lt;br /&gt;&lt;br /&gt;This one was taken this morning out at Longreef.  I've had to work on-site this week, and I took the opportunity to avoid the traffic and head up to the Northern Beaches for sunrise.  I noticed a lot of pollution about yesterday, and as this makes for great sunrises, I was hopeful of a colourful sky.  Also, Sydney had a mild change forecast for today, which meant that there should be a plenty of cloud to hold the colour.  Both guesses turned out to be correct, and the sunrise was pretty spectacular.  There where actually folks stopping on their morning walks to admire the great colour in the sky.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I ended up breaking a knob off my tripod getting it out of the car and copped a wave up to mid-shin as I was standing in the location that this shot was taken (resulting in a pretty uncomfortable morning walking around in wet shoes and jeans), so I guess that this was one shot that I "paid the price" to get.  Soon after this shot I noticed some dolphins frolicking near the headland, but they weren't doing enough acrobatics to make any of the shots worthwhile.  I also got some nice shots out on the reef itself, and I'll use those as next weeks Photo of the Week.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I6754.jpg" width="1322" height="935" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111641413901548501?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111641413901548501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111641413901548501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111641413901548501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111641413901548501'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/05/photo-of-week-9-may-2005.html' title='Photo of the Week - 9 May 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111535234345151398</id><published>2005-05-05T21:05:00.000-07:00</published><updated>2005-05-05T21:05:43.550-07:00</updated><title type='text'>Photo of the Week - 2 May 2005</title><content type='html'>This lone mangrove tree sits on a small rock reef just west of Maianbar (that's the correct spelling - not sure of the origins).  I took the shot at dawn on a Sunday morning using my very humble Canon A80 backup.  I've got a waterproof housing for this camera, and sometime bring it along when I'm going for an early surfski to get some sunrise shots.  I'd had this spot on my list of potential locations for a while, but hadn't got the right combo of tide and light to shoot it.  I actually took the camera out of the underwater housing for this shot, and it was a pretty precarious balancing act to get the shot while sitting on the surfski, avoiding the oysters, and racing a rapidly dropping tide.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I didn't use any fill flash on this shot, but in retrospect I would have certainly given it a go.  I've boosted the contrast around the tree considerably using Photoshop, but it's still a bit drab and tends to blend in with the Buraneer peninsula in the left background.  To use &lt;a href="http://www.luminous-landscape.com/essays/abstracting.shtml"&gt;Michael Reichmann's category systems&lt;/a&gt;, this shot is definitely not an Image, and is a bit above a Snapshot, so I guess it is simply a postcard.  The only shot I can comfortably say I am happy with as an Image is the &lt;a href="http://msmvps.com/nickwienholt/archive/2005/02/23/36745.aspx"&gt;Rottnet Island lighthouse shot&lt;/a&gt;.  &lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_2668.jpg" width="1322" height="992" alt="" border="0"&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111535234345151398?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111535234345151398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111535234345151398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111535234345151398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111535234345151398'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/05/photo-of-week-2-may-2005.html' title='Photo of the Week - 2 May 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111463776305938321</id><published>2005-04-27T14:36:00.000-07:00</published><updated>2005-04-27T14:36:03.060-07:00</updated><title type='text'>PIC#3 enters final phases</title><content type='html'>The final round of PDF review on PIC#3 was completed yesterday, and we're just going through the final phases of tidying up the front material in cover.  You should definitely see the book by the 20 June date &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/1590595017"&gt;mentioned by Amazon&lt;/a&gt;.  The finish line of a pretty long project is near...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111463776305938321?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111463776305938321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111463776305938321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111463776305938321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111463776305938321'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/04/pic3-enters-final-phases.html' title='PIC#3 enters final phases'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111353790327751216</id><published>2005-04-14T21:05:00.000-07:00</published><updated>2005-04-14T21:05:03.276-07:00</updated><title type='text'>Photo of the Week - 11 Apr 2005</title><content type='html'>Well, the weekly photo of the week didn't last long.  I got bogged down in some technical writing engagements from Australian Developer and MSDN Magazine ANZ on top of my normal consulting work, so ended up with no time to do the blog.  Anyway, to get back on track...&lt;br&gt;&lt;br&gt;&lt;br /&gt;Here is a rather simple shot of the Hacking River at dawn.  The Hacking River runs the full length of the Royal National Park, beginning as the Port Hacking out in Bate Bay and ending up just outside the park near Otford.  I grew up on Yowie Bay, which is about half way up the Port Hacking from Cronulla's surf beaches towards the weir at Audely, which marks the end of the saltwater section and the beginning of the fresh.  This shot was taken in the southern part of the Park, near where Lady Carrington Drive ends.  The Royal is often criticized as being an overly domesticated National Park, but it does have some pretty wild sections, particularly in the far south around Hell Hole and Burning Palms.  The footbridge at the bottom of this shot will probably reinforce the domesticated view in some folks minds, but I think it adds a nice finish to the composition.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I4107.jpg" width="934" height="1322" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111353790327751216?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111353790327751216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111353790327751216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111353790327751216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111353790327751216'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/04/photo-of-week-11-apr-2005.html' title='Photo of the Week - 11 Apr 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111291699059212252</id><published>2005-04-07T16:36:00.000-07:00</published><updated>2005-04-07T16:36:30.593-07:00</updated><title type='text'>SDNUG turns 3</title><content type='html'>Last night we celebrated the third birthday of the &lt;a href="http://www.sdnug.org"&gt;Sydney Deep .NET User Group&lt;/a&gt;.  Dan and I started the group pretty much at the same time as .NET hit the streets, and we've had fantastic support from the Sydney IT community, some fantastic speakers, and great hosts in the form of ITMatters, Avanade and AMP Capital Investors.  A special thanks to Jason Ajai for providing us our first venue three years ago, David and all the Avanade folks for hosting us there for all those years, and Chris for being our new host.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Also, a big thanks to Frank, Chuck, Andrew and Fin at Microsoft Australia for there continuing support.&lt;br&gt;&lt;br&gt;&lt;br /&gt;When we first started out, I always pegged three years as the success mark, and as we are still going strong,I'm giving myself a well deserved pat on the bag.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/SDNUG cake.jpg" width="272" height="259" alt="" border="0"&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111291699059212252?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111291699059212252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111291699059212252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111291699059212252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111291699059212252'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/04/sdnug-turns-3.html' title='SDNUG turns 3'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111105543030104435</id><published>2005-03-17T02:30:00.000-08:00</published><updated>2005-03-17T02:30:30.300-08:00</updated><title type='text'>Photo of the Week - 14 Mar 2005</title><content type='html'>As folks down Shire way know, last Sunday was the &lt;a href="http://www.sharkislandswim.com.au"&gt;Shark Island Swim&lt;/a&gt; weekend.  Over 1000 swimmers took part in the race, and the great weather and lack of seaweed made a welcome change from the 2003 and 2004 events.  I usually stick to surf boats rather than swimmer as they make for more interesting photos and the lack of juniors around surfboats makes my job as a photographer who is mindful of the paranoia about the combination of kids, swim-wear and camera much easier.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Rather than shoot from the beach, I positioned myself waist deep and shot the start from this position.  During the 1km fun swim that starts the day, the field actually spilled out behind me, and I ended up near the middle of a couple of hundred charging contestants.  It didn't phase me too much at the time, but when I got back into the beach I realised I didn't have the neck strap on, and even if I did, the possibility of getting knocked over was pretty high.  The thought of a very expensive repair made me a bit more cautious for the main 2.3km main race.&lt;br&gt;&lt;br&gt;&lt;br /&gt;This shot was taken as the first batch (under 30s I think) was getting started in the main race.  While there is nothing spectacular about it, the sea of red caps, the swimmer in the centre of frame nicely in sharp focus, and the guy in the back-ground painted as a cow (not sure how well this gag works for a swim) really make the shot for me.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I5475.jpg" width="1402" height="934" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111105543030104435?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111105543030104435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111105543030104435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111105543030104435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111105543030104435'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/photo-of-week-14-mar-2005.html' title='Photo of the Week - 14 Mar 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111102041847809646</id><published>2005-03-16T16:46:00.000-08:00</published><updated>2005-03-16T16:57:02.606-08:00</updated><title type='text'>GPL FUDs itself</title><content type='html'>For folks like me in the closed-source camp that cringe every time companies like Microsoft go off on a FUD mission against open source, I was disappointed to the see that a prominent member of the open-source community has given his adversaries plenty of ammunition with a childish and ill-conceived stunt.  The full story is &lt;a href="http://www.builderau.com.au/program/work/0,39024650,39181300,00.htm"&gt;here&lt;/a&gt;, but basically what happened (according to the article) was a guy called Harald Welte, who is a Linux kernel developer, served 13 companies with warning letters because he "claimed that the binary code of the companies' products &lt;b&gt;appears&lt;/b&gt; to have used GPL code" (emphasis added).  &lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Serving the warning letters is probably fair enough.  If they have violated the GPL license, they need to rectify the situation.  But then to go out and publicly name and shame the companies for &lt;b&gt;appearing&lt;/b&gt; to do something, without even giving them a chance to respond, and to turn the event into a media circus by doing it at the CeBIT exhibit hall is the type of stuff that will be bought up by sales and marketing folks for commercial offerings for many moons to come.  Open source has come a long way, and it is disappointing to see it use these college prank antics.  It would be interesting to see the reaction if Microsoft pulled a similar stunt for people that &lt;b&gt;appear&lt;/b&gt; to have used pirated software.  Maybe someone can have a quite word in young Harald's ear about PR and the like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111102041847809646?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111102041847809646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111102041847809646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111102041847809646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111102041847809646'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/gpl-fuds-itself.html' title='GPL FUDs itself'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111087908695294819</id><published>2005-03-15T01:31:00.000-08:00</published><updated>2005-03-15T01:31:26.953-08:00</updated><title type='text'>.NET 2.0 Hidden Gems - The Results</title><content type='html'>Based on the survey and email response, the outline for the article I've decided to go with is:&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;1a. Lightweight code gen (200)  (200)&lt;br&gt;&lt;br /&gt;1b. Better cookiesless support (200) (400)&lt;br&gt;&lt;br /&gt;1c. New Trace features (300) (700)&lt;br&gt;&lt;br /&gt;1d. Strongly-typed resources (300) (1000)&lt;br&gt;&lt;br /&gt;1e. Nullable generic (400) (1400)&lt;br&gt;&lt;br /&gt;2. Debug visualizers (800) (2200)&lt;br&gt;&lt;br /&gt;3. C# refactoring (600) (2800)&lt;br&gt;&lt;br /&gt;4. FxCop Integration (800) (3600)&lt;br&gt;&lt;br /&gt;5. XSLT Debugger (400) (4000)&lt;br&gt;&lt;br /&gt;Word count for each topic in first bracket, followed by cumulative word count.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Results of the survey below.  Thanks to everyone that took part - there where 50 responses.  If anyone is interested in doing an online survey, &lt;a href="http://freeonlinesurveys.com"&gt;freeonlinesurveys.com&lt;/a&gt; is quite good.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;TABLE id="Table1" cellSpacing="0" cellPadding="4" width="95%" align="center" border="0"&gt;&lt;br /&gt;			&lt;TR&gt;&lt;br /&gt;			&lt;TR&gt;&lt;br /&gt;				&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;br /&gt;				&lt;TD  width="40"&gt;&lt;B&gt;Percentage&lt;/B&gt;&lt;/TD&gt;&lt;br /&gt;				&lt;TD  width="40"&gt;&lt;B&gt;Responses&lt;/B&gt;&lt;/TD&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;New Trace functionality in .NET Framework&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;5.5&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;15&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Debugger visualizations - allow things like a &lt;br /&gt;					DataSet to be shown in a DataGrid at debug time&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;6.9&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;19&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;New hosting APIs - built for Yukon, exposed for &lt;br /&gt;					all. Allow very fine-grained control of the CLR when you explicitly load it.&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;3.6&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;10&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Better NGEN behavior and performance&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;2.5&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;7&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Nullable&lt;T&gt;&lt;br /&gt;					- the nullable type for all languages&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;5.5&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;15&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;GC.AddMemoryPressure - ability to get the GC to &lt;br /&gt;					help with memory management of large non-managed memory hogs.&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;2.2&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;6&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Enhanced X509 support. Better digital certificate &lt;br /&gt;					management.&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;3.6&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;10&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Zip file support&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;5.1&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;14&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;The new C++ - C++/CLI. __No __more __Managed __C++&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;2.2&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;6&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;STL.NET. Generics and templates&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;3.3&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;9&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;C# fixed size buffers. Great for interop and ready &lt;br /&gt;					structures off disk.&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;2.5&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;7&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;CLR changes - gritty stuff happening under the &lt;br /&gt;					hood.&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;4.0&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;11&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;ADO.NET 2.0 - MARS and SQL bulk copy&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;3.3&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;9&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;VSTS Performance Tools&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;2.9&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;8&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;ASP.NET Data Caching&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;3.3&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;9&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Code Definition window in Visual Studio - build a &lt;br /&gt;					skeleton of what a binary reference would look like if you had the source code. &lt;br /&gt;					Removes need for Object Browser.&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;2.5&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;7&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;64-bit support in .NET 2.0&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;3.6&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;10&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Strongly-typed resources&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;5.5&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;15&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Per-user configuration settings&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;4.0&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;11&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;C# refactoring support&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;6.2&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;17&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;VB.NET Using statement&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;2.9&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;8&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;C# and VB.NET accessibility modifiers of property &lt;br /&gt;					get and sets&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;2.5&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;7&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;C++/CLI automatically generated property stores - &lt;br /&gt;					declare a variable like a global, but under the cover the compiler generates a &lt;br /&gt;					private variable and exposes a property&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;1.8&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;5&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;FxCop integration in Visual Studio&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;6.2&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;17&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#f6f6f6"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Compact Framework Improvements&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;4.7&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;13&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;			&lt;TR bgColor="#ffffff"&gt;&lt;br /&gt;				&lt;TD  width="250"&gt;Other.&lt;/TD&gt;&lt;br /&gt;				&lt;TD &gt;&lt;br /&gt;					&lt;DIV align="center"&gt;3.6&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;				&lt;TD class="norm"&gt;&lt;br /&gt;					&lt;DIV align="center"&gt;10&lt;/DIV&gt;&lt;br /&gt;				&lt;/TD&gt;&lt;br /&gt;			&lt;/TR&gt;&lt;br /&gt;		&lt;/TABLE&gt;&lt;br /&gt;Responses for Other: OTB, CD, XSLT Debugger, ObjectBinder, Cross form posting in ASP.NET , ASP.NET Client callback support, personalization support,enterprise library compatibility/inclusion?, sgen.exe (and integration within VS), Designer enhancements, window docking guides, save settings, etc, C# Partial Classes&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111087908695294819?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111087908695294819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111087908695294819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111087908695294819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111087908695294819'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/net-20-hidden-gems-results.html' title='.NET 2.0 Hidden Gems - The Results'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111086665885456987</id><published>2005-03-14T22:04:00.000-08:00</published><updated>2005-03-14T22:04:18.853-08:00</updated><title type='text'>Why I signed the VB.Classic Partition</title><content type='html'>Those who know my views on VB will probably be surprised to see &lt;a href="http://classicvb.org/petition/mvplist.asp?lang=en"&gt;that I have signed&lt;/a&gt; the Classic VB petition at &lt;a href="http://classicvb.org/petition/"&gt;http://classicvb.org/petition/&lt;/a&gt;.  I have been pretty critical of the way that some member of the VB Classic community have attempted to advance their views over the last couple of years.  It has a been a bit like the Greens in politics (in Australia at least - I don't follow the world Green scene closely) - their basic platform is certainly worthy, but their actions in advancing their beliefs have showed intolerance and bigotry towards others who have a different view on the world.  &lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;I never liked VB Classic much, and I think VB.NET isn't a great language because its legacy features make it more complex than C# (which is supposed to be more complex).  Looking at the objectives of the partition, and the logical and well mannered way they are laid down, I am fully in agreement with their aims and approach.  Not supporting the VB6 runtime in Longhorn is crazy.  Microsoft support the Win16 runtime in Windows Server 2003 (the 32-bit edition at least), which will mean that it is not going to die until Longhorn in 2006, more than a decade since it was replaced.  Supporting the VB6 runtime up to and including Longhorn Server would seem to make sense and gives it the same wither-time as Win16.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://msmvps.com/bill/"&gt;Bill McCarthy&lt;/a&gt; estimates it would only take one to two person decades to integrate the VB6 compiler and debugger into the VS IDE.  I am certain that by the end of my technical career I will need to debug back and forth between VB6 and managed code, so given the very small investment that it would take to make this happen, I can't seen why Microsoft won't do it.  The same effort still goes into niche products (in today's managed world) like ATL, MFC and FoxPro.  VB seems to deserve the same effort, if for no other reason than fairness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111086665885456987?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111086665885456987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111086665885456987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111086665885456987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111086665885456987'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/why-i-signed-vbclassic-partition.html' title='Why I signed the VB.Classic Partition'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111078186956103231</id><published>2005-03-13T22:31:00.000-08:00</published><updated>2005-03-14T01:27:05.980-08:00</updated><title type='text'>AOP Performance Numbers for .NET - Part 1</title><content type='html'>A question came up on the Australian .NET mailing list about which is the fastest AOP implementation.  I &lt;a href="http://www.stillhq.com/aus-dotnet/archives2/msg01784.html"&gt;committed to running some performance tests&lt;/a&gt; on the subject.  Over the weekend I did some testing on the &lt;a href="http://sourceforge.net/projects/aopnet/"&gt;AOP.NET&lt;/a&gt; Framework's performance compared to not using AOP and manually coding the aspect.  Because logging is so often used as AOP's prototypical 'problem-solved' scenario, I used this in the tests.  Obviously cross-cutting something heavy like 2PC transactions would give a different result, and cross-cutting a slow method would also dramatically decrease the &lt;i&gt;relative&lt;/i&gt; impact of using AOP.NET.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Anyway, enough of the caveats.  I ran the test using the &lt;a href="http://www.dotnetperformance.com/downloads/harness.doc"&gt;benchmark harness&lt;/a&gt; I wrote for &lt;a href="http://www.apress.com/book/bookDisplay.html?bID=217"&gt;Maximizing .NET Performance&lt;/a&gt;.  The test case was calling a virtual method (which was empty).  Before the method executed, I wanted the following line to execute:&lt;br /&gt;&lt;br&gt; &lt;font size=2&gt;Trace.WriteLine("Entering method");&lt;/font&gt;&lt;br&gt;&lt;br /&gt;I tested three cases: the generation of the Trace.WriteLine call through AOP.NET, the Trace.WriteLine call manual coded before the call to the empty virtual function, and the Trace.WriteLine call without the virtual function call.  &lt;b&gt;The result was that using AOP.NET to cross-cut the logging was eight times slower than manually coding it.&lt;/b&gt;  Again, these results are for cross-cutting a light-weight logging call onto an empty virtual method.  For a fatter cross-cut onto a fatter method, the relative impact of the cross-cut will be much smaller.  My test case is close to a worse-case scenario, so don't ditch AOP.NET or AOP in general based on this result.  On the same token, don't be dismissive of the impact of doing compile-time-like things at runtime.  The cost can be high.&lt;br /&gt;&lt;br&gt;&lt;br&gt;Next weekend I'll try to run the test on a Context Bound Attributes-based AOP framework.&lt;br /&gt;&lt;br&gt;&lt;br&gt;Full dump of results:&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;TraceWriteLineTest&lt;br /&gt;Compares AOP techniques for generating a simple log message before method execution&lt;br /&gt;&lt;br&gt;&lt;br /&gt;AOPdotNET	Normalised:	&lt;b&gt;8.630499&lt;/b&gt;	Median:	00:00:01.6836290	Mean:	00:00:01.6920000	Min:	00:00:01.6729440	Max:	00:00:01.7263870	StdDev:	00:00:00.0220000	&lt;br /&gt;Results:00:00:01.7004660	00:00:01.6836290	00:00:01.7263870	00:00:01.6784470	00:00:01.6729440	&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Inline	Normalised:	1.007284	Median:	00:00:00.1965000	Mean:	00:00:00.1980000	Min:	00:00:00.1946380	Max:	00:00:00.2063730	StdDev:	00:00:00.0050000	&lt;br /&gt;Results:00:00:00.1950010	00:00:00.1970740	00:00:00.1946380	00:00:00.2063730	00:00:00.1965000	&lt;br /&gt;&lt;br&gt;&lt;br /&gt;VirtualCallAndTrace	Normalised:	1	Median:	00:00:00.1950790	Mean:	00:00:00.1970000	Min:	00:00:00.1936980	Max:	00:00:00.2054330	StdDev:	00:00:00.0050000	&lt;br /&gt;Results:00:00:00.1936980	00:00:00.1954910	00:00:00.1950790	00:00:00.2054330	00:00:00.1947720	&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;Test code:&lt;/b&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Diagnostics;&lt;br /&gt;using DotNetPerformance;&lt;br /&gt;using NAop;&lt;br /&gt;&lt;br /&gt;namespace TestCode&lt;br /&gt;{&lt;br /&gt;	public class TraceWriteLineTest&lt;br /&gt;	{&lt;br /&gt;  [Benchmark("Compares AOP techniques for generating a simple log message before method execution")]&lt;br /&gt;  public static TestResultGrp RunTest() &lt;br /&gt;  { &lt;br /&gt;   const int numberIterations = 10000;&lt;br /&gt;   const int numberTestRuns = 5;&lt;br /&gt;&lt;br /&gt;   TestRunner tr = new TestRunner(numberIterations, numberTestRuns);&lt;br /&gt;   TestRunner.TestCase testCases = null;&lt;br /&gt;&lt;br /&gt;   testCases += new TestRunner.TestCase(AOPdotNET);&lt;br /&gt;   testCases += new TestRunner.TestCase(Inline);&lt;br /&gt;   testCases += new TestRunner.TestCase(VirtualCallAndTrace);&lt;br /&gt;   &lt;br /&gt;   return tr.RunTests(testCases);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void AOPdotNET(Int32 numberIterations)&lt;br /&gt;  {&lt;br /&gt;   ContextAOP context = (ContextAOP)NAop.AopXmlFactory.Create(typeof(ContextAOP));&lt;br /&gt;   for (int ix = 0; ix &lt; numberIterations; ++ix)&lt;br /&gt;   {&lt;br /&gt;    context.NoOpMethod();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void VirtualCallAndTrace(Int32 numberIterations)&lt;br /&gt;  {&lt;br /&gt;   ContextAOP context = new ContextAOP();&lt;br /&gt;   for (int ix = 0; ix &lt; numberIterations; ++ix)&lt;br /&gt;   {&lt;br /&gt;    context.NoOpMethod();&lt;br /&gt;    Trace.WriteLine("Entering method");&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void Inline(Int32 numberIterations)&lt;br /&gt;  {&lt;br /&gt;   for (int ix = 0; ix &lt; numberIterations; ++ix)&lt;br /&gt;   {&lt;br /&gt;    Trace.WriteLine("Entering method");&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/* AOP.NET Code */&lt;/b&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Diagnostics;&lt;br /&gt;using NAop;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;namespace TestCode&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;	public class ContextAOP&lt;br /&gt;	{&lt;br /&gt;  public virtual void NoOpMethod(){}&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt; public class AspectLog : IAspect&lt;br /&gt; {&lt;br /&gt;  #region IFilter Members&lt;br /&gt;&lt;br /&gt;  public void BeforeInvoke(IAopContext context)&lt;br /&gt;  {&lt;br /&gt;   Trace.WriteLine("Entering method");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void AfterInvoke(IAopContext context)&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/*AOP.NET Config*/&lt;/b&gt;&lt;br /&gt;&lt;p&gt;&amp;lt;AopNet&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;AspectAssembly Name=&amp;quot;TestCode.dll&amp;quot;&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;AspectClass Name=&amp;quot;TestCode.AspectLog&amp;quot;&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;CrosscutClass Name=&amp;quot;TestCode.ContextAOP&amp;quot;&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;PointMethod Name=&amp;quot;NoOpMethod&amp;quot;/&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/CrosscutClass&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/AspectClass&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/AspectAssembly&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;lt;/AopNet&amp;gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111078186956103231?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111078186956103231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111078186956103231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111078186956103231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111078186956103231'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/aop-performance-number-for-net-part-1.html' title='AOP Performance Numbers for .NET - Part 1'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111070905197423591</id><published>2005-03-13T02:17:00.000-08:00</published><updated>2005-03-13T02:17:31.976-08:00</updated><title type='text'>Photo of the week - 7 Mar 2005</title><content type='html'>Seems like this post is getting latter each week ...&lt;br /&gt;&lt;br /&gt;This shot was taken at Mylup in Western Australia.  Mylup is a small town west of Harvey (WA's milk capital) and north of Bunbury.  The town is dominated by the single caravan-park and general store, and my in-laws have a permanent van in the park that they go to most weekends.  Over Christmas last year, I spent a night at the van with my wife and daughter.  From a photographic perspective, the place is pretty horrid.  Strong on-shore winds blow all day during the summer, there is rarely any cloud to fill out the sky, the beach is long and featureless, and the back of the beach is grassy dunes that run uninterrupted for about 60 kilometers all the way up to Mandurah.&lt;br /&gt;&lt;br /&gt;This shot was taken soon after dawn (which is a poor time for photos generally in a west-facing coastline), and I was very hesitant to try and take any shots.  The day before the place looked horrid, with sea-spray and howling on-shore winds scattering sand and reflected light everywhere.  In the morning, the wind had totally dropped, and the light was quite clean.  I tried a few seaward facing shots, but they lacked any single point of interest.  The weathered post in the shot was like many that lined the beach-dune divide, and was lit well enough to show detail even with the sun pretty much behind it.  I could have used a flash to bring out more detail, but wanted a prominent foreground that prevented my getting close enough to use flash.  I also could have used a circular polarizer to bring out the blue in the sky, but this would have killed the detail in the post.  In the end, I shot unaided, and left the two could-haves for Photoshop.&lt;br /&gt;&lt;br /&gt;The two main edits are a masked screen layer to bring out some detail in the post, and a gradient-screened multiply layer to bring out the blue in the sky.  While the image stands up OK without them, the certainly bring it up a notch when added.  USM and some leveling have also been performed.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I2584.jpg" width="924" height="1307" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111070905197423591?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111070905197423591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111070905197423591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111070905197423591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111070905197423591'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/photo-of-week-7-mar-2005.html' title='Photo of the week - 7 Mar 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111036256908397082</id><published>2005-03-09T02:02:00.000-08:00</published><updated>2005-03-09T02:02:49.083-08:00</updated><title type='text'>.NET 2.0 Hidden Gems</title><content type='html'>I'm doing an article for &lt;a href="http://magshop.com.au/Product.asp?ProductID=2022&amp;CategoryID="&gt;Australian Developer&lt;/a&gt; on new features in .NET 2.0 that haven't got the love they deserve.  Rather than just plucking five features out of thin air, I've decided to ask you, the esteemed .NET community, to guide my virtual pen for this article.  I've created an online poll with 25 items that I could cover at  &lt;a href="http://FreeOnlineSurveys.com/rendersurvey.asp?id=84875"&gt;http://FreeOnlineSurveys.com/rendersurvey.asp?id=84875&lt;/a&gt;.  There is also room to add features that aren't on the list.  &lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Please feel free to take the survey and nominate your favourite hidden gems.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;As an optional reward for your time in filling out the survey, leave your email address, and I'll shoot you through a copy when the article is done.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111036256908397082?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111036256908397082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111036256908397082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111036256908397082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111036256908397082'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/net-20-hidden-gems.html' title='.NET 2.0 Hidden Gems'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111034657293261201</id><published>2005-03-08T21:36:00.000-08:00</published><updated>2005-03-08T21:36:12.933-08:00</updated><title type='text'>Eric talks about our upcoming book...</title><content type='html'>&lt;a href="http://blogs.msdn.com/ericgu/archive/2005/03/08/389912.aspx"&gt;http://blogs.msdn.com/ericgu/archive/2005/03/08/389912.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111034657293261201?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111034657293261201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111034657293261201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111034657293261201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111034657293261201'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/eric-talks-about-our-upcoming-book.html' title='Eric talks about our upcoming book...'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-111034643969302831</id><published>2005-03-08T21:33:00.000-08:00</published><updated>2005-03-08T21:33:59.693-08:00</updated><title type='text'>See you in Wollonong tomorrow night</title><content type='html'>I'm dropping down to see the great folks at the &lt;a href="http://www.wdnug.org/"&gt;Wollongong .NET Users Group (WDNUG)&lt;/a&gt; to speak about upgrading to .NET tomorrow night (10 Mar).  This is a talk more from the business and software/ project management side of the upgrade process, but does drill down into technical areas in the second half.  It's a from-the-trenches this-is-what-we-learnt presentation rather than a rah-rah "lets all migrate everything to managed code", and it has been quite popular when I have done it in Sydney.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Directions on the WDNUG site - hope to see you there for pizza around 6.30pm.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-111034643969302831?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/111034643969302831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=111034643969302831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111034643969302831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/111034643969302831'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/see-you-in-wollonong-tomorrow-night.html' title='See you in Wollonong tomorrow night'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110991085389768172</id><published>2005-03-03T20:34:00.000-08:00</published><updated>2005-03-03T20:34:13.896-08:00</updated><title type='text'>Photo of the Week - 28 Feb 2005</title><content type='html'>I was going to get this post out on Monday, but had plenty of writing to do for my &lt;a href="http://www.codeguru.com/columns/Kate/"&gt;Code Guru column&lt;/a&gt; and &lt;a href="http://www.charltonmedia.com/magazine.asp"&gt;MSDN Magazine ANZ&lt;/a&gt;, as well as the regular consulting work.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Continuing on from last week's lighthouse theme, this shot was taken at 6.28am on the 5th Feb this year at Wollongong Harbour.  I had shot the Interstate Challenge section of the Australian Surf Rower League (ASRL) Open 2005 event the night before, and scoped out the Harbour as a good sunrise location.  When I'm shooting a surf carnival, I like to get there really early (I left home before 5am on this day).  You get some great shots with the sun lower in the sky, you get a parking spot closer to the event (so if I need to download to the laptop if I run out of batteries on the portable storage device I don't miss many shots), the rowers don't have their club caps on for the warm-up so their face is a lot more visible, and the boats-all-over-the-shop situation that happens during warm-ups can deliver a more pleasing composition.  The fact that I'm always the only photographer there before 8am always surprises me. &lt;br&gt;&lt;br&gt;  &lt;br /&gt;As can be seen from the shot, the sky was totally clear, which is pretty uncondusive for a colorful dawn shot.  Without clouds to hold the red colour of the dawn, it is possible to get a strange mix of cold light from the darkish sky and very warm light when the sun has actually risen, as this shot shows quite well.&lt;br&gt;&lt;br&gt;  &lt;br /&gt;I had initially setup on the small beach just out of frame, but the lack of anything interesting in the sky (outside the sun when it finally appeared) gave me the feeling that I needed something stronger than a beach in the foreground to prevent the shot being a pretty boring "here is two lighthouses - how pretty" snapshot.  There was a breakwater that run around to the left and out to the lighthouse in front of the sun, and as I walked along this, the potential to use this large plant for foreground became apparent.  I was actually trying to frame the left lighthouse inside the leaves of the plant, but limited tripod room and the arrival of the sun spoiled this plan.  With a dawn shot on a day with no clouds to hold the color, the amount of time where typical dawn light is available is only a couple of minutes.  Before the sun actually rises, there isn't lot of color, and once the sun is fully over the horizon, it becomes too bright to shoot directly, and unless there is a lot of dust or pollution to scatter the blue light, there isn't much colour away from the sun.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;As the sun rose, I tried to hide it behind the small lighthouse, but the relative ratios where wrong, and the sun overwhelmed the lighthouse.  This turned most of the shot into silhouette, which took a lot of detail out of the boats in the harbour, but took a lot of the distractions away from the lighthouses.  The star-burst through the window half way up the lighthouse was an added bonus.  The star-burst has undergone no post-editing to enhance it.  The symmetry and cleanness of the star-burst yet again confirmed the quality of Canon L Series Lenses, in this case the 17-40.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;About 2 minutes after I took the shot, the sky was way too bright to anything close the the direction of the sun, and the direct lighting on the harbour had totally changed the way the scene looked.  The ASRL Open was held in really small surf, so this was defiantly one of the best shots of the day, and I'm glad I took the extra effort to get down to Wollongong early to get it.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Technical data embedded in JPEG for those interested.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I0040.jpg" width="1322" height="934" alt="" border="0"&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110991085389768172?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110991085389768172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110991085389768172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110991085389768172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110991085389768172'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/photo-of-week-28-feb-2005.html' title='Photo of the Week - 28 Feb 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110988944810186721</id><published>2005-03-03T14:37:00.000-08:00</published><updated>2005-03-03T16:41:58.056-08:00</updated><title type='text'>Aussie .NET Authors and Writers</title><content type='html'>My previous &lt;a href="http://blogs.apress.com/archives/000442.php?author=nick_wienholt"&gt;post&lt;/a&gt; got me thinking about how many .NET writers there are in Australia excluding Deepak and myself.  Here is the list I came up with.  If I've missed you, please drop me a line and I'll add you to the list:&lt;br&gt;&lt;br&gt; &lt;br /&gt;The list of Aussie .NET authors that I know of is (in no particular order):&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.parsonsdesigns.com/"&gt;Andrew Parsons&lt;/a&gt; - editor extraordinaire and author of the upcoming VBe title: &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0764595733/104-9070048-9269540"&gt;Wrox's Visual Basic 2005 Express Edition Starter Kit&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.mikedub.net"&gt;Michael Weinhardt&lt;/a&gt; - author of Windows Forms Programming in C#, Second Edition (covering .NET 2005)&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.stanski.com"&gt;Peter Stanski&lt;/a&gt; - co-author of &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/1861007000"&gt;.NET Compact Framework&lt;/a&gt; (where's the new version Pete?)&lt;br /&gt;&lt;li&gt;John Gough - author of &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0130622966/"&gt;Compiling for the .NET Common Language Runtime&lt;/a&gt;&lt;br /&gt;&lt;li&gt;  Damien Watkins (who I've never meet) - co-author of &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201770180/qid%3D1109886760"&gt;Programming in the .NET Environment&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Scott McCulloch - co-author of &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0764595636"&gt;Professional DotNetNuke ASP.NET Portals&lt;/a&gt;&lt;br /&gt;&lt;li&gt; &lt;a href="http://www.notgartner.com/"&gt;Mitch Denny&lt;/a&gt; - who has done a ton of .NET articles for Aus Developer&lt;br /&gt;&lt;li&gt; &lt;a href="http://msmvps.com/bill/"&gt;Bill McCarthy&lt;/a&gt; - who writes all over the place on VB.NET&lt;br /&gt;&lt;li&gt; &lt;a href="http://www.roodyn.com"&gt;Neil Roodyn&lt;/a&gt; -  XP and emdedded columnist, and author of &lt;a href="http://extreme.net.roodyn.com/SignedBook.aspx"&gt;eXtreme .NET&lt;/a&gt;&lt;br /&gt;&lt;li&gt; &lt;a href="http://msmvps.com/greglow/"&gt;Greg Low&lt;/a&gt; - doing a book on CLR Integration for DBAs and frequent .NET columnist&lt;br /&gt;&lt;li&gt;  &lt;a href="www.thespoke.net/MyBlog/nrandolph/MyBlog.aspx"&gt;Nick Randolph&lt;/a&gt; frequent .NET columnist&lt;br /&gt;&lt;li&gt; Tania Bull - used to write a lot for Aus Developer is its prime&lt;br /&gt;&lt;li&gt; &lt;a href="http://www.builderau.com.au/"&gt;Brendon Chase&lt;/a&gt; - frequent write on .NET&lt;br /&gt;&lt;li&gt; &lt;a href="http://www.builderau.com.au/"&gt;Chuck&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/acoat"&gt;Andrew&lt;/a&gt; - infrequent writers on .NET &lt;br /&gt;&lt;li&gt; &lt;a href="http://www.adopenstatic.com/"&gt;Ken Schaefer&lt;/a&gt; - author of &lt;a href="http://www.amazon.com/exec/obidos/ASIN/1931836256/adopenstati0f-20"&gt;CYA Securing IIS 6.0&lt;/a&gt;&lt;br /&gt;&lt;li&gt; &lt;a href="http://www.amazon.com/exec/obidos/search-handle-url/index=books&amp;field-author=Chris%20Peiris/104-9070048-9269540"&gt;Chris Peiris&lt;/a&gt; - who has been involved in heap of .NET books as an author and editor.&lt;br /&gt;&lt;li&gt; &lt;a href="http://weblogs.asp.net/pglavich"&gt;Paul Glavich &lt;/a&gt; frequent online author at ASPAlliance and other online ASP.NET resources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110988944810186721?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110988944810186721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110988944810186721' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110988944810186721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110988944810186721'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/aussie-net-authors-and-writers.html' title='Aussie .NET Authors and Writers'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110988837850786835</id><published>2005-03-03T14:19:00.000-08:00</published><updated>2005-03-03T14:19:38.506-08:00</updated><title type='text'>Deepak joins the ranks of Aussie .NET writers</title><content type='html'>I was speaking to &lt;a href="http://www.deepwinfx.com/Default.aspx"&gt;Deepak &lt;/a&gt;last night at the user group, and his big news was that he got his first article published on MSDN Online - &lt;a href="http://msdn.microsoft.com/Longhorn/archive/default.aspx?pull=/library/en-us/dnlong/html/avalonwinformsinterop.asp"&gt;Walking Through Avalon and Windows Forms Interoperability in Code&lt;/a&gt;.  I get heaps of people asking me how to write .NET articles, and Deepak is the first guy who has followed through and written something.  Deepak is right into the while Longhorn thing, so he is looking at stuff years ahead of me.  Well done Deepak - great stuff.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110988837850786835?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110988837850786835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110988837850786835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110988837850786835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110988837850786835'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/03/deepak-joins-ranks-of-aussie-net.html' title='Deepak joins the ranks of Aussie .NET writers'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110962602652180270</id><published>2005-02-28T13:27:00.000-08:00</published><updated>2005-02-28T13:27:06.520-08:00</updated><title type='text'>patterns &amp; practices fans - don't miss the upcoming webcasts this March</title><content type='html'>See &lt;a href="http://www.microsoft.com/resources/practices/default.mspx"&gt;http://www.microsoft.com/resources/practices/default.mspx&lt;/a&gt; for details.  I love the Application Blocks, and am really looking forward to using the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/entlib.asp"&gt;Enterprise Library&lt;/a&gt;&lt;br /&gt; in upcoming projects ....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110962602652180270?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110962602652180270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110962602652180270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110962602652180270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110962602652180270'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/02/patterns-practices-fans-dont-miss.html' title='patterns &amp; practices fans - don&apos;t miss the upcoming webcasts this March'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110919809916192059</id><published>2005-02-23T14:34:00.000-08:00</published><updated>2005-02-23T14:34:59.163-08:00</updated><title type='text'>What a tech guy does to recover from a great illness...</title><content type='html'>I got a phone call yesterday from &lt;a href="http://blogs.msdn.com/charles_sterling"&gt;Chuck&lt;/a&gt; saying &lt;a href="http://www.dotnetdan.com"&gt;Dan&lt;/a&gt; was real crook (and that Chuck had decided to spread rumors that it was STD related).  I was going to ring Dan to say get well, but thought he'd be resting, and didn't want to disturb his rest.  I sent him a get-well SMS instead.  &lt;br&gt;&lt;br /&gt;About 10 minutes later I got an email from Dan (who hadn't seen my SMS yet) asking about VS2005 debug visualizers (which we had talked about mid-last year as a solution to a debug-time problem with a validation framework we where working on.)  Dan was using his 'rest' time to research this feature.  Its funny how it is more restful to address these technical side-issues that have been on your mental to-do list for ages rather than engage in classic rest like fiction novels or Fox Sports.  Anyway, get well soon Dan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110919809916192059?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110919809916192059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110919809916192059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110919809916192059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110919809916192059'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/02/what-tech-guy-does-to-recover-from.html' title='What a tech guy does to recover from a great illness...'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110915619138901568</id><published>2005-02-23T02:56:00.000-08:00</published><updated>2005-02-23T02:56:31.390-08:00</updated><title type='text'>Photo of the week - 21 Feb 2005</title><content type='html'>Rather than just tack on a photo at the end of a technical post, I though I'd break it out into a separate post, and provide a bit of background on the photo a-la &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0871563673/"&gt;Mountain Light&lt;/a&gt;.  I aim to do a new photo each week, so I'll back-date this entry to Monday.&lt;br&gt;&lt;br /&gt;I'll start with a good one.  This is Bathurst Lighthouse on Rottnest Island, WA shot looking east from the western side of Pinky Beach at sunrise.  The shot was taken at 5.54am local time on 28 Dec 2004, just as the sun had started to break through the clouds.  The fact there where any clouds at all is a bit of a surprise for a WA summer morning, but there had been a large storm the night before.  By about 9am, the clouds had totally gone.&lt;br&gt;&lt;br /&gt;Bathurst Lighthouse at dawn is pretty much Rottnest's signature shot, but I am happy that aligning the Lighthouse with the light burst and including an interesting foreground raised it above a touristy snap-shot.  Bathurst Lighthouse is visible from Thompsons Bay (where I had stayed the night before and where the ferry comes in from Perth), so it is the obvious shot for a dawn location.  I didn't scout the shot out the night before, but did get up at 4am to make sure I was setup when the light hit.  I initially setup on the rock outcrop visible near the base of the Lighthouse, but the shot felt way too cramped.  Moving across the Beach gave a better sense of place, and also worked well when the sun burst through.  The sensor held the full range of light, which surprised me given the dullness of the foreground rocks and the brightness of the weakly filter sunlight.  Thankfully, the cloud cover was a sufficient filter, and the only Photoshop editing is a USM and level adjustment over the entire image&lt;br&gt;&lt;br /&gt;This is one of the few shots I've done where I am totally happy with the composition.  Given the chance, I wouldn't move any of the elements about.&lt;br&gt;&lt;br /&gt;Technical data embedded in JPEG for those interested.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I3138.jpg" width="1322" height="934" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110915619138901568?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110915619138901568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110915619138901568' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110915619138901568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110915619138901568'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/02/photo-of-week-21-feb-2005.html' title='Photo of the week - 21 Feb 2005'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110895486913885477</id><published>2005-02-20T19:01:00.000-08:00</published><updated>2005-02-20T19:10:40.636-08:00</updated><title type='text'>Reloading app.config - have your say</title><content type='html'>One of the guys in the CLR Fusion team (that thing that handles assembly loading and other related activities) recently &lt;a href="http://blogs.msdn.com/junfeng/archive/2005/02/20/376880.aspx"&gt;blogged&lt;/a&gt; about why app.config shouldn't/ can't reload.  He is getting beaten up a bit in the comments (by me and others) because the reason for not doing the reloading aren't very good.  If you have a strong feeling either way on this, please add your comments to his blog.  Hopefully weight of opinion can get this fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110895486913885477?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110895486913885477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110895486913885477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110895486913885477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110895486913885477'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/02/reloading-appconfig-have-your-say.html' title='Reloading app.config - have your say'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110812339511405524</id><published>2005-02-11T04:03:00.000-08:00</published><updated>2005-02-11T04:03:15.113-08:00</updated><title type='text'>PIC#3 Coming Along Well</title><content type='html'>I had a pretty good day on PIC#3 today - got through the final few tech review chapters I had outstanding from the 8 that I got back last week, and tidied up three of the chapters from second edition of the book that needed some minor updates.  I also finished checking the twenty or so chapters that needed no major work - all that I did was fix up places where namespaces had changed since Beta 2, and remove comments that related to functionality that was broken or missing in this release.  Most of the work was done while setting up a quad Xeon 2.8 Ghz HP Proliant server with 4GB of RAM that I've hired to do some DTS Yukon runs for a client.  The server sounds like a small vacuum cleaner when it is turned on - I'm looking forward to actually using the beast next week&lt;br&gt;&lt;br&gt;&lt;br /&gt;The work this week leaves only one new chapter outstanding (a coding style chapter suggested by the reviewer), and about half the tech edit responses still to go.  After that, we go into copy edit and PDF proofing, so the book is well and truly on track for a mid-year release.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Updating a book has been a very different experience from doing my own from scratch.  There is already a style and coverage pattern in place that you need to stick to, and there isn't the same extreme level of emotional attachment.  Its more like babysitting a friend's kid rather than looking after your own, in that you still have the responsibility to keep the kid happy and out of harms way, but you don't have the heightened emotional bond of a parent.  We've also had some fun working between the project manager, editor, tech reviewer and myself about what material we are going to put through the wringer of the tech review process.  There is heaps of material that is unaffected by the move to .NET 2.0, but exists in chapters where other material has changed.  Working out a balance between not touching this material and re-writing it has been an interesting experience.  The issues are all sorted now (I hope), and we're pressing ahead to bring the book for your (northern hemisphere) summer reading pleasure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110812339511405524?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110812339511405524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110812339511405524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110812339511405524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110812339511405524'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/02/pic3-coming-along-well.html' title='PIC#3 Coming Along Well'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110811876659754704</id><published>2005-02-11T02:46:00.000-08:00</published><updated>2005-02-11T02:46:06.596-08:00</updated><title type='text'>Gosling Gooses Himself in Sydney</title><content type='html'>While this is getting to be &lt;a href="http://www.builderau.com.au/program/work/0,39024650,39176463,00.htm"&gt;old news&lt;/a&gt;, Gosling deserves to keep getting beaten up for this series of statements for a few weeks to come.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Before I to lay the boot in on this one, it is worth clearly outlining any prejuicides I have.  To state the obvious, I'm a .NET guy.  I harbor no ill will towards Java or open source, and congratulate them for making the computing world a better place.  In an ideal world where I had more time, I'd embrace both fully.  I don't have infinite time, and in the finite time I do have, I've chosen to be a .NET guy.  More specifically, I concentrate on a very small section of .NET and Windows related to C++ and C#, performance, debugging, interop (Windows to .NET) and security.  I know next to nothing about GDI, I have a working knowledge of data stuff but I'm no expect, I'm horrid at UI, and ASP.NET is largely uncharted territory for me.  I have barely looked at Avalon, and don't rate WinFS.  Indigo should be good, but at the moment WSE is where I'm concentrating.  In short, I'm just as ignorant about large sections of .NET and Windows as I am about PHP or J2*E.  However, in both cases I have no hostility towards the unknown.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Just in case you missed what Gosling said, let me quote &lt;a href="http://www.builderau.com.au/program/work/0,39024650,39176463,00.htm"&gt;the ZDNet article&lt;/a&gt; that I'm basing my spray on.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Java creator James Gosling this week called Microsoft's decision to support C and C++ on the Common Language Runtime (CLR) in .NET one of the "biggest and most offensive mistakes that they could have made".   He further commented that by including the two languages into Microsoft's software development platform, the company "has left open a security hole large enough to drive many, many large trucks through". &lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Gosling is either significantly lacking in technical savy or deliberately lowering himself to the level of a vendor thug/ cheerleader who is spreads FUD through quarter truths and outright lies.  Gosling must realize that Code Access Security (CAS) exists, and this gives you absolute control over the verifiability requirements of an assembly.  I can find no evidence of CAS ever having been defeated in the three years plus that it has been protecting .NET systems, and zero evidence for any exploit related to .NET code.  &lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;To choose to attack Microsoft on this point smacks of absolute desperation, and even a tinge of losing touch with reality.  Gosling seems quite bitter over the failure of Java to live up to the potential that he and Sun saw in it (i.e. taking over the world), I suspect that the web service revolution that has seriously reduced the relevance of the my platform versus yours debate has made him yesterdays man without the will or energy to re-invent himself.&lt;br /&gt;&lt;br&gt;&lt;br&gt; A few further points:&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;li&gt;C++ in .NET 2.0 can be fully verifiable (easily).&lt;br /&gt;&lt;li&gt;C++ in .NET 1.1 can be fully verifiable (with great difficulty).&lt;br /&gt;&lt;li&gt;Microsoft does not have a C compiler for .NET.  I haven't seen (or looked) for one from another vendor.&lt;br /&gt;&lt;li&gt;And, as &lt;a href="http://blogs.msdn.com/charles_sterling"&gt;Chuck&lt;/a&gt; says in his response to Gosling, C++ (Managed Extensions or C++/CLI) is certainly not where it is at in todays .NET world.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;I can only imagine that many Java folks are cringing that this figurehead in their world has fallen into such a horrid rut.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110811876659754704?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110811876659754704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110811876659754704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110811876659754704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110811876659754704'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/02/gosling-gooses-himself-in-sydney.html' title='Gosling Gooses Himself in Sydney'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110716556508223726</id><published>2005-01-31T01:59:00.000-08:00</published><updated>2005-01-31T01:59:25.083-08:00</updated><title type='text'>Nth Cronulla NSW Surf Premiership Gallery Going Up Now</title><content type='html'>It was a day of big surf and many boat crashes on Saturday, so it's a big and entertaining &lt;a href="http://www.picjar.com/pub/goyousharks/NSW_Surf_Premiership/"&gt;gallery&lt;/a&gt; ....&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I0073.jpg" width="467" height="701" alt="" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I0524.jpg" width="701" height="467" alt="" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I3512.jpg" width="701" height="467" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110716556508223726?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110716556508223726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110716556508223726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110716556508223726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110716556508223726'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/01/nth-cronulla-nsw-surf-premiership.html' title='Nth Cronulla NSW Surf Premiership Gallery Going Up Now'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110687668924871566</id><published>2005-01-27T17:44:00.000-08:00</published><updated>2005-01-27T17:44:49.246-08:00</updated><title type='text'>Stop giving me that stupid look.  The Manly gallery is done...</title><content type='html'>&lt;a href="http://www.picjar.com/pub/sheyenne/Manly_Carnival/"&gt;http://www.picjar.com/pub/sheyenne/Manly_Carnival/&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I3093.jpg" width="701" height="467" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110687668924871566?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110687668924871566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110687668924871566' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110687668924871566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110687668924871566'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/01/stop-giving-me-that-stupid-look-manly.html' title='Stop giving me that stupid look.  The Manly gallery is done...'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110608137401686562</id><published>2005-01-18T12:49:00.000-08:00</published><updated>2005-01-18T12:49:34.016-08:00</updated><title type='text'>Wanda Gallery Done</title><content type='html'>... and uploading now to &lt;a href="http://www.picjar.com/pub/sheyenne/Wanda_InterCities/"&gt;http://www.picjar.com/pub/sheyenne/Wanda_InterCities/&lt;/a&gt;.  There will be 195 images in the gallery once the upload is done.  I've also got the domain name &lt;a href="http://www.cronullasunrise.com"&gt;cronullasunrise.com&lt;/a&gt; as a re-direct to the gallery.  Telling folks that the shots will be linked from &lt;a href="http://www.dotnetperformance.com/"&gt;www.DotNetPerformance.com&lt;/a&gt; causes a few weird looks.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I0234.jpg" width="876" height="584" alt="" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I2786_1.jpg" width="876" height="584" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110608137401686562?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110608137401686562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110608137401686562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110608137401686562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110608137401686562'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/01/wanda-gallery-done.html' title='Wanda Gallery Done'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110595383105843678</id><published>2005-01-17T01:23:00.000-08:00</published><updated>2005-01-17T01:23:51.056-08:00</updated><title type='text'>Wanda InterCities Pictures Going Up Now</title><content type='html'>I'm half way through organising the photos from Saturday's event at Wanda for upload - there are currently 101 &lt;a href="http://www.picjar.com/pub/sheyenne/Wanda_InterCities/"&gt;up here&lt;/a&gt;.  There were 2731 from the event, so its taking a while.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I got an email from Mike at the &lt;a href="http://www.toowoonbaysurflifesaving.com.au/"&gt;Toowoon Bay Surf Life Saving Club&lt;/a&gt; saying that they had a function on Friday night and had a good time looking at the photos from Avoca and Ocean Beach.  Glad someone liked them. &lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I0011.jpg" width="526" height="350" alt="" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I0163.jpg" width="526" height="372" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110595383105843678?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110595383105843678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110595383105843678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110595383105843678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110595383105843678'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/01/wanda-intercities-pictures-going-up.html' title='Wanda InterCities Pictures Going Up Now'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110552241641696414</id><published>2005-01-12T01:33:00.000-08:00</published><updated>2005-01-12T01:33:36.416-08:00</updated><title type='text'>Ocean Beach Peters Boats photo gallery up</title><content type='html'>I traditionally haven't put up shots from the surf carnivals I do because I have had plenty of hassle with a couple of clubs (not my local ones) worried about any shots from carnivals "used for the wrong reasons.".  I had heaps of requests at the carnival on the weekend for people who want to get some photos for the event, so I've decided to do a large gallery that anyone who was there can use to grad some high-quality shots from.  Overall, the folks up at the Central Coast where really friendly, and I had a great day shooting the event.  &lt;br&gt;&lt;br&gt;&lt;br /&gt;I did 1758 shoots in total, and narrowed it down to 162 &lt;a href="http://www.picjar.com/pub/sheyenne/Peters_Boats_-_Ocean/"&gt;for the gallery&lt;/a&gt;.  I did the first shot at 7.54am and the last at 12.43, so that is a shot about every 10s.  The crews did &lt;a href="http://www.picjar.com/pub/sheyenne/Peters_Boats_-_Ocean/?page=3"&gt;a pretty unique tribute to the tsunami victims&lt;/a&gt; (the third and fourth rows).  Good luck to the crews for this weeks final Peters Boats.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110552241641696414?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110552241641696414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110552241641696414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110552241641696414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110552241641696414'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/01/ocean-beach-peters-boats-photo-gallery.html' title='Ocean Beach Peters Boats photo gallery up'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110507532770670833</id><published>2005-01-06T21:22:00.000-08:00</published><updated>2005-01-06T21:22:07.706-08:00</updated><title type='text'>Dealing with the pain of C DLL interop</title><content type='html'>I had an email conversation with &lt;a href="http://www.dotnetdan.com"&gt;Dan&lt;/a&gt; last night and today about trying to get C# interop to a C DLL working.  Dan's method call was succeeding, but the method wasn't doing what it was supposed to day.  My final thoughts on the matter where:&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt; The great problem with interop to C-style DLLs in that the fairly loose typing of C means that a parameter that is, say, char*, can mean a number of different things depending on what the method is documented as doing with the parameter.  There is no way to automatically map parameter types.  For char*, string, StringBuilder, and IntPtr could all be used.  &lt;br /&gt;&lt;br&gt;&lt;br /&gt;My general strategy:&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;li&gt;Find an API that has been mapped with a similar parameter and use that.  The Windows API and &lt;a href="http://www.dotnetandcom.com/downloads/code.zip"&gt;Adam Nathan's conversions&lt;/a&gt; (Appendix E) of this is a good starting point.&lt;br /&gt;&lt;li&gt;Use the marshalling attributes where it makes sense, but don't kill yourself on them.  Don't be ashamed to use Marshal.AllocHGlobal and do the marshalling by hand.&lt;br /&gt;&lt;li&gt;Watch out for byte-alignment padding.&lt;br /&gt;&lt;li&gt;Understand who is responsible for allocating memory and what heaps the memory is one.&lt;br /&gt;&lt;li&gt;Prefer manually allocated memory over pinned managed memory.&lt;br /&gt;&lt;li&gt;A Managed C++ wrapper is always much simpler than the C# or VB.NET equivalent.&lt;br /&gt;&lt;li&gt;A lot of Windows-centric interop can be replaced with WMI/ System.Management.&lt;br /&gt;&lt;li&gt;Get the OS and .NET Framework debug symbols.&lt;br /&gt;&lt;li&gt;Check the calling convention and character set.&lt;br /&gt;&lt;li&gt;Understand the basics of unmanaged debugging.  It's not as hard as it might seem.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110507532770670833?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110507532770670833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110507532770670833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110507532770670833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110507532770670833'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/01/dealing-with-pain-of-c-dll-interop.html' title='Dealing with the pain of C DLL interop'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110501047645754773</id><published>2005-01-06T03:21:00.000-08:00</published><updated>2005-01-06T03:21:16.456-08:00</updated><title type='text'>Hammering ahead with PIC#3</title><content type='html'>I've had a good week working on PIC#3 (Programmers Introduction to C#, 3rd Edition).  I've done the new material for &lt;br /&gt;&lt;li&gt;the System.Array and the Collection Classes chapter (I added some stuff on the new classes in System.Collections.Generics), &lt;br /&gt;&lt;li&gt;the Execution-Time Code Generation chapter (added cover of light-weight code generation), &lt;br /&gt;&lt;li&gt;the Interop chapter (added coverage on fixed-size buffers) and &lt;br /&gt;&lt;li&gt;the .NET Frameworks Overview chapter (added coverage of expended TryParse, serial port support, compression streams and updated the examples.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;All this stuff is due this week, so I guess it's code that it's done.  Next week, the plan is to update:&lt;br /&gt;&lt;li&gt; the Windows Forms chapter (add ClickOnce coverage)&lt;br /&gt;&lt;li&gt; the DiskDiff: Making It Useful chapter (to try to cut down the interop usage with .NET 2.0 features)&lt;br /&gt;&lt;li&gt; the Threading and Asynchronous Operations chapter (to cover semaphores)&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;The overall plan is to have the first draft of all the new material done by the end of the first week in Feb.  So far, the plan is on track...&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;This weekend, I'm heading up to the NSW Central coast to shoot a surf boat carnival.  These are a few from November when I was up there last:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I9782.jpg" width="778" height="467" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I9568.jpg" width="825" height="553" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Finally, one of my favorites from over Christmas - Sunset over Sth Cottesloe, Christmas Eve:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I2786.jpg" width="739" height="554" alt="" border="0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110501047645754773?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110501047645754773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110501047645754773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110501047645754773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110501047645754773'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2005/01/hammering-ahead-with-pic3.html' title='Hammering ahead with PIC#3'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110248663344268875</id><published>2004-12-07T22:17:00.000-08:00</published><updated>2004-12-07T22:17:13.443-08:00</updated><title type='text'>NZ tour done - on to Adelaide</title><content type='html'>Monday night's Auckland presentation and Tuesday's presentations in Christchurch and Wellington are done, and overall, they went pretty well.  I got around 40 people in at Auckland, and outstanding 56 for a lunchtime session in Christchurch and about 30 or so in Wellington (apparently I was competing with one of the main IT Christmas parties held in Wellington).  This is the Christchurch crowd just before I kicked-off:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1983_4_1.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;The two highlights of Tuesday where the guided tour of Christchurch that Peter Jones (who runs the user group down there) provided, and Helen Hunt's (the Unisys developer, not the actress) tour of Wellington.  Peter took my up to the top of some mountain that overlooks a lot of Christchurch, and provided my only glimpse of what I imagined the real NZ to look like:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1984_1.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1991_3_1.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br /&gt;Helen took me on a guided tour of Wellington after the user group meeting, which was even more generous considering she was (coincidentally) on the same 6am flight to Sydney as me.  We went up to the top of Mount Victoria and also around the dock areas of Wellington:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1996_2_1.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_2003_1_1.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110248663344268875?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110248663344268875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110248663344268875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110248663344268875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110248663344268875'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/12/nz-tour-done-on-to-adelaide.html' title='NZ tour done - on to Adelaide'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110230815301061877</id><published>2004-12-05T20:42:00.000-08:00</published><updated>2004-12-05T20:42:33.010-08:00</updated><title type='text'>MSDN Update Comes to Auckland</title><content type='html'>I'm in Auckland tonight for the second leg of the MSDN Update tour.  Melbourne and Sydney are done and went pretty well, and I've made a few modifications to the slide deck to hopefully make them more visual and interactive.  WSE (or any RPC/ IPC technology) is fairly dry, and there isn't some WinForms-like demo that can capture what you are trying to talk about.  Showing a screen-full of raw SOAP message headers is pretty boring stuff, and I think it would be useless to most of the audience.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I haven't been to NZ before, and its a pity that I can't spend more than 2 days here.  Seeing the city and the main tourist attraction barely scratches the surface of a city, and you really need to get out into the suburbs and beyond to experience a place.  My preferred tourism strategy is to get a hire care and deliberately seek out places that aren't popular with tourists.  Tourism centres are designed to rip money out of you and present some pre-canned packaged experience that someone with a marketing degree has dreamed up.  While this can be fun for a while, I tire of it very quickly, and there is nothing more satisfying than finding a hidden gem to visit that doesn't even rate a mention in a Lonely Planet tour guide.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Tomorrow, it's Christchurch at 11am and Wellington at 6pm.&lt;br&gt;&lt;br&gt;&lt;br /&gt;A few shots of and from the Skytower:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1968_1.JPG" width="511" height="681" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1970_4.JPG" width="511" height="681" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1976_3.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1977_2.JPG" width="511" height="681" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110230815301061877?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110230815301061877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110230815301061877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110230815301061877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110230815301061877'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/12/msdn-update-comes-to-auckland.html' title='MSDN Update Comes to Auckland'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110181034427944825</id><published>2004-11-30T02:25:00.000-08:00</published><updated>2004-11-30T02:25:44.280-08:00</updated><title type='text'>External Assembly Aliases done and MSDN Update Tour</title><content type='html'>I knocked over the section on external assembly aliases for A Programmer's Introduction to C# 3 (to be known as PIC#3 from here on in).  I estimated the section would take 800 words, and I came in at 700 words (including code samples), so I guess my estimating skills are getting pretty good.  I also finished the third Developer.com article over the weekend on Verification and C++, and this should be up some time over the next week.  This came in at 1500 words, and with the 340 word update on the PIC#3 Properties chapter to cover the new accessibility features in C# 2.0, the weekly total came in at over 2500, which is pretty good for me.  The section on property accessibility was particularly fun to write because I got to retract everything Eric said in the previous two versions about different accessibility levels not being required.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I also completed leg one of the MSDN Update tour I'm doing over the next few weeks.  The first port of call was the &lt;a href="http://www.mdnug.org"&gt;Melbourne .NET User Group&lt;/a&gt;.  The crowd was pretty good (about 40), but they where fairly quite, and I got through the slides a lot quicker than I though. I've added a bit more material for the presentation on Thursday at &lt;a href="http://www.sdnug.org/"&gt;SDNUG&lt;/a&gt;.  After that, the schedule is:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;06 Dec 18:00 &lt;a href="http://www.dot.net.nz/page.wsenick.aspx"&gt;Auckland, NZ&lt;/a&gt;&lt;br&gt;&lt;br /&gt;07 Dec 11.00 &lt;a href="http://www.dot.net.nz/page.wsenick.aspx"&gt;Christchurch, NZ&lt;/a&gt;&lt;br&gt;&lt;br /&gt;07 Dec 18.00 &lt;a href="http://www.dot.net.nz/page.wsenick.aspx"&gt;Wellington, NZ&lt;/a&gt; &lt;br&gt;&lt;br /&gt;08 Dec 18.00 &lt;a href="http://www.adnug.com/"&gt;Adelaide, AU &lt;/a&gt;&lt;br&gt;&lt;br /&gt;09 Dec 18.00 &lt;a href="http://www.wdnug.org/"&gt;Wollongong, AU&lt;/a&gt; &lt;br&gt;&lt;br /&gt;13 Dec 08.00 &lt;a href="http://www.perthdotnet.org/"&gt;Perth, AU &lt;/a&gt;&lt;br&gt;&lt;br /&gt;14 Dec 18.00 &lt;a href="http://www.qmsdnug.org/"&gt;Brisbane, AU &lt;/a&gt;&lt;br&gt;&lt;br /&gt;15 Dec 18.00 &lt;a href="http://gcdotnet.org/"&gt;Gold Coast, AU&lt;/a&gt;&lt;br&gt;&lt;br /&gt;16 Dec 16.30 &lt;a href="http://www.cbrdev.net/"&gt;Canberra, AU&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110181034427944825?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110181034427944825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110181034427944825' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110181034427944825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110181034427944825'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/11/external-assembly-aliases-done-and.html' title='External Assembly Aliases done and MSDN Update Tour'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-110129222253326290</id><published>2004-11-24T02:30:00.000-08:00</published><updated>2004-11-24T02:30:22.533-08:00</updated><title type='text'>A Programmer’s Introduction to C#, Third Edition - Finally Underway</title><content type='html'>After a few false starts and a fortnight of email tag, I've finally nutted through all those administrative details that need to get completed before you write a book, and I'm underway on the update to Eric's book.  We're looking at a "mid 2005" release, but I am aiming to get the material done by the end of the southern summer.  I've estimated the new content to be around 15000 to 18000 new words, so there will be plenty of new stuff to make the book a worthwhile buy.&lt;br&gt;&lt;br&gt;&lt;br /&gt;As I get the stuff done, I'll provide an update via the blog so you can get a sense of the workflow involved in getting a project like this done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-110129222253326290?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/110129222253326290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=110129222253326290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110129222253326290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/110129222253326290'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/11/programmers-introduction-to-c-third.html' title='A Programmer&amp;rsquo;s Introduction to C#, Third Edition - Finally Underway'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109981772497130451</id><published>2004-11-07T00:55:00.000-08:00</published><updated>2004-11-07T00:55:24.973-08:00</updated><title type='text'>New Developer.com article up - C++ and CodeDom</title><content type='html'>&lt;a href="http://www.developer.com/net/cplus/article.php/3431041"&gt;I've made it into the second month of my proposed monthly column for Developer.com on Visual C++&lt;/a&gt;, so I'm moderately proud.  On top of running the &lt;a href="http://www.sdnug.org/"&gt;Sydney Deep .NET User Group&lt;/a&gt;, delivering the Whidbey Ascend training last Thursday, doing a bi-monthly column for MSDN Magazine (Australia and New Zealand Edition), and preparing for my round-the-country WSE 2 talk in December  (plus the full time consulting thing), it was pretty brutal getting this one out.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Covering CodeDom and C++ made my realize how many things where not quite right with the initial two releases of Visual C++.NET.  While it was certainly a useable product, it was a bit of a step back from the polished finish of V6.  I feel sorry for the C++ team - they have so many competing objectives, and the product has a surface area about five times bigger than other compilers like C# and VB.NET.&lt;br&gt;&lt;br&gt;&lt;br /&gt;My gut feeling that C++ has slipped firmly into the niche category was confirmed when doing the Ascend training.  I had 25 or so for the C# session, and 2 for C++.  Regardless of the popularity wane, I think it is still am important product, and I really congratulate Microsoft on the time and expense it is going to in making Visual C++ a great product.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109981772497130451?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109981772497130451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109981772497130451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109981772497130451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109981772497130451'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/11/new-developercom-article-up-c-and.html' title='New Developer.com article up - C++ and CodeDom'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109947189050498453</id><published>2004-11-03T00:51:00.000-08:00</published><updated>2004-11-03T00:51:30.503-08:00</updated><title type='text'>Microsoft Threat Modeling Tool</title><content type='html'>In preparing for the Ascend training I'm delivering, I've been doing a bit of experimenting with Microsoft's threat modeling tool.  For a free tool, it is quite comprehensive and usable.  A wizard to populate some of the initial information would be a good addition. The tool can be downloaded from &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=62830f95-0e61-4f87-88a6-e7c663444ac1&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=62830f95-0e61-4f87-88a6-e7c663444ac1&amp;displaylang=en&lt;/a&gt;, and MS Press have a &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0735619913/"&gt;whole book&lt;/a&gt; available on the subject.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109947189050498453?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109947189050498453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109947189050498453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109947189050498453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109947189050498453'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/11/microsoft-threat-modeling-tool.html' title='Microsoft Threat Modeling Tool'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109938932268790918</id><published>2004-11-02T01:55:00.000-08:00</published><updated>2004-11-02T01:55:22.686-08:00</updated><title type='text'>Sydney becomes the .NET focal point for a week</title><content type='html'>The Visual Studio 2005 Ascend Training is being held in Sydney this week.  For those who haven't heard about the program, it's a Microsoft event for large and medium ISVs to get up to speed on .NET 2.0.  I'm pinch-hitting on Day 4 (Thursday) with C#, C++, BCL and Security sessions.  For the many MVPs and folks I know who are doing the course - make sure you catch my sessions on the Tools &amp; Integration track.&lt;br&gt;&lt;br&gt;&lt;br /&gt;There are also two user group meetings being held in Sydney this week.  The &lt;a href="http://www.ssw.com.au/SSW/netug"&gt;SSW User Group&lt;/a&gt; is running on Wednesday night at Microsoft, and &lt;a href="http://www.sdnug.org/"&gt;SDNUG&lt;/a&gt; is being run in its usual first-Thursday-of-the-month slot.  Adam had to delay his group for a fortnight to get over the exhaustion of being carried up some mountain in Africa by a team of pygmy porters.&lt;br&gt;&lt;br&gt;  &lt;br /&gt;Australia has two cities that have multiple .NET user groups - Sydney and Melbourne.  In Sydney's case, &lt;a href="http://www.dotnetdan.com"&gt;Dan&lt;/a&gt; and I were talking about founding a user group most of 2001 when the group that became the first Sydney .NET user group was still a VB/ Access/ SQL Server group.  &lt;a href="http://www.ssw.com.au/SSW/Employees/employeesprofile.aspx?EmpID=AC"&gt;Adam&lt;/a&gt; beat us to become the "Sydney .NET User Group", so we became the Sydney Deep .NET User Group.  The two groups have quite different styles, and we have found that there is very little overlap in attendees.  This seems mostly due to the fact that we are in the CBD and attract public transport users who work for large companies while Adam is up at North Ryde, and attracts mostly people from ISVs located in the suburbs who drive to work.  While there is a certain level of healthy rivalry, everyone in the Sydney .NET scene is quite friendly, and we regularly attend each other groups.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Finally, Cronulla sunrise taken on 1st Nov&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I8255.jpg" width="876" height="584" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109938932268790918?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109938932268790918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109938932268790918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109938932268790918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109938932268790918'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/11/sydney-becomes-net-focal-point-for_02.html' title='Sydney becomes the .NET focal point for a week'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109876564805472916</id><published>2004-10-25T21:40:00.000-07:00</published><updated>2004-10-25T21:40:48.056-07:00</updated><title type='text'>KB Article 307340 - At least I tried to get it fixed</title><content type='html'>Anyone with even a basic understanding of the complexitites of performance diagnosis knows that performance problems come from many different factors.  Highlighting one potential cause of performance problems without even mentioning others (particularly in an official communication like a KB article) doesn't seem overly wise to me, and I put in some correspondance through the MVP program internal newsgroups on &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;307340&amp;Product"&gt;KB article 307340 - PRB: High CPU Utilization in Web Service or Web Form&lt;/a&gt; on these grounds.&lt;br&gt;&lt;br&gt;&lt;br /&gt;What I said was:&lt;br&gt;&lt;i&gt;&lt;br /&gt;KB article 307340 (PRB: High CPU Utilization in Web Service or Web Form&lt;br /&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;307340&amp;Product&lt;br /&gt;=aspnet) isn't an overly helpful article.  Suggesting that it is&lt;br /&gt;reasonable to correlate high CPU utilization on a web server with string&lt;br /&gt;concatenation in the absence of any other supporting information is totally&lt;br /&gt;unreasonable, and very unhelpful to the IT administrators charged with&lt;br /&gt;diagnosing and fixing a run-away CPU problem, and the developer whose code&lt;br /&gt;is running on the box.&lt;br&gt;&lt;br&gt;&lt;br /&gt;IMO, the article should be scrapped entirely, or at a minimum, expanded to&lt;br /&gt;included:&lt;br&gt;&lt;br&gt;&lt;br /&gt;* a very clear statement that there are many other problems that can cause&lt;br /&gt;this problem totally unrelated to string concatenation.&lt;br&gt;&lt;br&gt;&lt;br /&gt;* include the Perfmon counters that can be used to test whether the problem&lt;br /&gt;is string concatenation related.  Looking at the ratio of generation 0&lt;br /&gt;collections to gen 1 and gen 2 (a ratio of around 1 to 10 should exist&lt;br /&gt;between the each generation step, excessive gen 0 collections indicate the&lt;br /&gt;creation and collection of an excessive number of short lived objects) and&lt;br /&gt;the % time in GC counter, all of which are available on the .NET CLR Memory&lt;br /&gt;performance object.&lt;br&gt;&lt;br&gt;&lt;br /&gt;* a link to the CLR profiler on MSDN so that string concatenation hypothesis&lt;br /&gt;can be conclusively proved if perfmon backs up the assertion.&lt;br&gt;&lt;br&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The response I got was that the article was technically accurate and will not be changed.  After going to the effort of providing a fair amount of further information that could have enhanced the article, I'm disappointed that they choose not to include it.  I've personally come across two occasions where this article has caused people to fly off to a conclussion without even attempting a proper diagnosis, and given this is one of the few articles that the Knowledge Base published on .NET performance, I would have hoped it would be a lot better.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Well, at least you are warned now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109876564805472916?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109876564805472916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109876564805472916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109876564805472916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109876564805472916'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/10/kb-article-307340-at-least-i-tried-to.html' title='KB Article 307340 - At least I tried to get it fixed'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109861774155070744</id><published>2004-10-24T04:35:00.000-07:00</published><updated>2004-10-24T04:35:41.550-07:00</updated><title type='text'>Learning More Technology Than You Can Poke a Stick At</title><content type='html'>I'm currently all over the place in terms of the technology I'm focussing on.  I'm working pretty hard on a large project for a client where SQL Server DTS 2005 is going to be a key technology, so I'm focussing on learning and understanding this technology during working hours.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Out of hours, I'm going through the C# 2.0 spec and other related material in detail getting ready for the update of Eric's book.  Also, I'm doing the C++ column for internet.com, and have been looking at STL.NET and CodeDOM in Managed C++.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I also do some work for the local Microsoft office, and I've got the Whidbey Ascend training on C#, C++ and BCL enhancements coming up in early November.  The material comes pre-canned, but it is still a bit of work to make sure it is all familiar.  In addition, I'm touring Australia and New Zealand in mid-December talking on WSE 2.0 at user groups, and this is a slide deck I'm preparing from scratch.&lt;br&gt;&lt;br&gt;&lt;br /&gt;As you could imagine, I'm not doing as many photos as I'd like.  I did get this waterfall in the Royal National Park south of Sydney in full flow (thanks to Sydney's big wet) at sunset last week.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I7977s.jpg" width="876" height="584" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109861774155070744?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109861774155070744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109861774155070744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109861774155070744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109861774155070744'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/10/learning-more-technology-than-you-can.html' title='Learning More Technology Than You Can Poke a Stick At'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109798554932053937</id><published>2004-10-16T20:59:00.000-07:00</published><updated>2004-10-16T21:25:01.876-07:00</updated><title type='text'>Updating A Programmer’s Introduction to C# for C# 2.0</title><content type='html'>I've recently signed on to do the updated version of &lt;i&gt;A Programmer's Introduction to C#&lt;/i&gt; for Apress.  The first two editions of this book were written by &lt;a href="http://blogs.msdn.com/ericgu"&gt;Eric Gunnerson&lt;/a&gt;, who was the C# PM, but &lt;a href="http://blogs.msdn.com/ericgu/archive/2004/09/03/225464.aspx"&gt;announced in September&lt;/a&gt; has was moving to another team in Microsoft.  &lt;a href="http://blogs.apress.com/authors.php?author=Gary%20Cornell"&gt;Gary&lt;/a&gt; emailed me to see if I was keen to do an updated version of the book, and being a big fans of Eric and the first two versions of the book, I happily agreed.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I'm getting together a revised TOC at the moment.  The stuff in black is the TOC of the second edition of the book, and the stuff in red is what I plan to add.  Any comments or feedback would be welcome.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Chapter 1 Object-Oriented Basics &lt;br&gt;&lt;br /&gt;Chapter 2 The .NET Runtime Environment&lt;br&gt;&lt;br /&gt;Chapter 3 C# QuickStart and Developing in C# &lt;br&gt;&lt;br /&gt;Chapter 4 Exception Handling &lt;br&gt;&lt;br /&gt;Chapter 5 Classes 101 &lt;br&gt;&lt;br /&gt;Chapter 6 Base Classes and Inheritance &lt;br&gt;&lt;br /&gt;Chapter 7 Member Accessibility and Overloading &lt;br&gt;&lt;br /&gt;Chapter 8 Other Class Details &lt;font color="#FF0000"&gt;(including static classes)&lt;/font&gt; &lt;br&gt;&lt;br /&gt;Chapter 9 Structs (Value Types) &lt;br&gt;&lt;br /&gt;Chapter 10 Interfaces &lt;br&gt;&lt;br /&gt;Chapter 11 Versioning &lt;font color="#FF0000"&gt;and Aliases&lt;/font&gt;&lt;br&gt;&lt;br /&gt;Chapter 12 Statements and Flow of Execution &lt;br&gt;&lt;br /&gt;Chapter 13 Variable Scoping and Definite Assignment &lt;br&gt;&lt;br /&gt;Chapter 14 Operators and Expressions &lt;br&gt;&lt;br /&gt;Chapter 15 Conversions &lt;br&gt;&lt;br /&gt;Chapter 16 Arrays &lt;br&gt;&lt;br /&gt;&lt;font color="#FF0000"&gt;Chapter x Generics&lt;/font&gt;&lt;br&gt;&lt;br /&gt;Chapter 17 Strings &lt;br&gt;&lt;br /&gt;Chapter 18 Properties  &lt;font color="#FF0000"&gt;(including property accessors)&lt;/font&gt;&lt;br&gt;&lt;br /&gt;Chapter 19 Indexers, Enumerators &lt;font color="#FF0000"&gt;and Iterators&lt;/font&gt;&lt;br&gt;&lt;br /&gt;Chapter 20 Enumerations &lt;br&gt;&lt;br /&gt;Chapter 21 Attributes &lt;br&gt;&lt;br /&gt;Chapter 22 Delegates &lt;font color="#FF0000"&gt;and Anonymous Methods&lt;/font&gt;&lt;br&gt;&lt;br /&gt;Chapter 23 Events &lt;br&gt;&lt;br /&gt;Chapter 24 User-Defined Conversions &lt;br&gt;&lt;br /&gt;Chapter 25 Operator Overloading &lt;br&gt;&lt;br /&gt;&lt;font color="#FF0000"&gt;Chapter x Nullable Types&lt;/font&gt;&lt;br&gt;&lt;br /&gt;Chapter 26 Other Language Details &lt;font color="#FF0000"&gt;(including partial classes and inline warning control) &lt;/font&gt;&lt;br&gt;&lt;br /&gt;Chapter 27 Making Friends with the .NET Frameworks &lt;br&gt;&lt;br /&gt;Chapter 28 System.Array and the Collection Classes &lt;font color="#FF0000"&gt;(including System.Collections.Generics)&lt;/font&gt;&lt;br&gt;&lt;br /&gt;Chapter 29 Threading and Asynchronous Operations &lt;br&gt;&lt;br /&gt;Chapter 30 Execution-Time Code Generation &lt;br&gt;&lt;br /&gt;Chapter 31 Interop &lt;font color="#FF0000"&gt;(including fixed size buffers)&lt;/font&gt;&lt;br&gt;&lt;br /&gt;Chapter 32 .NET Frameworks Overview&lt;br&gt;&lt;br /&gt;Chapter 33 Windows Forms &lt;br&gt;&lt;br /&gt;Chapter 34 DiskDiff: More Sophistication &lt;br&gt;&lt;br /&gt;Chapter 35 DiskDiff: Making It Useful &lt;br&gt;&lt;br /&gt;Chapter 36 Deeper into C# &lt;br&gt;&lt;br /&gt;Chapter 37 Defensive Programming &lt;br&gt;&lt;br /&gt;Chapter 38 The Command Line Compiler &lt;br&gt;&lt;br /&gt;Chapter 39 C# Compared to Other Languages &lt;br&gt;&lt;br /&gt;Chapter 40 C# Resources and Futures&lt;br&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109798554932053937?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109798554932053937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109798554932053937' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109798554932053937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109798554932053937'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/10/updating-programmers-introduction-to-c.html' title='Updating A Programmer&amp;rsquo;s Introduction to C# for C# 2.0'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109781760844743310</id><published>2004-10-14T22:20:00.000-07:00</published><updated>2004-10-14T22:24:20.930-07:00</updated><title type='text'>customErrors mode="Off</title><content type='html'>Glad I'm not the only one the occasionally stuffs this up on a live site:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/Canon.com.au.jpg" width="603" height="601" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109781760844743310?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109781760844743310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109781760844743310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109781760844743310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109781760844743310'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/10/glad-im-not-only-one-occasionally.html' title='customErrors mode=&quot;Off'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109781664383760654</id><published>2004-10-14T22:04:00.000-07:00</published><updated>2004-10-14T22:04:03.836-07:00</updated><title type='text'>A Week In Perth</title><content type='html'>I've spend the last week in Perth with my family visiting the in-laws.  The weather was pretty miserable the whole week, and there where very few photo opportunities.  We took an overnight trip up to the Pinnacles, which are one of WA's marquee photo locations, but the light was pretty crook, and I didn't get any good shots despite spending sunset out there.  The Pinnacles are a pretty amazing place - the 4WDs in the background of this image give some scale to the size of the place:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I6813.jpg" width="876" height="584" alt="" border="0"&gt;.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The performance of the &lt;a href="http://www.canon.com.au/products/cameras_lenses_accessories/telephoto_zoom_lenses/ef28-300mmf3.5-5.6lisusm.html"&gt;Canon 28-300 lens&lt;/a&gt; that I got just prior to the trip was one of the bright points of the trip (outside being able to spend a relaxing week with the family).  As you'd expect from an L-series lens, the pictures where sharp over the entire zoom range, and 28-300 covers so a wide range of photographic situations, I didn't switch to another lens the entire trip.  If you don't mind the weight, its an awesome lens.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I also caught up with Nick Randolph, who runs the &lt;a href="http://www.perthdotnet.org/"&gt;WA .NET Community of Practice&lt;/a&gt;.  Nick is a great guy, and it is good to hear a perspective on what is happening in .NET outside Sydney.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109781664383760654?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109781664383760654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109781664383760654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109781664383760654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109781664383760654'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/10/week-in-perth.html' title='A Week In Perth'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109723544162756260</id><published>2004-10-08T04:37:00.000-07:00</published><updated>2004-10-08T04:37:21.626-07:00</updated><title type='text'>First Developer.com article up</title><content type='html'>I'm doing a C++ column on Developer.com.  Not sure of the regulaity, but I am aiming for monthly.  The results of my first effort are up at &lt;a href="http://www.developer.com/net/cplus/article.php/3417861"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109723544162756260?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109723544162756260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109723544162756260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109723544162756260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109723544162756260'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/10/first-developercom-article-up.html' title='First Developer.com article up'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109685513520615977</id><published>2004-10-03T18:58:00.000-07:00</published><updated>2004-10-03T18:58:55.206-07:00</updated><title type='text'>Whidbey C++ - Easier than C# in a number of areas</title><content type='html'>I've got a few C++ sessions and columns coming up over the next couple of months for Microsoft Australia and as part of a new C++ column I'm doing for &lt;a href="http://www.developer.com"&gt;Developer.com&lt;/a&gt;, and have used this as motivation to begin to really understand where C++ is going in Whidbey.  Like everyone else (or so it seems), I am no fan of Managed C++, and had to give it up when my underscore key broke due to overuse.  All the C/C++ I have done over the past couple of years has been getting code bases to the point where they could be called with P/Invoke or COM interop from pure managed applications.  While I think I got to the stage where I understood Managed C++ well enough to program in it, I had zero confidence that any Managed C++ I produced would be maintainable by the folks I left behind when my engagement with an organisation was done.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Anyway, enough Managed C++ bashing.  The new C++ language extensions coming in Visual C++ 2005 are really good.  While they resemble C# more than Managed C++, they are a long way from a poor-mans C#, and actually makes some programming tasks a lot easier than C#.  The two primary benefits are deterministic clean-up of disposable objects that are logically located on the stack (via the injection of a using statement by the compiler), and the ability to declare trivial properties in a single line (eg.  &lt;b&gt;property string Name;&lt;/b&gt;).  While this seems like a minor feature, it cuts down on the amount of pasted get and sets that end up in a method, and is something that C# really lacks.  I asked Anders about this features at the MVP conference last April, and got an unenthusiastic response.&lt;br&gt;&lt;br&gt;&lt;br /&gt;If you are coming from a Visual C++ 6.0 perspective, the language looks really clean and immediately understandable.  Given the great interop capabilities of C++, and the fact that it will be a really first-class experience for developing .NET applications, I'd expect to see most of those still in the 6.0 product moving into Visual C++.NET (even if they stick to native code) with this release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109685513520615977?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109685513520615977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109685513520615977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109685513520615977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109685513520615977'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/10/whidbey-c-easier-than-c-in-number-of_03.html' title='Whidbey C++ - Easier than C# in a number of areas'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109685348729762312</id><published>2004-10-03T18:31:00.000-07:00</published><updated>2004-10-03T18:58:14.936-07:00</updated><title type='text'>No time to blog - photographing</title><content type='html'>I've spend most of my non-work time that I usually devote to .NET pursueing photography.  I'm loving the &lt;a href="http://www.dpreview.com/reviews/specs/Canon/canon_eos1dmkii.asp"&gt;1D Mk II&lt;/a&gt;, though the one issue that I have found annoying is the sensor dust issue.  For a camera series as robust as the Canon 1, the fragility in the face of sensor dust is annoying.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I've done a few prints over the long weekend - here are a couple of my favorite images so far:&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I2892.jpg" width="876" height="584" alt="" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I3453a.jpg" width="826" height="584" alt="" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I3478a.jpg" width="826" height="584" alt="" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I5426.jpg" width="826" height="584" alt="" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/JP7I5865.jpg" width="826" height="584" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109685348729762312?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109685348729762312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109685348729762312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109685348729762312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109685348729762312'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/10/whidbey-c-easier-than-c-in-number-of.html' title='No time to blog - photographing'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109593920728352928</id><published>2004-09-23T04:33:00.000-07:00</published><updated>2004-09-23T04:33:27.283-07:00</updated><title type='text'>Update on the Windows Forms Delayed Handle Creation Bug</title><content type='html'>I got an email about a week from a fellow called &lt;a href="http://pdxjjb.blogspot.com/"&gt;Jeff Berkowitz&lt;/a&gt; who had experienced the same problem with the delayed window handle creation that I posted on &lt;a href="http://sheyenne.blogspot.com/2004/08/nasty-windows-forms-bug-hidden-windows.html"&gt;here&lt;/a&gt;.  Jeff's post of 9 Aug 2003 describes his discovery of the problem, and in his email he references &lt;a href="http://weblogs.asp.net/justin_rogers/articles/126345.aspx"&gt;this&lt;/a&gt; incredible detailed review of the problem by Justin Rogers.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The situation is a bit of a chicken-and-the-egg-scenario.  My initial thoughts were to marshal back to the Control-creating thread to create the handle, but you need the handle to get back onto that thread.  PostThreadMessage won't do the trick, because its message can get lost when delivered to a UI thread is in a modal loop.  If the original UI thread had a thread-specific hook installed, PostThreadMessage is feasible as the PostThreadMessage message won't get lost, but is this getting too far-out?&lt;br&gt;&lt;br&gt;&lt;br /&gt;Here is the response we got from the Windows Forms team on the bug:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;i&gt;We had thought about storing the creation thread for the control, but when we do eventually perform an Invoke, the invocation must actually use the control&amp;rsquo;s HWND to marshal the call to the correct thread.  Therefore, if the HWND isn&amp;rsquo;t created we cannot marshal the call.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The breaking change police may shoot it down, but the best behavior we can shoot for I think is to throw in Invoke whenever the handle isn&amp;rsquo;t created.  Ideally we would store the creation thread at startup so we could make IsInvokeRequired correctly.  Adding another four bites to Control isn&amp;rsquo;t a good solution, but we have some optimized ways of storing data so it&amp;rsquo;s only four bytes if (a) you ask IsInvokeRequired and (b) we can clean it up when the HWND is created.&lt;br&gt;&lt;br&gt;&lt;br /&gt;If that gets shot down I&amp;rsquo;ll pursue the documentation of IsHandleCreated along with IsInvokeRequired. Better than nothing, I guess.&lt;br&gt;&lt;br&gt;&lt;/i&gt;&lt;br /&gt;Anyway, as the work-around of referencing the Handle property before doing asynch. stuff is so trivial, as long as Whidbey raises an exception to let the developer know something is wrong, I'll be happy (or at least not sad).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109593920728352928?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109593920728352928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109593920728352928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109593920728352928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109593920728352928'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/09/update-on-windows-forms-delayed-handle.html' title='Update on the Windows Forms Delayed Handle Creation Bug'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109576325071797849</id><published>2004-09-21T03:40:00.000-07:00</published><updated>2004-09-21T03:40:50.716-07:00</updated><title type='text'>Builder AU Conference Cancelled.  Conference Denny to fill the void.</title><content type='html'>For all the thousands of folks planning trips to Sydney in early October to hear my performance piece at the Builder AU conference, I am saddened to announce that Brendon Chase from ZDNet has informed me that the conference has been cancelled.  Having spoken to a few folks organising these conferences, it is a really hard job.  Its a pity that this one bit the dust - it was going to be the first big event in Sydney since the ill-fated VSLive of April 2001.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I hope &lt;a href="http://notgartner.com/posts/644.aspx"&gt;Mitch's conference&lt;/a&gt; gathers momentum.  Can I vote for holding the conference somewhere on the NSW South Coast.  It would be a great time to have it some time over summer down there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109576325071797849?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109576325071797849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109576325071797849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109576325071797849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109576325071797849'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/09/builder-au-conference-cancelled.html' title='Builder AU Conference Cancelled.  Conference Denny to fill the void.'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109472514407761626</id><published>2004-09-09T03:19:00.000-07:00</published><updated>2004-09-09T03:19:04.076-07:00</updated><title type='text'>Dinner with Gary Cornell</title><content type='html'>I finally met up with &lt;a href="http://blogs.apress.com/archives/authors.php?author=Gary%20Cornell"&gt;Gary Cornell&lt;/a&gt; last night during his whirlwind world tour.  Gary was making use of a round-the-world ticket that was running up against a tight expiry deadline, and had jet-setted across many continents before reaching Sydney.  We had a great dinner at a Chinese restaurant in China Town, and chatted about many things ranging from technology and publishing through to the range of live seafood on display at the restaurant.  The meeting represented my first face-to-face contact with Apress, which is certainly understand considering that the worlds largest ocean (or is it two oceans - North and South Pacific?) separates Berkley, CA from Sydney, NSW.  I still find it mildly surprising how much business you can do over email without ever meeting in person.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Thanks for the great dinner and conversation, Gary, and look forward to meeting all the Apress folks one day!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109472514407761626?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109472514407761626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109472514407761626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109472514407761626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109472514407761626'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/09/dinner-with-gary-cornell.html' title='Dinner with Gary Cornell'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109393567532694071</id><published>2004-08-31T00:01:00.000-07:00</published><updated>2004-09-09T03:22:00.006-07:00</updated><title type='text'>Presenting Performance Figures</title><content type='html'>Authors need to be very careful the exact terms they use to describe the performance characteristics of a particular piece of technology.  As &lt;a href="http://www.SimonRobinson.com"&gt;Simon Robinson &lt;/a&gt;, the technical reviewer for &lt;a href="http://www.apress.com/book/bookDisplay.html?bID=217"&gt;my book&lt;/a&gt; often pointed out, benchmark results only directly apply to the test they were derived, and are influenced by my factors like hardware, framework version, operating system and other running process.&lt;br&gt;&lt;br&gt;&lt;br /&gt;In my &lt;a href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=80e1b9fe-3edb-4b9d-9c02-08564b9ef5f5"&gt;benchmark harness&lt;/a&gt;, the test cases are executed many times on a high priority thread to minimize the impact of some of these potentially interferes, but at the end of the day, the test results are only as good as the code inside the benchmarks.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Even for great tests run using the harness, it is critically important that the results are described.  Take, for example, virtual methods.  In a test for the book, I compared the cost of calling methods with various types of modifiers applied, and found that there was a performance impact for virtual methods.  The impact is quite small, and as &lt;a href="http://www.iunknown.com/000049.html"&gt;John Lam&lt;/a&gt; points out, depending on the type of modifier and how the processor groups instructions for execution, the performance impact may be eliminated.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Before my book came out, Fawcette published &lt;a href="http://www.ftponline.com/portals/compuware/features/balena/page7.asp"&gt;an article&lt;/a&gt; by Francesco Balena in which he stated (or did when this link worked): &lt;br&gt;&lt;br&gt;&lt;br /&gt;"Methods that implement interface members are two to seven times slower than regular methods, depending on the language you use and the coding technique you use to declare and call the method."&lt;br&gt;&lt;br&gt;&lt;br /&gt;See the problem?  Francesco implies that by being interface-implementing methods, THE METHOD itself will run "two to seven times slower".  A software engineer I work with actually stopped using interfaces in his code based on this advice.  What Francesco should have said is "Methods that implement interface members are two to seven times slower to &lt;i&gt;call&lt;/i&gt; than &amp;#8230;".  The actual method's execution speed won't be effected, and for a method that does any type of complex processing, the impact will be negligible.  Francesco's slight linguistic slip-up meant that this part of the article conveyed a piece of information that was totally wrong.  (I'm not trying to pick on Francesco here - he is a great author, and I enjoy has work.  I'm just quoting his slip-up because of the interesting results it has caused.  I'm sure there are a few places in my writing where I've made the same slip-up).&lt;br&gt;&lt;br&gt;&lt;br /&gt;The motto&lt;br&gt;&lt;br&gt;&lt;br /&gt;Authors:&lt;br /&gt;	Be careful what you write - people take your words literally at times.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Readers:&lt;br /&gt;	Be skeptical of all benchmarks, run the test yourself if in doubt, and always be careful how you apply the result of your benchmark to a specific problem.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109393567532694071?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109393567532694071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109393567532694071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109393567532694071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109393567532694071'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/presenting-performance-figures.html' title='Presenting Performance Figures'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109393509592384493</id><published>2004-08-30T23:51:00.000-07:00</published><updated>2004-08-30T23:51:35.923-07:00</updated><title type='text'>In Defence Of DataSets</title><content type='html'>The DataSet vs business objects debate has flared up on the project I am working on, with pro-business object lobby pushing for the removal of all DataSet traces from the system.  Up front I should declare my preference - I am pretty sold on the benefits of DataSets, and while I wouldn't go to the same extent as &lt;a href="http://www.ssw.com.au/SSW/Employees/employeesprofile.aspx?EmpID=AC"&gt;Adam Cogan&lt;/a&gt; ("There are only two type of programmers - those that use DataSets, and those that which they did"), I'd want to be sure that the motivations for ditching DataSets where solid before they got the cut.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The argument against DataSets in this case come down to two main factors:&lt;br /&gt;&lt;li&gt;They are Microsoft-specific, and don't play well with other technologies and platforms.  This criticism is entirely valid, and I don't disagree with it, as far is it goes.  The counter-argument is that wrapping DataSet-centric systems with business object facades so that they play well in the SOA world is certainly possible, and while it isn't easy to accommodate all the semantics of DataSets with a business objects, it is a bridge that can be crossed.  For the case of a service that provides data from a database, this is essentially what the anti-DataSet crowd are suggesting that we do from the start, so if it is something that can be accomplished ahead of time, there is no reason that it can't be achieved just in time.&lt;br /&gt;&lt;li&gt;DataSets perform worse than business objects.  A number of benchmarks exist that show using business objects can result in greater throughput than DataSets.  Any hand-crafted type or algorithm is going to perform better than a general-purpose equivalent.  Performing the comparison is valid, because you want to understand the cost of the general-purpose solution.  It is critical to interpret the raw results of performance comparisons intelligently - is the performance cost of the general-purpose solution offset by the other features it offers, and are those other features (which include having the code already built) worth the cost?&lt;br&gt;&lt;br&gt;&lt;br /&gt;Before putting the raw performance figures to bed, it is worth addressing two of the DataSet's performance issues - the serialization/ deserialization cost of persisting schema as well as data, and the fatness of the bits sent across the wire caused by the schema.  By changing the custom tool associated with DataSets from MSDataSetGenerator to &lt;a href="http://msdn.microsoft.com/xml/default.aspx?pull=/library/en-us/dnxmlnet/html/xsdcodegen.asp"&gt;XsdCodeGen&lt;/a&gt;, it is a pretty simple task to get rid of the schema,  Sharing schema information out-of-band with WSDL or project references is fine in many situations, so the loss of schema information in every persisted DataSet instance is not a drama.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Small DataSets are typical for the project in discussion, so a test case of a single Order with three OrderDetails children from Northwind was chosen to test the performance improvement that could be won by removing the schema from the persisted format.  Benchmarking showed that the schema-free DataSets where five times quicker to serialize and three time quicker to deserialize, with about half as much data transmitted over the wire.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Given the &lt;i&gt;potential&lt;/i&gt; performance issues and Microsoft-specific nature of DataSets, why bother with them?  To me, DataSets have the following benefits or features that are either impossible, difficult or tedious to achieve with a business object framework:&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;li&gt;Developer familiarity.  All this isn't a show-stopper for business object frameworks, it should not be under-estimated.&lt;br /&gt;&lt;li&gt;No need to bridge the object-relational Impedance Mismatch bridge.  This is a huge one.  Look at the success of Object Spacing at crossing this bridge.&lt;br /&gt;&lt;li&gt;Good designer support in VS.NET.&lt;br /&gt;&lt;li&gt;In built support for concurrency management, and the ability to retrieve only data changes.&lt;br /&gt;&lt;li&gt;The ability to merge two sets of data that share the same schema.  Important for data-binding when data is being updated from external sources, as it means that you don't have to do a full re-bind every time this occurs.&lt;br /&gt;&lt;li&gt;In-built filtering support with DataView&lt;br /&gt;&lt;li&gt;Data query capabilities ("give me all the employess who joined before 1 Mar 2000")&lt;br /&gt;&lt;li&gt;Support for storing error information inline with the data (SetColumnError)&lt;br /&gt;&lt;li&gt;Excellent binding capabilities, both at runtime and design time.&lt;br /&gt;&lt;li&gt;Rich (if slightly imperfect) eventing infrastructure.&lt;br /&gt;&lt;li&gt;Support for any-relation navigation.  Object graphs typically only offer parent-child (or child only) navigation.&lt;br /&gt;&lt;li&gt;Loss-less persistance with the XML Serializer.&lt;br /&gt;&lt;li&gt;Rich in-built XML support (with the help of XmlDataDocument)&lt;br /&gt;&lt;li&gt;Ability to extract type information (in the form of an XSD) without needing to use the reflection API.&lt;br /&gt;&lt;li&gt;Ability to merge and split an arbitrary number of "instance graphs" together for storage or transport.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109393509592384493?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109393509592384493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109393509592384493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109393509592384493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109393509592384493'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/in-defence-of-datasets.html' title='In Defence Of DataSets'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109287339706928288</id><published>2004-08-18T16:56:00.000-07:00</published><updated>2004-08-18T16:56:37.070-07:00</updated><title type='text'>Nasty Windows Forms Bug - Hidden Windows, Worker Threads and Delayed Handle Creation</title><content type='html'>An issue came up on the project I am working on at the moment where one of the applications was freezing up during a population of the UI from data that was being sent over a web service.  All the code to correctly manage windows calls being made on the correct thread was being automatically generated, so it was a pretty big surprise that the problem cropped up.  The freeze was pretty easy to replicate, and after setting up full debug symbols for Windows and the .NET framework, it was apparent that the call that was hanging was the Win32 function SetWindowsPos.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;After a bit of frigging around, we noticed that although the callback that occurred when the web service ended (which was obviously occurring on a thread pool worker thread and not the UI thread) was actually making direct calls against Control-derived objects.  The code is this method was correct - we were checking InvokeRequired, and had the logic to Invoke back onto the UI thread if created, but InvokeRequired was returning false in our case.  Looking at the logic of InvokeRequired, the handle of the current thread was being compared to the handle of the thread that the Windows handle was created on, which was the same in this case.  This occurred despite the fact that the Control-derived &lt;b&gt;object&lt;/b&gt; that we were accessing was created back on the UI thread.  What the hell was happening?&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;A bit more investigating confirmed that Windows handles are not created until they are actually required.  The Handle property only creates the real Windows handle on the first get_ call, which doesn't occur when a Control-derived object is created.  The problem in this case was that the window being populated was not actually being shown until the data had come back from the web service, so no one had asked for the handle until it was accessed as part of the InvokeRequired check.  This in turn result in the handle being created on the worker thread, which we did not own, and which didn't have a message pump set up to handle windows calls.  The result - the app locked up when other calls where made to the previously hidden window, as these calls where made on the main UI thread, which reasonably assumed that all other Control-derived object had also been created on this thread.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;The work-around is simple - access the handle property somewhere during the Control-derived objects creation, which forces the real underlying Windows handle to be created.  After that, all works well.  The problem was found in the .NET Framework V1.1, and in still there in the current Beta 1 release of the 2.0 Framework.  We've submitted the problem to Microsoft, and I'll update you when we get word back.  The fix is reasonably simple - they need to track the handle of the thread that the object was created on, and if this is different when the Handle property is accessed for the first time, the call should go back to the object-creating thread.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://dotnetperformance.com/blogimages/WinFormThread.zip"&gt;A simple re-pro that shows the handle being created on the wrong thread is shown here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109287339706928288?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109287339706928288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109287339706928288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109287339706928288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109287339706928288'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/nasty-windows-forms-bug-hidden-windows.html' title='Nasty Windows Forms Bug - Hidden Windows, Worker Threads and Delayed Handle Creation'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109235593972449849</id><published>2004-08-12T17:12:00.000-07:00</published><updated>2004-08-12T17:12:19.730-07:00</updated><title type='text'>Jonathan Wells wows them at SDNUG</title><content type='html'>Last night at &lt;a href="http://www.sdnug.org/"&gt;SDNUG&lt;/a&gt; we had the Compact Framework PM &lt;a href="http://blogs.msdn.com/onoj"&gt;Jonathan Wells&lt;/a&gt; present an intermediate overview session on the Compact Framework.  Jonathan did a great job explaining where the CF sits in MS's overall strategy, how the CF relates to the Win32 version of the .NET Framework, and also showed of some really cool apps that the CF team at Microsoft has released.  If you didn't see Jonathan present at one of the many Tech Eds that he attended over the last couple of months, it will be worthwhile grabbing the slide deck for the session (it will be up on the SDNUG site within the week) and exploring the wealth of resource links that he has assembled in his slide deck.&lt;br&gt;&lt;br&gt;&lt;br /&gt;What made Jonathan's talk even more special was that he pro-actively volunteered for the session despite the fact he was on holidays.  Jonathan is originally from Australia, so he was actually missing spending time with his family to talk to the couple of dozen developers (about 35 last night I think) who come to our meeting.)  Many thanks Jonathan&lt;br&gt;&lt;br&gt;&lt;br /&gt;A special congratulations to one of our regular attendees and presenters &lt;a href="http://www.lzcd.com"&gt;Luke Drumm&lt;/a&gt; who got married on the weekend.  Well done Luke, and enjoy the honeymoon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109235593972449849?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109235593972449849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109235593972449849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109235593972449849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109235593972449849'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/jonathan-wells-wows-them-at-sdnug.html' title='Jonathan Wells wows them at SDNUG'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109235582971916561</id><published>2004-08-12T17:10:00.000-07:00</published><updated>2004-08-12T17:10:29.733-07:00</updated><title type='text'>Tech Ed Aus Over All Bar The Blogging (The post I forgot to post last weekend)</title><content type='html'>[Sorry for the late post - the TechEd wireless was pretty dead on the last day of the conference, and I forgot to post this one]&lt;br&gt;&lt;br&gt;&lt;br /&gt;The final day of Tech Ed Aus has come and gone, and like all breaks from real work, the conference ended all too quickly.  I only attended a few sessions today - the Security Expert Panel held over the lunch break was focussed at the IT Professional/ Operations delegates, but I always like to attend a few of these things to see how the other lives.  &lt;a href="http://www.steveriley.ms/"&gt;Steve Riley&lt;/a&gt; from Microsoft is an awesome speaker, and it is worth going to his session for a great public speaking performance even if the content isn't professionally relevant.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I saw some of "Prescriptive Guidance-Juggling Web Services, WSE, .NET Remoting, System. EnterpriseServices, and MSMQ", but had to leave early.  I'm looking forward to watching this session on the Tech Ed DVDs that attendees get given at the end of the show (which is one of the key technical benefits of attending TechEd).  The remote communication story for Windows/.NET developers is a real mess at the moment, and Indigo can't ship soon enough.  This talk also has a heap of performance material that I am looking forward to digging into.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The final session was the closing keynote.  Eric Rudder was a good speaker, but the session was more of a pep talk than a big news-breaker.  I guess this should be expected given the big announcements that came out of San Diego and Amsterdan, but I always find it disappointing that executive sessions often end up saying so little of real consequence.  This certainly isn't a criticism of Eric - maybe with the internet, video-on-demand and the absolute deluge of technical information available, expecting a big announcement or deep technical revelation is unrealistic.  A big congrats to &lt;a href="http://msmvps.com/greglow"&gt;Greg Low&lt;/a&gt;, who did a great job flying the MVP flag during a Yukon demo during the keynote.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Overall, the conference was really enjoyable, and I enjoyed catching up with all my colleges, MVP mates, and local and international MS staff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109235582971916561?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109235582971916561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109235582971916561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109235582971916561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109235582971916561'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/tech-ed-aus-over-all-bar-blogging-post.html' title='Tech Ed Aus Over All Bar The Blogging (The post I forgot to post last weekend)'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109210579811019310</id><published>2004-08-09T19:43:00.000-07:00</published><updated>2004-08-09T19:43:18.123-07:00</updated><title type='text'>1DMkII ships</title><content type='html'>After months on numerous Canon pro-dealer waiting lists, my &lt;a href="http://www.dpreview.com/reviews/canoneos1dmkii/"&gt;1DMkII&lt;/a&gt; finally shipped.  Here she is sitting proudly on my desk:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com/blogimages/IMAGE_00040.jpg" border="0"&gt;&lt;br /&gt;&lt;br /&gt;Can't wait to actually use the camera.  I'm tempted to ditch the planned surfski in the morning and try some sunrise pics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109210579811019310?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109210579811019310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109210579811019310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109210579811019310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109210579811019310'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/1dmkii-ships.html' title='1DMkII ships'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-10917563992650562</id><published>2004-08-05T18:39:00.000-07:00</published><updated>2004-08-05T18:39:59.323-07:00</updated><title type='text'>Calling All Visual C++ 6 Programmers</title><content type='html'>One of the topics I discussed with Eric Rudder last night was the reasonably large group of programmers who have stuck with Visual C++ 6.  This groups seems to be the programmers that time forgot - they have a simple and smooth migration path to 7.0 and 7.1, and these newer products add a heap of functionality that is valuable in the real world - better standards compliance (98.11% in the current release), better security with the /GS switch, better performance (/G7 and SIMD), and the OPTIONAL ability to access the .NET Framework and CLR.  The migration path is trivial - even for a large project, a migration is less than a days work.  I have successfully migrated largish (&gt;100k LOC) projects from Visual C++ 1.52 to 7.1 without too many dramas, and that is going from 16-&gt;32 bit as well.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;So, the question that Eric and I have, is WHY ARE YOU STILL USING VISUAL C++ 6?  If there is some reason (real or imagined) for avoiding the migration, please email me with the reason (nick at dotnetperformance dot com), and I'll compile that list and send it to Eric.  If you've been putting the move off, now is the time to move.   I'd hold off the move to Managed C++ until 2005 ships, but if native code is where you are at, Visual C++ 2003 is an excellent product.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-10917563992650562?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/10917563992650562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=10917563992650562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/10917563992650562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/10917563992650562'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/calling-all-visual-c-6-programmers.html' title='Calling All Visual C++ 6 Programmers'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109175035763749326</id><published>2004-08-05T16:59:00.000-07:00</published><updated>2004-08-05T18:40:30.666-07:00</updated><title type='text'>TechEd Aus Dinner with Eric Rudder</title><content type='html'>Last night was the MVP and other "influentials" dinner with Eric Rudder, Microsoft's Senior Vice President of Servers and Tools.  As servers and tools is where I spend most of my professional life (although the OS needs an honorable mention), meeting Eric was a fantastic opportunity - thanks Frank and team for orgnising the event.  Eric gave an opening address before the meal - here he is addresses the hushed masses before the pizza and pasta arrived.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1412_1.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;After everyone had eaten, the &lt;a href="http://aspiring.blogs.com"&gt;Illustrious Leader&lt;/a&gt; and I came over to his table and chatted with him for about an hour.  Eric was extremely friendly and gracious with his time - our conversation ranged from:&lt;br&gt;&lt;br /&gt;&lt;li&gt;C++  - see my next post for more on this.&lt;br /&gt;&lt;li&gt;VSTS - serious lobbying to move unit testing into the Pro box, and expressions of disappointment that it doesn't look like there will be a single MSDN subscription package that will have the full VSTS suite.&lt;br /&gt;&lt;li&gt;How he spends his time and how he manages his email.  Eric said he managed his email himself, and spends a fair bit of time talking to customers via email.  I have an idle curiosity how this big execs spend their day - what do you do with your day when you are so high up in an orgnisation that you have the ability to delegate everything?  Eric said he works "lots" of hours a week, and does a fair bit of email communication both at work and at home.&lt;br /&gt;&lt;li&gt;Baseball - Eric is a Mets fan, and I'm a Dodgers fan, so we both have a mutual hatred for the cross-town (or in the Dodger's case, former cross-town) Yankees.  I think Eric said his Dad was a Brooklyn fan.  We agreed to disagree on the merits of &lt;a href="http://newyork.mets.mlb.com/NASApp/mlb/team/player.jsp?player_id=120536"&gt;Piazza&lt;/a&gt; as a player and a person.&lt;br /&gt;&lt;li&gt;The difficulty is controlling kids access to violent video games and other undersirable material accessible via PCs.&lt;br /&gt;&lt;li&gt;His impending relocation to Paris.&lt;br /&gt;&lt;li&gt;His tour of Australia's Parliament house, and upcoming Harbour Bridge walk.&lt;br /&gt;&lt;li&gt;The joy in co-ordinating huge software releases.&lt;br /&gt;&lt;br&gt;&lt;br&gt;At the end, I got the obligatory photo with him.&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1414_2.JPG" width="444" height="315" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;After that, it was across to the TechEd party.  A junior staff member left a stage door open, and I saw what I believed to be the new simplified VB6-&gt;VB.NET migration path that Eric is rumored to be announcing in his closing keynote.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1479_1.JPG" width="511" height="681" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109175035763749326?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109175035763749326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109175035763749326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109175035763749326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109175035763749326'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/teched-aus-dinner-with-eric-rudder.html' title='TechEd Aus Dinner with Eric Rudder'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109168656897335776</id><published>2004-08-04T23:16:00.000-07:00</published><updated>2004-08-04T23:36:23.623-07:00</updated><title type='text'>Tech Ed Aus Day 2 - My Talk is Done And All Went Well</title><content type='html'>I did my performance talk this morning to a huge crowd - around 220 -  and it came off really well.  I was blown away by the crowd - for an obscurish topic at a 400 Level, I expected 30 or so people.  The talk was moved rooms last night due to the number of people registered, and I was surprised that they all turned up.  I did C++ at Tech Ed at Brisbane last year, and only got 40-50 people.  Here is me looking stupid waiting for the crowd to roll in.  The slide deck will be up on my website later this week.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1408_4.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;We had a user group/ student ambassador meeting over the lunch break.  Lots of grand plans and great people, but once you get back into the grind of work, it is hard to keep the enthusiasm and plans happening.  Running a user group and getting it all organized every month is hard enough - trying to do stuff on top of this is very hard.  It was good to meet all the academic folks.  I hope that the user group leaders end up with some portal/ Sharepoint/ DotNetNuke site to coordinate our efforts, and an Australia/ New Zealand speakers bureau would be a huge win.  Here is &lt;a href="http://blogs.msdn.com/frankarr/"&gt;Frank&lt;/a&gt;, Chuck, &lt;a href="http://blogs.msdn.com/acoat"&gt;Andrew&lt;/a&gt; and Caroline at the meeting.  Frank is looking pensive - is he thinking about MSDN Connections?&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1409_5.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;I signed a copy of &lt;a href="http://www.apress.com/book/bookDisplay.html?bID=217"&gt;my book&lt;/a&gt; for the famous &lt;a href="http://sqljunkies.com/WebLog/brianr/"&gt;Brian Randell&lt;/a&gt;.  He had actually bought a copy with him from LA, and I was very happy and humble to sign it for him.  Here is Brian holding court last night near the MVP stand&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1404_2.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;I'm in &lt;a href="http://www.ssw.com.au/SSW/Employees/employeesprofile.aspx?EmpID=AC"&gt;Adam Cogan's&lt;/a&gt; Windows Form talk.  It is typical Cogan - relentlessly practical, presented in his own rude and aggressive style.  He has successfully abused 3 attendees, bagged Microsoft about 8 times, and offended all partners, competitors and media outlets involved in the IT industry.  Adam can do this all without causing any real offense, which is quite an achievement.  Here is Adam at his rudest best - stealing the last donught from some poor stuggling vendor's stand.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1401_1.JPG" width="511" height="681" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;As Adam has just made a tasteless joke about Arabs and security, and is now moving on to strip bars, I guess I feel honoured being at his last talk as a MSDN Regional Director.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Looking forward to the Eric Rudder dinner tonight.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109168656897335776?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109168656897335776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109168656897335776' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109168656897335776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109168656897335776'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/tech-ed-aus-day-2-my-talk-is-done-and.html' title='Tech Ed Aus Day 2 - My Talk is Done And All Went Well'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109160586321005599</id><published>2004-08-04T00:51:00.000-07:00</published><updated>2004-08-04T00:53:54.056-07:00</updated><title type='text'>Tech Ed Aus - Day 1</title><content type='html'>I got to three sessions today - the opening keynote, Prashant Sridharan's VSTS Intro, and &lt;a href="http://www.dotnetdan.com"&gt;Dan&lt;/a&gt; and the &lt;a href="http://aspiring.blogs.com"&gt;Illustrious Leader's&lt;/a&gt; Team Development talk.  The keynote was unusual - Dr. Joseph MacInnis, who is a Canadian medical deep diver who works with the like of James Cameron on things like the iMax Titanic Feature.  The keynote had nothing to do with IT, but was smoothly delivered and motivational, so I guess it was a success.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Prashant's talk was the San Diego demo distilled down to a single person format, and didn't contain much new.  This is one of the drawback's of regional Tech Eds - you get a lot of content from the US Tech Ed that has already been published through the web.&lt;br&gt;&lt;br&gt;&lt;br /&gt;As expected, Dan and Troy's talk was very popular.  It is a credit to local MSDN staff that they ran this talk - it doesn't attempt to sell any Microsoft product, and isn't geared around some recent or upcoming product.  The talk purely aims to help developers and dev leads get their work done, hence its overwhelming popularity.  Someone made the point that they didn't cover MSBuild - I think they should take this as a compliment.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1398_1_1.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Surprisingly, the weather in Canberra was pretty good today.  This is Mount Ainsile as seen from the Convention Centre.  As an officer cadet at the Australian Defence Force Academy, we used to run up this mountain during Physical Training (PT) sessions.  It brings back pleasant memories.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1394_2_1.JPG" width="681" height="511" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;I'm all set from my 10.15 session on .NET Performance tomorrow.  If you're here at Tech Ed, make sure you come along.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109160586321005599?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109160586321005599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109160586321005599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109160586321005599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109160586321005599'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/tech-ed-aus-day-1.html' title='Tech Ed Aus - Day 1'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109156664862357788</id><published>2004-08-03T13:57:00.000-07:00</published><updated>2004-08-03T17:30:47.526-07:00</updated><title type='text'>Arrived at Tech Ed Aus - Weather Beautiful</title><content type='html'>After spending a long weekend with my family at Hymans Bay, Jervis Beach, I arrived at Tech Ed yesterday.  I came the back route between Nowra and Braidwood, so I got a bit of off-roading in the Kluger in, and have proof to everyone that says its never been dirty.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1383_1.JPG" width="1022" height="1363" alt="" border="0"&gt;&lt;br /&gt;The temperate got down to 4 degrees as we came over the dividing range, and the weather in Canberra is miserable as expected.&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1385_2.JPG" width="1363" height="1022" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Time to pack the family of home and enjoy the conference.&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1388_3.JPG" width="1363" height="1022" alt="" border="0"&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109156664862357788?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109156664862357788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109156664862357788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109156664862357788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109156664862357788'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/08/arrived-at-tech-ed-aus-weather.html' title='Arrived at Tech Ed Aus - Weather Beautiful'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109109629719314696</id><published>2004-07-29T03:18:00.000-07:00</published><updated>2004-07-29T03:18:17.196-07:00</updated><title type='text'>Enjoying MobiPocket and the Argument for Ebooks</title><content type='html'>Since getting my Smartphone in May, I have been searching for the right reader application for it.  I'm a huge fan of electronic books - they are obviously much more portable than their paper equivalent - to put some real numbers on their portability, I've come up with a portability index, which a weight ratio between the ebook and paper book version, I weighed my Smartphone (130g), the SD card that it takes (2g, which stores 1GB of data), and my Apress book (640g).  Assuming 5MB storage for my book, I can hold 200 copies of it on my phone (ignoring internal storage), which comes to 0.66g per ebook.  So, based on weight, the electronic form would be 970 times more portable (640/.66).  Even if you use a laptop as a reader (say the chunky Dell Inspiron 8600 at 3.1kg) and reserving a modest 5GB for ebooks (so you could store 1000 total books), the portability index still comes out a 206 compared to paper.  This portability index obviously ignores cost, but as I'd have a phone capable of installing applications and a laptop anyway, cost isn't a relevant factor for me&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Back to the Smartphone - I actually find it a great reading surface.  All readers have annotation abilities, so I have a virtual (if somewhat slow) pen with me at all times.  The device is a lot lighter than a paper book, and the in-built lighting capabilities is great for reading in dim places.  As mobiles are a carry-everywhere device for me most of the time, I have the convenience of having a book with me all the time.  I was initially really disappointed (and am still pretty disappointed) to find that Microsoft doesn't provide a version of Reader for the Smartphone.  It makes a mockery of the marketting spin that porting apps between Windows CE configurations is easy (if it is, why haven't they done it?), and seems to be an ongoing attempt to kill their own product.  I was on the review team for &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/ScaleNet.asp"&gt;Improving .NET Application Performance and Scalability&lt;/a&gt;, and my suggestion that a Reader version be made available (in addition to the PDF and HTML version) was summarily ignored.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;The reason that I was so keen to get Reader was the largish library of books available from Amazon in Reader format.  The PDF library is larger, but secure PDFs aren't supported on the PocketPC version of Adobe Acrobat Reader, and Adobe doesn't have a Smartphone version at all.  My first thought was to use a third party reader with no library support, and attempt to work around the security features of books that I bought to get them into a Smartphone-compatiable form.  I initially used &lt;a href="http://www.cerience.com/"&gt;RepliGo&lt;/a&gt;, which comes with a print driver that allows you to print documents to the RepliGo Reader.  The reader software is excellent, and I used it to read a few books on the Smartphone that I could print from either Word or Acrobat.  After exhausting the small number of books I could process in this manner, I starting trying to get secure PDFs to somehow print to RepliGo.  There doesn't appear to be anyway to do this, so I then went in search of a new reader - enter MobiPocket.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;MobiPocket is similar to RepliGo from a software perspective, but also has a small but adequate library of titles that are available for the reader.  I purchased a copy of &lt;a href="http://www.mobipocket.com/en/eBooks/BookDetails.asp?BookID=12293"&gt;Benjamin Franklin - An American Life&lt;/a&gt; from MobiPocket (I already had purchased it in PDF form from Amazon), and have been really happy with the reading and licensing experience so far.  A book is locked to a maximum of two devices, which isn't too bad considering the ebooks are pretty cheap, and the reader itself is reasonably priced.  The reader also supports the consumption of most of the AvantGo feeds, so if you are one of those folks waiting for AvantGo to bring out a Smartphone edition, give MobiPocket a go instead.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;I'd love to see more publishers making their books available in electronic format.  As a purchaser, I favor books that have an electronic version available, and when choosing between two comparable titles on .NET, the MSPress version will always win out if it has a CHM version available on the accompanying CD-ROM.  Getting CHM back to the original HTML source is trivial, and then I usually suck the lot into Word using a macro and print to MS Reader, PDF or RepliGo as required.  Working on a client's site (as I do about half the time) generally means that the only technical books that are useful to me are those that are directly relevant to the project (meaning I have lugged them on site), and ebooks.  The rest sit at home lonely and unused.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;At the moment I'm enjoying &lt;a href="http://www.mobipocket.com/en/eBooks/BookDetails.asp?BookID=18342"&gt;Shadow Divers&lt;/a&gt; on MobiPocket, and look forward to working my way through a few other titles they have on offer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109109629719314696?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109109629719314696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109109629719314696' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109109629719314696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109109629719314696'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/07/enjoying-mobipocket-and-argument-for_29.html' title='Enjoying MobiPocket and the Argument for Ebooks'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109109608622875100</id><published>2004-07-29T03:14:00.000-07:00</published><updated>2004-07-29T03:15:52.820-07:00</updated><title type='text'>Another Tip Thanks to Dan - Making Debugging Easier</title><content type='html'>&lt;a href="http://www.dotnetdan.com"&gt;Dan&lt;/a&gt; (know as .NET Dan to his family and groupies) came up with another great idea that I thought was worth sharing.  The project I'm working on at the moment is a validation framework that essentially involves a whole heap of plumbing code to allow strongly-typed rules written in compiled code to check an arbitrary data source.  I inherited the project from &lt;a href="http://notgartner.com/"&gt;Mitch&lt;/a&gt;, so if its a dumb idea, let him know.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;I have been focussed on making the development-time friendliness of the framework better over the last month, and one of the problems we faced is that it can be difficult for a developer to track a validation failure back to a rule.  When a rule fails, a particular method is called by the rule to signify the failure.  Dan's idea was to output a message to the VS.NET Output window similar to a compilation error, allowing the developer to double-click the message and be instantly transported to the line where the validation failure is signalled.  The code to do this is:&lt;br&gt;&lt;br /&gt;&lt;br&gt;if (System.Diagnostics.Debugger.IsAttached){ &lt;br&gt;&amp;nbsp;&amp;nbsp;StackTrace st = new StackTrace(true); &lt;br&gt;&amp;nbsp;&amp;nbsp;for(int ix = 0; ix &lt; st.FrameCount; ++ix){ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StackFrame sf = st.GetFrame(ix); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (sf.GetMethod().Name == "Validate") &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string sfMessage = String.Format("{0} ({1}, 0): Validation failed: {2}", sf.GetFileName(), sf.GetFileLineNumber(), message);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Trace.WriteLine(sfMessage); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br&gt;&amp;nbsp;&amp;nbsp;} &lt;br&gt;} &lt;br&gt;&lt;br /&gt;&lt;br&gt;I'm obviously looking for the frame in the stack where a method called Validate is but you get the idea.  Formatting a stack frame this way makes it automatically navigatable from the Output window.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109109608622875100?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109109608622875100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109109608622875100' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109109608622875100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109109608622875100'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/07/enjoying-mobipocket-and-argument-for.html' title='Another Tip Thanks to Dan - Making Debugging Easier'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109036441505714115</id><published>2004-07-20T16:00:00.000-07:00</published><updated>2004-07-20T16:00:15.063-07:00</updated><title type='text'>Two Quick .NET Tips for Smoother Team Development</title><content type='html'>While doing some work with &lt;a href="http://www.dotnetdan.com"&gt;Dan&lt;/a&gt; the other day, we both ended up showing each other a hidden .NET feature that, although they both had existed since .NET's release, the other party was unaware of.  Given the general usefulness of the features (especially in a team environment), I thought them worthy of a quick post.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;h3&gt;Nick's Tip - Config File Overrides&lt;/h3&gt;&lt;br /&gt;It is not uncommon in team situations for the config file to become a real source of contention, with developers checking in changes that are only relevant for their PC.  Also common is the the config file thrashing between test and staging server settings.  To avoid this problem, it is possible to locally override appSettings settings in the config file by using the file attribute of appSettings element.  The app.config or web.config file that lives in VSS would look something like:&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br&gt;&amp;lt;configuration&amp;gt;&lt;br&gt;&amp;nbsp;&amp;lt;appSettings &lt;bold&gt;file="development.config"&lt;/bold&gt;&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;lt;add key="DBSever" value="Staging Server Name Here" /&amp;gt;&lt;br&gt;	&amp;lt;/appSettings&amp;gt;&lt;br&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Locally, outside of source control, a developer can (but doesn't have to) create a file called development.config, and override appSettings settings as desired.  If this file doesn't exist, the main config file is used.  The development.config file would look like:&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&amp;lt;appSettings&amp;gt;&lt;br&gt;	&amp;nbsp;&amp;lt;add key="DBSever" value="Local Server Name Here" /&amp;gt;&lt;br&gt;&amp;lt;/appSettings&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;That's it for development.config - there is no other elements like configuration in the file.&lt;br&gt;&lt;br&gt;&lt;br /&gt;As an interesting side story, at one (unnamed) telco where I did some performance consulting earlier this year, the connection details to the real database ended up in VSS during the final stages of a deployment, and when contractor did a get latest and ran a cleansing script that is usually run against the test database, a heap of real data was deleted.  While most data was recovered from backups, a contractor ended up being sacked, but it ended up being the wrong guy, so the company had to pay out his contract.  The morale: pay attention to config file settings!&lt;br&gt;&lt;br /&gt;&lt;h3&gt;Dan's Tip - Setting Up Web Projects from VSS for the first time&lt;/h3&gt;&lt;br /&gt;Getting a web project from VSS and getting it running on a developer box that it was created on is one of the great challenges of the current Visual Studio.NET release.  Visual Studio will attempt to add the file to a folder in the c:\inetpub\wwwroot folder if you simply do a get latest and open a solution containing a web project.  This will upset relative references, and is pretty untidy, as you end up with two copies of the files on disk, and two folder where VSS is putting files.  To avoid this, do a get latest, map the web folder into ISS with the same vdir name as the original developer used, and then delete the files from the mapped folder.  The last stage is critical (and was the missing link that Dan provided) as, if the files do exist, VS will attempt to create a new vdir with an "_1" appended to it, and with the file going to c:\inetpub\wwwroot.  Thankfully, Whidbey fixes this problem completely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109036441505714115?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109036441505714115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109036441505714115' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109036441505714115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109036441505714115'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/07/two-quick-net-tips-for-smoother-team.html' title='Two Quick .NET Tips for Smoother Team Development'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-109014677135449921</id><published>2004-07-18T03:32:00.000-07:00</published><updated>2004-07-18T03:32:51.360-07:00</updated><title type='text'>MSDN Masked Edit Control C# Sample Doesn't Work Too Well</title><content type='html'>I recently used the &lt;a href="http://msdn.microsoft.com/vcsharp/downloads/samples/23samples/default.aspx"&gt;Masked Edit Control using .NET Framework Regular Expressions with C#&lt;/a&gt; sample as the base class for a Textbox control that automatically added data entry masking based on the data type of the column that it was databound to.  To be fair to the sample's author, the Masked Edit Control is advertised as only forming the "basis" of a masked edit control, but doesn't go into a lot of detail about what parts of the sample need further development to arrive at a commercial-strength offering.&lt;br&gt;&lt;br&gt;&lt;br /&gt;One part of the sample that is definitely lacking is the way the key press event arguments are used to construct a representation of the contents of the Textbox should the key press be allowed.  The sample assumes the user is entering characters in order, doesn't used delete or backspace, doesn't use the clipboard or undo operations, and doesn't highlight any text.  For the application I was developing, these assumption were too limiting.  and I wrote a small method that added handling for text highlighting, backspaces and insertion at any location in the textbox.  The method takes the original Text of the TextBox(this.Text), the new character (e.KeyCode), the caret position (this.SelectionStart), and the length of text selected (this.SelectionLength).&lt;br /&gt;&lt;br /&gt;protected string GetSting(string originalString, char newChar, int startSelection, int selectionLength)&lt;br&gt;{&lt;br&gt;&amp;nbsp;//TODO: undo, delete, cut, copy, paste&lt;br&gt;&amp;nbsp;if (Char.IsControl(newChar) &amp;&amp; newChar != '\b')&lt;br&gt;&amp;nbsp;&amp;nbsp;return originalString;  //give up - catch any errors on exit&lt;br&gt;&lt;br&gt;&amp;nbsp;if (newChar == '\b')  //backspace&lt;br&gt;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;if (selectionLength == 0)//lose char left of selection point (if there is any)&lt;br&gt;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (startSelection == 0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return originalString;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string s = originalString.Substring(0, startSelection - 1) +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;originalString.Substring(startSelection);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return s;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;else//lose selected chars&lt;br&gt;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;string s = originalString.Substring(0, startSelection) +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;originalString.Substring(startSelection + selectionLength);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return s;&lt;br&gt;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;}&lt;br&gt;&amp;nbsp;else&lt;br&gt;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;if (selectionLength == 0)//insert&lt;br&gt;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;string s = originalString.Substring(0, startSelection) +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newChar.ToString() + &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(startSelection &lt; originalString.Length ? originalString.Substring(startSelection) : "");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return s;&lt;br&gt;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;else//lose highlighted chars&lt;br&gt;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;string s = originalString.Substring(0, startSelection) +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newChar.ToString() + &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;originalString.Substring(startSelection + selectionLength);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return s;&lt;br&gt;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;}&lt;br&gt;}&lt;br&gt;&lt;br /&gt;&lt;br /&gt;The method doesn't handle delete (which doesn't raise a KeyPress event), and clipboard operations.  Moving to KeyUp/ KeyDown event handling would allow the full range of input operations to be caught, but is about two orders of magnitude more complex.  If you are using this sample, these enhancements will cover about 80% of the masked edit functionality ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-109014677135449921?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/109014677135449921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=109014677135449921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109014677135449921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/109014677135449921'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/07/msdn-masked-edit-control-c-sample.html' title='MSDN Masked Edit Control C# Sample Doesn&apos;t Work Too Well'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108940968380741485</id><published>2004-07-09T14:48:00.000-07:00</published><updated>2004-07-09T14:48:03.813-07:00</updated><title type='text'>An Exercise in Vanity</title><content type='html'>I finally saw my book on the shelves of a physical bookstore today.  I usually try to resist the urge to actively seek out book stores in an attempt to find my book, mainly because it is slightly disappointing to not find it.  Today I was buying Test Driven Development in Microsoft.NET, and, to my surprise, I found my book sitting prominently on the shelf.  Apress often doesn't get the decent run it deserves (especially compared to against Microsoft Press), but this Dymocks had a great range of Apress titles.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Well, now I can stop looking ....&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMAGE_00036.jpg" width="640" height="480" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108940968380741485?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108940968380741485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108940968380741485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108940968380741485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108940968380741485'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/07/exercise-in-vanity.html' title='An Exercise in Vanity'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108925444300598752</id><published>2004-07-07T19:40:00.000-07:00</published><updated>2004-07-07T19:54:58.333-07:00</updated><title type='text'>Running as a local admin - who cares?</title><content type='html'>There has been a fair bit of hype over the last couple of years about developers not running as local admins.  The push has been so successful (from a PR perspective at least) that not running as a local admin has been elevated into the same political correctness stratosphere as aplogising to indigenous populations, vegetarianism, and Michael Moore films.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Before tackling the issue head-on, it is worth stepping back a bit, and looking what achieving good security is all about.  Security is an exercise is risk management, and the end goal is all about beating the bad guys at a minimal cost.  Accepting some risk is OK - we do it all the time in our real life.  Not carrying all your credit cards is more secure, but nearly all of us do it because the risk of being mugged and someone making effective use of all those credit cards is low.  We could have our machine disconnected from the network except when we absolutely need a network resource, but this would be a pain, and the risk of being passively compromised on a corporate network is pretty low.&lt;br&gt;&lt;br&gt;&lt;br /&gt;As a developer, not running as a local admin has two aspects - avoiding risk, and writing better software that doesn't need to run as a local admin.  Both arguments don't cut it for me.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The risk aspect doesn't make a lot of sense.  Firewalls and virus scanners deal with the risk of viruses quite adequately for me.  I understand enough about what is and isn't risky behaviour to deal with it.  I actually think the reverse proposition gives you better security - when you are engaging in risky activity such as browsing less-than-reputable websites or installing untrusted shareware, use a VMWare or Virtual PC session that you throw out when your done (kudos to &lt;a href="http://www.cwsa.com"&gt;Mark Brindle&lt;/a&gt; for this practice.)  If you're a developer, and you can't work out what behaviour is risky, you're a mug - try a different game, or get some training.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The better software aspect has some merit to it, but if you don't fully understand what you're doing, it can give you a false sense of security.  Take event sources - you need to be a local admin to create these, but not to use them.  I've watched developers not running as local admin, and their first reaction to "funny" behaviour is to try the same action as a local admin.  In the event source creation scenario, the code will now work because the event source can be created, and when they switch back out of local admin, the code will now work.  I would argue that a developer's machine is so atypical of an average PC or server, trying to get a feel for security and configuration bugs that a user will experience in mostly a waste of time.  Not always, but mostly.&lt;br&gt;&lt;br&gt;&lt;br /&gt;If you have successfully moved to a lifestyle of a non-local admin developer, I admire your patience, and hope you find the trade-offs worthwhile.  Please continue as is - I'm not here to tell you to switch back.  But don't be too righteous pushing your views down the throats of others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108925444300598752?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108925444300598752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108925444300598752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108925444300598752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108925444300598752'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/07/running-as-local-admin-who-cares.html' title='Running as a local admin - who cares?'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108925402490970533</id><published>2004-07-07T19:33:00.000-07:00</published><updated>2004-07-07T19:33:44.913-07:00</updated><title type='text'>The Illustrious Leader gets Google Bombed</title><content type='html'>When it comes to humor, I'm pretty low brow.  Therefore, it comes as no surprise that I find the rather childish practice of Google bombing pretty funny, especially when it started as my joke.  So, this morning, when I tried &lt;a href="http://www.google.com/search?q=Illustrious+Leader"&gt;www.google.com/search?q=Illustrious+Leader&lt;/a&gt;, and saw &lt;a href="http://aspiring.blogs.com"&gt;who was as the top&lt;/a&gt;, I had quite a good laugh.  Thanks &lt;a href="http://notgartner.com/"&gt;Mitch&lt;/a&gt; and &lt;a href="http://211.30.37.34:8080/Blog"&gt;Mark&lt;/a&gt; for your part in elevating the &lt;a href="http://aspiring.blogs.com"&gt;Illustrious Leader&lt;/a&gt; to the top of the charts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108925402490970533?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108925402490970533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108925402490970533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108925402490970533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108925402490970533'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/07/illustrious-leader-gets-google-bombed.html' title='The Illustrious Leader gets Google Bombed'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108893837601613652</id><published>2004-07-04T03:52:00.000-07:00</published><updated>2004-07-04T03:52:56.020-07:00</updated><title type='text'>Smartphone Transport Times v0.1 Done!</title><content type='html'>To those people who emailed and aked me in person how the smartphone app was going (thanks to both of you for your interest), I am happy to announce that the first release is done.  Overall, I'm very happy with the finished product - it looks and acts like the other homescreen plug-ins that shipped with the phone, and I have found it useful in working out when the next train is.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;The plug-in looks like:&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/20040702a.gif" width="322" height="714" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Selecting the plug-in brings up a message box with more info:&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/20040702b.gif" width="321" height="713" alt="" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;The app ships with the timetable for trains between Martin Place and Cronulla, but it's pretty quick to enter your own public transport details (the file is installed to \Storage\Application Data\Home\tt.csv).  It took me less than 10 minutes to enter mine.  Make sure the data is is 24 hr format, and use the xx:xx format for all times - the parsing is pretty primative.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;The timetable file also includes data that nominates how long it takes to get to the transport pick-up spot.  If you are too late to catch up transport, but it hasn't left yet, the transport's time of deperature is shown in brackets, as can be seen in the home screen image.&lt;br /&gt;V2 will include support for setting alarms to get you to work or home at a partcilular time, as well as multiple timetable support.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Installation is a simple matter of downloading &lt;a href="http://www.dotnetperformance.com//blogimages/TptTime.HME" target="_blank"&gt;the HME file&lt;/a&gt;, executing it in a file exporer or browser application(using the sytax file://\temp\tpttime.hme, where \temp is the location of the file in this case).  Then select Start-&gt;Settings-&gt;Home, and adjust the Home screen layout option.  The application installs five home screen definitions - "Windows Default - TT", "Windows Basic - TT", "Windows Simple - TT", "Large Font - TT" and "Transport Time".  The first four are the standard layouts from my Smartphone2 with the Transport Time plug-in added beneath the time.  The last layout has the MRU bar, the carrier/date/ time plug-in, and the Transport Time plug-in.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;To add the Transport Time plug-in to another home screen layout file, add the following XML to its definition file (it will be called XXX.home.xml, where XXX will be something similar to the layout title shown in the Home screen manager):&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&amp;lt;plugin clsid="{0C0F7EDE-B0BB-46e0-82C7-27752D3A3126}" name="Transport Timetable" height="40" refresh="1"/&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Heights of 20 and 40 pixels are supported (I haven't tested anything else), and refresh determines how often the screen is updated (in minutes).  1 is the maximum, but if you are extremely sensitive to battery use, you can bump this up.  I've been running at 1 minute refreshes, and haven't noticed any decreased battery life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108893837601613652?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108893837601613652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108893837601613652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108893837601613652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108893837601613652'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/07/smartphone-transport-times-v01-done.html' title='Smartphone Transport Times v0.1 Done!'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108893829295308433</id><published>2004-07-04T03:51:00.000-07:00</published><updated>2004-07-05T03:04:52.020-07:00</updated><title type='text'>PermCalc is Cool</title><content type='html'>I've been playing around with Beta 1 of Visual Studio 2005, and am happy to report that PermCalc is working fine now.  To use it, bring up the security tab for a project, select "Enable ClickOnce Security Settings", select (Custom) as the Zone, and hit the "Calculate Permissions" button.  A full static analysis of the project and the code paths that it will call is performed (including dependant assemblies), and a grid will be filled that shows the required permissions for the application, as shown below.  A green tick indicates that permission is required, and clicking on the details tab will bring up the details for that permission.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/20040705a.gif" width="1018" height="577" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;If an application is defined as going out to a particular zone, and the permissions for that zone are less than the application requires, the developer is alerted to the problem:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/20040705b.gif" width="1021" height="555" alt="" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;PermCalc can also be used from the command line, and the description it outputs to the console reads: "PermCalc is a tool that estimates the permissions required by assemblies or public entry-points.  If the "-Library" switch is not used, it estimates the permissions that must be granted to each assembly in an application in order to execute with no security exceptions.  If the "-Library" switch is used, it estimates the permissions that must be granted to the caller of each public entry-point.  (Note that this may not include all the permissions that the library itself must be granted in order to execute.)"&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;The output generated by the tool is an permission request set in the form of an XML file.  An example file is shown below:&lt;br&gt;&lt;br&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;lt;trustInfo xmlns="urn:schemas-microsoft-com:asm.v2" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;security&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;applicationRequestMinimum&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom"&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;IPermission class="System.Security.Permissions.FileDialogPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Access="Open" /&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;IPermission class="System.Security.Permissions.IsolatedStorageFilePermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Allowed="DomainIsolationByUser" UserQuota="10240" /&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, Execution" /&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Window="SafeTopLevelWindows" Clipboard="OwnClipboard" /&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;IPermission class="System.Windows.Forms.WebBrowserPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Level="Restricted" /&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;IPermission class="System.Drawing.Printing.PrintingPermission, System.Drawing, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" version="1" Level="SafePrinting" /&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/PermissionSet&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;defaultAssemblyRequest permissionSetReference="Custom" /&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/applicationRequestMinimum&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/security&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;lt;/trustInfo&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108893829295308433?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108893829295308433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108893829295308433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108893829295308433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108893829295308433'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/07/permcalc-is-cool.html' title='PermCalc is Cool'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108847492757373976</id><published>2004-06-28T19:08:00.000-07:00</published><updated>2004-06-28T19:08:47.580-07:00</updated><title type='text'>The VB community doth protest too much, methinks.</title><content type='html'>I was reading &lt;a href="http://msmvps.com/bill/archive/2004/06/27/9047.aspx"&gt;Bill McCarthy's attack on C#&lt;/a&gt; on the weekend, and &lt;a href="http://notgartner.com/posts/360.aspx"&gt;agree with Mitch&lt;/a&gt; that it makes little sense.  I sometimes find the VB community fairly strange.  They are so defensive about their language, you sometime almost wonder if they know that the earth isn't really flat, and that their language is not superior to any other .NET language.  I'm not here to stick up for C# - I think C++ (in its 2005 incarnation) is clearly the best .NET language, and STL programming is more like a form of art than coding, but I happily admit I'm in the minority, and the learning curve for C++ is too high for most programmers.&lt;br&gt;&lt;br&gt;&lt;br /&gt;To take Bill to task of some specifics, he says "The C# style (of closing code blocks with curly braces) is very much like those who declare variables as a,b,c,d etc rather than having to type a descriptive, informative name. And we all know that is a bad practice, it&amp;rsquo;s a lazy practice."  So Bill's tone is pretty clear off the bat - its not a preference thing, VB is clearly superior, and C# is inferior.  So why does VB use "_" to continue a line.  Why not "Statement Continued On Next Line".  I've never seen a literature author use "_" to continue a statement on the next line, so clearly lazy worst practice is OK here.  And why the lazy "End Sub"?  "End Sub" is what happened to the Kursk.  Oh, you meant "End Subroutine"?  Lazy you.  And its the same with "ByRef", "Dim", "Enum", "Xor", "Const", "CType" and others?  My goodness.  My grandmother, who is a human that can read, couldn't make sense of any of these.  But its more readable to you as a VB developer?  Surprise, surprise, everyone's language of choice is more readable to them.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The overall point that Bill is missing here is that terse syntax is perfectly fine and readable if it is common and has a well defined meaning.  Everyone who can read English understands that the period character ends a sentence.  Hieroglyphics isn't understandable by either C# or VB programmers, but it is still understandable if you could work out its syntax rules.  All languages have a degree of terseness, including VB.&lt;br&gt;&lt;br&gt;&lt;br /&gt;Sorry Bill, that cold Victorian weather is getting to you a little, though I still love ya and look forward to a cold glass of something together at Tech Ed.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108847492757373976?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108847492757373976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108847492757373976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108847492757373976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108847492757373976'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/vb-community-doth-protest-too-much.html' title='The VB community doth protest too much, methinks.'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108839584304764838</id><published>2004-06-27T21:10:00.000-07:00</published><updated>2004-06-27T21:10:43.053-07:00</updated><title type='text'>What I Actually Asked Bill</title><content type='html'>Firstly,  thanks to everyone who emailed and left comments regarding the Bill G question.  In the end, I liked the theme of Rodney's "how many hours a night do you sleep" question, and decided to ask a question more about Bill the man rather than Microsoft.  After all, an entire industry has grown up around childish Bill Gates spoofs and take-offs, the real person is dwarfed at times by his own caricature.  So, the question I asked was, "What is a typical day like in your life, and if there is no such thing as typical, what would be an ideal day in terms of time allocation".  Here is the transcribed response:&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Well, now that Steve Balmer has taken over as CEO, there is a lot of business-review type things that he is able to do and free up my time to work with products.  I spend about a quarter of my time out of the office on weeks like this one when I'm out meeting with customers, hearing what they like, what they don't like, and that's valuable for me.  I go back with lots of notes and lots of ideas.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;I spend about 50% of my time meeting with product group people, and the really great thing for me is meeting more and more with them at the very beginning of the project - before they overlap something else, before they take an approach that isn't that great.&lt;br /&gt;I used to do the reviews, when they where like half or two-thirds of the way through, and then its really tough to say "Nope, that was a waste of time what you've done up until then".  So, with just a little bit extra dialog, particularly up front, makes a huge amount of difference.&lt;br&gt;&lt;br /&gt;I still have about 25% of my time that is business reviews, board meetings, various public-related activities that are important to do, but the thing I like the most, and that dominates my schedule, is sitting down with the product teams.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Not quite the hours of sleep per night, but interesting nevertheless.  I'd like to think &lt;a href="http://blogs.msdn.com/frankarr/"&gt;Frank&lt;/a&gt; and Chuck for getting me the invite, my iPAQ and memory card for recording the event without a single hitch, and my Canon A80 for doing a responsible job getting a snap of the event.  Still, if Cannon got their act together with 1D Mk II shipments, the photos would be much better :).&lt;br&gt;&lt;br /&gt;And a big thanks for Bill for taking time out of his busy schedule for having breakfast with lowly folks like user group presidents and MVPs.&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/IMG_1219_1.jpg" width="415" height="386" alt="" border="0"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108839584304764838?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108839584304764838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108839584304764838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108839584304764838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108839584304764838'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/what-i-actually-asked-bill.html' title='What I Actually Asked Bill'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108780997049572799</id><published>2004-06-21T02:26:00.000-07:00</published><updated>2004-06-21T02:26:10.500-07:00</updated><title type='text'>What would you ask Bill Gates?</title><content type='html'>I've scored an invite to the Bill Gates breakfast to be held in Sydney next Monday (thanks Chuck and &lt;a href="http://blogs.msdn.com/frankarr/"&gt;Frank&lt;/a&gt;).  I'm covering the event for &lt;a href="http://www.developer.net.au"&gt;Australian Developer&lt;/a&gt;, and understand that I'll probably get a chance to ask Bill a question.  So, my question is, what would you ask Bill if you had the chance to ask him one question?  I'll make my best attempt to deliver the best question at Monday's breakfast.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108780997049572799?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108780997049572799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108780997049572799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108780997049572799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108780997049572799'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/what-would-you-ask-bill-gates.html' title='What would you ask Bill Gates?'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108780957819238931</id><published>2004-06-21T02:19:00.000-07:00</published><updated>2004-06-21T02:25:19.976-07:00</updated><title type='text'>Winter Solstice Sunrise</title><content type='html'>Few quick pics ... Full gallery on my &lt;a href="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/index.html"&gt;website&lt;/a&gt;.&lt;br /&gt;&lt;table&gt; &lt;br /&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_0973.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_0985.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_0990.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_0993.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_0997.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1007.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1010.JPG" alt="" border="0"&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1016.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1021.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1026.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1036.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1048.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1051.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1054.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1055.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1060.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1114.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1123.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1123.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1132.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1133.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1143.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1148.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1155.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1161.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1165.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1168.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1169.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1172.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1177.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1201.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.dotnetperformance.com/Sunrise%20Winter%20Solstice%202004/thumbs/IMG_1205.JPG" alt="" border="0"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108780957819238931?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108780957819238931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108780957819238931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108780957819238931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108780957819238931'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/winter-solstice-sunrise.html' title='Winter Solstice Sunrise'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108772495056318100</id><published>2004-06-20T02:49:00.000-07:00</published><updated>2004-06-20T02:55:44.526-07:00</updated><title type='text'>Perfect mid-winters day in Cronulla</title><content type='html'>Tomorrow being the winter solstice (in the Southern Hemisphere), I thought it appropriate to demonstrate the harshness of a Sydney winter to those enjoying summer.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The cute little person is my daughter and the cute big person is my wife.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/DSCN1190_1.JPG" width="460" height="614" alt="" border="0"&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/DSCN1182_2.JPG" width="614" height="460" alt="" border="0"&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/DSCN1171_3.JPG" width="614" height="460" alt="" border="0"&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com//blogimages/DSCN1169_4.JPG" width="460" height="614" alt="" border="0"&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108772495056318100?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108772495056318100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108772495056318100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108772495056318100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108772495056318100'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/perfect-mid-winters-day-in-cronulla.html' title='Perfect mid-winters day in Cronulla'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108755278935325954</id><published>2004-06-18T02:59:00.000-07:00</published><updated>2004-06-18T02:59:49.356-07:00</updated><title type='text'>Emails with large attachments and McAfee Virus Scan 8</title><content type='html'>I have been having a problem sending emails with large attachments for a couple of months, and thought it was some problem with my ISP.  I was talking to the &lt;a href="http://aspiring.blogs.com"&gt;Illustrious Leader&lt;/a&gt; the other day, and he said the same problem started for him when he installed McAfee Virus Scan 8.  For some reason, the option to turn off email scanning in my install of McAfee is checked and disabled, so I can't simply turn these feature off.  The best I can do is kill the process that seems responsible for this mess (McVSEscn.exe), after which large emails go through fine.&lt;br&gt;&lt;br&gt;&lt;br /&gt;The worst part of this bug is that the email does actually go through with McVSEscn around, but Outlook 2003 is told that the email hasn't gone through, and tries to resend it.  I have been in the embarrassing situation where I sent an editor I was working with the same article, code and diagrams (~3 MB) nine times.  Time to get this one fixed McAfee, and while your at, stop sponsoring those stinking Raiders.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108755278935325954?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108755278935325954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108755278935325954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108755278935325954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108755278935325954'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/emails-with-large-attachments-and.html' title='Emails with large attachments and McAfee Virus Scan 8'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108755200382240525</id><published>2004-06-18T02:46:00.000-07:00</published><updated>2004-06-18T02:46:43.826-07:00</updated><title type='text'>PDC DVDs Arrived Today (and they were free)</title><content type='html'>Based on the advice of our faithful Australian Goup Manager of Developer Platform Evangelism (hell of a title) &lt;a href="http://blogs.msdn.com/frankarr/"&gt;Frank Arrigo&lt;/a&gt;, I signed my company for the &lt;a href="http://members.microsoft.com/partner/competency/isvcomp/longhorn.aspx"&gt;Longhorn Readiness Program&lt;/a&gt; on 30 May.  The program includes the full DVD set from PDC 03 *for free*, and despite the advised 4 - 6 week delivery time, mine arrived today!  Thanks Frank and thanks Longhorn Readiness Program.&lt;br&gt;&lt;br&gt;&lt;br /&gt;I intend to use Windows Media Encoder to capture entire presentations onto the one file, and watch them on my Smartphone.  Standing at a railway station (that was used as the station in Matrix Revolutiosn) waiting for a train watching the PDC on a Smartphone with a Bluetooth headset.  Ultra-nerd or ultra-cool?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108755200382240525?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108755200382240525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108755200382240525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108755200382240525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108755200382240525'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/pdc-dvds-arrived-today-and-they-were.html' title='PDC DVDs Arrived Today (and they were free)'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108694645308001690</id><published>2004-06-11T02:34:00.000-07:00</published><updated>2004-06-11T02:34:13.086-07:00</updated><title type='text'>Smartphone App Week 2</title><content type='html'>I haven't had a lot of time for the Smartphone application this week, and have been doing an article for &lt;a href="http://www.developer.net.au"&gt;Australian Developer&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com"&gt;MSDN&lt;/a&gt; on the winner of the &lt;a href="http://www.microsoft.com/australia/msdn/academic/prog_comp2004_results.aspx"&gt;Australian Leg&lt;/a&gt; of the &lt;a href="http://www.imaginecup.com"&gt;Imagine Cup competition&lt;/a&gt;.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;I've sorted out all the complexities related to getting the plug-in installed in the device, and have my own plug-in now working, Now all that's left to do in the business logic ....&lt;br /&gt;&lt;br&gt;&lt;br /&gt;The current anemic UI looks is:&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com/blogimages/20040611a.gif" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://www.dotnetperformance.com/blogimages/20040611b.gif" border="0"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;I'd prefer to do the next trains feature as a tool-tip, but at the moment it's simply a message box activated by clicking on the plug-in.  &lt;br /&gt;&lt;br&gt;&lt;br /&gt;The plug-in will ship with XML files that allow will allow the plug-in to be included in all four of the standard homescreen layouts (Windows Basic, Windows Default, Windows Simple and Large Font).&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108694645308001690?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108694645308001690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108694645308001690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108694645308001690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108694645308001690'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/smartphone-app-week-2.html' title='Smartphone App Week 2'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108682224196335355</id><published>2004-06-09T16:04:00.000-07:00</published><updated>2004-06-09T16:04:01.970-07:00</updated><title type='text'>Another Anti-Extreme Programming Rant</title><content type='html'>Let me preface this rant by saying that I am more of a system-level programmer that a application developer or project manager (and hence don't spend a lot of time thinking about development methodologies), and I can't book meeting rooms or schedule meetings in Outlook, so clearly I am no Enterprise Architect.  These are the simple observations of a bald-headed poorly-dressed C++ programmer from Cronulla.&lt;br /&gt;&lt;br /&gt;Before laying into XP, it is important to recognize that it has introduced or formalized a number of great practices like continuous integration and unit testing.  So, it is important not to throw the baby out with the bathwater.&lt;br /&gt;&lt;br /&gt;I think XP is fundamentally floored in two key areas.  The key weakness, and in my view a fatal floor, is the notion of a caring, interactive customer that helps guide a project.  In most projects, this is a pure fairy tale.  Most customers don't have the interest, energy or time to become intimately involved in a software project.  They won't work with developer to tease out and flesh out the various stories that need to be implemented.  And if a really eager customer does exist, it can be worse.  These eager customers are a source of constant feature-creep, and even with all of XP's continuous integration efforts, there still needs to be a point where the code is frozen and functionality testing, help documentation, installation testing across target operating systems, and all those other mundane post-development activities takes place.&lt;br /&gt;&lt;br /&gt;My second gripe, and this isn't a fatal floor, is that I find the dogmatic application of XP development with common desks, enforced work hours and compulsorary team programming to be a commune style situation, and like all commune style conditions, I think it is an attempt to work against human nature.  I want to own a particular section of an application, and I want to take pride when it is done well, I don't want someone looking over my shoulder when I type, I want to customize the keystroke-combinations in my development environemnt, I want to take lunch when I want, I want to go out for a surf-ski on Wednesday morning and get to work at 8.45, not 8.30.  The extreme XP style of coding looks similar to the Khmer Rouge ideal of happy peasants all working in an agrian paradise with the intellectuals (in this case, project managers and architects) designated superflous, and removed from the equation.  I am not trying to link XP to Pol Pots extremes (that would be a strectch even for me), and are simply comparing it to the Khmer Rouge ideology here, not its horrendous implementation.&lt;br /&gt;&lt;br /&gt;I find RUP, even though it isn't a prefect process (none are) to be the best way of getting quality software done in a timely manner.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108682224196335355?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108682224196335355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108682224196335355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108682224196335355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108682224196335355'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/another-anti-extreme-programming-rant.html' title='Another Anti-Extreme Programming Rant'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108660428649589331</id><published>2004-06-07T03:31:00.000-07:00</published><updated>2004-06-07T03:31:26.500-07:00</updated><title type='text'>Microsoft Security &amp; Management Summit - Thanks Aus Dev Evangelism team</title><content type='html'>I attended a few sessions today at the Microsoft Security &amp; Management Summit held at Darling Harbour.  The event had some great sessions, and, as expected, ANOTHER session on understanding XP SP2 and its implication for developers (don't say you weren't warned).  Mitch's comment &lt;a href="http://notgartner.com/posts/322.aspx"&gt;last week&lt;/a&gt; about feeling like you know everyone at an event resonated strongly with me, and I bumped into a heap of people from the many companies I have worked with and for over the last decade or so doing software development in Sydney.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;I was talking to a friend from a company where I worked on the vector graphics project, and he asked about getting more involved in the IT community.  Apart from attending the &lt;a href="http://www.sdnug.org/"&gt;user group&lt;/a&gt; I help to run, I mentioned that it was worthwhile getting to know the local MSDN staff.  Thinking about what I had said, it made me realize the massive leaps that Microsoft has made in terms of interacting with the developer community at a meaningful level.  While I can only speak authoritatively about Sydney, I get the sense that this is not an local phenomenon, and there is a real sense of community and collaboration that seems to have originated about the same time that .NET came on the scene.&lt;br /&gt;&lt;br /&gt;A big congrats to Frank, Chuck, Andrew, Caroline, Tyson, Finula, Norbert, Nick and Matty (both gone OS but not forgotten) and all the crew from the Australian Developer Evangelism team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108660428649589331?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108660428649589331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108660428649589331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108660428649589331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108660428649589331'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/microsoft-security-management-summit.html' title='Microsoft Security &amp; Management Summit - Thanks Aus Dev Evangelism team'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108650051274511293</id><published>2004-06-05T22:41:00.000-07:00</published><updated>2004-06-05T22:41:52.753-07:00</updated><title type='text'>Maximizing .NET Performance v2</title><content type='html'>I'm beginning to play with the chapter list for v2 of Maximizing .NET Performance, which I'm planning to do some time in the Whidbey timeframe.  The areas I've identified for improvement or addition are:&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;li&gt;Garbage collection&lt;br /&gt;&lt;li&gt;Compact Framework&lt;br /&gt;&lt;li&gt;Generics&lt;br /&gt;&lt;li&gt;ADO.NET, XML and Yukon&lt;br /&gt;&lt;li&gt;Burton Tools related to performance&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;Item 4 will be hard to cover in any type of depth, but all the other are definitely on the cards.  I don't plan to cover Windows Forms or ASP.NET - they deserve a full book on their own. &lt;br /&gt;&lt;br&gt;I'm open for suggestions of any other areas that need inclusion or improvement.  Leave a comment, or email me directly at nickw at dotnetperformance dot com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108650051274511293?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108650051274511293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108650051274511293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108650051274511293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108650051274511293'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/maximizing-net-performance-v2.html' title='Maximizing .NET Performance v2'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108639735673542303</id><published>2004-06-04T18:02:00.000-07:00</published><updated>2004-06-04T18:02:36.740-07:00</updated><title type='text'>Week One of my Smartphone Project</title><content type='html'>I'm doing a ~2 month gig in Sydney's CBD at the moment, which means that I need to catch a train to work rather than the car commute I've been doing the last 12 months.  One of the things I've found frustrating is working out the time that I need to get up to leave home to catch a train to get on site at a particular time (and the reverse process of an evening).  Rather than digging through a tatty old paper timetable and doing some mental arithmetic, I've decided to do a home screen plug-in for the Smartphone that can do all this for me.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;My first week doing this plug-in has been pretty frustrating, and I've made little head-way.  Compared to Windows Forms or ASP.NET development, embedded development is a lot fiddlier, even with the aid of emulators.  I spent most of the week getting the Embedded VC++ 4.0 Homescreen plug-in sample working.  The documentation for the sample nominated the use of a tool which doesn't actually ship with the SDK called cestart.exe, and this caused me a bit of drama.  In the end, I finally installed the CAB file with the plug-in by "running" it in IE on the device (using a URL of "file://\storage\homescreen.cab").&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Anyway, the project is finally up and going, and the current feature list is:&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Multiple timetable support. (may slip to V2)&lt;br /&gt;&lt;br&gt;&lt;br /&gt;"Get me up, out of the door, to work and home on time" feature.  (with thanks to &lt;a href="http://www.dotnetdan.com"&gt;Dan Green&lt;/a&gt; for suggesting it.)&lt;br /&gt;-Alarm to wake me up.&lt;br /&gt;-Beep to get me out the door.&lt;br /&gt;Required device interaction: Configurable notification (beep, alarm, call), Alarm and sound API.&lt;br /&gt;I would nominate I want to be at work for an 8.45 meeting, and the phone would do the rest.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Next trains tooltip. (i.e. if you are "hovering" over the next train time, the time for the next couple of train after that should show up in a tooltip.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Missed train coloring (i.e. if it takes me 8 minutes to get to the station, and there is a train in 4 minutes, it should be visible but colored red to indicate I won't make it.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;The feature list isn't complete, and I'm still taking suggestions.... Feel free to leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108639735673542303?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108639735673542303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108639735673542303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108639735673542303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108639735673542303'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/week-one-of-my-smartphone-project.html' title='Week One of my Smartphone Project'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108608978979922409</id><published>2004-06-01T04:36:00.000-07:00</published><updated>2004-06-01T04:36:29.810-07:00</updated><title type='text'>New articles and presentations posted at www.DotNetPerformance.com</title><content type='html'>I've updated my web site to include some of the articles and presentations I've done over the last 6 months.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;New articles&lt;/h3&gt;&lt;br /&gt;&lt;a href="http://www.dotnetperformance.com/articleitem.aspx?id=27"&gt;Authorization Manager and .NET&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotnetperformance.com/articleitem.aspx?id=28"&gt;Database Security in the Real World: Part One&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotnetperformance.com/articleitem.aspx?id=29"&gt;Database Security in the Real World: Part Two&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotnetperformance.com/articleitem.aspx?id=30"&gt;Microsoft Enterprise Instrumentation Framework&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotnetperformance.com/articleitem.aspx?id=31"&gt;Security Enhancements in the Whidbey Release of .NET Framework&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotnetperformance.com/articleitem.aspx?id=32"&gt;Managed Code in SQL Server Yukon: A Real Big Deal?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotnetperformance.com/articleitem.aspx?id=33"&gt;SQL Server 2000 Reporting Services - An Overview&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;New presentations&lt;/h3&gt;&lt;br /&gt;&lt;a href="http://www.dotnetperformance.com/articleitem.aspx?id=143"&gt;Windows XP Service Pack 2&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108608978979922409?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108608978979922409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108608978979922409' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108608978979922409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108608978979922409'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/06/new-articles-and-presentations-posted.html' title='New articles and presentations posted at www.DotNetPerformance.com'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108580390310637882</id><published>2004-05-28T21:11:00.000-07:00</published><updated>2004-05-28T21:11:43.113-07:00</updated><title type='text'>A Great Smartphone "Getting Started" Guide (and it's free!!)</title><content type='html'>I recently got a new &lt;a href="http://www.carrierdevices.com.au/products.php?id=6"&gt;i-mate&amp;trade; Smartphone2&lt;/a&gt; to replace my reliable but aging Nokia 5110.  I haven't done a lot of embedded development for Windows CE yet, so even with all the wizards and options in Visual Studio.NET, I wasn't 100% sure where to start.  Luckily, I remembered Dr. Neil Roodyn's &lt;a href="http://www.smartphone.roodyn.com"&gt;Smartphone site&lt;/a&gt;, and was very impressed with the quality of his "Getting Started with Smartphone Development" e-book available for download from his site.&lt;br&gt;&lt;br /&gt;While Apress has a great range of books on &lt;a href="http://www.apress.com/category.html?nID=35"&gt;embedded development&lt;/a&gt;, I wanted a simple and quick get-me-going reference, and this one hit the spot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108580390310637882?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108580390310637882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108580390310637882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108580390310637882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108580390310637882'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/05/great-smartphone-getting-started-guide.html' title='A Great Smartphone &quot;Getting Started&quot; Guide (and it&apos;s free!!)'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108565684860465337</id><published>2004-05-27T04:20:00.000-07:00</published><updated>2004-05-27T04:20:48.616-07:00</updated><title type='text'>More On The New CLR Hosting Interface</title><content type='html'>In my previous "Five things I love about VS 2005 (from a performance perspective)" post, I briefly mentioned some of the new hosting interfaces in .NET 2.0.  I've been digging into these interfaces a bit deeper for a piece I'm doing on Visual Studio 2005 that the Australian .NET MVPs are producing under the inspiration and guidance of &lt;a href="http://www.autumncare.com.au"&gt;Nick Randolph&lt;/a&gt;.  Some of the more interesting interfaces that have been added include:&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;IHostMemoryManager&lt;/h3&gt;&lt;br /&gt;This interface, when implemented by the host, allows the host to control memory allocation requests.  In .NET 1.1, memory requests are handled internally by the CLR, which calls directly into the Window's VirtualAlloc function when more heap space is required.  The IGCHostControl interface that exists in .NET 1.x allowed the host to deny the CLR requests for memory allocation above a certain limit (see &lt;a href="http://www.apress.com/book/bookDisplay.html?bID=217"&gt;my book&lt;/a&gt; for a more detailed disucssion of this, including a sample implementation), but IGCHostControl  has no ability to interact in a fine-grained manner with the CLR to govern memory allocation.  The full interface definition for IHostMemoryManager  is:&lt;br&gt;&lt;br /&gt;interface IHostMemoryManager : IUnknown&lt;br /&gt;{&lt;br /&gt;    HRESULT CreateMalloc([in] BOOL fThreadSafe,&lt;br /&gt;                         [out] IHostMalloc **ppMalloc); &lt;br&gt;   &lt;br /&gt;    &lt;br /&gt;    HRESULT VirtualAlloc([in] void*       pAddress,&lt;br /&gt;                         [in] SIZE_T      dwSize,&lt;br /&gt;                         [in] DWORD       flAllocationType,&lt;br /&gt;                         [in] DWORD       flProtect,&lt;br /&gt;                         [in] EMemoryCriticalLevel eCriticalLevel,&lt;br /&gt;                         [out] void**     ppMem);&lt;br&gt;&lt;br /&gt;    &lt;br /&gt;    HRESULT VirtualFree([in] LPVOID      lpAddress,&lt;br /&gt;                        [in] SIZE_T      dwSize,&lt;br /&gt;                        [in] DWORD       dwFreeType);&lt;br&gt;&lt;br /&gt;    &lt;br /&gt;    HRESULT VirtualQuery([in] void *     lpAddress,&lt;br /&gt;                         [out] void*     lpBuffer,&lt;br /&gt;                         [in] SIZE_T     dwLength,&lt;br /&gt;                         [out] SIZE_T *  pResult);&lt;br&gt;&lt;br /&gt;    &lt;br /&gt;    HRESULT VirtualProtect([in] void *       lpAddress,&lt;br /&gt;                           [in] SIZE_T       dwSize,&lt;br /&gt;                           [in] DWORD        flNewProtect,&lt;br /&gt;                           [out] DWORD *     pflOldProtect);&lt;br&gt;&lt;br /&gt;    &lt;br /&gt;    HRESULT GetMemoryLoad([out] DWORD* pMemoryLoad,&lt;br /&gt;                          [out] SIZE_T *pAvailableBytes);&lt;br&gt;&lt;br /&gt;    &lt;br /&gt;    HRESULT RegisterMemoryNotificationCallback([in] ICLRMemoryNotificationCallback * pCallback);&lt;br&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;For those familar with IDL, it is quite apparent the level of fine-grained control that it offers.  I haven't build a sample host that implements this interface yet (stay tuned for this ...), but I'd imagine IHostControl.SetAppDomainManager would be the way to hook this interface up.  &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;ICorSvcWorker&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;ICorSvcWorker, shown in full below, allows the CLR host to interact with the native image cache.  As .NET matures and native images start to become significantly more optimized than their JIT equivalent, native images will become a bigger deal, and this interfaces allows the host much simpler control over native images compared to enumerating modules loaded in memory or using the poorly documented Zap APIs.&lt;br /&gt;&lt;br /&gt;typedef enum&lt;br&gt;&lt;br /&gt;    {&lt;br /&gt;        ScenarioDefault              = 0x0,  // No special scenario flags&lt;br&gt;&lt;br /&gt;        ScenarioAll                  = 0x1,  // All scenarios (used to indicate all configurations)&lt;br&gt;&lt;br /&gt;        ScenarioDebug                = 0x2,  // Debuggable code&lt;br&gt;&lt;br /&gt;        ScenarioDebugOptimize        = 0x4,  // Optimized code with debug infomration&lt;br&gt;&lt;br /&gt;        ScenarioProfile              = 0x8,  // Used for profiling (enter/leave notifications)&lt;br&gt;&lt;br /&gt;        ScenarioShared               = 0x10, // Shared code&lt;br&gt;&lt;br /&gt;        ScenarioTuningDataCollection = 0x20, // Used to gather IBC data&lt;br&gt;&lt;br /&gt;        ScenarioLegacy               = 0x40  // Follow hard dependencies only&lt;br&gt;&lt;br /&gt;    } OptimizationScenario;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;interface ICorSvcWorker : IUnknown&lt;br&gt;&lt;br /&gt;    {&lt;br /&gt;        HRESULT OptimizeAssembly(&lt;br /&gt;            [in] BSTR pAssemblyName, &lt;br /&gt;            [in] BSTR pApplicationName, &lt;br /&gt;            [in] OptimizationScenario scenario,&lt;br /&gt;            [in] SAFEARRAY(BSTR) loadAlwaysList,&lt;br /&gt;            [in] SAFEARRAY(BSTR) loadSometimesList,&lt;br /&gt;            [in] SAFEARRAY(BSTR) loadNeverList,&lt;br /&gt;            //HostConfig hostConfig,&lt;br /&gt;            [out] BSTR *pNativeImageIdentity&lt;br /&gt;            );&lt;br&gt;&lt;br /&gt;&lt;br /&gt;        HRESULT DeleteNativeImage(&lt;br /&gt;            [in] BSTR pAssemblyName,&lt;br /&gt;            [in] BSTR pNativeImage&lt;br /&gt;            );&lt;br&gt;&lt;br /&gt;    &lt;br /&gt;        HRESULT DisplayNativeImages(&lt;br /&gt;            [in] BSTR pAssemblyName&lt;br /&gt;            );&lt;br&gt;&lt;br /&gt;&lt;br /&gt;        HRESULT GetCorSvcDependencies(&lt;br /&gt;            [in] BSTR pAssemblyName,&lt;br /&gt;            [out] ICorSvcDependencies **pCorSvcDependencies&lt;br /&gt;            ); &lt;br&gt;&lt;br /&gt;&lt;br /&gt;        HRESULT Stop(&lt;br /&gt;            );&lt;br&gt;&lt;br /&gt;    }&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108565684860465337?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108565684860465337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108565684860465337' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108565684860465337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108565684860465337'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/05/more-on-new-clr-hosting-interface.html' title='More On The New CLR Hosting Interface'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108521491157382906</id><published>2004-05-22T01:35:00.000-07:00</published><updated>2004-05-22T01:35:11.576-07:00</updated><title type='text'>Instrumentation - My Constant Saviour</title><content type='html'>When I'm doing a development project, it is typically a 3 - 6 month engagement doing a custom application for some specialized task.  The last one of these I did (which I finished last week) was a tool that converted vector images to raster images and also processed and extracted some specific data out of the vector images.  After trialling a number of components, including Lead Tools (which performed quite badly), CorelDRAW 12 was settled upon.  CorelDRAW has a rich automation interface, handled all the vector formats required (SVG and CGM up to v5), had great raster image production quality, and was pretty cheap (~AUS750).&lt;br /&gt;&lt;br /&gt;As anyone who has done any automation will tell you, lots of things can go wrong when you are talking to another process.  Anticipating this, I sprinkled my code with a plethora of Trace.WriteLine statements, about one for every 5 lines of code, and at least one per exception handler.  On my last day on the project, the inevitable failure-that-only-occurs-in-production error occurred during a final test run, and the image conversion process stopped working.  Everything appeared fine, but images where never being moved into the completed folder.  Instead of panicking, or trying to get a debugger attached or installed on the production machine, I simply got the client to fire up &lt;a href="http://www.sysinternals.com/ntw2k/freeware/debugview.shtml"&gt;DebugView&lt;/a&gt; off a USB memory stick, and we could immediately see that the line that wrote a log record to the database was failing due to some SQL Server log file issue.  We changed the connection string in the configuration file, and did the test run with logging to a separate database.&lt;br /&gt;&lt;br /&gt;End result: I got out of there on time, and the client was happy.&lt;br /&gt;&lt;br /&gt;The morale of the story is use the best instrumentation strategy you can, and never trust a client or manager who says instrumentation isn't need.  Microsoft's Enterprise Instrumentation Framework is great for server-side apps, but has a very weak deployment story that makes it unsuitable for client side applications.  &lt;a href="http://logging.apache.org/log4net"&gt;Log4NET&lt;/a&gt; looks good, but I haven't used it in a production app.  More and more, I've grown tired of managers scratching themselves trying to decide between the various options, and I've stuck with the reliable, always-available Trace.WriteLine.  With TraceListener-derived types, Trace.WriteLine scales from in-debugger output right up to enterprise solutions like Microsoft Operations Manager (MOM).&lt;br /&gt;&lt;br /&gt;I owe many finish-the-project-on-time moments to this one method.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108521491157382906?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108521491157382906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108521491157382906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108521491157382906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108521491157382906'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/05/instrumentation-my-constant-saviour.html' title='Instrumentation - My Constant Saviour'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108475226031962230</id><published>2004-05-16T17:04:00.000-07:00</published><updated>2004-05-16T17:04:20.356-07:00</updated><title type='text'>Windows XP Service Pack 2 - Get on top of it now!</title><content type='html'>Last week I did a presentation for the &lt;a href="http://www.sdnug.org"&gt;.NET user group&lt;/a&gt; that I run with &lt;a href="http://www.dotnetdan.com"&gt;Dan Green&lt;/a&gt; in Sydney.  I was surprised by the unhappiness of a lot of the attendees about the SP2, and the overall consensus of those that spoke up was that SP2 wasn't a Good Thing.  Maybe those that loved SP2 were being real quiet, but the criticisms of the anti-SP2 crowd are certainly not without merit, so I though it would be worth addressing them.  The main criticisms were:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Too much code will be broken.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Calling this upgrade a "Service Pack" is misleading.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;No one told me Windows was going to change like this.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Its too big.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;My reaction/ response was:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Start testing your apps right now to avoid this.  The company where I'm currently consulting isn't the most cutting-edge development house (they still ship some 16-bit apps), but we've gone through SP2 testing there.  Is most cases, changing Windows Firewall settings will be sufficient to keep apps working correctly, and as these settings can be pushed out to all the Windows boxes in an enterprise using Group Policy, those who invest is some preparation will be fine.  For home users, most firewall related breakages can be corrected by the user responding in the affirmative to the prompt that comes up from the firewall when an app starts or opens a port&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This is true to some extent, but many network admins (and particularly those that don't keep up with their profession and don't know about SP2) won't go out and install an "Option Pack" or "Security Upgrade".  Calling it SP2 is more likely to get the software out onto more boxes, which is ultimately a good thing&lt;/li&gt;&lt;br /&gt;&lt;li&gt;That's why I'm writing this, and that's why every Microsoft conference I've been to over the last six months has covered SP2.  I think Microsoft are also considering some type of campaign to improve SP2 awareness, and for developers, keeping up with things like this is your job.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I would expect SP2 to be on every CD that ships on a magazine cover in the free world.  280MB is too big for those on dial-up, but the CD will also be available from most Microsoft regional offices at some nominal postage cost.  SP2 uses delta compression technology to make post-SP2 patches smaller, so this issue is addressed going forward.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;The slide deck from my presentation is &lt;a href="http://www.sdnug.org/presentations/200405a.zip"&gt;available on-line&lt;/a&gt;, and this contains a list of resources for those interested in checking out SP2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108475226031962230?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sheyenne.blogspot.com/feeds/108475226031962230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6973560&amp;postID=108475226031962230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108475226031962230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108475226031962230'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/05/windows-xp-service-pack-2-get-on-top.html' title='Windows XP Service Pack 2 - Get on top of it now!'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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-6973560.post-108441251537203746</id><published>2004-05-12T18:41:00.000-07:00</published><updated>2004-05-17T04:53:44.390-07:00</updated><title type='text'>Five things I love about VS 2005 (from a performance perspective)</title><content type='html'>&lt;h3&gt;Generics&lt;/h3&gt;&lt;br /&gt;&lt;p style="font-family: Verdana; font-size: 10.0pt; margin-left: .5in; margin-right: 0in; margin-top: 0in; margin-bottom: 0in" lang="EN-US"&gt;&lt;br /&gt;Boxing was the scourge of value type performance, and in some of the tests I did &lt;br /&gt;for &lt;a href="http://www.apress.com/book/bookDisplay.html?bID=217"&gt;Maximizing &lt;br /&gt;.NET Performance&lt;/a&gt;, the performance hit of boxing was well over an order of &lt;br /&gt;magnitude.&amp;nbsp; Generics eliminate this problem, and this will be a huge win for all &lt;br /&gt;.NET programmers lucky enough to use a language that exposes generics.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;GC.AddMemoryPressure&lt;/h3&gt;&lt;br /&gt;&lt;p style="font-family: Verdana; font-size: 10.0pt; margin-left: .5in; margin-right: 0in; margin-top: 0in; margin-bottom: 0in" lang="EN-US"&gt;&lt;br /&gt;In .NET 1.x, a type author had no effective way of telling the garbage collector &lt;br /&gt;how much non-managed memory resources were kept alive by the presence of a &lt;br /&gt;particular object.&amp;nbsp; Take a database connection.&amp;nbsp; Having one of these objects &lt;br /&gt;around and open is a considerable drain on general system resources, and if they &lt;br /&gt;are being leaked, we'd generally like to have more garbage collections to &lt;br /&gt;prevent resource exhaustion.&amp;nbsp; The problem is that a database connection object &lt;br /&gt;use only a couple of dozen bytes of managed memory, and will exert very little &lt;br /&gt;pressure on the GC.&amp;nbsp; AddMemoryPressure can be used to give the CG a hint that a &lt;br /&gt;particular object uses a lot more resources than its managed footprint would &lt;br /&gt;indicate, and should be given special treatment when deciding on collection &lt;br /&gt;frequncy.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;.NET 2.0&lt;/h3&gt;&lt;br /&gt;&lt;p style="font-family: Verdana; font-size: 10.0pt; margin-left: .5in; margin-right: 0in; margin-top: 0in; margin-bottom: 0in" lang="EN-US"&gt;&lt;br /&gt;As with every major release, many small imperceptible improvements combine to &lt;br /&gt;produce a significantly faster experience.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Improved and expanded runtime hosting options&lt;/h3&gt;&lt;br /&gt;&lt;p style="font-family: Verdana; font-size: 10.0pt; margin-left: .5in; margin-right: 0in; margin-top: 0in; margin-bottom: 0in" lang="EN-US"&gt;&lt;br /&gt;Hosting the CLR inside even the most performance-sensitive applications becomes &lt;br /&gt;feasible with the extra fine-grained control offered by the new hosting &lt;br /&gt;interfaces.&amp;nbsp; If its good enough for Yukon &amp;#8230;&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;MSBuild&lt;/h3&gt;&lt;br /&gt;&lt;p style="font-family: Verdana; font-size: 10.0pt; margin-left: .5in; margin-right: 0in; margin-top: 0in; margin-bottom: 0in" lang="EN-US"&gt;&lt;br /&gt;Being able to hook into things like the compile process at a very low level will &lt;br /&gt;allow &lt;span style="font-weight:bold"&gt;clean&lt;/span&gt; performance optimizations that &lt;br /&gt;we haven't even dreamt up yet.&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108441251537203746?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108441251537203746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108441251537203746'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/05/five-things-i-love-about-vs-2005-from.html' title='Five things I love about VS 2005 (from a performance perspective)'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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></entry><entry><id>tag:blogger.com,1999:blog-6973560.post-108441239005575438</id><published>2004-05-12T18:39:00.000-07:00</published><updated>2004-05-16T19:34:25.230-07:00</updated><title type='text'>Eating your own dog food (eventually …)</title><content type='html'>I did a series of articles on SQL Server Reporting Services recently for &lt;a href="http://www.developer.net.au"&gt;Australian Developer&lt;/a&gt;, and was thrilled when I realized that the whole thing was written in .NET.  It feels like Microsoft has taken a long time to start eating there dog food on this one, particularly for groups that don't deal with external developers to the same extent as the tools team.&lt;br /&gt;&lt;br /&gt;Longhorn certainly delivers on the promise of managed code ubiquity.  Now for Office ... &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6973560-108441239005575438?l=sheyenne.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108441239005575438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6973560/posts/default/108441239005575438'/><link rel='alternate' type='text/html' href='http://sheyenne.blogspot.com/2004/05/eating-your-own-dog-food-eventually-i.html' title='Eating your own dog food (eventually &amp;#8230;)'/><author><name>Nick Wienholt</name><uri>http://www.blogger.com/profile/13228953442797535505</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></entry></feed>
