<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://codebetter.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>James Kovacs</title><link>http://codebetter.com/blogs/james.kovacs/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><item><title>Speaking at the Regina .NET User Group</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/10/07/speaking-at-the-regina-net-user-group.aspx</link><pubDate>Wed, 08 Oct 2008 04:39:28 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:183705</guid><dc:creator>james.kovacs</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=183705</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/10/07/speaking-at-the-regina-net-user-group.aspx#comments</comments><description>&lt;p&gt;Just realized that I never announced it, but I will be giving a double-header presentation at the &lt;a href="http://www.reginadot.net/"&gt;Regina .NET User Group&lt;/a&gt; tomorrow night - &lt;strong&gt;Wednesday, October 8, 2008 from 5:30 to 8:30 pm&lt;/strong&gt;. You can find directions and registration &lt;a href="http://www.reginadot.net/Events/tabid/55/ctl/Details/Mid/422/ItemID/10/Default.aspx?selecteddate=08/10/2008"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Session 1: Taming Software Dependencies with Dependency Injection (DI) and Inversion of Control (IoC)&lt;/b&gt;    &lt;br /&gt;Software inevitably contains dependencies. Dependencies between classes. Dependencies between layers. Dependencies with third-party libraries. How can concepts like dependency inversion, dependency injection, and inversion of control help you tame your software dependencies? Where does an inversion of control container, such as Castle Windsor, come into the picture and do you need one? Can Binsor help you achieve convention over configuration? This session answers all these questions and more...    &lt;br /&gt;&lt;b&gt;Session 2: Achieving Persistence Ignorance with NHibernate&lt;/b&gt;    &lt;br /&gt;Object-relational persistence can be very complex and middle-tier code is often dominated by persistence concerns. Your Customer class probably contains more code related to loading and saving customers to the database than it does actual business rules about customers. Wouldn&amp;#39;t it be nice if you could remove all this persistence-related noise? This session examines why the concept of persistence ignorance is important and how to use NHibernate to build persistence ignorant domain models.&lt;/p&gt;  &lt;p&gt;I have a busy calendar of events in the next few months. I&amp;#39;ll post my other appearances in the next few days...&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=183705" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Presentations/default.aspx">Presentations</category></item><item><title>Three Shall Be the Number of the Counting</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/10/01/three-shall-be-the-number-of-the-counting.aspx</link><pubDate>Wed, 01 Oct 2008 20:09:26 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:183497</guid><dc:creator>james.kovacs</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=183497</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/10/01/three-shall-be-the-number-of-the-counting.aspx#comments</comments><description>&lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;   &lt;img height="159" alt="image" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/ThreeShallBetheNumberoftheCounting_C6F7/image_3.png" width="240" align="right" border="0" /&gt; &lt;strong&gt;A Reading from the Book of Armaments, Chapter 2, Verses 9 to 21&lt;/strong&gt; (&lt;a href="http://en.wikipedia.org/wiki/Holy_Hand_Grenade_of_Antioch"&gt;Wikipedia&lt;/a&gt; | &lt;a href="http://youtube.com/watch?v=KOoc5vw93Gs"&gt;YouTube&lt;/a&gt;):     &lt;p&gt;&lt;/p&gt;    &lt;p&gt;...And Saint Attila raised the hand grenade up on high, saying, &amp;quot;O Lord, bless this Thy hand grenade that with it Thou mayest blow Thine enemies to tiny bits, in Thy mercy.&amp;quot; And the Lord did grin and the people did feast upon the lambs and sloths and carp and anchovies and orangutans and breakfast cereals, and fruit bats and large chu... [At this point, the friar is urged by Brother Maynard to &amp;quot;skip a bit, brother&amp;quot;]... And the Lord spake, saying, &amp;quot;First shalt thou take out the Holy Pin, then shalt thou count to three, no more, no less. Three shall be the number thou shalt count, and the number of the counting shall be three. Four shalt thou not count, neither count thou two, excepting that thou then proceed to three. Five is right out. Once the number three, being the third number, be reached, then lobbest thou thy Holy Hand Grenade of Antioch towards thy foe, who being naughty in my sight, shall snuff it.&amp;quot;&amp;#160; -- Monty Python&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And this shall be &lt;a href="https://mvp.support.microsoft.com/profile/James.Kovacs"&gt;my third year as a MVP&lt;/a&gt;. I received the official email from Microsoft this morning notifying me that I have been re-awarded. Congratulations to everyone else who was awarded or re-awarded today! A special call-out to some very deserving first-time MVPs... &lt;a href="http://flux88.com/"&gt;Ben Scheirman&lt;/a&gt;, &lt;a href="http://jessicammoss.blogspot.com/"&gt;Jessica Moss&lt;/a&gt;, and &lt;a href="http://devlicio.us/blogs/derik_whittaker/"&gt;Derik Whittaker&lt;/a&gt;. I look forward to another fun-filled year of mischief, mayhem, and software development!&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=183497" width="1" height="1"&gt;</description></item><item><title>New Laptop Arriving Soon</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/09/21/new-laptop-arriving-soon.aspx</link><pubDate>Mon, 22 Sep 2008 03:07:46 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:183113</guid><dc:creator>james.kovacs</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=183113</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/09/21/new-laptop-arriving-soon.aspx#comments</comments><description>&lt;p&gt;Since Hamilton &lt;a href="http://hammett.castleproject.org/?p=320"&gt;called me out&lt;/a&gt;, I thought I should comment on my recent tribulations around a new laptop. (For those of you wondering, Twitter is unlike Las Vegas. What you say on Twitter doesn&amp;#39;t stay in Twitter.) :) I&amp;#39;m in the market for a new laptop as my Dell D820 is giving me problems. The battery life is currently around 2 minutes. (The 9-cell battery, which initially got 8 hours run-time, is quite near death after only 2-1/2 years of use - mostly plugged in.) The replacement battery was going to cost over $300, but wouldn&amp;#39;t solve the lack of hard drive space, the need for more memory, or the slow processor. (The system is 2-1/2 years old, which is ancient for a developer laptop.) Heck, a new D830 with similar specs to my D820 would have cost less than $1000, which isn&amp;#39;t that much more than the battery!&lt;/p&gt;  &lt;p&gt;I was seriously considering a MacBook Pro, likely running Vista. (I know. Blasphemy!) The MBP was very tempting, but the price was steep for something I would consider developer-grade. As Hamilton noted, over $3000 for decent, but not stellar components. I was close to buying the Dell E6500, but the poorly-rated NVidia Quadro 160M put me off. (I&amp;#39;ve had Quadro chips before. They are awful for anything other than CAD/CAM. Want to flake out with the occasional game while on the road? Forget it with a Quadro chip.) Another serious contender was an Alienware m15x, but loaded with developer-grade goodies pushed the price well above $3200 CAD. The systems are built in Miami, FL and I didn&amp;#39;t get the warm fuzzies when I talked to their sales department. I got the distinct impression that any serious problem would require return to Miami for service, which isn&amp;#39;t acceptable for a business laptop, IMHO. Still there is a coolness factor to the Alienware systems.&lt;/p&gt;  &lt;p&gt;I&amp;#39;ve never considered myself a &amp;quot;ThinkPad&amp;quot; guy, but when I saw the specs of the &lt;a href="http://shop.lenovo.com/SEUILibrary/controller/e/webca/LenovoPortal/en_CA/catalog.workflow:category.details?current-catalog-id=12F0696583E04D86B9B79B0FEC01C087&amp;amp;current-category-id=20DB7E6DF951424DA89F8E1557682BB1"&gt;T500&lt;/a&gt; plus the price, I jumped at it. For $2K CAD (including tax and shipping), I got a 2.8GHz Core 2, 4GB RAM, Radeon 3650, and a bunch of other goodies. The one downside is that the largest 7200rpm hard drive available on this model is 160 GB. I can always replace it later if needed. One great feature is the dual video cards - an integrated Intel X4500 and the ATI Mobility Radeon 3650. You can switch between the cards without rebooting and reviews indicate that going to integrated adds about 1.5 hours to your battery life, which is already around 4.5 hours. The screen is 15.4&amp;quot; widescreen at 1680x1050 - same as the Dell D820 that I&amp;#39;m replacing. (I&amp;#39;ve had a 15.4&amp;quot; 1920x1200 and it hurt my eyes. I run my 24&amp;quot; Acer X243W monitors at 1920x1200, which is awesome.) I considered laptops with 17&amp;quot; screens, but they&amp;#39;re quite heavy and unusable in airplanes. (My friend, John Bristowe, told me, &amp;quot;Sure, you can use a 17&amp;quot; in an airplane. You just kind of angle it right and type on your chest.&amp;quot; Uh, yeah...) Hamilton&amp;#39;s description of &amp;quot;a hundred LEDs blinking in your face&amp;quot; worries me, but it&amp;#39;s already ordered. I await the T500 with expectation and trepidation. I&amp;#39;ll let you know my impressions once I receive it.&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=183113" width="1" height="1"&gt;</description></item><item><title>I Cry UNCLE!!!</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/09/07/i-cry-uncle.aspx</link><pubDate>Mon, 08 Sep 2008 04:22:25 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:182615</guid><dc:creator>james.kovacs</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=182615</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/09/07/i-cry-uncle.aspx#comments</comments><description>&lt;p&gt;Alright, alright. I give in. I&amp;#39;m finally twittering along with the rest of the planet. You can find me here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/JamesKovacs"&gt;http://twitter.com/JamesKovacs&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can expect witty banter, scintillating insights, and breathtaking news bites... 140 characters at a time.&lt;/p&gt;  &lt;p&gt;If you&amp;#39;re looking for a good Twitter client and you&amp;#39;re running Windows, I would recommend &lt;a href="http://code.google.com/p/wittytwitter/"&gt;Witty&lt;/a&gt;, a free WPF-based Twitter client. Very pretty, very functional, and very non-intrusive. Highly recommended. There is even a &lt;a href="http://keithelder.net/software/witty/witty.application"&gt;ClickOnce installer&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=182615" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Miscellaneous/default.aspx">Miscellaneous</category></item><item><title>Survey Says!</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/09/07/survey-says.aspx</link><pubDate>Mon, 08 Sep 2008 04:06:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:182614</guid><dc:creator>james.kovacs</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=182614</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/09/07/survey-says.aspx#comments</comments><description>&lt;p&gt;&lt;img height="172" alt="image" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/Survey_12935/image_3.png" width="240" align="right" border="0" /&gt; A big thank you to everyone who completed the &lt;a href="http://www.jameskovacs.com/blog/SeatsAvailableObjectRelationalMappingWithNHibernate.aspx"&gt;ORM with NHibernate survey&lt;/a&gt;. The results have provided me with a lot of food for thought with respect to organizing future courses. Some answers were expected while others were surprising. Rather than bore you with the details, let me get to what you really want to know... Who won the &lt;a href="http://www.jetbrains.com/resharper/"&gt;JetBrains ReSharper&lt;/a&gt; license? Using an advanced combination of digital and analog randomization technologies (e.g. I printed out the list and pulled one out of a hat), the winner is Brett Baggott of Nashville, TN. Congratulations, Brett. In the words of Obi-Wan Kenobi, &amp;quot;Use it wisely...&amp;quot;&lt;/p&gt;  &lt;p&gt;In other news... The Castle Project PMC has selected its winner for &lt;a href="http://www.jameskovacs.com/blog/TheGreatNHibernateCastleGiveaway.aspx"&gt;The Great NHibernate/Castle Giveaway&lt;/a&gt;. Drum roll please... The winner is Markus Zywitza of Aarbergen, Germany. Markus has received Visual Studio Team Suite with MSDN Premium. Asked why he was chosen, he humbly suggested many other project contributors more deserving than himself, but added this explanation.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;My involvement of Castle began some 18 month ago as a user. My main involvement with Castle is documentation and small enhancements and bug fixes. Writing docs is a structured approach to learning for me, and I am willing to share what I create through learning. I guess that was the reason for the PMC to select me, as the documentation has been neglected lately.&lt;/p&gt;    &lt;p&gt;-- Markus&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The NHibernate team is still debating the most deserving recipient. (I&amp;#39;ll remind them again in another week or two...) Fabio Maulo - the current project lead - has received his subscription after a bit of work on my part. (I unilaterally decided that the third should go to Fabio, as I mentioned in the original announcement.) I would like to offer a huge thanks to an unexpected person. First let me give you a bit of background. I sent Fabio his license activation code, but it didn&amp;#39;t work as the code turned out to be valid only in Canada/USA. (Fabio lives in Buenos Aires, Argentina.) I contacted MANY people at Microsoft to see what could be done. No one could solve the problem of getting Fabio a license key. As a last resort, I emailed &lt;a href="http://www.microsoft.com/presspass/exec/somasegar/default.aspx"&gt;S. Somasegar&lt;/a&gt;, Senior VP of DevDiv, himself asking for his assistance to solve the problem. That was on a Thursday. I didn&amp;#39;t expect an answer. The guy is a senior VP and I&amp;#39;m a lowly MVP. Plus I was giving the license to the project lead of NHibernate and DevDiv was in the midst of finalizing Entity Framework v1. (I didn&amp;#39;t expect that to have any bearing, but you never know. Conspiracy theorists eat up this type of stuff.) On Monday - just two business days later - I received a personal email from Soma himself informing me that he was getting the issue resolved and apologizing for the confusion around the licenses! Sure enough, James Rice and Manuel Hernandez contacted me and Fabio. They got the license sorted out in short order. So a huge thanks to &lt;a href="http://blogs.msdn.com/somasegar/"&gt;Soma&lt;/a&gt; for his responsiveness and his support of the .NET community.&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=182614" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Miscellaneous/default.aspx">Miscellaneous</category></item><item><title>A View from a Fishbowl</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/08/16/a-view-from-a-fishbowl.aspx</link><pubDate>Sat, 16 Aug 2008 14:02:54 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:182006</guid><dc:creator>james.kovacs</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=182006</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/08/16/a-view-from-a-fishbowl.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://altnetconfcanada.com"&gt;ALT.NET Canada&lt;/a&gt; kicked off last night and was great fun. Bil has some initial coverage &lt;a href="http://weblogs.asp.net/bsimser/archive/2008/08/16/alt-net-canada-day-1-immersion.aspx"&gt;here&lt;/a&gt; complete with video. Mo Khan discusses &lt;a href="http://mokhan.ca/blog/2008/08/16/The+FUNduhMENTALs.aspx"&gt;his take&lt;/a&gt; on the fishbowl topic, &amp;quot;Why are fundamentals important?&amp;quot; I wanted to take a few paragraphs and give my two cents on the topic.&lt;/p&gt;  &lt;p&gt;The fishbowl last night got too hung up on the particulars. The point that I personally wanted to make was that fundamentals are more important than APIs/technologies because fundamentals give you a framework within which to understand any API or technology. That&amp;#39;s not to say that specific technologies aren&amp;#39;t important. You won&amp;#39;t get too far in the .NET world not knowing the BCL. :) &lt;/p&gt;  &lt;p&gt;I&amp;#39;m not a crotchety old programmer who is going to insist that you learn everything that I know about software &amp;quot;because I had to walk 2 km to school every day through blowing snow uphill - both ways!&amp;quot; I don&amp;#39;t expect you to (and wouldn&amp;#39;t want you to) spend years writing C++ code to understand just how bloody hard it is to get pointers right or manage memory. (Do I need a *&amp;amp; or an &amp;amp;* here? And is that one * or two **? If you don&amp;#39;t know what I&amp;#39;m talking about be thankful. Waste of brain cycles.)&lt;/p&gt;  &lt;p&gt;As far as what I consider fundamental... OO and design patterns, definitely. But also high level knowledge of CPUs, memory, disk, and network. The fundamental building blocks upon which all software and hardware is created. (Working at a high level of abstraction is fantastic and much more productive, but even when working at such a high level, you need to understand - to pick an arbitrary example - that durable transactions require disk I/O and that disk I/O is an eternity in processor cycles.) You should also be familiar with Big-O notation, data structures, and algorithms. You should understand the services provided by a managed runtime (.NET, Java, etc.).&lt;/p&gt;  &lt;p&gt;Are you a bad programmer because you don&amp;#39;t know how to implement a red-black tree from memory? Absolutely not. (I don&amp;#39;t personally remember either!) But you&amp;#39;re a good programmer for knowing that there are more data structures out there than an array. You have the fundamental knowledge to try solving problems in a myriad different ways.&lt;/p&gt;  &lt;p&gt;Programming languages, runtimes, and APIs come and go. If you only understand those, you have a steep learning curve to climb every time technology changes - and it does. The fundamentals will always serve you well regardless of the technologies involved.&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=182006" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Events/default.aspx">Events</category></item><item><title>Why Developers Are Interested in REST</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/08/08/why-developers-are-interested-in-rest.aspx</link><pubDate>Fri, 08 Aug 2008 18:59:06 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:181746</guid><dc:creator>james.kovacs</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=181746</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/08/08/why-developers-are-interested-in-rest.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m doing some WCF work for a client, specifically around WS-Security. I stumbled upon the System.ServiceModel.MessageSecurityVersion class today. Its static properties alone should explain why developers are craving simpler technologies like REST...&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.messagesecurityversion.wssecurity10wstrust13wssecureconversation13wssecuritypolicy12basicsecurityprofile10.aspx"&gt;WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.messagesecurityversion.wssecurity10wstrustfebruary2005wssecureconversationfebruary2005wssecuritypolicy11basicsecurityprofile10.aspx"&gt;WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.messagesecurityversion.wssecurity11wstrust13wssecureconversation13wssecuritypolicy12.aspx"&gt;WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.messagesecurityversion.wssecurity11wstrust13wssecureconversation13wssecuritypolicy12basicsecurityprofile10.aspx"&gt;WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.messagesecurityversion.wssecurity11wstrustfebruary2005wssecureconversationfebruary2005wssecuritypolicy11.aspx"&gt;WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.messagesecurityversion.wssecurity11wstrustfebruary2005wssecureconversationfebruary2005wssecuritypolicy11basicsecurityprofile10.aspx"&gt;WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=181746" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Miscellaneous/default.aspx">Miscellaneous</category></item><item><title>Seats Available: Object-Relational Mapping with NHibernate</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/07/31/seats-available-object-relational-mapping-with-nhibernate.aspx</link><pubDate>Thu, 31 Jul 2008 23:30:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:181463</guid><dc:creator>james.kovacs</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=181463</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/07/31/seats-available-object-relational-mapping-with-nhibernate.aspx#comments</comments><description>
&lt;p&gt;This is a friendly public service announcement that seats are still available for my &lt;i&gt;&lt;/i&gt;&lt;a href="http://www.jameskovacs.com/blog/CourseAnnouncementObjectRelationalMappingWithNHibernate.aspx"&gt;Object-Relational Mapping with NHibernate course&lt;/a&gt;. The three-day course is being offered in Calgary running from Tuesday, August 26, 2008 to Thursday, August 28, 2008. You can find the full course announcement &lt;a href="http://www.jameskovacs.com/blog/CourseAnnouncementObjectRelationalMappingWithNHibernate.aspx"&gt;here&lt;/a&gt; with instructions on how to register. If you are a company or group of individuals, please contact me directly at &lt;a href="mailto:jkovacs@post.harvard.edu"&gt;jkovacs@post.harvard.edu&lt;/a&gt; about a group discount.&lt;/p&gt;
  
&lt;p&gt;I am currently planning future public offerings of the course and would like your feedback on where, when, how much, ... I would appreciate it if you could take a few minutes to complete a short survey. As a thank you for your time, I will randomly pick one respondent to receive a copy of JetBrains ReSharper 4.0 Personal Edition. (N.B. The survey is limited to the first 100 respondents.)&lt;/p&gt;
 
&lt;p&gt; &lt;a href="http://www.polldaddy.com/s/BF9BFDF71E6E7FE0/"&gt;Take &lt;i&gt;ORM with NHibernate Course&lt;/i&gt; Survey&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The survey is now closed. The winner of the JetBrains ReSharper license has been contacted. Thank you to everyone who participated.&lt;/p&gt;
&lt;img src="http://codebetter.com/aggbug.aspx?PostID=181463" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Courses/default.aspx">Courses</category></item><item><title>.NET Rocks #362: James Kovacs Inverts Our Control!</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/07/28/net-rocks-362-james-kovacs-inverts-our-control.aspx</link><pubDate>Tue, 29 Jul 2008 05:20:31 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:181303</guid><dc:creator>james.kovacs</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=181303</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/07/28/net-rocks-362-james-kovacs-inverts-our-control.aspx#comments</comments><description>&lt;p&gt;I had the pleasure of appearing on &lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=362"&gt;.NET Rocks #362&lt;/a&gt;. I talked to Carl and Richard about dependency inversion, dependency injection, and inversion of control. A lot of what we talked about I also wrote about in my MSDN article, &lt;a href="http://msdn.microsoft.com/en-ca/magazine/cc337885.aspx"&gt;Loosen Up: Tame Your Software Dependencies for More Flexible Apps&lt;/a&gt;. Here&amp;#39;s the summary of the show, which I had absolutely no input into whatsoever:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;James Kovacs talks about the Castle Windsor project, and gives the clearest definitions of Inversion of Control (IOC) containers, Dependency Injection, and the reasons why we need to think about these techniques. Critical listening for all .NET developers.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I believe that I owe them both a beer next time I see them for such flattering remarks. &lt;img alt="smile_embaressed" src="http://spaces.live.com/rte/emoticons/smile_embaressed.gif" /&gt;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=181303" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Podcast/default.aspx">Podcast</category></item><item><title>Subversion Turns 1.5</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/07/04/subversion-turns-1-5.aspx</link><pubDate>Fri, 04 Jul 2008 22:49:03 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180346</guid><dc:creator>james.kovacs</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=180346</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/07/04/subversion-turns-1-5.aspx#comments</comments><description>&lt;p&gt;Given the number of developers using Subversion, I&amp;#39;m surprised that no one on my blogroll has mentioned the new Subversion clients released in the last few weeks. &lt;a href="http://subversion.tigris.org"&gt;Subversion&lt;/a&gt;, &lt;a href="http://tortoisesvn.tigris.org"&gt;TortoiseSVN&lt;/a&gt;, and &lt;a href="http://www.visualsvn.com/visualsvn/"&gt;VisualSVN&lt;/a&gt; have all synchronized their version numbers on v1.5. I&amp;#39;ll talk about TortoiseSVN and Subversion changes. VisualSVN has some minor enhancements that basically expose the features introduced by Subversion 1.5. I&amp;#39;ll leave you to investigate them yourself.&lt;/p&gt;  &lt;h2&gt;TortoiseSVN&lt;/h2&gt;  &lt;p&gt;Let&amp;#39;s talk &lt;a href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/a&gt;... You can get the new client from &lt;a href="http://tortoisesvn.net/downloads"&gt;here&lt;/a&gt;. N.B. If you&amp;#39;re running 64-bit Windows (XP, Vista, or Server 2003/2008), make sure you grab the 64-bit installer. Shell extensions run directly inside Windows Explorer, which on 64-bit Windows is a 64-bit process. So you don&amp;#39;t get any WoW (Windows-on-Windows) goodness that allows 32-bit executables to run on 64-bit Windows.&lt;/p&gt;  &lt;h3&gt;New Overlays&lt;/h3&gt;  &lt;p&gt;The most noticeable change is the new overlay icons.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="468" alt="image" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/SubversionTurns1.5_BB6B/image_3.png" width="696" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;Unversioned and ignored files now have their own overlays, which I find especially useful.&amp;#160; The problem in the past was that Windows only has 12 overlay slots available.&amp;#160; These slots could be easily exhausted if you had multiple shell extensions installed, such as TortoiseSVN and TortoiseCVS.&amp;#160; Tortoise clients now have a common overlay handler, which somewhat mitigates this problem.&lt;/p&gt;  &lt;p&gt;&lt;img height="213" alt="image" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/SubversionTurns1.5_BB6B/image_0b7810ef-35b2-41d0-9af7-27eaf684f0f6.png" width="425" border="0" /&gt;&lt;/p&gt;  &lt;h3&gt;Delete Unversioned Files&lt;/h3&gt;  &lt;p&gt;Over time, working copies tend to get crufty - at least mine do. I end up having extra unversioned files and directories - from tools, builds, half-implemented refactorings that you think better of - littering your working copy. Every once in awhile, I would just grab a clean working copy and delete the old. I then went to the trouble of creating PowerShell script to clean up my working copy. Now TortoiseSVN 1.5 includes this feature. Simply SHIFT-right click in your working copy and select &amp;quot;Delete unversioned items&amp;quot; from the context menu.&amp;#160; N.B. This option only appears if you hold down SHIFT.&lt;/p&gt;  &lt;p&gt;&lt;img height="801" alt="image" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/SubversionTurns1.5_BB6B/image_c481ee60-b584-4b60-a828-a78e5364b93a.png" width="696" border="0" /&gt; &lt;/p&gt;  &lt;h3&gt;Other Improvements&lt;/h3&gt;  &lt;p&gt;The repository browser has also been completely reworked.&amp;#160; It now shows a two pane view similar to Windows Explorer.&lt;/p&gt;  &lt;p&gt;&lt;img height="448" alt="image" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/SubversionTurns1.5_BB6B/image_cfc3b1cc-4781-4ae9-98c4-ee62a1dda410.png" width="696" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;The revision graph has also been rewritten and is much easier to use.&lt;/p&gt;  &lt;p&gt;&lt;img height="468" alt="image" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/SubversionTurns1.5_BB6B/image_f64269df-ba4e-421d-9c14-0239a1953cc7.png" width="648" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Client-side caching has been improved, making TortoiseSVN more responsive. Merging has improved. Changelists have been added. Lots of new features. You can read the &lt;a href="http://tortoisesvn.tigris.org/tsvn_1.5_releasenotes.html"&gt;release notes&lt;/a&gt; for more information.&lt;/p&gt;  &lt;h2&gt;Subversion&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://subversion.tigris.org"&gt;Subversion&lt;/a&gt; has made a lot improvements, which can be found in the &lt;a href="http://subversion.tigris.org/svn_1.5_releasenotes.html"&gt;release notes&lt;/a&gt;. If you&amp;#39;re just running TortoiseSVN, you don&amp;#39;t need to install the Subversion binaries. TortoiseSVN includes the SVN libraries. You only need the Subversion client and/or server if:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;You want to use Subversion from the command line via svn.exe and/or svnadmin.exe either directly or in scripts. &lt;/li&gt;    &lt;li&gt;You are running a server using svnserve (svn://) or Apache (http:// or https://). &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;You can download the Windows client and/or server from a few different places, each with advantages and disadvantages:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.collab.net/downloads/subversion/"&gt;CollabNet&lt;/a&gt; - On the positive side, the MSI installer is quick to get you up and running. It adds svn.exe to your path and, if you install the server, you can select between svnserve.exe (svn://) and Apache (http:// or https://) easily. On the downside, you have to register on the CollabNet site and the downloaded binaries do not include support for Berkley DB, only FSFS. FSFS is the default for new repositories, but if you&amp;#39;ve got some older repositories around, they&amp;#39;re probably BDB. The CollabNet binaries complain bitterly about BDB repositories: &amp;quot;svnadmin: Failed to load module for FS type &amp;#39;bdb&amp;#39;&amp;quot;. Honestly I would recommend staying away from this package. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100"&gt;Tigris&lt;/a&gt; - Scroll down to svn-win32-1.5.0.zip and grab that. It includes both FSFS and BDB support, but you&amp;#39;re on your own configuring svnserve.exe. It&amp;#39;s not that hard and I document the steps &lt;a href="http://www.jameskovacs.com/blog/InstallingSubversionAsAWindowsService.aspx"&gt;here&lt;/a&gt;. This package is great if you just want to run svnserve.exe to access your repositories via svn://. If you want to run Apache to enable access your repositories over http:// and https://, you&amp;#39;re on your own to download and configure Apache. If you want to do that, then I recommend... &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.visualsvn.com/server/"&gt;VisualSVN Server&lt;/a&gt; - Although VisualSVN (the Visual Studio add-in) is a commercial product, VisualSVN Server is completely free. This is the easiest way to get a Subversion server up and running with Apache. You can go from a clean Windows box to a working Subversion server in under 10 minutes. As an added bonus, it includes a MMC management console. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Upgrading the Repository Format (optional)&lt;/h3&gt;  &lt;p&gt;Although Subversion 1.5 can work with older repository formats, some of the new features, such as merge tracking, require you to upgrade your repository to the latest format. (See &amp;quot;Compatbility Concerns&amp;quot; in the &lt;a href="http://subversion.tigris.org/svn_1.5_releasenotes.html"&gt;release notes&lt;/a&gt; for full information regarding required client, server, and repository versions for various features.) Subversion will not upgrade your repository automatically. If you want to use the new features requiring a repository upgrade, you must run the following command:&lt;/p&gt;  &lt;pre&gt;svnadmin upgrade &amp;lt;PATH_TO_REPO&amp;gt;&lt;/pre&gt;

&lt;p&gt;where &amp;lt;PATH_TO_REPO&amp;gt; is the physical path and not a URL.&lt;/p&gt;

&lt;p&gt;If you need to upgrade a lot of repositories and you&amp;#39;ve got PowerShell installed, you can do the following (assuming your repository root is c:\SrcRepos):&lt;/p&gt;

&lt;pre&gt;cd \SrcRepos
dir -name | foreach { svnadmin upgrade $_ }&lt;/pre&gt;

&lt;h2&gt;Cyrus SASL and NTLM&lt;/h2&gt;

&lt;p&gt;TortoiseSVN and svnserve now include Cyrus &lt;a href="http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer"&gt;SASL&lt;/a&gt; (Simple Authentication and Security Layer) support, which allows you to use a variety of authentication/encryption mechanisms, most importantly for Windows users - NTLM and Kerberos. Subversion clients and servers prior to 1.5 only support ANONYMOUS and CRAM-MD5. You&amp;#39;ll need to be running v1.5 on both sides of the wire to use the other protocols. The ZIP package from Tigris includes NTLM, but not Kerberos. If you want to use Kerberos, you&amp;#39;ll have to download saslGSSAPI.dll and add it to your sasl-plugins directory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; I spent the better part of an afternoon trying to get svnserve.exe authenticating against the local Security Account Metabase (SAM) without success. (i.e. Using local Windows accounts to authenticate Subversion users.) The documentation is sparse to non-existent. I was able to get SASL to read its configuration and load the NTLM plug-in, but I could never successfully authenticate. Even with the correct username/password, it just prompted me again. It could be a problem with SASL defaulting to NTLMv1, which Vista disables by default for security reasons. If I figure out how to make this work, I&amp;#39;ll post a solution...&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=180346" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Tools/default.aspx">Tools</category></item><item><title>IT'S ALIVE!!! ALT.NET Canada Open Spaces Registration Is Open</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/07/01/it-s-alive-alt-net-canada-open-spaces-registration-is-open.aspx</link><pubDate>Tue, 01 Jul 2008 06:00:55 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180110</guid><dc:creator>james.kovacs</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=180110</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/07/01/it-s-alive-alt-net-canada-open-spaces-registration-is-open.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/ITS.NETCanadaOpenSpacesRegistrationIsOpe_1495E/Canada_flag_halifax_9_-04.jpg"&gt;&lt;img height="180" alt="Canada_flag_halifax_9_-04" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/ITS.NETCanadaOpenSpacesRegistrationIsOpe_1495E/Canada_flag_halifax_9_-04_thumb.jpg" width="240" align="right" border="0" /&gt;&lt;/a&gt;What better way to celebrate Canada Day than to announce that registration is now open for the &lt;a href="http://altnetconfcanada.com"&gt;ALT.NET Canada Open Spaces&lt;/a&gt;? The event is happening in Calgary, Alberta on August 15 to 17, 2008 at the &lt;a href="http://www.ucalgary.ca/"&gt;University of Calgary&lt;/a&gt;&amp;#39;s &lt;a href="http://www.macewancentre.com/"&gt;MacEwan Conference Centre&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://altdotnet.org"&gt;ALT.NET&lt;/a&gt; is not about being alternative, but about considering alternatives and choosing the best approach for your project - be that a product from Redmond, open source software, or a commercial third-party library. The conference brings together bright minds in our industry to discuss more effective ways to develop software and solve real business problems.&lt;/p&gt;  &lt;p&gt;We&amp;#39;re honoured to have &lt;a href="http://www.stevenlist.com/"&gt;Steven &amp;quot;Doc&amp;quot; List&lt;/a&gt; facilitating the Open Space. (Doc facilitated both the &lt;a href="http://altnetconf.com"&gt;Austin&lt;/a&gt; and &lt;a href="http://altdotnet.org/events/seattle"&gt;Seattle&lt;/a&gt; ALT.NET Open Space events.) If you&amp;#39;re not familiar with the Open Spaces concept, you can read about &lt;a href="http://altnetconfcanada.com/openspaces/index.castle"&gt;How Open Spaces Works&lt;/a&gt;. It&amp;#39;s not your typical conference. Prepare to be surprised.&lt;/p&gt;  &lt;p&gt;The event is being organized by &lt;a href="http://codebetter.com/blogs/kyle.baley/"&gt;Kyle &amp;quot;Living in the Bahamas is Tough&amp;quot; Baley&lt;/a&gt;, &lt;a href="http://www.jameskovacs.com"&gt;James &amp;quot;That&amp;#39;s Godfather to You&amp;quot; Kovacs&lt;/a&gt;, &lt;a href="http://www.solidhouse.com"&gt;Dave &amp;quot;Goats are Cool&amp;quot; Woods&lt;/a&gt;, &lt;a href="http://www.igloocoder.com/"&gt;Donald &amp;quot;Where&amp;#39;s My Scotch&amp;quot; Belcham&lt;/a&gt;, &lt;a href="http://www.connicus.com/"&gt;Terry &amp;quot;Best Hair in Canada&amp;quot; Thibodeau&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/bsimser/"&gt;Bil &amp;quot;Microsoft Vice President&amp;quot; Simser&lt;/a&gt;, &lt;a href="http://codebetter.com/blogs/gregyoung/"&gt;Greg &amp;quot;Three D&amp;#39;s Ain&amp;#39;t Enough&amp;quot; Young&lt;/a&gt;, and &lt;a href="http://graysmatter.codivation.com/"&gt;Justice &amp;quot;Metrosexual Developers are Hot&amp;quot; Gray&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Space is limited! &lt;a href="http://altnetconfcanada.com"&gt;REGISTER NOW and join the conversation!&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/ITS.NETCanadaOpenSpacesRegistrationIsOpe_1495E/American_Beaver_2.jpg"&gt;&lt;img height="240" alt="American_Beaver" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/ITS.NETCanadaOpenSpacesRegistrationIsOpe_1495E/American_Beaver_thumb.jpg" width="239" border="0" /&gt;&lt;/a&gt; &lt;a href="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/ITS.NETCanadaOpenSpacesRegistrationIsOpe_1495E/Eland-02_2.jpg"&gt;&lt;img height="240" alt="Eland-02" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/ITS.NETCanadaOpenSpacesRegistrationIsOpe_1495E/Eland-02_thumb.jpg" width="395" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;* No beavers or moose were harmed in the production of this blog post. (The egos of organizers are another matter entirely.)&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=180110" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Events/default.aspx">Events</category></item><item><title>Course Announcement: Object-Relational Mapping with NHibernate</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/06/30/course-announcement-object-relational-mapping-with-nhibernate.aspx</link><pubDate>Mon, 30 Jun 2008 23:50:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:180098</guid><dc:creator>james.kovacs</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=180098</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/06/30/course-announcement-object-relational-mapping-with-nhibernate.aspx#comments</comments><description>&lt;p&gt;Many people have asked over the past few months whether I will be offering a public course on NHibernate. The answer is now &amp;quot;Yes!&amp;quot; and it will be debuting in Calgary in August.&lt;/p&gt;  &lt;p&gt;If you&amp;#39;re interested in &lt;i&gt;OR/M with NHibernate&lt;/i&gt; and can&amp;#39;t come to Calgary, then maybe the course can come to you! &lt;a href="mailto:jkovacs@post.harvard.edu?subject=ORM%20with%20NHibernate%20in%20my%20city"&gt;Email me&lt;/a&gt; for more information on bringing the course to your city. I also offer this course privately if your company prefers that format. Once again, &lt;a href="mailto:jkovacs@post.harvard.edu?subject=ORM%20with%20NHibernate%20private%20course"&gt;email me&lt;/a&gt; for more information.&lt;/p&gt;  &lt;p&gt;If you&amp;#39;re interested, you can register for the Calgary course &lt;a href="http://www.acteva.com/booking.cfm?bevaID=162441"&gt;here&lt;/a&gt; (credit card). Please &lt;a href="mailto:jkovacs@post.harvard.edu?subject=ORM%20with%20NHibernate%20via%20PO"&gt;email me&lt;/a&gt; directly if you wish to pay via purchase order.&lt;/p&gt;  &lt;h1&gt;Object-Relational Mapping with NHibernate&lt;/h1&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;Location&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;&lt;a href="http://www.westincalgary.com/"&gt;The Westin Calgary&lt;/a&gt;             &lt;br /&gt;320 4th Avenue SW             &lt;br /&gt;Calgary, AB T2P 2S6             &lt;br /&gt;(&lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=the+westin+calgary,+calgary+alberta&amp;amp;ie=UTF8&amp;amp;ll=51.049569,-114.062548&amp;amp;spn=0.016727,0.032358&amp;amp;z=15&amp;amp;iwloc=A"&gt;map&lt;/a&gt;)&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Dates&lt;/td&gt;        &lt;td&gt;&lt;b&gt;Tuesday, August 26, 2008 to Thursday, August 28, 2008&lt;/b&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;h3&gt;Overview&lt;/h3&gt; &lt;i&gt;Object-relational Mapping with NHibernate&lt;/i&gt; is an intensive 3-day course designed to introduce students to the core concepts of object-relational mapping (OR/M), such as querying and persisting objects to a relational database and mapping objects, collections, and inheritance relationships. The course will cover querying with the Hibernate Query Language (HQL) and the Criteria API. Students will learn how NHibernate encapsulates data access using the identity map and unit of work patterns, lazy loading, persistence by reachability, and automatic dirty checking. Advanced topics will be covered as student interest and time permit, including how and when to use the NHibernate&amp;#39;s 2nd level cache, building a persistence layer using the repository pattern, batching operations with multicriteria and multiqueries, and querying with LINQ to NHibernate.   &lt;br /&gt;  &lt;h3&gt;Topics&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Introduction to O/RM &lt;/li&gt;    &lt;li&gt;Configuring NHibernate &lt;/li&gt;    &lt;li&gt;Mapping Basics      &lt;ul&gt;       &lt;li&gt;Mapping primary keys          &lt;ul&gt;           &lt;li&gt;PK Types - Native, Identity, Guid, GuidComb, Sequence, HiLo &lt;/li&gt;            &lt;li&gt;Composite Keys and why you shouldn&amp;#39;t use them &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;        &lt;li&gt;Mapping Fields and Properties &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Querying Basics      &lt;ul&gt;       &lt;li&gt;ISession.Load/Get &lt;/li&gt;        &lt;li&gt;hibernate.show_sql &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Mapping Components &lt;/li&gt;    &lt;li&gt;Schema generation      &lt;ul&gt;       &lt;li&gt;Using SchemaExport to create/update your database schema &lt;/li&gt;        &lt;li&gt;Adding additional mapping attributes &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;The CUD in CRUD      &lt;ul&gt;       &lt;li&gt;Persistence by reachability &lt;/li&gt;        &lt;li&gt;ITransaction &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Mapping Relationships and Collections      &lt;ul&gt;       &lt;li&gt;One-to-one, one-to-many, and many-to-many &lt;/li&gt;        &lt;li&gt;Handling cascades &lt;/li&gt;        &lt;li&gt;Understanding Inverse=true &lt;/li&gt;        &lt;li&gt;Lazy loading &lt;/li&gt;        &lt;li&gt;Avoiding the N+1 SELECT problem &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Mapping Inheritance hierarchies      &lt;ul&gt;       &lt;li&gt;Concrete table inheritance (table per concrete class with complete columns) &lt;/li&gt;        &lt;li&gt;Single table inheritance (uses descriminator column and all possible columns) &lt;/li&gt;        &lt;li&gt;Class table inheritance (aka table per class with diff of columns) &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Advanced Querying      &lt;ul&gt;       &lt;li&gt;Querying with Hibernate Query Language (HQL) &lt;/li&gt;        &lt;li&gt;Querying with the Criteria API &lt;/li&gt;        &lt;li&gt;Projections &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Optional Advanced Topics      &lt;br /&gt;      &lt;ul&gt;       &lt;li&gt;Multicriteria and multiqueries &lt;/li&gt;        &lt;li&gt;Future queries &lt;/li&gt;        &lt;li&gt;Advanced querying with native SQL &lt;/li&gt;        &lt;li&gt;NHibernate with sprocs &lt;/li&gt;        &lt;li&gt;LINQ to NHibernate &lt;/li&gt;        &lt;li&gt;Implementing a query govenor &lt;/li&gt;        &lt;li&gt;Abstracting the persistence layer with unit of work &lt;/li&gt;        &lt;li&gt;Optimizing database access with the level 2 cache &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Requirements&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Familiarity with C# and .NET Framework &lt;/li&gt;    &lt;li&gt;Laptop with Visual Studio 2005 or 2008 and SQL Server 2005 Developer or Express installed &lt;/li&gt; &lt;/ul&gt; Included in the cost is:   &lt;br /&gt;  &lt;ul&gt;   &lt;li&gt;3-days of intensive training on NHibernate &lt;/li&gt;    &lt;li&gt;Screencasts recorded during the course for easy review &lt;/li&gt;    &lt;li&gt;&lt;i&gt;NHibernate in Action&lt;/i&gt; by Kuate, et al. (ebook) &lt;/li&gt;    &lt;li&gt;ReSharper 4.0 Personal License &lt;/li&gt;    &lt;li&gt;All code examples created throughout the course &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=180098" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Courses/default.aspx">Courses</category></item><item><title>Introducing psake</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/06/27/introducing-psake.aspx</link><pubDate>Fri, 27 Jun 2008 22:53:14 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:179930</guid><dc:creator>james.kovacs</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=179930</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/06/27/introducing-psake.aspx#comments</comments><description>&lt;p&gt;&lt;img height="86" alt="psake" src="http://codebetter.com/blogs/james.kovacs/WindowsLiveWriter/Introducingpsake_ED4D/psake_6.png" width="200" border="0" /&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;font color="#808080"&gt;A build automation tool... now with less XML...&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://code.google.com/p/psake/"&gt;psake&lt;/a&gt; is a build automation tool written in PowerShell. It avoids the angle-bracket tax associated with executable XML by leveraging the PowerShell syntax in your build scripts. psake has a syntax inspired by rake (aka make in Ruby) and bake (aka make in Boo), but is easier to script because it leverages your existent command-line knowledge.&lt;/p&gt;  &lt;p&gt;psake is pronounced sake - as in Japanese rice wine. It does NOT rhyme with make, bake, or rake.&lt;/p&gt;  &lt;p&gt;psake is a proof-of-concept still in the early stages of development. It consists of a single file, psake.ps1, which contains all the logic for creating a graph of dependent tasks and executing them in the correct order. You can download it from Google Code using Subversion or TortoiseSVN:&lt;/p&gt;  &lt;p&gt;svn checkout http://psake.googlecode.com/svn/trunk/ psake-read-only&lt;/p&gt;  &lt;p&gt;Here is a simple psake build script:&lt;/p&gt;  &lt;p&gt;properties {    &lt;br /&gt;&amp;#160; $testMessage = &amp;#39;Executed Test!&amp;#39;     &lt;br /&gt;&amp;#160; $compileMessage = &amp;#39;Executed Compile!&amp;#39;     &lt;br /&gt;&amp;#160; $cleanMessage = &amp;#39;Executed Clean!&amp;#39;     &lt;br /&gt;} &lt;/p&gt;   &lt;p&gt;task default -depends Test &lt;/p&gt;  &lt;p&gt;task Test -depends Compile, Clean {    &lt;br /&gt;&amp;#160; Write-Host $testMessage     &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;task Compile -depends Clean {    &lt;br /&gt;&amp;#160; Write-Host $compileMessage     &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;task Clean {    &lt;br /&gt;&amp;#160; Write-Host $cleanMessage     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;The &lt;em&gt;properties&lt;/em&gt; and &lt;em&gt;task&lt;/em&gt; script blocks can contain any valid PowerShell commands. To execute the script, simply type:&lt;/p&gt;  &lt;p&gt;psake &amp;lt;script.ps1&amp;gt; [task(s)]&lt;/p&gt;  &lt;p&gt;(This assumes that psake.ps1 is in your PowerShell path.) If you don&amp;#39;t specify a task or list of tasks (separated by spaces), it will look for a task named &amp;quot;default&amp;quot;. You can display the command line syntax by typing:&lt;/p&gt;  &lt;p&gt;psake -help&lt;/p&gt;  &lt;p&gt;psake [buildFile] [tasks] [-framework ver] [-debug]    &lt;br /&gt;&amp;#160; where buildFile is the name of the build file, (default: default.ps1)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tasks is a list of tasks to execute from the build file,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ver is the .NET Framework version to target - 1.0, 1.1, 2.0, 3.0, or 3.5     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.5 is the default     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; debug dumps information the tasks.     &lt;br /&gt;psake -help     &lt;br /&gt;&amp;#160; Displays this message.&lt;/p&gt;  &lt;p&gt;Remember that psake is syntactic sugar around PowerShell. So anything you can do in PowerShell, you can do in psake. That means that you can run MSBuild, NAnt, or other scripts. There is no need to completely replace your current build system. You can use psake to automate and extend it!&lt;/p&gt;  &lt;p&gt;psake automatically adds the appropriate version of .NET Framework to its path. So you can access MSBuild, csc.exe, vbc.exe, or any other tools installed in $env:windir\Microsoft.NET\Framework\$version\ without the fully qualified path.&lt;/p&gt;  &lt;p&gt;task default -depends DisplayNotice    &lt;br /&gt;task DisplayNotice {     &lt;br /&gt;&amp;#160; msbuild /version     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;As I mentioned earlier, psake is a proof-of-concept. You&amp;#39;re likely to find some rough edges. I am releasing to the community under a &lt;a href="http://www.opensource.org/licenses/mit-license.php"&gt;MIT License&lt;/a&gt;. I would love to get your feedback and ideas for improving it. If you are interested in contributing, please contact me. Go forth and free yourselves from the shackles of executable XML! Take a sip of psake and enjoy!&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=179930" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/.NET/default.aspx">.NET</category><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Achieving Persistence Ignorance with NHiberate Wrap-up</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/06/27/achieving-persistence-ignorance-with-nhiberate-wrap-up.aspx</link><pubDate>Fri, 27 Jun 2008 20:47:01 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:179921</guid><dc:creator>james.kovacs</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=179921</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/06/27/achieving-persistence-ignorance-with-nhiberate-wrap-up.aspx#comments</comments><description>&lt;p&gt;Thanks to everyone for coming out to see &lt;em&gt;Achieving Persistence Ignorance with NHibernate&lt;/em&gt; at the Calgary .NET User Group this past Wednesday. You can download the slidedeck and code &lt;a href="http://www.jameskovacs.com/downloads/PersistenceIgnorance-Calgary2008.zip"&gt;here&lt;/a&gt;. The following are some good resources on NHibernate and the importance of persistence ignorance.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;NHibernate (&lt;a href="http://www.nhibernate.org/"&gt;http://www.nhibernate.org&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;NHibernate Resources (&lt;a href="http://www.hibernate.org/365.html"&gt;http://www.hibernate.org/365.html&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;NHUsers Google Group (&lt;a href="http://groups.google.com/group/nhusers"&gt;http://groups.google.com/group/nhusers&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;ActiveWriter (&lt;a href="http://using.castleproject.org/display/Contrib/ActiveWriter"&gt;http://using.castleproject.org/display/Contrib/ActiveWriter&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;a href="http://www.manning.com/kuate/"&gt;NHibernate in Action&lt;/a&gt;&lt;/em&gt; by Kuat&amp;#233;, et al. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321125215?ie=UTF8&amp;amp;tag=jamkovweb-20&amp;amp;link_code=as3&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=0321125215"&gt;&lt;em&gt;Domain Driven Design: Tackling Complexity in the Heart of Software&lt;/em&gt;&lt;/a&gt;&lt;img height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=jamkovweb-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321125215" width="1" border="0" /&gt; by &lt;a href="http://www.domainlanguage.com/about/ericevans.html"&gt;Eric Evans&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0321268202?ie=UTF8&amp;amp;tag=jamkovweb-20&amp;amp;link_code=as3&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=0321268202"&gt;&lt;em&gt;Applying Domain Driven Design and Patterns&lt;/em&gt;&lt;/a&gt; by Jimmy Nilsson &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I also mentioned during the presentation the trick of modifying Configuration before constructing your SessionFactory to turn immutable entities into mutable ones for testing or data loading. You can find the details in my blog post:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.jameskovacs.com/blog/TestingImmutableEntitiesWithNHibernate.aspx"&gt;Testing Immutable Entities with NHibernate&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Lastly I will be putting up a registration page for &lt;em&gt;Object-Relational Mapping with NHibernate&lt;/em&gt; course in the next few days. If you&amp;#39;re interested or have any questions, don&amp;#39;t hesitate to email me.&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=179921" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Presentations/default.aspx">Presentations</category></item><item><title>Plumbers at Work - Episode 17 - Space Is Big. Really Big.</title><link>http://codebetter.com/blogs/james.kovacs/archive/2008/06/23/plumbers-at-work-episode-17-space-is-big-really-big.aspx</link><pubDate>Mon, 23 Jun 2008 06:41:16 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:179624</guid><dc:creator>james.kovacs</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/james.kovacs/rsscomments.aspx?PostID=179624</wfw:commentRss><comments>http://codebetter.com/blogs/james.kovacs/archive/2008/06/23/plumbers-at-work-episode-17-space-is-big-really-big.aspx#comments</comments><description>&lt;p&gt;Bil joins John and James on ooVoo to try out three-way videocasting. &lt;a href="http://silverlight.services.live.com/invoke/68557/PlumbersAtWork-Episode017/iframe.html"&gt;Play Silverlight video.&lt;/a&gt; &lt;a href="http://plumbersatwork.com/audio/PlumbersAtWork-Episode017.mp3"&gt;Play MP3 audio only.&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;DevTeach Montreal on Dec. 1-5 (&lt;a href="http://www.devteach.com"&gt;http://www.devteach.com&lt;/a&gt;)       &lt;ul&gt;       &lt;li&gt;Call for speakers (&lt;a href="http://tinyurl.com/5pd7jf"&gt;http://tinyurl.com/5pd7jf&lt;/a&gt;) &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;MOSS VHD 30-day Trial (&lt;a href="http://tinyurl.com/366tzc"&gt;http://tinyurl.com/366tzc&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Podcasting Kit for SharePoint (&lt;a href="http://www.codeplex.com/pks"&gt;http://www.codeplex.com/pks&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;ReSharper 4 Released (&lt;a href="http://www.jetbrains.com/resharper/"&gt;http://www.jetbrains.com/resharper/&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Becoming a Jedi: Part 3 of N - Refactoring I (&lt;a href="http://www.jameskovacs.com/blog/BecomingAJediPart3OfN.aspx"&gt;http://www.jameskovacs.com/blog/BecomingAJediPart3OfN.aspx&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Project &amp;quot;Velocity&amp;quot;, memcached, and distributed hashtables      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/cc655792.aspx"&gt;http://msdn.microsoft.com/en-us/data/cc655792.aspx&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.danga.com/memcached/"&gt;http://www.danga.com/memcached/&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.ayende.com/Blog/archive/2008/06/06/Scratching-an-itch-NMemcached.aspx"&gt;http://www.ayende.com/Blog/archive/2008/06/06/Scratching-an-itch-NMemcached.aspx&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.sriramkrishnan.com/blog/2008/02/cacheman-fast-distributed-hashtable-for.html"&gt;http://www.sriramkrishnan.com/blog/2008/02/cacheman-fast-distributed-hashtable-for.html&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;The Great NHibernate/Castle Giveaway (&lt;a href="http://www.jameskovacs.com/blog/TheGreatNHibernateCastleGiveaway.aspx"&gt;http://www.jameskovacs.com/blog/TheGreatNHibernateCastleGiveaway.aspx&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;XNA Calgary Users Group (&lt;a href="http://xnacalgary.org"&gt;http://xnacalgary.org&lt;/a&gt;) &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=179624" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/james.kovacs/archive/tags/Podcast/default.aspx">Podcast</category></item></channel></rss>