<?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-10449135</id><updated>2011-12-05T09:39:44.830-08:00</updated><category term='event TemplateMethod'/><category term='UI'/><category term='viewmodel'/><category term='MVVM'/><category term='note-to-self'/><title type='text'>Machined Tolerance</title><subtitle type='html'>Get with the program.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10449135.post-693559348357225721</id><published>2011-09-29T21:57:00.000-07:00</published><updated>2011-09-29T21:57:13.252-07:00</updated><title type='text'>Sometimes the lesson</title><summary type='text'>Sometimes the lesson is not how to get your team to block a field goal, up by 2, when the ball is at the 12 with 6 seconds left.  (I'm assuming your team lead isn't named "Knute".)  

Sometimes the lesson is, WTF is your team doing in football uniforms in the first place, much less being on a football field, much less trying to beat teams that actually know from football and have practiced it </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/693559348357225721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=693559348357225721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/693559348357225721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/693559348357225721'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2011/09/sometimes-lesson.html' title='Sometimes the lesson'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-4140257837350543135</id><published>2011-01-07T23:49:00.000-08:00</published><updated>2011-01-07T23:49:41.701-08:00</updated><title type='text'>You, there. Johnathan, is it?</title><summary type='text'>Is your name John, or is it Nathan?  Make up your damn mind.

I haven't got all day.</summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/4140257837350543135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=4140257837350543135' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/4140257837350543135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/4140257837350543135'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2011/01/you-there-johnathan-is-it.html' title='You, there. Johnathan, is it?'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-5985293122396409159</id><published>2010-11-09T13:06:00.000-08:00</published><updated>2010-11-09T13:06:38.716-08:00</updated><title type='text'>Regions in C# code</title><summary type='text'>Some people apparently like to put #region directives in their code, denoting which code is for constructors, which is implementations of a certain interface, etc.

I'm agin 'em.

Regions are more trouble than they're worth.  True, they are useful for hiding things... but why would code need to be hidden?  If implementation details are messy and hideable, extract a class to hide them.  If the </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/5985293122396409159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=5985293122396409159' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5985293122396409159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5985293122396409159'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2010/11/regions-in-c-code.html' title='Regions in C# code'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-5655240668713817933</id><published>2010-10-06T11:17:00.000-07:00</published><updated>2010-10-06T11:17:42.306-07:00</updated><title type='text'>Soothsaying based on spellchecker vocabularies</title><summary type='text'>Outlook 2007 did not recognize "codemonkey".  I thought this was bad news for Microsoft until my Android phone didn't recognize it either.  I'm not in a position to check an Apple product just now.   Nonetheless, I'm going to go on record (such as it is, in the blogosphere): whichever platform recognizes this word first will also dominate the mobile OS wars.</summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/5655240668713817933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=5655240668713817933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5655240668713817933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5655240668713817933'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2010/10/soothsaying-based-on-spellchecker.html' title='Soothsaying based on spellchecker vocabularies'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-7590034952261540340</id><published>2010-09-23T14:16:00.000-07:00</published><updated>2010-09-24T11:21:09.276-07:00</updated><title type='text'>Planning of costs that the customer can't see</title><summary type='text'>A friend asked,

We organize our work around stories, that are supposed to present a user requirement, and tech spikes, that we use to figure out how to do something.  How do you get architecture/infrastructure work into a sprint?  I mean things like "re-implement X using our nifty new architecture" or "set up a new server for QA"?

You know the joke that goes, "The first thing you need to know </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/7590034952261540340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=7590034952261540340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7590034952261540340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7590034952261540340'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2010/09/friend-asked-we-organize-our-work.html' title='Planning of costs that the customer can&apos;t see'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-5165807404381388717</id><published>2010-07-02T15:33:00.000-07:00</published><updated>2010-07-02T15:33:46.574-07:00</updated><title type='text'>ViewModel in .NET</title><summary type='text'>[Changed very little from a sizeable post to PADNUG today:]

For observable objects like view models, I usually have a base class
that provides INotifyPropertyChanged and IDisposable. Change-tracked
properties are held in a PropertyBag, which is a souped-up Dictionary
that maps properties to backing values. It detects changes, so can invoke PropertyChanged intelligently.

Indeed, if you want to </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/5165807404381388717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=5165807404381388717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5165807404381388717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5165807404381388717'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2010/07/viewmodel-in-net.html' title='ViewModel in .NET'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-8763410313734310999</id><published>2010-07-02T15:21:00.000-07:00</published><updated>2010-07-02T15:21:57.739-07:00</updated><title type='text'>Patenting business methods: Bilski v. Kappos</title><summary type='text'>Just started following Stephen Forte when I ran into his take on the Supreme Court decision re business method patents.

&gt; I could go and patent my implementation of Scrum since it is a business process and then turn around an sue all of you since I think you are using it.

This is a common misperception. There are some important hurdles to clear before you can patent something; they keep 99% (</summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/8763410313734310999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=8763410313734310999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/8763410313734310999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/8763410313734310999'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2010/07/patenting-business-methods-bilski-v.html' title='Patenting business methods: Bilski v. Kappos'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-6761015694169716741</id><published>2010-04-13T13:32:00.000-07:00</published><updated>2010-04-13T13:32:44.608-07:00</updated><title type='text'>My Biased Coin: What's the Co-Author Line?</title><summary type='text'>My Biased Coin: What's the Co-Author Line?An excellent post and excellent comments on Michael Mitzenmacher's blog.  I replied and found I'd written so much I might as well blog.  By now the topic is whether the identification of a "good" problem is a material contribution to its solution--originally, does a person deserve authorial credit for framing (but not providing) a solution?  I'm riffing </summary><link rel='related' href='http://mybiasedcoin.blogspot.com/2010/04/whats-co-author-line.html' title='My Biased Coin: What&apos;s the Co-Author Line?'/><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/6761015694169716741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=6761015694169716741' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/6761015694169716741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/6761015694169716741'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2010/04/my-biased-coin-whats-co-author-line.html' title='My Biased Coin: What&apos;s the Co-Author Line?'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-2961809675161368354</id><published>2010-03-09T09:41:00.000-08:00</published><updated>2010-03-09T09:58:18.023-08:00</updated><title type='text'>Pure WPF</title><summary type='text'>This was prompted by a discussion on Padnug."Pure" is not a word I'd use often with regard to WPF.  WPF rethinks many things, and not all of them have come into flower yet.  Which is an optimist's way of saying, parts are missing today.  To me, some of its big-picture rethinking has been biased toward massive empowerment of the developer, at the expense of off-the-shelf functionality.  DIY over </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/2961809675161368354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=2961809675161368354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/2961809675161368354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/2961809675161368354'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2010/03/pure-wpf.html' title='Pure WPF'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-228804214462079411</id><published>2010-03-02T23:05:00.000-08:00</published><updated>2010-03-03T00:43:33.665-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='viewmodel'/><category scheme='http://www.blogger.com/atom/ns#' term='MVVM'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>ViewModel rationale</title><summary type='text'>Nikil Kothari had a great couple posts this week, notably this one.He makes a good case for ViewModel, especially the idea that it's the next step up from codebehind.  But there's more to be said.  First off, UI is expensive, and not just mildly--it's basically as expensive as a software feature can be without being prohibitive (e.g., voice recognition). In my experience, whether on WinForms, </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/228804214462079411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=228804214462079411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/228804214462079411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/228804214462079411'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2010/03/viewmodel-rationale.html' title='ViewModel rationale'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-4314681130225916179</id><published>2010-01-27T01:03:00.000-08:00</published><updated>2010-01-27T01:15:23.408-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event TemplateMethod'/><title type='text'>Raising .NET events</title><summary type='text'>This is a recycling of something I posted to Fabulous Adventures in Coding, in conversation with Pavel Minaev.  Necessary background: the official .NET pattern for standard events (as opposed to, say, WPF routed events) recommends invoking them with a method along the lines of:protected virtual OnFoo(FooEventArgs e) {...}I thought of a few reasons for the "protected virtual OnFoo(FooArgs)" </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/4314681130225916179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=4314681130225916179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/4314681130225916179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/4314681130225916179'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2010/01/raising-net-events.html' title='Raising .NET events'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-7496711095507682621</id><published>2009-12-15T11:21:00.000-08:00</published><updated>2010-01-30T17:02:32.307-08:00</updated><title type='text'>Inheritance pattern: contract via constructor</title><summary type='text'>In C# and the C-ish object oriented languages, if you want a family of types to implement a property, with each implementation particularized to each type (i.e., you care that everyone implements it, but you don't want one implementation cascaded to all), the big two techniques get lots of press: object inheritance from an abstract base and interface implementation.  Here's another technique </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/7496711095507682621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=7496711095507682621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7496711095507682621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7496711095507682621'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/12/inheritance-pattern-contract-via.html' title='Inheritance pattern: contract via constructor'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-241225579673899973</id><published>2009-10-28T13:34:00.000-07:00</published><updated>2009-10-28T13:35:03.070-07:00</updated><title type='text'>Law of Grammarian Outrage</title><summary type='text'>Much as Godwin's Law predicts the eventual invocation of Hitler in any sufficiently long internet discussion, I'd like to propose an axiom in the same sociological vein.  There is a correlation between A, the number of commenting readers of a blog that are of an analytical (not to say hairsplitting) bent, and B, the likelihood that any blog post that mentions "beg the question" will get more </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/241225579673899973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=241225579673899973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/241225579673899973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/241225579673899973'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/10/law-of-grammarian-outrage.html' title='Law of Grammarian Outrage'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-1351934431402540359</id><published>2009-08-19T09:46:00.000-07:00</published><updated>2009-08-19T09:48:16.926-07:00</updated><title type='text'>App vs framework design</title><summary type='text'>Another rebroadcast, this time of a response to Eric Gunnerson on differences between app and framework design.Good post.  I think your distinction between designing framework APIs versus wholly-owned application code is important.  Not sure what Peter Ritchie is trying to get at by disagreeing; the differences between API and application design are so large that I'm inclined to say that anyone </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/1351934431402540359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=1351934431402540359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/1351934431402540359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/1351934431402540359'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/08/app-vs-framework-design.html' title='App vs framework design'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-3500270064099277328</id><published>2009-07-22T13:02:00.000-07:00</published><updated>2009-07-22T13:06:14.493-07:00</updated><title type='text'>The Uncle Who Won't Shut Up</title><summary type='text'>Following is a rebroadcast of my comment on Hanselman's blog.Looking forward to hearing Uncle Bob again. I find him very insightful on coding issues, less so on community issues like how software developers should carry themselves, envision the job, etc. Then there's his politics, which I only mention because it is a large fraction of his tweets (i.e., he mentions it first and puts it in the </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/3500270064099277328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=3500270064099277328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/3500270064099277328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/3500270064099277328'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/07/uncle-who-wont-shut-up.html' title='The Uncle Who Won&apos;t Shut Up'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-7739997521301100521</id><published>2009-07-13T15:22:00.000-07:00</published><updated>2009-07-13T16:06:53.245-07:00</updated><title type='text'>INotifyPropertyChanged, C# lambdas, MethodBase.GetCurrentMethod()</title><summary type='text'>I'm on a WPF project at the moment, and Silverlight before that. Both have this notion of INotifyPropertyChanged for bindings, whose only requirement is that you implementevent System.ComponentModel.PropertyChangedEventHandler PropertyChangedand fire it off whenever any of your properties changes. So far so simple.The downside is, the PropertyChangedEventArgs payload is not just a typewashed </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/7739997521301100521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=7739997521301100521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7739997521301100521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7739997521301100521'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/07/inotifypropertychanged-c-lambdas.html' title='INotifyPropertyChanged, C# lambdas, MethodBase.GetCurrentMethod()'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-1768030730830749074</id><published>2009-07-13T09:41:00.000-07:00</published><updated>2009-07-13T10:21:47.013-07:00</updated><title type='text'>Against software "craftsmanship"</title><summary type='text'>Lots of talk on web lately, esp from Object Mentor types like Uncle Bob and Michael Feathers, about the need for software developers to be more like craftsmen. This is true in small ways, I suppose, but it also seems false in large ones.The decline of craftsmen, when possible, has usually been industrialization. One can get into frets about alienation of workers from their product, and in fact I </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/1768030730830749074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=1768030730830749074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/1768030730830749074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/1768030730830749074'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/07/against-software-craftsmanship.html' title='Against software &quot;craftsmanship&quot;'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-5746215735864595355</id><published>2009-06-15T13:05:00.000-07:00</published><updated>2009-06-15T13:22:06.222-07:00</updated><title type='text'>Odd final sentence in Fowler on UI Architecture</title><summary type='text'>Fowler's overview of UI architectures is pretty much the standard article on the subject.  I stumbled on it most recently when MSDN linked there from its Prism docs.The final sentence has an odd little error, though--odd because this is an important sentence in a widely read article, and the error is quite apparent.  The sentence reads, "Mappings will tend to be smaller for Supervising Controller</summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/5746215735864595355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=5746215735864595355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5746215735864595355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5746215735864595355'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/06/odd-final-sentence-in-fowler-on-ui.html' title='Odd final sentence in Fowler on UI Architecture'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-1481593350442691847</id><published>2009-06-11T09:23:00.000-07:00</published><updated>2009-06-11T09:26:15.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='note-to-self'/><title type='text'>WinMerge in VS2008</title><summary type='text'>James Manning has an MSDN post for VS2005 that still helps when configuring alternative merge and compare tools.</summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/1481593350442691847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=1481593350442691847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/1481593350442691847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/1481593350442691847'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/06/winmerge-in-vs2008.html' title='WinMerge in VS2008'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-3371444523835053847</id><published>2009-05-31T23:30:00.000-07:00</published><updated>2009-05-31T23:59:59.866-07:00</updated><title type='text'>Silverlight.FX 2.1 navigation</title><summary type='text'>Honestly, I'm torn between loving the declarative emphasis of Silverlight.FX--expressive, implementation-agnostic, terse--and recoiling in horror from how much it depends on string literals for commanding and now addressing/navigation.  Also of concern, the MVC stuff follows ASP.MVC's conventions that make type name and file location semantically significant. (E.g., to have a Product controller, </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/3371444523835053847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=3371444523835053847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/3371444523835053847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/3371444523835053847'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/05/silverlightfx-21-navigation.html' title='Silverlight.FX 2.1 navigation'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-5544375562680245459</id><published>2009-05-11T17:51:00.000-07:00</published><updated>2009-05-11T17:56:49.302-07:00</updated><title type='text'>Uncle Bob, professional opinionator</title><summary type='text'>Uncle Bob is back to his version of talk-radio for the blogosphere. Kernels of truth, whole gallons of certainty.It's remarkable how many people get into definitional tugs-of-war over "professionalism" without citing the original, technical (if you will) meaning of professional.Classically, if your vocation doesn't have an professional organization, government licensing requirements, and a code </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/5544375562680245459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=5544375562680245459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5544375562680245459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/5544375562680245459'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/05/uncle-bob-professional-opinionator.html' title='Uncle Bob, professional opinionator'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-3325285419849540467</id><published>2009-04-10T10:07:00.000-07:00</published><updated>2009-04-22T11:52:05.111-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='note-to-self'/><title type='text'>Obsolete attribute in .NET</title><summary type='text'>More from the note-to-self category: the [Obsolete] attribute generates compile-time warnings (or errors) but is not enforced by the framework at runtime.  This is pretty obvious when you realize its purpose (backwards compatibility that warns but does not break) but spooked one of my coworkers.</summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/3325285419849540467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=3325285419849540467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/3325285419849540467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/3325285419849540467'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/04/obsolete-attribute-in-net.html' title='Obsolete attribute in .NET'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-894823027050705943</id><published>2009-03-10T11:00:00.000-07:00</published><updated>2009-04-10T10:31:44.691-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='note-to-self'/><title type='text'>Bulk unblock in Vista</title><summary type='text'>Vista's UAC suspicion of downloaded code (and other files) manifests itself as a warning on each such file, cropping up when you open them. I usually see this when I download sample code, open the VS .sln, and collapse under the slew of warning windows.Ideally, my antivirus software would have a setting to remove these values after a successful scan, or at least prompt me. It doesn't.The fix, </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/894823027050705943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=894823027050705943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/894823027050705943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/894823027050705943'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2009/03/bulk-unblock-in-vista.html' title='Bulk unblock in Vista'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-6056952015237031948</id><published>2008-11-19T16:47:00.000-08:00</published><updated>2009-04-10T10:11:05.577-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='note-to-self'/><title type='text'>Test pattern</title><summary type='text'>File this under note to self. Say you have a method to test, and inside it looks something like:public class Foo{public bool Bar(){return A &amp;&amp; B &amp;&amp; C &amp;&amp; D == "https";}}Meaning, your method has several dimensions of possible inputs, and only one or a handful of acceptable states.  Obviously, if the function really is as simple as that, you might not even want a test; static inspection might </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/6056952015237031948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=6056952015237031948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/6056952015237031948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/6056952015237031948'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2008/11/test-pattern.html' title='Test pattern'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-7120961264385462879</id><published>2008-11-16T11:21:00.000-08:00</published><updated>2008-11-16T11:24:18.805-08:00</updated><title type='text'>Indiscipline kills Agile</title><summary type='text'>That Jim Shore is doing it again.  Here's another post I put on his blog.Agile isn't for everyone. Is that heresy? I turn now, equally heretically, to a sports analogy.In baseball, there's a belief that an underachieving team can sometimes be improved by bringing in a manager who's not just a different face but a different style. If the previous regime was easygoing with the players, the new one </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/7120961264385462879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=7120961264385462879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7120961264385462879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7120961264385462879'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2008/11/indiscipline-kills-agile.html' title='Indiscipline kills Agile'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-4389930029207107854</id><published>2008-11-13T14:44:00.000-08:00</published><updated>2008-11-16T11:21:06.979-08:00</updated><title type='text'>C# primers</title><summary type='text'>So, for reasons bureaucratic related to my master's degree, I've been taking a .NET class.  I don't especially recommend taking courses in things you already largely know--especially if long-distance.  If you're going to disagree with someone on a philosophical or stylistic point of code, you don't want to do so by email.Anyway, one of my classmates asked the class,&gt; What outside reference </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/4389930029207107854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=4389930029207107854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/4389930029207107854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/4389930029207107854'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2008/11/so-for-reasons-bureaucratic-related-to.html' title='C# primers'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-8016118174084094693</id><published>2008-10-26T14:03:00.000-07:00</published><updated>2008-10-26T15:07:41.640-07:00</updated><title type='text'>Kanban planning and the reverse event horizon</title><summary type='text'>This was inspired by a thread on Jim Shore's excellent blog.  You should probably start there.Where I work, planned MMFs (as opposed to emergent support items, or dev-initiated work) are pretty chunky: usually several pair-days.  Moreover, since we do weekly meetings with the customer to re-assess the queue, and our throughput is much slower than a week (usually 30+ calendar days), items at the </summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/8016118174084094693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=8016118174084094693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/8016118174084094693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/8016118174084094693'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2008/10/kanban-planning-and-reverse-event.html' title='Kanban planning and the reverse event horizon'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</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-10449135.post-7250327868404700349</id><published>2008-10-11T01:43:00.000-07:00</published><updated>2008-10-11T01:45:50.375-07:00</updated><title type='text'>The end of history</title><summary type='text'>This blog is hereby rebooted.POST (power on self test) complete.</summary><link rel='replies' type='application/atom+xml' href='http://machinedtolerance.blogspot.com/feeds/7250327868404700349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10449135&amp;postID=7250327868404700349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7250327868404700349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10449135/posts/default/7250327868404700349'/><link rel='alternate' type='text/html' href='http://machinedtolerance.blogspot.com/2008/10/end-of-history.html' title='The end of history'/><author><name>Mark Knell</name><uri>http://www.blogger.com/profile/03835834346522506254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
