Practical Vim中文版 -《Vim实用技巧》已出版

车文隆与我合译的《Vim实用技巧》一书已由人民邮电出版社出版,本书的英文书名是 Practical Vim,原书作者是Drew Neil。这本书在Amazon网站上的评分是五颗星,是关于Vim的一本很好的书。

这本书在2014年5月已经正式出版了,但由于种种原因,我直到上周末才收到样书。拿到样书之后,第一时间翻阅了一下,书的纸质和印刷都相当不错,是我喜欢的类型。至于内容和版式,我早已熟悉的不能再熟了,不过看纸质版的感觉与看电子版很是不同,多了一份厚重感和书香气。

车文隆与我的分工如下:

  1. 车文隆负责:序、第10章到第21章、附录A
  2. Easwy负责:读者对本书的评论、自序、致谢、写作体例说明、第1章到第9章

作为本书的译者之一,我既逐字逐句翻译了部分内容,也曾多次对本书的内容及排版进行过审阅,因此我有充分的信心向读者推荐本书。对Vim用户而言,无论是刚接触 Vim 的初学者还是对 Vim 有了一定了解的中级用户,阅读本书都是学习 Vim 思维方式的很好途径。

因为我曾经对本书的内容和排版进行过多次细致的审阅,所以自信不会像某些书籍那样错误连篇,不过任何软件都有bug,任何书也都会有错误,如果读者发现书中的错误,请在《Vim实用技巧》勘误表中留言,我会一一记录下来,在本书再版时改正。

感谢本书的责任编辑陈冀康!也感谢另外一位译者车文隆,我们一起为这本书度过了不知多少个的日日夜夜!

感谢大家的支持!Happy Viming!

PS,本书在下列网站有售:

翻看了上述网站上的读者评论,大部分读者的反映都很好,也有几个读者吐槽书的纸质和价格,不过幸好没读者抱怨翻译质量,这就是对我们最好的评价了。 :-)

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/practical-vim-chinese-version/

文章的脚注信息由WordPress的wp-posturl插件自动生成

在LVM分区上安装Ubuntu 12.04

今天在工作站上安装了Ubuntu 12.04 LTS版,安装后发现Ubuntu缺省并不使用LVM分区,而是把所有内容都安装在了根分区,个人还是习惯于将操作系统和用户数据分别放在不同的分区上,以保证数据的安全。因为LVM能够提供更加灵活的磁盘管理功能,因此打算把Ubuntu 12.04安装在LVM分区上。

关于LVM分区的更多介绍,可以参见易水博客上的Linux逻辑卷管理器(LVM)学习笔记

由于Ubuntu 12.04缺省并不支持LVM,需要采用特殊的安装步骤才能使用LVM,因此在网上找了一下Ubuntu社区给出的解决办法,具体方法如下。

1. 使用光盘启动Ubuntu

首先设置计算机BIOS,使用光盘引导,然后使用光盘启动Ubuntu Live。进入图形界面后,选择“Try Ubuntu”。

2. 安装lvm2

首先打开一个终端,运行如下命令安装lvm2:
sudo apt-get -y install lvm2

3. 设置硬盘分区

接下来需要设置硬盘分区。我的分区基本与参考文档中的分区是一样的,因此借用了它的操作步骤:在/dev/sda上分两个分区,其中/dev/sda1用来安装/boot,而/dev/sda2则用来创建LVM分区。需要注意的一点是,需要把/dev/sda2的分区类型设置为0x8e,表明这是一个Linux LVM分区。
ubuntu@ubuntu:~$ sudo fdisk /dev/sda
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x568311d6.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-5221, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-5221, default 5221): +1G

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (133-5221, default 133):
Using default value 133
Last cylinder, +cylinders or +size{K,M,G} (133-5221, default 5221):
Using default value 5221

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e

Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x568311d6

Device Boot Start End Blocks Id System
/dev/sda1 1 132 1060258+ 83 Linux
/dev/sda2 133 5221 40877392+ 8e Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

4. 创建LVM分区

接下来就是创建LVM分区,这里所提到的一些概念,可以参考EaswyLinux逻辑卷管理器(LVM)学习笔记

首先创建一个物理卷(PV):
sudo pvcreate /dev/sda2

然后在此物理卷上创建一个逻辑卷组(LVG):
sudo vgcreate sysvg /dev/sda2

最后在卷组上划分逻辑卷(LV):
sudo lvcreate -L 1G -n lvswap sysvg
sudo lvcreate -L 20G -n lvroot sysvg
sudo lvcreate -L 15G -n lvhome sysvg

这里创建了三个逻辑卷,分别用来安装交换分区(lvswap)、根文件系统(lvroot)以及home目录(lvhome)。
我一般会在卷组中预留一些空闲空间,这样一旦某个分区大小不太合适时,就可以随时调整。

5. 安装Ubuntu

创建完LVM分区后,就可以双击Ubuntu Live桌面上的“Install Ubuntu 12.04”,开始安装Ubuntu。在分配磁盘分区时,选择“Something else”,以便使用我们创建的LVM分区。具体操作可以看参考文档中的屏幕截图。
选择好安装分区后,就可以开始安装Ubuntu了。

6. 把lvm2安装到磁盘上的Ubuntu中

在Ubuntu安装完后,会提示你重启系统,但此时还不能重启系统,因为Ubuntu缺省不会安装lvm2包,此时重启会导致系统引导不起来。
我们需要先切换到磁盘上新安装的Ubuntu文件系统中:
sudo mount /dev/mapper/sysvg-lvroot /mnt
sudo mount /dev/mapper/sysvg-lvhome /mnt/home/
sudo mount /dev/sda1 /mnt/boot
sudo chroot /mnt

这几条命令会挂载各分区到Ubuntu Live的/mnt分区,然后chroot到/mnt。
现在我们已经位于新安装的Ubuntu文件系统中了,运行如下命令配置kernel module:
echo "dm-mod" >> /etc/modules
echo "dm-snapshot" >> /etc/modules
echo "dm-mirror" >> /etc/modules
echo "dm-mod" >> /etc/initramfs-tools/modules
echo "dm-snapshot" >> /etc/initramfs-tools/modules
echo "dm-mirror" >> /etc/initramfs-tools/modules

然后安装lvm2包:
root@ubuntu:/# apt-get -y install lvm2

7. 大功告成!

现在你可以重启了,记得把光盘拿出来。重启后就会进入我们的新安装的Ubuntu了。此时的Ubuntu,已经安装在了LVM分区上。

8. 参考文档

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/install-ubuntu-12-04-on-lvm-partition/

文章的脚注信息由WordPress的wp-posturl插件自动生成

升级及迁移svn本地版本库

Subversion有一点很麻烦,每次版本升级时格式都会变,导致本地版本库不能用。这几天公司的版本库由1.6升级到了1.7,并且版本库的URL也发生了变化。以前遇到这种情况,一般都会删除本地版本库,然后再重新check out。不过因为版本库比较大,check out一次需要很长时间,于是在网上查了一下,找到一种简单的解决办法。

首先要解决svn版本升级的格式不兼容问题,如果用1.7版本的svn在1.6版生成的work copy上使用命令,会遇到如下错误:

$ svn info
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: Working copy '/home/easwy/dev' is too old (format 10, created by Subversion 1.6)

此时可以使用svn upgrade命令,对本地版本库的格式升级:

$ svn upgrade
Upgraded '.'
Upgraded 'scripts'
Upgraded 'merge-info'
Upgraded 'merge-log'
......

因为服务器的地址也变化了,所以升级完本地版本库后,需要把版本库的地址迁移到新地址上去,可以使用以下命令:

$ svn switch --relocate http://server-url/svn/dev http://new-server-url/svn/repos/dev

此命令执行完后,再用svn info看一次,会发现本地版本库的地址已经切换到新的服务器地址了。
这种操作方式,比重新check out要方便太多了!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/svn-upgrade-and-switch/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Easwy的vim配置共享:包括.vimrc及整个.vim目录

刚才有网友来信询问我的vim配置,我在很久以前已经把我的所有vim配置上传到github了,有兴趣的朋友可以在Easwy的Github共享找到我最新的.vimrc和整个的.vim目录。

你可以点此下载Easwy的vimrc,如果你了解git,你也可以使用git命令下载整个版本历史:

git clone https://github.com/easwy/share.git

用这种方式,你可以随时跟踪我的最新修改,或者把你对vimrc的改变通知我。

Happy Vimming!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/easwy-vimrc-and-vim-settings/

文章的脚注信息由WordPress的wp-posturl插件自动生成

使用Scala + sbt + sbt-android-plugin开发Android应用程序

开发Android程序通常所使用的语言是Java,但Scala做为一种有希望替代Java的语言,也逐渐被越来越多的Android者所熟悉。本文简要的介绍如何使用Scalasbt工具(Simple Build Tool)及sbt-android-plugin创建,编译,安装运行一个简单的Android程序。

  1. 环境准备

    Easwy的开发环境搭建在Ubuntu 10.04.3上,所以第一步是安装Ubuntu,具体过程略过。

    然后需要下载Android SDK,这一步可以参考文档Download the Android SDK完成。

    接下来在Ubuntu里安装Sun Java JDK,如果你使用OpenJDK,可以跳过这一步。首先去掉/etc/apt/sources.list中这两行前的注释,使能Java 6源:

    $ sudo vim /etc/apt/sources.list
    deb http://archive.canonical.com/ubuntu lucid partner
    deb-src http://archive.canonical.com/ubuntu lucid partner 

    然后安装Java 6 JDK:

    $ sudo aptitude install sun-java6-jdk 
  2. 安装Scala、sbt和sbt-android-plugin

    首先安装Scala。到Scala Download Page下载Scala,Easwy下载的是Scala 2.9.1的IzPack Installer,下载后执行:

    $ java -jar scala-2.9.1.final-installer.jar 

    按提示安装即可。

    然后安装sbt。到sbt wiki上下载sbt-launch.jar,然后创建一个脚本来调用它:

    $ vim ~/bin/sbt
    java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"
    
    $ chmod u+x ~/bin/sbt 

    最后安装sbt-android-plugin。因为sbt-android-plugin还在开发中,在此Easwy直接checkout它的源代码,然后安装在本地:

    $ git clone git://github.com/jberkel/android-plugin.git
    $ cd android-plugin
    $ sbt publish-local 

    sbt在第一次运行时会下载它所依赖的包,耗时会久一些,此过程只需进行一次。

  3. 自动生成Android应用程序框架

    设置好上面的环境后,可以使用sbt-android-plugin来自动生成一个简单的Android应用程序框架。插件的作者推荐使用一个名为giter8的模板工具来生成框架。首先需要下载giter8工具:

    $ cd ~/bin
    $ curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
    $ ~/bin/cs n8han/giter8 

    这几条命令会下载一些它们所需的包,需要一些时间。接下来就可以用giter8工具,根据指定的模板自动生成一个Android应用程序:

    $ ~/bin/g8 jberkel/android-app
    
    Template for Android apps in Scala
    
    package [my.android.project]: com.easwy.projects.helloworld
    name [My Android Project]: Hello World
    main_activity [MainActivity]:
    scala_version [2.9.1]:
    api_level [10]:
    useProguard [true]:
    
    Applied jberkel/android-app.g8 in hello-world 

    这条命令会提示你输入一些参数,然后根据你输入的参数生成一个Android应用程序的框架。

    事实上,此命令直接找到保存在github.com上的模板,然后根据模板生成Android应用程序的目录框架。在本例中所使用的模板是jberkel/android-app。你也可以自己创建一套模板,生成更适合自己的目录框架。

  4. 编译、安装、运行Android程序

    由上面的模板生成的Android应用程序,其实就是一个简单的“Hello World!”应用,你可以直接编译、安装、运行它。

    首先进入sbt的交互模式:

    $ cd hello-world
    $ export ANDROID_SDK_ROOT=~/bin/android-sdk-linux_86
    $ sbt

    开始编译:

    > android:package-debug 

    然后用下面的命令启动你的Android模拟器(如果你还没有模拟器,参考Managing Virtual Devices创建一个):

    > android:emulator-start api10

    上面的命令启动了名为api10的模拟器,下面安装运行我们编译出来的Hello World程序:

     > android:start-emulator 

    现在可以看到Hello World程序已经在api10 emulator中运行了。

在后续的文章中,Easwy会继续介绍使用Scala开发Android程序的心得。

更多内容,请阅读易水博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/using-scala-sbt-for-android-development/

文章的脚注信息由WordPress的wp-posturl插件自动生成

在CentOS 5上安装Ubuntu KVM虚拟机

Linux下免费的虚拟化技术主要有KVM和XEN两种。KVM已经合入了Linux标准内核,也获得了诸如RedHat RHEL、Ubuntu这样的Linux发行版的支持,可以预见在未来KVM应该会成为Linux虚拟化技术的主流。只是KVM需要硬件虚拟化技术的支持,如果你的CPU不支持硬件虚拟化技术,那么只能使用XEN。

本文记录了Easwy在CentOS 5.7上安装Ubuntu KVM虚拟机的过程。

  1. 环境检查

    首先需要检查一下你的CPU是否支持硬件虚拟化技术(Hardware Vitualization):

    egrep '(vmx|svm)' --color=always /proc/cpuinfo 

    如果在你的计算机上没有任何输出,那么说明你的CPU不支持硬件虚拟化技术,也就无法使用KVM。

    另外需要注意的是,在CentOS 5.4版本以后,只有64位的CentOS才支持KVM,具体原因不清楚,所以如果你是32位的CentOS,暂时也无法使用KVM。

  2. 安装KVM

    检查完环境后,我们开始安装并激活KVM。

    首先,将SELinux的配置更改为Permissive,因为virt-install不支持SELinux为disable

    [root@srv-easwy ~]# system-config-securitylevel 

    然后安装kvm及其它虚拟化相关的软件:

    [root@srv-easwy ~]# yum install kvm kmod-kvm libvirt python-virtinst virt-manager

    接下来需要重启系统,在启动完成后,你应该可以看到KVM内核模块已经被加载了:

    [root@srv-easwy ~]# lsmod |grep kvm
    kvm_intel              85256  1
    kvm                   224800  2 ksm,kvm_intel 

    可以通过下面的命令看看KVM是不是真正运行了:

    [root@srv-easwy ~]# virsh -c qemu:///system list
    Id Name                 State
    ----------------------------------
    
    [root@srv-easwy ~]# 
  3. 配置网络

    现在配置一个网桥,以便虚拟机可以访问网络。首先安装所需的工具:

    [root@srv-easwy ~]# yum install bridge-utils 

    新创建一个文件/etc/sysconfig/network-scripts/ifcfg-br0,其内容为:

    DEVICE=br0
    TYPE=Bridge
    BOOTPROTO=dhcp
    ONBOOT=yes 

    上面的文件配置此网桥以DHCP方式获取IP地址。接下来修改原来的网卡配置/etc/sysconfig/network-scripts/ifcfg-eth0,修改为:

    DEVICE=eth0
    HWADDR=B8:AC:6F:89:10:76
    ONBOOT=yes
    BRIDGE=br0 

    然后重启网络配置,查看一下:

    [root@srv-easwy ~]# /etc/init.d/network restart
    [root@srv-easwy ~]# ifconfig
    br0       Link encap:Ethernet  HWaddr B8:AC:6F:89:10:76
              inet addr:172.23.5.50  Bcast:172.23.5.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:3242738 errors:0 dropped:0 overruns:0 frame:0
              TX packets:702638 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:1057883287 (1008.8 MiB)  TX bytes:448735998 (427.9 MiB)
    
    eth0      Link encap:Ethernet  HWaddr B8:AC:6F:89:10:76
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:3445641 errors:0 dropped:0 overruns:0 frame:93
              TX packets:670754 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:1201230368 (1.1 GiB)  TX bytes:239453000 (228.3 MiB)
              Interrupt:177 Memory:f3de0000-f3df0000
    
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:63582 errors:0 dropped:0 overruns:0 frame:0
              TX packets:63582 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:154537675 (147.3 MiB)  TX bytes:154537675 (147.3 MiB)
    
    virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
              inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:1797 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:0 (0.0 b)  TX bytes:470443 (459.4 KiB)
          
  4. 安装虚拟机

    基于磁盘逻辑卷管理(LVM)的虚拟机会拥有较好的磁盘I/O性能,所以在此处Easwy安装了基于LVM的虚拟机。如果你对LVM并不熟悉,可以参考我的Linux逻辑卷管理器(LVM)学习笔记

    Easwy在安装时已经在逻辑卷组中预留了部分未用空间,所以此处直接在卷组vg0中创建一个逻辑卷ubuntu,并分配了332G的空间:

    [root@srv-easwy ~]# lvcreate -L32G -n ubuntu vg0 

    接下来使用virt-install安装Ubuntu虚拟机,在此处直接使用Ubuntu的ISO文件做为源,将其安装到新创建的逻辑卷/dev/vg0/ubuntu中:

    [root@srv-easwy ~]# virt-install --connect qemu:///system -n ubuntu -r 1024 --vcpus=2 -f /dev/vg0/ubuntu -c ~/Download/ubuntu/ubuntu-10.04.3-desktop-amd64.iso --vnc --os-type linux --os-variant generic26 --accelerate --network=bridge:br0 --hvm --noautoconsole

    执行完此命令后,KVM虚拟机会使用Ubuntu的ISO文件启动,我们需要启动virt-manager,连接到此虚拟机,继续完成安装过程。这和安装真正的Linux操作系统完全一样,不再赘述。

现在,基本KVM的Ubuntu虚拟机就完全运行起来了。如果你对此还有疑问,欢迎留言。另外,参考文档中的链接也许对你也很有帮助。

更多内容,请阅读易水博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/centos-kvm-virtulization-ubuntu-guest/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux逻辑卷管理器(LVM)学习笔记

通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM),用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘,也可以提高I/O操作的性能,以及提供冗余保护,它的快照功能允许用户对逻辑卷进行实时的备份。

对一般用户来讲,使用最多的是动态调整文件系统大小的功能。这样,你在分区时就不必为如何设置分区的大小而烦恼,只要在硬盘中预留出部分空闲空间,然后根据系统的使用情况,动态调整分区大小。

以下内容总结了Easwy对于LVM的理解。

在LVM中,主要有三个概念:

  • 物理卷(Physical Volume, PV): 物理卷可以是一个磁盘,也可以是磁盘中的一个分区。它为LVM提供了存储介质。
  • 逻辑卷组(Logical Volume Group, LVG): 可以把逻辑卷组想象成一个存储池,或者是逻辑硬盘。物理卷与物理卷在硬件上可以是不连续的,但把多个物理卷加入逻辑卷组后,就可以把这个逻辑卷组看成一个存储空间连续的逻辑硬盘,在这块硬盘上,可以创建多个逻辑卷(LV)。
  • 逻辑卷(Logical Volume, LV): 可以将卷组划分成若干个逻辑卷,相当于在逻辑硬盘上划分出几个逻辑分区,每个逻辑分区上都可以创建具体的文件系统。

到这里我们可以看出,原本是直接在硬盘上创建分区,然后在分区上创建文件系统。使用了LVM后,在其中插入一个逻辑层,相当于是在一块逻辑硬盘上创建逻辑分区,然后在逻辑分区上创建文件系统。

新插入一个逻辑层,对单个硬盘的读写会有一定的性能损失,但其带来的好处是巨大的。首先,逻辑分区大小不再受硬盘实际大小的限制,它可以扩展到几块硬盘上;其次,逻辑分区可以很方便的做调整大小、备份等维护操作;而且,如果系统中存在多块硬盘,通过设置逻辑卷到物理卷的映射关系(采用LVM striped mapping),可以提高I/O的读写性能,因为此时的读写是在多块硬盘上并发进行的,比对单个硬盘的读写显然要快很多。

下面是一个LVM使用的例子:

Linux下逻辑卷管理器(LVM)示例
Linux下逻辑卷管理器(LVM)的一个例子

在图中有两块硬盘,其中硬盘1分了两个分区,/dev/sda1/dev/sda2,硬盘2没有创建分区。接下来在/dev/sda2/dev/sdb上创建物理卷,然后把这两个物理卷加入到逻辑卷组vg0中,现在,逻辑卷组vg0看起来像一块很大的逻辑硬盘,然后在其中创建两个逻辑卷/dev/vg0/lv0/dev/vg0/lv1

最后,分别在/dev/sda1/dev/vg0/lv0/dev/vg0/lv1上创建文件系统,并分别把它们挂载到文件系统树中。这样看上去,逻辑卷是不是很像是一个逻辑的分区?

在逻辑卷组vg0中,还预留有一部分空间未用,如果在使用中发现某个逻辑卷空间不够用了,可以在不停机的情况下,直接调整逻辑卷及其上的文件系统的大小。对服务器来讲,这是简单但非常有用的功能。

更多内容,请阅读易水博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/linux-lvm-learning-notes/

文章的脚注信息由WordPress的wp-posturl插件自动生成

WP-PostURL 2.1.0发布

WP-PostURL插件2.1.0正式发布,欢迎大家使用。2.x系列版本主要增加了一个新功能,允许用户针对单篇文章进行控制,决定哪篇文章显示/不显示Header及Footer文本。这一功能在转载文章会比较有用。你在新建或编辑文章时,会看到“是否添加链接?”选项,设置此选项为“是”,则为此篇文章添加Header及Footer文本;反之,则不显示。这个选项会为你的文章增加一个名为”posturl_add_url”的自定义字段,其值是”yes”或”no”。

对那些以前发表的文章,由于没有这个自定义字段,所以在2.1.0版本新增了一个名为“给以前发表的文章添加自定义文本”的选项。如果你选中此选项,那么所有未定义”posturl_add_url”字段的文章,都会显示Header/Footer文本。如果你不想为其中的某些文章显示Header/Footer文本,你需要手动设置一下这些文章的“是否添加链接?”选项。如果你没有选中“给以前发表的文章添加自定义文本”选项,那么没有”posturl_add_url”的自定义字段的文章,都不会显示Header/Footer,如果你想用其中的某些文章显示,也需要手动设置一下该文章的“是否添加链接?”选项。

由于WordPress在最近的修改中,升级插件时不再调用Activation Hook,导致整个2.0.x版本中,“给以前发表的文章添加自定义文本”这一选项的值未设定,这也是很多人升级后发现链接显示不出来的原因。如果你遇到了这个问题,请尽快升级到最新的2.1.0版本。另外一个解决办法是,你可以先停用“添加文章链接”插件,然后再次手动激活;或者直接修改插件的配置,选中“给以前发表的文章添加自定义文本”选项(在2.0和2.0.1中,这一选项的名称为“缺省添加文章链接”)。

如果大家还有什么新的需求,请在Add Post URL插件主页上留言。如果在使用中有什么疑惑,也请留言。

有兴趣大家可以阅读一下这两篇文章,充分发挥Add Post URL的强大功能这篇文章介绍了如何用Add Post URL插件来为你的文章添加一个订阅地址,利用WP-PostURL插件对博客添加多语言支持则巧用Add Port URL插件,利用Google的在线翻译,为文章添加多种语言的支持。

另外,对大家帮助推广WP-PostURL插件表示感谢,希望大家喜欢这个插件。

顺祝大家新年快乐,龙年吉祥!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/add-post-url-2-1-0-published/

文章的脚注信息由WordPress的wp-posturl插件自动生成

在Linux上使用adb访问魅族M9手机

在windows上通过adb访问M9很简单,WinXP用户到魅族 M9 产品支持 下载USB驱动,安装后就可以通过adb访问M9了。似乎Win 7能直接识别M9,不需要手动安装驱动。

要在Linux上访问魅族M9手机,并不需要安装驱动,不过需要设置一下udev。以root身份增加一个文件/etc/udev/rules.d/51-android.rules,内容如下:

SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="18d1", MODE="0666" 

这个文件需要对所有用户可读,执行一下下面的命令:

chmod a+r /etc/udev/rules.d/51-android.rules

然后就可以通过USB线把M9手机连接到Linux,通过adb可以检测到M9:

$ platform-tools> ./adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
M9W1B00AKAP5NU1064	device

这种方法在Ubuntu 10.04及Centos 5.3上都可以正常工作,不过似乎是第一句在Ubuntu中生效,第二句在CentOS中生效。我比较奇怪的一点是,18d1是Google公司的USB vendor ID,为什么魅族不用自己的vendor ID呢?

更多文章,请访问易水博客

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/connect-meizu-m9-to-linux/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Easwy的网摘(2010-11-18)

本文是Easwy的网摘(2010-11-18),根据Delicious中的收藏自动生成:

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/bookmark-of-delicious-2010-11-18/

文章的脚注信息由WordPress的wp-posturl插件自动生成