<?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>blogs.claritycon.com</title><link>http://blogs.claritycon.com/blogs/</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Benefits of K2 [blackpearl]</title><link>http://blogs.claritycon.com/blogs/bryan_dougherty/archive/2008/05/10/k2-blackpearl.aspx</link><pubDate>Sat, 10 May 2008 19:23:00 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5124</guid><dc:creator>bdougherty</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a class="" title="K2 [blackpearl]" href="http://www.k2.com/en/displayContent.aspx?id=16" target="_blank"&gt;K2 [blackpearl]&lt;/a&gt; is the newest version of workflow software from SourceCode.&amp;nbsp; I believe it can be a valuable tool for developing line of business applications, specifially solutions that involve routing and tracking work and information between people.&amp;nbsp; While I haven&amp;#39;t built a production solution in blackpearl yet, I think I have a fairly good background from which to evaluate the product.&amp;nbsp;&amp;nbsp;I have experience building process applications in a completely custom fashion,&amp;nbsp;I have some experience with &lt;a class="" title="Windows Workflow Foundation" href="http://msdn.microsoft.com/en-us/netframework/aa663328.aspx" target="_blank"&gt;Windows Workflow Foundation&lt;/a&gt; (WF) and SharePoint, and I have built a production application using the previous K2.net 2003 product.&amp;nbsp; I recently attended a partner training event to get some more hands on experience with blackpearl and speak with K2 folks who really know the product.&amp;nbsp; This evaluation serves as&amp;nbsp;a mental exercise for me and also information for those who may be considering blackpearl.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Basics of a Workflow Application&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Applications that improve business processes usually have some basic concepts in common: users, tasks, data, rules.&amp;nbsp; Users are assigned tasks to process data.&amp;nbsp; A simple example: Employees (&lt;em&gt;users&lt;/em&gt;) submit purchase orders (&lt;em&gt;data&lt;/em&gt;) for approval.&amp;nbsp; Depending on the cost of the purchase and the department the requester works in (&lt;em&gt;rules&lt;/em&gt;), a manager has to approve it (&lt;em&gt;task&lt;/em&gt;).&amp;nbsp; &lt;/p&gt;
&lt;p&gt;So how do you build a system like this?&amp;nbsp; Obviously you&amp;#39;re going to start with requirements gathering&amp;nbsp;and in a business process app (any app really), that can be one of the biggest challenges.&amp;nbsp;&amp;nbsp;I think blackpearl can help you early on in the process.&amp;nbsp; I&amp;#39;m a big believer in early prototyping.&amp;nbsp; Being able to mock up an early system that walks users through the functionality is&amp;nbsp;much more effective&amp;nbsp;in fleshing out requirements for the final solution than simply talking with the business and drawing up how the app should work.&amp;nbsp; blackpearl allows you to rapidly build out workflows&amp;nbsp;so you can walk users the flow of tasks that each user will get, at least in a rudimentary fashion, early on in the process.&amp;nbsp; I&amp;#39;m intrigued by one of the new built in UI options blackpearl introduces.&amp;nbsp; It auto-generates a tabular-label/textbox-style aspx page for the tasks.&amp;nbsp; The final solution will no doubt involve complex business logic and a fancy user interface and lots of other goodies, but to get moving you should be able to get a simple prototype up and running writing little or no code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Visual Designer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m a visual person.&amp;nbsp; I think you have to be to understand complex business process applicaitons.&amp;nbsp; K2 blackpearl offers three different designers to model processes in: 1) Visio 2007 2) an ajax web-based designer 3) Visual Studio 2005 (and 2008 shortly, I think).&amp;nbsp; The latter is great for developers.&amp;nbsp; And the K2 marketing folks will tell you that the first two options enable your non-technical business analysts to design workflows.&amp;nbsp; I&amp;#39;m not buying it, though.&amp;nbsp; I don&amp;#39;t see non-technical folks building out production workflows.&amp;nbsp; Wizards and all, there are still too many blackpearl and technical details in a real world scenario that make this unlikely.&amp;nbsp;&amp;nbsp;I can see two ways this could be helpful, though.&amp;nbsp; Business analysts can start with Visio to diagram&amp;nbsp;a process which can later be &amp;quot;blackpearled&amp;quot; by developers, giving the process a jump start.&amp;nbsp; Then, viewing in Viso, developers and business analysts can continue to refine the workflow by looking at it in&amp;nbsp;a &amp;quot;common language&amp;quot;.&amp;nbsp; I haven&amp;#39;t tried this yet, but it seems viable.&lt;/p&gt;
&lt;p&gt;Looking at the alternative approaches, SharePoint workflos are WF-based and therefore give you a designer to work with.&amp;nbsp; With a custom solution, you could use WF as your workflow engine and get design capabilities.&amp;nbsp; However you have a lot of plumbing to build out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plumbing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Building a system that tracks tasks is non-trivial.&amp;nbsp; In a custom solution, it most likely involves building a database table for tasks, writing code at write to and update the tables as events occur, properly assigning to the tasks to the correct&amp;nbsp;user(s), notifying the users of their tasks, and allowing them to manage them.&amp;nbsp; It doesn&amp;#39;t sound extremely difficult, right?&amp;nbsp; But like I said, it&amp;#39;s&amp;nbsp;certainly non-trivial.&amp;nbsp; WF gives you a good framework to build on and some basic service implementations for things like persistence via SQL Server, but you&amp;#39;re still going to have to build out a host process, define your workflow related classes and wire everything up.&amp;nbsp; And unless you&amp;#39;re really forward thinking, you have to do this for every application you build.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;SharePoint workflows have the concept of using SharePoint lists for tasks.&amp;nbsp; These tasks are scoped to a list within a site and without&amp;nbsp;some custom work, it is difficult to create an aggregate view of tasks from various sites.&amp;nbsp; Another interesting point is that by default SharePoint&amp;nbsp;deletes&amp;nbsp;completed tasks after 60 days to improve performance.&amp;nbsp;&amp;nbsp;You can&amp;nbsp;turn that&amp;nbsp;&amp;quot;feature&amp;quot; off but&amp;nbsp;the onus is on&amp;nbsp;you to archive task history, which could be a necessary requirement for compliance.&amp;nbsp;You may want to do this with a blackpearl solution, as well, but the underlying database is built in a way that you don&amp;#39;t need to.&lt;/p&gt;
&lt;p&gt;Taking tasks a step further, after getting through the basics,&amp;nbsp;you have to write even more code to monitor the tasks and&amp;nbsp;react to tasks that have not been acted on in certain timeframe.&amp;nbsp; In K2 blackpearl this functionality can be defined in an Escalation.&amp;nbsp; You can specify rules like &amp;quot;if this task isn&amp;#39;t completed in 24 hours, send an email every day&amp;quot; or &amp;quot;if this task isn&amp;#39;t completed by a certain date specified in my business data, move to another point in the workflow&amp;quot;.&amp;nbsp; Certainly non-trivial coding here.&lt;/p&gt;
&lt;p&gt;We haven&amp;#39;t even touched on how tasks are assigned or how you know when&amp;nbsp;tasks are completed yet, either.&amp;nbsp; Simple assignment isn&amp;#39;t that hard, right?&amp;nbsp; Just an AssignedToUserID column in my Task table, right?&amp;nbsp; Well for one applicaiton that might be ok.&amp;nbsp; But what if your process is more complicated.&amp;nbsp; &amp;quot;This purchase order needs to be approved by&amp;nbsp;two of the managers in the Accounting Department.&amp;quot;&amp;nbsp;&amp;nbsp;blackpearl has the concept of Destinations, Slots, and Succeeding Rules&amp;nbsp;for each activity, or milestone, in a workflow that allows you to easily define scenarios like this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Additional Benefits&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;K2 blackpearl has additional benefits over a SharePoint or custom solution including versioning support, robust logging and exception handling, and&amp;nbsp;MSBuild integration.&amp;nbsp; And K2 blackpearl also offers addtional advanced&amp;nbsp;features.&amp;nbsp;&amp;nbsp;Smart Objects provide the ability to build facades that encapsulate multiple backend datasources for use in workflows and reporting.&amp;nbsp; Another interesting feature is the&amp;nbsp;Event Bus, which allows you to register events and build out an event driven architecture.&amp;nbsp; These concepts are interesting, but I&amp;#39;m reserving judgement until I have a chance to realy work with them.&amp;nbsp; I may try to expand on the benefits in these areas in future posts.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the spirit of full disclosure, I have to point out that Clarity is a K2 partner, so it would be easy to assume that I have an obligation to recommend blackpearl.&amp;nbsp; However, we&amp;#39;re not in the business of selling K2 licenses.&amp;nbsp; We&amp;#39;re in the business of serving our clients by building software solutions and their&amp;nbsp;needs always&amp;nbsp;come first.&amp;nbsp; Writing and testing infrastructure&amp;nbsp;code that manages workflows and tasks is not a activity worth spending time and money on.&amp;nbsp;&amp;nbsp;K2 blackpearl provides that framework, allowing us to focus on&amp;nbsp;designing and building applications that solve the business problems at hand, enabling us&amp;nbsp;to quickly deliver high quality process related solutions that meet their needs.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5124" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/bryan_dougherty/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category><category domain="http://blogs.claritycon.com/blogs/bryan_dougherty/archive/tags/K2/default.aspx">K2</category><category domain="http://blogs.claritycon.com/blogs/bryan_dougherty/archive/tags/blackpearl/default.aspx">blackpearl</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><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>OS Chasing: The Usability Gap</title><link>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/05/02/os-chasing-the-usability-gap.aspx</link><pubDate>Fri, 02 May 2008 15:55:38 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5056</guid><dc:creator>pmiller</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;I&amp;#39;ve written many times before about my trial runs of various Linux distributions and I feel like I&amp;#39;ve said most of what I have to say about the matter. However, I recently saw a post entitled, &lt;a href="http://contentconsumer.wordpress.com/2008/04/27/is-ubuntu-useable-enough-for-my-girlfriend/"&gt;Is Ubuntu Useable Enough For My Girlfriend?&lt;/a&gt; and I decided to have one more go at explaining my ambivalent feelings towards Linux.&lt;/p&gt; &lt;p&gt;First, a brief summary of the post for the link-impaired; relatively experienced Linux user sets up his girlfriend (Windows user, not super technical) with an install of the latest version of Ubuntu, gives her a set of mundane tasks (watch a YouTube video, Google something, do some photo editing) to achieve while he takes notes and hilarity ensues.&lt;/p&gt; &lt;p&gt;I tend to cringe when highly technical users try to predict what a non-technical user will find easy or difficult; there is just so much background knowledge that someone who is passionate about computers takes for granted, that I think we are uniquely ill suited for the task. So, I try to rely more on colloquial evidence, such as this post.&lt;/p&gt; &lt;p&gt;His girlfriend is able to accomplish many of the tasks, but is stymied by a few, mostly due to poor naming or lack of clear instructions on how to install the necessary application or plug in. The conclusion is that Ubuntu is heading in the right direction, but is still not ideal for your &amp;quot;average&amp;quot; non-power user.&lt;/p&gt; &lt;p&gt;This line of argument has been around since Linux on the desktop became a reality, so at first glance it can seem old, stale, whiny or just plain obvious. If you get beyond that initial reaction, it is an amazing commentary on the state of Linux on the desktop. How is it possible that so many talented individuals have labored so long and yet still been unable to produce a desktop system on which these type of basic tasks are as straightforward as they are on Windows or Mac?&lt;/p&gt; &lt;p&gt;I&amp;#39;ll answer that question with another question; could you see Ubuntu declaring a one year new feature freeze, refusing any new graphical bells and whistles, new processor extensions or file system upgrades and instead focusing the next release of Ubuntu entirely on making it as simple as possible for non-technical users to accomplish simple general computing tasks? Imagine the brain power of that many talented contributors all working just towards usability. I think you&amp;#39;d have your killer desktop in way under that one year timeline.&lt;/p&gt; &lt;p&gt;However, my question is flawed. What is Ubuntu? There is an organization around it for sure, but it is not a monolithic one that can give orders to the entire Linux development community. Also, while usability is a stated goal of Ubuntu, it is not necessarily a goal that is shared by many of the elite programmers in the Linux development community. Or more accurately stated, many elite Linux developers are quite comfortable in Linux and don&amp;#39;t feel excited about spending time making it &amp;quot;easier&amp;quot;. &lt;/p&gt; &lt;p&gt;Quite to the contrary, many technical people are attracted to Linux due to the rapid pace of technological advancement. So in essence, you&amp;#39;d be asking the very people who innovated so much to get Linux to where it is now to stop innovating and focus on the unglamorous task of noob babysitting. Or as the author of the post puts it, &amp;quot;The main issue with the desktop experience is that the geeky programmers and designers assume too much from the average user.&amp;quot;&lt;/p&gt; &lt;p&gt;In fairness there are plenty of developers who buck this stereotype and pour effort into usability. Otherwise we wouldn&amp;#39;t have distros like Ubuntu at all. Recognizing the good work that the Ubuntu (and other distros such as PCLinuxOS and Xandros) have done with usability, what&amp;#39;s left to explain the persistent gap?&lt;/p&gt; &lt;p&gt;I think the often overlooked part of this discussion is that Windows and Mac (OS X) set the norms. Whether or not it is fair or just, most people are exposed first and most often to Windows or OS X and from that initial experience, their expectations are set for how interacting with a computer should take place.&lt;/p&gt; &lt;p&gt;This behavior can be maddening and seem foolish, but is not surprising, at least as explained as Dan Ariely describes in his book &lt;a href="http://www.amazon.com/Predictably-Irrational-Hidden-Forces-Decisions/dp/006135323X/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1209743327&amp;amp;sr=8-1"&gt;Predictably Irrational&lt;/a&gt;. Ariely calls this type of behavior &amp;quot;anchoring&amp;quot; and anchoring can explain such oddities as how black pearls suddenly became sought after (they were once relatively unknown and then were introduced first only in high end jewelry stores for high end prices) and how we can feel like we are getting a great deal on a car when we buy it for significantly below the MSRP, despite the MSRP being a somewhat arbitrary number.&lt;/p&gt; &lt;p&gt;So, to come back on topic, even if desktop Linux were easier to use based on some kind of scientific figuring, as long as it remains close enough to our anchor ideal of computer interaction without quite being the same, it will seem inferior and less desirable. &lt;/p&gt; &lt;p&gt;The baseline has to be that either desktop Linux does at least everything as easily as Windows/OS X does plus more or that it presents such a different and satisfying experience that a new anchor is established. A concrete example of this is the iPhone; by offering such a tightly knit and innovative take on the interface of a cell phone it was able to define a new standard for what cell phone UI&amp;#39;s should be.&lt;/p&gt; &lt;p&gt;There is movement within the Linux community to develop new desktop interface experiences such as &lt;a href="http://symphonyos.com/cms/"&gt;Symphony One&lt;/a&gt; and mainstream distros using KDE and Gnome are inching ever closer to matching the out of the box Windows/OS X experience while still offering the power and variety that make Linux fascinating. I am not sure which approach if either will ultimately win out because the final elephant in the room is that Microsoft and Apple are not just standing still, they are trying to take the best bits they see from their competitors and improve their own products.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5056" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/peter_miller/archive/tags/OS+Chasing/default.aspx">OS Chasing</category></item><item><title>Twitterlight updated with animating wrap panel</title><link>http://blogs.claritycon.com/blogs/steve_holstad/archive/2008/05/01/twitterlight-updated-with-animating-wrap-panel.aspx</link><pubDate>Thu, 01 May 2008 17:33:00 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5049</guid><dc:creator>sholstad</dc:creator><slash:comments>0</slash:comments><description>Twitterlight has been updated with some new features that really up the usability of the app. http://www.twitterlight.com Defaulted the view to Public, so non-Twitter users can see data on page load Added profile pics back in Added link to Twitter page on username Made some massive changes to how the app&amp;#39;s structure reorganizes: Moved to Grid wrapper to support dynamic resizing Removed C1 combobox due to bug (couldn&amp;#39;t locate parent canvas, as it&amp;#39;s now a grid) Added Erik Klimczak&amp;#39;s...(&lt;a href="http://blogs.claritycon.com/blogs/steve_holstad/archive/2008/05/01/twitterlight-updated-with-animating-wrap-panel.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5049" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/steve_holstad/archive/tags/Twitter+Twitterlight+SIlverlight+Beta+C_2300_/default.aspx">Twitter Twitterlight SIlverlight Beta C#</category></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><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>Southern California Events</title><link>http://blogs.claritycon.com/blogs/andrew_karcher/archive/2008/04/27/southern-california-events.aspx</link><pubDate>Mon, 28 Apr 2008 06:40:22 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5011</guid><dc:creator>akarcher</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;There are a bunch of really great events coming up in the Southern California region that I wanted to get on everyone&amp;#39;s calendar if they are not already.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;SQL Firestarter Learning Event&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This event will be held on Saturday, May 17th at the Microsoft MTC up in Irvine.&amp;nbsp; Registration still looks like it is open.&amp;nbsp; I would register soon as there are a limited number of attendees for this event.&amp;nbsp; If you are Developer or IT Pro for SQL Server there are some great sessions at the event.&amp;nbsp; There are also some great (wink, wink) speakers at the event.&amp;nbsp; Get more info and register here: &lt;a href="http://www.firestarterevents.com/" target="_blank"&gt;http://www.firestarterevents.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Team System Education Day&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The San Diego .Net User Group is proud to be hosting Chris Menegay from Notion Solutions for our Team System Education Day taking place on Saturday, May 31st at the AMN Healthcare Conference Center.&amp;nbsp; This will be an all-day session dedicated to giving you the education you need to know about Team System.&amp;nbsp; You will be walking away from this conference with a wealth of knowledge about Team System.&amp;nbsp; The price for the conference includes Continental Breakfast, Lunch and snacks throughout the day.&amp;nbsp; There is something here for developers, testers, and architects alike.&amp;nbsp; If you are doing any team development you will want to attend this conference.&amp;nbsp; Get more details and register here: &lt;a href="https://www.123signup.com/event?id=tjnyb" target="_blank"&gt;https://www.123signup.com/event?id=tjnyb&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;SoCal Rock &amp;amp; Roll Code Camp&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Make your plans now to attend the latest and greatest version of the SoCal Rock &amp;amp; Roll Code Camp to be held on June 28th-29th on the UCSD Extension Campus in La Jolla.&amp;nbsp; There is always an impressive lineup of speakers and a wonderful variety of topics.&amp;nbsp; Also, there is also an awesome Geek Dinner on Saturday night featuring great food and live Rock and Roll.&amp;nbsp; Be sure to sign up and attend.&amp;nbsp; Also, if you are interested in speaking sign up to deliver a session.&amp;nbsp; It is fun and educational, and you are helping support the local technical community.&amp;nbsp; You can get more information here: &lt;a href="http://www.socalcodecamp.com"&gt;http://www.socalcodecamp.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5011" width="1" height="1"&gt;</description></item><item><title>Digging into ASP.NET MVC - Part 2</title><link>http://blogs.claritycon.com/blogs/curtis_swartzentruber/archive/2008/04/26/digging-into-asp-net-mvc-part-2.aspx</link><pubDate>Sun, 27 Apr 2008 00:45:51 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:5005</guid><dc:creator>cswartz</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I got a bit sidetracked from the MVC stuff as I didn&amp;#39;t have as much time between projects as expected, but had a chance today to play around with it a bit more at home.&amp;nbsp; I don&amp;#39;t really have any earth shattering things to share, but I did run into a couple of beginner gotchas here and there.&amp;nbsp; Still not quite wrapping my head around certain things.&lt;/p&gt; &lt;p&gt;I had set up my home machine with Visual Studio 2008, but I guess I never finished setting things up.&amp;nbsp; I had copied my MVC projects over and was having trouble getting certain things to work properly until I realized I hadn&amp;#39;t installed the MVC bits yet.&amp;nbsp; Doh.&amp;nbsp; So that helped.&amp;nbsp; I had a couple of the dlls in the bin directory, so a lot of things actually worked, but the Visual Studio tie-ins weren&amp;#39;t there.&amp;nbsp; Also, you really can&amp;#39;t run an MVC project by opening from the file system, you do have to use the MVC project type in order to get everything wired up correctly.&amp;nbsp; That might be obvious, but if you have gotten used to just pointing at a directory to quickly open a web site to play around with, that won&amp;#39;t work.&lt;/p&gt; &lt;p&gt;On my new project we are using LINQ extensively, so when I last played around with MVC I was also trying to figure out LINQ and between the two had a bit of a learning curve.&amp;nbsp; I&amp;#39;m starting to get more comfortable with LINQ, so that helped me get up and running a lot more quickly this time.&amp;nbsp; I figured out how to use the LINQ to SQL objects as a ViewData source for my MVC views, so that is kinda cool.&amp;nbsp; If you want to just spit our html using a for each type pattern, you can even cast the objects back into your LINQ to SQL object and get strong-typing in your view.&amp;nbsp; Not sure if that is kosher or not, but hey I&amp;#39;m still learning.&amp;nbsp; &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx" target="_blank"&gt;Guthrie does it&lt;/a&gt; a bit, so I think I might be safe.&amp;nbsp; You can also use the standard ASP.NET data controls like grid views, repeaters, etc., but that might get you into trouble.&amp;nbsp; More on that later.&lt;/p&gt; &lt;p&gt;My personal web site has a lot of simple pages where I just get and display some data, such as favorite movies, music and so forth.&amp;nbsp; MVC works great for that.&amp;nbsp; In fact, I was able to rewire about 6 pages in an afternoon, including LINQ data access.&amp;nbsp; So that is pretty sweet.&amp;nbsp; Also really like the Html.ActionLink syntax for links, as it gives you a lot of security against moving stuff around.&amp;nbsp; As long as your controllers know where to find the views, the actual view can change as much as you want in location, name, etc.&amp;nbsp; I&amp;#39;m still looking for a good way to use an image rather than text though.&amp;nbsp; People have a few ideas, but this feels like an area that needs improvement.&lt;/p&gt; &lt;p&gt;After getting data display working on a number of pages, the next thing I need to investigate is saving data back to the database.&amp;nbsp; There are a couple of things that are a bit of a paradigm shift here.&amp;nbsp; One, you don&amp;#39;t have server controls, postback, viewstate, etc.&amp;nbsp; So in some ways it is a step back to some older ways of doing things, but it gets you back to a very clean html entry form again, but with all the power of the latest .NET stack working for you.&amp;nbsp; Two (and this is the trouble I was talking about), you can&amp;#39;t have a server form on the page or stuff just doesn&amp;#39;t work.&amp;nbsp; I was trying to follow some tutorials and couldn&amp;#39;t figure out what I was missing.&amp;nbsp; Typically you create a standard html form and set it to post to an action your controller understands.&amp;nbsp; Mine was just posting back to the same view and I couldn&amp;#39;t figure out why until I realized I also had another standard asp.net form (runat = server) on the page that was confusing things.&amp;nbsp; Once I removed that, I started getting the behavior I expected.&amp;nbsp; Unfortunately, I was at a point where I needed to stop so I&amp;#39;ll have to continue that learning curve on another day.&amp;nbsp; Seems reasonably straight-forward now that I&amp;#39;m starting to wrap my head around it though.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5005" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/curtis_swartzentruber/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.claritycon.com/blogs/curtis_swartzentruber/archive/tags/web+development/default.aspx">web development</category><category domain="http://blogs.claritycon.com/blogs/curtis_swartzentruber/archive/tags/MVC/default.aspx">MVC</category><category domain="http://blogs.claritycon.com/blogs/curtis_swartzentruber/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.claritycon.com/blogs/curtis_swartzentruber/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category></item><item><title>Notes and notes...</title><link>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/04/23/notes-and-notes.aspx</link><pubDate>Thu, 24 Apr 2008 06:26:04 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4981</guid><dc:creator>pmiller</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;After 2 months of dormancy, I am starting back up the easy way, with some short notes on topics of interest:  &lt;p&gt;&lt;strong&gt;1. Windows Home Server: 2 Months In&lt;/strong&gt;  &lt;p&gt;The best compliment I can give is that I just don’t think about my Home Server anymore. I let it do its thing and don’t worry about it. I am anxiously awaiting the Power Pack 1 additions, along with the data corruption bug fix (which has not affected me at all yet). In hindsight, I should have just gotten a prebuilt solution, avoided the install pain and had a machine with a smaller footprint, but my custom build does get the job done.  &lt;p&gt;&lt;strong&gt;2. Microsoft OneNote: Better than TXT?&lt;/strong&gt;  &lt;p&gt;I’m still using OneNote at home to take notes on Core Python Programming (my current Python resource of choice), but at work I’m back to using mostly NotePad2 and other plain text editors. Even though OneNote does not fight you as much as Word, it still has the annoying AutoCorrect behaviors that sometimes make plain old text much less of a hassle. The feature to publish your notes to a web page format is nice, although Microsoft’s decision to use the obscure .MHT format is confusing. So after a few months of use, my opinion of OneNote is far more mixed.  &lt;p&gt;&lt;strong&gt;3. Netflix Impresses&lt;/strong&gt;  &lt;p&gt;One of my favorite new technology toys is Netflix “Watch Instantly” feature. The quality is very good, and although the available content is mostly TV shows, seeing what you want, streaming, when you want it, is really an amazingly satisfying experience. If Netflix can integrate this into a set top box, &lt;a href="http://arstechnica.com/news.ars/post/20080103-netflix-aims-for-the-tv-and-apple-tv-with-set-top-box.html"&gt;watch out.&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;4. Indexed&lt;/strong&gt;  &lt;p&gt;I was going to draw a clever graph showing the inverse relationship between work load and my blogging frequency, but it seemed too obvious, so I’ll just plug the real &lt;a href="http://indexed.blogspot.com/"&gt;Indexed&lt;/a&gt; site, which is far cleverer. I have been exploring the Python web framework &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;, so work load non-withstanding, I hope to share the rare sight of some code on this blog in the near future.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4981" width="1" height="1"&gt;</description></item><item><title>Stumbling Through: K2 [blackpearl] For-Each Loop Simulation</title><link>http://blogs.claritycon.com/blogs/tim_byrne/archive/2008/04/17/stumbling-through-k2-blackpearl-for-each-loop-simulation.aspx</link><pubDate>Thu, 17 Apr 2008 14:30:38 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4932</guid><dc:creator>tbyrne</dc:creator><slash:comments>0</slash:comments><description>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d23a7629-23a5-4aa9-baff-b075e63fb2c0" 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/k2" rel="tag"&gt;k2&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blackpearl" rel="tag"&gt;blackpearl&lt;/a&gt;,&lt;a href="http://technorati.com/tags/InfoPath" rel="tag"&gt;InfoPath&lt;/a&gt;,&lt;a href="http://technorati.com/tags/workflow" rel="tag"&gt;workflow&lt;/a&gt;&lt;/div&gt; &lt;p&gt;I know I know, I am way behind on my InfoPath Integration series that I started several weeks back, but still, I&amp;#39;d like to go off on a tangent here on a somewhat tricky methodology for accomplishing something that is probably pretty common in a lot of workflow scenarios.&amp;nbsp; That scenario is this:&amp;nbsp; Lets say we have a list of zero to many items, where it is unknown how many items may be in said list but we need to do some sort of workflow process on each item in the list.&amp;nbsp; Specifically, we will use an InfoPath template with a repeating table as our example.&amp;nbsp; In this InfoPath template, the user may add as many rows as they like to the repeating table which we will call &amp;#39;Child&amp;#39; for simplicity sake.&amp;nbsp; Each &amp;#39;Child&amp;#39; row has a &amp;#39;Name&amp;#39; and a &amp;#39;Description&amp;#39; field.&amp;nbsp; In our workflow process, we need to loop through each &amp;#39;Child&amp;#39; row and create a smart object for it, so it is persisted to a data store.&lt;/p&gt; &lt;p&gt;I am going to make a couple of assumptions here before I get started with my example.&amp;nbsp; I am assuming there is an InfoPath form with the &amp;#39;Child&amp;#39; repeating table present as defined above, and there is a simple smart object defined with a &amp;#39;Name&amp;#39; and &amp;#39;Description&amp;#39; property.&amp;nbsp; I am also assuming that the InfoPath form is integrated with the process which we will be using as an example, with the process being started on submission of the Infopath form.&lt;/p&gt; &lt;p&gt;Given our assumptions, the first step to simulating a For-Each loop is to drag out a Smart Object event which is going to be our action taken on each iteration of the loop.&amp;nbsp; Map this Smart Object event to our &amp;#39;Child&amp;#39; smart object&amp;#39;s &amp;#39;Create&amp;#39; method.&amp;nbsp; Leave the input and output parameters blank for now, we&amp;#39;ll need to extract them in our loop.&amp;nbsp; What we are doing here is providing the action to take place on every iteration of the loop, which in this case is to create a &amp;#39;Child&amp;#39; smart object:&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="427" alt="image" src="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_thumb.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;No we need to go about telling the activity that it is to be executed for each child row in the InfoPath form.&amp;nbsp; It is not very intuitive to do this, which is why I&amp;#39;m blogging about it in great detail.&amp;nbsp; I&amp;#39;ll try and explain each step as best I can.&amp;nbsp; The first step is to bring up the activity&amp;#39;s &amp;#39;Destination Rule&amp;#39; wizard:&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_3.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="427" alt="image" src="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_thumb_3.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Once the rule wizard starts, we actually need to GO BACK a screen (Click the &amp;#39;Back&amp;#39; button), so we can tell the wizard we want to run in advanced mode:&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="368" alt="image" src="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_thumb_4.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_5.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="368" alt="image" src="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_thumb_5.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now that we are in advanced mode, click &amp;#39;Next&amp;#39; and we are presented with a list of options for specifying when instances of this activity should be created.&amp;nbsp; We want to specify &amp;#39;Plan per slot (no destinations)&amp;#39;, which means that this activity is not going to an actual destination and that we will be creating x number of instances of the activity:&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="368" alt="image" src="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_thumb_6.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Click &amp;#39;Next&amp;#39; and we are presented with a special screen based on our previous selection of &amp;#39;no destinations&amp;#39;.&amp;nbsp; In this screen, we are being asked to specify how many instances of the activity we will be creating.&amp;nbsp; The first option assumes we know the exact number of slots to create, which we don&amp;#39;t since we are relying on the InfoPath repeating table to tell us this.&amp;nbsp; The second option allows us to specify any repeating field (be it a repeating xml node or a smart object list) to iterate through, creating an instance of the activity for each iteration.&amp;nbsp; This is exactly what we want, so select this option.&amp;nbsp; In the field entry, specify the repeating &amp;#39;Child&amp;#39; node from our InfoPath form which instructs it to create an activity instance for each row in this repeating table:&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_7.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="368" alt="image" src="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_thumb_7.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Click &amp;#39;Finish&amp;#39; to finalize the destination rule wizard.&amp;nbsp; What would happen now if we ran this process is that for each &amp;#39;Child&amp;#39; row inserted into the InfoPath form, there will be a blank smart object record inserted into the Smart Box database.&amp;nbsp; Why will the smart object values be blank?&amp;nbsp; We never mapped the &amp;#39;Create&amp;#39; method&amp;#39;s input parameters to the values being extracted from the child node iteration.&amp;nbsp; Now there is good news, bad news and worse news here:&amp;nbsp; The good news is that all of the data from the child node of the current iteration is available in the &amp;#39;ActivityDestinationInstance.InstanceData&amp;#39; field:&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="368" alt="image" src="http://employees.claritycon.com/tbyrne/StumblingThroughK2blackpearlForEachLoopS_780E/image_thumb_8.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The bad news is that, as you can see, there is no design-time context for the underlying data in this field so we can&amp;#39;t use the interface to map values to the Create method.&amp;nbsp; No problem, we can always create our data fields manually in server code, parsing the individual data fields from the InstanceData into our own data fields.&amp;nbsp; Here is the worse news.&amp;nbsp; The InstanceData field concatenates the data of its repeating node into one giant non-delimited string, making it very difficult to extract individual values.&amp;nbsp; I am currently working with the product support team to see if there is a better way to get at our iteration data, but for now this is only a viable solution if you either have just one child value or if you can make assumptions on data locations and sizes in your InstanceData.&amp;nbsp; I&amp;#39;ll post an update here if and when I learn a more effective way to get at the iteration data.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4932" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/tim_byrne/archive/tags/K2/default.aspx">K2</category></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><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>Honored to be joining such an Elite Group</title><link>http://blogs.claritycon.com/blogs/andrew_karcher/archive/2008/04/02/honored-to-be-joining-such-an-elite-group.aspx</link><pubDate>Thu, 03 Apr 2008 04:27:02 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4789</guid><dc:creator>akarcher</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;I am honored to have been chosen as a SQL Server MVP for the upcoming year for my work in the SQL Server Community.&amp;nbsp; When I look at the list of MVPs I am truly humbled to be joining their company.&amp;nbsp; I am looking forward to joining them in a couple weeks at the MVP Summit up in Seattle.&amp;nbsp; Participating in your local communities is such a great and rewarding experience, I would recommend that everyone look for ways that they can contribute to their own communities.&lt;/p&gt; &lt;p&gt;I am also looking forward to &lt;a href="http://www.partywithpalermo.com/" target="_blank"&gt;Partying with Palermo&lt;/a&gt;&lt;/p&gt;&lt;a href="http://www.partywithpalermo.com"&gt;&lt;img style="border-top-style:none;border-right-style:none;border-left-style:none;border-bottom-style:none;" alt="Party with Palermo" src="http://www.partywithpalermo.com/images/pwpbadge.jpg" /&gt; &lt;/a&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4789" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/andrew_karcher/archive/tags/San+Diego+Community/default.aspx">San Diego Community</category><category domain="http://blogs.claritycon.com/blogs/andrew_karcher/archive/tags/Non-Technical/default.aspx">Non-Technical</category><category domain="http://blogs.claritycon.com/blogs/andrew_karcher/archive/tags/Microsoft+SQL+Server/default.aspx">Microsoft SQL Server</category><category domain="http://blogs.claritycon.com/blogs/andrew_karcher/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category></item><item><title>Microsoft's PhizzPop Design Competition Finals Wrap-up</title><link>http://blogs.claritycon.com/blogs/kevin_marshall/archive/2008/04/02/microsoft-s-phizzpop-design-competition-finals-wrap-up.aspx</link><pubDate>Wed, 02 Apr 2008 08:27:36 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4781</guid><dc:creator>kmarshall</dc:creator><slash:comments>9</slash:comments><description>&lt;p&gt;I&amp;#39;ve had this post in my blog drafts for a bit, but I hadn&amp;#39;t had a chance to finish.&amp;nbsp; I haven&amp;#39;t seen much out there on teh Internets about &lt;a href="http://designchallenge.phizzpop.com/"&gt;PhizzPop&lt;/a&gt; so I thought I&amp;#39;d give a recap of the event.&amp;nbsp; First, I&amp;#39;d like to congratulate Cyngergy on the win.&amp;nbsp; Obviously that means we didn&amp;#39;t win which sucks :( but they have a great team and created some cool stuff which is always good for the industry :)&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The design problem for the finals is &lt;a href="http://phizzpop.visitmix.com/blogs/pdc08/archive/2008/01/25/the-problem-statement-is-revealed.aspx"&gt;here&lt;/a&gt;.&amp;nbsp; For those of you too lazy to read the the whole problem is based around Citizenship in the 21st century and designing a system to create a more efficient democracy.&amp;nbsp; Really cool, but challenging.&amp;nbsp; We had about 7 weeks to complete the problem with our team of three including me (developer, UX storyboarding) Erik Klimczak (designer / developer / integrator )from Clarity and Dale Jones (designer).&amp;nbsp; Due to other project / job duties we didn&amp;#39;t really start working on this until the Friday before the competition.&amp;nbsp; It made for a really hectic weekend, but it&amp;#39;s always fun to work under pressure and it made the finals similar to the &lt;a href="http://blogs.claritycon.com/blogs/kevin_marshall/archive/2007/12/18/3546.aspx"&gt;regional competition&lt;/a&gt;.&amp;nbsp; (Big thanks to Paul Treichler for providing us with 2 cases of Red Bull which makes staying awake for 72hrs possible)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As per my last post on PhizzPop I&amp;#39;ll cover what we built / wanted to build in about 5K words to give you a complete inside look at our process / ideas.&amp;nbsp; It&amp;#39;s kind of long and boring but I&amp;#39;d like to at least capture it somewhere.&amp;nbsp; If it&amp;#39;s not on the internet, it never happened.&amp;nbsp; If you&amp;#39;re not interested in all of the details you can skip to &lt;a&gt;Overview of contest / what we presented&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Initial Storyboard / Wireframes&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Our initial brainstorming sessions were a bit tougher because we had a lot of different ideas of the entire system we wanted to build.&amp;nbsp; We met via Live meeting with Erik in Chicago, me in SF and Dale in Seattle about a week or two before the contest.&amp;nbsp; Live meeting is pretty handy for the remote meetings because of the whiteboard, screen sharing, video/voice and shared notes.&amp;nbsp; After the brainstorming session, I put together some wireframes / story overview in my tool of choice - PowerPoint. I love me some PowerPoint.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Problems&lt;/p&gt; &lt;p&gt;•Sheer volume of news &amp;amp; content is overwhelming - time consuming to shift through all the noise out there.  &lt;p&gt;•Difficult to asses reliability of news sources and find a balanced perspective  &lt;p&gt;•Current news outlets don’t handle discussions well and allow people to engage in civil discourse  &lt;p&gt;•Lack of connection with politicians and decision making process  &lt;p&gt;•Hard to find local vs. international news across a variety of topics  &lt;p&gt;•Difficult to manage multiple roles in privacy i.e. what can my friends see vs. my co-workers  &lt;p&gt;&amp;nbsp; &lt;p&gt;Vision  &lt;p&gt;•Automatically aggregate news and self-moderate quality  &lt;p&gt;•Provide summarized facts and insights about news independent of underlying source reliability to create an informed populace  &lt;p&gt;•Facilitate enaging real-time discussion of news closer to the in-person experience  &lt;p&gt;•Integrate existing social networks while protecting privacy across various social groups  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Main Screen Wireframe for Codename: &amp;quot;Convenient Truth&amp;quot;&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="301" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb.png" width="398" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;1.Daily Truth – RSS feed of news articles including summarized facts and insights. Rather than subscribing to dozens of news feeds or reading multiple papers, you receive one item per news story with a snippet from the most reliable source, list of common facts, and quality community generated opinion. For people that are busy like Jennifer, this give you a quick overview and discussion points that you can consume on any device with an RSS reader such as smartphones.  &lt;p&gt;2. News Scale Slider – The slider allows you to change the scope of news being viewed from Global to Local. At the global level news is related to international events and at the local level news is filtered down to your specific neighborhood – i.e new about a school board referendum or a local crime report which are often hard to find without going to multiple local sources. As opposed to just having a local section or global section, it’s easy to dynamically adjust. For someone like Fred or David, they can easily find local news.  &lt;p&gt;3.Location filter – Scale of the map changes in conjunction with the local – global slider. If you switch to more local new, the map will display center on your current location. You can click inside a neighborhood to find any articles pertaining to housing prices in that neighborhood. At the global level you can select countries to change which news is displayed. In conjunction the news scale slider, you can pinpoint content to any level from local to global around the world.  &lt;p&gt;4.Graphical display of news frequency by day. Allows you to view articles from more active news day. i.e there was a debate two days ago so you can just select that day.  &lt;p&gt;5.Source truthiness – Based on our system self-moderation. As sites provide more articles that are listed as factual sources, their truthiness rating increases. This gives people a quick view to evaluate overall source reliability. Like metacritic for news.  &lt;p&gt;6.Quick list of categories to filter articles by subject area. Articles are auto-categorized by the system by looking at Urls, RSS tags, and keywords in the article  &lt;p&gt;7.Each news article is aggregated into one item. If the same news item appears from 10 sources, it appears in one item. Pulls from a variety of sources – TV, Radio, Print, Online, Local news – automatically – parses geographic area of impact and category. By feeding from a variety if mainstream and non-traditional news sources, it provides a better cross-section of information and is not dependent on user submissions. A short snippet is provided from the source that has the highest truthiness rating. You can also quickly see how much activity and discussion there is for a news item, as well as the geographic location. If there are currently live discussions about the article, there is an icon so you can join in. Finally, if there are any upcoming online votes that this article is relevant to, you can click the link to view those.  &lt;p&gt;The Location, Scale Slider, Pub Date, Sources and Categories all help uses filter content to their specific news diet.  &lt;p&gt;8. Popup notifications similar to XBOX Live system. Uses existing social networks to notify you that your friends are currently using Convenient Truth so you can easily discuss news.  &lt;p&gt;Demo Script  &lt;p&gt;-Show news sources being aggregated into one item  &lt;p&gt;-Show adjusting local – global slider  &lt;p&gt;-Show clicking map changes where the stories pertain to  &lt;p&gt;-Should periodically show friends joining online  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Article Drill-down for Codename: &amp;quot;Convenient Truth&amp;quot;  &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_3.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="299" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_3.png" width="399" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;1.Common ground is pieces of user submitted evidence that have been voted highly by the moderators. They could be items from one of the sources reporting on this article or from outside sources like Wikipedia, NGO reports, etc. The idea is to give readers a quick summary of the facts related to this new item without regardless of the underlying credibility of the news source. The facts are listed with a link to the original source so you can view further info. Like all site links in the application , it is accompanied by a truthiness rating so you have a perspective on the overall community opinion of that source’s reliability.  &lt;p&gt;2.Insights are comments highly rated by the moderators. When reading sights like Digg or Slashdot there is a lot of good opinion that adds value to the article and also a lot of junk. Rather than having to sift through all of the comments, this section displays the ones that add the most value to discussion of the article, the best of the best. The overall idea is that an article is presented with a snippet from the most reliable news source so you can read more. Without reading the article though you can quickly view the facts that pertain to this article as well as the most insightful points / counterpoints from the community. Essentially the goal is to be an emergent journalist providing a balanced perspective.  &lt;p&gt;3.Live Discussions allow users like Stephanie or Thomas that want to engage with other users that are interested in a more in depth discussion about the current news item. The live discussions use Live Meeting so users can chat with video / voice in real-time, share articles, notes, etc. Users can propose times for a discussion for others to indicate if they’d like to join. The live discussions can be recorded and archived so other can view them in the future. While not as ideal as in-person “fire-side” chat, it does allow people to have a similar experience regardless of geographic location. The live discussions are more or less an open forum.  &lt;p&gt;Each person’s name is always accompanied by a presence indicator [presence info controlled through privacy settings], so if you’d like just discuss with a few people, you can schedule a discussion with just them.&amp;nbsp; The presence info also allows a variety of options for engaging with actual people. You can IM/email them or if online, you can video/voice chat. Communication is handled through office communication server. For someone like Fred, this makes it simple to engage with others and have a shared reading experience.  &lt;p&gt;1.Sources Reporting is similar to the view on the main page. It shows every outlet that is reporting the same item along with the site’s overall truthiness rating.  &lt;p&gt;2.Displays a list of previous items in convenient truth that are related.  &lt;p&gt;Demo:  &lt;p&gt;-Join online discussion  &lt;p&gt;-Show Chat or voice call with someone using presence info  &lt;p&gt;&amp;nbsp; &lt;p&gt;Article Drill-down discussion for Codename: &amp;quot;Convenient Truth&amp;quot;  &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="291" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_4.png" width="391" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;So how do items get populated into the fact / insights section? They are selected from the highest rated comments/facts submitted by users as voted on by the moderators. Who does the moderating? The moderation is done using a system similar to Slashdot and outlined in Emergence. As registered user you will be occasionally notified that you have moderator status. Moderator status allows you to rate a comment, but you can only rate a finite number of comments. If your contributions are highly rated you receive karma and with karma your comments start with an initial higher rating. So moderators rate posts and those ratings are used to select future moderators. Moderators cannot comment on the article if they moderated it. There are two differences. One is the change that Johnson outlined in Emergence. Karma is determined by those who have the greatest variance in scores i.e. the most +5 and -1. This tweak helps ensure diversity of opinions while still filtering out low quality comments. The 2nd difference we added is that karma is category specific. You might get greater karma because of insight on Science articles but that doesn’t necessarily mean you should be extended the same privilege on Political articles. This helps to establish experts in certain areas.  &lt;p&gt;You can still view all the comments if you’d like by adjusting the quality filter, but the facts / insights are the comments most consistently rated as +5. This moderation system allows the community to self moderate for quality as well as extracting the best info for the article summary.  &lt;p&gt;The emergent vForum allows for video commenting. Seeing someone actually talk vs. just reading gives you many of the non-verbal queues that are important in everyday conversations, but are missing in typical web discussions. Webcams are becoming more prevalent as computer companies like Apple include them on each machine and most smartphones have cameras capable of video.  &lt;p&gt;Anytime you comment you can choose the privacy settings for the comment. So you can allow the public to see your comment or limit it to only friends.  &lt;p&gt;When you view a video comment you can also respond to a specific point in the video. Just move the slider to the point in the video that you’d like to respond to and record your own video comment. When other users look at the comment thread they can choose to “watch discussion”. Watching a discussion plays the comment videos back spliced together. This allows you to see the comments in more logical structure that mimics an actual conversation where people inject comments at a certain point rather than chronological structure of threaded comments. Since you can always adjust the quality filter, it’s easy to watch higher quality discussions.  &lt;p&gt;Video comments are also automatically transcribed to text so you can just read rather than watching.  &lt;p&gt;When commenting you can also include some factual evidence from a linked source. Items posted as a factual basis for you comment serve to populate the Common Ground in the article summary above. It’s part of the moderators role to rate posts on the quality of the comment and it’s factual basis. As news sources are cited more for factual evidence, that feeds into their truthiness rating and determines what sources are automatically aggregated.  &lt;p&gt;The combination of video commenting and the ability to interact with people in real-time over IM or Video chats brings discussion to a new level of engagement.  &lt;p&gt;Demo:  &lt;p&gt;-Adjusting quality filter  &lt;p&gt;-Adding a video comment  &lt;p&gt;-Respond to a video comment  &lt;p&gt;-Watch discussion  &lt;p&gt;-Show moderator role  &lt;p&gt;&amp;nbsp; &lt;p&gt;Video Comment Watching for Codename: &amp;quot;Convenient Truth&amp;quot;  &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_5.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="297" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_5.png" width="393" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;Video Comment Responding for Codename: &amp;quot;Convenient Truth&amp;quot;  &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="299" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_6.png" width="399" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;Presence &amp;amp; Live Discussions for Codename: &amp;quot;Convenient Truth&amp;quot;  &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_7.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="227" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_7.png" width="400" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;a name="privacy"&gt;&lt;/a&gt;Privacy Page  &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="298" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_8.png" width="394" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;Privacy is key as users are contributing comments about potential controversial topics that essentially go on public record on the internet.  &lt;p&gt;We have several privacy features built into the site.  &lt;p&gt;1.Users can adjust there current presence status. If you want to appear offline you can do that. The presence info serves to control how people can interact with you so you can adjust those settings. If you don’t want to chat, set yourself to away.  &lt;p&gt;2.Rather than rebuilding a social network, Convenient Truth ties into your existing one. You can view all of your friends across various social networks.  &lt;p&gt;3.The Circle of trust is used to group your friends / contacts in order to control privacy setting across multi people. You can add a new circle and call it friends. Then you can drag people from Facebook or Myspace into that circle. You can define a separate circle for co-workers and drag others into that. Some people have overlap so like a Venn diagram you can have overlapping circles. Some people might be both a friend and a co-worker.  &lt;p&gt;4.For each circle you can set privacy settings. By default people can just view your comments and not any presence or profile info. You can either allow the general public to view your presence info or you can just grant that permission to the friends circle.  &lt;p&gt;The circles are there to help you visually identify your groups of friends. The goal is to allow you flexibility in configuring privacy settings. Obviously you can block certain users from viewing any comments by you or interacting with you in any way. When commenting on the site you can always adjust who can see that specific comment and override the privacy settings on a per item basis.  &lt;p&gt;&amp;nbsp; &lt;p&gt;The final portion was a 2nd application that was loosely connected called Suffragium for online voting.&amp;nbsp; The vision of Suffragium was:  &lt;p&gt;•Educate voters on relevant topics &amp;amp; discussion related to the issue being voted upon  &lt;p&gt;•Provide incentives or at least remove disincentives from voting  &lt;p&gt;•Simplify voting across a wide range of decisions  &lt;p&gt;&amp;nbsp; &lt;p&gt;Suffragium is the latin word for “the right to vote” or more generally an expression of opinion, assent or approval.  &lt;p&gt;One of the problems with voting on current issues is the lack of education on issues among the voting population. Suffragium is an attempt to provide relevant news articles and related discussions about the issue at hand. Voters can easily find reliable facts and insights vetted through the community alongside the vote choices to help the decision process.  &lt;p&gt;A second issue with voting, particularly on political elections, is the lack of incentive. While ideally people should feel that voting is an important duty many do not. We believe that this stems from people evaluating the impact of their vote vs. the time / effort tradeoff of doing research, going down to a voter station, waiting in line and ultimately voting. On-line voting allows people to vote in a more convenient manner with the added benefit of providing contextual research. Young adults have been raised with technology and online voting will tap what they are more familiar with.  &lt;p&gt;Finally, this system can be used to provide a consistent interface across a wide range of voting purposes such as deciding a stance for a political action committee, local referendums or in the far, far future, national elections. While we believe that online voting for something like national elections is far off, it could start off with smaller goals. Maybe a school district uses it to vote on new educational policies. Or a state representative pledges to voted based on the outcome of online voting in his district. If elected officials made decisions based more on the direct input of voters, we believe less of them would feel estranged from government.  &lt;p&gt;It might be a ways off, but people can become accustomed to online voting through gradual steps and slowly breakdown mistrust or misconceptions.  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Initial UI Mockup&lt;/strong&gt;  &lt;p&gt;So there we have the original storyboard with some mockups which translated into this first UI prototype on Friday afternoon- 2.5 days before the contest. I really liked the design but ultimately we ended up changing the look and feel.  &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/citizen.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="280" alt="citizen" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/citizen_thumb.png" width="396" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;From Design to Development&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;So we had a story and some mockups, it was time to build. We we finally met in person we had some more discussions on how the application should work.&amp;nbsp; We decided to make it more issue-centric rather than news based.&amp;nbsp; We also had an alternate set of mockups in Fireworks.&amp;nbsp; Dale had a nice workflow for exporting from Fireworks design to XAML (markup language for creating Silverlight/WPF apps).&amp;nbsp; The intent was to create a system where people could easily find an overview of something like Global Warming regardless if there was a specific news story that day about Global Warming.&amp;nbsp; We decided to use WPF instead of Silverlight because we had some webcam functionality that wasn&amp;#39;t going to work in Silverlight - at least not within the time remaining. Thus began the weekend coding / designing spree.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;a name="overview"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Overview of contest / what we presented&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Most of this night is pretty fuzzy for me due to the lack of sleep.&amp;nbsp; We were still actually coding at 6pm when we arrived at Maggie Mae&amp;#39;s for the final presentations which were scheduled to start at 7pm.&amp;nbsp; Luckily the start got pushed back to 8pm which gave us some more time to actually put together a presentation and add some more code.&amp;nbsp; Coding in a bar is not easy to say the least. Barcamp sure, actual bar, no.&amp;nbsp; I was sitting on some patio table and the DJ was blasting techno in a speaker right behind me.&amp;nbsp; The table surface + Red Bull jitters made using the mouse like trying to play Operation.&amp;nbsp; I think I leeched Wi-Fi off some neighbors apartment so I could get to our source control server (note to self - get everyone&amp;#39;s code on the presentation laptop before you leave) .&lt;/p&gt; &lt;p&gt;So 8:00pm rolls around and the teams are starting to present.&amp;nbsp; We were scheduled to go 4th.&amp;nbsp; I drew the short straw and was selected to present.&amp;nbsp; Awesome. No sleep, nothing prepared and I may just pass out from anxiety.&amp;nbsp; I spend the next hour glancing at the presentations and jotting down notes in my little Moleskin notebook (trying to fit in with the cool design kids).&amp;nbsp; AKQA went first.&amp;nbsp; There was some technical difficulties with the A/V equipment.&amp;nbsp; I couldn&amp;#39;t really hear what they were talking about, but I think ours was cooler.&amp;nbsp; Second team, Create The, goes, I only briefly paid attention since I was still coming up with a presentation, but again I think ours is better.&amp;nbsp; Starting to feel Ok because at least we won&amp;#39;t be terrible relative to everyone else.&amp;nbsp; Next team up is Cynergy.&amp;nbsp; Huge excitement from the crowd.&amp;nbsp; Their app looks awesome and they have a great presentation.&amp;nbsp; I my mind I think maybe we can beat them.&amp;nbsp; Then they call Barack Obama via VOIP in a Facebook app.&amp;nbsp; The crowd goes nuts.&amp;nbsp; In my mind I say &amp;quot;Fu*ck&amp;quot;.&amp;nbsp; Or maybe I said that out loud.&amp;nbsp; Who knows.&amp;nbsp; Regardless, there is no way we can top that.&amp;nbsp; Game over.&amp;nbsp; I go to the bar, down a double shot of whisky and go on stage to follow a ridiculous presentation and bring the crowd off their emotional high.&lt;/p&gt; &lt;p&gt;Really nervous, I start off with a joke - &amp;quot;We just finished coding this so I&amp;#39;ll being seeing this for the first time along with you&amp;quot; - no laughs.&amp;nbsp; Fu*k.&amp;nbsp; &lt;/p&gt; &lt;p&gt;My presentation went something like: &lt;/p&gt; &lt;p&gt;Really exciting topic based on the current elections.&amp;nbsp; More excitement about this election than in previous years, but overall participation is still relatively low and more of today&amp;#39;s youth feel disconnected.&amp;nbsp; I think the founding fathers would be disappointed to see this current sate.&amp;nbsp; I don&amp;#39;t think they ever would have imagined a time where people didn&amp;#39;t care about voting.&amp;nbsp; They gave us this great tool for change where everyone can vote and every vote counts (well in most cases) yet the majority of citizens don&amp;#39;t care.&amp;nbsp; Not only do people care less they are also less informed.&amp;nbsp; If you watch cable news political pundits you&amp;#39;ve probably seen this first hand.&amp;nbsp; Being informed is essential to democracy and to exercise the power of voting.&amp;nbsp; Like Uncle Ben says &amp;quot;With great power comes great responsibility&amp;quot;&amp;nbsp; That great responsibility is being informed as a citizen.&amp;nbsp; Looking at the politics, the biggest advance in technology has been around campaign finance and collecting donations.&amp;nbsp; 16yr olds can contribute money online to politicians but can&amp;#39;t vote - that just shows were our politicians choose to focus their use of technology. &lt;/p&gt; &lt;p&gt;So what are the problems to stay informed? - sheer volume of content, finding balanced perspectives, lack of connection to politicians, finding local vs. international news, and a lack of incentive.&lt;/p&gt; &lt;p&gt;Our vision is to provide a balanced perspective of issues based on community opinion and semantic processing, facilitate real-time interactions online closer to in-person experiences and to connect people with issues to build an informed populace.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The general structure of our user experience is based on &amp;quot;Connect, Learn, Discuss, Act&amp;quot;.&amp;nbsp; There was a recent study at Stanford where people were separated into two groups.&amp;nbsp; Both groups were given a survey about issues.&amp;nbsp; The first group was the control group and they were given a follow-up survey 6 weeks later.&amp;nbsp; The people in that group didn&amp;#39;t change their views over 6 weeks.&amp;nbsp; The 2nd group was divided into small discussion groups and given a collection of unbiased research.&amp;nbsp; They met weekly over the next few weeks to discuss and were given the same survey again.&amp;nbsp; The people in that group changed their opinions significantly based on things they had learned and discussions with others.&amp;nbsp; Our application is designed to mimic the setup of the 2nd group.&amp;nbsp; We want to change peoples&amp;#39; views based on unbiased research and discussions with others to ultimately cause them to act.&lt;/p&gt; &lt;p&gt;The entry point to the application, Cityzens, allows people to connect to issues.&amp;nbsp; They can filter issues based on the connection to others in their social networks or based on politicians.&amp;nbsp; (Clicking the little chain icon adjusts the connection filtering).&amp;nbsp; You can also adjust the issue perspective using the slider at the bottom which filters from global to local.&amp;nbsp; It&amp;#39;s a double ended slider so you can also limit the amount found.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_9.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="314" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_9.png" width="392" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Changing the global / local perspective also changes the background to give you a visual indication of the geographic region of the issue.&amp;nbsp; Above you can see a world map in the background for global.&amp;nbsp; Below, you can see how the background changes to show a more local perspective.&amp;nbsp; That slider works across all areas of the application when viewing issues to provide different perspectives and filtering. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_10.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="290" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_10.png" width="362" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Each person&amp;#39;s name also includes a presence indicator.&amp;nbsp; Our application used Office Communication Server for presence in the demo, but the idea is that you can see if people are online at any given time and communicate with them via IM, Video chats, email, etc.&amp;nbsp; The presence info can be controlled via the privacy screen as well as who can communicate with you and how. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_11.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="286" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_11.png" width="356" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Politicians are also linked to information provided by the Sunlight Foundation similar to &lt;a href="http://sunlightlabs.com/popuppoliticians/"&gt;popup politicians&lt;/a&gt;.&amp;nbsp; This allows you to have quick access to politicians voting records and campaign finance history.&amp;nbsp; The purpose is to provide better transparency when viewing politicians related to a specific issue.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The next screen allows you to drill into a list of issues for a certain category to learn more.&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_12.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="293" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_12.png" width="365" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Drilling into a specific issue like nuclear power gives you a detailed overview.&amp;nbsp; The first set of information on an issue is the background.&amp;nbsp; In our demo the information in the background was hard-coded.&amp;nbsp; The intent here was to use a system to similar to &lt;a href="http://research.microsoft.com/projects/blews/blews.aspx"&gt;Microsoft Ble&lt;/a&gt;ws.&amp;nbsp; BLEWS uses political blogs to categorize news stories to according to their reception to conservatives and liberals.&amp;nbsp; It uses natural language processing to determine emotional charge.&amp;nbsp; Using a similar system we could extract data from news articles that are reference by both conservatives and liberals and generally agreed upon.&amp;nbsp; This information can then be used to provide a relatively unbiased background.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_13.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="289" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_13.png" width="361" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The second part of our issue overview is links to relevant government docs / bills from the executive and legislative brances.&amp;nbsp; Again, the Sunlight Foundation provides some great info in the &lt;a href="http://www.louisdb.org/"&gt;LOUIS&lt;/a&gt; project.&amp;nbsp; This allows people to quickly see government information regarding a specific issues to provide more research and transparency.&lt;/p&gt; &lt;p&gt;The last part of our issues overview is the commenting section.&amp;nbsp; Users can comment directly via Cityzens or via outside sources like Twitter or Facebook.&amp;nbsp; Comments from outside sources are clearly indicated.&amp;nbsp; Again, each user has the presence icon so you can quickly connect with that person to further discuss.&amp;nbsp; Traditional forums or discussions are very asynchronous and little follow-up occurs.&amp;nbsp; We want to make that experience closer to real-time interactions.&amp;nbsp; The other feature of our commenting system is video commenting.&amp;nbsp; Video is becoming more prevalent as more phones/computers allow video recording.&amp;nbsp; Commenting via video has a few benefits - it&amp;#39;s faster than typing and seeing someone speak gives you the non-verbal / language queues that you miss in written comments.&amp;nbsp; Ultimately I think more commenting systems in the future will include video.&amp;nbsp; I have seen one or two out there but we made a few innovations that I haven&amp;#39;t seen done before.&amp;nbsp; First, video comments in Cityzens are processed via a speech engine to transcribe the comments.&amp;nbsp; This allows for better searching and allows users on devices that can&amp;#39;t play video to view the comments.&amp;nbsp;&amp;nbsp; A second feature is that you can watch someone&amp;#39;s video comment and then respond with your own comment at any point in the video.&amp;nbsp;&amp;nbsp; This allows users to actually watch a thread of comments with the videos spliced in their natural place rather than chronological.&amp;nbsp; It&amp;#39;s more like watching a real discussion.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;All of the comments are rated via a system similar to slashdot which I discussed above.&amp;nbsp; The ratings can be used to filter the comment view so for instance you can watch a thread of only highly rated comments.&amp;nbsp; The other purpose of the ratings is to provide people incentive to participate.&amp;nbsp; Our vision is that people would earn tax incentives based on their contributions.&amp;nbsp; As users build a higher reputation for contributing quality insight, that rating is used to provide something similar to educational tax credits.&amp;nbsp; People can take tax deductions for educational classes so in a similar manner that could earn tax deductions for educating themselves and other via participating in this system.&amp;nbsp; Obviously that has some complications, but it&amp;#39;s something that I&amp;#39;d like to see happen in the future - the government creating better incentives for being informed.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_14.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="321" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_14.png" width="407" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Here is a screenshot of watching a video comment.&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/clip_image002.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="147" alt="clip_image002" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/clip_image002_thumb.jpg" width="297" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;When you choose to respond while watching a comment, the player does a cool 3d flip to the comment recording side.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/clip_image0025.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="142" alt="clip_image002[5]" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/clip_image0025_thumb.jpg" width="249" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;After posting your comment, it appears in the thread with the transcription.&amp;nbsp; This functionality all works via some DirectX APIs and the Speech engine in .NET.&amp;nbsp; Transcription isn&amp;#39;t perfect but I only had a few hours to get it working.&amp;nbsp; Using a combination of maybe Speech Server to offload processing and perhaps something like Amazon&amp;#39;s Mechanical Turk to provide manual correction, the transcriptions could be made almost perfect.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Next up is Discuss.&lt;/p&gt; &lt;p&gt;This section allows people to engage in small group discussions similar to the format in the Stanford study.&amp;nbsp; Discussions with other informed people is critical to shaping a person&amp;#39;s view on an issues.&amp;nbsp; It helps cross-pollinate views and bring new perspectives.&amp;nbsp; Technology can help enable these discussions via something like Live Meeting.&amp;nbsp; Live Meeting allows people to share screens, whiteboard, takes notes and actually see / chat with others in real-time.&amp;nbsp; It&amp;#39;s almost as good as being there in person.&amp;nbsp; Almost better because a moderator can silence people to give others a chance to speak, notes are easily shared, there is a question queue and you can record for others to view.&amp;nbsp; Plus with online meetings you aren&amp;#39;t tied to discussing with people in your geographic area.&amp;nbsp; The person who maybe the most insightful person to to talk to may be across the country.&amp;nbsp; With Live Meetings in Cityzens, geographic boundaries are removed for real-time civil discourse.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_15.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="319" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_15.png" width="403" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Live Meeting&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_16.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="262" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_16.png" width="377" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Next we have Act.&lt;/p&gt; &lt;p&gt;Creating an informed populace is one step, but it&amp;#39;s important to turn that into action.&amp;nbsp; This section allows people to quickly find upcoming related elections and events pertaining to issues.&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_17.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="286" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/MicrosoftsPhizzPopDesignCompetitionFinal_2D7/image_thumb_17.png" width="362" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The final piece which we didn&amp;#39;t build out due to time was the privacy settings which are obviously really important based on the nature of the real-time interactions and type of information being shared.&amp;nbsp; The privacy page we wanted to build was what I outlined earlier &lt;a&gt;here.&lt;/a&gt;&amp;nbsp; During the presentation I just spoke to some of those ideas which probably wasn&amp;#39;t super effective without any visualization.&lt;/p&gt; &lt;p&gt;So that&amp;#39;s about it.&amp;nbsp; Overall I think we designed something pretty cool in 3 days that was a fairly good solution to the problem statement.&amp;nbsp; I really like a few of the concepts like the &amp;quot;Learn Discuss Act&amp;quot; organization and the user experience around changing between local / global perspectives and video commenting.&amp;nbsp; Unfortunately I don&amp;#39;t think the judges really liked it.&amp;nbsp; The wrap-up comments were something like &amp;quot;Clean UI and good use of real data&amp;quot; - Kind of depressing to say the least.&amp;nbsp;&amp;nbsp; If we spent more time I think it could have been better, but Cynergy put up a great performance that still would have been tough to beat.&amp;nbsp; I&amp;#39;d like to think we finished second although Thirteen23 had some really cool ideas and as always, a really beautiful UI. So maybe we finished 3rd.&amp;nbsp; Or last.&amp;nbsp; Who knows.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;My general feedback for the event is:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Logistics were great  &lt;li&gt;Design problems were really interesting to work on  &lt;li&gt;Great selection of competitors.&amp;nbsp; I was really excited to compete against what I view as most of the top forms in this space  &lt;li&gt;Having a 2nd/3rd place winner or runner up would help give at least some recognition to the firms that didn&amp;#39;t win it all  &lt;li&gt;Live stream the event.&amp;nbsp; I have a lot of friends / co-workers who couldn&amp;#39;t attend so it would be cool if they could have watched me lose  &lt;li&gt;If no live streaming, at least put up a recording afterwards so I can watch myself lose over and over again  &lt;li&gt;There was a ton going on at SXSW, but most people I talked to afterward never knew the event took place  &lt;li&gt;Invite more bloggers and give them a nice section to live blog the event  &lt;li&gt;7 weeks is a long time to build something - I know it&amp;#39;s fair since everyone has the same timeframe, but realistically it&amp;#39;s hard to commit to more than a few days for one event.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Thanks to Chris Bernard, Will Tschumy, Sean Seibel&amp;nbsp; &amp;amp; Paul Treichler from Microsoft for organizing this event.&amp;nbsp; Also to the &lt;a href="http://designchallenge.phizzpop.com/judges.aspx"&gt;judges&lt;/a&gt; - Bull Scott, Peter Merholz, Dan Burkhart and Silona Bonewald.&amp;nbsp; It would have been cool to talk to the judges later and get some more detailed feedback, but oh well.&amp;nbsp; I really hope there is a PhizzPop II and that we are invited to compete.&amp;nbsp; I want a rematch with Cynergy :)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:60db2eb5-07c5-4365-a7a2-159ae73b0fbb" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/PhizzPop" rel="tag"&gt;PhizzPop&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Live%20Meeting" rel="tag"&gt;Live Meeting&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Democracy" rel="tag"&gt;Democracy&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SXSW" rel="tag"&gt;SXSW&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Office%20Communications%20Server" rel="tag"&gt;Office Communications Server&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Red%20Bull" rel="tag"&gt;Red Bull&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WPF" rel="tag"&gt;WPF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows%20Presentation%20Foundation" rel="tag"&gt;Windows Presentation Foundation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Erik%20Klimczak" rel="tag"&gt;Erik Klimczak&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Sunlight%20Foundation" rel="tag"&gt;Sunlight Foundation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NETflix" rel="tag"&gt;.NETflix&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft%20Blews" rel="tag"&gt;Microsoft Blews&lt;/a&gt;,&lt;a href="http://technorati.com/tags/truthiness" rel="tag"&gt;truthiness&lt;/a&gt;,&lt;a href="http://technorati.com/tags/video%20commenting" rel="tag"&gt;video commenting&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4781" width="1" height="1"&gt;</description></item><item><title>Twitterlight to Silverlight 2.0 Beta 1</title><link>http://blogs.claritycon.com/blogs/steve_holstad/archive/2008/04/01/twitterlight-to-silverlight-2-0-beta-1.aspx</link><pubDate>Wed, 02 Apr 2008 02:18:19 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4774</guid><dc:creator>sholstad</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Ok ok, I&amp;#39;ve bitten the bullet and upgraded the Twitterlight Silverlight Twitter client to Silverlight 2.0 Beta 1.&amp;nbsp; The &lt;a href="http://blogs.msdn.com/coding4fun/archive/2008/02/24/7883342.aspx"&gt;Coding4Fun article&lt;/a&gt;&amp;nbsp;has been updated with the latest source.&lt;/p&gt; &lt;p&gt;The client is live at &lt;a href="http://www.twitterlight.com" target="_blank"&gt;twitterlight.com&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The major updates involved changing how some of the synchronous web service calls (authenticate, create TinyUrl) work within the app, now that all web references (woops, &amp;quot;service references&amp;quot; now) are asynchronous.&amp;nbsp; Some XAML tweaks and minor code changes, and we&amp;#39;re good to go.&lt;/p&gt; &lt;p&gt;View the &lt;a href="http://blogs.claritycon.com/blogs/steve_holstad/archive/2008/01/08/twitterlight-silverlight-twitter-mashup-with-componentone-sapphire-controls.aspx" target="_blank"&gt;initial post&lt;/a&gt;&amp;nbsp;describing the article.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4774" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/steve_holstad/archive/tags/VS+2005/default.aspx">VS 2005</category><category domain="http://blogs.claritycon.com/blogs/steve_holstad/archive/tags/.NET+3.0+_2F00_+3.5+_2F00_+Silverlight/default.aspx">.NET 3.0 / 3.5 / Silverlight</category><category domain="http://blogs.claritycon.com/blogs/steve_holstad/archive/tags/Windows+Presentation+Foundation+_2800_WPF_2900_/default.aspx">Windows Presentation Foundation (WPF)</category></item><item><title>Disk Cost Issue with ReserveCost!</title><link>http://blogs.claritycon.com/blogs/sajo_jacob/archive/2008/03/31/disk-cost-issue-with-reservecost.aspx</link><pubDate>Tue, 01 Apr 2008 04:40:00 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4766</guid><dc:creator>spoov</dc:creator><slash:comments>1</slash:comments><description>&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;This was an interestingly annoying issue I came across with Windows Installer, when you use the ReserveCost Element to specify the disk space by populating the disk cost for your components in the ReserveCost Table.&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;&lt;u&gt;Here is the scenario:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;1) You have a ReserveCost Element for your component which specifies the amount of disk space needed for the component.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;2) You have conditions around the components which decide if the component is installed on the target machine.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;So something like this….&lt;/font&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Component &lt;/span&gt;&lt;span style="COLOR:red;"&gt;Id&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;MyCustomComponent&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;Guid&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;A2DCFC09-0651-4E2C-04A4-B18F759F9F41&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Condition&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;
    &amp;lt;![CDATA[&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;MYCONDITION = &amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;]]&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Condition&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;File &lt;/span&gt;&lt;span style="COLOR:red;"&gt;Id&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;MYCAB.CAB&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;Name&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;MYCAB.CAB&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;Source&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;$(var.CustomPath)MYCAB.CAB&lt;/span&gt;&amp;quot;  &lt;span style="COLOR:red;"&gt;Compressed&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;no&lt;/span&gt;&amp;quot; &lt;/pre&gt;&lt;pre class="code"&gt;  &lt;span style="COLOR:red;"&gt;KeyPath&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;yes&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;DiskId&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;1&lt;/span&gt;&amp;quot; &lt;span style="COLOR:blue;"&gt;/&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;ReserveCost &lt;/span&gt;&lt;span style="COLOR:red;"&gt;Directory&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;CABDIR&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;RunLocal&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;300000&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;RunFromSource&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;0&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;Id&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;CABID&lt;/span&gt;&amp;quot; &lt;span style="COLOR:blue;"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Component&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;font size="3" face="Calibri"&gt;3) And then you have checks as follows in the “Next” or “Install” button
to prevent the installation from continuing if the target machine does not have
sufficient space&lt;/font&gt;&lt;/pre&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Publish &lt;/span&gt;&lt;span style="COLOR:red;"&gt;Event&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;SpawnDialog&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;Value&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;OutOfDiskDlg&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;&amp;gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;(OutOfDiskSpace = 1 AND &lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:gray;"&gt;OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST=&amp;quot;F&amp;quot;)&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;]]&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Publish&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;&lt;u&gt;You would expect &lt;/u&gt;to see the assigned space of 300000, in this case in the Space requirements information section by subscribing to the “SelectionSize” event &lt;/font&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;Subscribe &lt;/span&gt;&lt;span style="COLOR:red;"&gt;Event&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;SelectionSize&lt;/span&gt;&amp;quot; &lt;span style="COLOR:red;"&gt;Attribute&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="COLOR:blue;"&gt;Text&lt;/span&gt;&amp;quot; &lt;span style="COLOR:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;And also expect that the installer will not proceed with the installation on the target machine with insufficient space and will trigger the “OutOfDiskDlg” dialog which you just wired up.&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;But unfortunately even though your ReserveCost table was populated correctly, Windows Installer decides to go the safe route of &lt;strong&gt;not &lt;/strong&gt;including the size (ReserveCost size) of any components which have a condition around them and the total space needed for the component(and Product) is not correct anymore (&lt;strong&gt;even&lt;/strong&gt; if the conditions which they are dependant on have already being determined to be true and the component will be installed). &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;The fix for this would be to include a dummy component with the ReserveCost element with no conditions under the same feature (and ofcourse with no File attribute).&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4766" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/sajo_jacob/archive/tags/Windows+Installer+XML+_2800_WiX_2900_+/default.aspx">Windows Installer XML (WiX) </category><category domain="http://blogs.claritycon.com/blogs/sajo_jacob/archive/tags/WiX/default.aspx">WiX</category></item><item><title>Data Warehousing Resources</title><link>http://blogs.claritycon.com/blogs/don_peterson/archive/2008/03/31/data-warehousing-resources.aspx</link><pubDate>Tue, 01 Apr 2008 03:04:00 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4765</guid><dc:creator>dpeterson</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I&amp;#39;ve had a few requests lately for resources I&amp;#39;ve used related to data warehouse design and performance tips for SSAS and SSRS for SQL Server 2005.&amp;nbsp; I thought if a few people are interest there must be a lot of others out&amp;nbsp;searching the web for similar nuggets of gold.&amp;nbsp; So, here is my list of useful links for others to cash in on:&lt;/p&gt;
&lt;p&gt;SSAS Performance tips:&amp;nbsp; &lt;a href="http://www.calumo.com/pdf/SSAS2005PerformanceGuide.pdf" target="_blank"&gt;http://www.calumo.com/pdf/SSAS2005PerformanceGuide.pdf&lt;/a&gt;&amp;nbsp; - this is a great white paper from Microsoft on fine tuning your&amp;nbsp;cube performance from dimension design, through query and server hardware best practices.&lt;/p&gt;
&lt;p&gt;Using Indexed Views to increase performance:&amp;nbsp; &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/impprfiv.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/2005/impprfiv.mspx&lt;/a&gt;&amp;nbsp; - this article describes what indexed views are and when you should consider using them in your database.&lt;/p&gt;
&lt;p&gt;Designing your data warehouse schema - dimension modeling&amp;nbsp;instruction and best practices:&amp;nbsp; &lt;a href="http://www.kimballuniversity.com/"&gt;http://www.kimballuniversity.com/&lt;/a&gt;&amp;nbsp;- This site was started by Ralph Kimball, called the father of data warehousing by some, and includes many free articles on dimension modeling for a data warehouse.&amp;nbsp; Understanding the Kimball technique is a must for those just starting out in data warehousing.&lt;/p&gt;
&lt;p&gt;Best practices&amp;nbsp;from a practical implementation:&amp;nbsp; &lt;a href="http://www.microsoft.com/sql/solutions/bi/projectreal.mspx" target="_blank"&gt;http://www.microsoft.com/sql/solutions/bi/projectreal.mspx&lt;/a&gt;&amp;nbsp; - Project REAL was an attempt to implement a data warehouse for a real customer (Barnes &amp;amp; Noble) using SQL Server 2005 and a large set of real business data.&amp;nbsp; The result is a collection of&amp;nbsp;the project code and documentation on suggested design approaches, best practices and scripts you can migrate into your own applications.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4765" width="1" height="1"&gt;</description><category domain="http://blogs.claritycon.com/blogs/don_peterson/archive/tags/Microsoft+SQL+Server/default.aspx">Microsoft SQL Server</category></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><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>2</slash: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>Google AJAX Language API &amp; Office Communicator Custom Translation Tabs</title><link>http://blogs.claritycon.com/blogs/kevin_marshall/archive/2008/03/20/google-ajax-language-api-amp-office-communicator-custom-translation-tabs.aspx</link><pubDate>Fri, 21 Mar 2008 04:57:32 GMT</pubDate><guid isPermaLink="false">da947a97-509e-40e6-bbb5-1443ad47bf4e:4240</guid><dc:creator>kmarshall</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;While waiting for Lost to start, I was catching up on some RSS feeds.&amp;nbsp; I just dropped TechCrunch &amp;amp; anything mentioning Scoble in my recent news feed pruning which has decreased my news volume nicely.&amp;nbsp; One noteworthy item today was the launch of &lt;a href="http://code.google.com/apis/ajaxlanguage/documentation/"&gt;Google&amp;#39;s AJAX Language API.&lt;/a&gt;&amp;nbsp; I think it&amp;#39;s the only translation web service out there.&amp;nbsp; One downside is that it&amp;#39;s JavaScript only.&amp;nbsp; It would be nicer if there was a REST web service to call to make it easier to integrate into desktop apps or to bulk convert text in a service. &lt;/p&gt; &lt;p&gt;A cool use of it I think would be to integrate into existing IM clients.&amp;nbsp; I have a few French &amp;amp; Spanish speaking friends so it would be helpful if my IM client could auto-translate since my foreign language skills are at a kindergarten level.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Lately I&amp;#39;ve been using Office Communicator since we have a new kick a$$ VOIP setup..(so nice to be able to transfer an IM conversation to a phone call and chat via my USB speaker phone.)&amp;nbsp; Anyway, I was looking for something to try out the Google translation API and I started looking at the communicator API.&amp;nbsp; I didn&amp;#39;t realize you could just add a new tab of HTML via a quick registry setting.&amp;nbsp; In about 15 minutes I was able to create this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/Blogs/GoogleAJAXLanguageAPIOfficeCommunicatorC_1352F/image.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="318" alt="image" src="http://employees.claritycon.com/kmarshall/Blogs/GoogleAJAXLanguageAPIOfficeCommunicatorC_1352F/image_thumb.png" width="213" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;It&amp;#39;s probably not super useful, but it&amp;#39;s always fun to try out new stuff.&amp;nbsp; &lt;/p&gt; &lt;h2&gt;Adding a New Tab to Communicator&lt;/h2&gt; &lt;p&gt;This &lt;a href="http://technet.microsoft.com/en-us/library/bb963929.aspx"&gt;TechNet article&lt;/a&gt; explains how to add a new tab in communicator.&amp;nbsp; Basically you just need to create a new registry string value under &lt;strong&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Communicator.&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;I set the value to &amp;quot;&lt;a title="file:///C:/communicatorTab.xml" href="http://employees.claritycon.com/kmarshall/Blogs/GoogleAJAXLanguageAPIOfficeCommunicatorC_1352F/communicatorTab.xml"&gt;file:///C:/communicatorTab.xml&lt;/a&gt;&amp;quot; &lt;/p&gt; &lt;p&gt;In the XML file I put:&lt;/p&gt; &lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt; &lt;br /&gt;&amp;lt;tabdata&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;tab&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;image&amp;gt;file:///c:/communicatorTab.png&amp;lt;/image&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;accessibility&amp;gt;both&amp;lt;/accessibility&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;userid&amp;gt;false&amp;lt;/userid&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;name&amp;gt;the name to display on the tab&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tooltip&amp;gt;the tooltip to show&amp;lt;/tooltip&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;contenturl&amp;gt;&lt;a href="http://localhost/communicatorTab.htm"&gt;http://localhost/communicatorTab.htm&lt;/a&gt;&amp;lt;/contenturl&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;contactid&amp;gt;false&amp;lt;/contactid&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;method&amp;gt;get&amp;lt;/method&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tabid&amp;gt;1&amp;lt;/tabid&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/tab&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/tabdata&amp;gt;  &lt;p&gt;For the contentUrl, you need to point to an HTML file which will be displayed in the tab.&amp;nbsp; I wasn&amp;#39;t able to get it working via &amp;quot;&lt;a&gt;file:///c:/&lt;/a&gt;communicatorTab.htm&amp;quot;, but according to the docs that should work.&amp;nbsp; I&amp;#39;m running IIS so I just put it on my web server.&amp;nbsp; If you are sharing this, you&amp;#39;d probably want to put it on a web server anyway.  &lt;h2&gt;Calling the Translation API&lt;/h2&gt; &lt;p&gt;&lt;a href="http://employees.claritycon.com/kmarshall/communicatorTab.htm"&gt;Here&lt;/a&gt; is a copy of the HTML file I used.&amp;nbsp; I made the UI simple so it didn&amp;#39;t take up much space.&amp;nbsp; You just enter some text in one of the supported languages and select a language to translate to.&amp;nbsp; Clicking &amp;quot;Translate&amp;quot; replaces the text you entered with the translated text.&amp;nbsp; It doesn&amp;#39;t support every language translation pair.&amp;nbsp; So you can&amp;#39;t to Chinese to Arabic yet.&amp;nbsp; The supported pairs are &lt;a href="http://code.google.com/apis/ajaxlanguage/documentation/#SupportedPairs"&gt;here&lt;/a&gt;.&amp;nbsp; The nice thing about the API is that it auto detects the source text language so you don&amp;#39;t have to select &amp;quot;Spanish to English&amp;quot;  &lt;p&gt;Invoking the Google API is really simple.&amp;nbsp; Just call translate with the source, leave the source language blank to auto-detect, the target language code and the return function.&lt;pre class="csharpcode"&gt;google.load(&lt;span class="str"&gt;&amp;quot;language&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;);

&lt;span class="kwrd"&gt;function&lt;/span&gt; translate() {
  &lt;span class="kwrd"&gt;var&lt;/span&gt; source = document.getElementById(&lt;span class="str"&gt;&amp;quot;source&amp;quot;&lt;/span&gt;);
  &lt;span class="kwrd"&gt;var&lt;/span&gt; target = document.getElementById(&lt;span class="str"&gt;&amp;quot;target&amp;quot;&lt;/span&gt;);
  google.language.translate(source.innerHTML, &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, target.value, &lt;span class="kwrd"&gt;function&lt;/span&gt;(result) {
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!result.error) {
      &lt;span class="kwrd"&gt;var&lt;/span&gt; source = document.getElementById(&lt;span class="str"&gt;&amp;quot;source&amp;quot;&lt;/span&gt;);
      source.innerHTML = result.translation;
    }
    &lt;span class="kwrd"&gt;else&lt;/span&gt; {
      alert(result.message);
    }
  });
}
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now you can pretend to be a cultured international business man/woman and easily throw a few foreign words into the conversation.&amp;nbsp; Tres Cool.&lt;/p&gt;
&lt;p&gt;In the future I might try integrating 