2013年7月31日星期三

vim 使用vundle 作为插件管理工具

vundle是一个vim的插件管理工具,它使用git对插件进行管理,很方便.
安装使用直接参照github主页上的方法就可以:https://github.com/gmarik/vundle

vundle直接使用git进行安装,安装之后编辑.vimrc文件(在你的家目录下面,如果没有可以自己创建一个),然后打开vim,使用BundleInstall命令就可以安装插件了.

下面介绍怎么使用Taglist插件

taglist插件本身是使用ctags,所以首先安装ctags:

sudo apt-get install exuberant-ctags

然后,修改.vimrc文件,加入这样一行:
Bundle 'taglist.vim'

然后在vim中使用BundleInstall命令安装taglist.

最后,再在.vimrc中加入taglist的几个配置选项:
""""""""""""""""""""""""""""""
" Tag list (ctags)
""""""""""""""""""""""""""""""
if MySys() == "windows"                "设定windows系统中ctags程序的位置
let Tlist_Ctags_Cmd = 'ctags'
elseif MySys() == "linux"              "设定linux系统中ctags程序的位置
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
endif
let Tlist_Show_One_File = 1            "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1          "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1         "在右侧窗口中显示taglist窗口 

ok,下面在vim中使用TListOPen命令就可以打开标签窗口了.
更多的命令还要自己去探索.

深入理解计算机操作系统读书笔记(第2章)

1.字长决定的最重要的参数就是虚拟地址空间的最大大小.即对一个字长w位的机器而言,虚拟地址的范围位0~2^{w}-1,程序最多访问2^{w}个字节.

2.逻辑运算符(||,&&,!)和位运算符(|,&,^,~)的异同:

(1),逻辑运算符把所有非零参数看做TRUE,0 表示FALSE.
(2),逻辑运算符具有短路特性
3.移位运算

左移(<<)是都是在低位补零,而右移又分算术右移和逻辑右移

算术右移是指左端补最高有效位的值,逻辑右移在左端补0.
而c语言没有定义使用哪种右移,但是几乎所有的编译器都对有符号数数据是哟个算术右移.

mysql "主键存在则更新,不存在则插入”逻辑的实现


今天写代码遇到这样一个需求,在网上查了一下,需要使用“on duplicate key"这样一个语句。
以python代码为例:

connection = MySQLdb.connect(user="root", passwd="mnld", host="localhost", db="test", charset="utf-8"

cursor = connection.cursor()

sql = "insert into mytable(id, name, class) values(%s, %s,%s) on duplicate key update class=%s"

record = (a,b,c, c ) #建立一个元祖,供下面的execute使用。

cursor.execute(sql, record)

connection.commit()


基本的流程就是这样。当然,更健壮的代码应该加入异常处理。

2013年7月30日星期二

mysql 删除 重复记录

之前在插入的时候已经考虑到了重复记录的问题,当时是这样插入的:

insert ignore into mytable(id, name) values(2, 'jim')  
但是ignore这种方法是在表已经定义了主键的情况下才会生效,如果表中没有定义主键,那么还是可以插入重复记录的。

但既然已经插入了重复记录,那么现在面临的问题就是如何删除已经插入的重复记录,在搜索之后,发现了一个不错的方法,那就是添加唯一性索引,方法如下:

alter ignore table mytable add unique index indexname(name)
在这条命令中,indexname是索引的名字,name是用于建立索引的字段。


注意,如果你的表使用的InnoDB引擎,那么这条语句还是会出错,提示有某条重复的记录。所以,我们需要把表冲InnoDB改成MyISAM,执行完后再改回来就OK了。

代码:
ALTER TABLE table ENGINE MyISAM; alter ignore table mytable add unique index indexname(name) ALTER TABLE table ENGINE InnoDB;
执行完,你再查看表中的数据,就可以看到重复记录已经被删掉了。

但是,还有一个问题就是,当你使用desc mytable命令时,发现name字段后面竟然变成了主键!但是唯一性索引和主键并不是等同的啊。


关于这个问题,你可以参考这个文章。


参考:http://stackoverflow.com/questions/8053447/mysql-alter-ignore-table-gives-integrity-constraint-violation


VLC 播放器播放中文字幕乱码

在ubuntu下面使用VLC播放器,为什么使用VLC呢?其实我也不知道,只是听得比较多,但是在使用的时候发现播放中文字幕会有乱码,其实也不是乱码了,只是显示成方框而已,一般这种问题应该是没有相应的字体,所以设置一下字体就OK了.
右键选择工具,然后首选项,然后选择字幕和OSD,在字体那选择一个中文字体就可以了,里面有文泉驿字体,就选他了.
我的VLC在安装后貌似字幕编码就GB18030,所以中文是默认就能显示的,只需要设置字体就可以了.
最后重启一下,中文就显示正常了.