Thursday 24 May 2012

HCI, computer vision and AI conferences

Conferences related to my research:

AI

  • IJCAI: '13 Beijing
  • ICPR: '14 Stockholm, deadline: 12/20/2013
HCI
  • CHI: '13 Paris, deadline: 9/19/2013

Ruby vs Python: threads

Prior to Ruby 1.9, threads were implemented at green threads - threads were switched within the interpreter. In Ruby 1.9, threading is now performed by the operating system. This means that threads can now take advantage of multiple processors. However, there's major catch. Many Ruby extension libraries are not thread safe, so Ruby compromises: it uses native operating system threads but operates only a single thread at a time. You'll never see two threads in the same application running Ruby code truly concurrently. (You will, however, see threads busy doing, say I/O while another threads executes Ruby code. That's part of the point.)

This is also similar in Python. Due to the Global Interpreter Lock, in CPython only one thread can execute Python code at once (even though certain performance-oriented libraries might overcome this limitation). To make better use of the computational resources of multi-core machines, it is advised to use multiprocessing. However, threading is still an appropriate model if you want to run multiple I/O-bound tasks simultaneously.

Reference: Programming Ruby 1.9: The Pragmatic Programmers' Guide (Facets of Ruby)

Tuesday 22 May 2012

Runtime exceptions

In Java, RuntimeException is not checked. Runtime exceptions represent problems that are result of a programming problem, and as such, the API client code cannot reasonably be expected to recover from them or to handle them in anyway. Such problem include arithmetic exceptions, such as dividing by zero; pointer exceptions, such as trying to access an object through a null reference; and illegal arguments exceptions. It is common practice to throw RuntimeException when the user calls a method incorrectly. For example, a method can check if one of its arguments is incorrectly null. If it is, the method might throw a NullPointerException, which is an unchecked exception. For other kinds of incorrect arguments, the method can throw IllegalArgumentException.

The bottom line guideline is: if a client can reasonably be expected to recover from an exception, make it a checked exception. If a client cannot do anything to recover from the exception, make it an unchecked exception.

Any Exception (checked) that can be thrown by a method is part of the method's public programming interface. Those who call a method must know about the exceptions that a method can throw so that they can decide what to do about them.

Reference: http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

Monday 21 May 2012

Visual Studio Shortcuts

Close document tab: Ctrl + F4
Navigate through highlighted references: Ctrl + Shift + up arrow or down arrow
Go to method bar: Ctrl + F2, then Tab
Open a file quickly: Ctrl + ;, type filename

Visual Studio productivity power tools for VS 2012

Wednesday 16 May 2012

Paper review

Paper: Real-time hand tracking and gesture recognition for human-computer interaction
Authors: Cristina Manresa et al.
Year: 2000

  • I came across this paper when I searched for previous work on using convexity defects for hand tracking. They didn't use convexity defects for tracking fingertips though. Instead, they use it for gesture recognition. As convexity defects can characterize the state of the hand, I'm also thinking of using the convexity defects as one of the features for gesture recognition.
  • Hand tracking
    • Finding correspondence between between the detected blobs and the tracked hands is an important and necessary step.
    • What they did is a bit similar to Kalman filter, but less rigorous and formalized.
  • The gesture recognition method they describe is very application specific, and involves a lot of threshold values. 
    • I think what PrimeSense does in their NITE library for gesture recognition is also similar to this.
    • Basically you define some gestures you want to recognize and observe their characteristics.
    • Extract and compute features that describe those characteristics and compare with threshold values.
    • This is more accurate probably we are actually incorporating more human intelligence in it.
  • Although it may not scale to other gestures, in this restricted domain, it can perform well.



Monday 14 May 2012

Camera Clinic - Travel Photography by Randall Warniers


  • Carry a camera with you wherever you go
  • Four factors for successful photography: Camera + Light + Decisive Moment + Point of View
  • Four fundamental rules
    • Know our equipement thoroughly
    • Notice the light
    • Be prepared to photograph quickly
  • Natural light in the early morning and in the late afternoon when the sun is low in the sky, is best for people photography.
    • People photography in the middle of a sunny day is bad.
    • A bright sunny day is good for architecture.
    • Hazy light, overcast day, cloud over the sun is best for people photography.

Thursday 3 May 2012

Enable Spell Check in TeXlipse


  • Find the dictionary for the language of your choice. You can use Aspell to create the dictionary:
    aspell --encoding=UTF-8 --lang=<lang> dump master > <lang>.dict
    
    where lang is the language code. Some common language codes are:
    • English: en
    • German: de
    • French: fr
    • Spanish: es
    • Finnish: fi
  • Set the Latex Project Properties under project properties
    • Set the two-letter language code
Sources:

Wednesday 2 May 2012

Common routines after reinstalling Ubuntu

The following routines may be necessary after reinstalling Ubuntu to reconfigure your environment.

  1. Activate additional drivers in "Additional Drivers" for your GPU.
  2. Display
    • For AMD's (formerly ATI) graphics card, you can use AMD Catalyst Control Center (Administrative) to configure for multi-display. However, when I used it today, it didn't work. Using command line works though.
      $ sudo aticonfig --initial # This reinitializes your xorg.conf.
      # Then when you reboot, you should be able to configure multi-display with
      $ sudo gksu amdcccle
      
    • Use ARandR do configure display
  3. Install Chrome dev release.
  4. Install Sun Java 6 and OpenJDK Java SDK
    sudo apt-add-repository ppa:flexiondotorg/java
    sudo apt-get update
    sudo apt-get install sun-java6-jre sun-java6-plugin
    
    sudo apt-get install openjdk-6-jdk
  5. Install git.
  6. Install OpenAFS.
  7. Install Latex.
    $ sudo apt-get install texlive-full
    Update Texlipse's preference in Eclipse by giving the bin directory of Tex distribution: /usr/bin
  8. Install ssh server.
    $sudo apt-get install openssh-server