Wednesday, November 27, 2013

MAC OS 10.8.5: color your ls command

The default ls command is from BSD, and the default ls command on most Linux systems is from GNU.
The BSD ls can not be very colorful in that we can not color files according to their extension names (its related environment variable is LSCOLORS), while the GNU ls is better in this sense by setting the environment variable LS_COLORS.

I am working on MAC OS 10.8.5, and originally I followed this post to configure my ls, but failed. Finally, I have done some changes to the post to make it work for me. My steps are as follows:
(1) install MAC ports which is a similar tool as apt-get on Ubuntu
(2) install the GNU tools using port:
sudo port install coreutils +with_default_names
which was supposed to override the original BSD ls command with the GNU ls command in the post, but it does not work for me. The installed GNU ls command appears with the name gls.
(3) add the following lines to my ~/.bash_profile:
LS_COLORS='rs=0:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:*.sh=01;32:*.log=01;33'; 
export LS_COLORS 
export LS_OPTIONS='--color=auto'
# override the original BSD ls
alias ls='gls $LS_OPTIONS -hF'
alias ll='gls $LS_OPTIONS -lhF'

Tuesday, November 26, 2013

MAC OS: set default gcc

this way is using MACports, which you need to install in advance.

/opt/local/bin/port install gcc_select
port select --list gcc
sudo port select --set gcc gcc43 

Thursday, May 23, 2013

an easy way for machine translation evaluation using multiple metrics

Kenneth Heafield's scripts that make it easy to score machine translation output using NIST's BLEU and NIST, TER, and METEOR.

Pre-requirements: bash, ruby, java
CAUTION: you have to set "export LC_ALL=" to let it work ("export LC_ALL=C" will make it crash)

Setup: run the ./setup.sh script which will automatically download necessary parts from Internet

Running:
./score.rb --print --print-header --ref tokenized-reference.txt --hyp-detok tokenized-system-outputs.txt


Friday, January 18, 2013

tools for Java memory usage analysis

1. jconsole

When you run a java program, you can use jconsole to monitor the program's general memory usage and the status of each thread of the program. Please note that this tool can not say how much memory is used by each object in your Java program. jconsole needs to show a graphic interface, so if you want to run it on Linux, please make sure you have xwindow support.
For instance, you can use the following command to start monitoring your running Java program with process id 15120:
jconsole 15120


2. jmap

This tool can be used to dump the heap of Java virtual machine when the machine is running a Java program. The dumped heap file can be analyzed by other tools, e.g., Eclipse memory analyzer .
For instance, you can use the following command to dump the heap of the running Java program with process ID 909, and the dumped file is named as heap-file.bin
jmap -dump:format=b,file=heap-file.bin 909

3. Eclipse memory analyzer

This tools is quite useful to look for memory leak or why a program takes so large memory, because it can find out the most memory-consuming objects in your Java program. This tool needs a heap dump to start its analysis. The heap dump can be obtained using jmap. Alternatively, when you run your Java program, you can also add -XX:+HeapDumpOnOutOfMemoryError as a parameter to the Java virtual machine. As a result, when the Java program runs out of memory, the Java virtual machine will automatically dump its heap in the current working directory (the dump file is named like java_pid15040.hprof).
Unfortunately, the Eclipse memory analyzer needs a lot of memory to analyze the heap dump file (e.g. usually it needs about 7GB memory to analyze a 2GB heap dump file). Thus, you usually need to change the heap size of your Eclipse (not the heap size of your Java program running in Eclipse) in your eclipse.ini file (which is usually located in the same folder as your eclipse binary executable file).

Wednesday, December 19, 2012

How to display Chinese in Graphviz

Graphviz is a very handy tool for drawing plots and firgures.

However, it is not straight forward to display Chinese characters in the generated plots.

One example is as follows using DOT:
node [shape=box,style=dashed,height=0.3,fontname="C:\Windows\Fonts\NSimSun Regular.ttf",fontsize=12]; "你好"; "whr you are ∀";

where you can write UTF-8 encoded Chinese characters in the source file, and alternatively you can write it in xml-like unicode numbers like  "∀" (i.e. ∀). More importantly, you need to specify the Chinese font file such that Graphviz can really display the Chinese characters, since by default Graphviz can hardly find the correct font to use for Chinese characters.


Tuesday, December 18, 2012

How to use JDB on Linux

JDB is quite a powerful debugging tool for Java programs, especially for multi-threading Java programs.

JDB can be found in the JDK package.

You can also learn how to use JDB by reading the manual of JDB (using command "man jdb").

Here I only show the useful parts that I found:
(1) you can run your Java program as usual with the additional option "-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
(2) now you can start JDB using command "jdb -attach 8000"
(3) in JDB, you can first use "suspend" to suspend your JAVA program, and then use "threads" to see the thread list of the JAVA program; if you want to see what code is each thread running, you can use "where 0x22" (0x22 is the thread id which is from the thread list); after finishing debugging, you can use "resume" to resume your JAVA program.
(4) if you want to exit JDB and let your JAVA program go on running, you can simply press Control-C


Friday, November 2, 2012

How to set the priority order of jar files in Eclipse

If you have multiple jar files in your Eclipse project, then you would have some problems, if some jar files have classes with the same name. In this case, the priority order of the jar files should matter, because you always want to import the right class.

How to set the priority order of your jar files in Eclipse?

Right click your project, and then click the Property menu.
In the "Java Build Path" menu on the left of the popup Window.
Then you can see the "Order and Export" tab which shows the order of the jar files and source codes.