Tuesday, April 28, 2009

Ubuntu enable bash completion

vim /etc/bash.bashrc


# enable bash completion in interactive shells
#if [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
#fi


改成
# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi


如果要考虑移植到别的发行版里面可能有些麻烦,我在RHEL5上面测试了不成功,错误提示找不到
./etc/bash_completion
哪位仁兄做到了给说阿,以后能省事不少。

Wednesday, March 04, 2009

解决Sendmail和NIS配置出failed to send 'clear' to local ypserv: RPC:的问题

这两件东西得一起说,前一段时间解决了sendmail开机胡慢的问题,因为改了/etc/sysconfig/network 里面的hostname,开机的时候sendmail需要很长时间来处理,解决的办法是更改/etc/hosts 里面
127.0.0.1 localhost.localdomain localhost

127.0.0.1 yourhostname.localdomain yourhostname
但现在发现这样改在建立nis数据库的时候总是会出这样的错误:

failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating passwd.byuid...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating group.byname...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating group.bygid...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating hosts.byname...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating hosts.byaddr...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating rpc.byname...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating rpc.bynumber...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating services.byname...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating services.byservicename...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating netid.byname...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating protocols.bynumber...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating protocols.byname...
failed to send 'clear' to local ypserv: RPC: Unknown hostUpdating mail.aliases...
failed to send 'clear' to local ypserv: RPC: Unknown hostgmake[1]: Leaving directory `/var/yp/test'

这个问题我找了很久都没有解决,自己试验了n多次才搞定。解决方法:
更改hosts文件的时候必须保留以前的
127.0.0.1 localhost.localdomain localhost
位置前后没有关系。

下面给出配置的步骤,很简单:

一、查看包安装情况

# rpm -qa grep portmap
portmap-4.0-65.2.2.1


# rpm -qa grep ^yp (这个^是转义字符,什么意思做下试验去掉看看不同就知道了)
ypbind-1.19-8.el5
yp-tools-2.9-0.1

发现没有安装ypserv

二、安装ypserv

# yum -y install ypserv
三、配置NISDOMAIN

# vim /etc/sysconfig/network
加入一行
NISDOMAIN=test (这个名字可以随便起)

四、启动服务以及建立数据库

# service ypserv start
Stopping YP server services: [ OK ]
Starting YP server services: [ OK ]

检查一下nisdomain配置好了没

# ypdomainname
test

OK,这里提一句,如果更改了NIASDOAMIN的内容需要使用

# ypdomainname -y NewNISdomainname
才能生效

生成数据库:

# /usr/lib/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. cp2.localdomain is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a .
next host to add: cp2.localdomain
next host to add:

按下control+D

The current list of NIS servers looks like this:

cp2.localdomain

Is this correct? [y/n: y]

按下y回车

正常的话会显示:

We need a few minutes to build the databases...
Building /var/yp/test/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/test'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: Leaving directory `/var/yp/test'

cp2.localdomain has been set up as a NIS master server.

Now you can run ypinit -s cp2.localdomain on all slave server.

如果出现上面的错误就得检查一下你的hosts文件了

客户端连接的时候打开setup 选择里面的Authentication configuration 选择Use NIS 输入相关配置就好了。

希望这篇文章对您有帮助,如果遇到问题请留言或和我联系。

Sunday, February 15, 2009

RHCE 02-15 随堂笔记

今天上午课内容好多,不过下午老师有事不来了就把所有内容都练了一遍,觉得已经比较熟练,总结一点点经验。错误出了很多,不过在老师的帮助下还是全部都解决了。
  • rpm的一点点常用指令选项
# rpm -q name -- 查看name是否安装
# rpm -qa name -- 在所有包中查看name是否安装
# rpm -qf /bin/more -- 查看more文件的依赖关系 (如本例中的/bin/more 包是依赖于util-linux-2.13-0.44.el5)
# rpm -ql -- 查看一个已经安装过的rpm包的详细资料
# rpm -qpl -- 查看一个没有安装的rpm包的详细资料
.....对于rpm的使用方法网上有很多文章介绍,这里不再赘述。
  • Linux内核模块 -- 即驱动
Linux 的内核模块存在于 /lib/modules/$(uname -r) -- "$(uname -r)" 是你现在所使用的内核名常量,相当于执行 uname -r 后把得到的内容加到 /lib/modules/$(uname -r) 的结果。
# lsmod 指令能够列出系统中存在的模块。
# modprobe dm_zero 指令能够安装"dm_zero模块"
# rmmod dm_zero 指令能够卸载"dm_zero模块"
# modinfo bluetooth 指令能够查看"bluetooth"模块的详细信息
模块能够从其他的匹配机器上复制过来使用。
  • 修复Linux启动错误的实验
这个实验可以自己自定义很多种不同的情况,毕竟现在创造出来问题解决掉比将来遇到问题解决不了要好很多。

1.删除/boot/initrd-2.6.18-8.el5xen.img 的映像文件并想办法修复(映像文件名称可能不一样,取决于你所用内核。)
解决方法:使用和本地系统同版本的光盘引导系统,在开机显示boot:那里输入linux rescue 并敲回车。
进入以后会给你一个很简陋的shell,再完成之后他会告诉你本地系统被挂在到哪个文件夹(似乎是/mnt/sysimages/什么什么),按照他的提示chroot到你本地系统中:
# chroot /mnt/sysimages/blabla/
这时你就有了执行本地操作系统里面程序的权限,相当于是用光盘引导进入了本地电脑中。
接下来自己建立一个映像文件:
# mkinitrd /boot/initrd-$(uname -r)xen.img $(uname -r)xen
这条命令有几点需要注意:
1.他于一般的命令不同,目标文件在前面也就是建立的影像文件会放到/boot 中。2.initrd-$(uname -r)xen.img 的解释同这篇文章第二部分。
3.本机系统内核必须与光盘系统内核完全匹配,不然是没办法生成的。
以上是通过光盘的方法进行修复,当然我们也可以借助网络的办法修复。
在开机的时候选择网络引导,进行配置引导进入另一台含有与本地系统同版本yum仓库的电脑。
同样在boot:里面输入rescue(这里需要在含有yum仓库电脑配置使支持在启动时进入rescue模式,比较复杂,没和老师学来,等学会再发)。
然后可能过程有点像是安装,但是其实最后会让你进入rescue模式的。
剩下的过程和光盘引导修复的方法一样,不再赘述。

2.错误的LABEL和grub.conf 配置文件
这个实验是当grub.conf 定义root目录时使用LABEL标签但系统中错误指定或者没有指定LABEL标签内容导致无法引导系统。
比如我们使用
# e2label /dev/VolGroup00/LogVol00 abc
错误的指定/dev/VolGroup00/LogVol00 到abc目录,但是abc目录并非系统主目录"/"
并且我们在grub.conf 中错误的配置了root=LABEL=abc 或者root=LABEL=/etc 一类的,总之root=后面的LABEL并非存在的标签或者标签定义到错误的根目录。
解决方法:首先用上例的办法引导并用chroot切换到本地系统。
然后使用
# more /etc/fstab
查看本地系统磁盘挂载情况
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
可以见得/dev/VolGroup00/LogVol00 是我的主目录对应的分区。
然后用
# e2label /dev/VolGroup00/LogVol00 /
指定主目录 "/" 指向分区/dev/VolGroup00/LogVol00
然后在/boot/grub/grub.conf 中修改对应的root值,可以修改成:
root=/dev/VolGroup00/LogVol00 或者
root=LABEL=/
这样系统就可以启动了。
需要注意的是,如果系统是因为LABEL指定错误目录名并且grub.conf 中root定义错误而无法启动时,就算是在开机grub选单中更改了root=/dev/VolGroup00/LogVol00 用绝对路径也是访问不了系统的。他会卡在磁盘检测的时候,这时候按照提示输入管理员密码进入一个简单shell然后用e2label 更改错误的标签并重启才可以进入系统。

3.删除了MBR中的grub信息导致的无法启动
为了达到这样的效果我们需要编写一小段代码:
#!/bin/bash
dd if=/dev/zero of=/dev/sda bs=1 count=446
这段代码的意思是用/dev/zero 这段空代码覆盖到/dev/sda 也就是硬盘开头的446kb长度的内容。换句话说就是把MBR中的内容擦掉了。
注意:count=446一定不能更改,超过446一点都可能会把有用硬盘数据抹掉。
把上面那段代码保存为任意文件名,然后用
# chmod +x 文件名
加入可执行权限,再用
# ./文件名
执行这段代码并重新启动,就会发现在GRUB选单部分黑屏不动了。
解决方法:用光盘或者网络引导进入rescue模式,获得shell。执行
# grub-install /dev/sda
后面的/dev/sda 根据硬盘类型而定,SATA硬盘就是sda,IDE硬盘就是hda,第二块硬盘就是hdb或者sdb。
重启后就又可以引导系统了。

这类的实验还需要做很多,grub.conf 的内容也需要完全背下来,如果想在RHCE中考得满分的话。
  • Linux在网络中的应用
这段内容由于我没有网络方面的基础,听得有点晕,主要就是说Linux操作系统可以很方便的作为DNS、DCHP、路由器的等实现对公司开销的减省。老师讲的功能是:
更改hostname
用hostname查看并更改本机的别名
添加虚拟网卡
用 ifconfig eth0:0 IP地址 可以定义一个名为eth0:0的网卡并且指定IP地址,重启消失。
为了让他重启生效需要以下的步骤:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth0:0
# vi /ifcfg-eth0:0
删除掉其中的MAC地址那一行,改DEVICE=etho 的eth0为"ifcfg-" 后面接的那一部分,然后再自己定义一个IP地址就好了,格式为IPADDR=IP地址。
增加Linux路由器的功能
# vi /etc/sysctl.conf
更改net.ipv4.ip_forward = 0 的0 为1即可。
如果希望临时添加路由功能也可以利用/proc
# cat /proc/sys/net/ipv4/ip_forward
如果为0就表示没有开启,要开启不能编辑那个文件,需要echo进去:
# echo 1 > /proc/sys/net/ipv4/ip_forward
这样就好了,重启会失效。
为了让上面的命令配置立即生效的话需要用指令
# sysctl -p
  • 查看本机的caches
free命令可以查看到本机的caches,caches越大系统性能越好,如果想要把caches清空还是可以利用/proc
# echo 1 > /pro/sys/vm/drop_caches
这样系统caches就被drop掉了。
  • 学好mknod指令解决硬件问题
用mknod指令可以创建硬件设备文件,这个我没学好,+_+
  • vmstat只管查看系统性能情况
简单。
swapon -s 启用交换分区
这条命令和有些发行版的不太一样,需要-s 参数。
  • 查看用户登陆系统
uptime=w > who
  • tload查看系统负载
一样简单。
  • 对nfs和ftp在xen虚拟机安装时的认识
在网络安装的时候我们老容易犯错误,几乎都是把目录名称搞错。
在nfs使用的时候需要指定的目录名称是系统的绝对路径,比如/var/ftp/pub/rhel
而在ftp使用的时候需要指定的目录名称是系统的相对路径,也就是只用/pub/rhel就行了
而且在虚拟机已经启动了以后需要指定安装位置我们选择了ftp的话只用输入ftp的IP地址就行了,不能输入ftp:// 输了就会找不到地方的~~
好困=_=,明天开课了,祝愿我新学期能不那么辛苦~这周末再见!

Saturday, February 14, 2009

RHCE 02-14 随堂笔记

今天是我上的RHCE的第一堂课,看到RHCA的强大实力,顿时学习有了力量。超过前辈们就是我的目标!
把上课的内容小结一下。

上午是苏老师讲的131的第一章内容,下午吴老师抽讲了一些内容:
  • FTP和TFTP的区别
ftp使用的是TCP传输协议,可靠但是效率低,适用于广域网。
tftp就是简单的ftp,使用UDP协议,可靠性差但是效率高,适用于局域网。
  • 最基础的Linux就是initrd.img + vmlinuz
Linux == OS ==> kernel = initrd.img + vmlinuz
并且initrd是为了系统内核的稳定性建立的,是为了不把太多的东西加载到内核里面而独立出来的驱动。vmlinuz是Linux系统的主内核,包含常用驱动。
  • /proc强大
他可以做很多很夸张的事情,比如随意的断掉和连接一块硬盘,顶级的优化系统等,但是学起来很是恶心。
  • 老师排斥CDROM
感觉上老师是很能用MBA的人,他不喜欢用CDROM,所有的一切都是通过网络或者本地硬盘实现,他说用Live CD引导本地的安装用的指令是在boot: 后面输入 linux askmethod 这个以后我再研究,毕竟咱是菜鸟。
  • 关于First Boot
First Boot是老师觉得RedHat设计很不合理的一个地方,只有在图形安装时他才会出现,而且名为First Boot就是只有在第一次安装的时候才会用的上。因此后面学习优化系统的时候要把他从服务里面禁止掉。
  • Kdump是什么?
Kdump就是Kernel Dump,老师一开始把这个东西删除了,因为觉得没用,其实这个是超级有用的东西,可以用来排除内核错误,kernel死后他都能运行,可想如果木马以这种方式加载是何等的牛逼!~这个也是以后才用的着研究的东西。
  • 精简系统服务
简单的优化可以用setup命令里面的System services 设置就可以了。
以下服务一般去掉:
atd -- 自动化任务控制器,由于有了crond,所以老的就去掉了
bluetooth -- 蓝牙,我的电脑都没有,关掉是必须的
ip6tables -- ipv6的支持,我没有,所以关掉
isdn -- 几乎没人再用的上网方式,关掉
rhnsd -- 透过rhnsd服务器使RedHat保持最新状态,我当然没钱买这个了,所以用不找,关掉
sendmail -- 使用sendmail来发邮件,我都是用网页发邮件的,不用,关掉
yum -- update 学习用的RHEL嘛,更新还是我自己手动来做吧,省的不小心覆盖了以前修改的内容,关掉
  • 系统如何知道你的分区是可引导分区?
在可引导分区的第一扇区的最后两位上有诸如“0x55aa”的标记系统就知道这个是可引导的了。
  • grub引导
分为stage1和stage2,stage1有512kb
/boot/grub/stage1就是写在hd0里面的所有内容,有512kb大小,但是实际使用中是不用他的。
/boot/grub/ 中含有很多*_stage1_5 的文件,分别对应着不同的引导方式。
root=LABEL=/ 可以替换为 root/dev/sdax 也就是LABEL只是个标签,是可变的,用来替换绝对路径诸如/dev/sda1一类的。
rhgb是图形化启动
quiet是不显示内核加载的所有情况
  • 合理使用groupinstall
很多东西诸如Gnome、Virtualization需要使用
# yum groupinstall
来实现,这样才能完美使用。
  • 用rpm -ivh 而不用 rpm -uvh
-ivh是直接安装,以前的旧版本如果不冲突会保留,而-uvh参数安装为升级安装,会把以前的旧版本覆盖掉,诸如kernal的安装和编译的时候就需要使用-ivh安装以免编译失败造成无法使用和恢复。
  • partprobe的妙用
诸如在使用fdisk分完区以后需要重启,但是可以使用这条指令就可以不用重启也能应用新的分区方案。
  • NFS的简单配置
只要三个步骤:
# vim /etc/exports
填入:
/var/ftp/pub *(sync,ro)
即可,/var/ftp/pub 可以替换为需要的目录,*代表所有文件,sync代表同步,ro代表readonly
重启NFS:


如果需要载入nfs也是很简单的,有nfs可以淘汰ftp了:
# mount ip:目录 挂载到的目录
  • 提高效率的&
在需要很长时间执行的命令后面加上“ &”,里面是空格和&,回车后任务会在后台运行,输入jobs就会调出执行情况,执行完毕以后会有提示,在这期间你可以做别的任何事情。
  • 建立自己的yum仓库
在RHEL仓库中有诸如Server、VT、Cluster 等一类的文件夹,这些文件夹构成了RedHat的yum仓库。在没有RHN认证的情况下可以自己建立一个yum仓库使用,方法很简单,方法大同小异,下面以建立Server仓库为例。
Server里面包含有系统常用的一些服务程序,找到Server文件夹,cd进去。执行下面的安装指令:
# rpm -ivh creatrepo (按tab键补全后回车)
这个包使用来建立repodate文件夹中内容的。
接下来把yum仓库中的内容拷贝到本地电脑中,进入Server目录,执行:
# mv repodate repodate.bk (将repodate文件夹中内容转移到repodate.bk中相当于做一备份)
这时没有repodate文件夹了,所以要新建一个:
# mkdir repodate
cd进去,用createrepo指令建立一个新的repodate文件夹内容:
# createrepo -g repodate.bk/comps-rhel5-server-core.xml /var/ftp/pub/rhel/Server/
comps-rhel5-server-core.xml文件可能不叫这个名字,取决于你用的yum源版本,只要开头是comps的就行。/var/ftp/pub/rhel/Server/ 是你希望Server仓库存在于你系统中的位置。

这时一个Server的仓库就建立好了,剩下的VT等都可以通过这种方式建立。
然后你可以使用http或者ftp的方式发布给你的好友,通常建议使用http的方式,如果是局域网我们一般用ftp。
你的好友在使用是只要在/etc/yum.repos.d/ 中建立一个任何名字的.repo文件填入类似于下面的内容:
[Server]
name=Red Hat Enterprise Linux Server
baseurl=http://ftp.xalinux.org/rhel5.2/Server
enabled=1
gpgcheck=0

再yum clean all一下就好了
如果本机想使用本机上的yum源只要制定位置为file:///目录就可以了。
在新的RHEL5操作系统中gpgcheck如果设置为1就必须制定gpgkey的位置,一般在仓库主目录里面,也就是Server的上层目录中。详细内容还是Google一下为好。

以上是第一次上课学到东西的一点总结,有说的不对的地方您一定要指出!

Wednesday, February 11, 2009

西安昇旭的RHEL5更新源

今天老大给做了个RHEL5的源:

http://ftp.xalinux.org

是他通过自己的RHN账号登陆上服务器下载下来的。现在给出设置:

在/etc/yum.repos.d/ 目录下新建一个xalinux.repo的文件:

# vim /etc/yum.repos.d/xalinux.repo

写入以下内容:

[Cluster]
name=Red Hat Enterprise Linux $releasEVEr - $basearch - Cluster
baseurl=http://ftp.xalinux.org/rhel5.2/Cluster
enabled=1
gpgcheck=0

[ClusterStorage]
name=Red Hat Enterprise Linux $releasEVEr - $basearch - ClusterStorage
baseurl=http://ftp.xalinux.org/rhel5.2/ClusterStorage
enabled=1
gpgcheck=0

[Server]
name=Red Hat Enterprise Linux $releasEVEr - $basearch - Server
baseurl=http://ftp.xalinux.org/rhel5.2/Server
enabled=1
gpgcheck=0

[VT]
name=Red Hat Enterprise Linux $releasEVEr - $basearch - VT
baseurl=http://ftp.xalinux.org/rhel5.2/VT
enabled=1
gpgcheck=0


然后就可以享受和注册用户一样的待遇了~!

Tuesday, February 10, 2009

看看你的网站值多少钱

从别人那里看到一个有趣的网站可以查看你网站值多少钱:Stimator
这个博客的价值似乎很低很低饿:


看看我以前的博客(http://noodlejin.spaces.live.com):


发财咯,谁想要我8折出售拉!
本网站仅供娱乐,点击Check yours?进行测试


$5,295,704

Monday, February 09, 2009

中国Linux界的一些牛人

李亮,网名:holly,CCE现任维护人员,系上海交通大学毕业,目前在上海交通大学图书馆工作。对于CCE的分析、改写和维护起到了很大作用。另外还编写了若干Apache的模块,满足了某些特定要求。详情请访问http://programmer.lib.sjtu.edu.cn。

王剑,网名:Lark,GNOME/KDE/WindowMaker/GNU简体中文化(I18N/L10N)的领导者。目前所见到的各大中文发行套件当中缺省使用的桌面中文讯息皆为王剑先生所领导的zh_CN小组所完成。详情请访问http://i18n.linux.net.cn。

李振春,网名:shi,系自由拼音的作者。目前CCE-0.3x系列和Unicon系列以及Chinput系列所使用的智能拼音输入法模块皆直接来源于李振春先生的FreePY算法。详情请访问http://freepy.yeah.net。

邓煜(devin)、李凌(hahalee)、廖生苗(samuel)三剑客为蓝点Linux创始人,其首先实现(并非首先提出)的自内核使用FrameBuffer特性显示中文的技术开创了一个时代,为广大中文Linux爱好者提供了最好的中文Linux发行套件之一。详情请访问http://www.openunix.org。

赵蔚,网名:zhaow,是南京LUG领导人物,南京LUG是国内较早的LUG之一,他热心于技术和思想普及,目前为Debian中文计划的重量人物。

利启诚,网名:Mephisto,系清华大学电子工程系1994-1999年本科生,曾任水木清华BBS中Linux版斑竹,我个人认为他是历届Linux版斑竹中编程水平最高深之人物。曾经仅花费3天时间实现自TurboLinux中文版6.0开始使用的Unicon显示部分(输入法部分由马军老师实现),比起蓝点Linux的置入内核当中的zhcon更为安全;在极短时间内与智能启动管理器(SmartBootManager)作者苏哲合作,实现了光驱引导模块,此为全球第一个可以实现光驱引导的自由软件之启动管理器;参与InterMezo等国际项目,取得很好效果。

马军,网名:arthur,为北京Turbolinux公司研发工程师,系Unicon的原创作者之一,主攻Unicon之中文输入法部分,现在全面接管Unicon工作。详情请访问http://www.turbolinux.com.cn。

谢华刚,网名:vertex,系海南省海南中学毕业、清华大学热能系本科毕业和中科院计算所硕士研究生毕业,为国际项目LIDS(Linux入侵检测系统)创始人。详情请访问http://www.lids.org。

黄志伟,CLDP-中文Linux文档工程的领军人物,CLDP-LDP的中文版包括Linux HOWTO及mini-HOWTO中文文档,在整个中文地区广为流传。

章文嵩,系国际项目LVS(Linux虚拟服务器)创始人。详情请访问http://www.linuxvirtualserver.org/。

苏哲,网名:suzhe,现任水木清华Linux版斑竹,为国际项目SmartBootManager(智能启动管理器)原创者。曾多次撰稿宣传自由软件和Linux,并为社区贡献三个自由软件。其所创始之SBM据传将成为两个重要中文发行套件的默认系统启动管理器。详情请访问http://suzhe.gnuchina.org。

宫敏、张鹿,均为国内自由软件先驱和中坚人物,他们创建了著名的中国自由软件库站点。详情请访问http://freesoft.cei.gov.cn。

章峰,网名:fzhang,利索的脚(LisoLeg),即Linux源码学习小组领军人物,中国科技大学博士。组织《Linux设备驱动》的中文翻译版。对于国内Linux内核源码的研究起到不小的作用。详情请访问http://www.lisoleg.org。

何小波、陶品、郭海鹏、伏建军,为中国信息技术论坛AKA自由软件联盟创始人及主要人物,对于自由软件的宣传不遗余力。详情请访问http://www.aka.org.cn。

常晓光,北京Linux俱乐部发起人,为BJLC的创立和发展起到了领袖作用。详情请访问http://www.linuxchina.org。

袁萌:前实达朗新TomLinux总工,现为共创联盟软件总工,《Linux产业》/《共创软件》主编,是我国Linux界的旗手,大家都尊称他为袁老师,虽然他已经60几岁了,但他思想活跃,每天都会有新的思想在他的脑海中出现。

孙玉芳:中科红旗软件有限公司董事长,红旗Linux是国内一家由政府支持的Linux发行版本。

任一:冲浪平台软件有限公司总经理,国内第一家中文Linux发行版本公司XteamLinux的创始人。他有一句名言:做点COM经济的点。(http://www.XteamLinux.com.cn)

Iris Miller:TurboLinux公司的创始人,TurboLinux前任亚太区总裁。

洪峰:武汉荣世数据通讯有限公司总经理,是EasyLinux的中国代理,他所组织翻译的《开源软件文集》中文版一书,对于中国的自由软件发展产生了深远的影响,中国人从该书中感受了“开放源代码软件”对于整个IT产业的变革力量。(http://www.rons.net.cn)

倪光南:中科院院士,他积极呼吁政府及企业应该大力支持Linux在国内的发展。

于明俭:编程专家,Chinput汉字输入服务器软件项目的创始人。详情请访问http://yumingjian.home.china.com/或.../~yumingjian/。

陈向阳,网名:cxy,与方汉相似,曾任水木清华BBS中XWindow板斑竹,同样为Linux中文化立下汗马功劳,而且在打印方面属于专家级人物。在北京拓林思公司任职期间,参与开发TurboLinux中文版本。

方汉:网名:dfbb,技术和思想都很先进。曾任水木清华BBS中Linux板斑竹,为中文Linux的标准化规范贡献了巨大力量。在北京拓林思公司(TurboLinux北京公司)任职期间,所主持开发的TurboLinux中文版系列被认为是最好的中文Linux版本之一。 陈向阳和方汉合写的《Linux实用大全》一书,该书是国内较早的一本系统、全面、专业地介绍了Linux方方面面的知识,影响了一大批知识青年,带动了大家投身Linux事业的热情。原Turbolinux高级研发工程师,现为Mountain View Data公司员工。国内著名的Linux知名专家。详情请参考:http://www.mountainviewdata.com.cn/。

Rollaned,台湾LinuxFab的站长,LinuxFab是最早的一家中文Linux入口站点,现在访问该站的人气非常旺。(http://www.linuxFab.cx)

郑原忠,网名:小虫,著名的CLE-中文Linux延伸套件的领军人物。台湾很多繁体中文Linux套件使用了CLE,例如XLinux、Caldera OpenLinux、Linpus Linux等。

霍东灵,网名:Foka,Debian中文化工程的领导。

邓光磊:北京Linux俱乐部的前任会长,后来创建了中国Linux论坛,被《中国计算机报》评论为“中国自由软件的斗士”。(LinuxForum.net)

赵宇:北京Linux俱乐部现任主席;中国第一本Linux杂志《Linux世界》的前任主编;由他主持编撰出版过十余本Linux书籍。现为北京中科红旗软件有限公司平台事业部经理。

吴信全:陕西昇旭认证负责人,网名:心儿。国内仅有的几个RHCA持有者之一,年轻有为。致力于RedHat Linux中国地区的发展,现在正在进行分布式计算的研究。他的QQ群:16014261

Tuesday, February 03, 2009

Protestor Throws Shoe at Wen Jiabao at Cambridge University

FUck This Shit!

Saturday, January 31, 2009

牛年发现的第一件超级雷人的事

今天发现了一个超级雷人的事情,在g.cn搜索Google的第一款手机G1时返回的结果令人吃惊饿:



所有的搜索结果都提醒该网站可能含有恶意软件,有可能会危害您的电脑。

怎么回事,谁能给出一个解释啊?Google自己跟自己的产品过意不去么?

【更新】过了一会发现原来任意搜索关键字得到的搜索结果都成这样了,太夸张了吧。。。

点击Read More查看更多证据:





连Google这个关键词都被扣上了恶意网站的帽子饿!~~

小狗,这次让我抓着了吧~

以后点击搜索结果的时候可得小心了,这次Google应该删除了很多的恶意站点列表!

vsftpd出现 500 OOPS: cannot change directory:/home/icnpunk错误的解决

在配置vsftpd的时候连接vsftpd出现了
500 OOPS: cannot change directory:/home/icnpunk
的错误,icnpunk为登录时使用的本地用户名。
解决办法:
使用
# getsebool -a grep ftp
查看selinux中的ftp设置
如果发现
ftp_home_dir --> off
则使用
# setsebool -P ftp_home_dir on
这样就能解决无法打开本地文件夹的问题了。
我看网上有说用把ftpd_disable_trans 改为off的方法解决,自己测试了一下是不行的,而且ftpd_disable_trans为on时是拒绝传输,为off时才是允许。双重否定则为肯定,也不知道自己说的是不是适合所有的情况,我是在RHEL5中测试得到的结果。

Wednesday, January 28, 2009

Suggest a perfect webshell based on PHP-GNY.shell


After lots of work, GNY.Shell is ready to be released. It is based on Storm7Shell. GNY.Shell offers many new features, with a few listed below:
> Added IP:Port and PHP Proxy generation
> Removed all images (fewer entries in access logs)
> Added various scripts and loads more features
> Removed some unnecessary code
> Tons more for you to go test out the shell and find ;)

As you may notice, GNY.Shell is rather large at 569.85 KB. Personally, I see no difference in performance between this and smaller shells. Since I do know that many people will complain about the size, we have also created a "Lite Edition" with a few features removed to make a smaller version. This is not the one we are focusing on, and we will not release it unless there is an overwelming amount of feedback asking for it.
Also, GNY.Shell is unfortunately detected as a PHP Shell by various anti-virus programs. This is something that we could have tried harder to avoid (with code obfuscation), but releasing it without being encoded follows our belief in open-source. This way, anyone, even those who would have been unable to reverse the encoding, are able to see the source of GNY.Shell.

The shell is available here and below. To contact us in matters relating to the shell, you can find us in our IRC Channel and we will be happy to talk about whatever feedback you have. Thanks for taking the time to check out GNY.Shell, and we hope you enjoy it!

Shouts:
> sToRm - Various code, ideas, and support, along with Storm7Shell that GNY.Shell is based upon.
> oXiKoTToN - Ideas, support, testing, and being the "Project Manager" who helped get a lot of stuff done.
> Raz0r - Gave cPanel Finder source.
> Romnous - Gave RFI/LFI Finder source.
> Sean - Gave us a bunch of ideas at some point.
> RoMeO - After initial release, provided great feedback which resulted in some updates
> Everyone who ever worked on a shell of which GNY.Shell has been built upon (Storm7Shell, Locus7Shell, etc., etc.)
> Did I forget you? Lemme know and I will throw you in ;)


http://gonullyourself.org/shell.txt

Monday, January 26, 2009

杰伦和春晚

早上一起来上网,看到网上很多评论杰伦在春晚上被糟蹋的说法。争得是火热朝天,什么杰伦上春晚给春晚面子,给Jay迷面子什么的。真无聊啊,就算争这个又不能得到什么,杰伦也不会给你扣一个"最忠实Fans"的帽子,大家也不会觉得你很屌。看看你的热闹而已,最终乐呵的还是网站或者博客主。

杰伦在春晚上走着街舞步子拉着国母的手原地伴舞,估计是没出来国母的裙子有机关嘞。下面表演里面国母的裙子换过一次记得么,那个可能是为了防止露馅不敢走动吧。但是觉得杰伦那个节目好像是被切过了一样,好像没完人就不见了。

我不想争论什么春晚杰伦的对错一类问题,我对和杰伦一起的那个孩子挺感兴趣。他替他杰伦哥哥在哥哥状态不佳的时候唱了大半部分歌,还表演了那么多舞诶,我觉得这孩子有搞头。网上找了一下居然发现这孩子的博客了,可惜是腾讯的:http://user.qzone.qq.com/622009457 博客的名字叫侯高俊杰,进去一看原来比我来的早的人多了去了,这孩子很有才气啊~希望以后能大有出息,也希望没事喜欢争来争去的大孩子们争点气,对杰伦不服的超过杰伦,把他搞下去;对春晚不服的做到让春晚导演上你家门给你送礼然你上春晚。做到了以后你再说这个不好那个太垃圾的。真无趣!~

Friday, January 23, 2009

强烈推荐本年度最佳战争类游戏!使命召唤5-世界战争

从公元2008年11月22日下午4点30分开始,到公元2008年11月23日临晨3点28分。我的笔记本又一次见证了我强迫他为了一个他并不想要的东西头脑持续发热了十几个小时,这个“讨厌”的东西就是新安装的游戏:使命召唤5-世界战争。为什么我要在浪费了十多个小时玩通关他之后还要花费时间来写关于他的感言。这可以从几个方面来讲:

1、由Treyarch公司制作,Activision公司代理的2008年战争游戏巨作:使命召唤5-世界战争这款游戏记录了自1941年12月7日日本海军偷袭美军在太平洋的最大海军基地夏威夷美军参加二战开始,至1945年4月30日美国向日本投下两颗原子弹,第二次世界大战结束的这一漫长历史过程。具有很强的历史意义!

2、这款战争类游戏在画面和游戏可玩度上具有很高的人气,真实的体验战争过程,让人从出生入死中体味到了战争的残酷。感觉爽成马嘞!

3、虽然游戏中讲的是外军与日军、德军交战的过程,但是对于像我这种具有仇日心里的人能够在游戏中过过残杀日军的瘾还是非常解恨的。可以拿来发泄哦!

4、最后一条也是最变态的一条就是通关以后使命召唤为我们提供了一种僵尸模式,超级过瘾,尤其是在晚上玩。连我这种玩游戏从来不害怕的人今天都几次差点被吓晕过去。试试就知道!

这么多废话引出来今天的主角不难看出我对这款游戏的认可度。希望大家如果时间充足的话尽情体会一下这款游戏带来的前所未有的快感。以下请欣赏我在通关最后以及僵尸模式的截屏图片。

一把镰刀斧头的旗子

我拿着旗子走向旗杆时敌人向我开了一枪

他其实也不行了~~
战友提着一把刀就冲了过去

血腥的杀人场面

我左一刀

我右一刀

小样!

我背后再来一刀

啊~~~!!!!

下去把你!

哼~你敢上来?剧情让你死了已经!

奶奶的法西斯!

大爷我砍断你绳子

你也下去吧你!

我庄重地捧着旗子

来到了旗杆前

狠狠的插在了掩体上

乌拉乌拉~~

巴哈巴哈~~

Muhahahahah~~

战友激动地摆起了胜利的姿势

开始谢幕了

一堆堆鸟语没法跳过

这里是僵尸模式。什么?没有僵尸?我怕我放上来你说我吓你!

我的演讲到此结束,谢谢大家!~


Thursday, January 22, 2009

手动删除VMware-Player完全指南

今天安装了VMware-Player,但是Windows底下做的RHEL5系统不能打开,因此想要把它卸载了,但是我想着直接安装VMware Workstation应该就会自动删除了吧,谁知不但不自动删除,还因为在安装VW的时候第一个题是选项里点了no,因此不小心把VMware-Player的安装DB给删掉了,这下惨了,得手动删除了。后悔阿,其实如果没删除db的话用sudo vmware-uninstall.pl就可以删除,可是...后来在网上找了不多久问题就解决了,给出来以免以后再遇到同样的问题,同时也方便大家。

1、先用新立德找所有能找到的含有关键字“vmware”的包,注意看看地下的注释,不要删错了,如果实在不确定先不要删。

2、由于错误提示是:
The following VMware kernel modules have been found on your system that were
not installed by the VMware Installer. Please remove them then run this
installer again.

vmmon
vmblock
vmnet

Execution aborted.
因此我们的主要任务是删掉vmmon vmblock vmnet这三个kernel modules。因此先将这几个文件删除:

查找:
# find /lib/modules/ | grep vmmon
找到的文件夹类似于:
/lib/modules/2.6.24-23-generic/misc/
这里面还有6个需要删除的modules 每个kernel module都是有两个分别以 ".o" 和 ".ko" 结尾的文件,删除这几个文件:
# rm /lib/modules/2.6.24-23-generic/misc/vm*
这时由于我没有测试,应该就能重新安装VMware-player或者安装新的VMware虚拟机了。
如果还不可以或者需要完全卸载的话责需要找出所有的vmware文件:
# find / -name vmware
一般一个文件夹里都含有几个vmware安装时生成的文件,或者一个vmware目录的上层有几个vm开头的文件。只要分别删除找到的文件就可以了。

由于还要学习,时间不多,就粗略写一下把,请触类旁通。

最后给出我刚删除了VP后安装VW的日志,希望那些想要完全删除VP的人能用的上(我第一次安装失败了,因为没有删除/tmp里面的几个vmware关联的文件夹):

icnpunk:~/Desktop/vmware-distrib$ sudo ./vmware-install.pl
A previous installation of VMware Workstation has been detected.

The previous installation was made by the tar installer (version 4).

Keeping the tar4 installer database format.

Uninstalling the tar installation of VMware Workstation.

Stopping VMware services:
Virtual machine monitor done
Bridged networking on /dev/vmnet0 done
Host network detection done
DHCP server on /dev/vmnet1 done
Host-only networking on /dev/vmnet1 done
DHCP server on /dev/vmnet8 done
NAT service on /dev/vmnet8 done
Host-only networking on /dev/vmnet8 done
Virtual ethernet done

The removal of VMware Workstation 6.0.5 build-109488 for Linux completed
successfully. Thank you for having tried this software.

Installing VMware Workstation.

In which directory do you want to install the binary files?
[/usr/bin]

What is the directory that contains the init directories (rc0.d/ to rc6.d/)?
[/etc]

What is the directory that contains the init scripts?
[/etc/init.d]

In which directory do you want to install the daemon files?
[/usr/sbin]

In which directory do you want to install the library files?
[/usr/lib/vmware]

The path "/usr/lib/vmware" does not exist currently. This program is going to
create it, including needed parent directories. Is this what you want?
[yes]

In which directory do you want to install the manual files?
[/usr/share/man]

In which directory do you want to install the documentation files?
[/usr/share/doc/vmware]

The path "/usr/share/doc/vmware" does not exist currently. This program is
going to create it, including needed parent directories. Is this what you want?
[yes]

The installation of VMware Workstation 6.0.5 build-109488 for Linux completed
successfully. You can decide to remove this software from your system at any
time by invoking the following command: "/usr/bin/vmware-uninstall.pl".

Before running VMware Workstation for the first time, you need to configure it
by invoking the following command: "/usr/bin/vmware-config.pl". Do you want
this program to invoke the command for you now? [yes]

Making sure services for VMware Workstation are stopped.

Stopping VMware services:
Virtual machine monitor done
Bridged networking on /dev/vmnet0 done
Host network detection done
DHCP server on /dev/vmnet1 done
Host-only networking on /dev/vmnet1 done
DHCP server on /dev/vmnet8 done
NAT service on /dev/vmnet8 done
Host-only networking on /dev/vmnet8 done
Virtual ethernet done

Configuring fallback GTK+ 2.4 libraries.

In which directory do you want to install the theme icons?
[/usr/share/icons]

What directory contains your desktop menu entry files? These files have a
.desktop file extension. [/usr/share/applications]

In which directory do you want to install the application's icon?
[/usr/share/pixmaps]

Trying to find a suitable vmmon module for your running kernel.

None of the pre-built vmmon modules for VMware Workstation is suitable for your
running kernel. Do you want this program to try to build the vmmon module for
your system (you need to have a C compiler installed on your system)? [yes]

Using compiler "/usr/bin/gcc". Use environment variable CC to override.

What is the location of the directory of C header files that match your running
kernel? [/lib/modules/2.6.24-23-generic/build/include]

Extracting the sources of the vmmon module.

Building the vmmon module.

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config0/vmmon-only'
make -C /lib/modules/2.6.24-23-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-23-generic'
CC [M] /tmp/vmware-config0/vmmon-only/linux/driver.o
CC [M] /tmp/vmware-config0/vmmon-only/linux/hostif.o
CC [M] /tmp/vmware-config0/vmmon-only/common/comport.o
CC [M] /tmp/vmware-config0/vmmon-only/common/cpuid.o
CC [M] /tmp/vmware-config0/vmmon-only/common/hash.o
CC [M] /tmp/vmware-config0/vmmon-only/common/memtrack.o
CC [M] /tmp/vmware-config0/vmmon-only/common/phystrack.o
CC [M] /tmp/vmware-config0/vmmon-only/common/task.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmciContext.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmciDatagram.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmciDriver.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmciDs.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmciGroup.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmciHashtable.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmciProcess.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmciResource.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmciSharedMem.o
CC [M] /tmp/vmware-config0/vmmon-only/common/vmx86.o
CC [M] /tmp/vmware-config0/vmmon-only/vmcore/moduleloop.o
LD [M] /tmp/vmware-config0/vmmon-only/vmmon.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/vmware-config0/vmmon-only/vmmon.mod.o
LD [M] /tmp/vmware-config0/vmmon-only/vmmon.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-23-generic'
cp -f vmmon.ko ./../vmmon.o
make: Leaving directory `/tmp/vmware-config0/vmmon-only'
The module loads perfectly in the running kernel.

/dev is dynamic:
Trying to find a suitable vmblock module for your running kernel.

None of the pre-built vmblock modules for VMware Workstation is suitable for
your running kernel. Do you want this program to try to build the vmblock
module for your system (you need to have a C compiler installed on your
system)? [yes]

Extracting the sources of the vmblock module.

Building the vmblock module.

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config0/vmblock-only'
make -C /lib/modules/2.6.24-23-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-23-generic'
CC [M] /tmp/vmware-config0/vmblock-only/linux/block.o
CC [M] /tmp/vmware-config0/vmblock-only/linux/control.o
CC [M] /tmp/vmware-config0/vmblock-only/linux/dbllnklst.o
CC [M] /tmp/vmware-config0/vmblock-only/linux/dentry.o
CC [M] /tmp/vmware-config0/vmblock-only/linux/file.o
CC [M] /tmp/vmware-config0/vmblock-only/linux/filesystem.o
CC [M] /tmp/vmware-config0/vmblock-only/linux/inode.o
CC [M] /tmp/vmware-config0/vmblock-only/linux/module.o
CC [M] /tmp/vmware-config0/vmblock-only/linux/stubs.o
CC [M] /tmp/vmware-config0/vmblock-only/linux/super.o
LD [M] /tmp/vmware-config0/vmblock-only/vmblock.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/vmware-config0/vmblock-only/vmblock.mod.o
LD [M] /tmp/vmware-config0/vmblock-only/vmblock.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-23-generic'
cp -f vmblock.ko ./../vmblock.o
make: Leaving directory `/tmp/vmware-config0/vmblock-only'
Unable to make a vmblock module that can be loaded in the running kernel:
insmod: error inserting '/tmp/vmware-config0/vmblock.o': -1 File exists
There is probably a slight difference in the kernel configuration between the
set of C header files you specified and your running kernel. You may want to
rebuild a kernel based on that directory, or specify another directory.

The vmblock module enables dragging or copying files from within a guest and
dropping or pasting them onto your host (guest to host drag and drop and file
copy/paste). The rest of the software provided by VMware Workstation is
designed to work independently of this feature (including host to guest drag
and drop and file copy/paste).

If you would like the guest to host drag and drop and file copy/paste features,
you can install the driver by running vmware-config.pl again after making sure
that gcc, binutils, make and the kernel sources for your running kernel are
installed on your machine. These packages are available on your distribution's
installation CD.
[ Press Enter key to continue ]

/dev is dynamic:
You have already setup networking.

Would you like to skip networking setup and keep your old settings as they are?
(yes/no) [yes]

Trying to find a suitable vmnet module for your running kernel.

None of the pre-built vmnet modules for VMware Workstation is suitable for your
running kernel. Do you want this program to try to build the vmnet module for
your system (you need to have a C compiler installed on your system)? [yes]

Extracting the sources of the vmnet module.

Building the vmnet module.

Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config1/vmnet-only'
make -C /lib/modules/2.6.24-23-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-23-generic'
CC [M] /tmp/vmware-config1/vmnet-only/driver.o
CC [M] /tmp/vmware-config1/vmnet-only/hub.o
CC [M] /tmp/vmware-config1/vmnet-only/userif.o
CC [M] /tmp/vmware-config1/vmnet-only/netif.o
CC [M] /tmp/vmware-config1/vmnet-only/bridge.o
CC [M] /tmp/vmware-config1/vmnet-only/filter.o
CC [M] /tmp/vmware-config1/vmnet-only/procfs.o
CC [M] /tmp/vmware-config1/vmnet-only/smac_compat.o
SHIPPED /tmp/vmware-config1/vmnet-only/smac_linux.x386.o
LD [M] /tmp/vmware-config1/vmnet-only/vmnet.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: could not find /tmp/vmware-config1/vmnet-only/.smac_linux.x386.o.cmd for /tmp/vmware-config1/vmnet-only/smac_linux.x386.o
CC /tmp/vmware-config1/vmnet-only/vmnet.mod.o
LD [M] /tmp/vmware-config1/vmnet-only/vmnet.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-23-generic'
cp -f vmnet.ko ./../vmnet.o
make: Leaving directory `/tmp/vmware-config1/vmnet-only'
The module loads perfectly in the running kernel.

Do you want to install the Eclipse Integrated Virtual Debugger? You must have
the Eclipse IDE installed. [no]

The file /etc/rc2.d/S90vmware that this program was about to install already
exists. Overwrite? [yes]

The file /etc/rc2.d/K08vmware that this program was about to install already
exists. Overwrite? [yes]

The file /etc/rc3.d/S90vmware that this program was about to install already
exists. Overwrite? [yes]

The file /etc/rc3.d/K08vmware that this program was about to install already
exists. Overwrite? [yes]

The file /etc/rc5.d/S90vmware that this program was about to install already
exists. Overwrite? [yes]

The file /etc/rc5.d/K08vmware that this program was about to install already
exists. Overwrite? [yes]

The file /etc/rc0.d/K08vmware that this program was about to install already
exists. Overwrite? [yes]

The file /etc/rc6.d/K08vmware that this program was about to install already
exists. Overwrite? [yes]

Creating a new VMware VIX API installer database using the tar4 format.

Installing VMware VIX API.

You must read and accept the VMware VIX API End User License Agreement to
continue.
Press enter to display it.
\*内容省略*\

Do you accept? (yes/no) yes

Thank you.

In which directory do you want to install the VMware VIX API binary files?
[/usr/bin]

In which directory do you want to install the VMware VIX API library files?
[/usr/lib/vmware-vix/lib]

The path "/usr/lib/vmware-vix/lib" does not exist currently. This program is
going to create it, including needed parent directories. Is this what you want?
[yes]

In which directory do you want to install the VMware VIX API document pages?
[/usr/share/doc/vmware-vix]

The path "/usr/share/doc/vmware-vix" does not exist currently. This program is
going to create it, including needed parent directories. Is this what you want?
[yes]

The installation of VMware VIX API 1.1.5 build-109488 for Linux completed
successfully. You can decide to remove this software from your system at any
time by invoking the following command: "/usr/bin/vmware-uninstall-vix.pl".

Starting VMware services:
Virtual machine monitor done
Virtual ethernet done
Bridged networking on /dev/vmnet0 done
Host network detection done
Host-only networking on /dev/vmnet1 (background) done
DHCP server on /dev/vmnet1 done
Host-only networking on /dev/vmnet8 (background) done
DHCP server on /dev/vmnet8 done
NAT service on /dev/vmnet8 done

The configuration of VMware Workstation 6.0.5 build-109488 for Linux for this
running kernel completed successfully.

You can now run VMware Workstation by invoking the following command:
"/usr/bin/vmware".

Enjoy,

--the VMware team


Monday, January 19, 2009

使用Ping.fm快速发布日志

这篇日志就是通过Gtalk发布的。http://ping.fm/提供多种方式聚合你的帐户,Twitter、Blogger、Facebook、WordPress、Delicious等等,可以让你用手机短信、E-mail、Gtalk、Yahoo! Messenger、Live Messenger等多种途径发布自己的博客,或者状态等,非常方便。

点击http://ping.fm/signup/进入注册。只有简单的几项,注册好后登陆系统就可以按照提示添加聚合物或者选择发布方式了。

关于发布方式请参照http://ping.fm/tips/的说明。Ping.fm还提供Widget,可以在http://getsatisfaction.com/widgets找到。

不过这个的发布功能好像还不是很完善,刚才发布的连接http://ping.fm/signup/和/tips/都变成了http://ping.fm/signup/signup/和/tips/tips/了,但是当做一个Twitter的Poster还是非常不错的。

晚上花15块钱在东大街买的慢摇DJ黑胶碟

慢摇,不算过分劲爆,学习的时候听可以起到加速作用,全是英文歌Remix的。喜欢的下吧:
http://www.rayfile.com/files/edb4c4dc-e579-11dd-a955-0019d11a795f/
<因文件过大而下载量又达不到所以被RayFile删了>

Sunday, January 18, 2009

Google 搜索 SearchWiki 功能加入

今天上英文的Google无意中发现新的SearchWiki小功能,很贴心哦,比起Baidu来说Google在竞价排名的公平性方面走到了前面。

三个被红框框起来的按键分便是Promote Remove Comment。

以及自己添加搜索结果的功能。

该功能只能在Google帐户登陆后才可使用。

以下是Google对SearchWiki功能的介绍:

SearchWiki

SearchWiki lets you customize your Google Web Search results by ranking, removing, and adding notes to them. You'll see your changes whenever you do the same searches while signed in to your Google Account, or until you decide to undo them. You can also see how other users have tailored any given search results page with their own notes and changes.

How to use SearchWiki

Here's how you can rank, remove, add, and comment on search results:

  • Like a certain search result?

    Click Like_it to move it to the top of the page. This result will appear at the top whenever you do the same search in the future. We'll add this marker Move_up next to it so you'll recognize it later.

  • Don't like a result?

    Click Don't_like_it to remove it, and it'll remain hidden whenever you do the same search in the future.

  • Know of a better webpage?

    Click Add a result at the bottom of any search results page to add a page that you consider relevant to that search. Type the URL in the box, then click Add. When you do this search in the future, you'll see the page you suggested at the top with this marker Move_up.

  • Want to comment on a result?

    Click Comment to open a text box and type your comment. You'll see it the next time this result appears for any of your searches. Comments are a great way to save and recall any thoughts you had or notes you took about a particular page.

Your rankings and comments are associated with your Google Account, so they affect only your search result rankings. A listing of your changes is visible on your 'SearchWiki notes' page, which is visible only to you.

Check out our video to see SearchWiki in action.

Do I have to be signed in to use SearchWiki?

Yes. To see the changes you've made to a given search result the next time you do that search, you must be signed in to your Google Account. If you aren't signed in, you'll simply see standard, unmodified Google Web Search results.

How can I undo changes I've made?

Here's how to undo changes made using SearchWiki.

  • If you'd like to return a result you've promoted to its original position, click the down arrow next to the result.

  • If you want to restore a deleted page to your search results, click the Show them link at the bottom of the results page (next to 'You have removed results from this page'), then click Restore.

  • To delete a comment you've made, click the Delete comment link.

  • Finally, if you added a new page to a set of search results, you can remove it by clicking the Don't_like_it next to it.

Can others see my rankings, deletions, and notes?

The SearchWiki notes page that summarizes your rankings, deletions, and notes can be viewed only by you.

Is my email address displayed to other users?

No. Other users who view your SearchWiki notes see only your Google Account nickname. (Note that you can see your email address in the top right of your screen when you're signed in to your own Google Account.) You can edit your nickname by clicking My Account in the top right corner of the screen while you're signed in. Learn more about Google Accounts.

How do I report inappropriate or offensive comments?

While viewing any comment, click the thumbs-down next to it to rate it as bad. Click the Flag as inappropriate content link to report a comment as inappropriate. A Google team will review the comment and, if necessary, take
action.

How do I share my feedback with you?

Have a suggestion on how we can improve SearchWiki? Take our survey (right now, it's available only in English).

You can also share your feedback in the Web Search Help Forum.

梦梦出品的QQ完全美化(未完)

美化说明:

详情请看梦梦空间:
http://dreamxis.blogbus.com/tag/QQ/

梦梦做的QQ美化我真的超级喜欢,但是他当时做美化时的DLL文件放到新的QQ版本上不适用,今天晚上我花了整整三个小时时间把他的资源移植过来了。废话少说,上图先:

QQ主界面以及任务栏图标均已经改成梦梦的了

Aperture

pRincess

QQ登陆界面改为:

但是菜单以及载入画面都还没有更改,今天太累啦,有时间再做吧。

此美化基于腾讯QQ2008II Beta1 狂人DIY版 Ver20090110制作,此QQ下载地址:

天空下载

我的网盘

MD5校验码:05e4b571c1373e1186912582dcd8d441 (QQ2008.exe)

美化方法:

首先从上面任意一个地址下载QQ2008II Beta1,删除以前的QQ版本,安装此版。在安装时不要选择美化QQ。

然后下载下面两个QQ2008主题文件解压并放置到QQ主文件夹Newskins目录下:
pRincess
Aperture
这两个主题预览分别对应上面给出的预览图。

然后下载我今天花了三个小时制作的DLL文件:
LoginCtrlRes.dll_QQRes.dll_UNCOMP.rar
解压这个文件并把QQ关闭,将其中的LoginCtrlRes.dll和QQRes.dll两个文件一同覆盖到QQ主文件夹下。

最后,打开QQ,尽情享受梦梦带给大家无限的惊喜吧!
---浪费时间也要浪费到正地方!

Saturday, January 17, 2009

Gny的电子书列表,别说不够看啊~!!!

GNY's About Us:

Go Null Yourself was founded in an effort to create a community where hackers and programmers could conjugate to learn and share with each other. There are too many websites that promote "script-kiddies" and not enough quality resources. Here at GNY, the main focus is to not only learn about hacking, coding, and anything related with advanced computing, but to actually understand it. The same concept applies in real life. You may learn about an equation in math that solves a problem, but do you know why it solves it and how the equation was crafted? If you have a question, want to submit something, or just want to talk, we'll be happy to answer any queries you may have. Most of the time, the admins can be contacted via
IRC. If neither is there, wait a bit and one will most likely show up. You can also email sToRm or m0nkee at their respective email addresses.

    给Blogger添加Twitter工具栏

    还是使用简单的JavaScript调用的办法。
    添加一个HTML/JavaScript的小工具,填入以下内容:<div class="widget-content">
    <div id="twitter_div"><ul id="twitter_update_list"></ul></div>
    <script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
    <script type="text/javascript" src="http://twitter.com/statuses/user_timeline/zeronenorez.json?callback=twitterCallback2&count=20"></script>
    <a href="http://twitter.com/zeronenorez" target="_blank">ReadMore</a>
    </div>
    </div>
    将其中红色的部分改成自己的Twitter用户名即可!
    由于我模板的原因,在显示内容的时候会在前面留下一部分的空隙,所以在Blogger模板里面添加以下内容到<head></head>之间:#twitter_div {width: 250px;margin-$startSide:-45px}
    这样做的目的是把工具栏内容向前挪动45px的距离,这样就和标题对齐了。

    Friday, January 16, 2009

    终于知道卡巴斯基更新状态永远是0%是怎么回事啦!

    诶呀妈呀,这几天真能把人郁闷死,不知何时卡巴斯基的病毒库就再也没有更新过,原以为是破解版卡巴斯基出什么问题了,换了好几个版本,换了巨多的Key,几乎所有的更新源。可是一点作用不起,永远是“ 更新永远是0%,然后操作超时,任务未被启动”。今天在深度论坛上无意中发现了问题的关键:GDI++与卡巴2009冲突导致卡巴更新不了。

    解决办法:只要在GDI++.ini的[UnloadDLL]下面加入AVP.exe文件,禁止GDI++渲染卡巴斯基就可以了,今天卡巴终于开始更新拉!HOHO~

    Tuesday, January 13, 2009

    给自己的Blogger装上Recent Comments功能

    以前装这个功能的时候走了很多弯路,看了很多说的复杂而且莫名其妙的教程,装上了一个外国网站提供的评论功能,终于可以在侧边栏上显示评论了,很漂亮。但是那个网站是用他自己的服务器存储留言数据的,然后每次再从外国网站上调用出来,速度实在没法恭维。如果需要那个漂亮评论栏的同志可以上这个网站:http://www.intensedebate.com/

    这里提供一个更快速更简单的办法:

    首先下载JS代码:
    http://noodleblog.googlepages.com/rc4.js
    把这个代码放到自己的ftp或者GooglePages上,没有Google账号的同志
    Mail我,我可以给你发邀请函。

    然后在Blogger页面元素里面添加一个HTML/JavaScript。填入以下代码:

    <div class="widget-content">
    <script>g_szBlogDomain='icnpunk.blogspot.com';
    var g_szHead='';</script><script src="http://noodleblog.googlepages.com/rc4.js"></script>
    </div>

    蓝色部分替换为自己的博客地址,红色部分替换自己上传的JS代码,保存就可以了 。

    ---勤思考,苦钻研!

    Sunday, January 11, 2009

    给自己的Blogger装上继续阅读功能

    综合了网上众多关于给Blogger加入Readmore的教程,大致分为一下三类:

    首先是直接展开的方法;参考文章:Blogger hack: Expandable posts with Peekaboo view
    中文教程参阅这里:http://joshnote.blogspot.com/2007/03/blogger-hacks-in-joshs-lifetagsread.html
    教程中的JS代码地址已经不能使用了,这个是手快的兄弟转存的:http://rarunach.googlepages.com/hackosphere.js
    说出去不怕丢人,这个方法我居然没有试成功。。。

    其次是换链接的方法;参考文章:Blogger Beta 繼續閱讀功能改良
    中文教程参阅这里:http://joshnote.blogspot.com/2007/03/blogger-hacks-in-joshs-lifetagsread.html

    最后是使用Chen Jim Hao的傻瓜程序:http://cjhtech.blogspot.com/2007/02/blogger-3-htmlfor-blogger.html

    综合了一下上面的几种方法我最重选择了第二个,因为更改方便,速度快,第三个傻瓜程序会有一定的延迟。每次载入的时候会先全部显示出来一段时间才缩进去,而第二种方法因为通过更改模板实现的,每次载入时只是一闪而过,很是迅速。

    给出本博客使用的加入继续阅读功能的模板(跳转查看):
    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;<html expr:dir='data:blog.languageDirection' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'><head><b:include data='blog' name='all-head-content'/><meta content='GWGgp/NB6IXNcjSWRSnwinNduxUiVSTNeTzbQGwRt4M=' name='verify-v1'/><title><data:blog.pageTitle/></title><b:skin><![CDATA[/** Blogger Template Style* Herbert** by Jason Sutter* Updated by Blogger Team*/
    /** Variable definitions* ====================
    <Variable name="mainBgColor" description="Page Background Color"type="color" default="#ffffff" / value="#000000"><Variable name="mainTextColor" description="Text Color"type="color" default="#000000" / value="#008000">
    <Variable name="titleBgColor" description="Blog Title Background Color"type="color" default="#ff4500" / value="#008000"><Variable name="titleColor" description="Blog Title Color"type="color" default="#fffafa"/ value="#000000"><Variable name="descriptionBgColor" description="Description Background Color"type="color" default="#ffebcd" / value="#000000"><Variable name="descriptionColor" description="Blog Description Color"type="color" default="#9e5205" / value="#008000">
    <Variable name="dateHeaderColor" description="Date Header Color"type="color" default="#777777" / value="#008000">
    <Variable name="postTitleColor" description="Post Title Color"type="color" default="#555555" / value="#00ff00"><Variable name="postTitleBgColor" description="Post Title Background Color"type="color" default="#eeeeee" / value="#004000">
    <Variable name="postFooterColor" description="Post Footer Color"type="color" default="#444444" / value="#004000">
    <Variable name="mainLinkColor" description="Link Color"type="color" default="#de7008" / value="#00ff00"><Variable name="mainVisitedLinkColor" description="Visited Link Color"type="color" default="#e0ad12" / value="#004000">
    <Variable name="sidebarTitleColor" description="Sidebar Title Color"type="color" default="#ff4500" / value="#008000">
    <Variable name="sidebarLinkColor" description="Sidebar Link Color"type="color" default="#999999" / value="#00ff00"><Variable name="sidebarVisitedLinkColor"description="Sidebar Visited Link Color"type="color" default="#de7008" / value="#004000">
    <Variable name="bodyFont" description="Text Font"type="font" default="normal normal 90% 'Trebuchet MS', Trebuchet, Verdana, Sans-Serif" / value="normal normal 79% Trebuchet, Trebuchet MS, Arial, sans-serif"><Variable name="titleFont" description="Blog Title Font"type="font" default="normal bold 266% Verdana, Sans-Serif" / value="normal bold 187% Trebuchet, Trebuchet MS, Arial, sans-serif"><Variable name="descriptionFont" description="Blog Description Font"type="font" default="normal bold 85% Verdana, Sans-Serif" / value="normal bold 85% Verdana, sans-serif"><Variable name="postTitleFont" description="Post Title Font"type="font" default="normal bold 110% Verdana, Sans-serif" value="normal bold 110% Verdana, Sans-serif"><Variable name="sidebarTitleFont" description="Sidebar Title Font"type="font" default="normal bold 125% Verdana, Sans-Serif" / value="normal bold 100% Verdana, Sans-Serif"><Variable name="startSide" description="Start side in blog language"type="automatic" default="left" value="left"><Variable name="endSide" description="End side in blog language"type="automatic" default="right" value="left">*/body {margin: 0px;padding: 0px;background: $mainBgColor;color: $mainTextColor;font: $bodyFont;}
    a {color: $mainLinkColor;text-decoration: none;}
    a:hover {color: $mainVisitedLinkColor;text-decoration: underline;}
    a:visited {color: $mainVisitedLinkColor;}
    a img {border: 0;}
    @media all {div#main-wrapper {float: $startSide;width: 72%;padding-top: 0;padding-$endSide: 1em;padding-bottom: 0px;padding-$startSide: 1em;word-wrap: break-word; /* fix for long text breaking sidebar float in IE */overflow: hidden; /* fix for long non-text content breaking IE sidebar float */}
    div#sidebar-wrapper {margin: 0px;padding: 35px;text-align: $endSide;}
    div#sidebar {width: 25%;float: $endSide;word-wrap: break-word; /* fix for long text breaking sidebar float in IE */overflow: hidden; /* fix for long non-text content breaking IE sidebar float */}}
    #navbar-iframe {height:0px;visibility:hidden;display:none;}
    #content-wrapper {margin-$endSide: 1em;}
    @media handheld {div#main-wrapper {float: none;width: 90%;}
    div#sidebar-wrapper {padding-top: 20px;padding-$endSide: 1em;padding-bottom: 0;padding-$startSide: 1em;text-align: $startSide;}}
    #header {padding-top: 0px;padding-$endSide: 0px;padding-bottom: 8px;padding-$startSide: 0px;margin-top: 0px;margin-$endSide: 0px;margin-bottom: 20px;margin-$startSide: 0px;border-bottom: solid 2px $postTitleBgColor;border-top: solid 2px $descriptionBgColor;background: $descriptionBgColor;color: $descriptionColor;}
    CODE {display: block; /* fixes a strange ie margin bug */font-family: Courier New;font-size: 9pt;overflow:auto;background: #191919 url(
    https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnMMvmJSOQzhyK9f1RUhojYoYBtqRLgoWtzGQmV_N3sJdlBV18FpaueRHi3IMK-6at4npw6odc9aarQbYOpl68c4KKtuKNuM9JF0SwrM9PQ_Bjhje6AMXaKCiHcDJ_yLVWdwc9cHFwgOM/s1600/Code_BG.gif) left top repeat-y;border: 1px dashed #00ff00;margin:2px 3px;padding: 10px 10px 10px 21px;max-height:200px;line-height: 1.2em;}
    blockquote {display: block; /* fixes a strange ie margin bug */font-family: Courier New;font-size: 9pt;background: #191919;margin:1em 20px;border:1px dashed #333333;padding-left: 1ex;}
    h1 a:link {color: $titleColor;}
    h1 a:visited {color: $titleColor;}
    h1 {padding-top: 18px;padding-$endSide: 0px;padding-bottom: 10px;padding-$startSide: 5%;margin-top: 0px;margin-$endSide: 10px;margin-bottom: 8px;margin-$startSide: 0px;border-top: solid 9px $sidebarTitleColor;border-bottom: solid 1px $descriptionColor;color: $titleColor;background: $titleBgColor;font: $titleFont;}
    .description {padding-top: 0px;padding-$endSide: 0px;padding-bottom: 0px;padding-$startSide: 5%;margin: 0px;color: $descriptionColor;background: transparent;font: $descriptionFont;}
    h3 {margin-top: 0px;margin-$endSide: 10px;margin-bottom: 10px;margin-$startSide: 0px;padding-top: 2px;padding-$endSide: 0px;padding-bottom: 2px;padding-$startSide: 2px;color: $postTitleColor;background: $postTitleBgColor;font: $postTitleFont;}
    h3.post-title a,h3.post-title a:visited {color: $postTitleColor;}
    h2.date-header {margin-top: 10px;margin-$endSide: 0px;margin-bottom: 0px;margin-$startSide: 0px;padding-top: 0px;padding-$endSide: 0px;padding-bottom: 0px;padding-$startSide: 2%;color: $dateHeaderColor;font-size: 90%;text-align: $startSide;}
    #sidebar h2 {margin: 0px;color: $sidebarTitleColor;font: $sidebarTitleFont;padding: 0px;border: none;}
    #sidebar .widget {margin-top: 0px;margin-$endSide: 0px;margin-bottom: 33px;margin-$startSide: 5px;padding: 0;}
    #sidebar ul {list-style-type: none;font-size: 95%;margin-top: 0;}
    #sidebar li {margin: 5px;padding: 0px;list-style-type: none;font-size: 105%;}
    .Blog {margin-top: 20px;}
    .blog-posts, .feed-links {margin-$startSide: 10px;}
    .feed-links {clear: both;line-height: 2.5em;}
    .post {margin-top: 0;margin-$endSide: 0;margin-bottom: 30px;margin-$startSide: 0;font-size: 100%;}
    .post-body {margin-top: 0;margin-$endSide: 6px;margin-bottom: 0;margin-$startSide: 5px;}
    .post strong {font-weight: bold;}
    #sidebar a {text-decoration: none;}
    #sidebar a:link,#sidebar a:visited {color: $sidebarLinkColor;}
    #sidebar a:active,#sidebar a:hover {color: $sidebarVisitedLinkColor;}
    pre,code,strike,blockquote {color: #666666;}
    .post-footer {padding-top: 0;padding-$endSide: 0;padding-bottom: 0;padding-$startSide: 5px;margin: 0px;color: $postFooterColor;font-size: 80%;}
    #comments {padding-top: 2px;padding-$endSide: 0px;padding-bottom: 2px;padding-$startSide: 5px;font-size: 110%;font-weight: bold;font-family: Verdana,Sans-Serif;}
    .comment-author {margin-top: 20px;}
    .comment-body {margin-top: 10px;font-size: 100%;font-weight: normal;color: $mainTextColor;}
    .comment-footer {padding: 0px;margin-bottom: 20px;color: $postFooterColor;font-size: 80%;font-weight: normal;display: inline;margin-$endSide: 10px;}
    .deleted-comment {font-style: italic;color: gray;}
    .comment-link {margin-$startSide: .6em;}
    /* Profile----------------------------------------------- */.profile-textblock {clear: both;margin-$startSide: 0;}.profile-img {margin-top: 0;margin-$endSide: 0;margin-bottom: 5px;margin-$startSide: 5px;float: $endSide;}
    .BlogArchive #ArchiveList {float: $endSide;}
    .widget-content {margin-top: 0.5em;}
    #sidebar .widget {clear: both;}
    #blog-pager-newer-link {float: $startSide;}
    .blog-pager-older-link {float: $endSide;}
    .blog-pager {text-align: center;}
    .clear {clear: both;}
    /** Tweaks for subscribe widget */.widget-content .subscribe-wrapper {float: left;clear: left;margin: .2em;font-family: Arial,Sans-Serif;}
    /** Tweaks for layout editor mode */body#layout #outer-wrapper {margin-top: 10px;}]]></b:skin>
    <script type='text/Javascript'>function hidePost(postUrl){var label=document.getElementById("fullpost");if(label!=null){eA = document.createElement("a");eA.setAttribute("href",postUrl);eA.setAttribute("title","Read More");eA.appendChild(document.createTextNode("...Read More"));eB = document.createElement("p");eB.setAttribute("id","read-more");eB.appendChild(eA);label.parentNode.appendChild(eB);label.parentNode.removeChild(label);}}</script></head>
    <body> <div id='outer-wrapper'><div id='wrap2'>
    <!-- skip links for text browsers --><span id='skiplinks' style='display:none;'><a href='#main'>skip to main </a> <a href='#sidebar'>skip to sidebar</a></span>
    <div id='header-wrapper'><b:section class='header' id='header' maxwidgets='1' showaddelement='no'><b:widget id='Header1' locked='true' title='iCNPunk --- Chinese National Punk (Header)' type='Header'><b:includable id='main'>
    <b:if cond='data:useImage'> <b:if cond='data:imagePlacement == "REPLACE"'> <!--Show just the image, no text--> <div id='header-inner'> <a expr:href='data:blog.homepageUrl' style='display: block'> <img expr:alt='data:title' expr:height='data:height' expr:id='data:widget.instanceId + "_headerimg"' expr:src='data:sourceUrl' expr:width='data:width' style='display: block'/> </a> </div> <b:else/> <!-- Show image as background to text. You can't really calculate the width reliably in JS because margins are not taken into account by any of clientWidth, offsetWidth or scrollWidth, so we don't force a minimum width if the user is using shrink to fit. This results in a margin-width's worth of pixels being cropped. If the user is not using shrink to fit then we expand the header. --> <div expr:style='"background-image: url(\"" + data:sourceUrl + "\"); " + "background-position: " + data:backgroundPositionStyleStr + "; " + data:widthStyleStr + "min-height: " + data:height + "px;" + "_height: " + data:height + "px;" + "background-repeat: no-repeat; "' id='header-inner'> <div class='titlewrapper' style='background: transparent'> <h1 class='title' style='background: transparent; border-width: 0px'> <b:include name='title'/> </h1> </div> <b:include name='description'/> </div> </b:if> <b:else/> <!--No header image --> <div id='header-inner'> <div class='titlewrapper'> <h1 class='title'> <b:include name='title'/> </h1> </div> <b:include name='description'/> </div> </b:if></b:includable><b:includable id='title'> <b:if cond='data:blog.url == data:blog.homepageUrl'> <data:title/> <b:else/> <a expr:href='data:blog.homepageUrl'><data:title/></a> </b:if></b:includable><b:includable id='description'> <div class='descriptionwrapper'> <p class='description'><span><data:description/></span></p> </div></b:includable></b:widget></b:section></div>
    <div id='content-wrapper'>
    <div id='crosscol-wrapper' style='text-align:center'><b:section class='crosscol' id='crosscol' showaddelement='no'/></div>
    <div id='main-wrapper'><b:section class='main' id='main' showaddelement='no'><b:widget id='Blog1' locked='true' title='Blog Posts' type='Blog'><b:includable id='nextprev'> <div class='blog-pager' id='blog-pager'> <b:if cond='data:newerPageUrl'> <span id='blog-pager-newer-link'> <a class='blog-pager-newer-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + "_blog-pager-newer-link"' expr:title='data:newerPageTitle'><data:newerPageTitle/></a> </span> </b:if>
    <b:if cond='data:olderPageUrl'> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + "_blog-pager-older-link"' expr:title='data:olderPageTitle'><data:olderPageTitle/></a> </span> </b:if>
    <b:if cond='data:blog.homepageUrl != data:blog.url'> <a class='home-link' expr:href='data:blog.homepageUrl'><data:homeMsg/></a> <b:else/> <b:if cond='data:newerPageUrl'> <a class='home-link' expr:href='data:blog.homepageUrl'><data:homeMsg/></a> </b:if> </b:if>
    </div> <div class='clear'/></b:includable><b:includable id='backlinks' var='post'> <a name='links'/><h4><data:post.backlinksLabel/></h4> <b:if cond='data:post.numBacklinks != 0'> <dl class='comments-block' id='comments-block'> <b:loop values='data:post.backlinks' var='backlink'> <div class='collapsed-backlink backlink-control'> <dt class='comment-title'> <span class='backlink-toggle-zippy'> </span> <a expr:href='data:backlink.url' rel='nofollow'><data:backlink.title/></a> <b:include data='backlink' name='backlinkDeleteIcon'/> </dt> <dd class='comment-body collapseable'> <data:backlink.snippet/> </dd> <dd class='comment-footer collapseable'> <span class='comment-author'><data:post.authorLabel/> <data:backlink.author/></span> <span class='comment-timestamp'><data:post.timestampLabel/> <data:backlink.timestamp/></span> </dd> </div> </b:loop> </dl> </b:if> <p class='comment-footer'> <a class='comment-link' expr:href='data:post.createLinkUrl' expr:id='data:widget.instanceId + "_backlinks-create-link"' target='_blank'><data:post.createLinkLabel/></a> </p></b:includable><b:includable id='post' var='post'> <div class='post hentry'> <a expr:name='data:post.id'/> <b:if cond='data:post.title'> <h3 class='post-title entry-title'> <b:if cond='data:post.link'> <a expr:href='data:post.link'><data:post.title/></a> <b:else/> <b:if cond='data:post.url'> <a expr:href='data:post.url'><data:post.title/></a> <b:else/> <data:post.title/> </b:if> </b:if> </h3> </b:if>
    <div class='post-header-line-1'/>
    <div class='post-body entry-content'> <data:post.body/>
    <b:if cond='data:blog.pageType != "item"'><b:if cond='data:post.url'><script type='text/javascript'>hidePost('<data:post.url/>');</script></b:if></b:if>
    <div style='clear: both;'/> <!-- clear for photos floats --> </div>
    <div class='post-footer'> <div class='post-footer-line post-footer-line-1'><span class='post-timestamp'> <b:if cond='data:top.showTimestamp'> <data:top.timestampLabel/> <b:if cond='data:post.url'> <a class='timestamp-link' expr:href='data:post.url' rel='bookmark' title='permanent link'><abbr class='published' expr:title='data:post.timestampISO8601'><data:post.timestamp/></abbr></a> </b:if> </b:if> </span> <span class='post-comment-link'> <b:if cond='data:blog.pageType != "item"'> <b:if cond='data:post.allowComments'> <a class='comment-link' expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><b:if cond='data:post.numComments == 1'>1 <data:top.commentLabel/><b:else/><data:post.numComments/> <data:top.commentLabelPlural/></b:if></a> </b:if> </b:if> </span> <span class='post-backlinks post-comment-link'> <b:if cond='data:blog.pageType != "item"'> <b:if cond='data:post.showBacklinks'> <a class='comment-link' expr:href='data:post.url + "#links"'><data:top.backlinkLabel/></a> </b:if> </b:if> </span> <span class='post-icons'> <!-- email post links --> <b:if cond='data:post.emailPostUrl'> <span class='item-action'> <a expr:href='data:post.emailPostUrl' expr:title='data:top.emailPostMsg'> <img alt='' class='icon-action' height='13' src='http://www.blogger.com/img/icon18_email.gif' width='18'/> </a> </span> </b:if>
    <!-- quickedit pencil --> <b:include data='post' name='postQuickEdit'/> </span> </div>
    <div class='post-footer-line post-footer-line-2'/>
    <div class='post-footer-line post-footer-line-3'/> </div> </div></b:includable><b:includable id='commentDeleteIcon' var='comment'> <span expr:class='"item-control " + data:comment.adminClass'> <a expr:href='data:comment.deleteUrl' expr:title='data:top.deleteCommentMsg'> <img src='http://www.blogger.com/img/icon_delete13.gif'/> </a> </span></b:includable><b:includable id='status-message'> <b:if cond='data:navMessage'> <div class='status-msg-wrap'> <div class='status-msg-body'> <data:navMessage/> </div> <div class='status-msg-border'> <div class='status-msg-bg'> <div class='status-msg-hidden'><data:navMessage/></div> </div> </div> </div> <div style='clear: both;'/> </b:if></b:includable><b:includable id='feedLinks'> <b:if cond='data:blog.pageType != "item"'> <!-- Blog feed links --> <b:if cond='data:feedLinks'> <div class='blog-feeds'> <b:include data='feedLinks' name='feedLinksBody'/> </div> </b:if>
    <b:else/> <!--Post feed links --> <div class='post-feeds'> <b:loop values='data:posts' var='post'> <b:if cond='data:post.allowComments'> <b:if cond='data:post.feedLinks'> <b:include data='post.feedLinks' name='feedLinksBody'/> </b:if> </b:if> </b:loop> </div> </b:if></b:includable><b:includable id='comment-form' var='post'> <div class='comment-form'> <a name='comment-form'/> <h4 id='comment-post-message'><data:postCommentMsg/></h4> <p><data:blogCommentMessage/></p> <data:blogTeamBlogMessage/> <a expr:href='data:post.commentFormIframeSrc' id='comment-editor-src'/> <iframe allowtransparency='true' class='blogger-iframe-colorize' frameborder='0' height='275' id='comment-editor' scrolling='no' src='' width='100%'/> <data:post.iframeColorizer/> </div></b:includable><b:includable id='backlinkDeleteIcon' var='backlink'> <span expr:class='"item-control " + data:backlink.adminClass'> <a expr:href='data:backlink.deleteUrl' expr:title='data:top.deleteBacklinkMsg'> <img src='http://www.blogger.com/img/icon_delete13.gif'/> </a> </span></b:includable><b:includable id='feedLinksBody' var='links'> <div class='feed-links'> <data:feedLinksMsg/> <b:loop values='data:links' var='f'> <a class='feed-link' expr:href='data:f.url' expr:type='data:f.mimeType' target='_blank'><data:f.name/> (<data:f.feedType/>)</a> </b:loop> </div></b:includable><b:includable id='postQuickEdit' var='post'> <b:if cond='data:post.editUrl'> <span expr:class='"item-control " + data:post.adminClass'> <a expr:href='data:post.editUrl' expr:title='data:top.editPostMsg'> <img alt='' class='icon-action' height='18' src='http://www.blogger.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </b:if></b:includable><b:includable id='comments' var='post'> <div class='comments' id='comments'> <a name='comments'/> <b:if cond='data:post.allowComments'> <h4> <b:if cond='data:post.numComments == 1'> 1 <data:commentLabel/>: <b:else/> <data:post.numComments/> <data:commentLabelPlural/>: </b:if> </h4>
    <b:if cond='data:post.commentPagingRequired'> <span class='paging-control-container'> <a expr:class='data:post.oldLinkClass' expr:href='data:post.oldestLinkUrl'><data:post.oldestLinkText/></a> <a expr:class='data:post.oldLinkClass' expr:href='data:post.olderLinkUrl'><data:post.olderLinkText/></a> <data:post.commentRangeText/> <a expr:class='data:post.newLinkClass' expr:href='data:post.newerLinkUrl'><data:post.newerLinkText/></a> <a expr:class='data:post.newLinkClass' expr:href='data:post.newestLinkUrl'><data:post.newestLinkText/></a> </span> </b:if>
    <dl id='comments-block'> <b:loop values='data:post.comments' var='comment'> <dt expr:class='"comment-author " + data:comment.authorClass' expr:id='data:comment.anchorName'> <a expr:name='data:comment.anchorName'/> <b:if cond='data:comment.authorUrl'> <a expr:href='data:comment.authorUrl' rel='nofollow'><data:comment.author/></a> <b:else/> <data:comment.author/> </b:if> <data:commentPostedByMsg/> </dt> <dd class='comment-body'> <b:if cond='data:comment.isDeleted'> <span class='deleted-comment'><data:comment.body/></span> <b:else/> <p><data:comment.body/></p> </b:if> </dd> <dd class='comment-footer'> <span class='comment-timestamp'> <a expr:href='data:comment.url' title='comment permalink'> <data:comment.timestamp/> </a> <b:include data='comment' name='commentDeleteIcon'/> </span> </dd> </b:loop> </dl>
    <b:if cond='data:post.commentPagingRequired'> <span class='paging-control-container'> <a expr:class='data:post.oldLinkClass' expr:href='data:post.oldestLinkUrl'> <data:post.oldestLinkText/> </a> <a expr:class='data:post.oldLinkClass' expr:href='data:post.olderLinkUrl'> <data:post.olderLinkText/> </a> <data:post.commentRangeText/> <a expr:class='data:post.newLinkClass' expr:href='data:post.newerLinkUrl'> <data:post.newerLinkText/> </a> <a expr:class='data:post.newLinkClass' expr:href='data:post.newestLinkUrl'> <data:post.newestLinkText/> </a> </span> </b:if>
    <p class='comment-footer'>
    <b:if cond='data:post.embedCommentForm'> <b:include data='post' name='comment-form'/> <b:else/> <b:if cond='data:post.allowComments'> <a expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><data:postCommentMsg/></a> </b:if> </b:if>
    </p> </b:if>
    <div id='backlinks-container'> <div expr:id='data:widget.instanceId + "_backlinks-container"'> <b:if cond='data:post.showBacklinks'> <b:include data='post' name='backlinks'/> </b:if> </div> </div> </div></b:includable><b:includable id='main' var='top'> <!-- posts --> <div class='blog-posts hfeed'>
    <b:include data='top' name='status-message'/>
    <data:adStart/> <b:loop values='data:posts' var='post'> <b:if cond='data:post.dateHeader'> <h2 class='date-header'><data:post.dateHeader/></h2> </b:if> <b:include data='post' name='post'/> <b:if cond='data:blog.pageType == "item"'> <b:include data='post' name='comments'/> </b:if> <b:if cond='data:post.includeAd'> <data:adEnd/> <data:adCode/> <data:adStart/> </b:if> </b:loop> <data:adEnd/> </div>
    <!-- navigation --> <b:include name='nextprev'/>
    <!-- feed links --> <b:include name='feedLinks'/> <b:if cond='data:top.showStars'> <script src='http://www.google.com/jsapi' type='text/javascript'/> <script type='text/javascript'> google.load("annotations", "1", {"locale": "<data:top.languageCode/>"}); function initialize() { google.annotations.setApplicationId(<data:top.blogspotReviews/>); google.annotations.createAll(); google.annotations.fetch(); } google.setOnLoadCallback(initialize); </script> </b:if>
    </b:includable></b:widget></b:section></div>
    <div id='sidebar-wrapper'><b:section class='sidebar' id='sidebar' preferred='yes'><b:widget id='HTML4' locked='false' title='Search This Blog' type='HTML'><b:includable id='main'> <!-- only display title if it's non-empty --> <b:if cond='data:title != ""'> <h2 class='title'><data:title/></h2> </b:if> <div class='widget-content'> <data:content/> </div>
    <b:include name='quickedit'/></b:includable></b:widget><b:widget id='Profile1' locked='false' title='About Me' type='Profile'><b:includable id='main'> <b:if cond='data:title != ""'> <h2><data:title/></h2> </b:if> <div class='widget-content'> <b:if cond='data:team == "true"'> <!-- team blog profile --> <ul> <b:loop values='data:authors' var='i'> <li><a expr:href='data:i.userUrl'><data:i.display-name/></a></li> </b:loop> </ul>
    <b:else/> <!-- normal blog profile -->
    <b:if cond='data:photo.url != ""'> <a expr:href='data:userUrl'><img class='profile-img' expr:alt='data:photo.alt' expr:height='data:photo.height' expr:src='data:photo.url' expr:width='data:photo.width'/></a> </b:if>
    <dl class='profile-datablock'> <dt class='profile-data'><data:displayname/></dt>
    <b:if cond='data:showlocation == "true"'> <dd class='profile-data'><data:location/></dd> </b:if>
    <b:if cond='data:aboutme != ""'><dd class='profile-textblock'><data:aboutme/></dd></b:if> </dl> <a class='profile-link' expr:href='data:userUrl'><data:viewProfileMsg/></a> </b:if>
    <b:include name='quickedit'/> </div> </b:includable></b:widget><b:widget id='TextList1' locked='false' title='Connect' type='TextList'><b:includable id='main'> <h2><data:title/></h2> <div class='widget-content'> <ul> <b:loop values='data:items' var='item'> <li><data:item/></li> </b:loop> </ul> <b:include name='quickedit'/> </div></b:includable></b:widget><b:widget id='Followers1' locked='false' title='Followers' type='Followers'><b:includable id='main'> <b:if cond='data:title != ""'> <b:if cond='data:codeSnippet != ""'> <h2 class='title'><data:title/></h2> <b:else/> <b:if cond='data:totalFollowerCount != ""'> <h2 class='title'><data:title/> (<data:totalFollowerCount/>)</h2> </b:if> </b:if> </b:if>
    <div expr:id='data:widget.instanceId + "-wrapper"'> <b:if cond='data:codeSnippet != ""'> <div style='margin:2px;'> <data:codeSnippet/> </div> <b:else/> <b:if cond='data:totalFollowerCount == ""'> <span class='item-control following-not-admin'> <b><data:failureSnippet/></b> </span> <span class='item-control blog-admin'> <b><data:adminFailureSnippet/></b> </span> <b:else/> <b:if cond='data:followingLinkPresent'> <div class='follow-this profile-link item-control following-follow-this'> <a expr:href='"javascript:_FollowersView._openPopup(\"" + data:followUri + "\");"'> <data:followThisMessage/> </a> </div> <div class='follow-this profile-link item-control following-stop-following-this'> <a expr:href='"javascript:_FollowersView._openPopup(\"" + data:followUri + "\");"'> <data:stopFollowingMessage/> </a> </div> </b:if>
    <div class='followers-grid'> <b:if cond='data:totalFollowerCount == 0'> <div class='profile-link item-control following-follow-this'> <data:emptyFollowersMessage/> </div> </b:if> <!-- Relies on the js written out in navbar.gxp --> <b:loop values='data:followers' var='follower'> <div class='follower'> <a expr:href='data:follower.profileUrl' expr:title='data:follower.displayName' rel='nofollow'> <img class='follower-img' expr:alt='data:follower.displayName' expr:height='data:follower.imageHeight' expr:onerror='"this.onerror=null;this.src=\"" + data:anonFollowerImageUrl + "\";"' expr:onload='"setAttributeOnload(this, \"src\", \"" + data:follower.imageUrl + "\")"' expr:width='data:follower.imageWidth' src='http://img1.blogblog.com/img/blank.gif'/> </a> </div> </b:loop> <div class='clear'/> </div>
    <div class='followers-canvas profile-link'> <data:followersFooterMessage/> <span class='item-control following-not-admin'> <a expr:href='data:followersUri'> <data:viewAllMessage/> </a> </span> <span class='item-control blog-admin'> <a expr:href='data:manageFollowersUri'> <data:manageFollowersMessage/> </a> </span> </div> </b:if> </b:if> <b:include name='quickedit'/> </div></b:includable></b:widget><b:widget id='BlogArchive1' locked='false' title='Blog Archive' type='BlogArchive'><b:includable id='main'> <b:if cond='data:title'> <h2><data:title/></h2> </b:if> <div class='widget-content'> <div id='ArchiveList'> <div expr:id='data:widget.instanceId + "_ArchiveList"'> <b:if cond='data:style == "HIERARCHY"'> <b:include data='data' name='interval'/> </b:if> <b:if cond='data:style == "FLAT"'> <b:include data='data' name='flat'/> </b:if> <b:if cond='data:style == "MENU"'> <b:include data='data' name='menu'/> </b:if> </div> </div> <b:include name='quickedit'/> </div></b:includable><b:includable id='flat' var='data'> <ul> <b:loop values='data:data' var='i'> <li class='archivedate'> <a expr:href='data:i.url'><data:i.name/></a> (<data:i.post-count/>) </li> </b:loop> </ul></b:includable><b:includable id='menu' var='data'> <select expr:id='data:widget.instanceId + "_ArchiveMenu"'> <option value=''><data:title/></option> <b:loop values='data:data' var='i'> <option expr:value='data:i.url'><data:i.name/> (<data:i.post-count/>)</option> </b:loop> </select></b:includable><b:includable id='interval' var='intervalData'> <b:loop values='data:intervalData' var='i'> <ul> <li expr:class='"archivedate " + data:i.expclass'> <b:include data='i' name='toggle'/> <a class='post-count-link' expr:href='data:i.url'><data:i.name/></a> <span class='post-count' dir='ltr'>(<data:i.post-count/>)</span> <b:if cond='data:i.data'> <b:include data='i.data' name='interval'/> </b:if> <b:if cond='data:i.posts'> <b:include data='i.posts' name='posts'/> </b:if> </li> </ul> </b:loop></b:includable><b:includable id='toggle' var='interval'> <b:if cond='data:interval.toggleId'> <b:if cond='data:interval.expclass == "expanded"'> <a class='toggle' expr:href='data:widget.actionUrl + "&action=toggle" + "&dir=close&toggle=" + data:interval.toggleId + "&toggleopen=" + data:toggleopen'> <span class='zippy toggle-open'>▼ </span> </a> <b:else/> <a class='toggle' expr:href='data:widget.actionUrl + "&action=toggle" + "&dir=open&toggle=" + data:interval.toggleId + "&toggleopen=" + data:toggleopen'> <span class='zippy'> <b:if cond='data:blog.languageDirection == "rtl"'> ◄ <b:else/> ► </b:if> </span> </a> </b:if> </b:if></b:includable><b:includable id='posts' var='posts'> <ul class='posts'> <b:loop values='data:posts' var='i'> <li><a expr:href='data:i.url'><data:i.title/></a></li> </b:loop> </ul></b:includable></b:widget><b:widget id='Subscribe1' locked='false' title='Subscribe To' type='Subscribe'><b:includable id='main'> <b:if cond='data:isPublic'> <div style='white-space:nowrap'>
    <b:if cond='data:title != ""'> <h2 class='title'><data:title/></h2> </b:if> <div class='widget-content'> <b:loop values='data:feeds' var='feed'> <div expr:class='"subscribe-wrapper subscribe-type-" + data:feed.type'>
    <div expr:class='"subscribe expanded subscribe-type-" + data:feed.type' expr:id='"SW_READER_LIST_" + data:widgetId + data:feed.type' style='display:none;'>
    <div class='top'> <span class='inner' expr:onclick='"return(_SW_toggleReaderList(event, \"" + data:widgetId +data:feed.type + "\"));"'> <img class='subscribe-dropdown-arrow' expr:src='data:arrowDropdownImg'/> <img align='absmiddle' alt='' border='0' class='feed-icon' expr:src='data:feedIconImg'/> <data:feed.title/> </span>
    <ul class='feed-reader-links'> <a class='feed-reader-link' expr:href='"http://www.google.com/ig/add?source=bstp&feedurl=" + data:feed.encodedUrl' target='_blank'> <img expr:src='data:imagePathBase + "subscribe-google.png"'/> </a> <a class='feed-reader-link' expr:href='"http://www.bloglines.com/sub/" + data:feed.url' target='_blank'> <img expr:src='data:imagePathBase + "subscribe-bloglines.png"'/> </a> <a class='feed-reader-link' expr:href='"http://www.netvibes.com/subscribe.php?url=" + data:feed.encodedUrl' target='_blank'> <img expr:src='data:imagePathBase + "subscribe-netvibes.png"'/> </a> <a class='feed-reader-link' expr:href='"http://www.newsgator.com/ngs/subscriber/subext.aspx?url=" + data:feed.encodedUrl' target='_blank'> <img expr:src='data:imagePathBase + "subscribe-newsgator.png"'/> </a> <a class='feed-reader-link' expr:href='"http://add.my.yahoo.com/content?url=" + data:feed.encodedUrl' target='_blank'> <img expr:src='data:imagePathBase + "subscribe-yahoo.png"'/> </a> <a class='feed-reader-link' expr:href='data:feed.url' target='_blank'> <img align='absmiddle' class='feed-icon' expr:src='data:feedIconImg'/> Atom </a> </ul>
    </div> <div class='bottom'/> </div> <div class='subscribe' expr:id='"SW_READER_LIST_CLOSED_" + data:widgetId +data:feed.type' expr:onclick='"return(_SW_toggleReaderList(event, \"" + data:widgetId +data:feed.type + "\"));"'> <div class='top'> <span class='inner'> <img class='subscribe-dropdown-arrow' expr:src='data:arrowDropdownImg'/> <span expr:onclick='"return(_SW_toggleReaderList(event, \"" + data:widgetId +data:feed.type + "\"));"'> <img align='absmiddle' alt='' border='0' class='feed-icon' expr:src='data:feedIconImg'/> <data:feed.title/> </span> </span> </div> <div class='bottom'/> </div> </div> </b:loop>
    <div style='clear:both'/>
    </div> </div>
    <b:include name='quickedit'/>
    </b:if></b:includable></b:widget><b:widget id='HTML2' locked='false' title='Music Player' type='HTML'><b:includable id='main'> <!-- only display title if it's non-empty --> <b:if cond='data:title != ""'> <h2 class='title'><data:title/></h2> </b:if> <div class='widget-content'> <data:content/> </div>
    <b:include name='quickedit'/></b:includable></b:widget><b:widget id='HTML3' locked='false' title='Recent Comments' type='HTML'><b:includable id='main'> <!-- only display title if it's non-empty --> <b:if cond='data:title != ""'> <h2 class='title'><data:title/></h2> </b:if> <div class='widget-content'> <data:content/> </div>
    <b:include name='quickedit'/></b:includable></b:widget><b:widget id='HTML1' locked='false' title='' type='HTML'><b:includable id='main'> <!-- only display title if it's non-empty --> <b:if cond='data:title != ""'> <h2 class='title'><data:title/></h2> </b:if> <div class='widget-content'> <data:content/> </div>
    <b:include name='quickedit'/></b:includable></b:widget></b:section></div>
    <!-- spacer for skins that want sidebar and main to be the same height--><div class='clear'> </div>
    </div> <!-- end content-wrapper --></div></div> <!-- end outer-wrapper --></body></html>


    替换时还是要注意先勾选扩展窗口小部件模板的选框保存再覆盖。
    ---人说漂亮的女人最毒恶,追求漂亮总是要付出代价的。
    Copyright © 2006 - 2009 iCNPunk.BlogSpot.COM All rights reserved By ZerOnenOreZ & Blogger
    Template Designed By iCNPunk Fixed for IE7