<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.claritycon.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>George Durzi</title><link>http://blogs.claritycon.com/blogs/george_durzi/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>MobileMe: Internet Explorer 7 is not fully supported</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/19/mobileme-internet-explorer-7-is-not-fully-supported.aspx</link><pubDate>Sun, 20 Jul 2008 00:51:17 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:7605</guid><dc:creator>gdurzi</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=7605</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/19/mobileme-internet-explorer-7-is-not-fully-supported.aspx#comments</comments><description>&lt;p&gt;As of this past Friday, the line to buy an iPhone 3G at Apple&amp;#39;s Michigan Ave. store in Chicago was still almost a block long - apparently, the same scene is repeating itself across the country. For the most part, this isn&amp;#39;t because of low inventory, but because of the ridiculous in-store activation process every customer has to go through. &lt;/p&gt; &lt;p&gt;A group of us on the way to lunch were joking about the iPhone 3G&amp;#39;s (I refuse to refer to it as just &amp;quot;iPhone&amp;quot;, it&amp;#39;s &lt;u&gt;the&lt;/u&gt; iPhone) successful but frustrating launch, when the conversation turned to Apple&amp;#39;s new service &lt;a href="http://www.me.com" target="_blank"&gt;MobileMe&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;It&amp;#39;s amusing how people are so willing to forgive Apple when they fumble something. MobileMe wasn&amp;#39;t even working for a few days after its launch. Even funnier, Apple had to &lt;a href="http://latimesblogs.latimes.com/technology/2008/07/not-pushy-apple.html" target="_blank"&gt;clarify&lt;/a&gt; what what they really meant by &amp;quot;push&amp;quot;, and that some of MobileMe&amp;#39;s services didn&amp;#39;t actually use &amp;quot;push&amp;quot; technology. &lt;/p&gt; &lt;p&gt;Someone then mentioned that if you browsed MobileMe in IE7, you would get warned that you wouldn&amp;#39;t enjoy the full experience because of IE7&amp;#39;s compatibility issues with web standards. &lt;/p&gt; &lt;p&gt;I had to see this for myself ...&lt;/p&gt; &lt;p&gt;&lt;img src="http://employees.claritycon.com/gdurzi/Blog/MobileMe/IE7.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Let me say this up front, I am not an Apple basher ... As a matter of fact, I am writing this on a Macbook Pro, my wife and I stood in line and bought our iPhone 3Gs last weekend, and our place is littered with various generation iPods.&lt;/p&gt; &lt;p&gt;Maybe Apple is making a statement; that they&amp;#39;re sick of having to program around IE&amp;#39;s non-compliance with web standards? I commend that - I&amp;#39;m having to deal with some cross-browser JavaScript issues on a project, and let me tell you, it ain&amp;#39;t fun. &lt;/p&gt; &lt;p&gt;Did Apple somehow forget though that the overwhelming majority of iPod and iPhone users will connect them to XP and Vista machines running IE6 or IE7? &lt;/p&gt; &lt;p&gt;Do they think that Joe-web-surfer understands the first thing about web standards compliance?&lt;/p&gt; &lt;p&gt;I guess somebody eventually has to draw a line in the sand when it comes to this. Just found it funny that Apple would call out IE7 like this, when as of June 2008 &lt;a href="http://www.w3schools.com/browsers/browsers_stats.asp" target="_blank"&gt;IE7 and IE6 combined still account for over 50% of the browser market share&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Getting called out for using IE7 is bad enough, I wouldn&amp;#39;t want to see what MobileMe says if you browse it using IE6 :)&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=7605" width="1" height="1"&gt;</description></item><item><title>OCSDKWrapper Project on CodePlex</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/05/ocsdkwrapper-project-on-codeplex.aspx</link><pubDate>Sat, 05 Jul 2008 22:40:46 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:6704</guid><dc:creator>gdurzi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=6704</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/05/ocsdkwrapper-project-on-codeplex.aspx#comments</comments><description>&lt;p&gt;A colleague of mine - &lt;a href="http://blogs.claritycon.com/blogs/peter_walke/default.aspx" target="_blank"&gt;Peter Walke&lt;/a&gt; - was working on an internal project where he needed to quickly integrate some functionality provided by the Office Communicator SDK. Having worked on several projects involving Communicator automation, he asked me if I could give him some code he could simply drop into his project. &lt;/p&gt; &lt;p&gt;The Office Communicator SDK is generally easy to use, however, the code to connect to communicator, monitor the status of the connection, and clean up if the connection is lost can be complicated. I quickly realized that it&amp;#39;s very inefficient and inelegant to have to paste this large blob of code into every project that used the Office Communicator SDK. &lt;/p&gt; &lt;p&gt;I decided to wrap that functionality into a helpful class library, where the developer&amp;#39;s only responsibility would be to create an instance of the class - letting it handle all the underlying plumbing with Communicator. &lt;/p&gt; &lt;p&gt;While I was at it, I also baked in a number of helpful utility functions into the wrapper. This includes functions to trigger various types of Communicator conversations, perform Contact maintenance, query presence, and several others. &lt;/p&gt; &lt;p&gt;I create and published the &lt;strong&gt;OCSDKWrapper&lt;/strong&gt; project, along with a sample application built using it, into &lt;a href="http://www.codeplex.com" target="_blank"&gt;CodePlex&lt;/a&gt;. You can find the project at &lt;a title="http://www.codeplex.com/OCSDKWrapper" href="http://www.codeplex.com/OCSDKWrapper"&gt;http://www.codeplex.com/OCSDKWrapper&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h5&gt;Design Decisions&lt;/h5&gt; &lt;p&gt;I worked on this over a couple of days this weekend, and made a couple of design decisions to finish the project quickly and get it published:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;You still have to reference &lt;strong&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ed1cce45-cc22-46e1-bd50-660fe6d2c98c&amp;amp;displaylang=en" target="_blank"&gt;CommunicatorAPI&lt;/a&gt;&lt;/strong&gt; in your application.  &lt;ul&gt; &lt;li&gt;I didn&amp;#39;t see any real worth in creating DTO classes for every class in the Office Communicator SDK.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;I left all the Communicator event parameter variable names as-is, even though I wasn&amp;#39;t fond of the naming scheme&lt;/li&gt;&lt;/ul&gt; &lt;h5&gt;CodePlex&lt;/h5&gt; &lt;p&gt;I&amp;#39;ve never created a project on CodePlex before, who knew picking what type of license to use would be so complicated. &lt;/p&gt; &lt;p&gt;If you&amp;#39;re interested in contributing to the project, have some feedback, or want to report a bug, please contact me via this blog or by posting on the project page on CodePlex. &lt;/p&gt; &lt;h5&gt;Sample Application&lt;/h5&gt; &lt;p&gt;In the project&amp;#39;s source code, you will find a simple sample application that was built using the OCSDKWrapper. The application displays the current connection status, the signed in user&amp;#39;s status, and a running list of events that were raised by Office Communicator. &lt;/p&gt; &lt;p&gt;Take a look at the source code in the sample application, you&amp;#39;ll see how quickly you can get up and running. &lt;/p&gt; &lt;h5&gt;To do&lt;/h5&gt; &lt;ul&gt; &lt;li&gt;Documentation  &lt;li&gt;Unit tests&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=6704" width="1" height="1"&gt;</description></item><item><title>WPF/XBAP IOException: Cannot locate resource app.xaml</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/06/24/wpf-xbap-ioexception-cannot-locate-resource-app-xaml.aspx</link><pubDate>Tue, 24 Jun 2008 14:32:24 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:6215</guid><dc:creator>gdurzi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=6215</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/06/24/wpf-xbap-ioexception-cannot-locate-resource-app-xaml.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m working on an XBAP project where deploying it involves publishing it as a ClickOnce manifest using Visual Studio 2008&amp;#39;s publishing features. I&amp;#39;m working with the RTM version Visual Studio 2008 Professional Edition. &lt;/p&gt; &lt;p&gt;Occasionally, the publishing process would fail for no good reason even though the project compiled successfully. When the publishing process eventually succeeded, I would get the following error when running the application:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;IOException: Cannot locate resource app.xaml&lt;/em&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;After that happened, I wouldn&amp;#39;t even be able to run the project in Debug mode from Visual Studio - I would get the same error.&lt;/p&gt; &lt;p&gt;In order to get the project to run again, I would have to open app.xaml, edit it, undo the edit, and save it. Blew my mind. &lt;/p&gt; &lt;p&gt;An extensive Google search showed that most people reported this issue when using the Beta 2 build of Orcas. I can report that this issue still occurs in the RTM version.&lt;/p&gt; &lt;p&gt;I finally figured this out, and am now able to publish my project consistently without ever seeing this error. Here&amp;#39;s what my publishing process looks like now:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;If your project is under source control, your .csproj or .vbproj needs to be checked out  &lt;li&gt;You need to delete previously published files  &lt;ul&gt; &lt;li&gt;Delete the contents of &lt;strong&gt;publish\&lt;/strong&gt;  &lt;li&gt;Delete the contents of &lt;strong&gt;bin\Debug\app.publish&lt;/strong&gt; &lt;/li&gt; &lt;ul&gt; &lt;li&gt;or &lt;strong&gt;bin\Release\app.publish&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;strong&gt;EDIT: &lt;/strong&gt;I also noticed that I need to have the &amp;quot;Automatically increment revision with each publish&amp;quot; checkbox on the &lt;em&gt;Publish&lt;/em&gt; tab of the project properties &lt;strong&gt;checked&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;I hope this saves you some frustration. &lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=6215" width="1" height="1"&gt;</description></item><item><title>TechEd 2008 Happenings</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/06/02/teched-2008-happenings.aspx</link><pubDate>Tue, 03 Jun 2008 03:46:11 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5752</guid><dc:creator>gdurzi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=5752</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/06/02/teched-2008-happenings.aspx#comments</comments><description>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3890b38d-f15c-4d1a-b24c-6089bfeb99f8" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/TechEd" rel="tag"&gt;TechEd&lt;/a&gt;&lt;/div&gt; &lt;p&gt;I&amp;#39;m going to be at the TechEd bloggers lounge on Wednesday, June 4th from 3 to 4pm to discuss and answer questions about the Unified Communications works Clarity did for the conference. &lt;/p&gt; &lt;p&gt;Here&amp;#39;s some of the stuff we&amp;#39;ll be showing throughout the week:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Office Communicator Presence Controls for WPF&lt;/li&gt; &lt;li&gt;Office Communicator Vista Gadget&lt;/li&gt; &lt;li&gt;TFS Spy - Visual Studio Add In&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;It&amp;#39;s pretty exciting to be here! I&amp;#39;ll be in the Unified Communications area of the Technical Learning Center most of Tuesday and Wednesday. &lt;/p&gt; &lt;p&gt;If you miss any of our demos in the sessions, drop by for a impromptu demo!&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5752" width="1" height="1"&gt;</description></item><item><title>LiveMeeting Recording from geekSpeak UC show</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/22/livemeeting-recording-from-geekspeak-uc-show.aspx</link><pubDate>Thu, 22 May 2008 19:38:52 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5389</guid><dc:creator>gdurzi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=5389</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/22/livemeeting-recording-from-geekspeak-uc-show.aspx#comments</comments><description>&lt;p&gt;If you&amp;#39;re interested, the folks from geekSpeak have made available a &lt;a href="https://www.livemeeting.com/cc/mseventsbmo/view?id=1032376785&amp;amp;role=attend&amp;amp;pw=412D0C68" target="_blank"&gt;recording of yesterday&amp;#39;s show&lt;/a&gt; - Contextual Collaboration using Unified Communications. &lt;/p&gt; &lt;p&gt;Thanks to the geekSpeak hosts, Glen Gordon and Mithun Dhar. I really enjoyed being on the show and am a big fan of the format. &lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5389" width="1" height="1"&gt;</description></item><item><title>MSDN geekSpeak show on 5/21 at 2pm CST</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/19/msdn-geekspeak-show-on-5-21-at-2pm-cst.aspx</link><pubDate>Mon, 19 May 2008 15:16:39 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5295</guid><dc:creator>gdurzi</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=5295</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/19/msdn-geekspeak-show-on-5-21-at-2pm-cst.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m going to be a guest on &lt;a href="http://blogs.msdn.com/geekspeak/default.aspx" target="_blank"&gt;MSDN geekSpeak&lt;/a&gt; this coming Wednesday at 2pm CST, the topic is &lt;strong&gt;Contextual Collaboration Using Unified Communications&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;We&amp;#39;re going to discuss how to communications-enable an application by going through a couple of demos that we built for this year&amp;#39;s UC track at &lt;a href="http://www.microsoft.com/events/teched2008/default.mspx" target="_blank"&gt;TechEd&lt;/a&gt; in Orlando:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Office Communicator Vista Sidebar Gadget  &lt;li&gt;WPF Presence Controls for Office Communicator (used in the gadget demo)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Both projects are intended to be samples and will be made publicly available (including source code) after TechEd 2008. &lt;/p&gt; &lt;p&gt;I&amp;#39;ll be going through the source code and digging into how to use the Office Communicator SDK in a project. &lt;/p&gt; &lt;h4&gt;geekSpeak format&lt;/h4&gt; &lt;p&gt;The geekSpeak format is pretty cool; there are no slides, just questions from the audience which end up driving the direction of the session. &lt;/p&gt; &lt;p&gt;I&amp;#39;m involved in some user group events, and getting the audience to interact can be like pulling teeth! Maybe the fact that the audience submits their questions via LiveMeeting has something to do with it ... &lt;/p&gt; &lt;p&gt;Regardless, it&amp;#39;s refreshing to participate in a user-driven session instead of talking at your audience from a pptx deck!&lt;/p&gt; &lt;h4&gt;Office Communicator Vista Sidebar Gadget&lt;/h4&gt; &lt;p&gt;The gadget I&amp;#39;ll be showing was built in WPF and provides functionality such as:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Creating list of Favorite 5 contacts  &lt;li&gt;Dynamically calculating who your Top 5 contacts are  &lt;li&gt;Retrieving voicemail from Exchange&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Here&amp;#39;s a screenshot of the gadget docked in the sidebar:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;img src="http://employees.claritycon.com/gdurzi/Blog/geekSpeak/Gadget.DockedInSidebar.JPG" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;If you can&amp;#39;t make the live broadcast time for the show, all the shows are archived for later viewing. I&amp;#39;m looking forward to hijacking a conference room here and and hanging an &amp;quot;on the air&amp;quot; sign at the door :)&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5295" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/Office+Communicator/default.aspx">Office Communicator</category><category domain="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/Gadgets/default.aspx">Gadgets</category></item><item><title>TECH Cocktail Conference - May 29th in Chicago</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/03/tech-cocktail-conference-may-29th-in-chicago.aspx</link><pubDate>Sat, 03 May 2008 22:47:31 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5061</guid><dc:creator>gdurzi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=5061</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/03/tech-cocktail-conference-may-29th-in-chicago.aspx#comments</comments><description>&lt;p&gt;When I first heard about &lt;a href="http://techcocktail.com/home/" target="_blank"&gt;TECH Cocktail&lt;/a&gt;, I was surprised to see that such an organization even existed in Chicago - I didn&amp;#39;t realize that there was such a vibrant technology community here! &lt;/p&gt; &lt;p&gt;TECH Cocktail has done a bunch of mixers in Chicago and has recently expanded to other cities. They&amp;#39;re putting on the inaugural &lt;a href="http://techcocktail.com/home/tech-cocktail-conference/" target="_blank"&gt;TECH Cocktail Conference&lt;/a&gt; on May 29th here in Chicago. &lt;/p&gt; &lt;p&gt;There&amp;#39;s a nice lineup of speakers, and Jason Fried from &lt;a href="http://www.37signals.com/" target="_blank"&gt;37 Signals&lt;/a&gt; is giving the keynote. I&amp;#39;m looking forward to that one, I&amp;#39;m a big fan of what 37 Signals is doing and really enjoyed reading about their take on software development in &lt;a href="http://gettingreal.37signals.com/toc.php" target="_blank"&gt;Getting Real&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;a title="TECH cocktail CONFERENCE" href="http://techcocktail.com/home/tech-cocktail-conference/"&gt;&lt;img alt="TECH cocktail CONFERENCE" src="http://farm3.static.flickr.com/2377/2449686680_e398fbe1dd_o.gif" /&gt;&lt;/a&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5061" width="1" height="1"&gt;</description></item><item><title>Contact Name Resolution using the Office Communicator SDK</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/04/29/contact-name-resolution-using-the-office-communicator-sdk.aspx</link><pubDate>Tue, 29 Apr 2008 13:38:58 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5030</guid><dc:creator>gdurzi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=5030</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/04/29/contact-name-resolution-using-the-office-communicator-sdk.aspx#comments</comments><description> &lt;p&gt;In my continuing efforts to bring you useful nuggets from the Office Communicator SDK, I bring you &lt;strong&gt;IMessengerContactResolution&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;I realized that I needed something like this when I wasn&amp;#39;t able to resolve contacts given their SMTP address by using the &lt;strong&gt;IMessenger::GetContact&lt;/strong&gt; method. The &lt;strong&gt;IMessenger::FindContact&lt;/strong&gt; methods wasn&amp;#39;t helpful because it actually invoked the Communicator&amp;#39;s UI to find a contact.&lt;/p&gt; &lt;p&gt;I came across &lt;strong&gt;IMessengerContactResolution::ResolveName&lt;/strong&gt; in the SDK, but saw that the &lt;strong&gt;ResolveName&lt;/strong&gt; method was marked as &lt;em&gt;Not Implemented&lt;/em&gt;. Well, it is ... I didn&amp;#39;t find out until someone on the UC team sent me a code snippet that used it. Moral of the story: give it a shot even if the SDK says it&amp;#39;s not implemented. &lt;/p&gt; &lt;h4&gt;Scenario&lt;/h4&gt; &lt;p&gt;The scenario I was working with is that a user could drag a contact out of Communicator into my application. What you get in the drag arguments happens to be the contact&amp;#39;s primary SMTP address, which may or may not match their Sip Uri, e.g. &lt;a href="mailto:john.doe@contoso.com"&gt;john.doe@contoso.com&lt;/a&gt; vs. &lt;a href="mailto:jdoe@contoso.com"&gt;jdoe@contoso.com&lt;/a&gt;. A lot of organizations do this, and there&amp;#39;s really no standard way to &amp;quot;discover&amp;quot; a user&amp;#39;s Sip given their SMTP and vice versa. &lt;/p&gt; &lt;p&gt;My &lt;strong&gt;ResolveContact&lt;/strong&gt; method tries to resolve its input string a couple of different ways. As usual, when programming against the Office Communicator SDK, you unfortunately have to control logic flow using try/catch statements. I feel dirty every time I do that, but hey, my hands are tied :)&lt;/p&gt; &lt;h4&gt;ResolveContact&lt;/h4&gt; &lt;p&gt;In my application, I carry around a class-level variable called &lt;strong&gt;_resolver&lt;/strong&gt; to perform contact resolution:&lt;/p&gt; &lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; IMessengerContactResolution _resolver;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;When I handle the Communicator sign-in event, I set up _resolver by casting my main communicator object to IMessengerContactResolution:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;_resolver = _communicator &lt;span class="kwrd"&gt;as&lt;/span&gt; IMessengerContactResolution;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;This is pretty common when writing applications that use the Office Communicator SDK, you of course are responsible for cleaning up those objects which I do when I handle the Communicator sign-out event. &lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the code for my ResolveContact method:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; ResolveContact(&lt;span class="kwrd"&gt;string&lt;/span&gt; dropString, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; sipUri, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; displayName)
        {
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                sipUri = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                displayName = &lt;span class="kwrd"&gt;null&lt;/span&gt;;

                &lt;span class="kwrd"&gt;try&lt;/span&gt;
                {
                    &lt;span class="rem"&gt;// Scenario 1: User enters a Sip Uri&lt;/span&gt;
                    &lt;span class="rem"&gt;//  If so, GetContactDetails will return a display name&lt;/span&gt;
                    &lt;span class="rem"&gt;//&lt;/span&gt;
		    &lt;span class="rem"&gt;// Code for this method not included, &lt;/span&gt;
		    &lt;span class="rem"&gt;//  It simply called IMessenger::GetContact&lt;/span&gt;
                    GetContactDetails(dropString, &lt;span class="kwrd"&gt;out&lt;/span&gt; displayName);
                }
                &lt;span class="kwrd"&gt;catch&lt;/span&gt;
                {
                    sipUri = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                }

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(displayName)) &lt;span class="rem"&gt;// Not a match based on Sip Uri&lt;/span&gt;
                {
                    &lt;span class="kwrd"&gt;try&lt;/span&gt;
                    {
                        &lt;span class="rem"&gt;// Scenario 2: User enters an SMTP address&lt;/span&gt;
                        &lt;span class="rem"&gt;//  Try to resolve the SMTP address into a Sip Uri&lt;/span&gt;
                        &lt;span class="rem"&gt;//&lt;/span&gt;
                        sipUri = _resolver.ResolveContact(ADDRESS_TYPE.ADDRESS_TYPE_SMTP,
                            CONTACT_RESOLUTION_TYPE.CONTACT_RESOLUTION_CACHED_ONLY, 
		            dropString);
                    }
                    &lt;span class="kwrd"&gt;catch&lt;/span&gt;
                    {
                        sipUri = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                    }

		    &lt;span class="rem"&gt;// Not a match based on SMTP Address&lt;/span&gt;
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(sipUri))
                    {
                        &lt;span class="kwrd"&gt;try&lt;/span&gt;
                        {
                            &lt;span class="rem"&gt;// Scenario 3: User enters a contact&amp;#39;s display name&lt;/span&gt;
                            &lt;span class="rem"&gt;//  Try to resolve the Display Name into a Sip Uri&lt;/span&gt;
                            &lt;span class="rem"&gt;//&lt;/span&gt;
                            sipUri = _resolver.ResolveContact(
				ADDRESS_TYPE.ADDRESS_TYPE_DISPLAY_NAME,
                                CONTACT_RESOLUTION_TYPE.CONTACT_RESOLUTION_CACHED_ONLY, 
				dropString);
                        }
                        &lt;span class="kwrd"&gt;catch&lt;/span&gt;
                        {
                            sipUri = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                        }
                    }

	            &lt;span class="rem"&gt;// Success - get the contact&amp;#39;s Display Name&lt;/span&gt;
                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!String.IsNullOrEmpty(sipUri)) 
                    {
                        GetContactDetails(sipUri, &lt;span class="kwrd"&gt;out&lt;/span&gt; displayName);
                    }
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                {
                    sipUri = dropString; &lt;span class="rem"&gt;// Scenario 1&lt;/span&gt;
                }
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception exception)
            {
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; exception;
            }
        }&lt;/pre&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5030" width="1" height="1"&gt;</description></item><item><title>Ad-hoc phone number dialing using the Office Communicator SDK</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/04/11/ad-hoc-phone-number-dialing-using-the-office-communicator-sdk.aspx</link><pubDate>Sat, 12 Apr 2008 02:51:51 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4816</guid><dc:creator>gdurzi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=4816</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/04/11/ad-hoc-phone-number-dialing-using-the-office-communicator-sdk.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m gonna chalk this up to one of things that&amp;#39;s painfully obvious after the fact... I&amp;#39;m using the &lt;strong&gt;IMessengerAdvanced::StartConversation&lt;/strong&gt; method of the Office Communicator automation SDK to dial ad-hoc phone numbers, e.g. simply dialing Clarity&amp;#39;s front desk at &lt;strong&gt;+13128633100&lt;/strong&gt; as opposed to selecting a contact in Communicator and dialing one of its listed phone numbers.&lt;/p&gt; &lt;p&gt;Communicator would attempt to dial the number but the call to StartConversation would throw a not-so-helpful COMException.&lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;vConversationData&lt;/h3&gt; &lt;p&gt;The SDK documentation describes the StartConversation method, but is vague on its parameters. The trick here is to correctly populate the &lt;strong&gt;vConversationData&lt;/strong&gt; parameter. &lt;/p&gt; &lt;p&gt;Here&amp;#39;s what the SDK says about the &lt;strong&gt;vConversationData&lt;/strong&gt; parameter:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;A &lt;b&gt;VARIANT&lt;/b&gt; value to hold a XML binary large object (BLOB) used to send data dependent on the chosen conversation type. For focus-based conference call, this parameter is used to pass in the conference URI as the content of a &amp;lt;&lt;code&gt;ConfURI&lt;/code&gt;&amp;gt; element. For PSTN calls, the parameter contains an array of TEL URIs, as a &amp;lt;&lt;code&gt;TelURIs&lt;/code&gt;&amp;gt; element.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Pretty misleading, because we won&amp;#39;t be BLOB&amp;#39;ing anything!&lt;/p&gt; &lt;h3&gt;Formatting Phone Numbers&lt;/h3&gt; &lt;p&gt;Before being passed to the &lt;strong&gt;StartConversation &lt;/strong&gt;method, phone numbers have to be prefixed with &lt;strong&gt;tel:&lt;/strong&gt; to explicitly specify that this is a phone number. &lt;/p&gt; &lt;p&gt;As part of configuration Office Communications Server for voice, you can add regular expressions to normalize the way Communicator dials phone numbers, e.g. when I simply dial 39XX, Communicator knows that this is my Clarity extension and dials it as +131286339XX.&lt;/p&gt; &lt;p&gt;What this means is that if you have these rules in place, you don&amp;#39;t need to worry much about normalizing the phone number before passing it to the &lt;strong&gt;StartConversation&lt;/strong&gt; method.&lt;/p&gt; &lt;p&gt;Of course, if you specify a phone number that doesn&amp;#39;t match any of your normalizing regular expressions, Communicator won&amp;#39;t be able to make the phone call. Communicator handles this gracefully, you don&amp;#39;t need to handle an exception in your code.&lt;/p&gt; &lt;h3&gt;IMessengerAdvanced::StartConversation&lt;/h3&gt; &lt;p&gt;Here&amp;#39;s the obvious part:&lt;/p&gt; &lt;p&gt;&lt;img src="http://employees.claritycon.com/gdurzi/Blog/StartConversation/StartConversation.JPG" alt="" /&gt;&lt;/p&gt; &lt;p&gt;The way the &lt;strong&gt;vConversation&lt;/strong&gt; data document was phrased, I was trying stuff like:&lt;/p&gt; &lt;p&gt;&amp;lt;TelURIs&amp;gt;&amp;lt;TelURI&amp;gt;tel:+13128633100&amp;lt;/TelUri&amp;gt;&amp;lt;/TelURIs&amp;gt;&lt;/p&gt; &lt;p&gt;XML Blob, I think not ...&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4816" width="1" height="1"&gt;</description></item><item><title>Updated Tafiti SharePoint Search</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/22/updated-tafiti-sharepoint-search.aspx</link><pubDate>Sat, 22 Mar 2008 23:13:00 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4256</guid><dc:creator>gdurzi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=4256</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/22/updated-tafiti-sharepoint-search.aspx#comments</comments><description>&lt;p&gt;If you haven&amp;#39;t seen &lt;a href="http://www.codeplex.com/WLQuickApps" target="_blank"&gt;Tafiti Visual Search&lt;/a&gt;, wander on over to CodePlex and check it out. &lt;a href="http://blogs.claritycon.com/blogs/kevin_marshall" target="_blank"&gt;Kevin Marshall&lt;/a&gt; and I contributed to the project by extending Tafiti to search against SharePoint. The Windows Live team recently made significant updates to the Tafiti project, and we just checked in a change set with the updated SharePoint search code. You can &lt;a href="http://www.codeplex.com/WLQuickApps/SourceControl/DownloadSourceCode.aspx?changeSetId=16061" target="_blank"&gt;download the change set&lt;/a&gt; and configure it to search against your SharePoint portal. &lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4256" width="1" height="1"&gt;</description></item><item><title>Automating Office Communicator 2007 using the Microsoft Office Communicator 2007 SDK</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/22/automating-office-communicator-2007-using-the-microsoft-office-communicator-2007-sdk.aspx</link><pubDate>Sat, 22 Mar 2008 21:12:17 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4254</guid><dc:creator>gdurzi</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=4254</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/22/automating-office-communicator-2007-using-the-microsoft-office-communicator-2007-sdk.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ED1CCE45-CC22-46E1-BD50-660FE6D2C98C&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Office Communicator 2007 SDK&lt;/a&gt; allows you to automate a running instance of Office Communicator 2007 to integrate Communicator functionality into your applications. &lt;/p&gt; &lt;p&gt;There are a bunch of other SDKs that the Unified Communication team puts out. The difference between them can get confusing, let&amp;#39;s clear some things up for this specific SDK.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;You need to have Office Communicator 2007 installed and running  &lt;li&gt;The SDK works by automating functions of Communicator, e.g. when you start an IM conversation through code, a Communicator window actually launches &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Check out the &amp;quot;what others are downloading&amp;quot; section of the download link above for links to some of the other SDKs. &lt;/p&gt; &lt;p&gt;The SDK comes with a help collection, but no sample applications. There are some good snippets of code in there, but it&amp;#39;s pretty dry reading. &lt;/p&gt; &lt;p&gt;I put together a sample WinForms application that showcases some of the functionality that the SDK provides, it beats reading the help file to figure out what the difference between the IMessenger, IMessenger2, and IMessenger3 interfaces is. &lt;/p&gt; &lt;p&gt;The Visual Studio 2008 project includes some &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=25A27453-15FF-48AB-AF1B-692CD77AB510&amp;amp;displaylang=en" target="_blank"&gt;presence controls&lt;/a&gt; which you can download separately if you&amp;#39;d like. &lt;/p&gt; &lt;p&gt;I&amp;#39;ve worked on a couple of projects that involved using this SDK, here are some useful tips from stuff I&amp;#39;ve come across:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Communicator allows you to add distribution lists as contacts, e.g. I add the Clarity &amp;quot;All Employees&amp;quot; group and automatically get everyone in Clarity on my buddy list. If you do this, you don&amp;#39;t get the individual members of the group as contacts - they won&amp;#39;t be in Messenger.MyContacts  &lt;li&gt;Clean up after yourself. This a COM automation API, use Marshal.ReleaseComObject to properly dispose of Communicator objects  &lt;li&gt;Various interfaces inherit from each other to provide more functionality, e.g. IMessenger3 inherits from IMessenger2 which inherits from IMessenger1&lt;/li&gt;&lt;/ul&gt; &lt;h4&gt;&lt;a href="http://employees.claritycon.com/gdurzi/Blog/OCAutomation/Blog.OCAutomation.rar" target="_blank"&gt;Download the source&lt;/a&gt;&lt;/h4&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4254" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/Office+Communicator/default.aspx">Office Communicator</category><category domain="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/OCS/default.aspx">OCS</category></item><item><title>Review: Google Calendar Sync</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/13/review-google-calendar-sync.aspx</link><pubDate>Thu, 13 Mar 2008 20:45:56 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4008</guid><dc:creator>gdurzi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=4008</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/13/review-google-calendar-sync.aspx#comments</comments><description>&lt;p&gt;For a while now, I&amp;#39;ve been looking for a solution to sync my Google Calendar with Outlook. My wife and I have a Google Calendar on which we have &amp;quot;family events&amp;quot;, she subscribes to it from iCal on her MacBook, and I subscribe to it from within Outlook and overlay it on top of my main calendar.&lt;/p&gt; &lt;p&gt;The only problem for me with this setup is that I don&amp;#39;t get the items from the Google Calendar in my Outlook Calendar. I don&amp;#39;t get reminders for them, and can&amp;#39;t see them on my smart phone. &lt;/p&gt; &lt;p&gt;There&amp;#39;s a few tools out there that do this, but after reading Jeff Atwood&amp;#39;s post - &lt;a href="http://www.codinghorror.com/blog/archives/001072.html" target="_blank"&gt;A Question of Programming Ethics&lt;/a&gt; - about some unscrupulous applications, I&amp;#39;m hesitant to fork out my username and password to anybody.&lt;/p&gt; &lt;p&gt;Google recently released &lt;a href="http://www.google.com/support/calendar/bin/answer.py?answer=89955" target="_blank"&gt;Google Calendar Sync&lt;/a&gt; to provide two-way or one-way sync between Outlook and Google Calendar and vice versa.&lt;/p&gt; &lt;h3&gt;Configuration&lt;/h3&gt; &lt;p&gt;Once installed, GCS puts an icon in your system tray which you can use to configure it.&lt;/p&gt; &lt;p&gt;&lt;img src="http://employees.claritycon.com/gdurzi/Blog/GoogleCalendarSync/1.JPG" alt="" /&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;One-way Sync from Google Calendar to Outlook&lt;/h3&gt; &lt;p&gt;I was specifically interested in one-way sync from Google Calendar to Outlook, and set it to sync every 60 minutes (probably overkill).&lt;/p&gt; &lt;p&gt;The one-way sync works pretty well, but I found an annoying side-effect. Every time GSC performs a sync, I find a bunch of empty meeting requests in my Deleted Items folder in Outlook. They are all dated &lt;strong&gt;12/31/1979&lt;/strong&gt; and are scheduled with random people from my company&amp;#39;s Global Address Book.&lt;/p&gt; &lt;p&gt;&lt;img src="http://employees.claritycon.com/gdurzi/Blog/GoogleCalendarSync/2.JPG" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Wonder what these are all for and why GSC is reaching into my Global Address Book ...&lt;/p&gt; &lt;h3&gt;One-way Sync from Outlook to Google Calendar&lt;/h3&gt; &lt;p&gt;Uneventful, same thing with the phantom meeting requests in the Deleted Items folder though. One of my colleagues mentioned that not all of his meeting requests in Outlook were being copied over to Google Calendar - I didn&amp;#39;t verify this (too much crap in my Calendar to go through it one item at a time).&lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;Two-way Sync&lt;/h3&gt; &lt;p&gt;Nothing profound to add here.&lt;/p&gt; &lt;h3&gt;Verdict&lt;/h3&gt; &lt;p&gt;Google Calendar does a great job of inheriting the properties of Outlook meetings, e.g. the attendee list and each individual&amp;#39;s status, your response to the meeting request, and the text of the meeting. It even puts a handy &amp;quot;maps&amp;quot; link to map whatever is in the &lt;em&gt;Location&lt;/em&gt; field of the meeting request.&lt;/p&gt; &lt;p&gt;You might cause some confusion if you edit an Outlook meeting from Google Calendar, you probably should only edit meeting requests that originate in Outlook within Outlook itself. &lt;/p&gt; &lt;p&gt;Other than the strange issue with the meeting requests in the Deleted Items folder in Outlook, I have no complaints. I hope to see the issue resolved in future releases, I&amp;#39;ve come across some annoyed mentions of it on the web. &lt;/p&gt; &lt;p&gt;I would also like to see Google consolidate what it puts in the System Tray, there&amp;#39;s no reason this can&amp;#39;t be a part of the Gmail Notifier for example.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Update (03/31/2008)&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I downloaded an update and it seems to have fixed the issue with the Calendar items in the Outlook Deleted Items folder.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4008" width="1" height="1"&gt;</description></item><item><title>pixel8</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/04/pixel8.aspx</link><pubDate>Wed, 05 Mar 2008 00:37:00 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:3939</guid><dc:creator>gdurzi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=3939</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/04/pixel8.aspx#comments</comments><description>&lt;p&gt;Craig Shoemaker, my good friend and former co-worker, recently joined &lt;a href="http://www.infragistics.com/" target="_blank"&gt;Infragistics&lt;/a&gt; as a new media evangelist. Today, he launched a new video podcast series called &lt;a href="http://pixel8.infragistics.com/" target="_blank"&gt;&lt;strong&gt;pixel8&lt;/strong&gt;&lt;/a&gt; which is going to focus on the convergence of user experience development with traditional software development. &lt;/p&gt;
&lt;p&gt;The days of graphic designers mocking up pretty stuff in PhotoShop and tossing it over the fence are numbered! New technologies such as WPF and Silverlight are forcing UX and traditional developers to work together more closely than ever.&lt;/p&gt;
&lt;p&gt;Craig&amp;#39;s already got a few great shows lined up with &lt;a href="http://weblogs.asp.net/scottgu/" target="_blank"&gt;Scott Guthrie&lt;/a&gt;, &lt;a href="http://joshsmithonwpf.wordpress.com/" target="_blank"&gt;Josh Smith&lt;/a&gt;, and other new media ninjas - be sure to check it out.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=3939" width="1" height="1"&gt;</description></item><item><title>Extracting IM Conversation Text using the Office Communicator SDK</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/02/18/extracting-im-conversation-text-in-office-communicator-sdk.aspx</link><pubDate>Mon, 18 Feb 2008 18:22:34 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:3808</guid><dc:creator>gdurzi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=3808</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/02/18/extracting-im-conversation-text-in-office-communicator-sdk.aspx#comments</comments><description> &lt;p&gt;The &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ed1cce45-cc22-46e1-bd50-660fe6d2c98c&amp;amp;DisplayLang=en"&gt;Office Communicator 2007 SDK&lt;/a&gt; is one of a bunch of SDKs available for the Office Communications Server 2007 product suite. This particular one is used to automate a running instance of Communicator 2007. For example, you can interact with Communicator to start text, audio, or video conversations. You can also respond to certain Communicator events in code, such as the creation of a new conversation window. &lt;/p&gt; &lt;p&gt;If you&amp;#39;ve tried to extract the contents of an IM conversation window using &lt;strong&gt;IMessengerConversationWnd::History&lt;/strong&gt;, you might have noticed that the &lt;em&gt;History&lt;/em&gt; property always seems to return null. &lt;/p&gt; &lt;p&gt;The trick here is that the conversation text isn&amp;#39;t injected into the IM window at the exact moment that it is created; you have to use a timer to check for when the &lt;em&gt;History&lt;/em&gt; property returns something other than null. &lt;/p&gt; &lt;p&gt;Here&amp;#39;s some code that shows how to use &lt;strong&gt;System.Threading.Timer&lt;/strong&gt; to poll the conversation window. This code doesn&amp;#39;t go into how to use the CommunicatorAPI COM objects to hook into Communicator from within your application and wire up the necessary events - the SDK I linked to above has plenty of examples on how to do that. &lt;/p&gt; &lt;p&gt;If you have any questions about that though, hit me up and I&amp;#39;ll try to answer them. &lt;/p&gt; &lt;p&gt;We&amp;#39;ll start by declaring a Timer object in our class, and also a plain object to hold a reference to a specific IM conversation window:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; Timer timer = &lt;span class="kwrd"&gt;null&lt;/span&gt;; 
&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; convWindow;&lt;/pre&gt;
&lt;h3&gt;Communicator WindowCreated Event Handler&lt;/h3&gt;
&lt;p&gt;In the Communicator WindowCreated event handler, we can tell whether this is an incoming or outgoing conversation window by comparing the window&amp;#39;s HWND property to a local variable called &lt;em&gt;windowHandle&lt;/em&gt;. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;        void&lt;/span&gt; communicator_OnIMWindowCreated(&lt;span class="kwrd"&gt;object&lt;/span&gt; pIMWindow)
        {
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                IMessengerConversationWndAdvanced imWindow = &lt;br /&gt;                    (IMessengerConversationWndAdvanced)pIMWindow;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (((IMessengerConversationWndAdvanced)pIMWindow).HWND == windowHandle)
                {
                    &lt;span class="rem"&gt;// outgoing&lt;/span&gt;
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                {
                    &lt;span class="rem"&gt;// incoming&lt;/span&gt;
                    windowHandle = imWindow.HWND;
                    HandleIncomingMessage(pIMWindow);
                }
            }
        }&lt;/pre&gt;
&lt;h3&gt;Setting up the Timer&lt;/h3&gt;
&lt;p&gt;For this example, I&amp;#39;ll use a function called &lt;i&gt;HandleIncomingMessage&lt;/i&gt; to handle an incoming conversation. I&amp;#39;ll pass the conversation window as a parameter to the function.&lt;/p&gt;&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; HandleIncomingMessage(&lt;span class="kwrd"&gt;object&lt;/span&gt; pIMWindow)
        {
            IMessengerConversationWndAdvanced imWindow = 
                (IMessengerConversationWndAdvanced)pIMWindow;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (((IMessengerConversationWndAdvanced)pIMWindow).HWND == windowHandle)
            {
                convWindow = pIMWindow;

                timer = &lt;span class="kwrd"&gt;new&lt;/span&gt; Timer(&lt;span class="kwrd"&gt;new&lt;/span&gt; TimerCallback(timer_Tick), &lt;span class="kwrd"&gt;null&lt;/span&gt;,
                    TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(1));
            }
        }&lt;/pre&gt;
&lt;p&gt;Note that we check for matching window handles before doing anything - there could be multiple instances of Communicator windows in existence at the same time; we need to make sure that we are dealing with the right window. 
&lt;p&gt;Also note that we set our class variable &lt;em&gt;convWindow&lt;/em&gt; to the &lt;em&gt;pIMWindow&lt;/em&gt; object. This way, the Timer&amp;#39;s tick event can access the window to check its &lt;em&gt;History&lt;/em&gt; property. 
&lt;h3&gt;Tick&lt;/h3&gt;&lt;pre class="csharpcode"&gt;       &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; timer_Tick(&lt;span class="kwrd"&gt;object&lt;/span&gt; state)
        {
            IMessengerConversationWndAdvanced imWindow = 
                (IMessengerConversationWndAdvanced)convWindow;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (imWindow.History != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;string&lt;/span&gt; history = imWindow.History;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;                // Do what you need to do here ...&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;&lt;/span&gt;
                imWindow.Close();

                timer.Change(Timeout.Infinite, Timeout.Infinite);
                timer.Dispose();
            }
        }&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;When the window&amp;#39;s History property is finally not null, you can can run whatever logic you need to. In my scenario, I closed the window, set the timer to never fire again, and then disposed it. This way, the next time this happens, the timer will be reinitialized cleanly.&lt;/p&gt;
&lt;h3&gt;Tick Durations&lt;/h3&gt;
&lt;p&gt;You should set up your timer to tick at an interval that&amp;#39;s convenient for your needs; for example it shouldn&amp;#39;t tick again while the timer_Tick handler is still executing. &lt;/p&gt;
&lt;h3&gt;Cleaning Up&lt;/h3&gt;
&lt;p&gt;Remember that these are all COM objects that need to be disposed of property. You should use &lt;strong&gt;Marshal.ReleaseComObject(...&lt;/strong&gt; to clean up when you&amp;#39;re done.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=3808" width="1" height="1"&gt;</description></item><item><title>Bill Gates Keynote at ODC 2008</title><link>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/02/11/bill-gates-keynote-at-odc-2008.aspx</link><pubDate>Mon, 11 Feb 2008 18:56:00 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:3743</guid><dc:creator>gdurzi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.claritycon.com/blogs/george_durzi/rsscomments.aspx?PostID=3743</wfw:commentRss><comments>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/02/11/bill-gates-keynote-at-odc-2008.aspx#comments</comments><description>&lt;p&gt;I just got back from the Bill Gates keynote at ODC 2008 and wanted to share some tidbits. &lt;/p&gt;
&lt;p&gt;This is the second time I&amp;#39;ve heard Bill speak, and both times I found the Q&amp;amp;A session to be a very valuable part of the keynote. Some conference attendees got a chance to ask Bill some questions and express some frustrations with developing around Office and SharePoint. &lt;/p&gt;
&lt;p&gt;Here are some of the more interesting point that came out of the Q&amp;amp;A:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Office 14&lt;/strong&gt;&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft is hard at work on Office 14 (looks like we&amp;#39;re skipping v13) 
&lt;li&gt;Office 14 will contain a major &amp;quot;Office in the cloud&amp;quot; piece where there will be web versions of programs such as Word, Excel, etc. &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Bill acknowledged that these wouldn&amp;#39;t be as feature-rich, but would contain enough functionality for the most common tasks, e.g. OWA vs. Outlook&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;SharePoint&lt;/strong&gt;&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;He acknowledged that SharePoint 2007&amp;#39;s success caught Microsoft a little by surprise&lt;/li&gt;
&lt;li&gt;They&amp;#39;re doing their best to catch up on documentation and developer tool support&lt;/li&gt;
&lt;li&gt;Increased staffing in SharePoint product support&lt;/li&gt;
&lt;li&gt;Future support for enabling Lists to use their own SQL tables for storage&lt;/li&gt;&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;Apple&lt;/strong&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;He pointed out that a lot of effort was made to &amp;quot;Apple&amp;#39;ify&amp;quot; Office 2008 for the Mac&lt;/li&gt;
&lt;li&gt;As a result, there are no plans to support things such as VBA and Ribbon extensibility&amp;nbsp;in Office 2008 for the Mac&lt;/li&gt;
&lt;li&gt;This comment came as a result of someone asking if Microsoft would eventually provide support for programming against the object model in Office 2008 for the Mac&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;p&gt;Overall, I was impressed by how everybody who asked a question got a straight and informed answer. Well, except the host who asked: &amp;quot;What&amp;#39;s up with Yahoo?&amp;quot;&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=3743" width="1" height="1"&gt;</description></item></channel></rss>