刚才有网友来信询问我的vim配置,我在很久以前已经把我的所有vim配置上传到github了,有兴趣的朋友可以在Easwy的Github共享找到我最新的.vimrc和整个的.vim目录。
你可以点此下载Easwy的vimrc,如果你了解git,你也可以使用git命令下载整个版本历史:
git clone https://github.com/easwy/share.git
用这种方式,你可以随时跟踪我的最新修改,或者把你对vimrc的改变通知我。
Happy Vimming!
刚才有网友来信询问我的vim配置,我在很久以前已经把我的所有vim配置上传到github了,有兴趣的朋友可以在Easwy的Github共享找到我最新的.vimrc和整个的.vim目录。
你可以点此下载Easwy的vimrc,如果你了解git,你也可以使用git命令下载整个版本历史:
git clone https://github.com/easwy/share.git
用这种方式,你可以随时跟踪我的最新修改,或者把你对vimrc的改变通知我。
Happy Vimming!
开发Android程序通常所使用的语言是Java,但Scala做为一种有希望替代Java的语言,也逐渐被越来越多的Android者所熟悉。本文简要的介绍如何使用Scala的sbt工具(Simple Build Tool)及sbt-android-plugin创建,编译,安装运行一个简单的Android程序。
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
首先安装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在第一次运行时会下载它所依赖的包,耗时会久一些,此过程只需进行一次。
设置好上面的环境后,可以使用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。你也可以自己创建一套模板,生成更适合自己的目录框架。
由上面的模板生成的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程序的心得。
更多内容,请阅读易水博客上的其它文章。
[ 参考文档 ]
Linux下免费的虚拟化技术主要有KVM和XEN两种。KVM已经合入了Linux标准内核,也获得了诸如RedHat RHEL、Ubuntu这样的Linux发行版的支持,可以预见在未来KVM应该会成为Linux虚拟化技术的主流。只是KVM需要硬件虚拟化技术的支持,如果你的CPU不支持硬件虚拟化技术,那么只能使用XEN。
本文记录了Easwy在CentOS 5.7上安装Ubuntu KVM虚拟机的过程。
首先需要检查一下你的CPU是否支持硬件虚拟化技术(Hardware Vitualization):
egrep '(vmx|svm)' --color=always /proc/cpuinfo
如果在你的计算机上没有任何输出,那么说明你的CPU不支持硬件虚拟化技术,也就无法使用KVM。
另外需要注意的是,在CentOS 5.4版本以后,只有64位的CentOS才支持KVM,具体原因不清楚,所以如果你是32位的CentOS,暂时也无法使用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 ~]#
现在配置一个网桥,以便虚拟机可以访问网络。首先安装所需的工具:
[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)
基于磁盘逻辑卷管理(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虚拟机就完全运行起来了。如果你对此还有疑问,欢迎留言。另外,参考文档中的链接也许对你也很有帮助。
更多内容,请阅读易水博客上的其它文章。
[ 参考文档 ]
通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM),用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘,也可以提高I/O操作的性能,以及提供冗余保护,它的快照功能允许用户对逻辑卷进行实时的备份。
对一般用户来讲,使用最多的是动态调整文件系统大小的功能。这样,你在分区时就不必为如何设置分区的大小而烦恼,只要在硬盘中预留出部分空闲空间,然后根据系统的使用情况,动态调整分区大小。
以下内容总结了Easwy对于LVM的理解。
在LVM中,主要有三个概念:
到这里我们可以看出,原本是直接在硬盘上创建分区,然后在分区上创建文件系统。使用了LVM后,在其中插入一个逻辑层,相当于是在一块逻辑硬盘上创建逻辑分区,然后在逻辑分区上创建文件系统。
新插入一个逻辑层,对单个硬盘的读写会有一定的性能损失,但其带来的好处是巨大的。首先,逻辑分区大小不再受硬盘实际大小的限制,它可以扩展到几块硬盘上;其次,逻辑分区可以很方便的做调整大小、备份等维护操作;而且,如果系统中存在多块硬盘,通过设置逻辑卷到物理卷的映射关系(采用LVM striped mapping),可以提高I/O的读写性能,因为此时的读写是在多块硬盘上并发进行的,比对单个硬盘的读写显然要快很多。
下面是一个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中,还预留有一部分空间未用,如果在使用中发现某个逻辑卷空间不够用了,可以在不停机的情况下,直接调整逻辑卷及其上的文件系统的大小。对服务器来讲,这是简单但非常有用的功能。
更多内容,请阅读易水博客上的其它文章。
[ 参考文档 ]
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插件表示感谢,希望大家喜欢这个插件。
顺祝大家新年快乐,龙年吉祥!
在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呢?
更多文章,请访问易水博客。
[ 参考文档 ]
本文是Easwy的网摘(2010-11-18),根据Delicious中的收藏自动生成:
500 Internal Server Error
500 Internal Server Error
里面有一些GDB的使用技巧
关于android中adb/fastboot/bootloader的入门贴
Android的Fastboot模式,包含G1的分区
关于Android的Fastboot模式
500 Internal Server Error
500 Internal Server Error
一个iphone开发者的感言,值得一读
500 Internal Server Error
500 Internal Server Error
500 Internal Server Error
介绍如何使用Debian/Ubuntu中的update-alternative程序
web设计网站,有很多非常好的文章
Thinkwiki上关于Thinkpad T400的资源
如何维护Thinkpad的电池
一本git的书,有中文版本。使用git必读
How to manage battery of Thinkpad in Linux
介绍android启动的过程
介绍如何获得android的root权限,利用了漏洞
500 Internal Server Error
CyanogenMod项目代码库
xda开发者论坛
CyanogenMod是一个第三方的Android ROM
500 Internal Server Error
该文列出了学习NoSQL技术的一些资料
500 Internal Server Error
网页设计过程实例
WEB前端设计相关的文章
500 Internal Server Error
在实际项目中使用scala的经验总结
以图形的方式组织的vim命令速查手册,vi初学者可以看看
500 Internal Server Error
500 Internal Server Error
500 Internal Server Error
前几天下载了Android 2.3.1的源代码并在Ubuntu 10.04(32位)上编译通过。这篇文章简要记录了下载、编译的过程。
关于搭建Android开发环境的文章已经有很多,本文只简要介绍一下,做为备忘。
[ 编译前的准备 ]
这一步安装获取源代码以及编译所需要的软件,使用如下命令:
$ sudo aptitude install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
另外,参考别人编译Android 2.3的经验,安装了下列软件包:
$ sudo apt-get install lib64z1-dev libc6-dev-amd64 g++-multilib lib64stdc++6
虽然Android官方网站上讲不支持Java 6,不过我使用Java 6也可以编译通过,所以在这里Easwy安装的是Java 6。首先去掉/etc/apt/sources.list中这两行的注释,使能Java 6源:
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
接下来下载repo工具,这是Google提供的一个Python脚本,方便管理多个Git版本库:
$ cd ~ $ mkdir bin $ curl http://android.git.kernel.org/repo >~/bin/repo $ chmod a+x ~/bin/repo
记得把repo加到你的路径中,方便以后使用。编辑~/.bashrc,加入下面一行:
PATH=$PATH:~/bin export PATH
然后用命令. ~/.bashrc,以后就可以直接使用repo命令了。
接下来获取Android 2.3.1的源代码:
$ mkdir mydroid $ cd mydroid $ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.1_r1 $ repo sync
[ 编译Android ]
接下来开始编译:
$ make -j`grep '^processor' /proc/cpuinfo | wc -l`
上面的命令中,-j参数告诉make启动多个并行任务进行编译,在支持多核的CPU上能加快编译速度。如果你知道你CPU是几核的,可以直接把这部分替换成-j2(双核)。
我在编译的过程中遇到下面的错误:
************************************************************
You are attempting to build on a 32-bit system.
Only 64-bit build environments are supported beyond froyo/2.2.
************************************************************
这是因为在Makefile中检测了CPU的字长。我直接把build/core/main.mk中下面的话注释掉:
#ifneq (64,$(findstring 64,$(build_arch))) #$(warning ************************************************************) #$(warning You are attempting to build on a 32-bit system.) #$(warning Only 64-bit build environments are supported beyond froyo/2.2.) #$(warning ************************************************************) #$(error stop) #endif
接下来又遇到下面的错误:
Docs droiddoc: out/target/common/docs/api-stubs
Could not load ‘clearsilver-jni’
java.library.path = out/host/linux-x86/lib
make: *** [out/target/common/docs/api-stubs-timestamp] Error 45
make: *** Waiting for unfinished jobs….
Could not load ‘clearsilver-jni’
java.library.path = out/host/linux-x86/lib
make: *** [out/target/common/docs/doc-comment-check-timestamp] Error 45
这是由于clearsilver在编译时如果检测到使用Java JDK 6,就使用64位编译。要避开此错误,需要修改下面四个文件:
把这四个Makefile中的下列语句注掉即可:
# This forces a 64-bit build for Java6 # Comment by Easwy # LOCAL_CFLAGS += -m64 # LOCAL_LDFLAGS += -m64
然后在external/clearsilver目录中执行一下make clean,然后回到项目根目录,继续make即可。
当编译完成时,生成的image文件放在out/target/product/generic目录中。
更多内容,请阅读易水博客上的其它文章。
[ 参考文档 ]