Thursday 16 February 2012

Funny story about my name

Hu is He
By Jeff A. Benner

Fred approached John. "Hello John, I heard you know Hebrew"? "Yes I do." replied John.

Fred: I was wondering what the Hebrew for he is?
John: Hu.
Fred: Not any one in particular, I just wanted to know what is he?
John: Hee is she.
Fred: Who?
John: No, Hu is he.
Fred: I thought you said he is she?
John: Yes, that is correct.
Fred: What is correct?
John: Hee is she.
Fred: I have no idea what you said. Who is she?
John: No, hu is he.
Fred: I dont want to know who he is, now I want to know what she is in Hebrew?
John: Hee.
Fred: He Who?
John: Yes that is correct. But, hee is she.
Fred: Who is she?
John: No, Hu is he.
Fred: Why do you keep asking me "who is he"?
John: I thought you were asking me what he is in Hebrew?
Fred: Me?
John: That is who.
Fred: Who is me?
John: No, Hu is he, mee is who.
Fred: I don't want to know who you are, I want to know who is he?
John: That is correct.
Fred: But, I have no idea what I am saying.
John: But you say it so well.
Fred: Who me?
John: Why are you asking me who he is?
Fred: No, I am asking you what is he.
John: Hee is she.
Fred: Who is she?
John: No, hu is he.
Fred: I am very lost. Me is who? Who is he? He is She?
John: Very good, you said that very well.
Fred: What did I say?
John: Mee is who, hu is he and hee is she.
Fred: Well if you must know, you are crazy, I don't know who he is and if she is a he, I sure don't want to know her?

Monday 13 February 2012

Impact Factors for Robotics Journals


This article is specifically for folks in academia... When writing a journal paper, targeting the right venue is an important consideration.  There are lots of factors that go into this decision: audience, prestige, historical topics of interest, turn-around time, open access, etc. Discussing all the considerations in detail is too taxing and is probably not actionable (it's too dependent on your research and goals). But I thought I'd share... I'm tracking the Institute for Scientific Information (ISI) impact factors for various robotics journals.  In very general terms, the impact factors can give you a rough approximation of journal quality and help you target your publications.  You can find a historical plot of robotics journals' impact factors (along with the latest values) below.  I'll try to keep these up to date.

Update 11/3/2011: Jan Peters from TU Darmstadt's Intelligent and Autonomous Systems group also maintains a historical account of robotics (and machine learning) journals' impact factors, complete with discussion and analysis.  He also has a page that discusses AI / Machine Learning / Robotics conference quality (a pseudo-ranking).

Current Data (2010 end-of-year results, valid through 2011):


Impact Factors for Robotics Journals


Impact Factor  

Journal Name

4.095International Journal of Robotics Research (IJRR)
3.593Journal of Field Robotics (JFR)
3.063IEEE Transactions on Robotics (TRO)
2.187IEEE Robotics and Automation Magazine (RAM)
2.033Autonomous Robots (AURO)
1.845Bioinspiration and Biomimetics
1.313Robotics and Autonomous Systems
1.254Robotics and Computer-Integrated Manufacturing
1.032Journal of Bionics Engineering
0.939Robotica
0.879International Journal of Humanoid Robotics
0.757Journal of Intelligent and Robotic Systems
0.655Industrial Robot: An International Journal
0.653Advanced Robotics
0.326International Journal of Advanced Robotic Systems
0.206International Journal of Robotics and Automation



Discussion:


You'll notice that some journals are not represented in this list; these are the ones listed in ISI's "robotics" category and do not include diverse fields related to robotics (eg. machine learning or computer vision).  Sometimes these other domain-specific journals may be a better fit for you work, so consider them too!
As of right now (November 2011, so 2010 end-of-year rankings), the top robotics journals by impact factor are IJRR (4.095), JFR (3.593), TRO (3.063), RAM (2.187) and AURO (2.033).  This isn't too surprising.  Drastically over-generalizing: IJRR is the dominant "theory" venue; JFR for long-term (real-world) deployments; TRO for  applications, systems, and sensing; RAM for a more general-purpose audience; and AURO for autonomous systems. Many of the journals also have "special issues" that focus on a particular topic and have blinding-fast turn-around times.  These are a great option when they're available!
Still... the robotics journals pale in comparison to  the "top" scientific publications: Science (31.377) and Nature (36.104).  Every now and again, we'll see a really nice robotics paper crack into one of these venues -- usually with a more biological bent.
But on the plus-side, it looks like robotics is generally trending up. Plus, I think a lot of momentum isn't accurately reflected in this graph.  There has been quite an uptick in publications at conferences (eg. ICRA, IROS, RSS, HRI, etc).  Much like computer science, robotics conference papers are highly-regarded on their own -- plus you get to travel!   More seriously, now that IROS / ICRA are ~15 simultaneous tracks... I don't understand why some of the major journals (particularly the IEEE ones) haven't teamed up to create a "journal" track at the conferences.  This would give researchers in more traditional fields (eg. EE, ME, BME) the best of both worlds: a journal paper to appease their home schools and a chance to present to self-selecting peers (networking and travel!).  Get on that IEEE folks!  ;-)

Anyway, this topic is particularly salient for me right now -- I'm currently writing journal paper(s) using my dissertation material.  I hope you find the data useful.  Oh yeah, I wrote a glorious python script to (semi-)automate the impact factor parsing from HTML, so this should be pretty easy to update in the future.  If this post gets out of date, just let me know!

Also here is another good website to look up the impact factor for robotic related journals.

Sunday 12 February 2012

bzr: ERROR: This tree contains left-over files from a failed operation.

When I use Bazaar and Dropbox for version control system, I encounter a problem like "bzr: ERROR: This tree contains left-over files from a failed operation." when I retry to update the repository after network is down or similar thing stopping update.

The prompted solution is to delete files in the limbo folder which is under $PathofYourCodes\.bzr\checkout\. Currently the error still stays there even if you remove the whole limbo folder. In order to fix this issue, you should remove limbo and pending_deletion at the same time as they are sort of like associated folders.

Wednesday 8 February 2012

Window Script Host - Microsoft Jscript run time error - permission denied

I guess someone will encounter a permission issue when a Window Script tries to change your computer. Generally it is a good property which can secure your system, however, if you really want to run some scripts on your system which is not supported by Windows secure centre, it will annoy you a lot.

A easy way to avoid this issue, you should change the setting for your UAC(User Account Control). With respect to UAC and Jscript, you can have a look on the following links.
http://en.wikipedia.org/wiki/JScript
http://en.wikipedia.org/wiki/User_Account_Control

In order to turn off the UAC in windows 7, you can search the key word, like UAC on the start menu, and scroll the bar to the proper position which corresponding to your purpose.


Friday 3 February 2012

Remove linux redundant kernel header files

On Ubuntu, every time when you update kernel modules,  the previous kernel modules will be still kept in system. There is an annoy list(I reckon at least :p) which contains several different kernel systems when boot via GRUB. In order to make system clean and concise, we can remove those outdated files.

(http://ubuntugenius.wordpress.com/2011/01/08/ubuntu-cleanup-how-to-remove-all-unused-linux-kernel-headers-images-and-modules/)


Unless you have a totally fresh install of Ubuntu, you have probably noticed that each time you boot up, the GRUB boot menu lists a bunch of previous Linux kernels which you can boot into. While this can occasionally come in handy – like if you can’t boot into the new kernel after an upgrade – those previous kernels, images and modules are usually just wasting space.
While you can go into Synaptic, search for all the bits and pieces of previous kernels, and mark them for removal, here is a much easier method. In a terminal, simply paste the following command, and it will remove all but the current kernel (if you’ve upgraded your system, or had an update with a new kernel, please reboot your machine before running this):
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge
You will see some info about what is going on:
The following packages will be REMOVED:
linux-headers-2.6.35-22* linux-headers-2.6.35-22-generic*
linux-headers-2.6.35-23* linux-headers-2.6.35-23-generic*
linux-image-2.6.32-25-generic* linux-image-2.6.35-22-generic*
linux-image-2.6.35-23-generic*
0 upgraded, 0 newly installed, 7 to remove and 13 not upgraded.
After this operation, 586MB disk space will be freed.
(Reading database … 261863 files and directories currently installed.)
Removing linux-headers-2.6.35-22-generic …
Removing linux-headers-2.6.35-22 …
Removing linux-headers-2.6.35-23-generic …
Removing linux-headers-2.6.35-23 …
Removing linux-image-2.6.32-25-generic …
It will then go on to generate a new GRUB menu, and when you reboot, you’ll see only the current kernel is listed.

How to compile linux kernal modules and overwrite the current one

This is one the essential and important task. Many time we upgrade our kernel and some precompiled drivers won't work with Linux. Especially if you have weird hardware; then vendor may send you driver code aka C files to compile. Or even you can write your own Linux kernel driver. Compiling kernel driver is easy. Kernel 2.6.xx makes it even much more easier. Following steps are required to compile driver as module:
1) You need running kernel source code; if you don't have a source code download it fromkernel.org. Untar kernel source code (tar ball) in /usr/src using tar command:
$ tar -zxvf kernel* -C /usr/src
To be frank kernel headers are more than sufficient to compile kernel modules / drivers. See how to install kernel headers under Debian / Ubuntu Linux or RHEL / CentOS / Fedora Linux.
2) Next go to your kernel module source code directory and simply create the Makefile file as follows (assuming your kernel module name is foo):
$ vi Makefile
3) Add following text to it:
obj-m = foo.o
KVERSION = $(shell uname -r)
all:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
4) Compile module using make command (module build can be done by any user) :
$ make
It will finally creates the foo.ko module in current directory. You can see all actual compile command stored in .foo* files in same directory.
5) Once module compiled successfully, load it using insmod or modprobe command. You need to be root user or privileged user to run insmod:
# insmod foo.ko

Example: hello.c module

1) hello.c C source code. Copy following code and save to hello.c
$ mkdir demo; cd demo
$ vi hello.c
2)Add following c source code to it:
#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */
#include <linux/init.h>         /* Needed for the macros */
static int __init hello_start(void)
{
printk(KERN_INFO "Loading hello module...\n");
printk(KERN_INFO "Hello world\n");
return 0;
}
static void __exit hello_end(void)
{
printk(KERN_INFO "Goodbye Mr.\n");
}
module_init(hello_start);
module_exit(hello_end);
This is an example modified from original source for demonstration purpose.
3) Save the file. Create new Makefile as follows:
$ vi Makefile
Append following make commands:
obj-m = hello.o
KVERSION = $(shell uname -r)
all:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
4) Save and close the file.
5) Compile hello.c module:
$ make
6) Become a root user (use su or sudo) and load the module:
$ su -
# insmod hello.ko
Note you can see message on screen if you are logged in as root under run level 3.
7) Verify that module loaded:
# lsmod | less
8) See message in /var/log/message file:
# tail -f /var/log/message
9) Unload the module:
# rmmod hello
10) Load module when Linux system comes up. File /etc/modules use to load kernel boot time. This file should contain the names of kernel modules that are to be loaded at boot time, one per line. First copy your module to /lib/modules/$(uname -r)/kernel/drivers. Following are suggested steps:
(a) Create directory for hello module:
# mkdir -p /lib/modules/$(uname -r)/kernel/drivers/hello
(b) Copy module:
# cp hello.ko /lib/modules/$(uname -r)/kernel/drivers/hello/
(c) Edit /etc/modules file under Debian Linux:
# vi /etc/modules
(d) Add following line to it:
hello
(e) Reboot to see changes. Use lsmod or dmesg command to verify module loaded or not.
# cat /proc/modules
OR
# lsmod | less

File structure in the Linux operation system

Compare with file system on window, linux has its own hierarchy, which has top level directory /root and following all other subdirectories.

Here I just summarize the basic linux file hierarchy (cite from http://www.ubuntugeek.com/linux-or-ubuntu-directory-structure.html)



  • /bin - binary applications (most of your executable files)
  • /boot - files required to boot (such as the kernel, etc)
  • /dev - your devices (everything from drives to displays)
  • /etc - just about every configuration file for your system
  • /etc/profile.d - contains scripts that are run by /etc/profile upon login.
  • /etc/rc.d - contains a number of shell scripts that are run on bootup at different run levels. There is also typically an rc.inet1 script to set up networking (in Slackwar), an rc.modules script to load modular device drivers, and an rc.local script that can be edited to run commands desired by the administrator, along the lines of autoexec.bat in DOS.


  • /etc/rc.d/init.d - contains most of the initialization scripts themselves on an rpm-based system.
  • /etc/rc.d/rc*.d - where “*” is a number corresponding to the default run level. Contains files for services to be started and stopped at that run level. On rpm-based systems, these files are symbolic links to the initialization scripts themselves, which are in /etc/rc.d/init.d.
  • /etc/skel - directory containing several example or skeleton initialization shells. Often contains subdirectories and files used to populate a new user’s home directory.
  • /etc/X11 - configuration files for the X Window system
  • /home - locally stored user files and folders
  • /lib - system libraries (similar to Program Files)
  • /lost+found - lost and found for lost files
  • /media - mounted (or loaded) devices such as cdroms, digital cameras, etc.
  • /mnt - mounted file systems
  • /opt - location for “optionally” installed programs
  • /proc - dynamic directory including information about and listing of processes
  • /root - “home” folder for the root user
  • /sbin - system-only binaries (see /bin)
  • /sys - contains information about the system
  • /tmp - temporary files
  • /usr - applications mainly for regular users
  • /var - mainly logs, databases, etc.
  • /usr/local/bin - the place to put your own programs. They will not be overwritten with upgrades.
  • /usr/share/doc - documentation.