2012年2月25日 星期六

Taiwanese not Chinese?

最近在youtube上看到一段視頻,title是TAIWANESE ARE NOT CHINESE! 
作爲一個大陸來的人,初看當然覺得很可笑,臺裔不是華裔?看到評論裏,有一個人居然喊出I am Cantonese not Chinese 的,實在不能忍,這個真的是搗亂了. 難道作者說中文的時候,說自己說得是Taiwanese 而不是Chinese? 但是仔細看了後面的評論,知道說作者可能不是想說自己不使用中文或者說自己不是華人,而是試圖強調說自己不是中華人民共和國的公民.我想可不可以有一種表述是,I am Chinese,and I come from Taiwan. 似乎更加溫和些.
兩岸的這個結真是很難解的開阿.

2012年2月10日 星期五

Pentadactyl使用簡介

如果會用VIM就覺得挺熟悉的,兩者非常接進,也可以把Penta當成學習VIM的跳板
首先是如何恢復到有地址欄的方法(如果你困惑想放棄時),按ESC,然後輸入:set guioptions+=mT
1.最基本的是網頁的瀏覽:hjkl,試試這幾個鍵,(可能需要按ESC返回初始狀態,反正如果困惑了,多按ESC),分別是左下上右.可能覺得很蛋疼,但是習慣了會覺得很方便
到top: gg
到bottom: G
到下一頁page up: ctrl+u
到上一頁page down:ctral+d
上面兩個按鍵不推薦,因爲經常按錯,導致關閉firefox
2.然後如果你想看某個鏈接,按一下f(可能需要按ESC),然後出現滿屏幕的數字(黃色背景或者綠色背景).然後輸入指定的數字.但是有一點要 強調的是,在這個狀態下,隨着你逐漸輸入數字,那些數字也在不斷更新中,可能會出現這樣的例子,最終剩下2,28,27,如果你只想要2,那麼你先按2, 這時,系統不知道你要得是哪個,你需要補個回車.如果你想要27,你依次輸入2和7,因爲選擇唯一,網頁會自動跳轉而不需要輸入回車.對,是從高位開始輸 入數字.如果你想這個鏈接在新的tab打開,不要按f,而是F,然後輸入數字就可以在新的tab打開了.
3.打開網頁 還是強調下,如果困惑了,不知道自己在哪個狀態下,就輸入ESC. 有兩個選擇. 按o,(小寫),然後最下面出現:open 字樣,你直接輸入你要的網址,按回車就可以了,在本頁打開.按t,(小寫),下面狀態欄出現:topen字樣,你輸入你要的網址,在新的tab下打開了該 url
4.tab間移動:gt,到下一個tab,gT到上一個tab.(如果不行,記得之前按ESC返回命令模式).
5.前進後退,大寫H和大寫L
6.關閉本tab: d
7.恢復上一個關閉的tab: u
8.書籤功能:這個很重要(我配合Xmark)
如果你想bookmark該網頁,我的做法是:
如果你正在瀏覽該網頁,輸入 :bmark -keyword ***,在輸入bm後,可以按tab鍵,自動會不全,會面的-keyword也一樣,也可以自動不全,偷懶輸入-key,然後按tab,***代表你要的 快捷鍵.比如我經常要用google.cn,你可以到了google.cn的正常頁面(中間會讓你跳轉不是嗎),輸入:bmark -keyword gcn 回車.那麼下次你還要訪問google.cn的時候.你只需要輸入 (esc) + o + gcn 就可以了.
9. 文本框.再舉上面的例子,在google.cn的頁面裏,你想搜索某個關鍵字.你使用f,然後輸入數字(with or without 回車),就發現光標到了那個文本框,你就可以輸入你想搜索的內容了.直接按回車,就開始搜索.或者裝傻比,不按回車,按ESC,就退出了輸入,進入了常規 模式(命令模式),沒完呢,這時,你再按f,選擇那個按鈕("google搜索").第一種是特例.
10. 複製粘帖:粘帖如果你從別的什麼地方複製了URL(從.txt文件),你在firefox先面,直接按p或者P(在新tab)就可以打開該網址. 如果你想複製當前的網址,按y就可以了,先面出現了yanked: 網址 表示成功了.繼續說文本框,當你想在文本框裏粘帖你從系統剪貼板裏輸入的內容,那麼首先通過f+數字到該文本框,然後按shift+insert兩個鍵就 可以了.(ctrl+c ctrl v沒用的)
對於google有個特例,你到了那個搜索頁面後,你也可以直接輸入gi,然後也能開始輸入搜索內容而不用(f+數字到那個框)
以上就是常用的一些按鍵了,如果你在按了esc後按了i,可能會進入carpet模式(最下面出現carpet字樣),別緊張,你直接esc退回到原模式就行了.
至於carpet模式是什麼,我覺得太裝傻逼了,我個人不愛用,還是用的鼠標選擇.
基本就這樣,我也沒有研究配置文件,覺得這些對我來說就夠用了.其他的需要自己去鑽研了.

反正你困惑的時候,就按esc,返回到遠點就好了.上面寫道的應該都有用了.我覺得我應該是一個熟練(而不專業)的使用者了,但 是,基本上,我不幹活的時候,還是喜歡用鼠標,比較放鬆.忘了說了,某些輸入法可能會和這個插件不合,建議是,除了在文本框內輸入文字以外,都把輸入法關 掉(切掉)而不是選擇shift來中英文切換.這樣會有問題. 還有對於一些embed的控件(pdf,flash視頻),你發現penta就無效了,必須要用鼠標了.你可以按鼠標新建一個tab,然後在切回來,就可 以繼續使用了.(這點不是很清楚,可能用esc也可以退出embed狀態)

11. 忘記了,還有搜索...還是(esc)後,按/,然後下面出現/你就可以輸入你頁面內搜索的內容,按回車(別忘了),然後緊接着什麼也別按,按n或者N就可以前在多個匹配項裏跳來跳去了.如果你按了別的,就推出了這個搜索狀態了

2012年2月9日 星期四

習慣是可以改變的!

最近一直用vim(gvim)來寫程序.前陣子發現一直以來使用的都是右Shift(我是德語鍵盤)+"./:"來調出":",這一經常使用的符號.這樣勢必導致在按該鍵時,右手需要離開一定距離,以便同時按到shift 和"./:"鍵,這樣讓我覺得不是很蘇服.於是強迫自己一段時間後,驚喜的發現現在不再使用右shift鍵,取而代之以左shift,這樣就恁夠一直保持兩個手不離開主鍵盤區.
我不知道大家的習慣怎樣,但是一直以來,我都習慣使用同側的shift以及相應的按鍵,比如左shift+1,或者右shift+0,如果就效率而言,應該用異側的比如左shift+9或者右shift+1.有點想當然了.
接下去要改的習慣包括,儘量多使用x/d而不是backspace鍵.更多注意使用w,b來做移動.另外,f鍵也慢慢熟悉起來.(話說真的沒有這個意識,應該能改善速度)

2012月2月4日百萬大歌星:陳昇(無視頻鏈接)

陳昇說自己辦赴美簽證,簽證官不認識他,問他:what for?後面排了很多人,陳昇不好意思回答自己是歌星.庾澄慶說,其實他不用說,只要唱One Night in Beijing就可以了.
我想,有些時候,重要的不是你說了什麼,而是你做了什麼.畢業以來,現實不斷時時磨去當初的驕傲與激情,但是從心底裏,我也想有自己的"成名曲",自己的"One Night in Beijing",在這個世界上留下自己的足蹟.



2012年1月27日 星期五

HTK Basic Tutorial (1)

研究了下HTK,有个非常好的入门教程:agp1.hx0.ru/arts/HTK_basic_tutorial.pdf 
我的系统是Fedora 16. 由于音频驱动的不同,不可能依葫芦画瓢,照着教程一步步来.
网上也没有很详细的过程,希望后来者省却这些麻烦,以下详细介绍整个过程:
第一步:录制训练音频并标记
教程里使用的是HTK里的HSLab,但是似乎HSLab支持的是OSS驱动,而我的电脑使用的是Alsa(?),试了一些方法,无论如何也没有办法让HSLab工作,其间按照一些Posts误删一些重要的包因此重装系统,痛不欲生(夸张了).当按下Rec键时,出现以下错误:
  ERROR [+6006]  InitAudi: Cannot open OSS audio device /dev/dsp
 FATAL ERROR - Terminating program HSLab

我的方法是使用开源软件Audacity来录制音频.然后保存为yes01.wav yes02.wav... no01.wav no02.wav... yes no 各十个
然后是制作音频的Label,即标出该音频那一段是sil(lence),那一段是yes(no).
可以手动做,但是蛮吃力的,我使用audacity自带的标记功能:


选择一段音频,然后按ctrl-b,然后输入标签名,如(sil,no,yes) ,然后在File里有一个Export Label选项,保存为txt格式.打开之后:
 0.000000    0.470889    sil
0.470889    0.800729    no
0.800729    2.634376    sil
而htk要求的label时间是以100ns为单位的,我写了个python转换程序(初学python,献丑了):
import math
import sys
from cStringIO import StringIO

def txt2lab(filename):
    f_in = open(filename,'r')
    f_out = open(filename[:-3] + 'lab', 'w')
    text_f_in = StringIO(f_in.read())

    for line in text_f_in:
        data = line.split('\t')
        start = int(math.floor(float(data[0])*10000000))
        end = int(math.floor(float(data[1])*10000000))
        f_out.write(str(start) + '\t' + str(end) + '\t' + data[2])

if __name__ == '__main__':
    filename = sys.argv[1]
    txt2lab(filename)
然后批量转换之前手动生成的label(.txt)文件:
for file in *.txt; do python txt2lab.py $file; done
文件结构参照原pdf,即所有的wav存放在data/train/sig下,所有的lab存放在data/train/lab下

2012年1月22日 星期日

Python IDE(Vim)

网上已经有一个类似的,也很全(http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/)
蛮完整的,我简单谈一下我的使用感受.
我的.vimrc是按照amix的终极配置改的.其中的保存python后,删除空白很有效.
然后为了编辑python,我按照所附链接下载了以下插件:minibuffer,和Taglist,两个都很好用,没有问题.然后我想方便autocompletion,于是又装了supertab,结果tab不出completion,很让人恼火.后来发现,我按照amix的装了一个snipMate的插件,与之冲突了.觉得我还是喜欢自己敲代码,就把snipMate删了.终于可以tabcompletion了.
作为IDE,最重要的是能够debug,然而我试了文中提到的Vimpdb,无论如何无法使其工作.首先是文档格式问题,我照着网上的使用dos2unix转换了两个文件,但是,之后,我试着debug这个插件,发现对我这个python菜鸟来说,太繁复了,不想浪费时间.顺便一提,这个插件的作者编码的习惯不好,缩进是用tab键而不是4空格.当我试图插入自己的代码时,总是报错,发现就是源于他使用的tab缩进导致的.用vim自带的retab解决问题.但是实在没心思再debug了.网上很多人也抱怨这个插件的.
于是google了,发现一些walkaround,试了几个,都不怎么好用.(Vimdebug...),
发现可行的办法是,直接使用pdb得了,然后在代码里添上pdb.set_trace()设定端点,然后pdb下调试.无可奈何阿.不过还是想偷点懒,找到别人的.vimrc(http://www.2maomao.com/blog/win32-vim-debug-python/),思路就是快捷添加set_trace(),或者快捷删除set_trace()取消端点,然后设定快捷运行程序启动pdb(:!python %),我略微修改了map,使用f2设断点,f3取消断点,f5运行,似乎找到了以前写c作业的感觉.
我发现作者写得时候或者po上网的时候,出现了一个bug:
python << EOF
import time
import vim
def SetBreakpoint():
    nLine = int( vim.eval( 'line(".")'))
    strLine = vim.current.line
    i = 0
    strWhite = ""
    while strLine[i] == ' ' or strLine[i] == "\t":
        i += 1
        strWhite += strLine[i]
    vim.current.buffer.append(
       "%(space)spdb.set_trace() %(mark)s Breakpoint %(mark)s" %
         {'space':strWhite, 'mark': '#' * 30}, nLine - 1)
    for strLine in vim.current.buffer:
        if strLine == "import pdb":
            break
        else:
            vim.current.buffer.append( 'import pdb', 0)
            vim.command( 'normal j1')
            break
vim.command( 'map :py SetBreakpoint()')

def RemoveBreakpoints():
    nCurrentLine = int( vim.eval( 'line(".")'))
    nLines = []
    nLine = 1
    for strLine in vim.current.buffer:
        if strLine == 'import pdb' or strLine.lstrip()[:15] == 'pdb.set_trace()':
            nLines.append( nLine)
        nLine += 1
    nLines.reverse()
    for nLine in nLines:
        vim.command( 'normal %dG' % nLine)
        vim.command( 'normal dd')
        if nLine < nCurrentLine:
            nCurrentLine -= 1
    vim.command( 'normal %dG' % nCurrentLine)
vim.command( 'map :py RemoveBreakpoints()')
vim.command( 'map :!python %')
EOF

其中,开头的i+=1(红色粗体)应该和后面一行对调,string的开始是从0开始,而不是1.总得来所,作者写得挺好的,也挺好用的,在此写过.
不过我觉得在gvim下pdb似乎会有点问题,其他buffer会不更新,僵在那.要么编辑就在gvim,debug还是在另开窗口在terminal下比较好.Debug似乎不是Vim的强项,首先他是个文本编辑器.
另外,推荐一下Vim配色,molokai,很有现代感,但是可能颜色太鲜艳.

2012年1月3日 星期二

Linux下分割APE,并转档至ALAC

(1)如果是中文专辑,.cue文件通常是乱码的 首先确定.cue的编码 我使用vim 在.vimrc中添加:
            set fileencodings=utf-8,gb2312,gbk,gb18030
            set termencoding=utf-8
            set encoding=prc
这样打开.cue后不再乱码 然后输入:set fileencoding 出现编码方式,我的出现euc-cn的编码方式,是GB2312的别名
或者使用enca
            $ enca -L zh_CN 文件名.cue
然后进行转码:使用iconv
            $ iconv -f GB2312 -t UTF-8 文件名.cue -o 输出文件名.cue
(2)分割整个ape文件(参照:http://www.cnblogs.com/stephenjy/archive/2010/03/01/1675835.html)
安装shntool,以及mac解码器。 shntool可以用apt-get(ubuntu)或者yum(fedora)安装 mac解码器必须编译安装。直接yum install mac安装后,分割不成功。
到 http://shnutils.freeshell.org/shntool/ 下载 Helperprogram下的ape的patchrc 依据info,
执行: $ CXXFLAGS="-DSHNTOOL" ./configure
             $ make
             $ make install
分割文件
             $ shntool split -t "%n.%p-%t" -f 文件名.cue -o ape -i ape 文件名.ape
(3)转档
安装ffmpeg(yum install)
执行:
             $ ffmpeg -i 文件名.ape -acodec alac 文件名.m4a
如果嫌逐个麻烦:
到该文件夹下,首先找出类型为.ape的小于200M的单个歌曲文件,然后 逐个转换
执行:
             $ find -type f -size -100000k -name '*.ape' | sed -e 's/\.ape$//' | xargs -I @ ffmpeg -i @.ape -acodec alac @.m4a
加强版(歌曲名里有空格(It's True.ape))
             $  find -type f -size -100000k -name '*.ape' -print0 | sed -e 's/\.ape//g'| xargs -0 -I @ ffmpeg -i @.ape -acodec alac @.m4a
最后删除原先的单个ape
             $ find -type f -size -100000k -name '*.ape' -print0 | xargs -0 rm