2011年10月13日星期四

gdb调试的常用命令

gdb
file ./srl #调用可执行程序
set args -inputfile test.txt #设置参数
break SRL/srl.cpp:1105 #在srl.cpp的1105行设置断点
run #运行程序
print iNumSent #查看变量值

next (n)单步执行, 如有函数调用, 不会进入
step (s) 单步执行, 如有函数调用, 会进入
continue (c) 恢复继续执行, 程序结束或至个断点为止

disable 使所有的断点无效
disable 1使断点1无效
enable同样的道理

condition SRL/srl.cpp:1105 iNumSent==5, 设置条件断点
condition SRL/srl.cpp:1105, 取消条件断点

2011年10月3日星期一

AB血型的特质(本人觉得还是蛮贴切的)

转自http://www.douban.com/group/topic/7276992/

AB血型.此血型属极端血型,仅占全世界总人口的5%。此血型的人,待人真诚、嫉恶如仇、不攀附权贵、比较理性、多才多艺、有不屈不挠的精神,绝大多人都能成就大业。如周恩来总理、比尔盖茨、李嘉诚、爱因斯坦等等均是此血型。

我对AB血型的人的总结:

排斥复杂的人际关系,不管与谁都会保持一定距离,喜欢孤独。

追求合理性,对不公正和不公平的事情极为反感,守时,也比较守信用。

无论对自己还是对人类社会都有很强的批判精神,不盲从传统,从自己独特的视角看问题,几乎不会去追随任何流行和时尚的东西,甚至很反感那些肤浅的东西。

很难与大的群体融为一体,对喊口号,大合唱和团体操这些东西很排斥,对生日之歌尤其感到肉麻,觉得那些东西很不自然,很扭曲。不喜欢和很多人在一起吃饭、聊天,因为人越多,就越是低级趣味。

爱好和平,非常不喜欢与人争斗,遇到很棘手的问题往往会逃之夭夭,这一点容易被别人指责为没有责任感或鸵鸟政策,但AB型的更加信奉三十六计走为上。

具有一个敏感而丰富的心灵,对音乐、艺术和宗教有很强的解读能力。对人间世事也有很敏锐的洞察力,常常有一些惊世骇俗的言语,被人们认为太偏激。

认同人类精神和灵性方面的优越感,所以对那些作曲家、艺术家、哲学家和科学家比较崇拜。AB血型的人非常不认可权力和财富方面的优越感,觉得那些 富豪和政客没有什么了不起,甚至很鄙视那些人,认为那些人只是欲望方面的成功,那是一种很低层次上的成功,这种成功还不如不成功。

这种血型的人大都是比较灵性的,对物质的东西比较淡薄。

讨厌矫揉造作的东西,不太遵守那些虚伪的道德和礼仪,在穿着方面有着自己的喜好和判断而显得另类,总的来说人比较叛逆。

做事缺乏持久力,因为AB型的人意欲相对薄弱,人也容易疲劳。

对自己的内在素质有很强的优越感,这种优越感来自与他人的比较,AB型的人基本都是自我感觉良好,对别人的评价其实就是对整个人类的评价不高,甚至相当尖刻。但他们不会有让别人当面难堪的言行,因为这种血型的人比较没有攻击性。

由于不擅长与人争斗,在残酷的生存竞争中,AB型的人明显缺乏斗志而居于下风,他们倾向于道家那种清静无为的思想。

2011年7月1日星期五

对.gz文件内容进行排序

gunzip < run1.out.gz | LC_ALL=C sort > run1.out.sorted

gunzip < run1.out.gz | LC_ALL=C sort -T $_TMP_DIR > run1.out.sorted

zlib的使用

zlib 下载
http://www.zlib.net/

也可以通过命令安装
sudo apt-get install zlib1g-dev zlib1g-dbg zlib1g

读取gz压缩文件与读取普通 文件的方法基本一致..更详细的使用方法可参考zlib自带的example.c

在eclipse下, 编译通过但是链接出错, 解决的方法是:
In Project Properties -> CGG++ linker ->libraries, add just "z".

class CGZFileReader
{
public:
CGZFileReader( const char* pszFName );
~CGZFileReader( );

public:
bool fnReadNextSentence( char *pszLine, int* piLength );

private:
gzFile m_fIn;
};

/*
* gzfilereader.cpp
*
* Created on: 1 Jul 2011
*/


/* user-defined headers */
#include "gzfilereader.h"

/* standard headers */
#include
#include

CGZFileReader::CGZFileReader( const char* pszFName )
{
m_fIn = gzopen( pszFName, "r" );
if ( m_fIn == NULL )
{
printf( "ERROR in CGZFileReader::CGZFileReader: FILE %s not found!\n", pszFName );
return;
}
}

CGZFileReader::~CGZFileReader( )
{
if ( m_fIn != NULL )
gzclose( m_fIn );
}

bool CGZFileReader::fnReadNextSentence( char *pszLine, int* piLength )
{
if ( gzeof( m_fIn ) == true )
return false;

int iLen;

pszLine[ 0 ] = '\0';

gzgets( m_fIn, pszLine, 10001 );
iLen = strlen( pszLine );
while ( iLen > 0 && pszLine[ iLen - 1 ] > 0 && pszLine[ iLen -1 ] < 33 )
{
pszLine[ iLen - 1 ] = '\0';
iLen--;
}

if ( piLength != NULL )
(*piLength) = iLen;

return true;
}


class CGZFileWriter
{
public:
CGZFileWriter( const char *pszFName, const char *pszModel );
~CGZFileWriter( );

public:
void fnWrite( const char *pszLine );
void fnWriteLine( const char *pszLine );

private:
gzFile m_fOut;
};

/*
* gzfilewriter.cpp
*
* Created on: 1 Jul 2011
*/

/* user-defined headers */
#include "gzfilewriter.h"

/* standard headers */
#include

CGZFileWriter::CGZFileWriter( const char *pszFName, const char *pszModel )
{
m_fOut = gzopen( pszFName, pszModel );

if ( m_fOut == NULL )
{
printf( "ERROR in CGZFileWriter::CGZFileWriter: cann't write FILE %s!\n", pszFName );
return;
}
}

CGZFileWriter::~CGZFileWriter( )
{
if ( m_fOut != NULL )
gzclose( m_fOut );
}

void CGZFileWriter::fnWrite( const char *pszLine )
{
gzprintf( m_fOut, "%s", pszLine );
}

void CGZFileWriter::fnWriteLine( const char *pszLine )
{
gzprintf( m_fOut, "%s\n", pszLine );
}


2011年6月28日星期二

CSet模板类

template < typename itemType >
int fnCompare( itemType *pitem1, itemType *pitem2 )
{
return pitem1->fnCompare( pitem2 );
};

template
class CSet
{
public:
int m_iMaxNumItems;
int m_iNumIncrementalItems;
int m_iNumItems;
itemType **m_paItems;

public:
CSet( int iMaxNumItems, int iNumIncrementalItems )
{
m_iMaxNumItems = iMaxNumItems;
m_iNumIncrementalItems = iNumIncrementalItems;
m_iNumItems = 0;

int I;

m_paItems = new itemType * [ m_iMaxNumItems ];
for( I = 0; I < m_iMaxNumItems; I ++ )
{
m_paItems[ I ] = NULL;
}
}
~CSet( )
{
int I;

for( I = 0; I < m_iNumItems; I ++ )
{
delete m_paItems[ I ];
m_paItems[ I ] = NULL;
}
delete [] m_paItems;
}

void fnClear( void )
{
int I;
for( I = 0; I < m_iNumItems; I ++ ){
delete m_paItems[ I ];
m_paItems[ I ] = NULL;
}
m_iNumItems = 0;
}

bool fnInsert( itemType *pItem )
{
if( m_iNumItems == 0
|| ( m_iNumItems < m_iMaxNumItems && fnCompare( m_paItems[ m_iNumItems - 1 ], pItem ) ) )
{
m_paItems[ m_iNumItems ] = pItem;

m_iNumItems++;
return true;
}

int I;

//insert the item
int iB, iE, iM;
float fC = -1;
iB = 0;
iE = m_iNumItems - 1;
iM = (iB + iE ) / 2;
do{
if( iE < iB )
break;

iM = (iB + iE ) / 2;
fC = fnCompare( m_paItems[ iM ], pItem );
if( fC == 0 )
{
iE = iM;
break;
}
if( fC < 0 )
iE = iM - 1;
if( fC > 0 )
iB = iM + 1;
}while( true );


if( fC > 0 )
iM ++;//iM is the position need to insert

if( m_iMaxNumItems == m_iNumItems )
{ //when the table is full
if( m_iNumIncrementalItems <= 0 )
{ //no incremental items are allowed
if ( iM >= m_iNumItems )
return false;//
delete m_paItems[ m_iNumItems - 1 ];
for( I = m_iNumItems - 2; I >= iM; I-- )
{
m_paItems[ I + 1 ] = m_paItems[ I ];
}
m_paItems[ I + 1 ] = pItem;
return true;
}
else
{ //incremental items are allowed

//increase the table size
itemType **paNewItems = new itemType * [ m_iMaxNumItems + m_iNumIncrementalItems ];
for( I = 0; I < m_iMaxNumItems; I ++ )
{
paNewItems[ I ] = m_paItems[ I ];
}

for( I = m_iMaxNumItems; I < m_iMaxNumItems + m_iNumIncrementalItems; I ++ )
paNewItems[ I ] = NULL;

delete [] m_paItems;
m_paItems = paNewItems;

m_iMaxNumItems += m_iNumIncrementalItems;
}
}

for( I = m_iNumItems - 1; I >= iM; I -- )
{
m_paItems[ I + 1 ] = m_paItems[ I ];
}
m_paItems[ I + 1 ] = pItem;

m_iNumItems ++;
return true;
}

bool fnDelete( int iBeginItemID, int iNumDeleteItems )
{
int I;

if( ( iBeginItemID < 0 )
|| ( iBeginItemID >= m_iNumItems )
|| ( iNumDeleteItems < 0 ) )
return false;
if( ( iBeginItemID + iNumDeleteItems ) > m_iNumItems )
iNumDeleteItems = m_iNumItems - iBeginItemID;

for( I = 0; I < iNumDeleteItems; I ++ ){
delete m_paItems[ iBeginItemID + I ];
m_paItems[ iBeginItemID + I ] = NULL;
}
for( I = iBeginItemID; I < m_iNumItems - iNumDeleteItems; I ++ ){
m_paItems[ I ] = m_paItems[ I + iNumDeleteItems ];
m_paItems[ I + iNumDeleteItems ] = NULL;
}
m_iNumItems -= iNumDeleteItems;
return true;
}
};

实例化CSet的类itemType需要实现fnCompare( itemType pitem2 )方法.

2011年6月26日星期日

内存泄漏检测

Linux下C++代码内存泄漏检测:

valgrind --leak-check=full ./parser

之前需要安装valgrind (sudo apt-get install valgrind)

mac上安装valgrind可参考
http://valgrind.org/downloads/repository.html

The Current (3.0 and later) Repository

To check out code from the current repository (anonymous, read-only SVN access), do this:
  svn co svn://svn.valgrind.org/valgrind/trunk valgrind
To build the checked out code, follow the instructions in the README file that the checkout should give you. Alternatively, the following should work:
  cd valgrind
  ./autogen.sh
  ./configure --prefix=...
  make
  make install
To do the checkout, you'll need a Subversion client, version 1.1.0 or later. Versions prior to 1.1.0 do not properly handle the symbolic links in our tree.
To do the build, you'll need automake version 1.10 or later and a compatible version of autoconf (e.g. 2.68). These should come as standard on any non-ancient Linux distribution.

2011年6月20日星期一

Moses的一些实现细节

Moses的一些实现细节

使用默认的参数训练,

# distortion (reordering) weight
[weight-d]
0.010878 //distance weight
0.059869 //monotone weight (f ---> e direction)
0.033513 //swap weight (f-->e direction)
0.216945 //discontinuous weight (f-->e direction)
0.057195 //monotone weight (e---> f direction)
0.037017 //swap weight (e-->f direction)
0.111842 //discontinuous weight (f-->e direction)

#distortion样例
国际 ||| in the world ||| 0.016393 0.180328 0.803279 0.016393 0.016393 0.967213
6个特征值分别表示分别对应monotone, swap, discontinuous (f-->e) direction, monotone, swap, discontinuous (e-->f) direction

在解码过程中, 采用stack decoding算法, 每形成一个短语对时, 只能推断f-->e方向的orientation, e-->f方向的orientation需要到下一个短语对形成时计算 (句子最后一个短语对e-->f方向的orientation不计算). oreientation取值只能为monotone, swap, discontinuous中的某一项, 其他两项的特征值置0

# translation model weights
[weight-t]
0.008391 //P(f|e) weight
0.017675 //Lexical(f|e) weight
0.043903 //P(e|f) weight
0.029038 //Lexical(e|f) weight
0.074607 //Phrase Penalty weight

phrase table样例
国际 ||| in the world ||| 0.0174804 0.0214346 0.00197252 7.68173e-05 2.718
5个特征值分别对应以上5项


对未登录词的处理
未登录词的权重为1.0, 特征值为-100. 未登录词的翻译结果为其本身, 但# distortion (reordering) 6个特征值为0, translation model的5个特征值为0.. language mode特征值由lm定.. 以下是未登录词的特征值及权重的一个例子:
score:0.000000 weight:0.010878 //distance feature
score:-1.000000 weight:-0.236574 //word penalty feature
score:-100.000000 weight:1.000000 //unknown word feature
score:0.000000 weight:0.059869 //monotony f-->e
score:0.000000 weight:0.033513 //swap
score:0.000000 weight:0.216945 //discontinuous
score:0.000000 weight:0.057195 //monotony e-->f
score:0.000000 weight:0.037017 //swap
score:0.000000 weight:0.111842 //discontinuous
score:-6.271241 weight:0.062555 //language model
score:0.000000 weight:0.008391 //translation (f|e)
score:0.000000 weight:0.017675 //lexical (f|e)
score:0.000000 weight:0.043903 //translation (e|f)
score:0.000000 weight:0.029038 //lexical (e|f)
score:0.000000 weight:0.074607 //phrase penalty


Future value的计算....
Future value计算考虑的feature包括word penalty feature, unknown word feature, language model, 以及5种translation features; 即不包括distance feature以及各种distortion reordering features

在对hypothesis expanding的时候, 例如输入句子, 此时已翻译的单词为0:
( 海啸 救灾 ) 中国 国际 广播 电台 与 中华 慈善 总会 将 联合 举办 广播 赈灾 义演
“中国 国际 广播”并不作为一个源语言的phrase, moses给的解释是(参见SearchNormal.cpp):
// the basic idea is this: we would like to translate a phrase starting
// from a position further right than the left-most open gap. The
// distortion penalty for the following phrase will be computed relative
// to the ending position of the current extension, so we ask now what
// its maximum value will be (which will always be the value of the
// hypothesis starting at the left-most edge). If this value is less than
// the distortion limit, we don't allow this extension to be made.
计算出来的distortion值为7, 大于默认的distortion limit值6.

BeamSearch的Beamwidth设置为-11.5129251, 即ln(0.00001), 用于存放hypothesis的stack并没有限制其大小.

stack的数据结构为stl set容器, 不清楚各元素是按什么进行排序??

Recombining的条件是与set容器内的某个元素值相同, 但不清楚元素值相同的条件什么??
1) 首先已翻译的单词一致;
2) 最近翻译的f端短语终止位置一致
3) 最近翻译的短语对在f-->e方向上的orientation一致并且特征值也一致?.
??与n-gram无关?

抽取规则时短语的最大长度默认为7 (源端和目标端), 可以max-phrase-length设置

2011年6月14日星期二

perl读文件

写的第一个perl程序, 读文件中的每行
运行需在命令行前加perl, 如perl *.pl

#!/usr/bin/perl -w

my $strfilename = '/home/ldd/Desktop/list.txt';

my $strline;
my $strcommand;

open( FILE, $strfilename ) || die "count not read from $strfilename";

while ( $strline=<FILE>)
{
chomp ( $strline );
$strcommand = '/home/ldd/toolkit/charniak/PARSE/parseIt -K -LCh -l200 /home/ldd/toolkit/charniak/ctb5.1/ /home/ldd/Desktop/ACE2005CN/'.$strline.' > /home/ldd/Desktop/ACE2005CN/'.$strline.'.charniak';
print $strcommand."\n";
system( $strcommand );
}
close FILE;

2011年6月7日星期二

fbis语料预处理
中文:
第69243句子包含英文句子"whatisfirmlyestablishedcannotbeuprooted , whatisfirmlygraspedcannotslipaway , itwillbehonoredfromgenerationtogeneration", 手工删除

英文:


nist语料预处理
中文:

英文:
需将一些非英文字母替换, 例如:
Jürgen Sandkühler --> Jurgen Sandkuhler

2011年6月5日星期日

(C/C++)UTF8字符串中字的切分

UTF-8 采用变长度字节来表示字符,理论上最多可以到 6 个字节长度。UTF-8 编码兼容了 ASC II(0-127), 也就是说 UTF-8 对于 ASC II 字符的编码是和 ASC II 一样的。对于超过一个字节长度的字符,才用以下编码规范:
左边第一个字节1的个数表示这个字符编码字节的位数,例如两位字节字符编码样式为为:110xxxxx 10xxxxxx; 三位字节字符的编码样式为:1110xxxx 10xxxxxx 10xxxxxx.;以此类推,六位字节字符的编码样式为:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx。 xxx 的值由字符编码的二进制表示的位填入。

1字节:0xxxxxxx
2字节:110xxxxx 10xxxxxx
3字节:1110xxxx 10xxxxxx 10xxxxxx
4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节:111110xx 10xxxxxx 10xxxxxx 10xxxxxx
6字节:1111110x 10xxxxxx 10xxxxxx 10xxxxxx


void fnReadCharactersUTF8( char *pszSentence, vector& vec )
{
int iLen;
iLen = strlen( pszSentence );

char *p;

p = pszSentence;

unsigned char *q;

char szCharacter[ 101 ];
int iChar;

int iNumChars;
iNumChars = 0;

vec.clear( );

string strCharacter;

while( p != NULL && strlen( p ) > 0 )
{
q = (unsigned char *)p;
if ( q[ 0 ] < 0x80 )
{
//p[ 0 ] must be an ASCII character
iChar = 0;
szCharacter[ iChar++ ] = p[ 0 ];
p++;
q = (unsigned char *)p;
while( p != NULL && q[ 0 ] < 0x80 )
{
szCharacter[ iChar++ ] = p[ 0 ];
p++;
q = (unsigned char *)p;
}
szCharacter[ iChar ] = '\0';

vec.push_back( string( szCharacter ) );

iNumChars++;
}
else if ( q[ 0 ] < 0xC0 )
{
//invalid char between 0x80 and 0xC0
p++;
}
else if ( q[ 0 ] < 0xE0 )
{
//two chars
szCharacter[ 0 ] = p[ 0 ];
szCharacter[ 1 ] = p[ 1 ];
szCharacter[ 2 ] = '\0';
p = p + 2;

strCharacter = string( szCharacter );
vec.push_back( strCharacter );

iNumChars++;
}
else if ( q[ 0 ] < 0xF0 )
{
//three chars
szCharacter[ 0 ] = p[ 0 ];
szCharacter[ 1 ] = p[ 1 ];
szCharacter[ 2 ] = p[ 2 ];
szCharacter[ 3 ] = '\0';
p = p + 3;

strCharacter = string( szCharacter );
vec.push_back( strCharacter );

//printf( "%s ", strCharacter.c_str( ) );

iNumChars++;
}
else if ( q[ 0 ] < 0xF8 )
{
//four chars
p += 4;
}
else if ( q[ 0 ] < 0xFC )
{
//five chars
p += 5;
}
else if ( q[0] < 0xFE )
{
//6 chars
p += 5;
}
else
{
//>=0xFE
p++;
}
}
}

2011年5月10日星期二

install and use OpenMaTrEx

OpenMaTrEx is a free/open-source example-based machine translation (EBMT) system based on the marker hypothesis. The latest version is 0.97.1 and is available at http://openmatrex.org/

Part I: INSTALL OpenMaTrEx

1. Download and unzip OpenMaTrEx-0.97.1

2. As described in INSTALL file, install required software, including Giza++, IRSTLM, Moses, Moses scripts, Additional (preprocessing) scripts, args4j (available from http://download.java.net/maven/1/args4j/jars/, download the jar file and put it in OpenMaTrEx-0.97.1/lib directory)

3. Install OpenMaTrEx itself
ant dist

Note: No need to set the path of BASE_DIR, OPENMATREX_DIR, MOSES_SCRIPTS_DIR, etc.

Part II: USE OpenMaTrEx

2011年5月6日星期五

Install g++-3.3 on Ubuntu 10.04

Ubuntu 10.04 seems not to support g++-3.3 anymore. Trying to install g++-3.3 via command apt-get install g++-3.3 gets errors of "Couldn't find package g++-3.3".

An alternative way is to install them manually, following these steps:

Download gcc/g++-3.3 install files form Ubuntu archive server http://archive.ubuntu.com/ubuntu/pool/main/g/gcc-3.3/
cpp-3.3_3.3.6-10_i386.deb
gcc-3.3_3.3.6-10_i386.deb
g++-3.3_3.3.6-10_i386.deb
gcc-3.3-base_3.3.6-10_i386.deb
libstdc++5_3.3.6-10_i386.deb
libstdc++5-3.3-dev_3.3.6-10_i386.deb

Then use the dpkg commands to install these deb files one by one:
sudo dpkg -i --force-depends gcc-3.3-base_3.3.6-10_i386.deb
sudo dpkg -i --force-depends cpp-3.3_3.3.6-10_i386.deb
sudo dpkg -i --force-depends gcc-3.3-base_3.3.6-10_i386.deb
sudo dpkg -i --force-depends g++-3.3_3.3.6-10_i386.deb
sudo dpkg -i --force-depends libstdc++5_3.3.6-10_i386.deb
sudo dpkg -i --force-depends libstdc++5-3.3-dev_3.3.6-10_i386.deb
See http://www.blitzbasic.com/Community/posts.php?topic=81247 for more..

2011年4月25日星期一

Eclipse 快捷键的设置 及 其他

安装的eclipse中, Alt+/默认的功能是word completion, 而不是早先版本的Content Assit, 也就是通常所说的智能提示. 可以通过修改快捷键进行修改, 将Content Assit的快捷键修改为Ctrl+/

1) 打开窗口Window-->Preferences
2) 选择左侧菜单General --> Keys
3) 查找 Ctrl+/, 发现Ctrl+/对应的项是Comment等, 将Ctrl+/改为Alt+/
4) 查找Content Assist, 将其设置为Ctrl+/ (个人认为比Alt+/更方便些)


背景的设置
在编写代码时, 鼠标指到变量或函数上方时, 会弹出窗口显示该变量或函数的具体信息, 但窗口背景为黑色. 可以通过以下进行修改:
It was in Preferences > C/C++ > Editor > Source hover background, and had to untick the "System default" (because the shown color was light-gray!)

2011年4月21日星期四

Ubuntu 10.04的使用

Ubuntu 11.04要到这个月28号才提供下载, 那就继续使用10.04吧..

安装完后, 开始安装各种必备工具
1) g++
sudo apt-get instal g++

2) java
sudo apt-get install sun-java5-jdk
出错E: Package sun-java5-jre has no installation candidate
这个说明没有找到java5, 首先添加源
cp /etc/apt/sources.list /etc/apt/source.list.backup
sudo add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu dapper main restricted"
sudo add-apt-repository "http://us.archive.ubuntu.com/ubuntu dapper universe multiverse"
或者直接sudo gedit /etc/apt/sources.list在末尾添加下面两行
deb http://us.archive.ubuntu.com/ubuntu dapper main restricted
deb http://us.archive.ubuntu.com/ubuntu dapper universe multiverse
然后更新
sudo apt-get update

重新下载java5
sudo apt-get install sun-java5-jdk
(安装jdk时, jre就了安装了)

3) 下载eclipse (http://www.eclipse.org/downloads/)
Eclipse Classic 3.6.2
Eclipse IDE for C/C++ Developers

4) 中文输入法
a. sudo apt-get install scim scim-chinese scim-tables-zh
b. System --> Administration --> Language Support
Language tab的Keyboard input method system选择scim-bridge
c. 重启系统
安装的输入法包括五笔, 智能拼音等

5) 安装和启动ssh
安装 sudo apt-get install openssh-server
启动 sudo /etc/init.d/ssh restart

6) 安装latex
sudo apt-get texlive-full
比较大, 近2G, 但也解决了中文显示不正确问题

7) 编码
系统默认采用utf8编码格式, 这与中文版windows系统采用gbk发生冲突, 使得打开gbk编码的文件会出现中文乱码, 可按如下步骤将系统的字符集编码由utf8改为gbk
a. sudo cp /var/lib/locales/supported.d/lcoal /var/lib/locales/supported.d/local.backup
b. 在/var/lib/locales/supported.d/local文件中添加一行zh_CN.GBK GBK
(注: 如果原文件内容为en_IE.UTF-8 UTF-8 en_US.UTF-8 UTF-8, 需删除en_IE.UTF-8 UTF-8)
c. sudo cp /etc/environment /etc/environment.backup
修改/etc/environment文件, 改为
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANGUAGE="en_US:en"
LANG="en_US.UTF-8"
LC_CTYPE=zh_CN.GBK
d. 重启系统

暂这么多, 以后继续补上

2011年2月12日星期六

悲剧的一天

今天很悲剧, 这次实验室被ACL2011剃了个光头. 自己伤心, 老板更伤心. 总结如下:
(1) 我们(至少包括我)都很懒, 属于"很托"的那类, 总是压线写完, 压线提交;
(2) 提交前缺少他人对文章的意见. 总是在闭门造车, 自己对文章内容的各个细节很清楚, 似乎各个地方都写得明白清楚, 也指望其他人(特别是reviewer)能够很清楚地明白文章的各个地方, 但结果事与愿违, review结果中很多的**unclear以及为什么这样做.
(3) 缺少必要的分析(理论分析或例子). 为什么这类方法会有效.

都被拒啦, 那接下来的emnlp又会倾巢出动, 加油!


初到都柏林

来到都柏林已经四天整, 记录下这两天的行程.

昨天上午到实验室见到了未来的老板, 人非常nice, 希望不会辜负他的期望. 接着跑到市中心去办理PPS和GNIB. 公交车按路段来收费, 来回程各投币1.65欧元(4-7站的里程). 贴几张都柏林市中心的照片
O'Connell Str, 前面的大柱子定海神针便是都柏林的地标 (Spire of Dublin)

都柏林公交车, 尽是此类黄色双层巴士

沿O'Connell Str往南走便看到Liffey河, 这条河将都柏林分为南北部分.
Liffey河上的O'Connell Bridge


下图是Liffey河上比较有特色的Ha'penny Bridge, 只供行人使用.


站在Ha'penny Bridge看Liffey两岸

在市中心能够看到很多国人, 也有很多中餐店和中国超市, 常用的中国柴米油盐酱醋都可以买到, 但价格也比较贵, 3/4L左右的电饭锅卖到6/70欧元.

在都柏林生活, 吃饭注定是我一个头痛的问题, 虽说在国内还挺喜欢土豆烧肉片, 但要把土豆当饭吃真歹命(前天吃了一天的土豆泥, 汗). 下面是今晚抄的三个菜, 这样明天的饭也就有着落了. 早饭都比较好解决, 用米和麦片煮点粥, 加个鸡蛋到粥中, 再加点油和盐. 这里的肉嚼的时候总有股恶心的味道, 不知是不是偶然.
抄青菜, 快变成煮青菜了

胡萝卜抄肉末 (没有切菜板, 只能买肉末)

肉末煎豆腐 (烧焦了)

这几天也趁有空去学校附近看了租房, 第一家有点远, 到学校估计得加速步行10分钟, 老伯很热心, 我走后给我发信息愿意少20块, 300欧每月租给我, 加上电/网络等其他租户平摊的费用, 每个月大概需要360~370欧. 第二家离学校很近, 房子装修的看起来很新, 很明亮, 房间里放了张单人床, 一张学习桌子, 放衣服用的厨子, 另有一个专门的卫生间(可惜不是在房间内), 价格是100欧/周,包括无线网络费、暖气费、垃圾处理费等, 需要与其他租户平摊电费. 第三家就在学校对面, 厨房看起来像是经常做饭的样子, 房间很小, 除了一张单人床就是走道, 价格是330欧/月, 其他平摊费用大概需要50-60欧/月. 第四家离学校大概也需要10分钟的路程, 房子新装修, 很明亮, 女房东跟房子一样, 很精致很细心的那种. 由于她本人就住楼上, 要求住户遵守各类条约. 房间价格是400欧/月, 包括网络、暖气等, 住户需付电费 (房东还有间只出租周一至周五的房间, 350欧/月, 估计一时半伙是租不出去了).

2011年1月2日星期日

如何解决UBUNTU下用WINE报 “CAN’T FIND MFC42.DLL….BALABALA”问题

错误原因:老winpe程序使用了mfc相关动态链接库,而新版的wine中不含此库,win用户可以通过安装 Microsoft Visual C++ Redistributable Package获取相关库

ubuntu下获取此库方法:

下载 winetricks:
wget http://www.kegel.com/wine/winetricks
确保有执行权限:
chmod +x winetricks
(可选:将文件放在如 /usr/local/bin 的系统文件夹下)

安装 cabextract:
sudo aptitude install cabextract
执行
winetricks mfc42