<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.claritycon.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">George Durzi</title><subtitle type="html" /><id>http://blogs.claritycon.com/blogs/george_durzi/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.claritycon.com/blogs/george_durzi/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2008-03-04T18:37:00Z</updated><entry><title>Exchange Web Services OSX Widget project on CodePlex</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/08/22/exchange-web-services-osx-widget-project-on-codeplex.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/08/22/exchange-web-services-osx-widget-project-on-codeplex.aspx</id><published>2008-08-22T19:26:47Z</published><updated>2008-08-22T19:26:47Z</updated><content type="html">&lt;p&gt;We recently worked on porting the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=F9A0D33C-C894-4EA1-AD20-4E418C715175&amp;amp;displaylang=en" target="_blank"&gt;Exchange Web Services Windows Vista Gadget&lt;/a&gt; into an OSX widget. Exchange 2007 exposes functionality via Exchange Web Services, so why not take advantage of that to build something on the OSX platform?&lt;/p&gt; &lt;p&gt;Despite my deep dislike for JavaScript, I was interested in this project because I could finally see what it was like for developers on the other side. &lt;a href="http://blogs.claritycon.com/blogs/kevin_marshall/default.aspx" target="_blank"&gt;Kevin Marshall&lt;/a&gt; also finally got to use his G4 - nicknamed Quadzilla - as more than just an expensive foot rest. &lt;/p&gt; &lt;p&gt;The project is now &lt;a href="http://codeplex.com/EWSMacWidget" target="_blank"&gt;available on CodePlex&lt;/a&gt;. I&amp;#39;ll point out some things at the end of the post which caused us headaches during development, if you&amp;#39;re interesting in contributing and helping out, please let me know. &lt;/p&gt; &lt;h4&gt;&lt;/h4&gt; &lt;h4&gt;DashCode &lt;/h4&gt; &lt;p&gt;DashCode, part of the freely available Xcode suite, is a tool made specifically for building Dashboard widgets. DashCode works great for the purpose it was intended for: building widgets. &lt;/p&gt; &lt;p&gt;The keyboard shortcuts in DashCode are a little un-intuitive, so I found myself clicking around the IDE more than I would like. Otherwise, not much to complain about. &lt;/p&gt; &lt;p&gt;The great thing about DashCode is that it provides a native debugging environment for widgets. If you&amp;#39;ve built gadgets in Windows, you know you have to either deploy/run them to test, or trick them into running inside a web site. &lt;/p&gt; &lt;p&gt;However, in doing such a good job in enabling that, DashCode makes it a pain to integrate well with source control. A widget is simply a zip archive with a wdgtproj extension which DashCode knows how to open and edit. &lt;/p&gt; &lt;p&gt;However, no source control client is going to be intelligent enough to realize that you changed one of the files inside the wdgtproj file from within DashCode - they all treat the wdgtproj file as a folder. We ended up having to manually check out the files in source control, and then edit them in DashCode. Not a huge deal I guess, but required some extra care.&lt;/p&gt; &lt;p&gt;One thing that baffles me is the large number of tools included in Xcode. In Visual Studio, you have the idea of project templates to create different types of solutions. On the Mac side, there are a number of highly specific applications for certain types of projects.&lt;/p&gt; &lt;p&gt;&lt;img src="http://employees.claritycon.com/gdurzi/blog/EWSMacWidget/EWSMacWidget.4.png" alt="" /&gt; &lt;/p&gt; &lt;h4&gt;Source Control&lt;/h4&gt; &lt;p&gt;&lt;a href="http://www.teamprise.com/" target="_blank"&gt;Teamprise&lt;/a&gt; puts out a great TFS client for OSX. You can try it out for free, or apply for a free licence if you&amp;#39;re a contributor on a CodePlex project. &lt;/p&gt; &lt;p&gt;&lt;img src="http://employees.claritycon.com/gdurzi/blog/EWSMacWidget/EWSMacWidget.5.png" alt="" /&gt;&amp;nbsp; &lt;/p&gt; &lt;h3&gt;Widget&lt;/h3&gt; &lt;p&gt;The widget mirrors the functionality of the original Vista gadget, allowing you to see the contents of your Inbox, Calendar, and Tasks. &lt;/p&gt; &lt;p&gt;&lt;img src="http://employees.claritycon.com/gdurzi/blog/EWSMacWidget/EWSMacWidget.3.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;You can click an item and open a flyout to see its details. From within the widget, you can also access a folder or item in Outlook Web Access. &lt;/p&gt; &lt;p&gt;When first starting up the widget, you have to provide some settings in order for it to connect to EWS on your Exchange Server. You can choose to specify the server manually, or let the widget use AutoDiscover to figure out the Url to EWS. &lt;/p&gt; &lt;p&gt;&lt;img src="http://employees.claritycon.com/gdurzi/blog/EWSMacWidget/EWSMacWidget.1.png" alt="" /&gt; &lt;/p&gt; &lt;p&gt;&lt;img src="http://employees.claritycon.com/gdurzi/blog/EWSMacWidget/EWSMacWidget.2.png" alt="" /&gt; &lt;/p&gt; &lt;h4&gt;cURL / NTLM&lt;/h4&gt; &lt;p&gt;We quickly found out that non-Microsoft implementations of XmlHTTPRequest don&amp;#39;t implement NTLM. Since the widget is written in JavaScript, it effectively uses the XmlHTTPRequest provided in the Safari stack. This was a deal breaker, because a default Exchange 2007 installation is secured using NTLM. &lt;/p&gt; &lt;p&gt;One of our engineers discovered a utility called &lt;a href="http://curl.haxx.se/" target="_blank"&gt;cURL&lt;/a&gt; that&amp;#39;s available by default on OSX. cURL is a command-line utility originally intended to transfer files. However, with the right combination of parameters, we were able to use it to execute SOAP calls against EWS, and also use NTLM authentication. &lt;/p&gt; &lt;p&gt;What we ended up doing was using &lt;strong&gt;widget.system&lt;/strong&gt; to execute cURL commands that posted our requests to EWS. You can use widget.system asynchronously, so we were able to implement callbacks that interpreted the cURL responses.&lt;/p&gt; &lt;p&gt;We of course lost out on a lot of goodness that comes with XmlHTTPRequest, e.g. a Status property to see the result of the HTTP request. We now have to parse a separation &amp;quot;authentication cURL request&amp;quot; for an HTTP error code. &lt;/p&gt; &lt;h3&gt;Opportunities for Contribution&lt;/h3&gt; &lt;p&gt;There are a couple of things which I would like to improve. If anybody is interested in contributing, please contact us through CodePlex or directly via the blog.&lt;/p&gt; &lt;h5&gt;Use of cURL&lt;/h5&gt; &lt;p&gt;There&amp;#39;s gotta be a better way to do this. I read about the ability to write custom plug-ins for widgets, and in those you have full access to Apple&amp;#39;s library - you&amp;#39;re not limited by JavaScript. I&amp;#39;ve never written a line of Objective-C, so I didn&amp;#39;t even know where to start with this. &lt;/p&gt; &lt;h5&gt;Flyouts&lt;/h5&gt; &lt;p&gt;The current flyout implementation is simply a div which we make visible after dynamically resizing the widget using &lt;strong&gt;widget.resizeBy&lt;/strong&gt;. The funny thing about the current flyout is that the mouse scrollwheel only works when the cursor is in the scrollbar. &lt;/p&gt; &lt;p&gt;I really like how the Weather widget resizes elegantly, and would like to implement something similiar. This is something that Vista gadgets do a great job of providing natively.&lt;/p&gt; &lt;h3&gt;Learnings&lt;/h3&gt; &lt;p&gt;As far as how developers on the other side did things, it was interesting to get that experience. However, I always found myself wishing for some feature in Visual Studio that would have made my life easier in DashCode. On the other hand, the widget debugging experience was much better in DashCode. &lt;/p&gt; &lt;p&gt;Overall, the tools were decent, community content such as forums was hard to find, but Apple had some good developer documentation. &lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=11591" width="1" height="1"&gt;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author><category term="OSX" scheme="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/OSX/default.aspx" /><category term="Exchange Web Services" scheme="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/Exchange+Web+Services/default.aspx" /><category term="Widget" scheme="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/Widget/default.aspx" /></entry><entry><title>New OCSDKWrapper Release (1.0.0.3) on CodePlex</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/08/19/new-ocsdkwrapper-release-1-0-0-3-on-codeplex.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/08/19/new-ocsdkwrapper-release-1-0-0-3-on-codeplex.aspx</id><published>2008-08-19T21:01:00Z</published><updated>2008-08-19T21:01:00Z</updated><content type="html">&lt;p&gt;If you&amp;#39;re not familiar with the &lt;a class="" href="http://www.codeplex.com/OCSDKWrapper" target="_blank"&gt;OCSDKWrapper&lt;/a&gt; project on CodePlex, it&amp;#39;s a wrapper that encapsulates the functionality of the Office Communicator 2007 SDK -&amp;nbsp;allowing you to focus on building your application instead of dealing with the &amp;quot;plumbing&amp;quot; required to get the SDK wired up to Communicator. &lt;/p&gt;
&lt;p&gt;Today I published Release 1.0.0.3 of the OCSDKWrapper which is now &lt;a href="http://www.codeplex.com/OCSDKWrapper/Release/ProjectReleases.aspx?ReleaseId=16455"&gt;available for download&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;This release includes some enhancements, some of them &lt;strong&gt;&lt;u&gt;breaking changes&lt;/u&gt;&lt;/strong&gt;, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Cleaner implementation of singleton design pattern that&amp;#39;s used in the MOCAutomation class&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;All public methods are no longer static; they have to be accessed via the Instance property of MOCAutomation&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Added a &lt;em&gt;GetMyContacts&lt;/em&gt; method&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;I&amp;#39;ve also gotten a few requests to expose the underlying Communicator objects (&lt;em&gt;IMessenger&lt;/em&gt;, &lt;em&gt;IMessengerAdvanced&lt;/em&gt;, etc.) via an instance of MOCAutomation. That seems like a great idea if the developer needs to wire up some functionality that&amp;#39;s not wrapped up in OCSDKWrapper.&lt;/p&gt;
&lt;p&gt;This is really as simple as exposing these as public properties, I&amp;#39;m just working on some additional testing in case there are some side effects, e.g. if I did something like &lt;em&gt;MOCAutomation.Instance.CommunicatorObjectProperty.SignOut()&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Keep an eye on my blog or the CodePlex project for more updates as they become available. &lt;/p&gt;
&lt;p&gt;I&amp;#39;m also looking for some contributors to put together another sample application that showcases some of the other functionality of the OCSDKWrapper, let me know if you&amp;#39;re interested. &lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=11087" width="1" height="1"&gt;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>MobileMe: Internet Explorer 7 is not fully supported</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/19/mobileme-internet-explorer-7-is-not-fully-supported.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/19/mobileme-internet-explorer-7-is-not-fully-supported.aspx</id><published>2008-07-20T00:51:17Z</published><updated>2008-07-20T00:51:17Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>OCSDKWrapper Project on CodePlex</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/05/ocsdkwrapper-project-on-codeplex.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/07/05/ocsdkwrapper-project-on-codeplex.aspx</id><published>2008-07-05T22:40:46Z</published><updated>2008-07-05T22:40:46Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>WPF/XBAP IOException: Cannot locate resource app.xaml</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/06/24/wpf-xbap-ioexception-cannot-locate-resource-app-xaml.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/06/24/wpf-xbap-ioexception-cannot-locate-resource-app-xaml.aspx</id><published>2008-06-24T14:32:24Z</published><updated>2008-06-24T14:32:24Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>TechEd 2008 Happenings</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/06/02/teched-2008-happenings.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/06/02/teched-2008-happenings.aspx</id><published>2008-06-03T03:46:11Z</published><updated>2008-06-03T03:46:11Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>LiveMeeting Recording from geekSpeak UC show</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/22/livemeeting-recording-from-geekspeak-uc-show.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/22/livemeeting-recording-from-geekspeak-uc-show.aspx</id><published>2008-05-22T19:38:52Z</published><updated>2008-05-22T19:38:52Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>MSDN geekSpeak show on 5/21 at 2pm CST</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/19/msdn-geekspeak-show-on-5-21-at-2pm-cst.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/19/msdn-geekspeak-show-on-5-21-at-2pm-cst.aspx</id><published>2008-05-19T15:16:39Z</published><updated>2008-05-19T15:16:39Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author><category term="Office Communicator" scheme="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/Office+Communicator/default.aspx" /><category term="WPF" scheme="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/WPF/default.aspx" /><category term="Gadgets" scheme="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/Gadgets/default.aspx" /></entry><entry><title>TECH Cocktail Conference - May 29th in Chicago</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/03/tech-cocktail-conference-may-29th-in-chicago.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/05/03/tech-cocktail-conference-may-29th-in-chicago.aspx</id><published>2008-05-03T22:47:31Z</published><updated>2008-05-03T22:47:31Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>Contact Name Resolution using the Office Communicator SDK</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/04/29/contact-name-resolution-using-the-office-communicator-sdk.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/04/29/contact-name-resolution-using-the-office-communicator-sdk.aspx</id><published>2008-04-29T13:38:58Z</published><updated>2008-04-29T13:38:58Z</updated><content type="html"> &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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>Ad-hoc phone number dialing using the Office Communicator SDK</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/04/11/ad-hoc-phone-number-dialing-using-the-office-communicator-sdk.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/04/11/ad-hoc-phone-number-dialing-using-the-office-communicator-sdk.aspx</id><published>2008-04-12T02:51:51Z</published><updated>2008-04-12T02:51:51Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>Updated Tafiti SharePoint Search</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/22/updated-tafiti-sharepoint-search.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/22/updated-tafiti-sharepoint-search.aspx</id><published>2008-03-22T23:13:00Z</published><updated>2008-03-22T23:13:00Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>Automating Office Communicator 2007 using the Microsoft Office Communicator 2007 SDK</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/22/automating-office-communicator-2007-using-the-microsoft-office-communicator-2007-sdk.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/22/automating-office-communicator-2007-using-the-microsoft-office-communicator-2007-sdk.aspx</id><published>2008-03-22T21:12:17Z</published><updated>2008-03-22T21:12:17Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author><category term="Office Communicator" scheme="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/Office+Communicator/default.aspx" /><category term="OCS" scheme="http://blogs.claritycon.com/blogs/george_durzi/archive/tags/OCS/default.aspx" /></entry><entry><title>Review: Google Calendar Sync</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/13/review-google-calendar-sync.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/13/review-google-calendar-sync.aspx</id><published>2008-03-13T20:45:56Z</published><updated>2008-03-13T20:45:56Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry><entry><title>pixel8</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/04/pixel8.aspx" /><id>http://blogs.claritycon.com/blogs/george_durzi/archive/2008/03/04/pixel8.aspx</id><published>2008-03-05T00:37:00Z</published><updated>2008-03-05T00:37:00Z</updated><content type="html">&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;</content><author><name>gdurzi</name><uri>http://blogs.claritycon.com/members/gdurzi.aspx</uri></author></entry></feed>