2013年9月21日星期六

zsh: jekyll command not found

重启系统后,运行jekyll命令显示

jekyll: commmand not found

使用如下命令解决问题:
echo "source $HOME/.rvm/scripts/rvm" >> ~/.bash_profile

参考:http://stackoverflow.com/questions/15409418/after-installing-jekyll-getting-bash-jekyll-command-not-found

2013年9月9日星期一

ubuntu 12.40 安装jekyll

先安装rvm

curl -L https://get.rvm.io | bash -s stable --ruby
source ~/.rvm/scripts/rvm
rvm install 1.9.3
rvm use 1.9.3
rvm rubygems latest

然后替换 RubyGems 的到淘宝镜像:

gem sources --remove https://rubygems.org/
gem sources -a http://ruby.taobao.org/
gem sources -l


然后安装jekyll,在安装jekyll前先安装rdoc,否则会失败,

gem install rdoc
gem install jekyll

安装完毕

参考:
1.http://ruby-china.org/wiki/install-rails-on-ubuntu-12-04-server

2013年9月8日星期日

java.lang.IllegalStateException: Cannot forward after response has been committed in servlet 错误

写jsp程序时遇到这个错误,一般错误的原因是sendredirect后没有返回

protected void doPost() {
    if (someCondition) {
        sendRedirect();
    }
    forward(); // This is STILL invoked when someCondition is true!
}

解决方法是加一个return或加一个else分支:

protected void doPost() {
    if (someCondition) {
        sendRedirect();
        return;
    }
    forward();
}

protected void doPost() {
    if (someCondition) {
        sendRedirect();
    }else{
    forward(); 
}
}

但是我的代码中sendRedirect是最后一句代码,后面跟着return,居然还有这个运行错误.

原因在于jsp中response具有缓存大小的限制,如果达到这个限制,那么所有HTTP response headers和写入的html代码都会发送回客户端,也就是response is committed.虽然你没有显式指定返回.

检查了一下我的代码,原来我为了测试用如下代码向response写入了很多单词:
  PrintWriter out = response.getWriter();
  
  for( String str: result )
   out.print(str + " ");
  out.println(result.size());
  out.close();

注释掉这段代码之后就可以正常运行了.

参考:
1.http://stackoverflow.com/questions/2123514/java-lang-illegalstateexception-cannot-forward-after-response-has-been-committe/2125045#2125045
2.http://stackoverflow.com/questions/12693975/java-lang-illegalstateexception-cannot-call-sendredirect-after-the-response-h

2013年9月2日星期一

ubuntu12.04 安装 texlive和texstudio

二者都是从ppa安装,因为源里面版本可能会旧一些.

sudo add-apt-repository ppa:texlive-backports/ppa
sudo add-apt-repository ppa:blahota/texstudio
sudo apt-get update
sudo apt-get install texlive-xetex texstudio

安装时间挺长,耐心等待.

安装完后,我还安装了几个包,如下:

sudo apt-get install texlive-fonts-recommended         
sudo apt-get install texlive-lang-cjk         
这两个包是和中文,字体相关的,没装之前编译tex文件会出错,装了之和就没问题了.

最后,安装了苹果下面的"Hiragino Sans GB" 字体

下载之后,如下操作:
sudo mkdir /usr/share/fonts/applefonts
sudo chmod 777 /usr/share/fonts/applefonts
sudo mkfontscale     
sudo mkfontdir     
sudo fc-cache -fsv 


ok了.
参考:
1.https://launchpad.net/~blahota/+archive/texstudio/
2.https://launchpad.net/~texlive-backports/+archive/ppa
3.http://lzuzyy.blog.ubuntu.org.cn/content/texlive2012texstudio%EF%BC%88texmaker252%EF%BC%89%E7%9A%84%E4%B8%AD%E6%96%87%E9%85%8D%E7%BD%AE

2013年8月21日星期三

ubuntu12.04 安装grive

grive是google drive的linux客户端,安装过程如下:


sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install grive

然后,创建一个用于存放网盘文件的文件夹,假设为a,
mkdir a
cd a
sudo grive -a#不加sudo的话,我这里会出现错误.

第一次使用grive时需要grive命令中的-a选项获得google drive的权限.
打开终端现实的链接,选择allow,复制验证码到终端中,grive会自动同步网盘中的文件.

以后想同步的话就在终端切换到网盘目录,然后执行
sudo grive

ps:我第一次同步后发现所有文件权限都不够,直接修改如下:

sudo chmod -R 777 *

参考:http://www.webupd8.org/2012/05/grive-open-source-google-drive-client.html

2013年8月20日星期二

ubuntu12.04 安装stardict

从ubuntu源里安装的版本较早,所以下载安装文件安装,下载地址:https://code.google.com/p/stardict-3/.

安装后下载词典,下载地址:https://code.google.com/p/stardict-3/wiki/DownloadDictionaries.
下载后解压到/usr/share/stardict/dict目录下,重启stardict.


(转)把mat文件保存为txt格式而不损失精度

Subject:

How can I avoid truncation and loss of precision when saving my data in MATLAB?

Problem Description:

I have tried saving my data with SAVE -ASCII (or FPRINTF, DLMWRITE, etc.) and notice that I lose precision when I do this.

Solution:

To obtain 16-digit ASCII format using the SAVE function, use the following command:
save -ascii -double Following is an example of writing "pi" to a TXT-file with double precision using DLMWRITE:
dlmwrite('myfile1.txt', pi, 'delimiter', '\t', 'precision', 16)
For more information on precision specification, refer the respective documentation pages by executing the following MATLAB commands:
doc save
doc dlmwrite

Information on C-style format string allowed in DLMWRITE can be found here:
doc sprintf

参考:
 http://www.mathworks.cn/support/solutions/en/data/1-1CBW5/?product=SL&solution=1-1CBW5

2013年8月19日星期一

Eclipse 导入jsp工程

今天往eclipse中导入一个jsp工程时遇到了好多问题,记录下来.
导入后遇到的第一个问题就是"String cannot be resolved to a
type",原因在于JDK版本没有设置或设置不一致.
 两步:
1.首先检查window->preferences->Java->compiler 和Installed JRE的版本是否一致,不一致请设置一致它。这时候如果还报错请看第二步。
2.在项目中右键properties->Java Build Path,在JRE System Library[....]后面有(unbound),就是因为没有设置JRE版本了.删掉这个JRE,设置为第一步设置的Library.
我的问题出现在第2步.
参考:http://www.cnblogs.com/ericsun/archive/2011/10/24/2222549.html

现在我的程序没有错误了,点击运行出现404错误.此时url地址是:http://localhost:8080/demo,我把地址改为http://localhost:8080/demo/login.jsp后页面就出来了.
但是此时在Marker 栏下有如下错误:

Target runtime Apache Tomcat v6.0 is not defined.
在Project Explorer视图下面的Library下面有一条Server Library(Apache Tomcat v6.0)(unbound),可是我安装的是tomcat 7.0.估计是没有设置tomcat服务器的原因.
如何设置呢?
项目properties->Targeted Runtimes,可以看到Apache Tomcat v6.0之前是勾选的状态.问题就在这里了,我应该选择Tomcat7.0才对.
点击Apply,Ok.
参考:http://javashine.wordpress.com/2010/09/07/target-runtime-apache-tomcat-v6-0-is-not-defined/

悲催,还是404错误.

问题出在哪里呢?

运行程序时浏览器显示的url是:http://localhost:8080/demo,估计应该是默认跳转到哪个页面的问题.我看了一下WEB-INF目录下的web.xml文件,其中有welcome-file-list一节,
welcome-file-list是web工程默认显示的一些页面,看了一下,没有我的项目中的jsp,把其中一个welcome-file改为项目中已有的一个jsp页面,
再次运行,ok.

过程中还遇到了其他问题,比如链接被重置,这是我使用AutoProxy代理的缘故,把代理先禁用就可以了.
还有就是自动跳转到www.localhost.com的问题,这个是firefox的原因,
在about-config页面把browser.fixup.alternate.enabled设置为false.

2013年8月17日星期六

LinkedHashMap的遍历顺序

我们知道,LinkedHashMap使用双向链表链接所有的entry,链表保证了遍历时的顺序就是key插入的顺序.而且当你重新插入一个key时(即该key已经存在于map中),元素顺序并不受影响.

今天写程序时遇到一个疑问,虽然LinkedHashMap 是保持插入顺序的,那么我们使用entryset进行遍历时是否也保持了插入顺序呢,答案是肯定的!!

根据java map,map接口提供了三种集合结构的视图(view),分别允许把集合看做键的集合,值的集合以及键值对映射的集合.一个集合的顺序也就是在这三种视图上的iterator返回元素的顺序.


所以,使用keyset,values和entryset三种视图对LinkedHashMap遍历,得到的都是元素的插入顺序.

Map map = new LinkedHashMap();
for( int i = 0; i< 1000; ++i)
{
 map.put(i, 2*i);
}
  
for(Entry entry: map.entrySet() )
{
 System.out.println(entry);
}

for( Integer key : map.keySet() )
{
       System.out.println(key  + " " + map.get(key));
}

参考:
1.http://stackoverflow.com/questions/1190083/does-entryset-in-a-linkedhashmap-also-guarantee-order
2.http://www.coderanch.com/t/434260/java/java/LinkedHashMap-keySet
3.http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html

2013年8月15日星期四

ubuntu12.04 安装龙井QQ和wps

首先安装wine
因为据说软件中心的版本不一定最新,所以从ppa源安装:
sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine
大概要安装几十个包,时间可能比较长,耐心等待,

同时我们可以下载龙井QQ的deb包,下载地址:http://www.longene.org/download/
选择最新版安装.
下载后安装:
sudo dpkg -i kingsoft-office_9.1.0.4127\~a11p3_i386.deb 
现在就可以使用qq了.

现在安装wps.wps有deb包,直接下载安装即可.
下载地址: http://community.wps.cn/download/
启动后提示我系统缺失字体:windings,wingding2,wingding3,下载地址在这里:http://pan.baidu.com/share/link?shareid=3369982571&uk=505215462,安装完重启就可以正常使用了.

2013年8月14日星期三

ubuntu12.04安装使用memcached

1.先安装libevent
sudo apt-get install libevent-dev
然后检查是否安装成功
ll /usr/lib | grep libevent
2.安装memcached
sudo apt-get install memcached

启动
memcached -d -m 64 -p 11211 -u memcache -l 127.0.0.1

各个参数的含义:
-d:以daemon的方式在后台启动运行一个守护进程
-m:分配给Memcache使用的最大内存数量,单位是MB,默认是64MB
-u:设定运行Memcache的用户(memcache默认不允许以root用户登录)
-l:监听的服务器IP地址
-p:设置Memcache监听的TCP端口,默认是11211(p为小写)
-c:设置最大并发连接数,默认是1024
-P:设置保存Memcache的pid文件路径(P为大写)
-h:显示帮助
然后,查看是否启动成功:
ps -e | grep memcached
关闭时使用kill命令.

3.安装python-memcached
pip install python-memcached

代码示例:
这里有一个memcache与mysql一起使用的例子,直接粘贴过来,例子还是很好懂的,可以仿照着写自己的代码:

import sys
import MySQLdb
import memcache
memc = memcache.Client(['127.0.0.1:11211'], debug=1);
try:
    conn = MySQLdb.connect (host = "localhost",
                            user = "sakila",
                            passwd = "password",
                            db = "sakila")
except MySQLdb.Error, e:
     print "Error %d: %s" % (e.args[0], e.args[1])
     sys.exit (1)
popularfilms = memc.get('top5films')
if not popularfilms:
    cursor = conn.cursor()
    cursor.execute('select film_id,title from film order by rental_rate desc limit 5')
    rows = cursor.fetchall()
    memc.set('top5films',rows,60)
    print "Updated memcached with MySQL data"
else:
    print "Loaded data from memcached"
    for row in popularfilms:
        print "%s, %s" % (row[0], row[1])

参考:
1.http://superuser.com/questions/80724/how-to-install-libevent-via-aptitude
2.http://stackoverflow.com/questions/7636108/installing-memcached-for-a-django-project
3.http://stackoverflow.com/questions/868690/good-examples-of-python-memcache-memcached-being-used-in-python

ubuntu 12.04 安装tomcat7.0

虽然也可以使用apt-get安装tomcat,但是有人说不好,所以我是手动下载安装的,
1.
首先在http://tomcat.apache.org/download-70.cgi下载安装文件,选择tar.gz 格式.注意,
先选择中国的镜像站,北理或华科的都可以,默认的镜像站慢的吓死人

解压到某个目录,我解压到/opt中,这个目录是任意的
tar xzvf apache-tomcat-7.0.42.tar.gz
sudo mv apache-tomcat-7.0.42 /opt

很多操作都是和tomcat的安装目录相关的,需要根据自己的安装进行更改.

2.然后,在/etc/environment中定义JAVA_HOME和JRE_HOME环境变量,
sudo vim /etc/environment
修改如下(貌似默认就有PATH变量了)
JAVA_HOME="/usr/lib/jvm/java-6-oracle"
JRE_HOME="/usr/lib/jvm/java-6-oracle/jre"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:$JAVA_HOME:$JRE_HOME"

JAVA_HOME和JRE_HOME分别指向jdk和jre的安装路径,需要根据你的安装情况进行修改.关于如何安装jdk可以参考我的这篇文章:http://ningyuwhut.blogspot.com/2013/08/ubuntu-1204-ppajdk.html

有时候tomcat并不识别这两个变量,一个很保险的方法是修改catalina.sh(在tomcat安装目录下面的bin目录下),把两个环境变量的定义放在第一行后面
cd /opt/apache-tomcat-7.0.42/bin#切换到catalina.sh所在路径下面
sudo vim catalina.sh
修改如下:

#!/bin/sh
JAVA_HOME="/usr/local/jdk1.6.0_23"
JRE_HOME="/usr/local/jdk1.6.0_23/jre"
# Licensed to the Apache Software Foundation (ASF)...
#...
#...
....
3.最后,配置tomcat-users,需要修改tomcat安装目录下的conf目录中的tomcat-users.xml文件.
修改如下:












4.启动tomcat
先切换到/opt目录下面
 sudo ./apache-tomcat-7.0.42/bin/startup.sh   
此时会输出:
Using CATALINA_BASE:   /opt/apache-tomcat-7.0.42                                                                                  
Using CATALINA_HOME:   /opt/apache-tomcat-7.0.42                                                                                  
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.42/temp                                                                              
Using JRE_HOME:        /usr/lib/jvm/java-6-oracle/jre                                                                        
Using CLASSPATH:       /opt/apache-tomcat-7.0.42/bin/bootstrap.jar:/opt/apache-tomcat-7.0.42/bin/tomcat-j                        
uli.jar                                       
这估计是提示我们JRE和tomcat的路径.

然后,在浏览器中输入127.0.0.1:8080就可以访问tomcat了.


参考:
1.http://stackoverflow.com/questions/11219678/apache-tomcat-installation-directory-in-ubuntu-configure-tomcat-in-eclipse-u
2.http://diegobenna.blogspot.in/2011/01/install-tomcat-7-in-ubuntu-1010.html

2013年8月13日星期二

ubuntu 12.04 安装eclipse

昨天用ubuntu tweak安装的eclipse,安装完之后还出现启动错误,参考http://stackoverflow.com/questions/10165693/eclipse-cannot-load-swt-libraries解决,现在早上打算写程序,发现没有创建web项目的选项,原来tweak中默认安装的是纯净版,要写web项目还得安装插件,好吧,点击help,install new softwares,输入网址(具体参考stackoverflow.com/questions/8046661/how-to-add-java-ee-plugin-in-plain-eclipse),竟然一个插件也没有,郁闷.还是重新装一个javaee版本吧.


简述如下:
1.下载javaee文件,解压到opt目录下
sudo tar xzvf your_eclipse_file_name -C /opt
2.在/usr/share/applications目录下创建一个eclipse.desktop文件
sudo vim /usr/share/applications/eclipse.desktop
输入如下内容

[Desktop Entry]
Name=Eclipse 
Type=Application
Exec=eclipse
Terminal=false
Icon=eclipse
Comment=Integrated Development Environment
NoDisplay=false
Categories=Development;IDE
Name[en]=Eclipse
然后执行
desktop-file-install eclipse.desktop
3.在/usr/local/bin下创建一个符号链接,指向eclipse文件
cd /usr/local/bin
sudo  ln -s /opt/eclipse/eclipse
4.最后,让eclipse图标可以显示在dash中,执行如下命令
cp /opt/eclipse/icon.xpm /usr/share/pixmaps/eclipse.xpm


具体安装过程参考:http://askubuntu.com/questions/26632/how-to-install-eclipsehttp://akovid.blogspot.com/2012/08/installing-eclipse-juno-42-in-ubuntu.html .

ubuntu 12.04 ppa安装jdk

本来打算在oracle上下载安装文件的,先是用wget下载下来的竟然就是个html文件,搜了一下和oracle的licence有关,也没弄清到底怎么回事,照着stackoverflow上的一个帖子也没下载下来,索性手动下载吧.可是下载文件竟然还要注册oracle的账号!!还tm的要填那么多信息,真是蛋疼.索性放弃这条路,在网上看看有没有别的办法.果然被我找到了,原来可以通过ppa的源来安装jdk,而且比自己手动安装更方便,下面记录一下安装过程,以后都用这个安装了.

所有的命令如下:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer

在安装过程中会询问是否同意证书什么的,选择同意就是了.
安装过程很快,而且不用自己设置环境变量,在终端中可以直接执行java命令

java version "1.6.0_45"                                           
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)              
Java HotSpot(TM) Server VM (build 20.45-b01, mixed mode) 

可是打印JAVA_HOME和CLASSPATH是却是空,不知道有么有影响.

参考:
1. http://linuxg.net/how-to-install-oracle-java-jdk-678-on-ubuntu-13-04-12-10-12-04/

ubuntu12.04 安装 faenza icon theme

在ubuntu tweak中的应用中可以找到这个主题,选择安装就可以了.在ubuntu自带的软件中心中也可以找到.以前安装过一两次都是在网上找到文件下载再安装,现在省事多了.安装完之后不知道怎么把图标更改为faenza,在系统设置的外观中没有新安装的faenza.今天碰巧让我找到了,原来在tweak中可以设置,之前估计没找到,囧.在tweak中的调整页面,我们可以设置各种主题,比如GTK主题,图标主题,光标主题等等.注意,在下拉菜单右边有一个刷新按钮,点击后下拉菜单中才会出现安装的faenza主题,选择一个就ok了.更改之后确实好看一些.
不知道还有别的更好的方法没

2013年8月12日星期一

mysql 避免插入重复记录

避免插入重复记录应该有很多方法,我感觉可以分为两类,一类是在表结构上添加某些限制,一类是在插入语句上使用特殊的语法,比如我之前使用的insert ignore,但是这个是针对已经定义了主键的表而言的,对于没有定义主键的表没有效果。今天就遇到了这种情况。虽然使用了ignore,但是表中还是有重复的记录。所以我修改了表结构,加入了一个unique key 限制。
假设表结构有如下字段:id,name,time,phase,为name和phase两个字段添加唯一性约束(unique constraint)
crate table mytable(
……
unique key `name_phase` (`name`, `phase`)

);

参考:http://stackoverflow.com/questions/635937/how-do-i-specify-unique-constraint-for-multiple-columns-in-mysql

2013年8月11日星期日

vim 把tab转换为空格

用vim写python代码,添加了一行代码,然后运行,总是遇到缩进错误,把出现错误的那一行改过之后发现后面的那一行又出现了缩进错误,哎,这样改下去还得了!!缩进错误那肯定是我的tab键个数不对,用 set list显示tab和空格后也没发现有什么不对的地方,所以索性把所有的tab都替换为空格吧,命令如下:

set expandtab
:%ret! 4
再次用set list命令就会发现没有^I了,只有$.
再次运行就没有缩进错误了

2013年8月1日星期四

python import 自定义的包


目录结构如下:
crawler/
    a.py
admin/
    b.py

现在想要在b.py中导入模块a,首先需要在crawler目录下面新建__init__.py,文件可以为空,然后在程序中加入如下代码:

import sys
sys.path.append("../crawler")#引号中是crawler的路径
import a


这样就可以引入模块a了。

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,所以中文是默认就能显示的,只需要设置字体就可以了.
最后重启一下,中文就显示正常了.