Tonight, Bil Simser and I had the pleasure of presenting a brief overview of Prism (aka the Composite Application Guidance for WPF and Silverlight) to a crowd of 150 developers at Shaw Court in Calgary. You can find the slidedeck here. If you're interested in getting started with Prism and related concepts, this is a good set of resources to start from: - Composite WPF and Silverlight (aka Prism)
- Composite WPF Contrib
- White
- Prism: Patterns for Building Composite Applications with WPF, MSDN Magazine September 2008
- Loosen Up: Tame Your Software Dependencies for More Flexible Apps, MSDN Magazine March 2008
Thanks to everyone whom came out. If you have any questions, don't hesitate to contact me or Bil. If you'd like to find out more about Prism and go much deeper into the underlying technology, there is always Microsoft Tech•Days Canada 2008... BTW - Some of you might have caught the inside joke in the slidedeck. For the rest... Bil does not in fact work for Zombie Inc., though he probably wishes he did. He is a big fan of the game Stubbs the Zombie: Rebel Without a Pulse. 10 minutes with Paint.NET and I had a decent looking corporate logo for his fictitious company. It's really quite amazing what you can do with this free .NET application, though the true Paint.NET master remains Justice Gray.
My first dnrTV episode went live today. I am talking with Carl Franklin about dependency inversion, dependency injection, and inversion of control. I demonstrate how to build a very simple IoC container. My intent is to show developers that it isn't any thing crazy scary. I talk about how IoC facilitates decoupling dependencies and creating more easily testable software. Check it out! dnrTV #126: James Kovacs' roll-your-own IoC container Feedback is always welcome. Carl and I plan to do another show focused on IoC containers in the next few weeks. Specifically we'll be talking about what a full-fledged container offers over and above the roll-your-own. If you have other IoC questions you would like answered on the next show, drop me an email.
I was going sysprep a base image of Windows Server 2008 this morning and followed my own instructions on sysprepping Windows. I went to the installation DVD and couldn't find sysprep. A quick google later and a bit of poking around revealed that sysprep is now installed by default on Windwos Server 2008. You can find it at: c:\Windows\System32\sysprep\sysprep.exe The experience is also streamlined considerably. Simply run sysprep.exe above and you are presented with: Change the Shutdown Options to "Shutdown" and click OK. The system will go through the sysprep process and shut itself down. You can now create cloned servers to your heart's content simply by creating linked servers and booting the clone as originally documented here.
Just realized that I never announced it, but I will be giving a double-header presentation at the Regina .NET User Group tomorrow night - Wednesday, October 8, 2008 from 5:30 to 8:30 pm. You can find directions and registration here. Session 1: Taming Software Dependencies with Dependency Injection (DI) and Inversion of Control (IoC) 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... Session 2: Achieving Persistence Ignorance with NHibernate 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'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. I have a busy calendar of events in the next few months. I'll post my other appearances in the next few days...
A Reading from the Book of Armaments, Chapter 2, Verses 9 to 21 (Wikipedia | YouTube): ...And Saint Attila raised the hand grenade up on high, saying, "O Lord, bless this Thy hand grenade that with it Thou mayest blow Thine enemies to tiny bits, in Thy mercy." 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 "skip a bit, brother"]... And the Lord spake, saying, "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." -- Monty Python And this shall be my third year as a MVP. 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... Ben Scheirman, Jessica Moss, and Derik Whittaker. I look forward to another fun-filled year of mischief, mayhem, and software development!
Since Hamilton called me out, 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't stay in Twitter.) :) I'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'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't that much more than the battery! 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'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'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't acceptable for a business laptop, IMHO. Still there is a coolness factor to the Alienware systems. I've never considered myself a "ThinkPad" guy, but when I saw the specs of the T500 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" widescreen at 1680x1050 - same as the Dell D820 that I'm replacing. (I've had a 15.4" 1920x1200 and it hurt my eyes. I run my 24" Acer X243W monitors at 1920x1200, which is awesome.) I considered laptops with 17" screens, but they're quite heavy and unusable in airplanes. (My friend, John Bristowe, told me, "Sure, you can use a 17" in an airplane. You just kind of angle it right and type on your chest." Uh, yeah...) Hamilton's description of "a hundred LEDs blinking in your face" worries me, but it's already ordered. I await the T500 with expectation and trepidation. I'll let you know my impressions once I receive it.
Alright, alright. I give in. I'm finally twittering along with the rest of the planet. You can find me here: http://twitter.com/JamesKovacs You can expect witty banter, scintillating insights, and breathtaking news bites... 140 characters at a time. If you're looking for a good Twitter client and you're running Windows, I would recommend Witty, a free WPF-based Twitter client. Very pretty, very functional, and very non-intrusive. Highly recommended. There is even a ClickOnce installer.
A big thank you to everyone who completed the ORM with NHibernate survey. 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 JetBrains ReSharper 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, "Use it wisely..." In other news... The Castle Project PMC has selected its winner for The Great NHibernate/Castle Giveaway. 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. 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. -- Markus The NHibernate team is still debating the most deserving recipient. (I'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'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 S. Somasegar, Senior VP of DevDiv, himself asking for his assistance to solve the problem. That was on a Thursday. I didn't expect an answer. The guy is a senior VP and I'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'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 Soma for his responsiveness and his support of the .NET community.
ALT.NET Canada kicked off last night and was great fun. Bil has some initial coverage here complete with video. Mo Khan discusses his take on the fishbowl topic, "Why are fundamentals important?" I wanted to take a few paragraphs and give my two cents on the topic. 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's not to say that specific technologies aren't important. You won't get too far in the .NET world not knowing the BCL. :) I'm not a crotchety old programmer who is going to insist that you learn everything that I know about software "because I had to walk 2 km to school every day through blowing snow uphill - both ways!" I don't expect you to (and wouldn'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 *& or an &* here? And is that one * or two **? If you don't know what I'm talking about be thankful. Waste of brain cycles.) 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.). Are you a bad programmer because you don't know how to implement a red-black tree from memory? Absolutely not. (I don't personally remember either!) But you'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. 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.
I'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...
|