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了。