Turning off Sametime Pop-ups

I use Lotus Sametime a lot at work, but it has an irritating feature that by default brings all conversations to the front whenever something new is added to them. Nevertheless, this can be turned off. You just need to know how to navigate the labyrinthine preferences menu:

This screenshot is from Sametime 8.5.1 on Linux, but other platforms are probably similar.

Disabling Synaptics Touchpad with Ubuntu 10.04

I recently installed Ubuntu 10.04 on my Thinkpad T61 and set about disabling the touchpad, which I always find irritating. There seemed to be lots of guides to this, including this one, but none of them seemed to work for me. Eventually I figured some fairly simple steps which did work:

  • Install two packages if they aren’t already installed (gpointing-device-settings is the more modern version of gsynaptics and will uninstall it if it’s installed):
    sudo aptitude install xserver-xorg-input-synaptics gpointing-device-settings
    
  • Start gpointing-device-settings from the command line and select “Touchpad off”, as shown here:

  • Exit the tool and reboot.

Kick-Ass

I haven’t written a film review in some time, but having just come back from seeing Kick-Ass, with it still fresh in my mind, here goes…

Kick-Ass is definitely a comic book movie. It’s been portrayed in some circles as the anti-comic book movie, and that’s certainly the impression I had going in: the first ten minutes or so leave you in no doubt that the protagonist isn’t a professional, well, hero. But at the end - without spoiling it - you’re left in no doubt that it is a comic book and not reality. As evidence, the characterisation (for example, of Kick-Ass’s girlfriend, Katie) is pretty shallow. The violence is graphic and for me a little unpleasant at times (I can’t stand watching any kind of torture, and the whooping of the idiotic frat boys at the back of the cinema made it more unpleasant). Nevertheless, the film is definitely amusing - and I didn’t find the overtones of violence or language coming from Hit-Girl as unsettling as many have (if you don’t know, she’s 11, says “cunt” once and “fuck” plenty of times, and kills many people in a variety of gruesome ways).

Kick-Ass isn’t for the faint of heart, but there was a point in the film, where Kick-Ass is being drawn into the web, where I was totally engrossed and could have been watching Batman or Spiderman - except Kick-Ass is glossier, more colourful, and cooler. Despite the cringe-making violence, this is a cool film, albeit one that walks very very close to the moral tightrope (although, again, not entirely just because of Hit Girl). I like it. But many wouldn’t.

Logitech Presenter R800 with USB HID in Windows XP SP3

I recently acquired a Logitech Presenter R800. It’s a beautiful device - not particularly cheap, but very slick and easy-to-use. Unfortunately, Windows XP (Service Pack 3) on my system refused to recognise it - the device was listed as USB Receiver in Windows Device Manager, but Windows kept claiming it couldn’t find the driver. It is presented to the system as a standard USB HID device, so there is no Logitech-specific driver: it uses the standard Windows HID Driver. It worked perfectly out of the box on Ubuntu 9.10.

After 3-4 hours of research, I found the answer. Running a differencing tool between the C:\Windows\Inf folder on a colleague’s PC and mine showed that mine was missing the usb.inf and usb.PNF files from that folder. It wasn’t clear why they were missing, but having copied them over from his machine, the driver installation then worked perfectly. So that’s worth trying if you encounter a similar problem with this product (or indeed any USB HID device).

Highrise Backup

I no longer use Highrise, but when I did, I used this Python script to back up my contacts. Hope it’s helpful to someone.

Updated 2009-12-14: Added license

#!/usr/bin/python
#
# Copyright (c) 2009, Andrew Ferrier All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# * The name of Andrew Ferrier may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

import httplib2
import getopt
import sys

try:
    opts, args = getopt.getopt(sys.argv[1:], "a:d:", ["user-auth-token=", "domain="])
except getopt.GetoptError, err:
    print str(err)
    sys.exit(2)
userauthtoken = None
domain = None
for o, a in opts:
    if o in ("-a", "--user-auth-token"):
        userauthtoken = a
    elif o in ("-d", "--domain"):
        domain = a
    else:
        assert False, "unhandled option"

if userauthtoken == None or domain == None:
    print "You must specify both the user-auth-token and the domain"
    sys.exit(2)

url = "http://" + domain + ".highrisehq.com/people.xml"

http = httplib2.Http()

http.add_credentials(userauthtoken, "x")

offset = 0
content = ""

while True:
    response, newContent = http.request(url + "?n=" + str(offset))

    if response.status != 200:
        sys.exit(response.status)

    numContacts = newContent.count("")
    offset += numContacts
    content += newContent

    if numContacts < 500:
        break

print content

subscribe via RSS