Lync 2013 or Adobe Connect

At our shop, many of our working group meetings routinely (over 70%) have remote participants that attend for all or part of their meeting. Unfortunately the platforms and connections these remote participants have access to varies widely. We’ve had participants from every continent except Antarctica, with access to any number of 3g/4g, high speed research network, DSL and other home access using all i* and win* devices available. Due to the ever changing remote endpoints this has ruled out your more traditional high end room system environments.

Our first generation room setup was based on a cloud-managed Adobe Connect reseller or Skype depending on how the meeting would be run. Skype for point to point/managed meetings and Adobe Connect for multi-person or if flexibility for leave/join of remote participants was required.

A few things that worked surprisingly well in this setup:

  • Clients everywhere. The native Adobe Connect and Skype clients provided connectivity for almost every (not linux) platform under the sun. With native ios and Android clients we’ve seen an increase in tablet guests.
  • All conferences are backed by an 8xx dial-number in case of audio or phone-only connections. For an 8 hour meeting, total cost was only ~$10 to keep a line open.
  • Little to no low level driver/OS troubleshooting required. Devices either worked or they didn’t and the client performed the same regardless of what was attached.
  • Ease of use. Remote guests require around 2-5m of brief hand-holding to become familiar with the client, and connection steps are straight forward.
  • Flash echo-cancellation works pretty well.

A few things that we found that would have been nicer to have:

  • No higher quality video, or customizable video layouts. Brady-bunch square or nothing.
  • No room-system integration. We’ve had to use the same commodity hardware in our rooms that end users did. Single camera, etc.
  • Large latency impacts. Attempts to do video across large distances introduced noticeable lag on the part of the remote participants.
  • Flash echo cancellation is not enabled by default.

Conferencing Rev 2

We’ve recently upgraded our on-site Lync installation to 2013 in hopes that it will offer a viable alternative to Adobe Connect for remote meetings. The ability of Lync 2010 to support multi-party meetings with external parties was unworkable almost to the point of being a liability. (Windows-only meeting clients, half working OS-X, silverlight…). Even assuming all that worked, the lack of a true meeting screen limited communications. (no multi-camera, etc)

Now 2013 appears to be very promising  and looks like it may correct many of the shortcomings of its previous version.

We’ve started preliminary testing and deployment and have found a few nice additions.

  • Integration with real room systems. Purchasing an out of the box conference room is now an option whereas in the past it was not.
  • HD video.
  • Superior echo cancellation. Even in 2010, the built-in aec appeared to be superior to the native flash client.
  • Web client appears to work all major Win and OS-X platforms and browsers.
  • Multi-monitor native clients when you separate the video window.
  • Direct Power Point connection for Office 2013.

Now a few drawbacks:

  • Client unpredictability (both native and web). We’ve seen instances where the client will freeze for periods of time, peg the CPU and behave differently based on attached hardware. Running through this matrix with remote participants promises to be a nightmare.
  • Tablets. The tablet client isn’t a meeting-only client, but rather designed to be hooked up to an existing Lync account.
  • Skype Integration. Audio only (I know video is forthcoming) and the requirement that remote parties link their Skype account to an outlook.com or other MS makes this unworkable. You try explaining the subtle sign-in difference to a senior scientist who can’t talk to their non-MS-enabled colleague.

So Lync or Adobe Connect?

Will we use it in the long run? I hope so. In the meantime, a few areas of testing remain including finding and testing on low-resource clients and quantifying high latency behaviour. Our biggest area of concern is the observed unpredictability of the client. Given the wide variety of hardware and OS’s we encounter if the clients continue to behave unpredictably, the maintenance and troubleshooting overhead will make Lync not worth the effort. With Adobe Connect as long as flash was updated unpredictability generally was not a problem and the client behaved quite reasonably.

Sympa and Active Directory

Some basic steps on running sympa on Ubuntu 12.04 and using Active Directories Global Directory to auto-populate groups.

Ubuntu Notes 

  • apt-get install sympa will give you a ‘mostly’ working version
  •  Chown -R /var/lib/sympa sympa
  • The suid wrapper does not work on 12.04. You will need to create a sudo wrapper instead:
  • set use_fast_cgi 1 in /etc/sympa/wwsympa.conf
  • /usr/lib/cgi-bin/sympa/wwsympa_sudo_wrapper.fcgi
  • #!/usr/bin/perl
    
    exec '/usr/bin/sudo', '-E', '-u', 'sympa', '/usr/lib/cgi-bin/sympa/wwsympa.fcgi';
  • In apache/conf.d/sympa, change:
    ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa_sudo_wrapper.pl
  • add the following line to your sudoers file:
    www-data ALL = (sympa) SETENV: NOPASSWD: /usr/lib/cgi-bin/sympa/wwsympa.fcgi
  • References:

LDAP/AD Bound Lists

  • If you only have one domain, then you can just use the following and point at one of your domain controllers.
  • If you want to use forest-wide groups, you have two options for accessing those groups.
  • This will work this either security or distribution groups, however will NOT include nested membership.
    • In the ldap config for the group, point at the dc the group resides in. CHange suffix, host and user as appropriate, set use_ssl to yes, drop the :3268
    • Make the group universal and use the global directory (route I chose)
  • LDAP Configuration
    include_ldap_query
    attrs mail
    filter memberof=Some Group,OU=...,OU=...,DC=research,DC=domain,DC=org
    ssl_ciphers ALL
    name any_name
    host dc1.mydomain.org:3268
    use_ssl no
    passwd your_password
    timeout 30
    suffix DC=domain,DC=org
    user   CN=Read Account,OU=...,DC=domain,DC=org
    ssl_version sslv2
    scope sub
    select first
    ssl_version tls
  • References

Fun with DC’s gis data, part 1

It looks like DC has kindly released quite a bit of gis data for public consumption. One of the more interesting sets is the regularly updated Owner Polygon dataset available from data.dc.gov. This is a shapefile containing current property records for everything in the District. Unfortunately, it’s not available kml for easy display in google’s tools. However the 70MB esri shapefile is available. Using Open Layers, PostGIS, and and GeoServer, we can get start displaying everything, but what if we want to use google maps and do things the hard way?

To solve that, there’s a few simple steps to allow polygon querying, selection, and display on google maps.

  1. Import data into PostGIS
  2. Create GIS servlet
  3. Draw the data on google maps
  4. Query PostGIS for google’s lat/long
  5. Select Properties from the map

We’re going to work on step one today, import your data into PostGIS.

Prepare PostGIS

I’m running Ubuntu 11.04, PostgreSQL 8.4 with postGIS 1.5.1 installed from the default software repo.

  1. PostGIS 1.5 manual
  2. nad 83, maryland projection
psql (8.4.8)
Type "help" for help.

postgres=# create database propertymap;
CREATE DATABASE
postgres=# \q
~$ createlang plpgsql propertymap;
~$ cd /usr/share/postgresql/8.4/contrib/postgis-1.5/
postgis-1.5$ psql -f postgis.sql propertymap
postgis-1.5$ psql -f ../postgis_comments.sql propertymap;
postgis-1.5$ psql -f spatial_ref_sys.sql propertymap;

Convert Shapefile

Create a ton of insert statements using shp2pgsql:

poly$ shp2pgsql -s 926985 OwnerPly.shp ownertable > inserts.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]

If we look at the .prj file included, we see that the projection for the data is NAD_1983_StatePlane_Maryland_FIPS_1900. We need to add the projection from spatialreference.org in to our database

propertymap=# INSERT into spatial_ref_sys (srid, auth_name, .......66666666],UNIT["Meter",1.0]]');
INSERT 0 1
propertymap=# \i inserts.sql

Run your first query

propertymap=# select ownername,square,lot,premiseadd from ownertable where premiseadd like '%1600 PENNSYLVANIA%';
        ownername         | square | lot  |       premiseadd        
--------------------------+--------+------+-------------------------
 UNITED STATES OF AMERICA | 0187   | 0800 | 1600 PENNSYLVANIA AV NW
 UNITED STATES OF AMERICA | 0187   | 0802 | 1600 PENNSYLVANIA AV NW
 UNITED STATES OF AMERICA | 0187   | 0801 | 1600 PENNSYLVANIA AV NW

First, a little background on what we asked for. DC property records are based on square, suffix, and lot. Square generally refers to a city block and goes all the way back to the original city planning in the old part of the city. Lot is a lot within a square/suffix. For the most part, you can ignore suffix as it’s rarely used.

Next time, create a simple servlet to expose all of this.

Isolating Big Blue Button Video

This is a quick how to on manually connecting to a BBB video stream. Before we begin, here’s a very, very quick background.

  • Video streams are grouped under a conference-room specific url that has for format rtmp://host/video/roomID
  • Each streaming component under BBB is available as a separate stream (ie, video, desktop, sip/audio, etc)
  • BBB uses red5 under the hood to manage these streams
  • Grab flowplayer here and the flowplayer rtmp client here
  1. Connect to your room and start your webcam.
  2. Tail /usr/share/red5/log/bigbluebutton.log and uou should see the following log lines:
    2011-07-11 18:14:54,871 [NioProcessor-1] DEBUG o.b.c.s.p.ParticipantsEventRecorder - A participant's status has changed 141 streamName 640x480141
    2011-07-11 18:14:54,919 [NioProcessor-1] DEBUG o.b.c.s.p.ParticipantsService - Setting participant status ec0449a0-b5d1-4ca5-bfdf-d118d8bc2299 141 hasStream true
    • ec0449a0-b5d1-4ca5-bfdf-d118d8bc2299 or similar is the room id
    • 640×480141 is the stream id you need
  3. Download and place flowplayer-…swf, flowplayer.rtmp-…swf, and flowplayer-…min.js into a directory.
  4. Create a web page as follows:
  5. 
           
           Minimal Flowplayer setup
    
    
    
  6. Load up your web page and you should see the streaming video.