<?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-14694934</id><updated>2011-11-04T18:33:49.574-04:00</updated><category term='SubSonic'/><category term='Code Generation'/><category term='technology'/><category term='information overload'/><category term='salesman&apos;s license'/><category term='ORM'/><category term='NHibernate'/><category term='MyGeneration'/><category term='file sharing'/><category term='DAL'/><category term='Reflector'/><category term='sadness'/><category term='humor'/><title type='text'>Sipping from the firehose</title><subtitle type='html'>...trying to keep up with Microsoft technologies...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://showens.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14694934.post-5295336776378983516</id><published>2011-02-03T08:03:00.004-05:00</published><updated>2011-02-03T08:15:03.868-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reflector'/><title type='text'></title><content type='html'>In an &lt;a href="http://www.red-gate.com/products/dotnet-development/reflector/announcement"&gt;open letter to the .NET community&lt;/a&gt;, RedGate announces Reflector is going commercial. Worse yet, the current version is &lt;em&gt;set to expire &lt;/em&gt;after the 1st quarter of this year! I &lt;a href="http://showens.blogspot.com/2008/08/future-of-reflector-is-red-gate.html"&gt;had reservations &lt;/a&gt;about the original takeover by RedGate - looks like it was right to be concerned.&lt;br /&gt;&lt;br /&gt;It would be ideal if they would make a Community or Express version, with/without ads, with/without restrictions on business use. At the very least, they should make an old version perpetually free, as some other vendors have done.&lt;br /&gt;&lt;br /&gt;If something useful but somewhat niche goes commercial, can MySql be far behind? Is Oracle any less profit-driven than RedGate?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-5295336776378983516?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/5295336776378983516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=5295336776378983516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/5295336776378983516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/5295336776378983516'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2011/02/in-open-letter-to.html' title=''/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-6492451782385661934</id><published>2009-03-05T13:31:00.001-05:00</published><updated>2009-03-05T13:31:09.210-05:00</updated><title type='text'>The problem with “You are not your code”</title><content type='html'>&lt;p&gt;There is a commonly expressed idea (a recent example &lt;a href="http://blog.fohjin.com/blog/2009/3/3/What_I_mean_when_I_say_This_is_Bad_code" target="_blank"&gt;here&lt;/a&gt;) that can be summed up as “you are not your code”.&amp;#160; In short, if someone tells you “this is bad code”, you should rejoice, because it’s an opportunity for improvement.&amp;#160; &lt;/p&gt;  &lt;p&gt;When expressed, everyone rushes to agree with this sentiment.&amp;#160; And so do I.&amp;#160; It is very difficult to improve if you cannot listen to criticism and make changes based on it.&lt;/p&gt;  &lt;p&gt;But there is a another side to this that is rarely expressed.&amp;#160; When someone delivers this message, you are actually the person who wrote the code.&amp;#160; You are not the code, but you &lt;strong&gt;are&lt;/strong&gt; a person &lt;em&gt;who wrote bad code&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;When you receive this message, it should be not only a time for rejoicing in the learning opportunity, it should also be a red flag.&amp;#160; You do not want to continue to be the person who writes bad code.&amp;#160; &lt;/p&gt;  &lt;p&gt;Consider the situation where this message is delivered in a code review session.&amp;#160; The team is gathered, the code you wrote is being projected on the wall, and, well, &lt;em&gt;it’s baaaaad.&amp;#160; &lt;/em&gt;People are snickering behind their hands or WTF-ing all over the place.&amp;#160; How many times do you want to hear “this is bad code”?&amp;#160; Put another way, how many times would it take before you would begin to be labeled as “the guy who writes bad code”?&lt;/p&gt;  &lt;p&gt;No team wants that guy as a member for long, whether learning is taking place or not.&amp;#160; It’s a drag on everyone else’s attitude and on the team’s output – someone is going to have to write the &lt;strong&gt;good&lt;/strong&gt; code to replace the mess you wrote (or take the time to supervise your rewrite).&lt;/p&gt;  &lt;p&gt;So, go ahead and use constructive criticism to improve.&amp;#160; But don’t let yourself be in a position where you &lt;em&gt;keep receiving&lt;/em&gt; such criticism.&amp;#160; &lt;/p&gt;  &lt;p&gt;You’ve got to learn, and not just from code reviews.&amp;#160; Take the initiative to get out of this penalty box.&amp;#160; Take some time to study the code of team members who &lt;strong&gt;don’t&lt;/strong&gt; get criticized, because they write good code the first time.&amp;#160; Read a book, subscribe to some RSS feeds on coding, do some &lt;a href="http://codekata.pragprog.com/" target="_blank"&gt;code katas&lt;/a&gt;.&amp;#160; Refactor, using some better or clearer techniques from the language.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-6492451782385661934?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/6492451782385661934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=6492451782385661934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/6492451782385661934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/6492451782385661934'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2009/03/problem-with-you-are-not-your-code.html' title='The problem with “You are not your code”'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-5259751273591526036</id><published>2009-02-09T14:16:00.001-05:00</published><updated>2009-02-09T14:16:58.947-05:00</updated><title type='text'>The basic syntax of F#</title><content type='html'>&lt;p&gt; Here is a nice, concise overview of the minimum syntactical constructs you need to get a decent F# program up and running.&lt;/p&gt;  &lt;p&gt;There are a couple of links to other posts that describe some features in more detail.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!887.entry?sa=482070343" target="_blank"&gt;The basic syntax of F# - keywords and constructs&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-5259751273591526036?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/5259751273591526036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=5259751273591526036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/5259751273591526036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/5259751273591526036'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2009/02/basic-syntax-of-f.html' title='The basic syntax of F#'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-1266671783575600736</id><published>2008-11-24T11:04:00.001-05:00</published><updated>2008-11-24T11:04:41.616-05:00</updated><title type='text'>Visual learning</title><content type='html'>&lt;p&gt;Sometimes a simple visual makes an abstract concept more understandable.&amp;#160; I find more and more that I like watching short webcasts about new concepts instead of just reading prose about them.&lt;/p&gt;  &lt;p&gt;If you haven't tried it, check out &lt;a href="http://dimecasts.net" target="_blank"&gt;Dimecasts&lt;/a&gt; for a collection of just that kind of presentation.&amp;#160; I find it great to not only see code, but also to hear why it is being written that particular way.&amp;#160; &lt;/p&gt;  &lt;p&gt;Here's one I just ran across that explains pointers succinctly and clearly.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://harriyott.com/2008/11/learning-about-pointers-from-plasticene.aspx" target="_blank"&gt;Learning about pointers from Binky&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-1266671783575600736?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/1266671783575600736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=1266671783575600736' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1266671783575600736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1266671783575600736'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2008/11/visual-learning.html' title='Visual learning'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-4413577423635646419</id><published>2008-08-20T07:56:00.001-04:00</published><updated>2008-08-20T07:56:29.995-04:00</updated><title type='text'>The Future of Reflector is Red Gate</title><content type='html'>&lt;p&gt; In an interview with Lutz Roeder and James Moore entitled &lt;a href="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/"&gt;The Future of Reflector&lt;/a&gt;, we find out that development of Reflector is being taken over by Red Gate Software.&amp;#160; The promise is that Reflector will continue to be &amp;quot;available for free downloading&amp;quot;.&amp;#160; Will source code still be available?&amp;#160; Not discussed in the brief transcript of the interview.&amp;#160; &lt;/p&gt;  &lt;p&gt;It will be interesting to see what happens to such a widely-used tool.&amp;#160; How will the community of add-in writers react?&amp;#160; Will there be a hue and cry from the Open Source community at large?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-4413577423635646419?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/4413577423635646419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=4413577423635646419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/4413577423635646419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/4413577423635646419'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2008/08/future-of-reflector-is-red-gate.html' title='The Future of Reflector is Red Gate'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-7315000199380997220</id><published>2008-08-19T18:50:00.001-04:00</published><updated>2008-08-19T18:50:17.276-04:00</updated><title type='text'>I told you a thousand times "Unit test!"</title><content type='html'>&lt;p&gt;&lt;a href="http://qdb.us/53151" target="_blank"&gt;Calculating PI to a billion digits&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Recommended site.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-7315000199380997220?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/7315000199380997220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=7315000199380997220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7315000199380997220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7315000199380997220'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2008/08/i-told-you-thousand-times-test.html' title='I told you a thousand times &amp;quot;Unit test!&amp;quot;'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-249481708593527185</id><published>2008-05-19T07:31:00.001-04:00</published><updated>2008-05-19T07:31:13.029-04:00</updated><title type='text'>Unit testing static classes</title><content type='html'>&lt;p&gt;&lt;a href="http://weblogs.asp.net/cibrax/default.aspx" target="_blank"&gt;Cibrax&lt;/a&gt; describes a &lt;a href="http://weblogs.asp.net/cibrax/archive/2008/05/16/unit-tests-for-wcf.aspx" target="_blank"&gt;method to unit test static classes&lt;/a&gt;.&amp;#160; The example given applies to WCF, but it can be applied to anything that would otherwise be difficult to mock.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-249481708593527185?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/249481708593527185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=249481708593527185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/249481708593527185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/249481708593527185'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2008/05/unit-testing-static-classes.html' title='Unit testing static classes'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-2835661517897605184</id><published>2008-04-07T10:13:00.001-04:00</published><updated>2008-04-07T10:13:24.536-04:00</updated><title type='text'>Unified SCC - a universal source control integration plugin</title><content type='html'>&lt;p&gt;This &lt;a title="Unified SCC - a universal source control integration plugin" href="http://aigenta.com/products/UnifiedScc.aspx" target="_blank"&gt;plugin&lt;/a&gt; could be useful if you are looking to use Subversion (or CVS) as your source control management system.&amp;#160; It claims to handle Delphi as well as Visual Studio, with other development systems in the works.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-2835661517897605184?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/2835661517897605184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=2835661517897605184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/2835661517897605184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/2835661517897605184'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2008/04/unified-scc-universal-source-control.html' title='Unified SCC - a universal source control integration plugin'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-1318348316687274630</id><published>2008-03-26T10:19:00.001-04:00</published><updated>2008-03-26T10:19:21.643-04:00</updated><title type='text'>Source Control in a .NET World</title><content type='html'>&lt;p&gt;&lt;a href="http://geekswithblogs.net/scottkuhl/archive/2008/03/03/source-control-in-a-.net-world.aspx" target="_blank"&gt;Scott Kuhl&lt;/a&gt; blogs about finding a source control system to replace SourceSafe and comes up with a surprising new contender. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-1318348316687274630?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/1318348316687274630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=1318348316687274630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1318348316687274630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1318348316687274630'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2008/03/source-control-in-net-world.html' title='Source Control in a .NET World'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-7631134412013590840</id><published>2008-03-17T09:56:00.001-04:00</published><updated>2008-03-17T09:56:56.737-04:00</updated><title type='text'>Having Pun with C#</title><content type='html'>&lt;p&gt;Some Monday morning &lt;a href="http://www.csharp411.com/having-pun-with-c/" target="_blank"&gt;fun&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-7631134412013590840?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/7631134412013590840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=7631134412013590840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7631134412013590840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7631134412013590840'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2008/03/having-pun-with-c.html' title='Having Pun with C#'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-3976185034118953897</id><published>2008-01-08T13:02:00.001-05:00</published><updated>2008-01-08T13:02:55.241-05:00</updated><title type='text'>The Mythical 5%</title><content type='html'>&lt;p&gt;Bruce Eckel's &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=221622" target="_blank"&gt;commencement address&lt;/a&gt; at Neumont University in Salt Lake City.&amp;#160; The school is geared toward teaching Comp. Sci.&amp;#160; Some excerpts:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;We are in a young business. Primitive, really -- we don't know much about what works, and we keep thinking we've found the silver bullet that solves all problems. As a result, we go through these multi-year boom and bust cycles as new ideas come in, take off, exceed their grasp, then run out of steam. But some ideas seem to have staying power. For example, a lot of the ideas in agile methodologies seem to be making some real impacts in productivity and quality. This is because they focus more on the issues of people working together and less on technologies.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;People issues.&amp;#160; In software as well as life, People Issues rule.&amp;#160; To condense further...&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A man I've learned much from, Gerald Weinberg, wrote his first couple of books on the technology of programming. Then he switched, and wrote or coauthored 50 more on the process of programming, and he is most famous for saying &amp;quot;no matter what they tell you, it's always a people problem.&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A third way to look at this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;...there's one more very important maxim from Gerald Weinberg which doesn't really answer anything as much as gives you a way to understand what happens. He says: &amp;quot;Things are the way they are because they got that way ... one logical step at a time.&amp;quot; It's the legendary frog in the saucepan. So from your fresh new perspective things might look ridiculous, but remember that each decision on the way was made by someone weighing the issues and making what seemed like the best choice at the time. This viewpoint doesn't solve the problem but it can make you more compassionate about the people who are stuck there.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Amen.&lt;/p&gt;  &lt;p&gt;This is worth taking the time to read.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-3976185034118953897?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/3976185034118953897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=3976185034118953897' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3976185034118953897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3976185034118953897'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2008/01/mythical-5.html' title='The Mythical 5%'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-7586366129229795240</id><published>2007-12-13T22:17:00.001-05:00</published><updated>2007-12-13T22:17:30.170-05:00</updated><title type='text'>Icon Restore</title><content type='html'>&lt;p&gt;This is a nifty thing for those of you who change resolutions from time to time (or have them changed &lt;strong&gt;for&lt;/strong&gt; you &lt;em&gt;&lt;u&gt;without your permission&lt;/u&gt;&lt;/em&gt;, if you know you know what I mean).&lt;/p&gt; &lt;p&gt;&lt;a title="May your icons never be moved again! " href="http://users.rcn.com/taylotr/icon_restore.html" target="_blank"&gt;Icon Restore&lt;/a&gt; is free and does just what it says it will do.&amp;nbsp; Note that if you move things around after saving your icon locations, you will have to remember to save your new position.&lt;/p&gt; &lt;p&gt;If you like your desktop the way you like it, this is for you.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-7586366129229795240?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/7586366129229795240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=7586366129229795240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7586366129229795240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7586366129229795240'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/12/icon-restore.html' title='Icon Restore'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-522088949262231036</id><published>2007-12-11T19:01:00.001-05:00</published><updated>2007-12-12T08:55:07.339-05:00</updated><title type='text'>Two, Two, Two Mints In One</title><content type='html'>&lt;p&gt;My employer, &lt;a href="http://alogent.com/" target="_blank"&gt;Alogent Corporation&lt;/a&gt;, is developing an API to interface to an existing piece of code I'll call Deposit Server.&amp;#160; It normally runs as a Windows service, which I'll call DepositServer.exe.&amp;#160; The API (WebApi) is designed to be called via the web, so it runs under IIS within the aspnet_wp.exe process.&amp;#160; Each of these has its own Visual Studio solution file, each with numerous projects.&lt;/p&gt;  &lt;p&gt;If you happen to be coding and debugging on both sides of the fence (the Windows service and the IIS process), you can use one Visual Studio instance to attach to both processes at once in order to trace between the web API and the Deposit Server as traffic flows back and forth.&amp;#160; &lt;/p&gt;  &lt;p&gt;What I did was create a single solution, let's call it DualSolution, by merging the contents of the existing WebApi and DepositServer .sln files.&amp;#160; Rather than try to figure out which Project entries were common to both solutions, and there are quite a number, I just copied the entire contents of each .sln file into the new one, back to back.&amp;#160; &lt;/p&gt;  &lt;p&gt;When you open the resulting solution in VS, you will get a bunch of notifications that 'project xxxx cannot be added because it already exists in the solution'.&amp;#160; You just click OK, and VS will take care of the cleanup when you save the solution the first time.&lt;/p&gt;  &lt;p&gt;(At first I thought I needed to merge the contents of the Global sections and have only one Global, but VS appears to take care of that as well.&amp;#160; Just append one .sln file after the other, open up the result, and you're good to go.)&lt;/p&gt;  &lt;p&gt;When you want to debug, attach to process DepositServer.exe, then turn right around and attach to aspnet_wp.exe.&amp;#160; Now, you can set breakpoints from end to end.&amp;#160; &lt;/p&gt;  &lt;p&gt;Of course you can do something similar by having two copies of VS running, one with the WebApi solution, the other handling DepositServer.&amp;#160; But it seems to me there are two upsides of the combined solution method: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;You save memory by having only one copy of VS running rather than two &lt;/li&gt;    &lt;li&gt;You save memory by not having the projects common to both solutions open twice &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Devenv.exe (the guts of the Visual Studio IDE) tends to get pretty hefty as you ask it to do things;&amp;#160; here are the Working Set sizes on my machine, as reported by &lt;a href="http://www.microsoft.com/technet/sysinternals/ProcessesAndThreads/ProcessExplorer.mspx" target="_blank"&gt;Process Explorer&lt;/a&gt;.&amp;#160; Your mileage &lt;strong&gt;will&lt;/strong&gt; vary, based on what's open in the solution, the add-ins you've got installed, moon phase, how VS feels at the moment, etc.&amp;#160; &lt;/p&gt;  &lt;p&gt;Each of these measurements was taken with all projects collapsed, no source files open, no Start Page open.&amp;#160; I let things &amp;quot;settle&amp;quot; for a while, as I notice the WS size creeps up a bit for a few minutes after the solution is open for business in the IDE.&amp;#160; The solutions are (for the moment) VS2005.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="427" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="276"&gt;&lt;font size="1"&gt;&lt;strong&gt;Solution opened and its state&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;font size="1"&gt;&lt;strong&gt;Working Set size&lt;/strong&gt; (in KB)&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="275"&gt;&lt;font size="1"&gt;Visual Studio with no solution open&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;font size="1"&gt;57,016&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="274"&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="273"&gt;&lt;font size="1"&gt;DualSolution, after opening&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;font size="1"&gt;400,256&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="273"&gt;&lt;font size="1"&gt;&lt;font size="1"&gt;DualSolution&lt;/font&gt;, after attaching to both processes&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;font size="1"&gt;421,404&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="273"&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="273"&gt;&lt;font size="1"&gt;WebApi, after opening&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;font size="1"&gt;196,384&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="273"&gt;&lt;font size="1"&gt;WebApi, after attaching to aspnet_wp.exe&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;font size="1"&gt;212,228&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="273"&gt;&lt;font size="1"&gt;DepositServer, after opening&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;font size="1"&gt;403,508&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="273"&gt;&lt;font size="1"&gt;DepositServer, after attaching to DepositServer.exe&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="149"&gt;&lt;font size="1"&gt;427,004&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="427" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="335"&gt;Memory to debug with combined solution:&lt;/td&gt;        &lt;td valign="bottom" width="90"&gt;421,404 kb&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="335"&gt;Memory to debug with two VS instances:&lt;/td&gt;        &lt;td valign="bottom" width="90"&gt;639,232 kb&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="335"&gt;Not having to swivel your head between two sets of breakpoints in two different windows:&amp;#160; &lt;/td&gt;        &lt;td valign="bottom" width="90"&gt;priceless&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-522088949262231036?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/522088949262231036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=522088949262231036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/522088949262231036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/522088949262231036'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/12/two-two-two-mints-in-one.html' title='Two, Two, Two Mints In One'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-7039434690926535719</id><published>2007-12-04T10:09:00.001-05:00</published><updated>2007-12-04T10:09:34.004-05:00</updated><title type='text'>Hurry! Act now!!</title><content type='html'>&lt;p&gt;Repent!&amp;#160; The End is Near!&lt;/p&gt;  &lt;p&gt;It has been &lt;a href="http://blogs.technet.com/jamesone/archive/2007/11/30/virtualization-futures.aspx" target="_blank"&gt;announced&lt;/a&gt; that Virtual Server 2005 will no longer be supported after 2014.&amp;#160; Plan &lt;strong&gt;now&lt;/strong&gt; to migrate your virtual images, before it's too late.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img height="180" src="http://www.stanford.edu/~jbaugh/saw/studentphoto/Scenery/CampsBaySunset.JPG" width="240" /&gt;&lt;/p&gt;  &lt;p&gt;You know your company's getting big when it announces that an already outmoded product will see its sunset seven years from now.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-7039434690926535719?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/7039434690926535719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=7039434690926535719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7039434690926535719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7039434690926535719'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/12/hurry-act-now.html' title='Hurry! Act now!!'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-6061041809580934472</id><published>2007-11-15T22:20:00.001-05:00</published><updated>2007-11-15T22:20:21.882-05:00</updated><title type='text'>Sysinternals Suite - New and Improved Packaging!</title><content type='html'>&lt;p&gt;All of the good stuff in &lt;a href="http://www.microsoft.com/technet/sysinternals/utilities/sysinternalssuite.mspx" target="_blank"&gt;one package&lt;/a&gt;.&amp;nbsp; This is a great idea for a newly-paved machine.&amp;nbsp;&lt;/p&gt;&lt;a title="" href="http://www.microsoft.com/technet/sysinternals/utilities/sysinternalssuite.mspx" target="_blank"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-6061041809580934472?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/6061041809580934472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=6061041809580934472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/6061041809580934472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/6061041809580934472'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/11/sysinternals-suite-new-and-improved.html' title='Sysinternals Suite - New and Improved Packaging!'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-7913825224861575103</id><published>2007-11-15T14:13:00.001-05:00</published><updated>2007-11-15T14:13:24.360-05:00</updated><title type='text'>Windows cannot open this file</title><content type='html'>&lt;p&gt;This has been an annoyance for a long time.&amp;#xA0; When you open a file with an &amp;quot;unknown&amp;quot; extension, you get the dialog asking you if you want to search the Interweb to find an appropriate program.&amp;#xA0; Like the author of this post, I have never, ever found anything through this.&amp;#xA0; I automatically choose &amp;quot;Select the program from a list&amp;quot;.&lt;/p&gt;  &lt;p&gt;Now you can perform some &lt;a href="http://www.ghacks.net/2007/11/10/windows-cannot-open-this-file/" target="_blank"&gt;registry hackery&lt;/a&gt; to bypass this dialog and always go to the &amp;quot;Select from a list&amp;quot; step.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-7913825224861575103?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/7913825224861575103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=7913825224861575103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7913825224861575103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7913825224861575103'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/11/windows-cannot-open-this-file.html' title='Windows cannot open this file'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-1980723308394231191</id><published>2007-10-30T08:29:00.001-04:00</published><updated>2007-10-30T08:29:55.957-04:00</updated><title type='text'>Buy 1, Donate 1 Laptop for $399 - The One Laptop Per Child Project</title><content type='html'>&lt;p&gt;A while back, I saw a 60 Minutes interview with Nicholas Negroponti about the &lt;a href="http://laptop.org/" target="_blank"&gt;One Laptop Per Child Project&lt;/a&gt;, and it was very interesting.&amp;#xA0; These things really are useful in an African village.&amp;#xA0; Kids, as kids do, were taking to them like ducks on a pond.&amp;#xA0; It's a cool box, too.&lt;/p&gt;  &lt;p&gt;Now we have a chance to both satisfy our &lt;strike&gt;lust for&lt;/strike&gt; curiosity about the technology and help a child.&amp;#xA0; Come November 12th, there is a two week program where you can buy one of these babies and have one donated.&amp;#xA0; Sign up &lt;a href="http://www.xogiving.org/" target="_blank"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt; to be notified when it officially starts.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.softwarebyrob.com/2007/10/29/one-laptop-per-child-buy-2-for-399/" target="_blank"&gt;Rob Walling&lt;/a&gt; has blogged about it. &lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-1980723308394231191?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/1980723308394231191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=1980723308394231191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1980723308394231191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1980723308394231191'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/buy-1-donate-1-laptop-for-399-one.html' title='Buy 1, Donate 1 Laptop for $399 - The One Laptop Per Child Project'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-260037307226409877</id><published>2007-10-24T11:25:00.001-04:00</published><updated>2007-10-24T11:25:45.093-04:00</updated><title type='text'>WCF Performance Comparisons</title><content type='html'>&lt;p&gt;&lt;a href="http://dotnetjunkies.com/WebLog/kenbrubaker/archive/2007/10/22/wcfperfs.aspx?referrer=swamii.com"&gt;Ken Brubaker &lt;/a&gt;points to a &lt;a href="http://blogs.msdn.com/clemensv/archive/2007/04/02/so-how-much-faster-is-it-really-and-is-it-wcf-performance-in-comparison.aspx" target="_blank"&gt;summary&lt;/a&gt; by &lt;a title="His blog" href="http://blogs.msdn.com/clemensv/" target="_blank"&gt;Clemens Vasters&lt;/a&gt; of a &lt;a href="http://msdn2.microsoft.com/en-us/library/bb310550.aspx" target="_blank"&gt;white paper&lt;/a&gt; comparing various existing distributed communication technologies with WCF.&amp;#xA0; The bottom line - WCF is&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;%25 - %50 faster than ASMX &lt;/li&gt;    &lt;li&gt;%25 faster than .NET Remoting &lt;/li&gt;    &lt;li&gt;%100 faster - %25 slower than .NET Enterprise Services (DCOM) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Also in his summary, Clemens remarks (italics his):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;For WSE 2.0/3.0 implementations, migrating them to WCF will obviously provide the most significant performance gains &lt;strong&gt;of almost 4x&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The performance differences alone make WCF a technology worth exploring.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-260037307226409877?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/260037307226409877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=260037307226409877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/260037307226409877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/260037307226409877'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/wcf-performance-comparisons.html' title='WCF Performance Comparisons'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-8466983897312337802</id><published>2007-10-24T09:14:00.001-04:00</published><updated>2007-10-24T09:14:15.101-04:00</updated><title type='text'>Team Foundation Server Version Control</title><content type='html'>&lt;p&gt;Jeff Levinson provides a &lt;a href="http://www.ftponline.com/channels/net/2007_10/jlevinson/" target="_blank"&gt;brief overview&lt;/a&gt; of how you could set up and do change management for development using TFS.&amp;#xA0; The approach is a bit different than I've seen in the past.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-8466983897312337802?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/8466983897312337802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=8466983897312337802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/8466983897312337802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/8466983897312337802'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/team-foundation-server-version-control.html' title='Team Foundation Server Version Control'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-1965970955175563730</id><published>2007-10-19T13:06:00.001-04:00</published><updated>2007-10-19T13:06:07.613-04:00</updated><title type='text'>Hello Kitty assault rifle.</title><content type='html'>&lt;p&gt;&lt;a title="Hello Kitty assult fifle" href="http://www.google.com/reader/view/#stream/user%2F15042240880852998949%2Fstate%2Fcom.google%2Fbroadcast" target="_blank"&gt;'Nuff said.&lt;/a&gt;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-1965970955175563730?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/1965970955175563730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=1965970955175563730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1965970955175563730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1965970955175563730'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/hello-kitty-assault-rifle.html' title='Hello Kitty assault rifle.'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-1897415320058320576</id><published>2007-10-18T14:14:00.001-04:00</published><updated>2007-10-18T14:14:54.171-04:00</updated><title type='text'>Integrating TortiseSVN with Visual Studio.NET</title><content type='html'>&lt;p&gt;Here's a nice &lt;a href="http://www.codeproject.com/useritems/SourceControl_VSNET.asp" target="_blank"&gt;CodeProject article&lt;/a&gt; on both using TortiseSVN (the primo Subversion client) and integrating it with Visual Studio.&amp;#xA0; It discusses Ankh, VisualSVN, and an add-in developed by Garry Bodsworth (described &lt;a href="http://garrys-brain.blogspot.com/2007/07/tortoisesvn-and-visual-studio.html" target="_blank"&gt;here&lt;/a&gt;).&amp;#xA0; There are some useful tips on Subversion in general, and some of the comments have interesting questions and answers as well.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-1897415320058320576?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/1897415320058320576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=1897415320058320576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1897415320058320576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1897415320058320576'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/integrating-tortisesvn-with-visual.html' title='Integrating TortiseSVN with Visual Studio.NET'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-1423257266014689754</id><published>2007-10-17T18:38:00.001-04:00</published><updated>2007-10-17T18:38:28.250-04:00</updated><title type='text'>Beginning the WCF Journey</title><content type='html'>&lt;p&gt;I'm going to dip my foot into WCF.&amp;#xA0; That's more than a toe but less than a headlong dive.&amp;#xA0; Of the four books listed in our library, I have found two.&amp;#xA0; Here are some quotes from the intros:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;...you might instinctively treat WCF as just another API.&amp;#xA0; Resist this temptation... WCF is not just a wrapper around existing functionality or just another whiz-bang API.&amp;#xA0; WCF is the evidence that a tectonic shift has occurred in distributed software development.&lt;/p&gt;    &lt;p&gt;Justin Smith, &lt;u&gt;Inside Windows Communication Foundation&lt;/u&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Tectonic shift!?&amp;#xA0; Wow!&amp;#xA0; Equally as eye-opening is this one:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;To me, WCF is simply the next development platform, which to a large extent subsumes raw .NET programming.&amp;#xA0; &lt;/p&gt;    &lt;p&gt;Juval Lowy, &lt;u&gt;Programming WCF Services&lt;/u&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This could be fun...&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-1423257266014689754?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/1423257266014689754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=1423257266014689754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1423257266014689754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1423257266014689754'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/beginning-wcf-journey.html' title='Beginning the WCF Journey'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-6776040346784771781</id><published>2007-10-17T12:21:00.001-04:00</published><updated>2007-10-17T12:21:22.004-04:00</updated><title type='text'>F# About to go Mainstream</title><content type='html'>&lt;p&gt;I've been noodling around with F# for a while, partly to get used to the upcoming &lt;a href="http://en.wikipedia.org/wiki/Functional_programming" target="_blank"&gt;Functional Programming&lt;/a&gt; &lt;a href="http://lh6.google.com/shoboe/RxY2gNuHZxI/AAAAAAAAABk/Sm0HeUJlV0o/F%23%20Major%20Chord%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="79" alt="F# Major Chord" src="http://lh3.google.com/shoboe/RxY2gduHZyI/AAAAAAAAABw/Kktd_ZS3b8o/F%23%20Major%20Chord_thumb%5B1%5D.jpg" width="104" align="right" border="0" /&gt;&lt;/a&gt;features of C# 3.0, partly to expand the way I approach programming problems.&amp;#xA0; Now, &lt;a href="http://blogs.msdn.com/somasegar/rss.xml" target="_blank"&gt;Somasegar&lt;/a&gt; has &lt;a href="http://blogs.msdn.com/somasegar/archive/2007/10/17/f-a-functional-programming-language.aspx" target="_blank"&gt;announced&lt;/a&gt; that Microsoft will be making F# a first class language, along with C#, VB.NET, etc.&amp;#xA0; This is very&amp;#xA0; good news, not only for devotees of ML-type languages, but also for FP in general.&amp;#xA0; When something is readily available in Visual Studio, there's more of a likelihood that someone will give it a try*.&amp;#xA0; &lt;/p&gt;  &lt;p&gt;And while it's true that other ML implementations for .NET have been around for a while, such as &lt;a href="http://nemerle.org/Main_Page" target="_blank"&gt;Nemerle&lt;/a&gt;, &lt;a href="http://www.cl.cam.ac.uk/research/tsg/SMLNET/" target="_blank"&gt;SML&lt;/a&gt;, &lt;a href="http://www.codeplex.com/camldotnet" target="_blank"&gt;CAML&lt;/a&gt;, &lt;a href="http://www.pps.jussieu.fr/~montela/ocamil/" target="_blank"&gt;OCaml&lt;/a&gt; and &lt;a href="http://www.haskell.org/visualhaskell/" target="_blank"&gt;Haskell&lt;/a&gt;, the polish that Microsoft will put on F# will make it much easier to use.&amp;#xA0; &lt;/p&gt;  &lt;p&gt;Also, unlike some of the above examples, F# is under active development by Microsoft Research in the UK.&amp;#xA0; &lt;a href="http://blogs.msdn.com/dsyme/" target="_blank"&gt;Don Syme&lt;/a&gt; is the leader of the team.&amp;#xA0; F# can be either compiled or scripted like Python, but it has ML's &lt;a href="http://en.wikipedia.org/wiki/Type_inference" target="_blank"&gt;type inference&lt;/a&gt; and is type-safe.&amp;#xA0; It generally performs as well as (or better than!) compiled C# code.&amp;#xA0; For an intro and overview of features, check out the project's &lt;a href="http://research.microsoft.com/fsharp/fsharp.aspx" target="_blank"&gt;main page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;* &lt;font face="Vrinda" size="2"&gt;Except for J#.&amp;#xA0; Don't ever try J#.&lt;/font&gt;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-6776040346784771781?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/6776040346784771781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=6776040346784771781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/6776040346784771781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/6776040346784771781'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/f-about-to-go-mainstream.html' title='F# About to go Mainstream'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-4595298000741375727</id><published>2007-10-15T12:06:00.001-04:00</published><updated>2007-10-15T12:06:58.213-04:00</updated><title type='text'>REMs don't sleep</title><content type='html'>&lt;p&gt;Let's say you have a .BAT file with a command like&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;c:\bin\dcc32.exe&amp;#xA0;&amp;#xA0; [parms to compile a Delphi program]&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;It will return an %errorlevel% of greater than zero if the program does not compile, zero if it does.&lt;/p&gt;  &lt;p align="left"&gt;Since I was testing this by double-clicking, I put a PAUSE statement right after it to see the output of the compile step.&amp;#xA0; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;c:\bin\dcc32.exe&amp;#xA0;&amp;#xA0; [parms to compile a Delphi program]      &lt;br /&gt;pause&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;Once the whole build project started working, I left the PAUSE in but REM'ed it out so I could remember what I had done in case I needed to go back and debug later.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;c:\bin\dcc32.exe&amp;#xA0;&amp;#xA0; [parms to compile a Delphi program]      &lt;br /&gt;rem pause&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;It turns out that REM is an &amp;quot;active&amp;quot; statement in a .BAT file and &lt;strong&gt;sets %errorlevel% to zero!&lt;/strong&gt;&amp;#xA0; When the compile line really did fail, the error was being masked by the REM right after it, so the MSBuild project kept going as if nothing was wrong.&amp;#xA0; Once the REM line was removed, the MSBuild project failed as it should.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-4595298000741375727?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/4595298000741375727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=4595298000741375727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/4595298000741375727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/4595298000741375727'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/rems-don-sleep.html' title='REMs don&amp;#39;t sleep'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-4186768696662011373</id><published>2007-10-10T10:58:00.001-04:00</published><updated>2007-10-10T11:02:03.471-04:00</updated><title type='text'>A gift idea for that special someone</title><content type='html'>&lt;p&gt;Got somebody who's hard to buy for?&amp;#xA0; Here's &lt;a href="http://www.thinkgeek.com/tshirts/generic/991e/ "&gt;something&lt;/a&gt; that's appropriate for either a nerd or a geek.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-4186768696662011373?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/4186768696662011373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=4186768696662011373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/4186768696662011373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/4186768696662011373'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/gift-idea-for-that-special-someone.html' title='A gift idea for that special someone'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-4151470361271864313</id><published>2007-10-10T10:19:00.001-04:00</published><updated>2007-10-10T10:19:05.698-04:00</updated><title type='text'>Database Humor</title><content type='html'>&lt;p&gt;From &lt;a title="xkcd - A webcomic of romance  sarcasm  math  and language - By Randall Munroe" href="http://xkcd.com/327/" target="_blank"&gt;xkcd&lt;/a&gt;.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-4151470361271864313?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/4151470361271864313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=4151470361271864313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/4151470361271864313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/4151470361271864313'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/database-humor.html' title='Database Humor'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-2354064319159911261</id><published>2007-10-04T07:52:00.001-04:00</published><updated>2007-10-04T07:52:27.828-04:00</updated><title type='text'>Software Branching and Parallel Universes</title><content type='html'>&lt;p&gt;There's a nice description of version control branching and merging on &lt;a title="Software branching and merging" href="http://www.codinghorror.com/blog/archives/000968.html" target="_blank"&gt;Jeff Atwood's blog&lt;/a&gt;.&amp;nbsp; He points out some patterns and anti-patterns taken from a &lt;a href="http://msdn2.microsoft.com/en-us/library/aa730834(VS.80).aspx" target="_blank"&gt;Microsoft article&lt;/a&gt;.&amp;nbsp; We are facing some complex issues with branches and customer-specific features right now at work.&amp;nbsp; I don't know the best answer (yet), but these two articles give a good framework for discussing the technical as well as organizational ramifications.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-2354064319159911261?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/2354064319159911261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=2354064319159911261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/2354064319159911261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/2354064319159911261'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/software-branching-and-parallel.html' title='Software Branching and Parallel Universes'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-7069465407850488322</id><published>2007-10-03T13:07:00.001-04:00</published><updated>2007-10-03T13:07:27.942-04:00</updated><title type='text'>Whodunnit?</title><content type='html'>&lt;p&gt;If your code is running in a Sql Server context (sproc, trigger, CLR assembly, etc.) and you wish to know who initiated the execution, you can try the T-SQL command SELECT SYSTEM_USER.&amp;nbsp; This will give you one of three answers:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;The Sql Server userid, if Sql Server Authentication was used to log in  &lt;li&gt;The Windows user in the form Domain\UserLoginName, if Windows Authentication was used to log in  &lt;li&gt;The name of the currently executing context&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Number three is interesting, because it masks the "real" user identifier behind a persona.&amp;nbsp; To change your context, issue the command&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;EXECUTE AS USER = 'Gsl\SierraServer'&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Then no matter who you are or how you logged in to the server, SELECT SYSTEM_USER will return "Gsl\SierraServer".&amp;nbsp; The BOL even calls it the "impersonated" context.&lt;/p&gt; &lt;p&gt;Not that customers would &lt;em&gt;&lt;strong&gt;ever&lt;/strong&gt;&lt;/em&gt; fiddle with sprocs or table schema or permissions that you carefully craft and install...&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-7069465407850488322?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/7069465407850488322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=7069465407850488322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7069465407850488322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7069465407850488322'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/whodunnit.html' title='Whodunnit?'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-9187845878785982754</id><published>2007-10-01T08:05:00.001-04:00</published><updated>2007-10-01T08:05:07.966-04:00</updated><title type='text'>Helper DLL for MSBuild</title><content type='html'>&lt;p&gt;In creating a new build, I found I needed a way to set an environment variable within the MSBuild script for subsequent use by a .BAT file.&amp;nbsp; On CodePlex, I found a project called &lt;a title="Codeplex project for PowerShell, et. al." href="http://www.codeplex.com/sdctasks" target="_blank"&gt;SDC Tasks Library&lt;/a&gt; that filled the bill and then some.&amp;nbsp; From the site:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This is the latest version of the SDC Tasks for .NET 2.0. The SDC Tasks are a collection of MSBuild tasks designed to make your life easier. You can use these tasks in your own MSBuild projects. You can use them stand alone and, if all else fails, you can use them as sample code. &lt;/p&gt; &lt;p&gt;&lt;br&gt;There are over 300 tasks included in this library including tasks for: creating websites, creating application pools, creating ActiveDirectory users, running FxCop, configuring virtual servers, creating zip files, configuring COM+, creating folder shares, installing into the GAC, configuring SQL Server, configuring BizTalk 2004 and BizTalk 2006 etc.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This used to be on GotDotNet (RIP) but is alive and well now on CodePlex.&amp;nbsp; To use this in your MSBuild script, put something like this at the top of the script:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;lt;UsingTask AssemblyFile="Microsoft.Sdc.Tasks.dll" TaskName = "Microsoft.Sdc.Tasks.SetEnvironmentVariable" /&amp;gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;When you need to use it...&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;lt;SetEnvironmentVariable Variable="MyEnvVar" Value = "$(BuildPathVar)\Bin" Target="Process"/&amp;gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The help file that comes with the .DLL is only a reference and seems to have no examples, but for some tasks, the usage is pretty clear.&amp;nbsp; As always Google is your friend for real-life examples.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-9187845878785982754?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/9187845878785982754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=9187845878785982754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/9187845878785982754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/9187845878785982754'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/10/helper-dll-for-msbuild.html' title='Helper DLL for MSBuild'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-3054861064546675025</id><published>2007-09-25T08:25:00.001-04:00</published><updated>2007-09-25T08:25:39.001-04:00</updated><title type='text'>Using Subversion from .NET</title><content type='html'>&lt;p&gt;&lt;a title="a .NET library for using Subversion" href="http://www.codeproject.com/useritems/subversion_using_dotsvn.asp" target="_blank"&gt;DotSVN&lt;/a&gt; is an Open Source .NET library that allows you to programmatically access a Subversion library.&amp;nbsp; While this is an interesting idea, what I found even more interesting was the article's graph showing the growth in usage of Subversion over the last 3.5 years.&amp;nbsp; The rate of adoption is dramatic, and this is just for public Apache servers!&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-3054861064546675025?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/3054861064546675025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=3054861064546675025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3054861064546675025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3054861064546675025'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/09/using-subversion-from-net.html' title='Using Subversion from .NET'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-5710734954992186953</id><published>2007-09-25T08:08:00.001-04:00</published><updated>2007-09-25T08:08:09.568-04:00</updated><title type='text'>A "weak" reason to invoke garbage collection</title><content type='html'>&lt;p&gt;Call GC.Collect() is generally considered unnecessary and can actually disrupt the smooth functioning of the .NET garbage collector.&amp;nbsp; Dennis Dietrich gives a scenario where it is reasonable to &lt;a title="Dennis &amp;quot;D.C.&amp;quot; Dietrich : A good reason for calling GC.Collect()" href="http://blogs.msdn.com/ddietric/archive/2007/09/23/a-good-reason-for-calling-gc-collect.aspx" target="_blank"&gt;call the garbage collector&lt;/a&gt; in your code.&amp;nbsp; His example outlines a situation where you want to test that all references to an object have been deleted at some point in the program so that the object can be garbage collected.&amp;nbsp; The catch-22 is if you maintain a reference to the object to see if it still exists, it cannot be collected.&lt;/p&gt; &lt;p&gt;Enter &lt;a title=".NET WeakReference class" href="http://msdn2.microsoft.com/en-us/library/system.weakreference.aspx" target="_blank"&gt;WeakReference&lt;/a&gt;.&amp;nbsp; This class allows you to maintain a reference to an object while letting it be collected if need be.&amp;nbsp; In the time between the object's destruction and its pickup by GC, a WeakReference allows you to continue to use the object.&amp;nbsp; Now continuing to use an object that's in limbo may seem like a bad idea, as the garbage man could drive by anytime.&amp;nbsp; But &lt;a href="http://msdn2.microsoft.com/en-us/library/ms404247.aspx" target="_blank"&gt;here's an interesting scenario&lt;/a&gt; where you may wish to keep a WeakReference so that you could have the possibility of turning it back into a strong reference (and thus keep the object from being collected).&lt;/p&gt; &lt;p&gt;In our testing case, we wish to do the opposite, make sure we &lt;em&gt;cannot&lt;/em&gt; continue to reference the object.&amp;nbsp; After GC.Collect() is called, we check the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.weakreference.isalive.aspx" target="_blank"&gt;IsAlive property&lt;/a&gt; of our WeakReference.&amp;nbsp; &lt;/p&gt; &lt;p&gt;On a side note, it's interesting that something so fragile implements ISerializable.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-5710734954992186953?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/5710734954992186953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=5710734954992186953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/5710734954992186953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/5710734954992186953'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/09/reason-to-invoke-garbage-collection.html' title='A &amp;quot;weak&amp;quot; reason to invoke garbage collection'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-5834789416632215288</id><published>2007-09-01T09:03:00.001-04:00</published><updated>2007-09-01T09:08:51.509-04:00</updated><title type='text'>Windows XP Commands</title><content type='html'>&lt;p&gt;In the process of looking up some cheat sheets, I found this &lt;a href="http://www.ss64.com/index.html"&gt;site&lt;/a&gt;.&amp;nbsp;&amp;nbsp; The SQL 2005 was what led me there, but this caught my eye, since a lot of guys at work use the command line.&amp;nbsp; There are things in here I had never heard of, much less used.&lt;/p&gt; &lt;p&gt;For example:&amp;nbsp; &lt;a href="http://www.ss64.com/nt/csvde.html"&gt;CSVDE&lt;/a&gt; Import or Export Active Directory data.&amp;nbsp; Wow.&amp;nbsp; I've used TRACERT quite a bit, but now there's also &lt;a href="http://www.ss64.com/nt/pathping.html"&gt;PATHPING&lt;/a&gt;.&amp;nbsp; If you are cmd junkie, check it out.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.ss64.com/nt/index.html"&gt;Windows XP Commands&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-5834789416632215288?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/5834789416632215288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=5834789416632215288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/5834789416632215288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/5834789416632215288'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/09/windows-xp-commands.html' title='Windows XP Commands'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-406192126112109768</id><published>2007-09-01T00:23:00.001-04:00</published><updated>2007-09-01T09:25:09.288-04:00</updated><title type='text'>TDD?  .NET 2.0 SP1??</title><content type='html'>&lt;p&gt;I recently started a new position where they use VS2005 and Test-Driven Development, which is something new to me.&amp;nbsp; At home I've been using VS2008 beta2, and it has been very solid.&amp;nbsp; So, I installed it side-by-side on my company laptop.&amp;nbsp; All of a sudden, one of the unit tests I was working with failed.&amp;nbsp; After a bit of digging, it turned out that it was related to the order of List&amp;lt;T&amp;gt;.Sort().&lt;/p&gt; &lt;p&gt;This particular unit test was for a custom IComparer that cared only about certain high-priority filename extensions.&amp;nbsp; The rest of the extensions were left essentially unsorted, and the filename portions were ignored.&amp;nbsp; The thing was, the unit test was expecting &lt;strong&gt;all &lt;/strong&gt;of the items sorted to be in a particular order.&amp;nbsp; When I put some debugging in, I found that order of two of the four "non-high-priority" extensions were swapped when I ran the test.&lt;/p&gt; &lt;p&gt;After some angst and some mild reproaches from my boss ("We usually use VPCs for installing beta software..."), I decided the best course of action was to repave the machine.&amp;nbsp; Later on, buried in a post about how garbage collection is changed in 3.5, I found a reference to "SP1 for the 2.0 framework"!&lt;/p&gt; &lt;p&gt;It kind of makes sense that something would need to be done to allow the new multi-targeting feature, but I had always thought everything was going to be pretty much the same in the 2.0 framework.&amp;nbsp; Turns out that's not exactly the case.&amp;nbsp; I didn't come to any conclusive evidence in short time I spent Reflectoring, but it's clear that something's different, since the size and date of mscorlib is different in 2.0 after 3.5 is installed.&lt;/p&gt; &lt;p&gt;In any event, I pointed out that the framework documentation for 2.0 (and all subsequent versions) says that a Quicksort algorithm is used, which &lt;em&gt;&lt;strong&gt;does not guarantee &lt;/strong&gt;&lt;/em&gt;that equals will remain in their original order.&amp;nbsp; I finally got a concession that perhaps the tests could be revised.&amp;nbsp; In doing so, I found out that the version control history showed that someone else had found the same problem and had simply changed the expected sort order to match what came up on that test machine!&lt;/p&gt; &lt;p&gt;As my first taste of Test-Driven Development, this was a bit&amp;nbsp;sour.&amp;nbsp; Shouldn't we be &lt;em&gt;thinking&lt;/em&gt; about what needs to be tested instead of just&amp;nbsp;writing any old thing?&amp;nbsp; In this case, it was testing that items inserted into the List&amp;lt;T&amp;gt; after an initial sort would also be sorted when you once again issued List&amp;lt;T&amp;gt;.Sort().&amp;nbsp; WTF?!?&amp;nbsp; If List&amp;lt;T&amp;gt;.Sort is broken and it's up to my puny unit test to find it, let's all just pack up and go home.&lt;/p&gt; &lt;p&gt;If&amp;nbsp;a test produces a "false failure", shouldn't we see if something needs to be revised instead of changing the test to match the new result??&amp;nbsp; If it's too much trouble to make sure the tests test what should be tested and have them run correctly, why do we do TDD?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-406192126112109768?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/406192126112109768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=406192126112109768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/406192126112109768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/406192126112109768'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/09/net-20-sp1.html' title='TDD?  .NET 2.0 SP1??'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-3013394704875128107</id><published>2007-07-27T08:36:00.001-04:00</published><updated>2007-07-27T08:47:48.943-04:00</updated><title type='text'>Goodbye, J# - We hardly knew ye.</title><content type='html'>I will shed tears not of sadness but of joy at the apparent disappearance of Visual J# from the list of languages to install in &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/default.aspx"&gt;Visual Studio 2008 beta 2&lt;/a&gt;.  I always use the Customize option of installations, even if only to see what's being installed.  If I see optional languages I will not need, I get rid of them.  If I see an environment I will not be using, I get rid of it.  I have no need of Visual J#, so why should I have to install it?  Yet VS2005 had complaints along the way when I tried to rid myself of it.  Now, perhaps, we are finally getting rid of a tool that only supports a now ancient version of Java and is thus likely to be useless in "converting" a Java programmer.&lt;br /&gt;&lt;br /&gt;Don't miss the &lt;a href="http://msdn2.microsoft.com/en-us/bb330936.aspx"&gt;samples page&lt;/a&gt; after you install.  There are some new and interesting items there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-3013394704875128107?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/3013394704875128107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=3013394704875128107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3013394704875128107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3013394704875128107'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/07/goodbye-j-we-hardly-knew-ye.html' title='Goodbye, J# - We hardly knew ye.'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-3410840896406068294</id><published>2007-07-05T13:49:00.000-04:00</published><updated>2007-07-05T15:33:38.673-04:00</updated><title type='text'></title><content type='html'>I'm still struggling with &lt;a href="http://showens.blogspot.com/2007/06/how-do-you-do-it.html"&gt;how to keep up&lt;/a&gt; and in which subject areas.  In the past couple of days I've encountered a number of sources of information related to this.  When a number of related things cross my path in short order, I pay attention.&lt;br /&gt;&lt;br /&gt;One was a blog from &lt;a href="http://www.sqlmag.com/Authors/AuthorID/58/58.html"&gt;Dan Moran&lt;/a&gt; a SQL Server specialist (or at least he stays right on top of SQL Server tech info).  His recent blog post &lt;a href="http://www.sqlmag.com/Articles/Index.cfm?ArticleID=96477&amp;DisplayTab=Article"&gt;The More Things Change&lt;/a&gt; references a much earlier one with a provocative title (&lt;a href="http://www.sqlmag.com/Article/ArticleID/7778/sql_server_7778.html"&gt;Can Generalists Handle Complex IT?&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Here's the thing that caught my eye:&lt;br /&gt;&lt;blockquote&gt;Back in the days of "Little House on the Prairie," Doc Baker did a good job of handling the medical needs of Walnut Grove. He was a great doctor for the time and knowledge available, but today I'd want to see a top specialist if I needed brain surgery. More and more, what’s considered a commonplace solution is the IT equivalent of brain surgery, but more often than not, the IT equivalent of general practitioners still do the work.&lt;/blockquote&gt;As a confirmed generalist by circumstance (almost all my jobs have been with very small IT departments or software companies) and temperment (high degree of curiosity about new tech, esp. software), I have to wonder...  &lt;br /&gt;&lt;br /&gt;Am I doing a service or disservice to my employer by trying to keep up?&lt;br /&gt;&lt;br /&gt;On the one hand, if there is literally nobody else who can handle, for example, keeping up with service packs and which ones to apply and when, should I take on this area?  Hiring a consultant at my current job (a non-profit) would be out of the question.  Who else will keep the wolves from the security door?&lt;br /&gt;&lt;br /&gt;On the other hand, if you become too much of a generalist, do you start to become unemployable?  If a company wants a consultant, will they look at someone who has good problem solving skills because of broad experience but not a great deal of in-depth experience in the job's skillset?  &lt;br /&gt;&lt;br /&gt;A generalist tends to know how to "get things done" but not all of the ins and outs of the best practices in the area.  Is it more important to focus on, let's say, ASP.NET and have little or no practical experience in WinForms?  In a bigger outfit, sure that works well.  They can hire specialists.  But even so, isn't there room for someone who has a larger vision of how something can be architected because of experience with mainframes, minis, and and VTAM as well as PCs, LANs and HTTP?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Another source was a Hanselminutes podcast, an &lt;a href="http://hanselminutes.com/default.aspx?showID=87"&gt;interview with Tim Ferriss&lt;/a&gt;, author of &lt;a href="http://thefourhourworkweek.com/"&gt;The 4-Hour Work Week&lt;/a&gt;.  One of his main thrusts is Simplify.  He has an assistant respond to much of his email, for instance.  When you really need to concentrate, reduce distractions - close your door, redirect your phone, turn off IM &amp; email.  The podcast is worth a listen, though if you turn up enough to hear Ferriss, you will be blown away by Scott.  (A little db metering before recording would be welcomed...)&lt;br /&gt;&lt;br /&gt;Web Worker Daily has a few items, &lt;a href="http://webworkerdaily.com/2007/01/28/open-thread-avoiding-infomania/"&gt;here&lt;/a&gt;, &lt;a href="http://webworkerdaily.com/2007/07/04/pulling-the-plug-on-information/"&gt;there&lt;/a&gt;, and &lt;a href="http://webworkerdaily.com/2007/03/04/bring-on-information-overload-its-good-for-you/"&gt;over here&lt;/a&gt;, which have a few tidbits of useful info.&lt;br /&gt;&lt;br /&gt;One of the more interesting writers on the subject in my brief confluence of influences is Christopher Hawkins, who has &lt;a href="http://www.christopherhawkins.com/07-15-2004.htm#30"&gt;written&lt;/a&gt; &lt;a href="http://www.christopherhawkins.com/07-02-2007.htm#129"&gt;several&lt;/a&gt; &lt;a href="http://www.christopherhawkins.com/07-04-2007.htm#130"&gt;times&lt;/a&gt; on the topic.  One of the quotes: &lt;blockquote&gt;Basically, if it's not helping me to secure or complete projects for my company, if it's not helping me to make money, if it's not improving my life in some way, it's mental clutter and it's out.&lt;br /&gt;&lt;/blockquote&gt;I can agree with this, but what if keeping up &lt;strong&gt;is&lt;/strong&gt; what helps your company make money?  And I think any techie will agree that lifetime learning is essential, whether or not you try to learn all or just some of what's going on.&lt;br /&gt;&lt;br /&gt;Finally, I stumbled across some encouraging items.  Perhaps I'm just adjusting to &lt;a href="http://saunderslog.com/2007/02/27/communications-underload-stowe-boyd/"&gt;The New Normal&lt;/a&gt;, which is where &lt;a href="http://webworkerdaily.com/2007/03/04/bring-on-information-overload-its-good-for-you/"&gt;overload is a Good Thing&lt;/a&gt; and &lt;a href="http://radar.oreilly.com/archives/2005/06/supernova_2005_2.html"&gt;Continuous Partial Attention&lt;/a&gt; is the order of the day.&lt;br /&gt;&lt;br /&gt;The one thing that is clear is that any tendency toward &lt;a href="http://en.wikipedia.org/wiki/Add"&gt;ADD&lt;/a&gt;, which many if not most techgeeks have, is exacerbated by infoloading (vs. carboloading, which we also do).  The danger is that you will flit from thing to thing without really absorbing any of it.&lt;br /&gt;&lt;br /&gt;My idea is to make a list of topics, turn off everything else, learn a significant amount about the first one.  Repeat as needed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-3410840896406068294?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/3410840896406068294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=3410840896406068294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3410840896406068294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3410840896406068294'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/07/im-still-struggling-with-how-to-keep-up.html' title=''/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-1073266584385827783</id><published>2007-06-16T17:36:00.000-04:00</published><updated>2007-06-16T17:48:33.582-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sadness'/><category scheme='http://www.blogger.com/atom/ns#' term='salesman&apos;s license'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Measuring the impact of the Sales Force</title><content type='html'>&lt;a href="http://odetocode.com/Blogs/scott/archive/2007/06/15/10974.aspx"&gt;K. Scott Allen&lt;/a&gt; solves a common problem for developers - how to define the impact of what salespeople do.&lt;br /&gt;&lt;br /&gt;I first became familiar with this phenomenon when working for a software development outfit. I really liked the salesman (singular), who taught me the term "Salesman's License". This refers to the fact that the customer is always right and can only be sold if the requested feature is "in the pipeline". He took some license with the current state of our products, based on what he thought we could do or were actually thinking about doing.&lt;br /&gt;&lt;br /&gt;Thanks for helping me find a vocabulary to talk about this issue! ;^)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-1073266584385827783?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/1073266584385827783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=1073266584385827783' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1073266584385827783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/1073266584385827783'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/06/measuring-impact-of-sales-force.html' title='Measuring the impact of the Sales Force'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-8688570486729161397</id><published>2007-06-16T11:06:00.000-04:00</published><updated>2007-06-16T11:21:23.337-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='information overload'/><title type='text'>How do you do it?</title><content type='html'>I'm beginning to crack.  I'm skimming more and more, compiling a few quick samples rather than building a useful app, adding more blogs than I drop on more and more subjects.  I know other people have expressed this, so....&lt;br /&gt;&lt;br /&gt;How do &lt;strong&gt;you&lt;/strong&gt; handle it?  It must be easier when, say, WCF development is your job.  You are surfing one of the first waves of a new technology.  I'm more of a generalist in my job.  I may have to handle "my system doesn't work" questions as well as "I need to know how many angels danced on the head of pin between June and December of last year".  Inbetween, I try to keep my mind alive by enhancing our main web app, writing a utility, or exploring new technologies. &lt;br /&gt;&lt;br /&gt;But my natural curiosity takes me too far, into too many areas.  It's just all so fascinating!  So, what do you do when it's not your job to keep up with technology but you crave doing it?  Do you use will-power and make yourself stick with a few things at a time?  Explore F# just up to the point that you know you could rewrite your query app in it, even if you don't actually do it? &lt;br /&gt;&lt;br /&gt;I've heard you &lt;em&gt;talk&lt;/em&gt; about the issue - what do you actually &lt;em&gt;do&lt;/em&gt; to handle information overload?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-8688570486729161397?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/8688570486729161397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=8688570486729161397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/8688570486729161397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/8688570486729161397'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/06/how-do-you-do-it.html' title='How do &lt;b&gt;you&lt;/b&gt; do it?'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-3822654887490602740</id><published>2007-06-16T10:51:00.000-04:00</published><updated>2007-06-16T11:06:30.710-04:00</updated><title type='text'>Netscape 9.0 beta</title><content type='html'>I started with Netscape long ago, before IE was actually out.  As IE started to compete, I stuck with NS (obviously at first, since IE was nothing much).  Even after IE became a browser and our company decided to become a "Microsoft shop" by entering into the Solution Provider program, I volunteered to test our apps with the "other browser". &lt;br /&gt;&lt;br /&gt;I stuck with it until the HR page of the new company I started with failed to register one of my kids for insurance, because a Microsoft-only feature did not show up when I used NS.   When I found out about Avant, I dropped NS and have not looked back until now.&lt;br /&gt;&lt;br /&gt;I've known that there was underground development of NS going on, but as IE7, Firefox 1.x and 2.x came out, it meant less and less.  Finally, I decided to try 9.0 beta, partly for nostalgia.&lt;br /&gt;&lt;br /&gt;Right away I was put off by the tab text refreshing at the same rate that .gifs and other elements were being downloaded.   This began to bother me so much visually that I uninstalled it.  That's rare for me, as I tend to the packrat end of the spectrum.&lt;br /&gt;&lt;br /&gt;I will probably try another version someday, but I'm not sure why NS is still going.   In skimming the features, I failed to see what they have that isn't being done well by someone else.  It's sad from a "good old days" point of view.  But only for a moment, as the firehose continues to pump.  Acropolis, Silverlight and DLR are adding to my already-crippling burden of things to track.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-3822654887490602740?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/3822654887490602740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=3822654887490602740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3822654887490602740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/3822654887490602740'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/06/netscape-90-beta.html' title='Netscape 9.0 beta'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-6640068089299799448</id><published>2007-05-30T11:06:00.000-04:00</published><updated>2007-05-30T11:23:24.925-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='file sharing'/><title type='text'>FolderShare</title><content type='html'>Here's something I've been using for some time now, and I think it's great - &lt;a href="http://www.foldershare.com"&gt;FolderShare&lt;/a&gt;. It's a way to selectively exchange files with users that &lt;strong&gt;you&lt;/strong&gt; invite (versus using a global P-to-P type of sharing where anyone can see your shared directory).&lt;br /&gt;&lt;br /&gt;It is owned by Microsoft now and is still in "beta" even after a couple of years, but it works without a hitch.  Almost.  (see below)&lt;br /&gt;&lt;br /&gt;I have a directory on both my home and work machines that are connected in a "library".  When I find an interesting utility that would be useful at home, I put a copy in that folder and the transfer happens automatically, in the background.   Naturally, the sending and receiving machines have to be running the FolderShare program, but I rarely turn off either machine.&lt;br /&gt;&lt;br /&gt;Not only that, but you can have multiple users sharing the same folder.  It's kind of like RSS for files, only you control who can 'subscribe' to the directory.&lt;br /&gt;&lt;br /&gt;One of the really nice things is that it works behind just about any firewall because it's port 80 based!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, the hitch.  In theory, you can visit the web site and browse another machine's shared directories (the site is password protected, of course).  If you click on a particular file, it will initiate a file transfer.  However, I have had only mixed success with this.  Sometimes it will just sit forever, sometimes it will timeout, sometimes you get the file.  Size (in this case) doesn't matter.&lt;br /&gt;&lt;br /&gt;And in my case, the chums who control the firewall have added this site to the blocked list under the category "Peer to peer sharing sites".  I've put in a request to have it unblocked, but it looks like they won't do it.  But the folder sharing auto-transfer feature is just great and works flawlessly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-6640068089299799448?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/6640068089299799448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=6640068089299799448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/6640068089299799448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/6640068089299799448'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/05/foldershare.html' title='FolderShare'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-7026847648438572714</id><published>2007-05-08T16:11:00.000-04:00</published><updated>2007-05-08T17:40:53.608-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Generation'/><category scheme='http://www.blogger.com/atom/ns#' term='MyGeneration'/><category scheme='http://www.blogger.com/atom/ns#' term='SubSonic'/><category scheme='http://www.blogger.com/atom/ns#' term='NHibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='DAL'/><category scheme='http://www.blogger.com/atom/ns#' term='ORM'/><title type='text'>What's so good about NHibernate?</title><content type='html'>I work with data quite a bit and am always &lt;strike&gt;a sucker for&lt;/strike&gt; on the lookout for new ORM/code generation tools to help automate cruds and queries. For a while now it has been MyGeneration d00dads. Free (always a good thing, since I work for a non-profit), fairly shallow learning curve, not too many quirks. But you never know when something better might be waiting for you Out There.&lt;br /&gt;&lt;br /&gt;I have seen several items lately, particularly from &lt;a href="http://ayende.com/Blog/archive/2007/05/04/NHibernate-1.2-Released.aspx"&gt;Ayende&lt;/a&gt; of course (I love the idea of &lt;a href="http://ayende.com/Blog/archive/2007/05/04/Bumbler-NHibernate-Dynamic--Interactive-Shell.aspx"&gt;Bumbler&lt;/a&gt;!) Sam considers it &lt;a href="http://codebetter.com/blogs/sam.gentile/archive/2007/05/07/new-and-notable-165.aspx"&gt;Noteable&lt;/a&gt;. In the past, he has also mentioned it in contrast to Microsoft's flagging ORM efforts as a Good Thing.&lt;br /&gt;&lt;br /&gt;Time to check it out. I go to &lt;a href="http://www.hibernate.org/343.html"&gt;NHibernate.org&lt;/a&gt; (or rather a page off of &lt;strong&gt;Hibernate.org&lt;/strong&gt;) and check out the &lt;a href="http://www.hibernate.org/362.html"&gt;Nhibernate Quick Start Guide&lt;/a&gt;. In five steps, the first of which you may not need (create a database), the last of which is really several steps to get the configuration and connection objects lashed up, you can begin firing at your database.&lt;br /&gt;&lt;br /&gt;The first few examples look good, such as:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;User newUser = new User();&lt;br /&gt;newUser.Id = "joe_cool";&lt;br /&gt;newUser.UserName = "Joseph Cool";&lt;br /&gt;newUser.Password = "abc123";&lt;br /&gt;newUser.EmailAddress = "joe@cool.com";&lt;br /&gt;newUser.LastLogon = DateTime.Now;&lt;br /&gt;session.Save(newUser); // commit all changes to the DB&lt;br /&gt;transaction.Commit();&lt;br /&gt;session.Close();&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Seems natural enough. Then we go down a bit to find&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Let's say you want to retrieve an object when you know the user ID (eg. During a login process to your site). Once a session is opened it's a one-liner; pass in the key and you're done:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// open another session to get the new user&lt;br /&gt;session = factory.OpenSession(); &lt;br /&gt;User joeCool = (User)session.Load(typeof(User), "joe_cool");&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Casting? Why are we casting?? Why not create an object of the type you want and get IntelliSense for its columns, properties, and methods? That's what the MyGeneration &lt;a href="http://www.mygenerationsoftware.com/portal/dOOdads/Overview/tabid/63/Default.aspx"&gt;d00dads architecture&lt;/a&gt; lets you do.  Here is their &lt;a href="http://www.mygenerationsoftware.com/portal/dOOdads/CUsage/tabid/53/Default.aspx"&gt;canonical example&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And what's up with all the code you have to write? One would assume that NH devotees use code generation for the class with its properties and the &lt;blech&gt;XML&lt;/blech&gt; mapping file that has to be embedded in your assembly.  But no mention of it in the quickstart.  If I thought I would have to do all that, I would give up right away.  (As it happens, MyGeneration has a template that does the class and .hbm.xml file.  If it didn't, I would surely be writing my own.)&lt;br /&gt;&lt;br /&gt;Now a lot of any ORM or DAL tool is what you get used to doing. If NH floats your boat, I won't try to argue you out of it.  But I'd love to know if anyone using NH has also tried something a bit more automated, perhaps even &lt;a href="http://codeplex.com/actionpack"&gt;SubSonic&lt;/a&gt;, which is starting to look &lt;strong&gt;&lt;em&gt;very&lt;/em&gt;&lt;/strong&gt; nice in v2.0. &lt;br /&gt;&lt;br /&gt;If you &lt;strong&gt;have&lt;/strong&gt; tried something else and still use NH, I'd love to know why.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-7026847648438572714?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/7026847648438572714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=7026847648438572714' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7026847648438572714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/7026847648438572714'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2007/05/whats-so-good-about-nhibernate.html' title='What&apos;s so good about NHibernate?'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-112203428702565303</id><published>2005-07-22T07:52:00.000-04:00</published><updated>2005-07-22T08:11:27.030-04:00</updated><title type='text'>Here's what's wrong with the Tablet PC</title><content type='html'>I have read numerous Tablet PC evangelists wondering why the Tablet PC has not taken off as many had hoped.   Here now, finally, is the answer:&lt;br /&gt;&lt;br /&gt;    Tablet PCs are just too slow.&lt;br /&gt;&lt;br /&gt;None of the current implementations have fast enough processors to be usable.  Mind you, I am in love with the idea of Tablet PCs.  In the healthcare world, they have great potential to make things both easier for the provider and more accessible.  I read white papers and testimonials from healthcare professionals and organizations saying how they have been used or how promising the idea is.&lt;br /&gt;&lt;br /&gt;But, as I play with the three that we have purchased in our organization (healthcare), I am frustrated that the mouse cursor cannot keep up with normal handwriting or pen  movement.  It's yet another case of the human having to make too much of a concession to the machine to get something done. &lt;br /&gt;&lt;br /&gt;As a programmer, I make concessions all the time.  I devise workarounds for tools that misbehave.  I translate data from one program's format to another format because the receiver or sender cannot accomodate the other.   All of us live with quirky operating systems that require special care and feeding.  I am willing to do these things because I like technology and enjoy making it work.&lt;br /&gt;&lt;br /&gt;My end users, on the other hand, have much less interest in fiddling with bits or pieces of hardware.  They could care less that they hold a wonderful but nascent technology in their hands.  They only know that "this thing doesn't work!".  When I create a solution for them, I try as much as possible to look at it from that viewpoint.  And when I pick up a Tablet and use it from that perspective, it just doesn't hold up. &lt;br /&gt;&lt;br /&gt;I bet if we could go somewhere over the 2Ghz range, the O/S could be responsive enough to make it truly what it was intended to be.  We're just so close, and I really want us to get there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-112203428702565303?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/112203428702565303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=112203428702565303' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/112203428702565303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/112203428702565303'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2005/07/heres-whats-wrong-with-tablet-pc.html' title='Here&apos;s what&apos;s wrong with the Tablet PC'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-112196330085525003</id><published>2005-07-21T12:15:00.000-04:00</published><updated>2005-07-21T12:28:20.863-04:00</updated><title type='text'>Tabbed browsing</title><content type='html'>What in the world is all the fuss about Firefox's tabbed browsing?  It's mystifying, as if nobody ever used Mozilla in the old days.  The tabbed browser extension in Mozilla  (was it Tabbrowser Preferences back then?) was so far and away better than it is in Firefox.  Of course, Firefox's tabbed browsing support by itself is so pitiful as to be enxt to useless compared to other options.&lt;br /&gt;&lt;br /&gt;I finally had to quit using Mozilla when there were too many important web sites I was required to visit that would not display properly.  I looked around in the IE wrapper world and came up with Avant Browser.  I have not looked back since.  All the tabbed goodness of the old Mozilla with the (for better or worse) engine of IE.  And the feature set of these wrapper apps (Maxthon is another) has not stagnated. &lt;br /&gt;&lt;br /&gt;How about being able to drag a new tab near other related tabs?  How about being able to duplicate a tab with or without its current history of pages?  What if you like multiple rows of tabs rather than one long one.   Firefox, even with Tabbrowser Preferences installed, keeps squeezing the width of the tabs until they are unreadable.  How unusable.&lt;br /&gt;&lt;br /&gt;Do yourself a favor.  Try Maxthon or Avant Browser (my choice).  Pick one.  Don't look back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-112196330085525003?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/112196330085525003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=112196330085525003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/112196330085525003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/112196330085525003'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2005/07/tabbed-browsing.html' title='Tabbed browsing'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14694934.post-112196171826518181</id><published>2005-07-21T11:53:00.000-04:00</published><updated>2005-07-21T12:04:05.803-04:00</updated><title type='text'>Notes from the firehose</title><content type='html'>It's not just me - there are more and more things going on these days in the universe of computing. A couple of years ago, I thought about diving into Java, and I did so for a couple of months. However, .NET has captured my fancy. And I do &lt;strong&gt;not&lt;/strong&gt; think you can do both. There are simply too many options popping up to be knowledgeable, much less expert, on everything.&lt;br /&gt;&lt;br /&gt;Even in one arena, there are things happening on multiple fronts. I feel like a beleaguered general with too few troops caught in an open plain with armies closing in on all sides.&lt;br /&gt;&lt;br /&gt;But, one must press on. I already try to keep up with far too many technical blogs. Every so often, I have to narrow my focus, weed out what's not of immediate value, and soldier on. It's fun, isn't it? :-)&lt;br /&gt;&lt;br /&gt;This corner of blogdom will report on my sips from the firehose.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14694934-112196171826518181?l=showens.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://showens.blogspot.com/feeds/112196171826518181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14694934&amp;postID=112196171826518181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/112196171826518181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14694934/posts/default/112196171826518181'/><link rel='alternate' type='text/html' href='http://showens.blogspot.com/2005/07/notes-from-firehose.html' title='Notes from the firehose'/><author><name>Steve Owens</name><uri>http://www.blogger.com/profile/02118424461074853518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://1.bp.blogspot.com/_YQ5PwXht-U8/SRxgj81TZpI/AAAAAAAAACg/ukh6Tr_IJ90/S220/Steve.Owens.jpg'/></author><thr:total>0</thr:total></entry></feed>
