<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-925975026607810258</atom:id><lastBuildDate>Fri, 25 May 2012 18:26:56 +0000</lastBuildDate><category>toolkits</category><category>IBM</category><category>scripting</category><category>mail</category><category>IMtegrity</category><category>sametime</category><category>instant technologies</category><category>IM archive</category><category>development</category><category>Amazon</category><category>gotomeeting</category><category>hosting</category><category>Queue Manager 4</category><category>Legato</category><category>Lotus Sametime</category><category>API</category><category>phone</category><category>ocs</category><category>Groovy</category><category>vpuserinfo</category><category>Team Sessions</category><category>ocs  archive</category><category>buddy list</category><category>gateway</category><category>PowerShell</category><category>Apache Tomcat</category><category>domino</category><category>persistent chat room</category><category>Microsoft Lync 2010</category><category>Microsoft OCS</category><category>outsource</category><category>.net</category><category>lotus note</category><category>Alert Manager</category><category>readviewentries</category><category>exchange</category><category>online surveys</category><category>adminstration</category><category>Lotusphere</category><title>Instant Technologies - Solutions for Lotus Sametime, Microsoft OCS, and Enteprise IM</title><description>Views, news, and notes from Instant Technologies and the world of enterprise IM and real-time collaboration -focused on Lotus Sametime and Microsoft OCS.</description><link>http://blog.instant-tech.com/</link><managingEditor>noreply@blogger.com (Instant)</managingEditor><generator>Blogger</generator><openSearch:totalResults>139</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-2974929139940649902</guid><pubDate>Fri, 25 May 2012 17:25:00 +0000</pubDate><atom:updated>2012-05-25T14:26:56.802-04:00</atom:updated><title>Web Client for Microsoft Lync 2010</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div&gt;This week, we have spent some time exploring options to provide a web client for Microsoft Lync 2010.&amp;nbsp; As we started to explore this area, we anticipated that we would simply use a Lync web client SDK from Microsoft.&amp;nbsp; However, with Lync 2010, there is no default web client or web client SDK.&lt;br /&gt;&lt;br /&gt;So, we have explored a few options during this assessment &lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Leverage the Lync web client that can be configured to run as part of an Exchange 2010 OWA deployment&lt;/li&gt;&lt;li&gt;Deploy an internal web client proxy service that uses the UCMA api and a custom web client &lt;/li&gt;&lt;li&gt;Integrate with the name.dll component that is installed as part of a Lync 2010 client installation&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Initially, we thought that we might be able to extend, and possibly use, the Lync web client that is provisioned as part of a Microsoft Office 365 configuration.&amp;nbsp; Apparently, this web client can also be configured as an extension to an Exchange 2010 installation with the addition of the OWA and OCS 2007 R2 web client installation.&amp;nbsp; After some low level investigation with &lt;a href="http://www.fiddler2.com/fiddler2/" target="_blank"&gt;Fiddler&lt;/a&gt;&amp;nbsp;we decided that a more structured, and open, approach would be better option.&lt;br /&gt;&lt;br /&gt;Here is&amp;nbsp;the Office 365 Lync client:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-q4Lc92e-eQ4/T7--CrbIL0I/AAAAAAAAALI/ivNPkIf2LxM/s1600/office-365-webclient.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://2.bp.blogspot.com/-q4Lc92e-eQ4/T7--CrbIL0I/AAAAAAAAALI/ivNPkIf2LxM/s320/office-365-webclient.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here is a link to a good article on integrating Lync and Exchange: &lt;a href="http://blog.schertz.name/2010/11/lync-and-exchange-im-integration/"&gt;http://blog.schertz.name/2010/11/lync-and-exchange-im-integration/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While the integration provided with the Exchange 2010 OWA looked promising, it was a bit too heavy for what we wanted.&amp;nbsp; So, we continued our investigation and located a few promising projects on Codeplex.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Specifically, this Codeplex project is very interesting: &lt;br /&gt;&lt;a href="http://lyncwidget.codeplex.com/"&gt;http://lyncwidget.codeplex.com/&lt;/a&gt;&lt;br /&gt;&lt;table&gt;&lt;/table&gt;&lt;br /&gt;This project provided a nice base platform for developing a customized web client for Lync 2010.&amp;nbsp; After a bit of work, and some modifications on our side, we had a nice looking web client for Lync 2010.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;In terms of our modifications, we externalized some of the configuration - to allow for manually configuring the Lync server details.&amp;nbsp; We also migrated the Lync end point from using application end point to an end point that acts as a simulated SIP user.&amp;nbsp; We typically experience a high level of success (mostly with presence based API calls) when we use a end user end point - as opposed to the application end point.&lt;br /&gt;&lt;br /&gt;Here is the presence example on a page:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-vId5DevxjVo/T7--YC4xDmI/AAAAAAAAALQ/tUeCFvzuO84/s1600/presence-available.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://2.bp.blogspot.com/-vId5DevxjVo/T7--YC4xDmI/AAAAAAAAALQ/tUeCFvzuO84/s320/presence-available.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Starting a chat:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-F6760h7atYk/T7--kUMdwvI/AAAAAAAAALY/O4yK47UyJM0/s1600/web-conversation.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-F6760h7atYk/T7--kUMdwvI/AAAAAAAAALY/O4yK47UyJM0/s320/web-conversation.PNG" width="311" /&gt;&lt;/a&gt;&lt;/div&gt;With the Lync client on the other side of the conversation:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_60NUOPdUwQ/T7--txdqcWI/AAAAAAAAALg/R-QamLOvvBo/s1600/lync-conversation.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://4.bp.blogspot.com/-_60NUOPdUwQ/T7--txdqcWI/AAAAAAAAALg/R-QamLOvvBo/s320/lync-conversation.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Our next steps will focus on some additional wiring to pass the end user's credentials to the the client (using Windows pass thru authentication) as well as some other configuration options.&lt;br /&gt;&lt;br /&gt;&lt;h3 style="text-align: left;"&gt;  &lt;u&gt;Detecting presence of a local Lync client &lt;/u&gt;&lt;/h3&gt;&lt;div style="text-align: left;"&gt;Another interesting facet of a web-based Lync client, is that we are able to detect whether a Lync client is already running on a user's desktop, and if it is, rather than surfacing a web-based Lync client, we could bring up the users native Lync client running locally on their desktop. There are a few requirements for this functionality:&lt;/div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Internet Explorer must be used when navigating the site. It's the only way to interface with the necessary DLLs to call the local Lync client.&lt;/li&gt;&lt;li&gt;Office 2007 or 2010 must be installed. This places down the proper Lync presence/integration DLLs for us to use through the web.&lt;/li&gt;&lt;li&gt;Lync client must be installed (running too if you expect to get the Lync client and not the web client).&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;We'll be using JavaScript to perform these tasks, and to get a basic example, it's really minimal code. First, let's make a simple JavaScript library that we can use to access some functions from the &lt;a href="http://msdn.microsoft.com/en-us/library/ms455335.aspx"&gt;name.dll&lt;/a&gt; that we'll be manipulating for Lync.&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var Instant = {&lt;br /&gt;    sipUri: "eric_lync@instant.local", // Change this to the user's SIP URI you want to chat with&lt;br /&gt;    nameCtl: new ActiveXObject('Name.NameCtrl.1'),&lt;br /&gt;&lt;br /&gt;    onStatusChange: function (name, status, id) {&lt;br /&gt;        alert(name + ", " + status + ", " + id);&lt;br /&gt;    },&lt;br /&gt;&lt;br /&gt;    showOOUI: function () {&lt;br /&gt;        Instant.nameCtl.ShowOOUI(Instant.sipUri, 0, 15, 15);&lt;br /&gt;    },&lt;br /&gt;&lt;br /&gt;    hideOOUI: function () {&lt;br /&gt;        Instant.nameCtl.HideOOUI();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;Our code here builds an object called nameCtl out of the name.dll NameCtrl control that is enabled with Lync and Office 2007+. This object opens up some other properties and functions that we can use to show information about the user, and track status. Our 'onStatusChange' function tracks a user's presence, it polls for the users current settings, and alerts it. The 'showOOUI' function will show an interactive display when called (more on that in a bit) and the hideOOUI function removes it. Let's build a page now that we can use to test our library.&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Lync Presence Test&amp;lt;/title&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;!-- le JS --&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript" src="assets/js/instant-presence-0.0.1.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;        if (Instant.nameCtl.PresenceEnabled) {&lt;br /&gt;            Instant.nameCtl.OnStatusChange = Instant.onStatusChange;&lt;br /&gt;            Instant.nameCtl.GetStatus(Instant.sipUri, "1");&lt;br /&gt;        }&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;span onmouseover="Instant.showOOUI()" onmouseout="Instant.hideOOUI()" style="border-style:solid;"&amp;gt;Eric Richards&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;Our page above includes our JavaScript library (instant-presence-0.0.1.js, in this case), and includes a span with some onmouseover and onmouseout functions that will get called from our library. When the page loads, we reference Instant.nameCtl.PresenceEnabled, which checks to see if the Lync client is currently running, if it is, we start checking status with Instant.onStatusChange. Now if we were to hover over the span, we would see a full Lync menu like the screenshot below.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ha58tEXeJFY/T7_OHK9nlqI/AAAAAAAAALw/tC4iyvzrwRE/s1600/lync-context.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-ha58tEXeJFY/T7_OHK9nlqI/AAAAAAAAALw/tC4iyvzrwRE/s1600/lync-context.png" /&gt;&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-wgpbTGIkLO8/T7_OgeqzhTI/AAAAAAAAAL4/FliDjtrBz0s/s1600/lync-context-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-wgpbTGIkLO8/T7_OgeqzhTI/AAAAAAAAAL4/FliDjtrBz0s/s1600/lync-context-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;From this menu, we can chat, call, video call, meet, etc. We have the full capacity of the local Lync client, all with just a few lines of HTML/JavaScript! &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-2974929139940649902?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/05/web-client-for-microsoft-lync-2010.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-q4Lc92e-eQ4/T7--CrbIL0I/AAAAAAAAALI/ivNPkIf2LxM/s72-c/office-365-webclient.PNG' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-3489646661092155072</guid><pubDate>Fri, 25 May 2012 13:25:00 +0000</pubDate><atom:updated>2012-05-25T12:11:07.459-04:00</atom:updated><title>Getting the availability of a Queue using JavaScript</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;When utilizing &lt;a href="http://www.instant-tech.com/Queue_Manager.cfm" target="_blank"&gt;Queue Manager&lt;/a&gt; as a click-to-chat platform, it's important to be able to accurately know the current state of the Queue. You wouldn't want end-users trying to chat if the queue was offline, this would lead to user disappointment and dissatisfaction. You also may want a way of displaying how many experts are currently online, available, and ready to chat, to show the strength of your 'support-force'. Our Queue front-end has had support for these sort of requests for sometime, but in our most recent release, we've made these activities easier to perform. Let me walk you through a typical scenario, and I'll show you how easy it is. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario:&lt;/b&gt; You want to check the status of the queue on a simple web page button press.&lt;br /&gt;&lt;br /&gt;To achieve this functionality, we'll do a few things in JavaScript, but the code itself is very straightforward. To do this we'll be using the following (&lt;b&gt;new!&lt;/b&gt;) Queue Manager API call to get the status of the queue:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt; &lt;div class="MsoNormal"&gt;&lt;span style="color: #0070c0; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;a href="http://%3cfqdn%20of%20queue%20manager%20server%3e/ITFramework/webclient?getSTStatus=%3cQueue-Login-ID"&gt;http://&lt;i style="color: black;"&gt;&amp;lt;FQDN of Queue Manager Server&amp;gt;&lt;/i&gt;/ITFramework/webclient?getSTStatus=&lt;b&gt;&lt;i style="color: black;"&gt;&lt;span style="font-weight: normal;"&gt;&amp;lt;Queue-Login-ID&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;b&gt;&lt;i style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;i style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;Replace the fields necessary with your environment, the Queue login ID would be something like 'Demo Support' or 'support@instant-tech.com' depending on how the Queues are set up in your deployment.&lt;br /&gt;&lt;br /&gt;We'll make a simple JavaScript call to call this, and return the Queue status. The function below shows how the code would look to perform this task. It's a mixture of JavaScript and jQuery, so you'd need to make sure the page you are testing with is using jQuery for this example to work.&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;var Instant = {&lt;br /&gt;    getQueueStatus: function (queueID) {&lt;br /&gt;        var url = "http://192.168.1.214:8080/ITFramework/webclient?getSTStatus=" + queueID;&lt;br /&gt;        &lt;br /&gt;        $.ajax({&lt;br /&gt;            url: url,&lt;br /&gt;            type: "GET",&lt;br /&gt;            complete: function(result){&lt;br /&gt;                status = $.trim(result.responseText);&lt;br /&gt;                if (status === "na") {&lt;br /&gt;                    console.log("Queue is offline, or doesn't exist."); // Log the message out to the Chrome/Firefox/Firebug console&lt;br /&gt;                }&lt;br /&gt;                else if (status === "STATUS_ACTIVE") {&lt;br /&gt;                    console.log("Queue is online."); // Log the message out to the Chrome/Firefox/Firebug console&lt;br /&gt;                }&lt;br /&gt;                else if (status === "STATUS_AWAY") {&lt;br /&gt;                    console.log("Queue is unavailable. All experts are unavailable/offline."); // Log the message out to the Chrome/Firefox/Firebug console&lt;br /&gt;                }&lt;br /&gt;                else {&lt;br /&gt;                    console.log("Queue may be available, check it's status in Sametime."); // Log the message out to the Chrome/Firefox/Firebug console&lt;br /&gt;            }              &lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;In the code above, we've created a function &lt;i&gt;getQueueStatus&lt;/i&gt; inside our Instant object that takes the Queue ID as a parameter. We build a 'url' variable with the FQDN to our Queue Server, and the Queue ID that we passed in. Once we have that, we do a simple AJAX &lt;i&gt;GET&lt;/i&gt; request to the url variable we built. Once we get the response, our code with run through the 'complete:' section of our code and it will assess what the server has returned. We use jQuery's $.trim() function to strip any '\n' line breaks that may be returned with the data. The API call could return up to 12 responses, but we are only really concerned with 3.&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;If we get '&lt;i&gt;&lt;b&gt;na&lt;/b&gt;&lt;/i&gt;' as a response, the Queue is offline in Sametime, or it isn't a valid queue. This means our server can't see it. For this we are writing out to the Chrome/Firebug console &lt;i&gt;Queue is offline, or doesn't exist.&amp;nbsp;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;If we get '&lt;i&gt;&lt;b&gt;STATUS_ACTIVE&lt;/b&gt;&lt;/i&gt;', our server can see the queue, it's online. For this we'll write out &lt;i&gt;Queue is online.&lt;/i&gt; &lt;/li&gt;&lt;li&gt;The other response we'd want to check for this the '&lt;b&gt;&lt;i&gt;STATUS_AWAY&lt;/i&gt;&lt;/b&gt;' response, this means that the queue is online, but that all experts are currently busy.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;Inside these if statements, you could write your own code to execute when these status' are returned. You could have this function load with the page, and if the server returns '&lt;i&gt;na&lt;/i&gt;' you could disable the chat button and give a message the the chat feature is currently disabled. &lt;br /&gt;&lt;br /&gt;The other API call which we have surfaced is a way for you to get the number of available experts in the requested Queue. The code itself is almost identical to the code above, except we are requesting a different API endpoint URL:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;span style="color: #0070c0; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;a href="http://%3cfqdn%20of%20queue%20manager%20server%3e/ITFramework/webclient?getQueueExpertsReady=%3cQueue-Login-ID"&gt;http://&lt;i style="color: black;"&gt;&amp;lt;FQDN of Queue Manager Server&amp;gt;&lt;/i&gt;/ITFramework/webclient?getQueueExpertsReady=&lt;b&gt;&lt;i style="color: black;"&gt;&lt;span style="font-weight: normal;"&gt;&amp;lt;Queue-Login-ID&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;b&gt;&lt;i style="color: black;"&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;The JavaScript below lays out this API call simply.&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;getAvailableExpertCount: function (queueID) {&lt;br /&gt;    var url = "http://192.168.1.214:8080/ITFramework/webclient?getQueueExpertsReady=" + queueID; // Change this to the FQDN of your IQM server&lt;br /&gt;&lt;br /&gt;    $.ajax({&lt;br /&gt;        url: url,&lt;br /&gt;        type: "GET",&lt;br /&gt;        complete: function(result){&lt;br /&gt;                count = $.trim(result.responseText);&lt;br /&gt;                console.log("Experts available: " + count);&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;Just like the first block of code, we set a URL using our FQDN and Queue ID, and perform a simple AJAX GET to the URL that we built. We trim the response, and console out the number of experts that we have in the Queue available. This response could be set into a variable itself, which maybe you would want to include in a counter somewhere on the page to show visitors how many agents are there to help. Because this is all JavaScript, it is very flexible to wire these API  calls into your website to perform some basic to advanced tasks.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-3489646661092155072?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/05/getting-availability-of-queue-using.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-6618557496018541455</guid><pubDate>Tue, 08 May 2012 15:00:00 +0000</pubDate><atom:updated>2012-05-16T12:28:31.350-04:00</atom:updated><title>Using JMX to Investigate Queue Manager and Java on Linux</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="font-family: inherit;"&gt;Recently, we have been involved in a rather large Queue Manager deployment running on a Linux environment.&amp;nbsp; During this process, we have been reviewing various tools and techniques to help analyze and detect issues in a remote production environment.&amp;nbsp; As part of this process, we discovered the value of JMX, VisualVM, and the tools associated with debugging Java applications.&amp;nbsp; Most of these practices are useful on both Linux and Windows deployments.&amp;nbsp; &lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;As a bit of background, our Queue Manager for Sametime application is built using Java and a collection of Java libraries.&amp;nbsp; Queue Manager leverages the Sametime Java API for access to the core Sametime services, it uses the Domino libraries for accessing Lotus Notes/Domino services, and Queue Manager uses Spring as the main application framework.&amp;nbsp; So, at a high level, Queue Manager is a Java Spring application running under Tomcat.&amp;nbsp; &lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Typically, we deploy Queue Manager on a Windows OS.&amp;nbsp; However, during a recent deployment, we configured Queue Manager to run on a Linux server.&amp;nbsp; As part of this deployment, we wanted to remotely monitor the thread activity of the application, the CPU usage of the application, and identify any issues related to either thread usage or memory management.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;While there are some very useful tools (typically command line) to help with this type of analysis, we&amp;nbsp;particularly like&amp;nbsp;JMX and VisualVM.&amp;nbsp; After enabling JMX on the server hosting Queue Manager,&amp;nbsp;our application developers&amp;nbsp;then connect to the JMX monitoring system using VisualVM.&amp;nbsp; This allows our developers to monitor the performance, health, thread usage, and memory usage in real-time - using a very nice graphical display.&amp;nbsp; The added advantage is that we can use VisualVM to both remotely monitor a variety of internal servers, as well as use VisualVM to review thread dumps and heap dumps (memory allocation dumps) from a remote production environment.&amp;nbsp; &lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Here is a screen shot of VisualVM monitoring an internal Linux instance of Queue Manager:&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Y0Fs7jZ32-s/T7PBw5QepiI/AAAAAAAAAKM/lkgbDXtrBPI/s1600/visualvm_1_3_4_our+internal+view_blur.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://1.bp.blogspot.com/-Y0Fs7jZ32-s/T7PBw5QepiI/AAAAAAAAAKM/lkgbDXtrBPI/s320/visualvm_1_3_4_our+internal+view_blur.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;VisualVM is also very useful during extended periods of load testing and stress testing.&amp;nbsp; Our internal developers created a variety of load testing tools in order to simulate the various Queue Manager&amp;nbsp; users and systems.&amp;nbsp; Our load testing suite includes the ability to scale the number of inbound Sametime IM seekers (people looking for help), the number of experts in a queue, the number of web service requests to the system, as well as experts entering and leaving various queues.&amp;nbsp; During these load tests, VisualVM provides a real time display of the threads, memory, and CPU usage for the system.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;In addition to high level monitoring, VisualVM enables the ability to sample (collect) data over a specific period of time.&amp;nbsp; So, during certain load testing cycles, we can enable VisualVM to sample the activity of the system and then we can review the data to inspect threads, CPU usage across threads, and memory allocation.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;View CPU usage by thread:&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-lZ955DpH3O4/T6vBpbwJOLI/AAAAAAAAAJw/oAVWTI6p5Bo/s1600/thread+cpu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://3.bp.blogspot.com/-lZ955DpH3O4/T6vBpbwJOLI/AAAAAAAAAJw/oAVWTI6p5Bo/s320/thread+cpu.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;One of the most useful tools in VisualVM is the ability to dump threads.&amp;nbsp; To create a thread dump, right click on the JMX instance and select Dump Threads...&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-peHDD9iw1V4/T7PE0EO9kPI/AAAAAAAAAKY/Vdonh82HvXU/s1600/VisualVM_thread+dump.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="244" src="http://3.bp.blogspot.com/-peHDD9iw1V4/T7PE0EO9kPI/AAAAAAAAAKY/Vdonh82HvXU/s320/VisualVM_thread+dump.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4 style="font-family: inherit; text-align: left;"&gt;  Snapshots and System Sampling:&lt;/h4&gt;&lt;div style="font-family: inherit;"&gt;While the ability to capture a thread dump is useful, we have found the ability to save and export a snapshot of the system, using the sampling module, to be incredibly valuable.  The 'sampler' area of VisualVM provides the ability to 'snapshot' the current system state and then export this information.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Navigate to the Sampler tab and enable sampling:&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Click the Snapshot button&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-oWotA1o4uiY/T7PGmxHu5NI/AAAAAAAAAKg/ar3pZm1Grro/s1600/VisualVM+Snapshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="152" src="http://1.bp.blogspot.com/-oWotA1o4uiY/T7PGmxHu5NI/AAAAAAAAAKg/ar3pZm1Grro/s320/VisualVM+Snapshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Export the snapshot&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-6TEqT3Krcus/T7PHvQSRvLI/AAAAAAAAAKo/BxY_KFUAf9I/s1600/VisualVM_ExportSnapshot_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="165" src="http://3.bp.blogspot.com/-6TEqT3Krcus/T7PHvQSRvLI/AAAAAAAAAKo/BxY_KFUAf9I/s320/VisualVM_ExportSnapshot_1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Save the snapshot as a file (so it can be shared)&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-8EbTamd3DQw/T7PIF_bCE1I/AAAAAAAAAK4/MPjmCNwUCQU/s1600/VisualVM_Save_ProfileSnapshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" src="http://3.bp.blogspot.com/-8EbTamd3DQw/T7PIF_bCE1I/AAAAAAAAAK4/MPjmCNwUCQU/s320/VisualVM_Save_ProfileSnapshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;The exported snapshot may then be transferred to another machine and opened using VisualVM.&amp;nbsp; The ability to save profile snapshots, transfer these snapshots, and then inspect the snapshots using VisualVM has proved extremely valuable.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;We have found JMX and VisualVM to be invaluable tools during both our internal load testing and remote performance tuning and analysis efforts.&amp;nbsp; JMX is a standard component of the Java environment, and the addition of VisualVM provides a compelling, and powerful, collection of debugging and analysis tools.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Here are some helpful links that we have collected during this process:&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;b&gt;VisualVM and JMX&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Pretty good Spring presentation on JMX and other useful topics:&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;a href="http://www.springsource.com/files/uploads/tomcat/tomcatx-troubleshooting-production.pdf"&gt;http://www.springsource.com/files/uploads/tomcat/tomcatx-troubleshooting-production.pdf&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Getting started with VisualVM:&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;a href="http://visualvm.java.net/gettingstarted.html"&gt;http://visualvm.java.net/gettingstarted.html&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;20 Linux System Monitoring Tools Every SysAdmin Should Know:&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: inherit; margin: 0in 0in 10pt;"&gt;  &lt;a href="http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html"&gt;http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;b&gt;Tomcat Related Links:&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Reviewing Tomcat Configuration and Tuning:&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;a href="http://www.devx.com/Java/Article/32730/1954"&gt;http://www.devx.com/Java/Article/32730/1954&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Presentation by Mark Thomas on Tomcat Tuning:&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;a href="http://people.apache.org/%7Emarkt/presentations/2009-04-01-TomcatTuning.pdf"&gt;http://people.apache.org/~markt/presentations/2009-04-01-TomcatTuning.pdf&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;Mulesoft article on Tomcat performance tuning:&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;a href="http://www.mulesoft.com/tomcat-performance"&gt;http://www.mulesoft.com/tomcat-performance&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;b&gt;Misc:&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: inherit; margin: 0in 0in 10pt;"&gt;Analyzing thread CPU usage on Linux&lt;a href="http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=%2Fcom.ibm.java.doc.igaa%2F_1vg0001475cb4a-1190e2e0f74-8000_1007.html"&gt;:&lt;br /&gt;http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=%2Fcom.ibm.java.doc.igaa%2F_1vg0001475cb4a-1190e2e0f74-8000_1007.html&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;Checking for looping code:&lt;/span&gt;&lt;div class="MsoNormal" style="font-family: inherit; margin: 0in 0in 10pt;"&gt;  &lt;a href="http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=%2Fcom.ibm.java.doc.igaa%2F_1vg0001475cb4a-1190e2e0f74-7fff_1001.html"&gt;http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=%2Fcom.ibm.java.doc.igaa%2F_1vg0001475cb4a-1190e2e0f74-7fff_1001.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Using JavaDump:&lt;br /&gt;&lt;a href="http://publib.boulder.ibm.com/infocenter/realtime/v1r0/index.jsp?topic=%2Fcom.ibm.rt.doc.10%2Fdiag%2Ftools%2Fjavadump.html"&gt;http://publib.boulder.ibm.com/infocenter/realtime/v1r0/index.jsp?topic=%2Fcom.ibm.rt.doc.10%2Fdiag%2Ftools%2Fjavadump.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Alternate ways to get Java thread dumps:&lt;br /&gt;&lt;a href="http://dev.day.com/content/kb/home/cq5/CQ5SystemAdministration/TakeThreadDump.html"&gt;http://dev.day.com/content/kb/home/cq5/CQ5SystemAdministration/TakeThreadDump.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reviewing socketinputstream threads:&lt;br /&gt;&lt;a href="http://javaeesupportpatterns.blogspot.com/2011/04/javanetsocketinputstreamsocketread0.html"&gt;http://javaeesupportpatterns.blogspot.com/2011/04/javanetsocketinputstreamsocketread0.html&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-6618557496018541455?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/05/troubleshooting-queue-manager-on-linux.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Y0Fs7jZ32-s/T7PBw5QepiI/AAAAAAAAAKM/lkgbDXtrBPI/s72-c/visualvm_1_3_4_our+internal+view_blur.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-8804319776238586150</guid><pubDate>Fri, 04 May 2012 15:49:00 +0000</pubDate><atom:updated>2012-05-04T12:02:49.303-04:00</atom:updated><title>IMtegrity 5 Product Launch - Continued Commitment to IBM Sametime</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;At a time when many of our competitors are exiting the IM compliance and e-discovery market, Instant Technologies is continuing to invest, innovate, and extend our product offerings for IBM Sametime.&amp;nbsp; Yesterday, we announced the immediate availability of &lt;a href="http://www.instant-tech.com/IMtegrity_Archives.cfm" target="_blank"&gt;IMtegrity 5&lt;/a&gt;.&amp;nbsp; IMtegrity 5 continues to build on the outstanding platform that we have developed for compliance, archiving, and e-discovery for IBM Sametime.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;IMtegrity 5 is a major product release for Instant and represents our commitment to our customers and the IBM Sametime user community.&amp;nbsp; In addition to adding native support for Sametime 8.5, IMtegrity 5 includes two significant features that have been requested across a large community of our install base.&amp;nbsp; First, IMtegrity 5 adds the ability to create ethical IM firewalls within an organization.&amp;nbsp; By providing a real-time monitoring service for IBM Sametime, IMtegrity now has the ability to detect, and optionally prevent, Sametime IM conversations between individuals and groups.&amp;nbsp;&amp;nbsp; The ability to support ethical walls has been requested for many years and we are excited that we can now deliver this level of functionality to our customers.&lt;br /&gt;&lt;br /&gt;In addition to ethical firewalls, IMtegrity 5 adds support for configurable IM disclaimers.&amp;nbsp; These disclaimer notifications are designed to notify&amp;nbsp;chat participants&amp;nbsp;whenever new IM conversations are&amp;nbsp;initiated.&amp;nbsp; Disclaimer text may be customized for the local language and may&amp;nbsp;be triggered based on a set of rules or actions.&amp;nbsp; Many of our large customers have been requesting individual IM based disclaimers and we&amp;nbsp;anticipate that&amp;nbsp;this additional feature will help IMtegrity continue to gain momentum&amp;nbsp;into new markets.&lt;br /&gt;&lt;br /&gt;IMtegrity has always been based on simplicity of design, the ability to scale within large deployment, and the development of a stable platform for compliance and e-discovery.&amp;nbsp; This latest release of IMtegrity continues this tradition of design and simplicity and includes a seamless installation process for Sametime 8.5 servers, a highly scalable archiving engine, and new features that will enable the IMtegrity platform to meet the demands of new and existing customers.&lt;br /&gt;&lt;br /&gt;Our customer base for IMtegrity continues to grow as does our investment in the core IBM Sametime platform.&lt;br /&gt;&lt;br /&gt;Peyton McManus&lt;br /&gt;May 4, 2012&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-8804319776238586150?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/05/imtegrity-5-product-launch-continued.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-3766194269489593693</guid><pubDate>Thu, 03 May 2012 12:20:00 +0000</pubDate><atom:updated>2012-05-03T08:20:58.315-04:00</atom:updated><title>Good Presentation on Installing Sametime 8.5.1</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;This is a pretty concise presentation (converted to a pdf) detailing the steps to install Sametime 8.5.1.&amp;nbsp; The presentation is from Lotusphere 2011 and was presented by Frank Altenburg and Volker Juergensen.&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;div class="MsoPlainText" style="margin: 0in 0in 0pt;"&gt;&lt;a href="http://www-10.lotus.com/ldd/stwiki.nsf/xsp/.ibmmodres/domino/OpenAttachment/ldd/stwiki.nsf/6F6353B28F5FB51185257775007AC431/attach/FINAL_SHOW201.pdf"&gt;&lt;span style="color: blue; font-family: Calibri;"&gt;http://www-10.lotus.com/ldd/stwiki.nsf/xsp/.ibmmodres/domino/OpenAttachment/ldd/stwiki.nsf/6F6353B28F5FB51185257775007AC431/attach/FINAL_SHOW201.pdf&lt;/span&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-3766194269489593693?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/05/good-presentation-on-installing.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-3116152029458167696</guid><pubDate>Tue, 01 May 2012 19:44:00 +0000</pubDate><atom:updated>2012-05-01T16:03:51.652-04:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>adminstration</category><category domain='http://www.blogger.com/atom/ns#'>Queue Manager 4</category><category domain='http://www.blogger.com/atom/ns#'>Apache Tomcat</category><title>Apache Tomcat 6 Shutdown Failure Resolution on SUSE Enterprise 11</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Recently, in a development environment, and customer site production environment we noticed some issues shutting down Apache Tomcat for our &lt;a href="http://instant-tech.com/Queue_Manager.cfm" target="_blank"&gt;Queue Manager product&lt;/a&gt;&amp;nbsp;running on SUSE Enterprise Linux 11. Running './catalina.sh stop' appeared to work fine, but upon further inspection, it failed to stop it's running Java process, and it left its PID file behind (/var/run/tomcat6.pid). Running the '/etc/init.d/tomcat6 stop' command showed us that, in fact, there was an error in the shut down process.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ykfGBylV2K0/T6A6Nu6x0nI/AAAAAAAAAJU/dywIJtS2eMY/s1600/failed.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="28" src="http://2.bp.blogspot.com/-ykfGBylV2K0/T6A6Nu6x0nI/AAAAAAAAAJU/dywIJtS2eMY/s640/failed.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Review of the catalina.out log file revealed a permissions error writing one of the logs. The log entry itself wasn't terribly helpful, but the implications of a permissions issue were intriguing. It's important to mention that we installed Tomcat 6 using SUSE's YaST tool, we hadn't built it from source, so permissions problems shouldn't be an issue. After inspecting Tomcat's directories, I decided to&amp;nbsp;explicitly&amp;nbsp;give group execution&amp;nbsp;privileges&amp;nbsp;to the folders. The folders were already set to attributes 755, so that didn't appear to be an issue. I used the commands below for the Tomcat directories.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9QgGUx8fx88/T6A78nIVqOI/AAAAAAAAAJc/tlQqpvA1bWU/s1600/fix.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="68" src="http://4.bp.blogspot.com/-9QgGUx8fx88/T6A78nIVqOI/AAAAAAAAAJc/tlQqpvA1bWU/s640/fix.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Before starting Tomcat again, I removed the PID file (/var/run/tomcat6.pid), killed the left behind Java process (using kill), and cleared out our logs. Once Tomcat was started, and everything was running smoothly, we sent the shutdown.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-aKO-zbbEVvA/T6A8izzB1GI/AAAAAAAAAJk/bNrRQbGClFU/s1600/success.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="42" src="http://1.bp.blogspot.com/-aKO-zbbEVvA/T6A8izzB1GI/AAAAAAAAAJk/bNrRQbGClFU/s640/success.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This time it shut down fine. Upon further inspection the spawned Java process that had lingered before was gone, as was the PID file. Further inspection of the logs showed no further errors with Tomcat's shut down either.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-3116152029458167696?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/05/apache-tomcat-6-shutdown-failure.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ykfGBylV2K0/T6A6Nu6x0nI/AAAAAAAAAJU/dywIJtS2eMY/s72-c/failed.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-7547659674546610898</guid><pubDate>Tue, 17 Apr 2012 16:02:00 +0000</pubDate><atom:updated>2012-05-01T15:50:08.301-04:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>adminstration</category><category domain='http://www.blogger.com/atom/ns#'>Microsoft Lync 2010</category><category domain='http://www.blogger.com/atom/ns#'>PowerShell</category><category domain='http://www.blogger.com/atom/ns#'>scripting</category><title>Enabling Calendar Sharing in Office 365</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;We recently worked with a customer who moved their mailboxes to the cloud, and now run their organization on Office 365. Mailbox migration was smooth, but enabling calendar sharing (vital requirement) proved to be a larger task. After reading tons of Microsoft Technet articles and posts, we were able to get calendar sharing/permissions all sorted out (disabled by default in Office 365). Read the full blog article to follow the steps, a word of warning though, we'll be using Powershell today.&lt;br /&gt;&lt;br /&gt;To start, you'll need to install and configure the &lt;b style="font-style: italic;"&gt;Microsoft Online Services Module for Windows PowerShell &lt;/b&gt;. You can follow the instructions&amp;nbsp;&lt;a href="http://onlinehelp.microsoft.com/Office365-enterprises/ff652560.aspx" target="_blank"&gt;here&lt;/a&gt;&amp;nbsp;to do so, it's easy enough.&lt;br /&gt;&lt;br /&gt;Next we'll want to open the Microsoft Online Services Module for Windows Powershell program. It will launch like any other Powershell program. Once loaded, we need to give Powershell the credentials we'll be logging in to Office 365 as. These need to be for a user with Administrator privileges in your Office 365 domain. To do so, run the following command:&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;$credentials = Get-Credential&lt;/li&gt;&lt;ul&gt;&lt;li&gt;This will spawn a window asking for credentials, enter your Office 365 administrative credentials.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xKrN46Q5jLQ/T42NSUffvPI/AAAAAAAAAI8/qUlNehI_vPg/s1600/credentials.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="492" src="http://3.bp.blogspot.com/-xKrN46Q5jLQ/T42NSUffvPI/AAAAAAAAAI8/qUlNehI_vPg/s640/credentials.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/-xKrN46Q5jLQ/T42NSUffvPI/AAAAAAAAAI8/qUlNehI_vPg/s1600/credentials.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Once Powershell has your credentials, we need to log into the Office 365 servers using the credentials we just set, and start our remote session. Use the command below to do so.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $credentials -Authentication Basic -AllowRedirection&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;This might take a few seconds to complete.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/-ahpIT1oW2m4/T42OjmJK4tI/AAAAAAAAAJE/SZcy63Vx4EE/s1600/session.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="177" src="http://4.bp.blogspot.com/-ahpIT1oW2m4/T42OjmJK4tI/AAAAAAAAAJE/SZcy63Vx4EE/s640/session.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Next, we need to lower our shell security. This enables us to run the cmdlet after this which executes a script from Microsoft’s servers. Use this command to do so:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Set-ExecutionPolicy -ExecutionPolicy unrestricted&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Now we need to import the Powershell commands, from the Microsoft servers, to our local session. Use the command below to do so.&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;$ImportResults = Import-PSSession $session&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;/ul&gt;&lt;a href="http://4.bp.blogspot.com/-d-f-uOteRXQ/T42QYzLTNvI/AAAAAAAAAJM/JjdD8FxN3PM/s1600/import.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="491" src="http://4.bp.blogspot.com/-d-f-uOteRXQ/T42QYzLTNvI/AAAAAAAAAJM/JjdD8FxN3PM/s640/import.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;Once that finishes, we should restore our default shell security. Use the command below to restore our default Execution Policy.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Set-ExecutionPolicy -ExecutionPolicy &amp;nbsp;restricted&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;All that's left now is to turn on the calendar sharing. It's a longer command, but it will set a default policy for enabling calendar sharing across the domain.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Set-SharingPolicy ‘Default Sharing Policy’ –Domains ‘*: CalendarSharingFreeBusySimple’&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;You can now exit Powershell using the 'Exit' command. Sharing has now been enabled across your organizational domain! Users can now publish their calendars, and share them with other users. Feel free to comment below if you run into any issues.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-7547659674546610898?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/04/enabling-calendar-sharing-in-office-365.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-xKrN46Q5jLQ/T42NSUffvPI/AAAAAAAAAI8/qUlNehI_vPg/s72-c/credentials.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-4112041087004794465</guid><pubDate>Wed, 21 Mar 2012 20:42:00 +0000</pubDate><atom:updated>2012-03-21T16:42:16.347-04:00</atom:updated><title>Enabling the Sametime Connect Web API in Lotus Notes Installations</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In&amp;nbsp;&lt;a href="http://blog.instant-tech.com/2012/01/checking-presence-of-user-or-queue-in.html" target="_blank"&gt;prior&lt;/a&gt;&amp;nbsp;&lt;a href="http://blog.instant-tech.com/2012/02/improving-sametime-connect-web-api-bit.html" target="_blank"&gt;posts&lt;/a&gt;&amp;nbsp;we've discussed some advanced functioning that can be performed using some JavaScript/jQuery and the &lt;a href="http://www14.software.ibm.com/webapp/download/nochargesearch.jsp?q0=&amp;amp;k=ALL&amp;amp;S_TACT=104CBW71&amp;amp;status=Active&amp;amp;b=Lotus&amp;amp;sr=1&amp;amp;q=sametime+sdk&amp;amp;ibm-search=Search" target="_blank"&gt;Sametime Connect Web API/SDK&lt;/a&gt;. This all works just fine unless you are using Sametime from within a Lotus Notes client, in which case none of these examples will work. By default, the Sametime Connect Web features (port/servlets) are disabled by the client and need to be turned on. Thankfully, it's a straightforward process to enable it, an you can follow the steps below to do so.&lt;br /&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Open the following file '&amp;lt;Notes install directory&amp;gt;\framework\rcp\plugin_customization.ini'.&lt;/li&gt;&lt;li&gt;Modify the entries to mirror our versions below:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;com.ibm.collaboration.realtime.webapi/startWebContainer=true&lt;/li&gt;&lt;li&gt;com.ibm.collaboration.realtime.brokerbridge/startBroker=true&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Save the file.&lt;/li&gt;&lt;li&gt;Restart the Lotus Notes client.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;That's all it takes. Once the steps above have been completed the port that we call during our API calls is open, and the Web API is online.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-4112041087004794465?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/03/enabling-sametime-connect-web-api-in.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-8659980078822515128</guid><pubDate>Thu, 09 Feb 2012 18:22:00 +0000</pubDate><atom:updated>2012-02-14T15:07:33.212-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>API</category><category domain='http://www.blogger.com/atom/ns#'>sametime</category><title>Improving the Sametime Connect Web API (a bit) with a Dash of jQuery</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://blog.instant-tech.com/2012/01/checking-presence-of-user-or-queue-in.html" target="_blank"&gt;Previously&lt;/a&gt;, we discussed using some of the features built in to the&amp;nbsp;&lt;a href="http://www14.software.ibm.com/webapp/download/nochargesearch.jsp?q0=&amp;amp;k=ALL&amp;amp;S_TACT=104CBW71&amp;amp;status=Active&amp;amp;b=Lotus&amp;amp;sr=1&amp;amp;q=sametime+sdk&amp;amp;ibm-search=Search" target="_blank"&gt;Sametime SDK/Connect Web API&lt;/a&gt;&amp;nbsp;to check the presence of a user, or in our case a&amp;nbsp;&lt;a href="http://instant-tech.com/Queue_Manager.cfm" target="_blank"&gt;queue&lt;/a&gt;, before initiating a conversation through an internal portal page. At a high level, our 'click to chat' web application needs to detect whether&amp;nbsp;a Sametime Connect client is available, or whether we should initiate a conversation using our web client.&amp;nbsp; We checked the user's presence before starting a conversation because we found, in some cases, that the Sametime web API wouldn't be able to tell if a user was online or not, and an attempt to launch a Sametime conversation to that user (or queue) would invariably fail, so we needed to launch our web client in these cases.&lt;br /&gt;&lt;br /&gt;The previous blog post resolved a lot of our problems with presence detection, but it also uncovered some additional issues related to successfully detecting whether to launch our web client or the native Sametime client. More specifically,&amp;nbsp;our custom&amp;nbsp;Instant.detectPresenceOfUser(' [user] ') JavaScript function would work fine (and would return true indicating that Sametime could see the user online) and it should therefore be able to launch a Sametime conversation with that user. However, this is where the trouble begins; even though our code would detect a native Sametime client, the&amp;nbsp;Sametime window would never appear and our web client would launch by default. In most test scenarios we would get the web client about 4 out of 5 times (even when the person had a local Sametime client installed). Clearly there was an issue in the API code for invoking the Sametime window. &lt;br /&gt;&lt;br /&gt;Below you will see the code as it exists in the Sametime Connect Web API, the function is called sametime_invoke, it takes in a series of parameters which we will lay out below.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; var sametime_invoke = function(action, userId, params)  &lt;br /&gt; {  &lt;br /&gt;      var d = new Date();  &lt;br /&gt;      var url = sametime_servletUrl + action+'?userId='+userId;  &lt;br /&gt;      if(params != null)  &lt;br /&gt;           url += "&amp;amp;" + fixupParams(params);  &lt;br /&gt;      url += "&amp;amp;time=" + d.getTime();  &lt;br /&gt;      var imgObj =new Image();  &lt;br /&gt;      imgObj.src = url;  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;First, the function requires an action, in our case, chat. Next a userId, following the same example as our previous post, System p. And last it takes in some optional parameters which we aren't using. So normally, our JS to invoke the Sametime client would look like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; sametime_invoke('chat', 'System p');  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This would launch a chat conversation with the 'System p' user. Through our testing though, this sametime_invoke function proved to be deficient, working properly only a handful of times. Looking at the sametime_invoke function, it appeared as though the last two lines of the function are where the magic request happens to spring the window. Stepping through the function logically, we can follow it like this:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;pre style="background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;  var sametime_invoke = function(action, userId, params)   &lt;br /&gt;  {   &lt;br /&gt;    // Creates a new JavaScript Date object, this is used later to create a timestamp   &lt;br /&gt;    var d = new Date();  &lt;br /&gt;      &lt;br /&gt;    // Forms the URL which it will post to, using the parameters we passed in (action, userId, params)   &lt;br /&gt;    var url = sametime_servletUrl + action+'?userId='+userId;  &lt;br /&gt;      &lt;br /&gt;    // Looks to see if we have passed in parameters  &lt;br /&gt;    if(params != null)  &lt;br /&gt;       url += "&amp;amp;" + fixupParams(params); // Appends them to the URL  &lt;br /&gt;      &lt;br /&gt;    // Adds a timestamp to the end of the URL using the Date object (d) we created above.   &lt;br /&gt;    url += "&amp;amp;time=" + d.getTime();  &lt;br /&gt;      &lt;br /&gt;    // Creates an image object on the page  &lt;br /&gt;    var imgObj =new Image();   &lt;br /&gt;      &lt;br /&gt;    // 'Loads' the image using the URL we built. This makes a request to the URL, and should open the window.   &lt;br /&gt;    imgObj.src = url;  &lt;br /&gt;  }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The issue with inconsistent launching appears to come from the last two lines. The creating of the Image object, and staging the image request to the URL provided doesn't appear to be the best approach to this. It also lacks the ability to detect any failures, its essentially a blind post. That being said, all of the code leading up to those two lines, is very useful, and tells us quite a bit about what the Sametime client's servlet requires in order for us to make a POST (or in our case, for this article, a GET) to launch that window.&lt;br /&gt;&lt;br /&gt;By visiting the URL that it builds (http://localhost:59449/stwebapi/chat?userId=Demo%20Sales&amp;amp;time=1328650958738, for our purposes), we get a launched Sametime client chat to our 'Demo Sales' queue, and we also get, in the browser, a response from the servlet, formed as parsed JSON (JSONP). This is very useful. This response (returnCode:200), lets us know that the servlet understood our request, was able to find the user, and launch the Sametime window. Unfortunately, this doesn't help us detect presence, so if the user is offline, it'll still launch the window, it will just error once it does saying the user is offline. So we will still need to do those presence checks up front using our Instant.detectPresenceOfUser function.&lt;br /&gt;&lt;br /&gt;So, enough talk about it, lets re-write that sametime_invoke function using &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt;, &lt;a href="http://api.jquery.com/jQuery.ajax/" target="_blank"&gt;AJAX&lt;/a&gt;, and a callback function.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; Instant.launchSametimeConversation = function (stid) {  &lt;br /&gt;   var time = new Date();  &lt;br /&gt;   var getUrl = 'http://localhost:59449/stwebapi/chat?userId=' + stid + '&amp;amp;time=' + time.getTime() + '&amp;amp;jsonp=Instant.handleResponse';  &lt;br /&gt;   &lt;br /&gt;   // Use jQuery to request the Sametime servlet URL. If a request makes it to the URL successfully, the servlet will return a code 200 and open the Sametime client chat with the user.  &lt;br /&gt;   // We use the Instant.handleResponse() function as a callback to process the JSONP data object that the servlet hands back.  &lt;br /&gt;   $.ajax({  &lt;br /&gt;     type: 'GET',  &lt;br /&gt;     url: getUrl,  &lt;br /&gt;     dataType: 'jsonp',  &lt;br /&gt;     jsonpCallback: 'Instant.handleResponse'  &lt;br /&gt;   });  &lt;br /&gt; };  &lt;br /&gt;   &lt;br /&gt; // A rudimentary callback function to handle JSONP data objects retrieved by the Instant.launchSametimeConversation() function.  &lt;br /&gt; Instant.handleResponse = function (data) {  &lt;br /&gt;   if (data.returnCode === 200) {  &lt;br /&gt;     alert('Success!');  &lt;br /&gt;   } else {  &lt;br /&gt;     alert('Failed!');  &lt;br /&gt;   }  &lt;br /&gt; };  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;In the functions above, you an see that we follow the same approach initially as the bundled sametime_invoke function, but stray heavily once we are staged up.&lt;br /&gt;&lt;br /&gt;First, since we are always using chat, and never using the custom parameters, we strip the function parameters down to just stid (the username) of the user we are chatting with. We bundle the rest of this into our getUrl variable, along with the timestamp. We did add something new though, you'll notice the '&amp;amp;jsonp=Instant.handleResponse' parameter at the end of the URL. This specifies our callback function to the servlet. Normally, jQuery handles this fairly well, but the Sametime servlet we are posting against seems fairly specific with how this needs to be formed, so we include it in the URL. We also include it into the jQuery $.ajax method.&lt;br /&gt;&lt;br /&gt;Our callback function is very simple for this example. It could be made much more complex though, simply by providing extra checks for different return codes, and added functionality based off of those checks.&lt;br /&gt;&lt;br /&gt;After rebuilding this function, and adding the callback function, we are able to have much more control over how we launch the Sametime client window, and are able to check for failures finally. This function also consistently launches the Sametime client chat window when expected and hasn't failed to do so yet. The only two requirements are to have a Sametime client logged in, and to have the jQuery library linked in to the page that will house the above functions.&lt;br /&gt;&lt;br /&gt;I'll post screenshots of the success below, as well as a GitHub gist of the code. Reach out to me at&amp;nbsp;&lt;a href="mailto:zclancy@instant-tech.com" target="_blank"&gt;zclancy@instant-tech.com&lt;/a&gt;&amp;nbsp;with any questions/comments.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1781761.js"&gt;  &lt;/script&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-hyfeXvLPySo/TzQNa7X4nCI/AAAAAAAAAI0/ZU8PLdgyvAs/s1600/sametime-invoke-rewrite-success.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="344" src="http://4.bp.blogspot.com/-hyfeXvLPySo/TzQNa7X4nCI/AAAAAAAAAI0/ZU8PLdgyvAs/s640/sametime-invoke-rewrite-success.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-8659980078822515128?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/02/improving-sametime-connect-web-api-bit.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-hyfeXvLPySo/TzQNa7X4nCI/AAAAAAAAAI0/ZU8PLdgyvAs/s72-c/sametime-invoke-rewrite-success.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-7830648562825268449</guid><pubDate>Wed, 25 Jan 2012 19:21:00 +0000</pubDate><atom:updated>2012-01-26T11:14:13.624-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Alert Manager</category><category domain='http://www.blogger.com/atom/ns#'>Microsoft Lync 2010</category><category domain='http://www.blogger.com/atom/ns#'>Microsoft OCS</category><title>Integrating Instant Alert Manager for OCS and Lync with Email</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://www.instant-tech.com/Alert_Manager.cfm" target="_blank"&gt;Instant Alert Manager for OCS and Lync&lt;/a&gt; provides a server based alerting engine and notification system for Microsoft Lync and Microsoft OCS.&amp;nbsp; Our application is capable of dispatching a series of instant messages (IMs) to users - typically this is used to notify people who are running either Microsoft Lync or Microsoft OCS of some event (i.e. a system outage, the status of a help request, etc.).&amp;nbsp; &lt;br /&gt;&lt;br /&gt;We have developed &lt;b&gt;Alert Manager&lt;/b&gt; with an extensible API - with the idea that other systems might want to dispatch messages using our framework.&amp;nbsp; Recently, a prospective customer requested the ability to integrate an email notification system with our IM dispatching system.&amp;nbsp; At a high level, our application will monitor a mail box and will immediately&amp;nbsp;dispatch the messages to&amp;nbsp;a set of online users running OCS or Lync - as the messages are received by the mail system. &amp;nbsp;The idea is provide a single inbound notification bridge, via an email account, and then immediately alert the correct set of people using IM. &lt;br /&gt;&lt;br /&gt;So, several days after the initial request, we have developed a new listening service that integrates our alerting system with a POP3 mail account.&amp;nbsp; This new listening service will monitor a mail account and immediately dispatch inbound mail messages to an appropriate group of users who are online in either Microsoft OCS or Microsoft Lync 2010.&lt;br /&gt;&lt;br /&gt;Here is a screen shot of the mail account - with a message pending:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-5kwCeMX1lRI/TyBTxuG6JZI/AAAAAAAAAIU/3H5jLacsvKk/s1600/alert-pop3-inbox.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="127" src="http://3.bp.blogspot.com/-5kwCeMX1lRI/TyBTxuG6JZI/AAAAAAAAAIU/3H5jLacsvKk/s320/alert-pop3-inbox.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;This is a sample message - where the message is currently encoded as XML.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-BYq51pjtV0g/TyBUyQWr8_I/AAAAAAAAAIs/oC0De7SCSYM/s1600/alert-pop3-email.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="118" src="http://3.bp.blogspot.com/-BYq51pjtV0g/TyBUyQWr8_I/AAAAAAAAAIs/oC0De7SCSYM/s320/alert-pop3-email.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;After the email is received, our new email listening service parses the message and dispatches the request to Alert Manager - where it is placed in queue for immediate delivery. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ksgxKt0PxzE/TyBUKvJsf3I/AAAAAAAAAIc/VvArIcEpKW8/s1600/alert-pop3-sniffer.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" src="http://2.bp.blogspot.com/-ksgxKt0PxzE/TyBUKvJsf3I/AAAAAAAAAIc/VvArIcEpKW8/s320/alert-pop3-sniffer.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;As soon as the message is placed into the dispatching queue, it is staged for delivery - awareness for the recipient(s) is verified, and then the message is delivered using either Microsoft Lync 2010 or Microsoft OCS.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-U9bF-mJSTGU/TyBUiDNVWGI/AAAAAAAAAIk/5nXljFNEFa8/s1600/alert-pop3-delivery.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-U9bF-mJSTGU/TyBUiDNVWGI/AAAAAAAAAIk/5nXljFNEFa8/s320/alert-pop3-delivery.PNG" width="212" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-7830648562825268449?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/01/integrating-instant-alert-manager-for.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-5kwCeMX1lRI/TyBTxuG6JZI/AAAAAAAAAIU/3H5jLacsvKk/s72-c/alert-pop3-inbox.PNG' height='72' width='72'/><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-2974313497932759145</guid><pubDate>Wed, 25 Jan 2012 14:08:00 +0000</pubDate><atom:updated>2012-01-25T09:17:45.083-05:00</atom:updated><title>Setting up a TrustedApplication for Lync 2010</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Open Lync Management Shell&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Create TrustedApplicationPool&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Run Get-CsSite. &amp;nbsp;Note SiteId&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Run Get-CsService –Registrar. &amp;nbsp;Note Identity:Registrar:&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Run New-CsTrustedApplicationPool –Identity [LyncServer] –Registrar [Registrar] –Site [SiteId]&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Run Enable-CsTopology&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Run New-CsTrustedApplication – Save these settings, as you will need them to configure BLM&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;ApplicationId: Supply a descriptive name here&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;TrustedApplicationPoolFqdn: The fully-qualified domain name of the trusted application pool created in the previous step. &amp;nbsp;Can be found by running Get-CsTrustedApplicationPool&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Port: Select a port to access the trusted application. &amp;nbsp;Should be &amp;gt;1024. &amp;nbsp;Be sure that the port is open on your firewall.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Run Enable-CsTopology to commit the changes&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Run “Get-CsTrustedApplication &amp;gt; [some file name].txt” &amp;nbsp;This will save the information you will need to configure BuddyList Migrator to a text file, as it is very difficult to copy from the Management Shell.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style="font-family: 'Segoe UI', sans-serif; text-indent: -0.25in;"&gt;&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'Segoe UI', sans-serif; text-indent: -0.25in;"&gt;Setup TrustedApplicationEndpoint&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: 'Segoe UI', sans-serif; text-indent: -0.25in;"&gt;&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'Segoe UI', sans-serif; text-indent: -0.25in;"&gt;Run New-CsTrustedApplicationEnpdoint –ApplicationID urn:application:yourAppname –TrustedApplicationPoolFqdn appPoolFQDN –SipAddress &lt;a href="sip:name@domain"&gt;sip:name@domain&lt;/a&gt; –DisplayName “Name”&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Setup Certificates for the machine on which you will install BuddyList Migrator. &amp;nbsp;If installing to the Lync Server, this can be ignored&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Run mmc&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Add the Certificates snap-in. &amp;nbsp;Select “Local Computer”&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Go to Personal-&amp;gt;Certifcates&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Action-&amp;gt;All Tasks-&amp;gt;Request New Certificate&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Continue through the Wizard. &amp;nbsp;Select “Computer” for the type of certificate.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-2974313497932759145?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/01/setting-up-trustedapplication-for-lync.html</link><author>noreply@blogger.com (Instant Support)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-8060820563186456545</guid><pubDate>Mon, 02 Jan 2012 20:19:00 +0000</pubDate><atom:updated>2012-01-02T15:19:43.139-05:00</atom:updated><title>Checking the presence of a user (or queue) in Sametime using JavaScript</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Recently, while tracking down a potential bug in one of our Queue Manager deployments, it was decided that we needed a way to check the presence of a logged in user through the Sametime Connect Web API. For instance, while on a website an end user clicks on a ‘Live Chat’ link, they are logged into a Sametime client on their computer, so we use JavaScript to talk to that Sametime client to get a bit more information. We check with the Sametime client to see if our ‘Live Chat’ support queue (user) is online, if the Sametime client can see that user online, we will start the conversation through their installed Sametime client, if it can’t, we will launch our branded web client so the conversation can still happen.&lt;br /&gt;&lt;br /&gt;After reading through the &lt;a href="http://www14.software.ibm.com/webapp/download/nochargesearch.jsp?q0=&amp;amp;k=ALL&amp;amp;S_TACT=104CBW71&amp;amp;status=Active&amp;amp;b=Lotus&amp;amp;sr=1&amp;amp;q=sametime+sdk&amp;amp;ibm-search=Search" target="_blank"&gt;Sametime SDK/Connect Web API documentation&lt;/a&gt; fairly extensively, I determined that there was no real official or right way of doing the above on the client side with JavaScript, so we’d have to improvise a bit, piecing different parts of the API together to get it to do what we wanted. Let’s look at some code.&lt;br /&gt;&lt;br /&gt;The first thing we needed to do was wire up some &lt;i&gt;Sametime livenames&lt;/i&gt;. According to the documentation, livenames are a UI representation of a contact; they display the online status using a status icon, and bold coloring of the contact’s display name. To do this, we include the getStatus.js JavaScript file; this file exists inside the user’s local Sametime client, and includes a lot of utility functions to deal with livenames/presence.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;script type="text/javascript" src="http://localhost:59449/stwebapi/getStatus.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The Sametime client listens on http://localhost:59449, so if the user currently has Sametime running, these files will exist for us to include in our HTML/JS pages.&lt;br /&gt;&lt;br /&gt;The next step is to add some HTML links for the users which we’ll be checking presence on. For our use case, we didn’t want these links to appear on the page, we just wanted our JavaScript and the getStatus.js file provided to utilize them as needed, so I added a style=”display: none;” tag to the link to hide it. These links need to have the class=”awareness”, as that is how the getStatus.js file will pick them up when the page loads.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;a class="awareness" userId="System%20p" style="display: none;"&amp;gt;Resolving contact, please wait....&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;a class="awareness" userId="zac" style="display: none;"&amp;gt;Resolving contact, please wait....&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;a class="awareness" userId="test user" style="display: none;"&amp;gt;Resolving contact, please wait....&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;span style="font-size: x-small;"&gt;userId=” {username} ”&lt;/span&gt; denotes the user which we are tracking presence of. In the example, we have &lt;i&gt;System p&lt;/i&gt; (one of our test support queues), &lt;i&gt;zac&lt;/i&gt; (my internal username), and &lt;i&gt;test user&lt;/i&gt; (a non-existent user which will show up as offline). &lt;br /&gt;&lt;br /&gt;After saving the file, we can access the HTML page we created. It will appear blank, but if we have Sametime running, we should be able to see some things under the covers in the browser. Using Firebug, we can see that the getStatus.js file has built up an array, called sametime_livenames, where it has stored a bunch of values about the users which we added to the page.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-sQWFBb4M1MA/TwIOkNtGSRI/AAAAAAAAAH4/xGhyUSPjmMk/s1600/livenames_1.png" imageanchor="1" style="margin-right: 1em;"&gt;&lt;img border="0" height="80" src="http://3.bp.blogspot.com/-sQWFBb4M1MA/TwIOkNtGSRI/AAAAAAAAAH4/xGhyUSPjmMk/s640/livenames_1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now that we have these populated objects, let’s see how we can manipulate them to get a presence. In this example, we have three users; two (&lt;i&gt;System p, zac&lt;/i&gt;) of them online, 1 (test user) that is offline. Now that we have sametime_livenames built up, we need to find the user’s presence. This took some serious digging on my part to find the differences, and good ways of doing this. I eventually settled on the fact that if the user is online, a “&lt;span style="font-size: x-small;"&gt;_properties&lt;/span&gt;” variable will be defined, if the user is offline, this variable doesn’t exist. Below is the Firebug output that lead me to this while testing.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-jKa_reEsDEg/TwIO2H6bB8I/AAAAAAAAAIM/eG4HvBMuq6Q/s1600/livenames_2.png" imageanchor="1" style="margin-right: 1em;"&gt;&lt;img border="0" height="88" src="http://2.bp.blogspot.com/-jKa_reEsDEg/TwIO2H6bB8I/AAAAAAAAAIM/eG4HvBMuq6Q/s640/livenames_2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;sametime_livenames[0]._properties&lt;/span&gt; represents the first user we are tracking, System p, which is logged in.&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;sametime_livenames[2]._properties&lt;/span&gt; represents the last user we are tracking, test user, which is not logged in, and returns undefined.&lt;br /&gt;&lt;br /&gt;So now we know what we are looking for to detect presence, but we need this to happen automatically when a user clicks a link, and have some custom logic to determine which chat client to launch, so let’s build our function to do this.&lt;br /&gt;&lt;br /&gt;We will be using object literal notation since we don’t want our JavaScript to interfere with any other libraries the site we post to may be using.&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;// Detect presence of watched Sametime users&lt;br /&gt;Instant.detectPresenceOfUser = function (stid) {&lt;br /&gt;    user = stid.toLowerCase(); // Convert stid variable to lower case for switch statement&lt;br /&gt;&lt;br /&gt;    switch (user) {&lt;br /&gt;        // Check if STID is System p&lt;br /&gt;        case 'system p':&lt;br /&gt;            livename = sametime_livenames[0];&lt;br /&gt;&lt;br /&gt;            // Check if user is logged in&lt;br /&gt;            if (typeof livename._properties === "undefined") {&lt;br /&gt;                return false;&lt;br /&gt;            } else {&lt;br /&gt;                return true;&lt;br /&gt;            }&lt;br /&gt;            break;&lt;br /&gt;        // Check if STID is zac&lt;br /&gt;        case 'zac':&lt;br /&gt;            livename = sametime_livenames[1];&lt;br /&gt;&lt;br /&gt;            // Check if user is logged in&lt;br /&gt;            if (typeof livename._properties === "undefined") {&lt;br /&gt;                return false;&lt;br /&gt;            } else {&lt;br /&gt;                return true;&lt;br /&gt;            }&lt;br /&gt;            break;&lt;br /&gt;        // Check if STID is test user&lt;br /&gt;        case 'test user':&lt;br /&gt;            livename = sametime_livenames[2];&lt;br /&gt;&lt;br /&gt;            // Check if user is logged in&lt;br /&gt;            if (typeof livename._properties === "undefined") {&lt;br /&gt;                return false;&lt;br /&gt;            } else {&lt;br /&gt;                return true;&lt;br /&gt;            }&lt;br /&gt;            break;&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The &lt;span style="font-size: x-small;"&gt;Instant.detectPresenceOfUser&lt;/span&gt; function is where we will return a true/false based on whether or not the user that we pass into the function is online or offline. The user gets passed in (ex. &lt;span style="font-size: x-small;"&gt;Instant.detectPresenceOfUser(“System p”);&lt;/span&gt;), the function converts it all to lower-case, and then passes it through the switch which determines what user we are looking for the presence of. Next, it checks that _properties variable, if it exists, the user is online, and the function returns true, otherwise, it returns false as it can’t see the user.&lt;br /&gt;&lt;br /&gt;This gets bundled into our&lt;span style="font-size: x-small;"&gt; Instant.startChat&lt;/span&gt; function, so that we can have some logic about how we want to start the conversation. Now, if the website can’t see the user when a chat is initialized, it will launch the web client. In our case, the user may not be offline, just the site can’t see them, and the web client will bridge that gap.&lt;br /&gt;&lt;br /&gt;Our full file of JavaScript utilities can be seen below. This includes checking whether the user is running Sametime, the presence detection function, and the function that can start a chat conversation from the web using Sametime.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1551834.js?file=gistfile1.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-8060820563186456545?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2012/01/checking-presence-of-user-or-queue-in.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-sQWFBb4M1MA/TwIOkNtGSRI/AAAAAAAAAH4/xGhyUSPjmMk/s72-c/livenames_1.png' height='72' width='72'/><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-7763771279819641774</guid><pubDate>Thu, 08 Dec 2011 17:12:00 +0000</pubDate><atom:updated>2011-12-08T14:23:44.856-05:00</atom:updated><title>Instant Profile Manager</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Have you ever wished that it was easier to switch between accounts in Microsoft Communicator?&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://2.bp.blogspot.com/-iuA-E2ex-Yw/TuDI13jn2UI/AAAAAAAAAsI/N4X71nvKhIQ/s1600/lync_sucks.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-iuA-E2ex-Yw/TuDI13jn2UI/AAAAAAAAAsI/N4X71nvKhIQ/s320/lync_sucks.PNG" width="211" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px;"&gt;Having to do this every time you switch accounts is less than ideal...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Here at Instant Technologies, we've been doing a lot of work of late around Microsoft Lync 2010. &amp;nbsp;One minor, but irritating issue that we have faced is that there isn't really a good way to switch between accounts on the vanilla Lync Communicator client. &amp;nbsp;For the typical Lync user, that's probably not a big concern, but in our development environment, it becomes irksome rather quickly, particularly since it is not possible to run multiple instances of the client at the same time. &amp;nbsp;Some sort of tool to automate logins, and preserve more than a single set of credentials would be very helpful for in-house testing and development&amp;nbsp;purposes.&lt;br /&gt;&lt;br /&gt;We decided to spend a couple days ginning something up that we could use internally, and add another Microsoft API to our toolbox in the process. &amp;nbsp;It's proven fairly useful for testing and development here, and so we have decided to release it to the community.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://2.bp.blogspot.com/-RaHzQ6dUqKY/TuDI0ylzySI/AAAAAAAAAr4/SWU9j17u71E/s1600/2.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="231" src="http://2.bp.blogspot.com/-RaHzQ6dUqKY/TuDI0ylzySI/AAAAAAAAAr4/SWU9j17u71E/s400/2.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px;"&gt;Instant Profile Manager in action&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Features:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Stores log in credentials for an arbitrary number of Lync accounts.&lt;/li&gt;&lt;li&gt;Passwords can be stored, or, if you prefer, you can be prompted each log in.&lt;/li&gt;&lt;li&gt;Option to manually set the fully-qualified domain name of the server pool, so that you can easily switch between users on different pools.&lt;/li&gt;&lt;li&gt;Log in to a Lync account with just a couple clicks.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Here is a video demonstration of Instant Profile Manager in action.&amp;nbsp;&lt;a href="http://www.youtube.com/user/instanttechnologies?feature=watch"&gt;link&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://1.bp.blogspot.com/-H_LqwaKSp9g/TuDI1cBcYfI/AAAAAAAAAsA/la24Eno3q0M/s1600/3.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="231" src="http://1.bp.blogspot.com/-H_LqwaKSp9g/TuDI1cBcYfI/AAAAAAAAAsA/la24Eno3q0M/s400/3.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px;"&gt;Setting up a profile in Instant Profile Manager&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Requirements:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Microsoft .Net Framework 3.5&lt;/li&gt;&lt;li&gt;Microsoft Lync 2010 Communicator Client&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Download Link:&amp;nbsp;&lt;a href="http://instant-tech.com/ProfileManager/InstantProfileManager-1.0.3.zip"&gt;Instant Profile Manager (ZIP)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you're interested in how we did it, read on...&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Technical:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;As it turns out, it is relatively simple to automate logins to the Lync Client, using the Microsoft Lync 2010 SDK (&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=18898" target="_blank"&gt;SDK&lt;/a&gt;,&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/gg421054.aspx" target="_blank"&gt;Docs&lt;/a&gt;). &amp;nbsp;The heavy lifting is mostly handled by the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.lync.model.lyncclient_di_3_uc_ocs14mreflyncclnt.aspx" target="_blank"&gt;LyncClient class&lt;/a&gt;, which exposes functions to sign in and out, and (although we haven't explored it yet) it would appear contact management and messaging are available as well.&lt;br /&gt;&lt;br /&gt;We save the profile list as XML, to the current user's My Documents folder. &amp;nbsp;It'a a dead-simple implementation, using the .Net XmlSerializer to handle transforming our list of Profile objects into XML for us.&lt;br /&gt;&lt;br /&gt;Since the Communicator client sets a registry key (HK_CurrentUser/Software/IM Providers/Communicator/UpAndRunning), it is a simple matter to check, and then launch the client if it is not running. &amp;nbsp;One caveat, for users with 64-bit systems, or who have installed Lync to a non-default location: You will need to edit&amp;nbsp;&lt;b&gt;ProfileManager.exe.config&lt;/b&gt;&amp;nbsp;and set "&lt;b&gt;PathToClient&lt;/b&gt;" to point at the location your communicator client is installed to.&lt;br /&gt;&lt;br /&gt;We made an effort to also support OCS 2007 R2, as we also have a number of products that we regularly test targeting that platform, but by all indications, the&amp;nbsp;&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=10176" target="_blank"&gt;Microsoft Office Communicator 2007 SDK&lt;/a&gt;&amp;nbsp;doesn't work, or at least not with the 3.5.6907 version we are using. &amp;nbsp;Specifically, the I&lt;a href="http://msdn.microsoft.com/en-us/library/bb787261(v=office.12).aspx"&gt;Messenger.Signin&lt;/a&gt;&amp;nbsp;method doesn't seem to do any more than pop the client window up, regardless of the values passed as parameters. &amp;nbsp;Perhaps this once worked, as there are a number of examples citing it (see&amp;nbsp;&lt;a href="http://www.amazon.com/Programming-Unified-Communications-Microsoft%C2%AE-Office/dp/0735626235"&gt;Programming for Unified Communications&lt;/a&gt;, Chapter 3), but it is now marked deprecated, suggesting that&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/bb787260(v=office.12).aspx"&gt;IMessenger.AutoSignin()&lt;/a&gt;&amp;nbsp;be used instead, which is&amp;nbsp;wholly&amp;nbsp;unsatisfactory for our purposes. &amp;nbsp;While there appear to be some&amp;nbsp;&lt;a href="http://ms-uc.herber.co/?p=105"&gt;hacks&lt;/a&gt;&amp;nbsp;one can do to make a Lync Client connect to an OCS 2007 R2 server, we didn't have much luck, and so had to abandon the idea of supporting 2007.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-7763771279819641774?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/12/instant-profile-manager.html</link><author>noreply@blogger.com (Instant Support)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-iuA-E2ex-Yw/TuDI13jn2UI/AAAAAAAAAsI/N4X71nvKhIQ/s72-c/lync_sucks.PNG' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-3462550894353536873</guid><pubDate>Thu, 06 Oct 2011 22:00:00 +0000</pubDate><atom:updated>2011-10-06T18:09:39.470-04:00</atom:updated><title>Queue Manager - New Charting Options</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In response to several customer requests, we are extending the measurements and reporting area of Queue Manager to support some additional charting options.&amp;nbsp; One new option will be the ability to chart information based on a selectable date range.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;For example, all queue traffic between the dates of&amp;nbsp;October 1, 2011 and&amp;nbsp;October 6, 2011.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Vd4fiAbTsSg/To4jp_aEVTI/AAAAAAAAAHo/nIy-MZ8kcgc/s1600/ByQueueSelectDates.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="87" src="http://1.bp.blogspot.com/-Vd4fiAbTsSg/To4jp_aEVTI/AAAAAAAAAHo/nIy-MZ8kcgc/s320/ByQueueSelectDates.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Will produce the following chart - which may also be exported to Excel:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rv3xtG2UC7w/To4jlm79WGI/AAAAAAAAAHk/X1HezIbfFrI/s1600/ByQueueDateRangeChart.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="235" src="http://4.bp.blogspot.com/-rv3xtG2UC7w/To4jlm79WGI/AAAAAAAAAHk/X1HezIbfFrI/s320/ByQueueDateRangeChart.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In addition to these new charts, the next update for the charting system will provide:&lt;/div&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Dual axis charting (so you can chart 2 data sets - for example queue traffic v. % connected)&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Ability to display all questions submitted before entering a queue (it would be cool to display trending topics)&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Date selectable charts&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;New views to show connected/unconnected requests as well as resolved/unresolved requests&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Charts to display cumulative chat time for experts as well as queues&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-3462550894353536873?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/10/queue-manager-new-charting-options.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Vd4fiAbTsSg/To4jp_aEVTI/AAAAAAAAAHo/nIy-MZ8kcgc/s72-c/ByQueueSelectDates.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-1558130052386319584</guid><pubDate>Fri, 09 Sep 2011 18:25:00 +0000</pubDate><atom:updated>2011-09-09T14:25:34.717-04:00</atom:updated><title>Thank You SaskEnergy for a Great IMtegrity Case Study</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;We'd like to send a special 'Thank You' to SaskEnergy for their help with our recent &lt;a href="http://instant-tech.com/case_studies/Instant_Case_Study_-_SaskEnergy_IMtegrity_Logging_for_Lotus_Sametime.pdf"&gt;IMtegrity case study&lt;/a&gt;&amp;nbsp;- focused on Sametime chat logging as well as Sametime charting and reporting.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;As a company, we know that IMtegrity is an excellent application and is a great fit for customers looking to&amp;nbsp;log and archive Sametime chat conversations.&amp;nbsp; However, it's even more important when a customer uses their own words to express their experience with the product and their requirements.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;So, thank you SaskEnergy for an excellent &lt;a href="http://instant-tech.com/case_studies/Instant_Case_Study_-_SaskEnergy_IMtegrity_Logging_for_Lotus_Sametime.pdf"&gt;case study on Instant IMtegrity&lt;/a&gt;&amp;nbsp;and your&amp;nbsp;selection of IMtegrity&amp;nbsp;as your Sametime chat archiving application.&amp;nbsp; SaskEnergy is also an early adopter of Instant's Charting and Reporting suite for Sametime.&lt;br /&gt;&lt;br /&gt;It was a pleasure working the entire team at SaskEnergy and we appreciate their support and encouragement.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-1558130052386319584?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/09/thank-you-saskenergy-for-great.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-7115503062078720708</guid><pubDate>Thu, 08 Sep 2011 16:28:00 +0000</pubDate><atom:updated>2011-09-08T12:35:09.920-04:00</atom:updated><title>Queue Manager Charting Updates</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Based on some recent customer deployments, we have added some features to our charting plaform and provided several new charts, and one new chart type, to our charting module for Queue Manager.&amp;nbsp; In summary, we have added the ability to:&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Capture and log usage metrics for both queues and experts&lt;/li&gt;&lt;li&gt;New charts to&amp;nbsp;view usage metrics for queues and experts&lt;/li&gt;&lt;li&gt;A New chart type to layer 2 datasets in one chart&lt;/li&gt;&lt;li&gt;Several new charts to display comparisons of various metrics within one chart&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Since many of our customers deploy Queue Manager within a help desk environment, one customer requested mertics to determine&amp;nbsp; how long help desk experts spend in actual chat conversations with customers.&amp;nbsp; We have therefore added several new charts that will provide metrics on chat duration, and usage, for both experts and queues.&lt;br /&gt;&lt;br /&gt;Here is a sample chart that demonstrates the chat duration for a collection of experts.&amp;nbsp; These new drill down enabled charts should provide a more detailed set of metrics on how long experts spend in actual chat conversations.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-pGR3Tf-JX0A/Tmjq0AC3poI/AAAAAAAAAHc/6Fagyu5V6XU/s1600/chat+duration+live+view.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="241" src="http://3.bp.blogspot.com/-pGR3Tf-JX0A/Tmjq0AC3poI/AAAAAAAAAHc/6Fagyu5V6XU/s320/chat+duration+live+view.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In addition to metrics on usage, we are providing the ability to compare 2 metrics within on a single chart.&amp;nbsp; For instance, display the total number of conversations for a queue as well as the percentage of inbound requests that were successfully answered (Total Requests v. % Answered).&amp;nbsp; We have added a new base chart type that will allow us to layer 2 data sets within one chart.&lt;br /&gt;&lt;br /&gt;Here is an example of a chart that displays 2 sets of metrics&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-5UX9VFENhww/TmjssBSbSPI/AAAAAAAAAHg/0iNAIx2vB_M/s1600/2+scale+charts.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="http://4.bp.blogspot.com/-5UX9VFENhww/TmjssBSbSPI/AAAAAAAAAHg/0iNAIx2vB_M/s320/2+scale+charts.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Queue Manager continues to gain great traction within environments that need a click to chat solution leveraging Lotus Sametime.&amp;nbsp; With these new metrics, and chart extensions, we continue to expand our help desk platform for Lotus Sametime environments.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-7115503062078720708?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/09/queue-manager-charting-updates.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-pGR3Tf-JX0A/Tmjq0AC3poI/AAAAAAAAAHc/6Fagyu5V6XU/s72-c/chat+duration+live+view.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-8574034271329593109</guid><pubDate>Fri, 02 Sep 2011 17:22:00 +0000</pubDate><atom:updated>2011-09-02T13:22:25.155-04:00</atom:updated><title>Social Communities and Collisions of Culture</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:DocumentProperties&gt;   &lt;o:Template&gt;Normal.dotm&lt;/o:Template&gt;   &lt;o:Revision&gt;0&lt;/o:Revision&gt;   &lt;o:TotalTime&gt;0&lt;/o:TotalTime&gt;   &lt;o:Pages&gt;1&lt;/o:Pages&gt;   &lt;o:Words&gt;441&lt;/o:Words&gt;   &lt;o:Characters&gt;2517&lt;/o:Characters&gt;   &lt;o:Company&gt;instant&lt;/o:Company&gt;   &lt;o:Lines&gt;20&lt;/o:Lines&gt;   &lt;o:Paragraphs&gt;5&lt;/o:Paragraphs&gt;   &lt;o:CharactersWithSpaces&gt;3091&lt;/o:CharactersWithSpaces&gt;   &lt;o:Version&gt;12.0&lt;/o:Version&gt;  &lt;/o:DocumentProperties&gt;  &lt;o:OfficeDocumentSettings&gt;   &lt;o:AllowPNG/&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:WordDocument&gt;   &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:TrackMoves&gt;false&lt;/w:TrackMoves&gt;   &lt;w:TrackFormatting/&gt;   &lt;w:PunctuationKerning/&gt;   &lt;w:DrawingGridHorizontalSpacing&gt;18 pt&lt;/w:DrawingGridHorizontalSpacing&gt;   &lt;w:DrawingGridVerticalSpacing&gt;18 pt&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:DisplayVerticalDrawingGridEvery&gt;0&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:ValidateAgainstSchemas/&gt;   &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:Compatibility&gt;    &lt;w:BreakWrappedTables/&gt;    &lt;w:DontGrowAutofit/&gt;    &lt;w:DontAutofitConstrainedTables/&gt;    &lt;w:DontVertAlignInTxbx/&gt;   &lt;/w:Compatibility&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:LatentStyles DefLockedState="false" LatentStyleCount="276"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;  &lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */ table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin:0in; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-ascii-font-family:Cambria; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Cambria; 	mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;    &lt;!--StartFragment--&gt;  &lt;br /&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; mso-pagination: none; text-autospace: none;"&gt;&lt;span style="font-family: Times;"&gt;Like the phrase Web 2.0, the term Social is a loaded term with some room for interpretation.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;In a world where everyone is tethered with an IP address at all times, it becomes relatively easy to communicate with anyone, anywhere, at any time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; mso-pagination: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; mso-pagination: none; text-autospace: none;"&gt;&lt;span style="font-family: Times;"&gt;In the old days, like the early 1990s (well, pre 1990), email was pretty standard, but it was typically transmitted over modems that connected to various service providers and then blasted out, and took in, the mail packages for that period. &amp;nbsp;In this semi-connected world, email made sense – and so did a plain old telephone call.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This is probably what we refer to as the early Internet era.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="mso-layout-grid-align: none; mso-pagination: none; text-autospace: none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Times;"&gt;In the next transition, most companies became constantly tethered to a service provider and simultaneously deployed internal networks throughout their organization. &amp;nbsp;Here, the organization had a pretty stable collection of IP addresses, employees had internally assigned IP addresses, and folks could easily connect within, and across, organizations.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This may broadly defined the Internet boom and bubble of the late 90s – extending through web 2.0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Times;"&gt;In this new phase, everyone is tethered with an IP address at all times.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Typically, most people have more than one IP address – one for work, one for a work phone, one for a personal phone, and one for their home.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;My 8&lt;sup&gt;th&lt;/sup&gt; grader has a phone that essentially provides him with an IP address at all times.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;At most times during the day, most folks probably have at least two, or possibly three totally different IP addresses that they can use to communicate.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This tethering, and multi-tethering of IP addresses providing an inherently personal experience is what I consider social.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Times;"&gt;So, Social may be thought of a ubiquitous access to either one, or two, IP connections.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This connection, or collection of connections, provides access to both a personal community and a professional community – active and available at all times.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Applications are then pushed to various end-points (mobile, desktop, tablet, etc) to bridge these various social and personal communities.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Currently, this explosion seems have focused on connecting (or reconnecting) fundamentally personal relationships and personal communities (i.e. friends from high school, colleagues from previous companies, classmates).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Times;"&gt;It is interesting to imagine what happens when we experience a collision of these various communities and networks – read differently, a collision of cultures.&amp;nbsp; What takes place when the personal community collides with the corporate community – both operating in real-time?&amp;nbsp; Does one fracture or absorb the other?&amp;nbsp; What happens when the communities within a corporation are extended, or possible relocated, and placed into a personal or social space?&amp;nbsp; How are new channels created in the corporate community to absorb, mine, and manage the personal networks that are developing in the social landscape?&amp;nbsp; In this ‘post social’ space, these networks of networks collide, transform, are managed, created, and potentially shift from corporate, to social, and back again.&lt;span class="Apple-style-span" style="font-size: 16pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;!--EndFragment--&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-8574034271329593109?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/09/social-communities-and-collisions-of.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-2676356244579288662</guid><pubDate>Wed, 31 Aug 2011 16:34:00 +0000</pubDate><atom:updated>2011-09-08T12:42:31.772-04:00</atom:updated><title>Lotus Notes as a Platform</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Recently, we have been exploring different software platforms as possible alternatives for our future development efforts. &amp;nbsp;As with all platform choices, it's not an easy decision. &amp;nbsp; However, as I have been thinking about this, I've had some soul searching around using Lotus Notes as a platform - which for all practical purposes, we have been using for many years.&lt;br /&gt;&lt;br /&gt;These possible platform choices kinda look like this:&lt;br /&gt;Spring + SQL variant&lt;br /&gt;Spring with Groovy and Grails + SQL variant&lt;br /&gt;Ruby and Rails&lt;br /&gt;Node.js (maybe with CouchDB)&lt;br /&gt;Microsoft .net + SQL Server and IIS&lt;br /&gt;&lt;br /&gt;While I can debate the merits of all of these platforms, the one 'platform' that we are cautiously re-evaluating for future development is Lotus Notes. &amp;nbsp;That is a bit strange, since Lotus Notes is inherently a platform - and a pretty awesome platform at that. &amp;nbsp;Notes includes some great stuff - most of which is just starting to show up in other environments/platforms. &lt;br /&gt;&lt;br /&gt;Let me count the things that I like about Notes (as a platform):&lt;br /&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Fully functional and robust multi level security model - server, database, document, field level&lt;/li&gt;&lt;li&gt;A 'no sql' database without the pain of relational data models&lt;/li&gt;&lt;li&gt;A replicating database - that is &amp;nbsp;really fast - even over slow connections&lt;/li&gt;&lt;li&gt;Internal directory management and hooks to all popular directories&lt;/li&gt;&lt;li&gt;Rich development environment including support for Java, xml, JS, Lotuscript, etc..&lt;/li&gt;&lt;li&gt;Nice deployment model (using templates and replication)&lt;/li&gt;&lt;li&gt;Server based management tools and very rich admin tools&lt;/li&gt;&lt;li&gt;HTTP stack - although the servlet container and other tools are dated&lt;/li&gt;&lt;li&gt;Ability to easily update development, testing, production environments by simply updating database templates and replicating databases&lt;/li&gt;&lt;li&gt;Stability and scalability&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Here are many of the standard issues/platform consider impediments that we experience with Notes - most of which will familiar to folks in the Notes field. &lt;br /&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;We will only be able to sell into existing Lotus Notes shops&lt;/li&gt;&lt;li&gt;No good cloud based runtime model/hosting scenario - or good runtime model that works in 'non Notes' shops&lt;/li&gt;&lt;li&gt;Licensing is confusing and expensive&lt;/li&gt;&lt;li&gt;Young employees/prospective employees don't understand the platform or have any skills&lt;/li&gt;&lt;li&gt;I don't think IBM considers Lotus Notes as a viable platform and they (IBM) would like to see folks move to their industrial strength platform - Wepsphere&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;So, as we consider future platforms, and hear young developers espouse the virtues or Ruby/Rails, Spring, 'no sql' databases that just deal with name/value pairs, etc, I'm always brought back to the idea that many of these platforms are repurposes functionality that has been available in the Notes community for many years. &lt;br /&gt;&lt;br /&gt;So, we will take the relatively safe approach and stick with Java, Spring, Groovy, JQuery, maybe some Grails, and then mount a standard SQL db under the covers. &amp;nbsp;We will run under Apach/Tomcat and use standard libraries such as Log4J, Velocity, etc..&lt;br /&gt;&lt;br /&gt;Peyton&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-2676356244579288662?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/08/lotus-notes-as-platform.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-2939263606800400017</guid><pubDate>Tue, 26 Jul 2011 19:05:00 +0000</pubDate><atom:updated>2011-07-26T15:05:49.349-04:00</atom:updated><title>Configuring Linux for the Notes API</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Recently, while installing/running some test Java applications, we came across the following error:&lt;br /&gt;&lt;blockquote&gt;Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: lsxbe (Not found in java.library.path)&lt;/blockquote&gt;This was on a box running SUSE Linux Enterprise Server 11 SP1, with Lotus Notes installed as well as the Java 1.6 Runtime Environment.&lt;br /&gt;&lt;br /&gt;Running 'echo $PATH' showed that while the Java Runtime Environment was in our system/environment path, none of the Notes directories were. To do this we needed to add to the default path that SUSE provides each user. This is controlled in a few places, but, the safest place to make adjustments is inside the .bash_profile file (located in the users home folder, create this file if it doesn't already exist). &lt;br /&gt;&lt;br /&gt;Here's how it looked after we created and added to it:&lt;br /&gt;&lt;blockquote&gt;PATH=$PATH:/opt/ibm/lotus/notes&lt;br /&gt;PATH=$PATH:/opt/ibm/lotus/notes/jvm/lib/ext&lt;br /&gt;export PATH&lt;/blockquote&gt;After restarting our shell and running 'echo $PATH' we can see the new additions to our users path. Running the application gave us the same error as above, so we hadn't fixed it yet. After investigating more into Lotus Notes, we found some more things that needed to be added to our path.&lt;br /&gt;&lt;br /&gt;Here's .bash_profile with our new changes:&lt;br /&gt;&lt;blockquote&gt;PATH=$PATH:/opt/ibm/lotus/notes&lt;br /&gt;PATH=$PATH:/opt/ibm/lotus/notes/jvm/lib/ext&lt;br /&gt;PATH=$PATH:$NOTES_HOME&lt;br /&gt;export PATH&lt;br /&gt;LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/ibm/lotus/notes&lt;br /&gt;export LD_LIBRARY_PATH&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ObdE06_0hwQ/Ti8OL5D67iI/AAAAAAAAAHY/mMgfW9k9UjY/s1600/suse-error-notes-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://2.bp.blogspot.com/-ObdE06_0hwQ/Ti8OL5D67iI/AAAAAAAAAHY/mMgfW9k9UjY/s320/suse-error-notes-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;After restarting our shell, the test application ran fine, and the exception above was gone. This was all done as the root user, to push this file to other users profiles, use this command from your home folder:&lt;br /&gt;&lt;blockquote&gt;cp ~/.bash_profile /home/{username of the user}&lt;/blockquote&gt;Just replace after /home/ with the user name of the user to push the changes to.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-2939263606800400017?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/07/configuring-linux-for-notes-api.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ObdE06_0hwQ/Ti8OL5D67iI/AAAAAAAAAHY/mMgfW9k9UjY/s72-c/suse-error-notes-1.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-7654561956687717365</guid><pubDate>Tue, 01 Mar 2011 21:13:00 +0000</pubDate><atom:updated>2011-03-01T16:13:51.865-05:00</atom:updated><title>Automatically Create Active Directory Accounts for Microsoft OCS</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In order to load test one of our Microsoft OCS applications, we needed to quickly create hundreds of test accounts for one of our OCS servers.&amp;nbsp; First, we created the accounts in AD, then we simply highlighted the new accounts and provisioned the accounts for our OCS server.&lt;br /&gt;&lt;br /&gt;Here is a small vbs script to create the sample users:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Set oRoot = GetObject(&lt;/span&gt;&lt;a href="ldap://rootDSE/"&gt;&lt;span style="font-size: x-small;"&gt;LDAP://rootDSE&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: x-small;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Set oDomain = GetObject("LDAP://" &amp;amp; oRoot.Get("defaultNamingContext"))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Set oOU=oDomain.Create("organizationalUnit", "ou=OCS Test Users")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;oOU.Put "Description", "OCS Test Users"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;oOU.SetInfo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;For i = 1 to 200&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set oUser = oOU.Create("User", "cn=OCSTest User" &amp;amp; i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oUser.Put "sAMAccountName", "OCSTestUser" &amp;amp; i&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oUser.Put "Description", "OCS Test User" &amp;amp; i&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oUser.SetInfo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oUser.SetPassword "password"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oUser.AccountDisabled = False&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oUser.SetInfo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Wscript.Echo "Success, Check Active Directory Users and Computers - Remember F5"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is a screen shot of the test users:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-sofFnxjlPrs/TW1gpSZdWqI/AAAAAAAAAHU/8xCxhJ7ROX8/s1600/users.png" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" l6="true" src="https://lh4.googleusercontent.com/-sofFnxjlPrs/TW1gpSZdWqI/AAAAAAAAAHU/8xCxhJ7ROX8/s320/users.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After selecting all of the users in the explorer, we used the action to automatically provision the users for OCS - and selected the 'use SAM account' option&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-7654561956687717365?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/03/automatically-create-active-directory.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-sofFnxjlPrs/TW1gpSZdWqI/AAAAAAAAAHU/8xCxhJ7ROX8/s72-c/users.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-5856940846753795083</guid><pubDate>Fri, 18 Feb 2011 21:29:00 +0000</pubDate><atom:updated>2011-02-18T16:29:49.095-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Lotus Sametime</category><category domain='http://www.blogger.com/atom/ns#'>IMtegrity</category><title>Sametime Chat Logging - Customer Feedback on IMtegrity - Excellent</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;At Instant Technologies, we have many award winning Sametime products.&amp;nbsp; However, it's wonderful to speak with customers running our Sametime chat logging application, &lt;a href="http://www.instant-tech.com/imtegrity/lotus-sametime-logging.html"&gt;Instant IMtegrity&lt;/a&gt;, and hear the great feedback and real world usage scenarios.&amp;nbsp; This week, in a great conversation with a recent customer, I learned that IMtegrity is being used in a an environment where the application is logging more than 1,000,000 Sametime IM conversations per month.&amp;nbsp;&amp;nbsp; We have plenty of deployments that handle 10,000 conversations a day, but hear the words 'more than one million' indicated a huge leap.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;In addition to the pure volume of the Sametime IM conversations moving through the system, the nicest feedback involved the compliments related to the installation and support.&amp;nbsp; In the words of our customer, the installation took&amp;nbsp;'less than 30 minutes' and&amp;nbsp;didn't involve any 'additional services, complex configurations, or technical&amp;nbsp;support'.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;In the words of our customer, &lt;a href="http://www.instant-tech.com/imtegrity/sametime-archives.html"&gt;'IMtegrity&lt;/a&gt; is rock solid, highly scalable, and does exactly what it needs to do'.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;One million conversations per month, zero outages, and a very happy customer.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;This has been a great week at Instant&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-5856940846753795083?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/02/sametime-chat-logging-customer-feedback.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-8243555865035601412</guid><pubDate>Mon, 14 Feb 2011 18:02:00 +0000</pubDate><atom:updated>2011-02-14T13:02:53.181-05:00</atom:updated><title>Instant IMtegrity 4.13 Released</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In response to a customer issue, Instant has released a point upgrade of IMtegrity, our Lotus Sametime chat logging and compliance application.&amp;nbsp; Instant IMtegrity version 4.13 addresses an issue encountered importing image files.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;The point release is available to existing Instant Imtegrity customers who are current on support and maintenance.&amp;nbsp; Information is available on the &lt;a href="http://www.instant-tech.com/IMtegrity_Archives.cfm"&gt;IMtegrity product page&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;What's new in Instant IMtegrity 4.13:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Fixed error "Subscript out of range (#9)" when importing chat log files containing images.&lt;br /&gt;&lt;br /&gt;  Fixed another instance of error "Font size must be between 1 and 250, or STYLE_NO_CHANGE&lt;br /&gt;&lt;br /&gt;(#4364)" when importing files with HTML formatting.&lt;br /&gt;&lt;br /&gt;What's new in Instant IMtegrity 4.12:&lt;br /&gt;&lt;br /&gt;  Fixed error "Object variable not set (#91)" when merging transferred files starting with an&lt;br /&gt;&lt;br /&gt;!exclamation mark in their file name.&lt;br /&gt;&lt;br /&gt;  Fixed error "Font size must be between 1 and 250&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-8243555865035601412?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2011/02/instant-imtegrity-413-released.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-4481057806010330490</guid><pubDate>Thu, 04 Nov 2010 19:35:00 +0000</pubDate><atom:updated>2010-11-04T15:35:34.758-04:00</atom:updated><title>New Manager Functionality In Queue Manager V4</title><description>Queue Manager V4 is receiving excellent customer adoption and deployments.&amp;nbsp; In response to recent customer feedback, we are pleased to announce that we have extended the way that queue managers can add, remove, and adjust queue staffing levels.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Our new 'Manager' module offers queue managers a real time dashboard that displays queue activity (both historical and real time) as well as current staffing levels.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Managers can see how many people are waiting for an expert, how many experts are available, and which experts are provisioned to help within the queue.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L99nbk8GnE0/TNMKquYZH9I/AAAAAAAAAHE/2UJCdkAEGoM/s1600/Manager+panel+with+hardware+queue+and+one+person+connected.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" px="true" src="http://4.bp.blogspot.com/_L99nbk8GnE0/TNMKquYZH9I/AAAAAAAAAHE/2UJCdkAEGoM/s320/Manager+panel+with+hardware+queue+and+one+person+connected.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;This updated functionality is supported in the V1B67 build of the database (October 28, 2010).&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-4481057806010330490?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2010/11/new-manager-functionality-in-queue.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_L99nbk8GnE0/TNMKquYZH9I/AAAAAAAAAHE/2UJCdkAEGoM/s72-c/Manager+panel+with+hardware+queue+and+one+person+connected.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-6011071514406428625</guid><pubDate>Fri, 01 Oct 2010 18:39:00 +0000</pubDate><atom:updated>2010-11-08T12:21:10.179-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>ocs</category><category domain='http://www.blogger.com/atom/ns#'>.net</category><category domain='http://www.blogger.com/atom/ns#'>Microsoft OCS</category><category domain='http://www.blogger.com/atom/ns#'>ocs  archive</category><title>What's new in Instant Archive Viewer build 3.0.49 - 3.0.55 for Microsoft OCS</title><description>&lt;b&gt;Instant Archive Viewer for Microsoft OCS&lt;/b&gt;&lt;br /&gt;Instant's Archive Viewer for Microsoft OCS is a very useful tool to search, retrieve, and report on conversations and content within the Microsoft OCS system. Visit our website for more detail:&lt;br /&gt;&lt;a href="http://www.instant-tech.com/Archive_Viewer_OCS.cfm"&gt;http://www.instant-tech.com/Archive_Viewer_OCS.cfm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What's New in Build 3.0.49 for Instant Archive Viewer for Microsoft OCS?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Instant Archive Viewer for OCS Version 3.0.49 is now available and comes with a gamut of helpful enancements and fixes. Here are five new items that have been introduced.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Charting and Reporting&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Instant Charting and Reporting for Microsoft OCS will create animated, interactive charts quickly and easily in order to measure traffic in your Microsoft OCS system. Display high level information organized by year or drilled down to the hour; Quickly filter usage by users and export them to Excel; View browser based reports from LCSLOG, LCSCDR, QOEMETRICS, ACDDYN and RTCCONFIG OCS database tables hosted from SQL server. For more information visit our Instant Charting and reporting for Microsoft OCS Web page at http://www.instant-tech.com/Charts.cfm&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.flickr.com/photos/instant-tech/sets/72157624471098721/"&gt;&lt;img border="0" height="243" px="true" src="http://4.bp.blogspot.com/_L99nbk8GnE0/TKYoBPA6srI/AAAAAAAAAGs/5ARfzgwXFOs/s400/totalinboundcallstopersonhourly.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://demo.instant-tech.com/demo/reports/index.aspx?module=ChartingReporting"&gt;View Live Live Demo&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download%20instant%20charting%20&amp;amp;%20reporting%20for%20ocs%20datasheet/"&gt;Download Instant Charting &amp;amp; Reporting for OCS Datasheet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Improved Active directory browsing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We've made some small changes to the Active Directory picker. The Active Directory picker is available on the Extended Search and Discovery tab of the Admin page for browsing users and groups to access the Extended Search and Search and Discovery Page. It is also available for searching users/groups in active directory to search key words in conversations.We now allow administrators to choose how you would like to find the users in Active Directory via a drop down menu. The drop down menu has three choices: First name, Last Name or login name/samacount name.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L99nbk8GnE0/TKYoer2GUHI/AAAAAAAAAGw/sDXS2y-AVzM/s1600/Active+Directory+Picker+for+Instant+Archive+Viewer+for+Microsoft+OCS.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="163" px="true" src="http://2.bp.blogspot.com/_L99nbk8GnE0/TKYoer2GUHI/AAAAAAAAAGw/sDXS2y-AVzM/s400/Active+Directory+Picker+for+Instant+Archive+Viewer+for+Microsoft+OCS.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_L99nbk8GnE0/TKYoq8YIniI/AAAAAAAAAG0/XkX4mmqlrjA/s1600/Samacount+searching+archives+in+lcslog+for+Microsoft+ocs.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" px="true" src="http://2.bp.blogspot.com/_L99nbk8GnE0/TKYoq8YIniI/AAAAAAAAAG0/XkX4mmqlrjA/s400/Samacount+searching+archives+in+lcslog+for+Microsoft+ocs.jpg" width="333" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;3. Time zone differences between server and local machine&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This small updated feature allows the Instant Charting for Microsoft OCS module to compensate for the local time zone of the local machine viewing Charts when there is a difference in time zone between the Server and local machine. It is a setting located in the Basic Settings tab of the Administrator options page.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_L99nbk8GnE0/TKYo5UtQVVI/AAAAAAAAAG4/2mzHLxx7WiE/s1600/charting+and+reporting+time+zone.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="80" px="true" src="http://1.bp.blogspot.com/_L99nbk8GnE0/TKYo5UtQVVI/AAAAAAAAAG4/2mzHLxx7WiE/s400/charting+and+reporting+time+zone.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;4. Enhanced debugging&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Debug will now capture all information including read-write access and connection information. This is very helpful for configuration of Instant Archive Viewer for Microsoft OCS.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_L99nbk8GnE0/TKYqihI8poI/AAAAAAAAAHA/_ehcqf6bhz0/s1600/Microsoft+OCS+archiving+debugging.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="310" px="true" src="http://4.bp.blogspot.com/_L99nbk8GnE0/TKYqihI8poI/AAAAAAAAAHA/_ehcqf6bhz0/s400/Microsoft+OCS+archiving+debugging.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. New look and easy navigation&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_L99nbk8GnE0/TKYpx63S4CI/AAAAAAAAAG8/L2vbdKaW6u4/s1600/Instant+Archive+Viewer+for+Microsoft+OCS+debug.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" px="true" src="http://3.bp.blogspot.com/_L99nbk8GnE0/TKYpx63S4CI/AAAAAAAAAG8/L2vbdKaW6u4/s400/Instant+Archive+Viewer+for+Microsoft+OCS+debug.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-6011071514406428625?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2010/10/whats-new-in-instant-archive-viewer.html</link><author>noreply@blogger.com (Instant)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_L99nbk8GnE0/TKYoBPA6srI/AAAAAAAAAGs/5ARfzgwXFOs/s72-c/totalinboundcallstopersonhourly.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-925975026607810258.post-2857559157850107428</guid><pubDate>Wed, 15 Sep 2010 17:25:00 +0000</pubDate><atom:updated>2010-09-15T13:25:01.491-04:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Lotus Sametime</category><category domain='http://www.blogger.com/atom/ns#'>IMtegrity</category><title>Instant Charing and Reporting for Lotus Sametime</title><description>We are proud to announce that we have started shipping our Instant Charting and Reporting application for Lotus Sametime.&amp;nbsp; The applications combines our experience developing a great charting and reporting system for our Queue Manager, as well as our experience developing a robust and scalable archiving application for Lotus Sametime.&lt;br /&gt;&lt;br /&gt;The charting and reporting application provides 3 main components:&lt;br /&gt;1 - Charting information and statistics captured by our IMtegrity database and archiving application&lt;br /&gt;2 - Charting information provided by the Sametime ST Logs. This is mainly for historical purposes and displays a variety of useful Sametime statistics against a historical period&lt;br /&gt;3 - Live usage metrics and data: This information is provided using the Sametime Statistics Servlet and displayed in real time using some excellent charting tools.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://domino.instant-tech.com/itmeasure.nsf/landingmain"&gt;live demonstration&lt;/a&gt; of the application is available on our web site.&amp;nbsp; Please direct any questions, or inquiries, to &lt;a href="mailto:sales@instant-tech.com"&gt;sales@instant-tech.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A broader overview of the application, with screen shots, data sheets, and other information is available at:&lt;br /&gt;&lt;a href="http://www.instant-tech.com/lotus_sametime_charts.cfm"&gt;http://www.instant-tech.com/lotus_sametime_charts.cfm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/925975026607810258-2857559157850107428?l=blog.instant-tech.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.instant-tech.com/2010/09/instant-charing-and-reporting-for-lotus.html</link><author>noreply@blogger.com (Instant)</author><thr:total>0</thr:total></item></channel></rss>
