How to publish presence in UCMA without using XML

Michael Green published a great article about how to publish presence using UCMA, but it involves using XML. If you hate XML as much as I do, this article is for you.

Note that the code presented here is a snippet and therefore won’t compile/work by itself.

Publishing states

The process for publishing your state is the same for any of the four states (user state, machine state, phone state, calendar state). Let’s look at how to publish the user state:

var userState = new UserState(availability, activity);

_endpoint.LocalOwnerPresence.BeginPublishPresence(
    new PresenceCategory[] { userState },
    PublishPresenceCompleted,
    null);

Wow, that was tough! The other three states have similar classes you can use: MachineState, PhoneState, and CalendarState, all of which are located in the Microsoft.Rtc.Internal.Collaboration namespace. PublishPresenceCompleted is as about as dumb as you might expect:

_endpoint.LocalOwnerPresence.EndPublishPresence(result);

What if you don’t have activity (anything you want it to be)? Don’t pass anything in, and Communicator will show the default activity for your availability.

Publishing device capabilities

Publishing the device capabilities is slightly more involved:

var capability = new DeviceCapability(true, true, true);

var capabilities = new DeviceCapabilities(_endpoint.InnerEndpoint.Uri);

// Set capabilities; i.e., capabilities.Text = capability

var device = new Device(
    _endpoint.InnerEndpoint.Id, _
    new DeviceCapabilities[] { capabilities });

Like the *State classes, Device derives from PresenceCategory. You can view the XML that will be generated by calling PresenceCategory.GetCategoryDataXml() method.

Get all running processes on a remote machine

You know that you can get all the running processes on the local machine with:

Process.GetProcesses();</code

With very little modification, you can also get all the running processes on a remote machine (that you have access to, of course):

Processes.GetProcesses("machine name or IP address here"); 

Deleting non-empty folders from Mac Terminal

If you try to delete a non-empty folder from Terminal on your Mac with

rmdir folder-name

you will get the following error:

rmdir: folder-name: Directory not empty. 

The command you want to use is:

rm -r folder-name

How to rename directories through Terminal

I keep having to rename files and directories in locations outside the purview of my user account. Moving directories into, say, the WebServer folder is easy enough: Mac will ask you for your admin credentials. But, I have not found an easy (read: non-Terminal) way of renaming directories or files once you moved them. So, here is how to do it in the Terminal:

sudo mv -f [original name of the directory] [new name of the directory]

SqlDataReader.GetSqlType() of column

I ran into an interesting problem today that required me to identify the SqlType of any given column, so that I could do special processing where appropriate. It normally wouldn't be such a big deal, because you can call GetType(i) to learn whether it's a string, boolean, DateTime, etc. However, there are some types that need to be differentiated further: for example, money and numbers in SQL might both map to the same .NET type.

Continue reading "SqlDataReader.GetSqlType() of column"

Lambda Expressions

Lambda expressions are a new construct in C# 3.0 that provide a more concise way of writing anonymous methods (which were introduced in C# 2.0). Lambda expressions are especially useful in LINQ statements but can be used any place anonymous methods are.

Continue reading "Lambda Expressions"

Cisco VPN Error 51: Unable to communicate with the VPN subsystem

This error plagues me around every three weeks when I open up my Cisco VPN client on my Mac. The fix for this is straight-forward:

  1. Quit CiscoVPN,
  2. Open Terminal (Applications > Utilities > Terminal), and
  3. Type in the following command:

sudo /System/Library/StartupItems/CiscoVPN/CiscoVPN restart

Type in your password when it asks you for it, and Terminal should restart CiscoVPN, at which point the error should go away.

Free Template: Coxswain

Regular readership knows that I take long absences from this blog. Hopefully, today marks the end of it -- until the next time.

Anyway, I had some free time so I thought I would create a template.

Download and enjoy!

3 of 19 pages « First  <  1 2 3 4 5 >  Last »

On the Side