2011年10月8日星期六

ubuntu 下配置Java环境

下载,安装

在Ubuntu源中可以直接安装jdk,但是只能安装Openjdk,而且版本不一定是最新的。还是选择使用官方版,在Oracle Java SE Downloads(吐槽: SUN 阿 SUN)下载Linux平台的自解压包,后缀为bin,说明是可执行文件。把自解压包放在准备安装的目录(比如/usr/local),需要通过chmod添加可执行属性,然后执行该bin文件解压即可。

配置环境

要使用Java,还需要配置环境参数JAVA_HOME,CLASSPATH,为了在终端中使用JAVA,还需把$JAVA_HOME/bin加入到PATH中。

可以在$HOME/.bashrc 中使用(假设java安装在/usr/local/jdk1.6.0_27):

# JAVA Environment
JAVA_HOME=/usr/local/jdk1.6.0_27
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH


但这样有一个问题,环境变量并不是全局的(只在所谓的nologin shell中有效),也就是说安装eclipse后,如果在桌面中启动eclipse会提示找不到JRE(eclipse需要JRE环境)。

所以更合适的方法是在/etc/profile中添加上述语句,因为login shell 会读取该文件,使得环境变量是全局的。

2011年10月7日星期五

latex 生成带QR码的名片

抄袭地址:这里


生成的效果如下:


要开发QR CODE译码应用程序除了使用现成的译码库(比如zxing)外,其实还要知道各服务的标准协议才能开发出真正的应用程序。比方说要如何判别什么时候是联系人、什么时候是打电话、什么时候是发短信、什么时候是开启网页、什么时候是纯文本备注。
这些都有标准协议,以下就简单说明各QR CODE应用协议:
发送短信
SMSTO:13800138000:BABY I LOVE YOU
发送彩信
MMSTO:13800138000:send mms
发送网址
http://www.hoojar.com/
拨打电话
TEL:13800138000
发送邮件
MATMSG:TO:hoojar@hoojar.com;SUB:TEST;BODY:THIS IS TEST MAIL FOR QR CODE;;
电话本
MECARD:N:李,林;ADR:湖南省株洲市;TEL:+8313800138000;EMAIL:hoojar@hoojar.com;URL:http://m.hoojar.com/;;
书签
MEBKM:TITLE:慧佳生活网;URL:http://www.hoojar.com/;;

使用pst-barcode宏包生成QR码,QR码中包含的信息为电子名片信息,格式为MECARD。虽然Vcard是通用的电子名片标准,但由于二维码的信息量有限,Vcard的条目过于详细,所以在用QR码存储名片信息时,更常用MeCard格式

模板如下:

\documentclass[11pt,a4paper]{memoir}

\setstocksize{55mm}{85mm} % UK Stock size
\setpagecc{55mm}{85mm}{*}
\settypeblocksize{45mm}{75mm}{*}
\setulmargins{5mm}{*}{*}
\setlrmargins{5mm}{*}{*}

\setheadfoot{0.1pt}{0.1pt}
\setheaderspaces{1pt}{*}{*}
\checkandfixthelayout[fixed]

\pagestyle{empty}

\usepackage{pstricks}
\usepackage{pst-barcode}

\begin{document}
%\pagecolor[cmyk]{.22,.36,.51,.08}%
\begin{Spacing}{0.75}%
\noindent
\textbf{Andrew~Brampton~Ph.D.}\\
\rule{75mm}{1mm}\\
\begin{minipage}[t]{30mm}
\vspace{-1mm}%
\begin{pspicture}(30mm,30mm)
% The MECARD format is used to exchange contact information. More information at:
% http://www.nttdocomo.co.jp/english/service/imode/make/content/barcode/function/application/addressbook/index.html
\psbarcode{MECARD:N:Brampton,Andrew;EMAIL:a.bramptonATlancs.ac.uk;URL:http://bramp.net;;}{eclevel=L width=1.181 height=1.181}{qrcode}
\end{pspicture}
\end{minipage}
\hspace{1mm}
\begin{minipage}[t]{42mm}
\vspace{-1mm}%
\begin{flushright}
{\scriptsize
\begin{Spacing}{1.5}%
% \textbf{Research Associate}\\
\textbf{Network Researcher}\\
Computing Department\\
Lancaster University\vspace{9mm}\\
\end{Spacing}
}
{\tiny
\textbf{email:} a.brampton AT lancs.ac.uk\\
\textbf{web:} http://bramp.net/\\
\vspace*{2mm}
}
\end{flushright}
\end{minipage}
\rule{75mm}{1mm}
\end{Spacing}
\end{document}

2011年9月30日星期五

还真是浪费了一天

分区

安装ubuntu时分了两个区,大部分划给/,剩下4g划给swap。后来想重新装个win7,发现已没空间。fdisk并不能调整分区大小,也就是说,它可以删除分区,在未使用空间中建新分区,但是它不能既保证原有分区正常使用,又能划出新的剩余空间建新分区。

GParted才可以满足上述需求,类似于Windows下的分区软件。其项目主页上有具体的使用方法,要点是要调整已挂载系统分区时(我面临的情况)需要使用GParted live cd,通过grub2启动GParted live cd。

安装Win7 后修复grub

主要步骤有以下几步:
  1. live cd 启动系统
  2. 在live 系统中,挂载需要修复grub的硬盘。
    这里假设硬盘为sda:
    sudo mount /dev/sda1 /mnt
  3. 修复grub
    grub-install --root-directory=/mnt /dev/sda
  4. 重启系统,不出意外grub菜单应重新出现,选择Ubuntu(但选择Ubuntu后,会提示什么参数不正确,不过仍能启动)
  5. 进入Ubuntu后,执行
    sudo grub-install /dev/sda (是的,重新执行一遍)
    sudo update-grub2 (会把windows启动一起找到的)
最后一步很重要,可以使第4步出现的参数不正确错误消除掉。

设置grub菜单timeout

修改 /etc/default/grub 中设置GRUB_TIMEOUT。

Gnome桌面显示回收站等

gconfig-editor打开配置管理器,到/apps/nautilus/desktop 中修改。

Ubuntu版本10.04,Grub2

2011年9月29日星期四

TIL:20110929

virtualbox

virtualbox 装XP,要玩魔兽可以给魔兽建立个快捷方式,添加-opengl,这样就可以运行了,不会提示需要directX。但是效果很差劲,基本没有可玩性。

mount 命令

命令格式: mount [-t vfstype] [-o options] device dir
-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。
-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统(挂载iso时需要)
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备

制作镜像文件

  1. 将光盘放入光驱,执行下面的命令
    cp /dev/cdrom /home/sunky/mydisk.iso
  2. 将文件和目录制作成光盘镜像文件
    mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
    注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk, -r Generate rationalized Rock Ridge directory information(UNIX like 平台长文件名支持), -J Generate Joliet directory information(windows平台长文件名支持)

扩展阅读
CD-Recordable FAQ

2011年9月28日星期三

vim 简介

参考资料: 这里

  1. 菜鸟级
    • 移动光标
    • hjkl
    • 退出vim
    • :q!
    • 删除字符
    • x
    • 输入字符
    • a或者i,进入插入模式
    • 保存退出vim
    • :wq 或者 shift+zz
  2. 学徒级
    • 删除单词
    • dw
    • 删除到行尾
    • d$
    • 快速移动光标
    • 0 到行首 $ 到行尾 e 到下一个"单词尾" w 到下一个"单词头" 数字N+e/w 到第N个"单词头"/"单词尾"位置
    • 删除连续多个单词
    • d+数字+w  d+数字+e
    • 删除行
    • dd 数字+dd
    • 取消操作
    • u
    • 粘帖
    • p
    • 替换字符
    • r+要替换的字符
    • 快速编辑
    • ce 删除到"单词尾",并进入插入模式 c$ 删除到行尾,并进入插入模式
  3. 入门级
    • 显示行号
    • :set number
    • 跳转到文件首
    • gg
    • 跳转到文件尾
    • G
    • 跳转到第Nth行
    • nG n为数字
    • 显示行数
    • ctrl + g
    • 查找
    • / 向前查找 ? 向后查找 n 下一个匹配 N 前一个匹配
    • 替换
    • 将当前行中第一个匹配ss替换为fff, :s/ss/fff 将当前行中所有匹配ss替换为fff, :s/ss/fff/g 将所有行中第一个匹配ss替换为fff, :%s/ss/fff 将所有行中所有匹配ss替换为fff, :%s/ss/fff/g
  4. 用户级
    • 执行外部命令
    • :!ls 执行ls命令
    • 另存文件
    • :w newfile
    • 选择文本
    • v
    • 插入文件
    • :r insertfile
    • 插入新行
    • o 新建一行 O 在当前行上面新建一行
    • 复制粘帖
    • y 复制 用法与删除d类似,比如yy就是复制一行

2011年9月27日星期二

ld.so.conf ; ldconfig ; PKG_CONFIG_PATH详解

首先说下/etc/ld.so.conf:

这个文件记录了编译时使用的动态链接库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
如果你安装了某些库,比如在安装gtk+-2.4.13时它会需要glib-2.0 >= 2.4.0,辛苦的安装好glib后
没有指定 --prefix=/usr 这样glib库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib这个搜索路径,所以编译gtk+-2.4.13就会出错了
对于这种情况有两种方法解决:
一:在编译glib-2.4.x时,指定安装到/usr下,这样库文件就会放在/usr/lib中,gtk就不会找不到需要的库文件了 对于安装库文件来说,这是个好办法,这样也不用设置PKG_CONFIG_PATH了

二:将/usr/local/lib加入到/etc/ld.so.conf中,这样安装gtk时就会去搜索/usr/local/lib,同样可以找到需要的库
将/usr/local/lib加入到/etc/ld.so.conf也是必须的,这样以后安装东东到local下,就不会出现这样的问题了。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择
添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如:
/usr/X11R6/lib
/usr/local/lib
/opt/lib

再来看看ldconfig :

它是一个程序,通常它位于/sbin下,是root用户使用的。具体作用及用法可以man ldconfig查到
简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果编译过程中报错,缺少xxx库
我曾经编译KDE时就犯过这个错误,(它需要每编译好一个东东,都要运行一遍),所以切记改动库文件后一定要运行一下ldconfig,在任何目录下运行都可以。

再来说说 PKG_CONFIG_PATH这个变量吧:

经常在论坛上看到有人问"为什么我已经安装了glib-2.4.x,但是编译gtk+-2.4.x 还是提示glib版本太低阿?
为什么我安装了glib-2.4.x,还是提示找不到阿?。。。。。。"都是这个变量搞的鬼。
先说说它是哪冒出来的,当安装了pkgconfig-x.x.x这个包后,就多出了pkg-config,它就是需要PKG_CONFIG_PATH的东东
pkgconfig-x.x.x又是做什么的? 来看一段说明:

The pkgconfig package contains tools for passing the include path and/or library paths to build tools during the make file execution.

pkg-config is a function that returns meta information for the specified library.

The default setting for PKG_CONFIG_PATH is /usr/lib/pkgconfig because of the prefix we use to install pkgconfig. You may add to PKG_CONFIG_PATH by exporting additional paths on your system where pkgconfig files are installed. Note that PKG_CONFIG_PATH is only needed when compiling packages, not during run-time.

其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本啦,库的版本啦,库的路径啦,等等
这些信息只是在编译其间使用。你可以 ls /usr/lib/pkgconfig 下,会看到许多的*.pc,用文本编辑器打开
会发现类似下面的信息:

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: GLib
Description: C Utility Library
Version: 2.4.7
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include

明白了吧,configure就是靠这些信息判断你的软件版本是否符合要求。并且得到这些东东所在的位置,要不去哪里找呀。
不用我说你也知道为什么会出现上面那些问题了吧。

解决的办法很简单,设定正确的PKG_CONFIG_PATH,假如将glib-2.x.x装到了/usr/local/下,那么glib-2.0.pc就会在
/usr/local/lib/pkgconfig下,将这个路径添加到PKG_CONFIG_PATH下就可以啦。并且确保configure找到的是正确的
glib-2.0.pc,就是将其他的lib/pkgconfig目录glib-2.0.pc干掉就是啦。(如果有的话 ^-^)
设定好后可以加入到~/.bashrc中,例如:
PKG_CONFIG_PATH=/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:
/usr/X11R6/lib/pkgconfig
[root@NEWLFS ~]#echo $PKG_CONFIG_PATH
/opt/kde-3.3.0/lib/pkgconfig:/usr/lib/pkgconfig:/usr/local/pkgconfig:/usr/X11R6/lib/pkgconfig

从上面可以看出,安装库文件时,指定安装到/usr,是很有好处的,无论是/etc/ld.so.conf还是PKG_CONFIG_PATH
默认都会去搜索/usr/lib的,可以省下许多麻烦,不过从源码包管理上来说,都装在/usr下
管理是个问题,不如装在/usr/local下方便管理
其实只要设置好ld.so.conf,PKG_CONFIG_PATH路径后,就OK啦

重命名USB磁盘挂载分区卷标

抄袭资料: 这里

根据不同的磁盘分区类型,分别有3个程序可供选用.
  • Mtools 适用于 FAT32 格式分区.
  • ntfsprogs 适用于 NTFS 格式分区.
  • e2label适用于 ext2 和 ext3 型格式分区.

使用mtools编辑FAT32磁盘分区卷标

mtools 是gnu提供的类似于DOS命令的工具集,用于访问和修改MS-DOS文件系统,比如有mcd,mdir。这里要用的是mlabel,修改MS-DOS 磁盘的卷标。

mtools的配置文件在/etc/mtools.conf,但你也可以在你的主目录下建立.mtoolsrc(这里是把mtools.conf复制到.mtoolsrc,可以不影响其他用户的使用),优先读取你的配置。

在.mtoolsrc 中添加一句
drive i: file="/dev/sda2"
将/dev/sda2 映射为 i 盘。用mount命令查看挂载的信息。

查看i盘的卷标
sudo mlable -s i:
修改i盘卷标为my-ipod
sudo mlable i:my-ipod

使用ntfsprogs 修改NTFS分区卷标


ntfsprogs 是用于NTFS文件系统的工具集,修改卷标使用的是其中的ntfslabel 命令。用mount查看你要修改卷标的设备,比如/dev/sdb1。这里提一下,参考资料里面没注意到,在设备已挂载的情况下,ntfslabel 命令会操作失败。所以在ntfslabel之前,要先umount。

修改卷标:
sudo ntfslabel /dev/sdb1 newlabel

使用e2label更改 ext2 或ext3 分区卷标(*未实验)


  1. 设备被自动加载后,可以用如下命令查看此新设备相关信息:
    mount
    显示信息中”sda1”或与之相似的字段即是系统分配给新设备的名字。
  2. 更改原始卷标为你喜欢的新卷标名:
    sudo e2label /dev/sda1 newlabel
    用你喜欢的卷标名替换此命令中的单词”newlabel”