任意打开一个网站,网站上要有图片的
把下面代码贴到浏览器地址栏,回车看看发生了什么。
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);
2006年10月31日
IE的有趣的现象
2006年10月30日
2006年10月29日
孩子喂饼干
嗯,你没有看错,我也没有写错
是孩子喂饼干,不是喂孩子饼干
孩子把他吃的小饼干,拿在手上来喂我
呵呵,吃到这样的饼干,真的很开心
听说以前孩子就是不肯将他的饼干给爷爷吃,很抠门
今天也观察了一下
当他喂爷爷时,爷爷张开嘴巴等着,等着孩子放开手
而孩子在等爷爷闭上嘴巴,等了一会儿没有动静,就把手缩回去了
于是就错过了,就产生了误会
看来相互理解相互沟通是最重要的
(鉴于孩子不足一岁,以上心理推断纯属我自己猜想)
2006年10月28日
Linux与Windows双系统下的Grub引导管理器安装
大多数人日常工作所用的系统是Windows,如果想尝试或者转向Linux,那么进行Windows与Linux共存的双系统安装是个不错的主意。但双系统的安装较之单系统,在磁盘分区和引导管理器两个方面增加了复杂性,本文对双系统下引导管理器的安装来加以介绍。
假定你已经有了一个可以正常运行的Win2k/XP系统,并且已经为Linux准备好了硬盘分区:Windows位于第一块硬盘的第一个分区,在Linux下表示为hda1,在Grub下表示为(hd0,0),而Linux位于hdaX,用Grub表示为(hd0, X-1)。——Linux下的硬盘分区计数是从hda1开始的,而Grub的硬盘分区计数是从(hd0,0)开始的,所以hdaX就是(hd0,X-1)。这里X如果在1-4之内,说明Linux分区是主分区,如果X大于4,说明Linux分区是逻辑分区,本文并不限定Linux必须位于主分区,它在逻辑分区一样是可以引导的。
首先说明本文的思路,推荐由Windows到Linux的引导序列,即首先引导Windows的ntloader,然后通过ntloader加载Linux分区的Grub引导扇区,最后通过Grub引导Linux系统。本文涉及到的引导管理器包括ntloader和Grub,ntloader是Windows系统自带的,在安装Win2k/XP后就已经安装了,Windows 2000以及Windows Xp就是由ntloader加载的。Grub是Linux系统下很强大的引导管理器,在常见的Linux版本里都是有的,一般是自动安装的。
下面具体说明安装序列:
一、在已经准备好的Linux分区上安装Grub
这个过程通常是由Linux系统的安装程序自动进行的,当安装程序进行到引导管理器的安装,并就Grub的安装给出一些提示时,要当心了:我们选择Grub,而不是lilo,并且Grub要安装在该Linux分区,不要安装到硬盘主引导记录MBR(master boot record)上。安装程序询问Grub的安装位置时,应该是上文提到的hdaX或者(hd0,X-1),如果你写成hda或者(hd0),就会安装到MBR上。
之所以强调Grub安装到Linux分区,而不是MBR,因为本文是双系统安装,要顾忌到与Windows系统的兼容性(“兼容”在这里并不准确,实际是共生的意思)。我们的原则,就是把对已经安装的Windows系统的修改限制到最小的必要的程度,不去进行并非必要的修改,以此保障Linux与Windows两个系统的和平共处。“简洁即美”,“简单”也会更安全。
如果安装到MBR,也是可以的,但可能会有下面的问题:
1、如果所安装的Windows系统修改了MBR的默认设置,那么再把Grub安装到MBR,就对MBR的内容进行了修改,可能会导致Windows不能正常启动。通常的Windows安装并不会改动MBR的内容,但如果你安装了一些引导管理程序,它们往往是通过MBR进行设置的。时下很流行的一些“一键恢复”程序,有些也是通过MBR设置的;
2、日后重装Windows系统时,MBR里的Grub会被擦除,这会造成Linux系统不能引导。虽然这个问题也是可以解决的,但更欣赏一劳永逸的安装方式,Grub安装到Linux分区下,可以避免日后的麻烦;
3、在一些个别情形下,Grub不能正常引导系统。这个现象并不常见,但仍有可能发生,要知道Grub目前仍然是版本前的软件,而将Grub装到MBR里,就会把问题弄得更复杂。
当你所安装的Linux系统不能指定将Grub安装到Linux的所在分区时,我们的选择是:
暂将Grub安装到MBR,如果Linux系统能被Grub加以引导,进入Linux系统后,我们再手工将Grub装入Linux分区,然后恢复MBR;或者在安装程序内暂时不进行Grub的安装,退出安装程序后手工安装Grub。
恢复MBR需要用DOS、win98/me的启动软盘引导系统,以/mbr参数执行引导软盘上的磁盘分区程序fdisk.exe,即在DOS命令行(plain dos)下执行A:\>fdisk /mbr。如果机器没有软驱,那么就需要用光盘或者U盘来引导机器进入DOS;在Windows 2k/XP下,一个叫Vfloppy的软件可以用软盘镜像文件来实现对软盘的虚拟引导,如果你的机器没有USB接口(或没有可以引导DOS的U盘),也没有光驱和软驱,可以一试。
我曾经用Xubuntu的LiveCD在一台设置了“一键恢复”的TCL电脑安装时,安装程序没有给出任何选择,自动将Grub安装到了MBR上,结果不能进入任何系统。最后还是用DOS下的A:\ > fdisk /mbr恢复了MBR,能够正常引导Windows后,手工将Grub装到了Linux下的根分区,然后通过ntloader加载Grub,才实现了对Linux的引导。
手工安装Grub的简便方法是用一张带有Grub的Linux LiveCD(比如常见的Knoppix、Morphix、Ubuntu,都是可以的),启动系统,在Linux的安装程序内如果能进入shell也是可以的,总之就是为了执行Linux指令,在终端下执行以下指令:
# grub
grub > root (hd0,X-1)
grub > setup (hd0,X-1)
grub > quit
以上指令首先定位Grub所需的/boot目录在分区(hd0,X-1),然后将Grub的引导代码写入(hd0,X-1)分区的第一个扇区,所以你首先应该确保(hd0,X-1)分区内的/boot/grub目录下已经有stage1、stage2、*_stage*等文件,这些文件可以通过释放Grub的打包文件来获得,或者直接从LiveCD光盘内的/boot/grub目录复制。
如果LiveCD带有grub-install脚本,也可以直接执行
# mount /dev/hdaX /mnt
# grub-install --root-directory=/mnt /dev/hdaX
以上指令首先将带有Grub目录/boot/grub的/hdaX挂载到/mnt,然后将Grub安装到/hdaX。
二、将Grub装配到ntloader内
Grub已经安装到了Linux分区内,但它还不能引导系统,我们需要把它和ntloader联接起来,由ntloader对Grub加以引导。这是通过把hdaX分区内的Grub引导扇区转换为文件,并装配到Windows的ntloader内来实施的。
仍然用LiveCD启动Linux系统(因为你所安装的Linux系统目前还是不能引导的),或者在安装程序可以进入shell的情况下,执行以下指令:
# mount -t vfat /dev/hda1 /mnt
# dd if=/dev/hdaX of=/mnt/linux.lnx bs=512 count=1
以上两条指令将Windows的启动分区(本文中为hda1)挂载到/mnt下,然后把Linux分区(hdaX)的第一个扇区(大小为512字节)复制为Windows启动分区根目录下名为linux.lnx的文件。
注意:如果你的Windows启动分区(即Windows下的C盘)不是fat32文件系统,而是ntfs文件系统,你需要在软驱内放入格式化的DOS软盘,并将第一条指令替换为:
# mount -t msdos /dev/fd0 /mnt
因为ntfs文件系统不经过特殊处理,在Linux下是不可写的,即使你将指令中的vfat替换为ntfs,实现了挂载,也是一样,所以我们在这里把linux.lnx写入DOS格式的软盘,然后通过软盘在Windows下把linux.lnx放入C盘。
接着是在Windows下编辑C盘根目录下的boot.ini文件,boot.ini通常是隐藏、只读的系统文件,所以需要把它的“隐藏”、“只读”属性去掉,才可以编辑。在“我的电脑”工具菜单“文件夹选项”下的“查看”栏中取消“隐藏受保护的操作系统文件”和“隐藏已知文件类型的扩展名”,并选择“显示所有文件和文件夹”,就可以看到C盘根目录下的boot.ini文件了。在boot.ini内的[operating systems]栏增添一行:
c:\linux.lnx=”Grub Menu”
并将[boot loader]栏内的“timeout=0”,改为“timeout=5”,这样引导Windows时将会显示带有“Grub Menu”字样的操作系统选择菜单,并持续5秒钟,如果选择Grub Menu,就会进入Grub菜单。
三、设置menu.lst文件
menu.lst是对Grub进行设置的一个文本文件,可以用文本编辑器加以编辑,位于/boot/grub目录内。我们在前面虽然已经把Grub安装到了Linux根分区上,但如果没有生成menu.lst文件并对它加以设置,Grub是没有任何作用的。对menu.lst文件进行设置是个复杂的工作,特别是有关kernel和initrd的各种特殊参数,幸而系统安装的menu.lst文件内通常有详尽的注释。并且你的Grub如果是由安装程序自动设置的,那么通常menu.lst已经被设置好了,我们仅仅根据自己的需要进行一些修改和调整,而不必重写menu.lst。即使你的menu.lst不是由安装程序生成的,也不必担心,还可以参考、分析安装光盘或者LiveCD上的menu.lst文件来对Linux分区内的menu.lst加以设置。
如果Grub已经由安装程序装到了MBR,并且能够引导所安装的Linux,那么自动生成的Linux系统根分区下的/boot/grub/menu.lst就已经被配置好了,我们只须把Grub重新安装到Linux系统根分区,恢复Windows下的原初MBR,按照上文的方法把Linux系统根分区的Grub引导代码装载到ntloader就可以了。因为Grub的安装位置不是在menu.lst文件内指定,而是在linux shell中执行grub,进入Grub命令行后,应用Grub的内部指令root和setup来指定,或者在可执行的shell脚本文件grub-install中,以参数的形式指定设备文件(如/dev/hda或/dev/hdaX)。
假使所安装的Linux系统没有使用Grub,而是使用lilo作为引导管理器,只要lilo能够实现引导,我们就可以借鉴linux系统内的/etc/lilo.conf文件来对menu.lst加以设置。Lilo.conf是lilo的配置文件,其格式虽然与menu.lst不同,但关键部分是相同的,如指定kernel和initrd的位置,向内核传递引导参数,指定缺省引导的系统和延时时长,在lilo.conf中内核参数是在APPEND后,我们可以将lilo.conf中的参数移植到menu.lst中。
四、Menu.lst的一个实例
以下作为实例的menu.lst是我在windows 2000系统中安装的grub4nt的配置文件,所以可以看到(hd0,0)既是Windows的引导分区,又是Grub文件及一些linux内核文件的所在分区。虽然Grub4nt不能在menu.lst中应用savedefault命令外(可能因为grub4nt不支持在fat32文件系统上的写操作),其他设置与标准的Gnu Grub并无不同,大家可以通过这个实例来具体了解配置文件menu.lst。
default 0
timeout 5
foreground = 333333
background = eeeeee
color light-gray/blue black/light-gray
gfxmenu (hd0,0)/boot/morphix/message
title ubuntu linux
kernel (hd0,2)/vmlinuz ro root=/dev/hda3
title ubuntu linux (rescue mode)
kernel (hd0,2)/vmlinuz ro single root=/dev/hda3
title Other operating systems:
root
title PUD LiveHD
kernel (hd0,0)/boot/pud/linux lang=us ramdisk_size=100000 init=/etc/init apm=power-off vga=791 nomce initrd=miniroot.gz quiet BOOT_IMAGE=knoppix
initrd (hd0,0)/boot/pud/miniroot.gz
title Windows
root (hd0,0) 或者 rootnoverify (hd0,0)
makeactive
chainloader +1
title submenu -> Morphix LiveHD
configfile (hd0,1)/boot/grub/menu.lst
这里不对menu.lst做全面解释了,只结合实例,介绍几个重点环节,完整说明请阅读网上Grub的使用手册。
Default 0
default用来设置缺省引导系统,数字序列从0开始,本例会在menu.lst内自动寻找以title开始的词条,并引导第一个title词条,你可以根据自己的需要改成其他数字,如1(第二个title词条);
timeout 5
timeout用来设置Grub引导的延时时长,本例中为5秒钟,系统在等待5秒后用户如果没有手动选择要引导的系统,Grub就会自动引导由default指定的系统;
title ubuntu linux
title用来指示Grub所引导系统的设置的开始,title后面的文字在Grub菜单中会被作为系统的名称显示出来,本例中Grub引导菜单会显示ubuntu linux、ubuntu linux (rescue mode)、other operating systems、PUD LiveHD、Windows、submenu -> Morphix六个词条,其中第三个词条并非一个真实的系统,仅起指示的作用,故其root部分为空;
kernel (hd0,2)/vmlinuz ro root=/dev/hda3
kernel用来指示linux系统的内核文件的所在位置及引导参数,(hd0,2)/vmlinuz指内核为hda3(第一块硬盘第三个主分区)内根目录下的vmlinuz文件,根文件系统(/)位于hda3,注意:指示内核文件所用路径中的分区必须用Grub的表示法,不能用linux的表示法, 而根文件系统的位置必须用linux下的设备文件名来表示(本例中为/dev/hda3)。有时,vmlinuz并不是真实的内核文件,而是内核文件的一个链结文件(link file),但这不影响Grub的引导,它能根据链结文件找到真实的内核并加以引导,这在内核文件带有很长的版本号时会非常有用,简化了内核文件名的拼写,减少了拼写错误的出错几率;
kernel的这种设置是最为简单的方式,也是比较通用的设置方式,使用安装过的内核直接引导已安装的根文件系统(即linux系统),而不需进行initrd的设置;在不清楚内核的特殊设置参数时,可以用这种设置来尝试引导系统。如果在以上设置中加上single,即改为kernel (hd0,2)/vmlinuz ro root=/dev/hda3 single,则系统引导后会进入单用户(root用户)的文本模式,即救援模式(rescue mode),在系统升级、维护或查找、排除故障时会比较有用;
initrd (hd0,0)/boot/pud/miniroot.gz
initrd用来指示initrd文件(即初始内存磁盘文件,linux系统中常用的引导技术)的位置,关于硬盘分区的表示方法与kernel的要求相同,必须用(hd0,0)这种Grub的表示方法;
root (hd0,0)
root用来定位分区,本例中为hda1,Windows系统的所在分区。如果在kernel和initrd之前使用它,可以用来简化文件位置的表述,比如
kernel (hd0,2)/vmlinuz ro root=/dev/hda3
可以写成
root (hd0,2)
kernel /vmlinuz ro root=/dev/hda3
而initrd也可如是模仿;
makeactive
makeactive用来激活root所定位的分区,它只能用于主分区,不能用于扩展分区上的逻辑分区,虽然可以用这种技术来引导Grub安装在了主分区的linux系统但有比较大的局限性,所以通常是用来引导Windows系统;
chainloader +1
chainloader +1用来对makeactive所激活的主分区加以引导,同上:它只能引导主分区,所以通常是用来引导Windows系统,而linux系统可以安装在扩展分区上的逻辑分区,通常是使用kernel和initrd这种功能更为强大、灵活的引导方式;
configfile (hd0,1)/boot/grub/menu.lst
configfile用来将其他的menu.lst菜单引入Grub菜单,在同一机器上安装了多个linux系统、存在多个menu.lst文件时,这个语句非常有用,它可以简化menu.lst文件的设置,不必重抄那些复杂的引导参数,只须把别的系统的menu.lst文件加以引用就可以了,在Grub引导时选择这个子菜单,就会进入所引用的menu.lst的引导菜单。
本例中的PUD LiveHD是将PUD(一种中文繁体Debian LiveCD版本)光盘上的内容复制到hda1(在本例中为Windows的C:盘) 中,然后使用grub4nt对其加以引导,这样就实现了LiveCD到硬盘的移植,我称之为LiveHD;而Morphix LiveHD则是将Morphix(一种模块化的Debian LiveCD)光盘上的内容复制到一个单独的ext2/3分区,本例中为(hd0,1),即hda2,实现LiveHD的引导。很有趣的是,PUD只能放入fat32分区,Morphix只能放入ext2分区,反之则不能引导,这应该是不同版本的LiveCD的内核所支持文件系统的不同所致。
注:Grub4nt是Grub在windows 2k/XP下的扩展,建基于Grub for DOS,/boot/grub目录放在fat/fat32文件系统内,可以在ntloader内通过一个小文件grldr实现Grub的引导,而无须写入MBR,它是中国人的作品,作为一种新颖别致的引导方式,向世界上的linux爱好者展示了中国人的智慧,本文会在后面专门予以介绍。
五、boot.ini文件的调整
boot.ini是一个文本文件,可以用文本编辑器打开,它是win 2k/XP下ntloader的设置文件,下面是我的机器上的boot.ini实例:
[boot loader]
timeout=0
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
c:\ubuntu.lnx=Xubuntu Linux
c:\morphix.lnx=Morphix LiveHD
c:\grldr=Grub Menu
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Win2k" /fastdetect
我们逐行来对它加以解释。
[boot loader]一节用来指定缺省引导的系统及其等待时间,本例中缺省引导第一块IDE硬盘的第一个分区(表示为multi(0)disk(0)rdisk(0)partition(1),而如果你的windows Xp系统在硬盘的第二个分区,则表示为multi(0)disk(0)rdisk(0)partition(2)\WINDOWS,这种表示法不同于linux,它不区别主分区和逻辑分区,而依据分区在磁盘上的顺序从数字1开始计数)内的windows 2000系统,没有延时,立即引导。
若把Timeout的值从0改为5,则延时5秒,供用户选择boot菜单;改为-1,则系统不进行自动引导,始终等待着用户的键盘输入来进行选择。
[operating systems]一节用来描述boot菜单中要引导的不同系统,“=”后面的字符是boot菜单的显示内容,而“=”前面的部分是ntloader实际引导的内容,multi(0)disk(0)rdisk(0)partition(1)\WINNT指ntloader所要引导的windows系统位于第一块硬盘的第一个分区内的\winnt目录,c:\ubuntu.lnx和c:\morphix.lnx则是应用dd命令在linux下将grub在根分区内的引导扇区转换生成的文件,而c:\grldr是grub4nt的引导文件,用来实现grub在ntloader的引导。
[operating systems]内的不同词条的顺序是可以调整的,例如我们可以将c:\grldr=Grub Menu从本节第三行改为第一行,这样Grub Menu就会在boot菜单的第一行显示。
而缺省引导的系统也是可以改变的,例如我们可以将[boot loader]内的multi(0)disk(0)rdisk(0)partition(1)\WINNT改为c:\grldr,这样缺省引导的就是grub4nt的Grub菜单,而不是windows 2000了。这里要注意:c:\grldr放入[boot loader]一节时,正确的写法应该是
default=c:\grldr
一定不要将“=Grub Menu”带上,否则boot菜单的显示效果将不是我们所想要的,切记!
六、grub4nt的使用
将grub加载到ntloader里的方法,除了上文第二部分所介绍的将Linux根分区内的Grub引导扇区转换为ntloader可以引导的文件,还有另外一种方法,就是使用grub4nt。grub4nt通过grldr这个小文件,使ntloader直接加载Windows系统C:盘下的\boot\grub\menu.lst(新版本的grub4nt会寻找根目录的\menu.lst)。
在windows下的boot.ini文件内[operating systems]一节增添一行如下:
c:\grldr=grub4nt
对grub4nt的menu.lst设置,既可以把Linux系统根分区内的/boot/grub/menu.lst直接移植过来(GNU Grub下的savedefault在grub4nt下不能使用,会导致grub4nt的出错),也可以在grub4nt的menu.lst文件内通过configfile直接引入Linux系统根分区内的/boot/grub/menu.lst菜单,而后者不失为一种简单安全的方法,省掉了对内核引导参数的复杂设置。
即在grub4nt的menu.lst文件内这样设置:
title GNU Grub menu
configfile (hda0,X)/boot/grub/menu.lst
七、总结
本文对Windows与Linux并存于同一机器时引导管理器的安装给出了描述,可以看出,推荐的是以Windows 2k/XP下的ntloader为主引导器,通过ntloader来加载Grub,最后由Grub实现Linux的引导。这样一种引导序列的特点是,对Windows的引导几乎没有加以改动,仅仅在其中插入了对Grub的加载。当然,相反的序列也是可以的,即首先引导Grub(可以将Grub装入MBR或者处于激活状态的主分区),由Grub来加载ntloader(通过chainloader +1命令),然后实现对Windows的引导。但后者可能会引发其他的问题。
无论如何,本文中Linux的引导都是通过Grub进行的,不管是将Grub装入Linux根分区、由ntloader加载Linux根分区的Grub引导扇区,还是通过grub4nt的grldr、由ntloader加载grldr来实现对Grub的引导。其实,Grub的引导扇区文件和grldr只是对Grub加载的不同实现方式罢了。
2006年10月27日
引力子究竟在哪里
早在 300多年前,物理学家牛顿就发现了万有引力定律。根据它,科学家们成功地解释了行星的运动、月球的运动、潮汐形成的原因等科学难题,并且在1846年发现了海王星。直到今天,计算人造卫星、宇宙飞船等航天器的轨道,仍然离不开万有引力定律。
但是,随着人类认识范围的扩大和深入,人们发现万有引力定律也有不完善的地方,它本身还存在一些费解的问题。比如说,按照万有引力定律,两个物体不管相距多远,都会产生万有引力。这个万有引力从一个地方传到另一个地方,速度居然比光速还要快,这种力是靠什么传递的呢?
1913年,物理学家爱因斯坦针对这个问题提出了万有引力场论。他认为任何物体周围都存在引力场,而引力场存在于弯曲的时空里,引力场是通过引力波传播,而引力波是通过引力子使物体相互吸引的。但这只是爱因斯坦的预言,引力子真的存在吗?这个问题成了物理学家们争论的焦点。看起来,只有找到引力子,才能证实爱因斯坦的新引力论。
为了寻找引力子,科学家们做出了不懈的努力。有一些科学家在宇宙中寻找能产生引力子的源泉,并取得了进展。从1974年到1978年底,他们在波多黎用天文望远镜,对15000光年远的社电脉冲双星进行了观测,间接地证实了引力子的存在。
这个发现鼓舞了人们,科学家研制了高灵敏度的激光干涉仪,只要引力子一出现,它们就能被认出来。
如果找到了引力子,物理学和天文学将会发生天翻地覆的变化,在应用技术上也将开辟一个新局面。比如把引力子应用到通讯上,将会出现引力电视、引力电话、引力望远镜,并且还能利用引力子跟外星人联系。然而,引力子究竟在哪里还是个谜。
2006年10月26日
中国父母常犯的九大错误
让保姆,爷爷奶奶带孩子,不自己亲自照顾
把孩子当炫耀比较的对象
不尊重孩子的隐私和权利
把孩子塑造成自己想要的方向
认为早起很好,睡觉就是懒惰
认为孩子不应该做家事,应该把时间拿来学习
缺乏幽默感和轻松的一面
认为父母的爱可以是对子女任何不合理要求的借口
认为养孩子是坚苦的义务,不是享受
让保姆,爷爷奶奶带孩子,不自己亲自照顾
很多中国父母以为孩子只要身边有人看著,没有生命危险就好。其实从出生开始,孩子就需要和别人交流。不会说话也可以交流。肌肤的接触,拥抱,关注的眼光,和他说话。孩子需要不断的交流,会变得比较聪明,对爱有安全感。我们很多家庭的孩子,是在没有关注的环境下长大。脑子会变得怪异呆滞。然后永远缺乏爱的安全感。终生追求那童年,婴儿时期失去却永远追不回的爱。
把孩子当炫耀比较的对象
中国人一方面爱面子,一方面想鼓励孩子上进。常常说,你看人家孩子多用功,成绩多好。人家又得了什么奖。这种比较最要不得。况且常常是当著很多人的面说。说难听点,孩子考试考不好只怪你基因太差。人受到基因影响太多了。包括智力,个性种种。并不是孩子不愿意做好。实在是你的基因问题太多。你每一次把孩子和别人比,只带给他多一份不满和痛苦。对于事情没有什么帮助。
这种比较和竞争的心里,也导致中国人团体比较无法和谐合作做事。喜欢互斗。对于能力强的人不是佩服,而是嫉妒,要拉他下来。学校的老师更是火上加油。整个家长和老师的教育观念需要加速修正。否则中国人的团队合作永远不如人。
不尊重孩子的隐私和权利
很多父母抱著传统的观念,把父母摆在权威的角色。认为子女是属于父母的。这种不把孩子当一个拥有完整权利个体的错误观念,导致个人和社会的很多不良的后果。
父母进入子女房间应该先敲门。移动或用孩子的东西应该得到他的允许。任何牵涉到子女的决定应该先和子女商谈。不要随意翻看子女的日记或隐私。应该尊重孩子的所有权利,把他当一个成人一样尊重。这个尊重是从出生换尿片开始。换尿片前,先和颜悦色告诉他要换尿片了,向他道歉,请他忍耐一下。
这种尊重的精神是我们社会所缺乏的。导致社会缺乏服务和尊重的观念。不被尊重的人以后也不知道尊重别人。
把孩子塑造成自己想要的方向
很多父母把自己一生的遗憾寄托在孩子身上。一直逼孩子往自己以为是正确的路走。即使孩子并不适合,或者不喜欢。譬如学钢琴。譬如出国。在这种压力下,家庭变的不快乐。亲子的愉快时光成了斗争大会。牺牲了亲子的和谐关系,追求一些莫明其妙,也不见得正确的父母理想。当子女长大回想起童年,尽是不快乐的回忆。的确是些愚蠢父母的作为。
把学校成绩当成一切表现的指标。认为越用功越好。一切面向高考,面向出国。很多父母愚蠢地以为学校的成绩代表一切。人生的目标两个,一是高考,二是留学。目标订清楚了。父母剩下的工作,就是用一切威逼利诱苦肉哀求,来达到这个目的。这个科举时代遗留的过时观念,仍旧深存人心。
其实事实摆在面前。很多出国回来现在找不到工作。很多北大清华的现在也只能混口饭吃。在学校的成绩并不代表一切。反而是全面的能力,活力,毅力,性格,才是影响他们一生的重要因素。
认为早起很好,睡觉就是懒惰
成长中孩子需要充分的睡眠。目前全国教育界正在集体犯罪,剥夺孩子们的睡眠时间。毁灭中华民族的健康下一代。很多孩子6点就起床。每天睡不足8小时。全国还在推广早起才健康的错误观念。睡不足会影响发育。脑力会减退。我们的孩子需要充分的睡眠。
全国违法让孩子在周末学习或晚睡觉的教育人士应该用严厉的法律措施来禁止。剥夺中国孩子的玩耍放松睡觉的时间,是全国性的集体犯罪。应该逮捕这些犯罪的教育人士。
认为孩子不应该做家事,应该把时间拿来学习
社会学家调查的结果,在家常做家事的孩子将来生活比较幸福。可能是因为处理事情的能力比较强。所以长大以后比较不容易有挫折。或者比较能面对挫折。中国的父母为了让孩子学习,剥夺了一切孩子做家事的机会。剥夺了他学习工作,学习分担责任,学习面对问题的机会。教养出一个个只会解几题数学(又解不好)的傻孩子。中国父母应该让子女充分分担家事。学校应该全面减低作业份量。
缺乏幽默感和轻松的一面
或许因为各种压力,家庭的基本气氛就是逼孩子学习。什么是家庭生活?什么是亲子活动?完全不知道。父母因为生活压力,失去了幽默感,失去了轻松。一切都是逼,都是赶,都是高考。实在不知道人活著是为什么。亲子或夫妻在这种缺乏轻松和幽默感的气氛下,一个小挫折就会引爆冲突。
认为父母的爱可以是对子女任何不合理要求的借口
男女之间,爱并不是为一切所欲为的借口。或许因为电视剧演太多了。很多人以为爱就可以当一切的借口。很多父母常对子女说的一句话:我们这样做,也是因为爱你,为你好啊。想用这句话堵住子女的反驳。这简直荒谬。要求不合理就是不合理。别把爱扯进来当挡箭牌。父母的要求应该要合理。让孩子心服口服。
认为养孩子是坚苦的义务,不是享受
中国父母,经过传统的教育,习惯把养育儿女当成艰苦的义务。也因为这个苦,而常常暗示或明示子女要回报,孝顺。比较正确的态度是养孩子是一种上天赐予的享受。应该享受和子女相处的时光。享受看著他成长的乐趣。
2006年10月25日
闲不住
宝宝在身边的时候,想着什么时候能好好地吃一顿饭,好好地睡个安稳觉,好好地看回书,好好地休息几天。
近期由于一些原因,宝宝由奶奶领一段时间,于是在吃饭的时候想着宝宝吃了没有,睡觉的时候想着宝宝睡了没有,看书的时候想着宝宝乖不乖,休息的时候想着宝宝在干什么。
在身边的时候烦,不在身边的时候想,人呐……
2006年10月24日
天鹅
它出自法国作曲家圣桑所作的管弦乐组曲《动物狂欢节》。
《天鹅》是全组曲中最精美、最著名的音乐,曲中竖琴的琶音伴奏表示清澄的湖水上荡漾的微波,大提琴优美迷人的曲调,则描写出天鹅高贵优雅的神姿,以及安详自在地浮游时的情景。全曲由伴奏竖琴水波荡漾般的前奏开始,接着大提琴唱出6/4拍子圆滑奏的高雅旋律,时而上行,时而下行,情调极为优美。竖琴伴奏的节奏与音型均与前奏相同,与大提琴的曲调融和无间。结尾乐句也很美,全曲在最弱奏中逐渐消失。
2006年10月23日
动物世界
在坦桑尼亚的塞伦吉地国家公园里,一只金色的狮子和它的孩子正沐浴在热带大草原温暖的阳光中。
在秘鲁的亚马逊河畔,一只翼展有3英尺长的金刚鹦鹉,展开它美丽如彩虹的翅膀滑翔着。世界上共有350种鹦鹉,其中只有17种属于金刚鹦鹉。金刚鹦鹉因其长长的尾巴和巨大的喙而得名。
远远看去,这几只大象便如雕象一般,因为附在它们身上的湿泥早已干枯皲裂。作为地球上最大的陆地哺乳动物,以草为生的大象每天要消耗189升的水。而那些附在身上的泥确是保护它们皮肤不被纳米比亚炙热阳光灼伤的最佳护肤品。
弱肉强食的游戏规则在塞伦吉地的土地上一直存在。一只瞪羚为活命而拼命奔逃,通常瞪羚用急转弯的方式逃脱捕猎者的追杀,但这一次却最终未能躲过世界上速度最快的哺乳动物的捕杀。
在博茨瓦纳的雨季时节,一只非洲牛蛙在沼泽里悠闲的畅游。它大大的眼睛正为自己的好胃口寻找食物。
它的眼神陷入绝望,它的呼吸越发急促,这只非洲黑色大水牛嘶哑的呻吟响彻空旷的大峡谷。然而它的挣扎很快便会蜡尽油枯,因为在它身旁两只饥饿的小狮子正等着为它“送终”。
圆滑的体态,矫健的身姿,在比基尼岛(太平洋中马绍尔群岛中的一个珊瑚岛)的海面下一条灰鳍鲨游过摄影师的镜头。而这条凶残的鲨鱼曾在多年前攻击过这位胆大的摄影师。
在南达科他的一片荒地里,一只野牛形单影只,头上的天空蜡染般的美丽。在100年前,住在这里的人口也只有300多,这幅画面正是长期以来美洲平原生存写照。
摄影师在阿拉斯加卡特马伊国家公园的夜色里所捕捉到的画面。在夜色中一双发亮的眼睛,一张老练的大嘴和一只警惕的鼻子很好的勾勒出灰熊在夜色中捕猎时及捕猎后的情景。
在大澳大利亚湾,一群稀有的澳大利亚海狮在清澈的水中优雅的翩翩起舞。
在加拿大的艾利斯摩尔岛,一只北极狼知道在这种天气下美味的鱼总躲在冰层之下。荒芜、严寒让这块地方看不到人烟,所以这里的动物都不害怕人类。
在南极洲的冰原上,一群呀呀学语的企鹅仔的声音虽显嘈杂却十分柔和。它们围绕在一只帝王企鹅的周围。尽管听上去没什么分别,但它们的父母却能轻而易举的从声音中分辨出自己的孩子。
在南大西洋的南乔治亚岛上,一只求爱的信天翁正试图给它的同伴一个信天翁式的拥抱。而我们的摄影师为不破坏鸟类的习性而随着拍摄主体一起起舞并拍到了宝贵的画面。
2006年10月22日
今夜无人入眠
这是普契尼的三幕歌剧《图兰朵》中最著名的一首咏叹调,不仅热情明朗,而且极好地发挥了男高音的魅力,因此歌唱家们都十分喜欢它,常常在音乐会上将它作为压轴节目。
剧情简介:
美丽的中国公主图兰朵宣布:有三个谜语,能猜中的就可以和公主成婚,猜不中就要杀头,结果波斯王子因此而丧命。鞑靼王子卡拉夫乔装打扮,却猜破了谜语。图兰朵因不知卡拉夫身份,不愿履行诺言。结果卡拉夫与图兰朵立约,要她在第二天猜出他的真实姓名,不然,就要履行诺言。图兰朵找卡拉夫女仆探听,女仆守秘而自杀。于是,公主命令全城的人今晚谁都不准睡觉,追查外邦王子的姓名。最终,还是卡拉夫自己说明了身份,使图兰朵肃然起敬,甘愿委身于他。该咏叹调即是卡拉夫在要求图兰朵猜其身份时的所唱。
2006年10月21日
最近的网速怎么这么慢
最近不知为什么,网络速度极慢,居然有很多网站都打不开
突然发现,现在居然离不开网络了
突然发现,其实离开网络还有很多美好的东西,平时居然忽略了
网速慢,本来不是什么好事,但居然带给我另一个世界
我居然用了这么多“居然”
2006年10月20日
Outlook Express 错误代码表
适用范围:
Outlook Express 全系列
下表是 Outlook Express 在传送与接收邮件时,可能会出现的错误讯息代码,以及代码含意,作为自己排解疑难的参考。
Outlook Express 错误代码表
错误码 意义
一般
0×800C0131
0×800C013E 可能是 Folders.dbx 档案属性错误或损坏.
0×800CCC00 身份验证(Authentication)未载入
0×800CCC01 认证(Certificate)内容错误
0×800CCC02 认证日期错误
0×800CCC03 使用者已联机
0×800CCC05 未联机到服务器
0×800CCC0A 邮线下载未完成
0×800CCC0B 服务器忙碌中
0×800CCC0D 找不到主机(检查你的SMTP服务器是不是设错,亦可能是对方Server 的问题,例如 Mail Server 没有开机、对方的DNS 服务器死掉了等等)
0×800CCC0E 联机到服务器失败,无法与主机建立联机。可能对方主机正在维护中、或是网络联机品质不好、服务器关机、邮件服务器尚未启动等等,等一段时间再试。
0×800CCC0F 服务器结束联机(对方服务器负荷过重、网络传输壅塞易造成此现象,可以试着增加你联机逾时的等候时间试试看,或是换一联机品质较佳的 ISP)
0×800CCC10 服务器无法辨认此邮件地址
0×800CCC11 服务器无法辨认的 Mailing list
0×800CCC12 无法传送 Winsock request
0×800CCC13 无法接收 Winsock reply
0×800CCC14 无法起始 Winsock
0×800CCC15 无法开启 Windows Socket
0×800CCC16 无法辨认使用者账号,使用者账号错误
0×800CCC17 使用者中断操作
0×800CCC18 登入失败(例如:不需要安全密码认证登入,但却设了安全密码认证登入)
0×800CCC19 作业逾时
0×800CCC1A 无法以 SSL 建立联机
Winsock 错误
0×800CCC40 Network subsystem 无法使用
0×800CCC41 Windows Sockets 不支持此应用程序
0×800CCC43 Bad address.
0×800CCC44 Windows Sockets 无法加载
0×800CCC45 Operation now in progress..
SMTP 错误
0×800CCC60 不合法的回应
0×800CCC61 不明的错误代码
0×800CCC62 收到语法错误
0×800CCC63 语法参数不正确
0×800CCC64 指令不完整
0×800CCC65 不正确的指令序列
0×800CCC66 指令不完整
0×800CCC67 没有这个指令
0×800CCC68 邮件信箱被锁住或忙碌中
0×800CCC69 找不到邮件信箱
0×800CCC6A 处理要求错误
0×800CCC6B 邮件信箱不在此服务器上
0×800CCC6C 已无空间储存邮件
0×800CCC6D 已超过限制的储存容量上限
0×800CCC6E 不合法的邮件信箱名称
0×800CCC6F Transaction error,出现这讯息,可能是服务器不接受你的邮件,请跟你的 ISP 联络。
0×800CCC78 不明的寄件者,或邮件回复(reply-to)地址不正确
0×800CCC79 收件者被服务器拒绝(Relay Denied:最常发生于 Outlook Express 的 SMTP 设定不正确,请使用提供你联机服务的ISP公司之SMTP服务器来寄信,)
0×800CCC7A 没有指定寄件者
0×800CCC7B 没有指定收件者
POP3 错误
0×800CCC90 登入邮件服务器发生错误,检查一下你是不是有使用该服务器的权限。或者:不需要安全密码认证登入,但却设了安全密码认证登入
0×800CCC91 使用者名称错误或找不到此使用者
0×800CCC92 账号、密码错误
0×800CCC93 无法解释响应
0×800CCC94 需要指令
0×800CCC95 服务器上已无邮件
0×800CCC96 没有邮件标记为要下载
0×800CCC97 Message ID 超出范围
NNTP 错误
0×800CCCA0 新闻服务器响应错误,可能你没有拥有可使用该服务器的权限。
0×800CCCA1 读取新闻群组失败
0×800CCCA2 要求服务器邮件清单失败
0×800CCCA3 无法显示清单
0×800CCCA4 无法开启群组
0×800CCCA5 服务器无此群组
0×800CCCA6 邮件不在服务器上
0×800CCCA7 找不到件标题
0×800CCCA8 找不到邮件本文
0×800CCCA9 无法发布到服务器上
0×800CCCAA 无法开启下封邮件
0×800CCCAB 无法显示日期
0×800CCCAC 无法显示标题
0×800CCCAD 无法显示 MIME 标题
0×800CCCAE 使用者名称或密码不正确
RAS 错误
0×800CCCC2 未安装拨号网络
0×800CCCC3 找不到拨号网络
0×800CCCC4 拨号网络错误
0×800CCCC5 Connectoid 坏或遗失
0×800CCCC6 取得拨号设定时错误
IMAP 错误
0×800CCCD1 登入失败
0×800CCCD2 Message tagged
0×800CCCD3 Invalid response to request.
0×800CCCD4 语法错误
0×800CCCD5 不是 IMAP 服务器
0×800CCCD6 Buffer 已超过上限
0×800CCCD7 Recovery error
0×800CCCD8 数据不完整
0×800CCCD9 联机被拒
0×800CCCDA 不明的回应
0×800CCCDB User ID 已更改
0×800CCCDC User ID 指令失败
0×800CCCDD Unexpected disconnect
0×800CCCDE Invalid server state
0×800CCCDF 无法认证客户端
2006年10月19日
2006年10月18日
2006年10月17日
《星球大战》六部曲全景图
《星球大战》六部影片,故事的连续性和拍摄时间的倒错性,给相当多的观众带来了欣赏的难度,看了以下的内容相信能解开你心中的谜团,了解故事的来龙去脉。
按照《星球大战》故事的自然发展顺序,来排列六部片子的话,顺序其实应该是这样的:
①《星球大战前传1:幽灵的威胁》(1999年)
②《星球大战前传2:克隆人的进攻》(2002年)
③《星球大战前传3:西斯的反击》(2005年)
④《星球大战正传1:新希望》(1977年)
⑤《星球大战正传2:帝国反击战》(1980年)
⑥《星球大战正传3:武士归来》(1983年)
①《幽灵的威胁》(国内已公映)
因为星际贸易和通道税收的问题,银河共和国陷入了纷争。以光剑和原力作为武器的绝地武士是共和国的忠实护卫者,他们与处在黑暗中的西斯帝国残部展开明争暗斗,西斯皇帝幕后操纵的贸易联盟对纳布星航运进行阻截。
共和国首相秘密派出两名绝地武士———绝地大师奎刚·金和徒弟奥比旺前往纳布星球。暗中操控的西斯皇帝为了强迫阿米达拉女王签订不平等条约,派出弟子达斯·魔追杀奎金·刚等人。在塔图因星球,奎刚·金师徒结识了奴隶阿纳金·天行者及其母亲。从第一眼看到阿纳金,奎刚·金便相信这个孩子就是那个能战胜西斯皇帝的绝地武士。阿纳金辞别母亲,跟随奎刚·金开始了其绝地生涯。不久,奎刚·金被达斯·魔杀死,阿纳金则成为奥比旺的徒弟。贸易联盟最终战败,银河系恢复了短暂的宁静。
②《克隆人的进攻》(国内已公映)
十年后,在暗中投靠西斯的绝地武士杜库伯爵的策动下,几千个太阳星系决定一起脱离银河系共和国独立。议长帕丁主张共和国组成临时军队攻打分离主义分子,阿米达拉则反对这种以暴制暴的策略。这时,接连发生了针对阿米达拉的刺杀事件。奥比旺派阿纳金负责保护阿米达拉,而自己根据刺客留下来的线索,只身追踪到卡米诺星球,他发现卡米诺10年前就开始秘密为共和国建造庞大的克隆人军队……奥比旺发现杜库伯爵和贸易联盟勾结进攻共和国,帕丁议长因此发布了征调克隆人军队参战的命令。
杜库伯爵的机器人军队被强大的克隆人军队摧毁殆尽,杜库本人却冲破了包围,逃之夭夭。战争结束后,克隆人军队顺理成章地成为共和国中最强大的一股力量,议长帕丁也获得了巨大的权力。克隆人与机器人之间的战争终于爆发。
共渡患难的阿纳金和阿米达拉陷入爱情,阿纳金不惜违反绝地武士禁止结婚的戒律,与阿米达拉私定了终身。
③《西斯的反击》(本月20日全球同步上映)
联盟的格菲将军和杜库伯爵劫持了帕丁议长作为人质,在营救议长的战斗中,阿纳金干掉了杜库,但格菲逃走了。不久,奥比旺带领克隆军干掉了格菲将军。历时三年的“克隆人大战”终于结束。
格菲被消灭后,帕丁终于向阿纳金说出了自己就是传说中的西斯皇帝。温杜被帕丁杀害后,阿纳金归顺了西斯皇帝,并被授予“达斯·维达”的西斯名字。
帕丁宣称将共和国改为帝制,并命令阿纳金和暴风军团消灭了绝地神殿里所有的绝地武士。在外面追缴机器军和分裂军残部的奥比旺和尤达大师等人回到神殿后,发现了阿纳金的所作所为。
阿纳金前往木法星进行疯狂屠戮。奥比旺告诉阿米达拉,阿纳金已经倒向黑暗。阿米达拉不愿相信这一切,她前往木法星寻找阿纳金,奥比旺跟踪了她。
尤达大师与帕丁展开了一场巅峰对决。尤达被西斯闪电击中后,被议员奥加纳救走。阿米达拉来到木法星,阿纳金向她透露了自己的野心:将来要消灭西斯皇帝,统治银河!这时,奥比旺出现了,师徒反目。对阵中,阿纳金跌入熔岩,奥比旺带着昏厥的阿米达拉乘船离开。
阿米达拉生下女儿莉亚和儿子卢克后,伤心气绝。阿纳金则被西斯皇帝找到并救活,他全身包裹上了黑色的盔甲,身体大部分都成了机械装置。西斯皇帝告诉阿纳金:“阿米达拉已被你杀死了”。
为防止西斯和阿纳金找到孩子,尤达建议把他们分开抚养。议员奥加纳领养女儿莉亚带回奥德朗星球。奥比旺则带着卢克回到阿纳金丧母的塔图因星。此间,西斯帝国开始建造死星。
④《新希望》(我国未引进)
共和国灭亡后,邪恶的银河帝国控制了整个银河系,但是反抗军仍旧坚持不懈地与之对抗。获得了死星设计图的莉亚公主在黑武士达斯·维达穷追下被俘。隐居在塔图因星球的奥比旺会同年轻的天行者卢克等人前往营救。
时隔多年,奥比旺和其“弟子”黑武士又一次交锋了。为了成就卢克的原力,奥比旺大义献身,自愿死在黑武士的剑下。亲眼目睹这一悲剧的卢克没有意识到,黑武士是他的亲生父亲。拿到了死星的设计图,反抗军针对弱点成功摧毁了它,获得了阶段性的胜利。
⑤《帝国反击战》(我国未引进)
死星虽然被摧毁,但是帝国的势力仍旧无处不在。很快反抗军的秘密基地被帝国舰队发现,黑武士派遣部队对秘密基地实行毁灭式扫荡,反抗军不得不撤退。
卢克来到达可巴星接受隐居于此的尤达大师的训练。为了防止其重蹈父亲的经历,尤达大师刻意加强对年轻卢克情绪控制的训练。带着莉亚投靠老友兰多·卡罗斯,不小心踏入了黑武士的陷阱。感受到好友受难的卢克决心只身前往营救他们。
命运注定让这对父子沙场相对———黑武士维达一边和卢克打斗,一边引诱这位年轻的绝地武士倒向黑暗势力。卢克却始终不肯向黑暗原力低头。失去耐心的黑武士向卢克发动了猛烈攻击。奋力抵抗的卢克失去了握剑的手臂,黑武士向他透露自己是他的父亲,催他加入黑暗原力的一边。卢克高喊一声“不”,纵身跳入无底的深渊……
兰多暗中释放了莉亚等人,大家救回了奄奄一息的卢克,并帮他装上了机械手臂。
⑥《武士归来》(我国未引进)
尤达大师的生命力逐渐消逝,离去前,他告诉卢克,黑武士维达的确是他的亲生父亲,莉亚则是他的姐姐。当他最终面对黑武士的挑战时,他才能真正成为绝地武士。
为破坏第二代死星,莉亚公主等人前往恩多星球,在当地居民的帮助下,成功将死星防护罩破坏。独闯虎穴的卢克无法抵御代表黑暗最高势力的帕丁皇帝的西斯闪电,陷入绝境。身处一旁的黑武士眼见儿子即将死去,终于觉醒,抱起帕丁扔进死星的核心,但自己却受到闪电的致命破坏。临死前,黑武士脱去铠甲,向儿子真诚地忏悔,天行者阿纳金终于恢复了善良的本性,在卢克“父亲!父亲!”呼唤声中,他释然地微笑着死去。
2006年10月16日
2006年10月15日
执子之手,与子偕老
一直欣赏这样一种爱情:没有太多的轰轰烈烈惊天动地,有的是象流水一样绵延不断的感觉;没有太多的海誓山盟花前月下,有的是相对无言眼波如流的默契……这该是一种“执子之手,与子偕老”的感觉吧,在陌生的人群中,在迷失和彷徨间,你却始终安详而从容——因为你知道,冥冥之中,自有一双属于你的双手,它们紧紧地握住你,陪你走过所有的阴天和所有的艳阳天,直到一生一世。
在我们平凡的生命里,本来就没有那么多琼瑶式的一见钟情,没有那么多甜蜜得催人泪下、痛苦得山崩地裂的爱情故事:在百丈红尘中,我们扮演的是自己,一些平平凡凡的生生死死的普通人。于是我们珍惜爱情,珍惜迎面而来的、并不惊心动魄的感情。
在这种爱情故事里,男主人公和女主人公不一定是要一见钟情的,最初他们可能会象陌生人一样擦身而过,象最平常的朋友一样,见面只打一声招呼,笑一笑,然后远去。之后有一天,在暮色里,你忽然发现她的背影竟是如此的让你心动;一种让你心疼的怜惜就这样不经意地撞中了你,你这才发现,不知不觉地,习惯了擦身而过的她已经走入了你的生命,于是你们就开始了一段美丽的爱情。
爱情都是美丽的,虽然你们的爱情或者并不动人;恋爱中的人们都是美丽的,虽然你们或者都很平凡。舒婷描绘过这样一道风景:大街上,一个安详的老妇人和一个从容的老人微笑着,从不同的方向面对面地走近,走近;然后是微笑着,鼻尖顶着鼻尖地站着,双手紧紧地系在一起,身后西下的阳光把他们的头发和笑容染成一片暖暖的黄,身旁的人们被他们的幸福染成一片温暖。
起初你们还在怀疑这种爱情,因为它毕竟不象当初设想的那样完美、那样精致、那样浪漫。那只是淡淡的一种感觉,没有大喜也没有大悲,没有九百九十九朵玫瑰也没有魂断蓝桥——只是一种手牵着手,并肩漫步的感觉。他们说婚姻是一座围城,进去了的想出来;而你们就这样手牵着手,坦坦然然地一起走入围城里,互相扶持着,把许许多多毫不动人的日子走成一串风景。这么多年了,回忆起来,所有平凡的片段,所有曾抱怨过、曾怀疑过的时光其实是生命中最温馨的篇章;所有淡淡的日子,其实都是象“空山灵雨”一样,淡得韵味绵长。
执子之手,与子偕老。这该是一种并肩站立,共同凝望太阳的升起、太阳的落下的感觉;该是一种天变地变情不变的感觉。
他们说时间可以冲淡一切,可总有些东西是地久天长海枯石烂的。天上比翼,地上连理,总有一种爱情,是象山一样执着,象海一样深沉,象天空一样广阔的。在下雨的时候,你在车站孤伶伶地望着分飞的雨线,你的心情是无可奈何的沉郁。这时从旁边伸过一把伞来,为你遮住了分飞的雨丝和阴暗的天空;你不用回头,便知道是如山如海如蓝天的他正站在你的旁边了,便有一种极温暖极踏实的感觉涌上心头:雨丝就让它分飞吧,天就让它阴暗吧,此时你已有了一把伞,而你的心情也因此而阳光灿烂。
他们说时间可以让一切蒙上灰尘,可总有些东西是历久常新的。牵在你的手中,所有的人生、所有灿烂或不灿烂的日子都变得崭新而明媚。时光它总是在不停地走,回首之时不觉以是满身尘垢;你却仍然愿意蒙上眼睛,毫不保留地把双手都交给这生生世世的恋人……
执子之手,与子偕老。当你哭泣的时候,有人陪你伤心,倾听你诉说,为你抚平凌乱的发和憔悴的颜容,告诉你明天依旧阳光灿烂;当你笑容明媚的时候,整个世界都和你一起明媚,而他静静地站在一旁,微笑着看着你和阳光一般地灿烂……
2006年10月14日
值得深思的四个管理小故事
《故事1》袋鼠与笼子
有一天动物园的管理员们发现袋鼠从笼子里跑出来了,于是开会讨论,一致认为是笼子的高度过低。所以他们决定将笼子的高度由原来的十公尺加高到二十公尺。
结果第二天他们发现袋鼠还是跑到外来,所以他们又决定再将高度加高到三十公尺。没想到隔天居然又看到袋鼠全跑到外面,于是管理员们大为紧张,决定一不做二不休,将笼子的高度加高到一百公尺。
一天长颈鹿和几只袋鼠们在闲聊,「你们看,这些人会不会再继续加高你们的笼子?」长颈鹿问。 「很难说。」袋鼠说:「如果他们再继续忘记关门的话!」
【心得】 事有「本末」、「轻重」、「缓急」,关门是本,加高笼子是末,舍本而逐末,当然就不得要领了。管理是什么?管理是抓事情的「本末」、「轻重」、「缓急」。
《故事2》扁鹊的医术
魏文王问名医扁鹊说:「你们家兄弟三人,都精于医术,到底哪一位最好呢?」 扁鹊答说:「长兄最好,中兄次之,我最差。」 文王再问:「那么为什么你最出名呢?」
扁鹊答说:「我长兄治病,是治病于病情发作之前。由于一般人不知道他事先能铲除病因,所以他的名气无法传出去,只有我们家的人才知道。
我中兄治病,是治病于病情初起之时。一般人以为他只能治轻微的小病,所以他的名气只及于本乡里。
而我扁鹊治病,是治病于病情严重之时。一般人都看到我在经脉上穿针管来放血、在皮肤上敷药等大手术,所以以为我的医术高明,名气因此响遍全国。」 文王说:「你说得好极了。」
【心得】 事后控制不如事中控制,事中控制不如事前控制,可惜大多数的事业经营者均未能体认到这一点,等到错误的决策造成了重大的损失才寻求弥补,有时是亡羊补牢,为时已晚。
《故事3》曲突徒薪
有位客人到某人家里作客,看见主人家的灶上烟囱是直的,旁边又有很多木材。客人告诉主人说,烟囱要改曲,木材须移去,否则将来可能会有火灾,主人听了没有做任何表示。
不久主人家里果然失火,四周的邻居赶紧跑来救火,最后火被扑灭了,于是主人烹羊宰牛,宴请四邻,以酬谢他们救火的功劳,但是并没有请当初建议他将木材移走,烟囱改曲的人。 有人对主人说:「如果当初听了那位先生的话,今天也不用准备宴席,而且没有火灾的损失,现在论功行赏,原先给你建议的人没有被感恩,而救火的人却是座上客,真是很奇怪的事呢!」 主人顿时醒悟,赶紧去邀请当初给予建议的那个客人来吃
酒。
【心得】 一般人认为,足以摆平或解决企业经营过程中的各种棘手问题的人,就是优秀的管理者,其实这是有待商榷的,俗话说:「预防重于治疗」,能防患于未然之前,更胜于治乱于已成之后,由此观之,企业问题的预防者,其实是优于企业问题的解决者。
《故事4》秀才买材
有一个秀才去买材,他对卖材的人说:「荷薪者过来!」卖材的人听不懂「荷薪者」(担材的人)三个字,但是听得懂「过来」两个字,于是把材担到秀才前面。 秀才问他:「其价如何?」卖材的人听不太懂这句话,但是听得懂「价」这个字,于是就告诉秀才价钱。 秀才接着说:「外实而内虚,烟多而焰少,请损之。(你的木材外表是干的,里头却是湿的,燃烧起来,会浓烟多而火焰小,请减些价钱吧。)」卖材的人因为听不懂秀才的话,于是担着材就走了。
【心得】 管理者平时最好用简单的语言、易懂的言词来传达讯息,而且对于说话的对象、时机要有所掌握,有时过分的修饰反而达不到想要完成的目的。
2006年10月13日
XP有一个很无敌的命令
用来替换文件的replace,连正在使用的文件也能替换。非常无敌。
比如:
在C:\下建一个目录,c:\aaa
然后复制一首mp3到c:\aaa并命名为c:\aaa\a.mp3
然后再复制另一首歌到C:\a.mp3
然后用media player 播放c:\aaa\a.mp3
在命令提示符下输入:replace c:\a.mp3 c:\aaa
过一会,是不是播放的歌已变为另一首。
用这个命令来替换系统文件真是太爽了,并且XP的系统文件保护也对它无效。
再也不用到安全模式下去替换文件了
格式
REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W]
REPLACE [drive1:][path1]filename [drive2:][path2] [/P] [/R] [/S] [/W]
[drive1:][path1]filename 指定源文件。
[drive2:][path2] 指定要替换文件的
目录。
/A 把新文件加入目标目录。不能和
/S 或 /U 命令行开关搭配使用。
/P 替换文件或加入源文件之前会先提示您
进行确认。
/R 替换只读文件以及未受保护的
文件。
/S 替换目标目录中所有子目录的文件。
不能与 /A 命令选项
搭配使用。
/W 等您插入磁盘以后再运行。
/U 只会替换或更新比源文件日期早的文件。
不能与 /A 命令行开关搭配使用。
2006年10月12日
2006年10月11日
担心
很担心将来孩子认识世界的时候,这个世界还剩下什么?
也许,将来没有严严夏日,瑟瑟秋风,皑皑白雪,一年只剩下春意融融,虽然过得舒适,但这是不完整的。
也许,将来没有悠悠白云,朗朗碧空,蔚蔚清风,周围只剩下高楼林立,虽然住得舒服,但这是不优雅的。
也许,孩子不再明白什么是红花绿叶,什么是小桥流水,将来的世界只剩下“0”和“1"。
2006年10月10日
马赛曲
La Marseillaise
Allons enfants de la Patrie,
Le jour de gloire est arrivé !
Contre nous de la tyrannie,
L'étendard sanglant est levé !
L'étendard sanglant est levé !
Entendez-vous dans les campagnes
Mugir ces féroces soldats ?
Ils viennent jusque dans nos bras
Egorger nos fils et nos compagnes !
(Refrain)
Aux armes, citoyens !
Formez vos bataillons !
Marchons ! marchons !
Qu'un sang impur
Abreuve nos sillons !
Que veut cette horde d'esclaves,
De traîtres, de rois conjurés ?
Pour qui ces ignobles entraves,
Ces fers dès longtemps préparés ?
Ces fers dès longtemps préparés ?
Français, pour nous, ah! quel outrage !
Quels transports il doit exciter !
C'est nous qu'on ose méditer
De rendre à l'antique esclavage !
(au Refrain)
Quoi ! ces cohortes étrangères
Feraient la loi dans nos foyers !
Quoi ! ces phalanges mercenaires
Terrasseraient nos fiers guerriers !
Terrasseraient nos fiers guerriers !
Grand Dieu ! par des mains enchaînées
Nos fronts sous le joug se ploieraient !
De vils despotes deviendraient
Les maîtres de nos destinées !
(au Refrain)
Tremblez, tyrans et vous perfides,
L'opprobre de tous les partis,
Tremblez ! vos projets parricides
Vont enfin recevoir leurs prix !
Vont enfin recevoir leurs prix !
Tout est soldat pour vous combattre,
S'ils tombent, nos jeunes héros,
La terre en produit de nouveaux,
Contre vous tout prêts à se battre !
(au Refrain)
Français, en guerriers magnanimes,
Portez ou retenez vos coups !
Epargnez ces tristes victimes,
A regret s'armant contre nous.
A regret s'armant contre nous.
Mais ces despotes sanguinaires,
Mais ces complices de Bouillé,
Tous ces tigres qui, sans pitié,
Déchirent le sein de leur mère !
(au Refrain)
Amour sacré de la Patrie,
Conduis, soutiens nos bras vengeurs !
Liberté, Liberté chérie,
Combats avec tes défenseurs !
Combats avec tes défenseurs !
Sous nos drapeaux, que la victoire
Accoure à tes mâles accents !
Que tes ennemis expirants
Voient ton triomphe et notre gloire !
(au Refrain)
Nous entrerons dans la carrière
Quand nos aînés n'y seront plus;
Nous y trouverons leur poussière
Et la trace de leurs vertus.
Et la trace de leurs vertus.
Bien moins jaloux de leur survivre
Que de partager leur cercueil,
Nous aurons le sublime orgueil
De les venger ou de les suivre !
(au Refrain)
2006年10月9日
Memory
Midnight
Not a sound from the pavement
Has the moon lost her memory?
She is smiling alone
In the lamplight
The withered leaves collect at my feet
And the wind begins to moan
Memory
All alone in the moonlight
I can smile at the old days
Life was beautiful then
I remember
The time I knew what happiness was
Let the memory live again
Every street lamp
Seems to beat
A fatalistic warning
Someone mutters
And a street lamp gutters
And soon it will be morning
Daylight
I must wait for the sunrise
I must think of a new life
And I mustn't give in
When the dawn comes
Tonight will be a memory too
And a new day will begin
Burnt out ends of smoky days
The stale cold smell of morning
The street lamp dies
Another night is over
Another day is dawning
Touch me
It's so easy to leave me
All alone with my memory
Of my days in the sun
If you touch me
You'll understand what happiness is
Look a new day has begun ...
2006年10月8日
在中国生存下去的法则
总则:
1、不要再相信任何政府给你描绘的美好前景了。经历了房改、医改、教改以后,如果你还没醒过来,还以为以后的生活能越“改”越好,那是太天真啦。
2、中国会饿死、病死、穷死人,但绝不能饿死、病死、穷死大部分人。不少官商要赚钱,所以政府会踩着这条底线走;这条底线,是估算政府以后改革方案的最好方法。
关于工作:
工作是生活收入之源,所以为了以后更好的活下去,哪里工作收入高,就跑哪里去,哪个区域政府搞活了,就去哪。跟着政策走,广州不行了去上海,上海不行了去北京,北京也不行了就去别的地方,总之要比别人先走一步。政策时时变,朝令夕改,千万别信什么远景,别做“永不生锈的螺丝钉”。
现在一个城市的发展能力或经济状况,和当地政府官员的能力,和中央对地方的重视程度关联太大。而这些东西在一次会议上就能通通改变,我们平民无法控制的。
关于身体:
现在流行“45以前命换钱,45以后钱买命”的说法,因此很多年轻人因为对将来美好生活的渴望,不惜透支身体,这种做法是愚蠢的。看看现在的医保吧,一场大病,能把你毕生的钱耗光!然后你就等死吧。不用多说了,一个个血淋淋的故事。
因此无论工作多忙,一定要注意身体,多锻炼,保持好的心境。如果一份工作看上去钱多点,但要用命去拼的,就建议你多考虑。没有钱可以省点花,没有老婆也可以过日子,但没有一个健康的身体,等待你的就只有死。
关于房子:
现在买房子有几个缺点:
1、房价虚高;
2、不平等条约和猫腻太多;
3、管理费、治安费等等加起来,不比租房便宜多少;
4、在一个地方买了房子,就相当于把你自己绑定在一个地方了,你以后就很难再移动。而政策时时变,很难说那个地方就一直受重视。举个例子,以前广州的商业中心都在人民路一带,南方大厦多出名啊,现在呢?我见到不少人都在不停买卖房子,一间又一间,被政府牵着鼻子走,亏死了。
5、中国的城市规划还存在很大的问题,一直在不停的变,将来必定还有一次次的“重新规划”,因此说不准哪一天,你发毕生积储,供上10年20年买下来的房子,会被贴上个大大的“拆”字,逼迁你,然后给你一小笔赔偿。
房价在中国无限走高是不可能的(市中心除外,但在中国,连“迁都”这样的事都讨论过了,其实你还是不能确定,哪里会是将来的市中心吧?),只要保持自己的购买力不低于大众,看看手头上有多少钱,将来找个可以安度晚年的地方,或者遇上房价低谷,再买不迟。
关于伴侣:
恋爱的成本很高,无论金钱还是时间,尤其对于男人而言。所以如果你不是太有钱,那么认认真真的找个人结婚,比什么都好。千万别因为寂寞而找朋友,玩来玩去,最后你会发觉是虚梦一场,梦里耗掉的,是你的钱、时间、前途和理想。
关于教育:
可以这么说,中国的教育是浪费金钱,我没听说谁是从大学里学到有用东西的。但在中国,不读个大学也确实不行,但大学就足以。刚出来工作的时候,学历好象看起来很重要,因此容易有误导,学生们拼命的读,硕士、博士...其实只要你工作上5年,就会发现,你的工作经验和社会关系比什么都重要。一个好的社会关系网绝对比什么博士学位重要。
社会关系靠什么积累?主要靠的是工作中的接触!
关于车子:
车子在中国的作用真的不大,特别是“鼓励买车,控制用车”的政策即将出台,不知道你将要为自己的爱车付出怎样的代价。
关于理财:
手里的钱是一个人的力量所在,这句话听起来有点铜臭,但这是社会事实。这点道理,通常是女人比男人理解得深一点,因此很大一部分家庭,女人都是通过夺财权去夺家权的。在这些家庭里为什么男人要怕女人,都是因为他手里没钱。
在整个社会都一样,没有钱,你在社会里会举步为艰,什么都办不了。因此,无论收入多少,你都要有理财的意识,懂得存点钱,以备不时之需。钱最好存到不同的银行,有条件的朋友,最好国外也存一点,因为政府最新的政策里,是允许银行破产的。
在投资的时候,一定要把钱投到你最熟悉的领域,并做足够的投资分析,“不熟不做”是前人用血泪得出的教训。别听信社会上的各种利好消息(包括股市、资金、经营等等),就盲目的把你的钱给出去,往往给出去以后你才会发现要收回来是很难的。你要知道,通常经过正常媒体鼓吹出来的消息往往都是有目的的。
2006年10月7日
CVS使用与服务器配置
第一部分 基本工作流程
1 登录
2 得到一个工作副本
3 修改
3.1添加档案
3.2删除档案
3.3重命名档案
3.4添加二进制文件
4 查询状态和解决分歧
5 提交和清除副本
第二部分 高级选项
6 取出过去的档案
6.1按时间取出
6.2按标记取出
6.2.1 标记
6.2.2 按标记取出
7 其它选项
7.1 更新工作版本
7.2 锁定与解锁文件
7.3 监视文件
8 分支
8.1 创建分支
8.1.1 基于当前工作副本创建分支
8.1.2 基于旧版本创建分支
8.2 访问分支
8.3 合并分支
8.3.1合并整个分支
8.3.2一个分支多次合并
9 发行软件
第三部分 CVS Server架设及管理
10 配置CVS Server
10.1 CVS的基本配置
10.2 权限设置
10.3 管理文件概述
10.4 外部脚本
附录
A 关键字列表
1 登录
加入环境变量:
echo "export CVSROOT=:pserver:user@server:/path">>~/.bashrc
. .bashrc
注:pserver是服务器验证方式,也可以用别的方式验证,取决于服务器。
user登录的用户名
server服务器
/path服务器仓库路径
也可以不设置环境变量,在登录的时候用-d选项指定。
登录:
如果设置了环境变量,即可用以下方式登录:
cvs login
若没有设置变量,则用以下方式登录:
cvs -d ":pserver:user@server:/path" login
输入密码没出错便是登录成功,提示符什么都没有变。
退出:
cvs logout
2 得到一个工作副本
cvs checkout 档案名
3 修改
3.1添加档案
3.1.1添加文件
在工作副本中创建要添加的文件,然后使用
cvs add filename
命令告诉CVS你希望对该文件进行版本控制,最后使用
cvs commit filename
真正把该文件提交到仓库中。
会弹出一个文本文件让你写注释,若不想弹出,在命令中加-m "comment"直接添加注释。
3.1.2添加目录
在副本中创建目录
mkdir dir
存入档案:
cvs add dir
3.2删除档案
3.2.1删除文件
rm filename
cvs remove filename
cvs commit filename
3.2.2删除目录
在CVS中删除目录就是删除该目录下的所有文件,CVS并不能直接删除目录本身,所以下一次checkout的时候仍会有该目录的存在,若不想该目录存在副本中,在checkout的时候加上-P选项,注意该选项会删除所有的空目录。
进入该目录并删除目录下所有的文件
cvs remove 刚刚删除的所有文件
cvs commit
cvs update -P
3.3重命名档案
3.3.1重命名文件
mv old new
cvs remove old
cvs add new
cvs commit old new
3.3.2重命名目录
mkdir new
cvs add new
mv old/* new/
cd old && cvs remove 刚刚移走的所有文件
cd new && cvs add --------
cd .. && cvs commit
cvs update -P
可以看出删除,移动,重命名的操作是麻烦的,所以在最初建立目录结构的时候一定要谨慎。
3.4添加二进制文件
要注意的是提交二进制文件要加选项-kb
cvs add -kb 文件名
cvs commit 文件名
如果未加-kb 选项,可以用cvs admin 命令来恢复:
cvs admin -kb 文件名
cvs update -A 文件名
cvs commit 文件名
4.查询状态和解决分歧
在提交文件之前,最好查看一下文件的当前状态,以避免和他人发生冲突:
cvs status -v 档案名
常见状态:
Up-to-date : 最新版
Locally Modified : 已修改,还未提交改变
Needs Patch : 需更新
Needs Merge : 另有人向仓库提交了新版本,而你也作了修改
Needs Checkout : 另有人向仓库提交了新版本。
当发现工作副本和库存版本不一致时(若出现需更新和需合并的状况,则需要查看副本和服务器文件的差异),可以用下面的命令查看差异之处:
cvs diff
cvs diff -c
或库存版本和自己的修改有冲突,可以用查询记录的命令看看是和谁发生了冲突:
cvs log
找到和自己相冲突的人员协商解决。
5.提交和清除副本
5.1 提交修改
在对文件作了一些修改之后,需要提交到服务器,用以下的命令可以完成提交:
cvs commit 档案名
写注释不是必须的,但多人开发的时候最好写上注释,而且要注意注释的质量,cvs commit会弹出一个文件让你写注释,如果不想弹出文件,可以加-m选项直接写上注释,如:
cvs commit -m "comment" 档案名
5.2 清除副本
当你完成这个程序并要转到其它任务之前,你需要删除这个副本,这是一个好习惯,因为当你再要用这个程序的时候,你不是需要以前这个版本,而是要到服务器上去checkout新的版本。下面这个命令可以 帮你清除副本:
cvs release -d 档案名
当然你也可以直接用rm命令删除副本,但推荐使用上面的命令,因为它可以帮你检查文件的变动。
6 取出过去的档案
6.1 按时间取出
cvs -q update -D "2006-xx-xx xx:xx:xx GMT"
注意:在按时间取档案的时候最好先用cvs log 档案名 查看要取什么时候的档案,因为在CVS内部使用的是GMT时间,而计算机上多使用本地时间。两者相差很大。取出过去的档案并不能修改它,若要修改就必须开辟分支。
恢复:
cvs -q update -A
6.2 按标记取出
6.2.1 标记
标记是当软件开发到一定阶段后人为的为它打上的标记,以作为将来维护的基点。加 标记的方法如下:
cvs -q tag 标记名称
6.2.2按标记取出:
cvs checkout -r 标记名
cvs -q update -r 标记名
恢复方法同上。
7.其它选项
7.1 更新工作版本
或许别人更改了一些程序,此时应更新一下自己的工作副本:
cvs update
cvs update -d
7.2 锁定与解锁文件
该选项是希望在自己修改文件的同时不让别人修改,用了此选项之后一定要记得在完成工作之后使用解锁命令,否则别人将不能修改此文件。
cvs admin -l file
cvs admin -u file
7.3 监视文件
由于锁定文件之后别人不能checkout,可能会降低工作效率,CVS的跟踪文件可以更好的完成锁定文件的功能,使用cvs watch on命令跟踪一个仓库或文件,那么这个里面的文件就checkout的时候就是只读状态,要编辑他就得先用cvs edit命令,这样别人就能用cvs watchers命令查看有多少人在修改这个文件。
8.分支
当软件正式发行后,你也继续在开发这个软件,准备过一段时间再推出新版本,但发行版本经过一段时间的使用发现了某些BUG,可当前的版本处于不稳定状态,不能基于最新的代码去修改发行版本的错误,这时就需要从发行版文件创建一个分支来修改这个错误,修改之后,可以选择将其合并到主干。
8.1 创建分支
8.1.1 基于当前工作副本创建分支:
cvs tag -b tag_branch(分支版本号)
8.1.2 基于旧版本创建分支
cvs rtag -b -r tag_old tag_branch 档案名
也可使用以下方法为旧版本创建分支:
依标记取出过去的一个版本:
cvs checkout -d dir -r tag_old 档案名
-d表示新建一个目录,取出的档案会放在这个目录中。
进入这个目录 ,创建分支:
cvs tag -b tag_branch
8.2 访问分支
分支是在CVS仓库中创建的,创建分支不会自动把当前的副本切换到分支上,有两种方法访问分支:
更新当前工作副本,使其成为分支:
cvs -q update -r tag_branch
重新按标记检出:
cvs checkout -r tag_branch 档案名
回到主干:
cvs -q update -A
8.3 合并分支
8.3.1 合并整个分支
进入主干目录:
cvs -q update -j tag_branch
cvs -q commit
8.3.2 一个分支的多次合并
假如有一个分支开发到1.2.2.2的时候你合并了一次,但你对分支又进行了开发,到1.2.2.4的时候又想进行一次合并,这时你按第一次合并可以会出现一些问题,你可以指定只合并从1.2.2.2到1.2.2.4 的变化:
cvs -q update -j 1.2.2.2 -j tag_branch
合并的时候可以会发生冲突,你应该在提交新版本之前解决它。
9. 取出档案,发行版本:
由于在checkout的时候CVS会为每个目录加上一个CVS目录,但软件正式发行的时候是不需要这个目录的,可以用以下命令得到一份干净的软件发行版本:
cvs -q export -r 标记名 -d dir 档案名称
10.配置CVS Server
10.1 cvs的基本配置:
检查/etc/services中有没有cvspserver:
cat /etc/services |grep cvs
在/etc/xinetd.d/下建立cvspserver文件,输入以下内容:
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
protocol = tcp
server = /usr/bin/cvs
server_args = -f --allow-root=/cvspath(这里是CVS的仓库,任选) pserver
}
建立仓库目录:
mkdir $cvspath
chown -R user:user $cvspath
不使用root用户做为cvs的默认用户。将仓库的权限交给user。
重启xinetd:
service xinetd restart
在.bashrc中加入环境变量:
export ":pserver:user@127.0.0.1/cvspath"
运行:
. .bashrc
初始化:
cvs init
或许要先登录再初始化:
cvs login
cvs init
使用cvs import命令将自己的档案导入CVS:
进入源代码目录:
cvs import -m "comment" 档案名 厂商或作者 版本号(可以随便选个,没什么影响)比如有个test项目:
cd test
cvs import -m "注释" test user v_0_0_1
若要建立多仓库CVS,只需在server_args多加一个选项即可,例:
server_args = -f --allow-root=/var/source --allow-root=/var/resource pserver
由于xinetd有长度限制,可以使用如下方法:
注释或删掉server_args行,将server行修改如下所示:
server = /etc/cvs.run (文件位置任选)
在所指定的目录下建立cvs.run文件,该文件要有执行权限:
#!/bin/bash
/usr/bin/cvs -f \
--allow-root=/var/source1a \
--allow-root=/var/source2 \
.............
chmod +x cvs.run
10.2 权限设置:
CVS自己的权限设置有限,只有三个基本文件:
passwd
writers
readers
passwd是为了建立CVS自己的用户认证系统。格式为:
登录用户:加密的密码:系统中对应的用户
writers中的用户可进行写操作。
readers中的用户只可进行读操作。
可以借助系统用户和操作系统自身的文件权限来限制用户的读写。还可以借助各种外部脚本来管理,这个后面再讲。
10.3管理文件概述
在$CVSROOT/CVSROOT目录下有许多文件 ,这里简单介绍一下:
config 配置文件,可以配置系统认证方式以用lockdir等
modules 模块文件
commitinfo 在进行cvs commit的时候会检查这个文件,如果里面有什么脚本的话会先执行这里面的脚本,通过这个文件会实现的功能数不胜数,好好用了。相似的还有loginfo,taginfo
passwd,writers,readers,前面说了。
10.4外部脚本
在CVS源码下有一个contrib目录,这个目录下面有很多脚本并有详细的说明。还有在主页上也有很多工具提供下载。
A 关键字列表
$Author$ 用户名
$Data$ 登记时的时间
$Header$ 标准的首部,包含RCS的完整路径名,日期,作者
$Id$ 除RCS文件名不完整外与$Header$同.
$Log$ 包含RCS的完整路径名,版本号,日期,作者和在提交时提供的日志信息.
$RCSfile$ 包含RCS的文件名,不包括路径名
$Revision$ 分配的版本号
$Source$ RCS文件的完整名
$State$ 分配的版本的状态,由 cvs admin -s 分配.
$CVSHeader$
$Name$
$Locker$
$Date$
-ko:关闭关键字替换
2006年10月6日
历史珍贵录音:二泉映月 [录音:1950年夏]
1950年夏,中央音乐学院杨荫浏、曹安和教授专程来无锡为阿炳演奏录音,此时阿炳已完全荒弃音乐达三年之久,经过三天的练习,分两次录音,共留下《二泉映月》《听松》《寒春风曲》三首二胡作品和《大浪淘沙》《龙船》《昭君出塞》三首琵琶作品。后《二泉映月》、《大浪淘沙》获二十世纪华人经典音乐作品奖。
1950年9月,中央音乐学院民乐系拟聘阿炳为教师,但当时他已身患重病,无力应聘,12月4日与世长辞,葬于无锡西郊山脚下“一和山房”墓地,1951年3月27日其妻董彩娣病故。
《二泉映月》以一声长叹开头,这是人类之叹,象初生婴儿的哭声,懂了事通了人情的人不能不叹,你要发展要完美就遇到坎坷,你不能不叹!这一声长叹是超人之叹,亦是常人之叹。为什么叹?下面的第一主题就演释一股泉水在幽暗、曲折、深邃、崎岖的山谷中呜咽地奔突,这就是我们的人生!每个人的人生都一股在山谷奔突的泉水,曲折而艰难。如华彦钧这样的人生是奔突在秃山寒石荒漠中的流沙,连水的滋润都没有,每步都是苦难,都是挣扎,都是突围,都是把生命抻得很细很长欲断的程度,有时又压得很扁很小,挤压炸了没了的程度。但是,生命就是生命,他苦难而不屈服,历经磨难而更加坚韧,失败后更激起昂扬斗志,这才是生命的价值和华彩。而如贾宝玉似的生命,他也有烦闷、有苦烦,他的生命泉水如在苏州园林假山石中奔突的泉水,虽曲折变幻而凛冽润泽,有韵有声!《二泉映月》第一个主题是生命叹息后对生命的形象描绘:这样路途险阻的山路,这样奔流不息的水流,这样游刃有余坚韧耐磨的生命,正是在忽明忽暗忽高忽低忽平忽险忽坚忽柔的山谷中历练呀!华彦钧抓住了生命的真谛,先用音符形象地描绘他在苦难中的炼狱过程,这是对真生命的如实描摹,用音符描摹得如此逼真透彻每个人的心灵、骨髓、魂魄,确实前无古人。第二乐章是对生命的颂歌。这个颂歌用稍有变化的音符重复6次,反复咏叹歌吟,其意是生命如此艰辛、生命如此可爱、生命如此多变、生命因艰辛多变耐磨、而可爱可亲,生命于人只有一次,无论怎么艰辛苦难也让他发光焕彩,在咏叹歌吟的音节中时时跳跃着显示清风明月、流水飘花的美艳篇章,展示着大自然的华美,美丽的大自然既能抚慰受苦的心灵,又能激励人向上……。世间的音符在华彦钧手指下变幻出如此迷人的音色,《二泉映月》的音色是美丽动人至深的,她的微妙旋律能震撼、敲击每个人的心灵牵扯的每一丝神经拨弄出每个人的情之所钟,身之所感,心之所盼,神之所叹!那种娓婉、那种缠绵、那种沉郁、那种不弃不舍的追求、那种如泣如诉的哀怨、那种含着泪水的昂扬和笑脸,表现了华彦钧虽历经苦难折磨而对生活依然热恋的情感、叹息、倾诉、描绘苦难、惋叹生活、品味苦难、超跃苦难、热恋生活、希望生活、战胜生活、哀而不悲、怨而不怒,如在阴晴互变的天气中行在山阴道上,风光旖旎中有一种昂扬柔韧的高雅情调――这是我无数次欣赏《二泉映月》的感悟,短短七分钟,胜似观赏前人的《江山万里图》和《清明上河图》,那有形的图画感人至深,使我产生追忆古代的市井繁华的幽思,而这无形有韵的《二泉映月》竟无微不至地融入我的生活的每一个空间,使我对现实、历史、未来产生深爱的激情,对生活萌生哲理的思索和诗意的联想,音乐的力量不可抗拒。真是大音希声,短短七分钟超迈人类千古音坛名曲,如灵魂的惊雷、如心灵的闪电,以一种闻所未闻的至高、至圣、至纯、至美的天籁之音击中了小泽征尔那饱览世界名曲的对天籁有极强敏感的天才的心灵,使他不得不跪下去,这是五体投地的崇拜,这是心悦诚敬仰,这一切都是自然发生的,天才作品本不要炒作,她的一丝一缕、一字一行、一线一色都是击打人的灵魂的!我相信,贝多芬可以藐视身为高官的大诗人歌德的卑俗的人格,但不敢轻藐身着百纳衣瑟抖在无锡街头靠弹琴谋生的大天才华彦钧,华彦钧通过《二泉映月》已使自己高洁深邃,华美的灵魂飞跃天庭,与那些超跃时空的圣者为伍而俯视人间、悲悯人间,又倾情倾爱人间!
2006年10月5日
E-MAIL 编码——雾里看花
E-MAIL 一般在传送过程中都要对文件进行编码,因为 E-MAIL 只能传送 ASCII码格式的文字信息, ASCII 码为 7 位代码。非 ASCII 格式的文件在传送中必须经过编码工具编成相应的 ASCII 码进行传输,在接收到后接收端再根据编码规则进行解码。若非如此就很难在传输过程中出现编码截位的问题,导致收信方出现乱码,特 别是中文内码的文字,属于 8 位代码,并非标准的 ASCII 码形式,由于国内通行的大部分邮件服务器都能够处理 GB 内码文件,所以可以直接传送文件而不需要编码,但如果要将中文邮件发到国外或在某些不支持 8 位(非标准 ASCII 码格式)的某些邮件主机上传输,就会产生乱码。具体的说就是在直接发送中文或非 ASCII 码的邮件时邮件主机无法处理,便会把文件中每个字符的第八位都滤掉(截去第八位)从而使一些信息和原始信息截然不同,或邮件完全损坏成为乱码无法阅读。这也是目前造成邮件乱码的主要原因之一。而如果对邮件进行七位编码然后进行传输解码,就能解决截位乱码现象,使邮件准确无误。目前 E-MAIL 中一般采用 UU 、 MIME 、 BINHEX 三种编码标准,下面我们就来了解一下这几种标准。
一、 UU 编码( unix - to - unix encoding )
uuencode 和 uudecode 原来是早期 unix 系统使用的编解码程序,其内部所用算法为 Base64 后来被改写成为在 DOS 下运行的可执行程序。
UU 使用方法为:在进行邮件发送前,在 dos 方式下先用 uuencode.exe程序将原文件编码成 ASCII 文件,然后再进行发送。收件人在接到后再用 uudecode.exe 程序将文件还原。
这是 DOS 下的编码程序。在 windows 下类似的程序还有 wincode 和 winzip等, wincode 的使用原理同 DOS 下的 uuencode 、 uudecode 相同,只是利用了windows 的界面,从而使操作更为简便。 wincode 程序除支持 UU 编码外,同时支持mime , Binhex 等编码格式,应用范围颇为广泛。
我们以上所介绍的 UU 编码并非只能对中文进行编码,任何你要寄出的文件包括..exe 等二进制文件都可按照编码——> 发送——> 收信——> 解码还原的步骤进行传送。
二、 MIME ( Multipurpose Internet Mail Extention )标准的编码
UU 编码解决了 E-MAIL 只能传送 ASCII 文件的问题,但我们可以从编解码的过程看出其运用并不很方便,因而随后又发展出一种新的编码标准即 MIME(Multipurpose Internet Mail Extention )译作“多媒体邮件传送模式”。顾名思义,这种编码标准支持传送多媒体文件,可在一封电子邮件中附加各种格式的文件一起发送。
其实 MIME 定义的是一种编码规格,亦或可以说是一类编码的统称,能够符合MIME 标准的编码方式并非一种,而只要符合 MIME 规格便可顺利传送,在 MIME 定义下有两种编码方式 Base64 和 QP ( Quote-Printable ),QP 的规则是对资料中的 7位无须重复编码,仅将 8 位数据转成 7 位, QP 编码适用于非 ASCII 码的文字内容,例如我们的中文文件。而Base64 的规则是将整个文件重新编码成 7 位,通常适用
于传送二进制文件。
一般编码方式不同会影响编码之后的文件大小,而采用 MIME 标准编码的E-MAIL 软件一般能自动判别你的邮件是采用何种编码,然后自动选择用 QP 或 Base64来解码。
MIME 标准现已成为 Internet 电子邮件编码的主流。它的好处是以物体作为包装方式,可将多种不同文件一起打包后传送。发信人只要将要发的文件选好,它在传送时即时编码,收信人在收信时同时也是即时解码还原。完全自动化,非常方便。当然先决条件是双方的邮件软件都必须具有这项功能。使用这种方式发、收信双方所要做的工作就显得非常简单了,只须选定——> 寄出,其它的全部由电子邮件软件自动完成。由
于 MIME 的方便、可靠性,愈来愈多的电子邮件采用这种方式,我们最常见的 Netcape Mail , Internet Mail 等都是采用 MIME 方式。
三、 BINHEX 编码较少见,主要用在 MAC 机上, PC 机上很少见,在此不做讲解。
但当邮件传输时出现了由于 E-MAIL 编码不对而造成的乱码时, 我们要怎样识别和判断呢?
我们都知道每种编码其格式都有其各自特征,这就给了我们一个判别的标志。我们可以根据这些特征进行编码判断。
四、 UUENCODE 编码判断及解决。
由于 UUENCODE 内部所用算法为 Base64 ,其格式为:
begin 644 gx.zip Mig)0;....
...
end
其格式特征为在乱码之前会有“ begin xxx ”后紧跟被编码的原始文件名称,然后跟编码信件内容,在最后一行为“ end ”。
根据这些特征我们可以判断出编码方式为 UUENCODE 方式,我们就可以使用一些相应 DECODE 软件解码。
具体方法有:
(1)、将 Uuencode “乱码”邮件转寄到自己的邮箱中,再使用能够支持UU 解码的电子邮件接收程序 ( 如 Eudora 、 OutLook Express 等)来接收该邮件。
(2)、通过剪辑板将 Uuencode “乱码”存入文本文件,改文件名后缀为UE ,然后使用 Winzip 解码。
(3)、将 Uuencode “乱码”存入一个文件,然后在 DOS 下用 uudecode.exe程序将文件解码。
(4)、将 Uuencode “乱码”存入一个文件,然后在 Windows 下用 Wincode解码。
Wincode 除支持 UU 编码外也支持 MIME 、Binhex 等编码格式,应用范围颇为广泛。
五、 MIME 方式编码判断及乱码解决方法。
(一)、 Base64 encode 编码判断
Base64 大体格式为:
MIME-Version:1.0
Content-type:text/plain;Charset="us-ascii"
Content-transfer-encoding;base64
....
在乱码前一般有以下几部分“ 信头”:Content - type ( 内容及类型),Charset( 字符集)及 Content-Transfer-encoding( 内容传输编码方式)从以上信息非常好判断,解决方法有:
(1)、将 Base64 encode “乱码”邮件存成一个文本文件,改文件名后缀为..UUE,然后使用 Winzip 解码。
(2)、将 Base64 encode “乱码”邮件存成一个文件,将文件后缀改为..EML,由 OutLook Express 打开,就可以自动解码。
(二)、 QP 编码判断
QP 编码大体格式如下:
=A1A=B1Z=A6N=A1I=AT=DA
....
采用 QP 编码的信件也很容易判断,只要乱码内容有很多符号“ = ”就可判断为 QP 编码, QP 乱码解决方法有:
(1)、将 QP-encode “乱码”邮件转寄到自己的邮箱中,然后用支持 QP 解码的电子邮件接收程序(如 Netscape mail 、 Eudora 、 OutLook Express 、 Becky等)来接收该邮件。
(2)、使用 Winzip 对 Quoted-Printable 解码。必须注意 :
(a) 在邮件信头中检查、添加这样两行 : Mime-Version : 1.0 Content-Transfer-Encoding: quoted-printable ;
(b) 信头中间不要空行,信头和信体之间要有一个空行。这样形成的文件,改后缀名为 UUE ,即可双击启动 Winzip 得到解码。
除了上述编码造成乱码外,还有以下两种常见乱码:
(一) HZ 中文乱码
由于网友们可能使用不同的电子邮件收发软件,因此,来自各个网友的邮件内容可能包含着看不懂的乱码,例如,如果看到下面这串乱码 ,你一定看不懂它的意思:HZ- 学软件、用软件、买软件的好伴侣实际上这是一串“简体中文 HZ ”编码,如果使用 Outlook Express 发送邮件时,选用 HZ 编码,而邮件的接收者使用 Eudora 来阅读邮件,看到的就是这些乱码 。正确的方法是,在撰写邮件窗口中,选择“格式”菜
单下的“语言”命令,并选中“简体中文 ( GB2312 ) ”项,然后发送邮件。这时,如果你使用Outlook Express ,可以打开“查看”菜单点击“语言”选项中的“简体中文(GB2312) ”项,或者点击工具栏上“语言”后面的向下箭头,选择“简体中文(GB2312)”功能项,屏幕出现一个对话框,单击“是”按钮,所有邮件主题中含有指定字符集的邮件应用新的字符集。如果你使用 Eudora 之类的软件,可以使用“南极星”之类的软件,自动转换不同的汉字编码。如果还看不到的话,可将这些编码文本,拷贝到一个文本编辑器中查看。
(二)“半个汉字”乱码
汉字的另一个问题是所谓的“半个汉字”乱码。如果看到下面这串乱码,你一定看不懂它的意思:
“把砑⒂萌砑⒙蛉砑暮冒槁隆薄* ”
由于很多英文编辑软件以字符为单位来处理文本,汉字被删除一半后, 剩余的部分会和相邻的汉字重新组合,使得文本面目全非。因此,除了在输入、删除的时候注意这种问题外,还要注意不要在英文字处理软件中轻易使用“ 字符替换”功能,这往往会把一个汉字的后一个字符和相邻汉字的前一个字符当成一个汉字被替换掉。
对于“半个汉字”乱码,只要将“乱码”邮件存成一个文本文件,然后使用以字符为单位的编辑软件,将“乱码”行的首字符删除,后面的部分就会和相邻的“乱码”重新组合成可识别的汉字。
如果上述方法不能奏效,那么只好告诉对方正确的发送方式,请对方重新发一份邮件给你了。
六、相应编解码软件程序介绍。
判断出乱码信件的编码方法后,再根据自己所拥有的软件种类,选取合适的解码软件。由于不同平台上不 同的软件程序使用方法差别很大,作者无法在此一一说明 ,各位读者可自己参照程序附带的 Help 、 Readme 等文件的说明,自行对乱码邮件进行解码。这里介绍一些 DOS 和 Windows 下的编 / 解码程序以及大体优缺点,供各位使用时参考。
讲了这么多,相信大家对 E-MAIL 的编码有了一定了解,对于一般的编码乱码也有了一定的判别能力了。但 E-MAIL 乱码不仅仅是由于编码不同所造成的,还可能有其它的原因,比如:
1 、该邮件采用了其它少见的编码方法,如 Binhex 或 XXencode 编码等。只要乱码前面有“信头”信息(一般显示了该邮件所用的编码方式), 即可用 Xferp111或其它“智能型” Windows 程序将其解码。
2 、是否在中文环境内。如果你所用的操作系统是英文环境,而你又没有外挂中文系统(如中文之星)或未切换为中文(如 RICHWIN 四通利方或南极星等)编码方,则你自然看不到中文,而只能看到乱码。注意,双字节字符有中文简 / 繁体的 GB和 BIG5 码及日文的 JIS、EUC 和朝鲜文的 KSC 码等,在 GB 码环境下看其他双字节字符时也只能看到乱码。这就需要使用一些转码工具如 Richwin ,南极星等进行转码。
3 、邮件未经过编码造成第 8 位字节滤掉成为无法还原的死乱码文档。
七、一点体验:
笔者曾遇到过这样一个问题,本人曾用过的邮件软件 Internet Mail 一直都很正常,但后来装了中文 IE5.0 后,就发现很多信件都出现乱码,换用其他编码用Big5能正常显示,百思不得其解,后来查遍资料才知道在 Internet Mail 中在电子邮件表头中,有一个栏位是专门来说明目前信件内文之字元集的。Internet Mail 中文版将此栏位解释为:若是 BIG5 码(繁体中文编码)则将两个位元组合成一个中文字;若为ISO-8859-1 或其他拉丁语系字元集则一个位元组一个字元解释(而一般的英文邮件程式或中文化程式表头栏都为 ISO-8859-1 ) ,(之所以装 IE5.0 后出现乱码,可能是由于安装后改变了 Mail程式设置吧。)所以当发信者用一般的英文软体输中文信时,收信者用 Internet Mail 接收时就会产生乱码。
根本解决的办法是用 UltraEdit 编辑 Windows 中 System 中 Mailnews.dll 文件,将其中的“charset”换为“bingset”就可以了。
八、为了尽量避免出现乱码问题,下面给出几点建议 :
(1)、利用“附件”功能发送文件。
使用 Netscape 、 Eudora 或 Pegasus 等邮件系统附加这类非标准 ASCII 码格式的文件时,附加文件通常可以自动进行“ base64 ”方式编码(仅对附件部分进行编码)。在用“附件”方式发送邮件之前,无需进行编码; 如果编码的话,将会给解码带来很多麻烦,意即收件人必须再一次进行解码。一般来说收件人都可以成功解码这类“附加”文件,因此强烈建议你采用这种方法发送中文类邮件。
(2)、如果无法以附件方式发送文件,则必须在正文中发送中文或二进制文件。 如果发 / 收件人之间远隔万里,如在中国和英国之间,则传送过程中, 第八位将可能被截掉。这时最好先在正文中用中文给收件人发一封测试信,并了解对方能否正确收到邮件正文。如果第八位 被截掉,则收件人将会看到一些乱码,而不是上述的 uub64 Qp 等格式,而且这种信件几乎不可恢复。这种情况的解决方案是,在Netscape 、 Eudora 或 Pegasus Mail 等你所使用的邮件系统中,选择其首选项或选项配置中的“ Quoted Printalbe ”或“ MIME encoding ”项。
(3)、发送重要信息时先发测试信。
发送重要信息时,为了确认是否无须编码即可发送正文,应该先发送测试信。而且还应确定收件人能否对附件文件进行解码。如果发送已经编码的邮件,则最好添加足够的“信头”信息,以便收件人知道所需的解码方法 。比如可以把 uuencode /UUDeview 编码方式用 uuencoding 作信头。
这些都要靠大家多实践摸索来积累经验加以解决!相信大家都将不再害怕E-mail乱码!
2006年10月4日
FTP协议分析
根据是使用Port模式还是Passive模式,FTP使用不同的TCP端口号,在详细描述FTP前,我们来简单讨论一下TCP端口号的一些基本概念。TCP使用端口号来标识所发送和接收的应用,端口号可以帮助TCP来分离字节流并且帮相应字节传递给正确的应用程序。
TCP端口号可以是半永久的和暂时的。服务器端监听在半永久的端口上来让客户端访问。客户端使用暂时的端口在本地标识一个对话,客户端端口只在使用TCP服务时候才存在,而服务器端口只要服务器在运行就一直在监听。
TCP端口可以归为3类:
1、众所周知的端口来标识在TCP上运行的标准服务,包括FTP、HTTP、ELNET、SMTP等,这些端口号码范围为0-1023;
2、注册端口号用来标识那些已经向IANA(Internet Assigned Numbers Assigned Numbers Authority)注册的应用,注册端口号为1024-49151;
3、私有端口号是非注册的并且可以动态地分配给任何应用,私有端口为49152-65535;注册的端口号本来打算只给注册的应用使用,可近年来端口号已经陷入了到达极限的困境,你可能会看到本来应该是给注册应用使用的注册端口被非注册应用用做暂时的端口。
FTP Port模式和FTP Passive模式
当你对一个FTP问题进行排错时候,你首先要问的一个问题是使用的是port模式的还是passive模式。因为这两种行为迥异,所以这两种模式引起的问题也不同;在过去,客户端缺省为active(port)模式;近来,由于Port模式的安全问题,许多客户端的FTP应用缺省为Passive模式。
2.1 FTP Port模式
Port模式的FTP步骤如下:
1、 客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使用暂时的端口作为它的源端口;
2、 服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口;
3、 客户端发送一个ACK(确认)包;客户端使用这个连接来发送FTP命令,服务器端使用这个连接来发送FTP应答;
4、 当用户请求一个列表(List)请求或者发起一个要求发送或者接受文件的请求,客户端软件使用PORT命令,这个命令包含了一个暂时的端口,客户端希望服务器在打开一个数据连接时候使用这个暂时端口;PORT命令也包含了一个IP地址,这个IP地址通常是客户自己的IP地址,而且FTP也支持第三方(third-party)模式,第三方模式是客户端告诉服务器端打开与另台主机的连接;
5、 服务器端发送一个SYN包给客户端的暂时端口,源端口为20,暂时端口为客户端在PORT命令中发送给服务器端的暂时端口号;
6、 客户端以源端口为暂时端口,目的端口为20发送一个SYN ACK包;
7、 服务器端发送一个ACK包;
8、 发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(一些命令,如STOR表示客户端要发送数据,RETR表示服务器段发送数据),这些TCP段都需要对方进行ACK确认(注:因为TCP协议是一个面向连接的协议)
9、 当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以ACK确认;
10、 客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器同样也发送它的FIN,客户端用ACK来确认。
下图图示了FTP PORT模式前几步步骤:
/====================================================================\
| |
| [ ftp Client ] [ ftp Server ] |
| |
| (TCP:21 连接初始化,控制端口) |
| SYN |
| Port xxxx ----------------------> Port 21 [TCP] |
| SYN+ACK |
| Port xxxx <---------------------- Port 21 |
| ACK |
| Port xxxx ----------------------> Port 21 |
| |
| (控制操作: 用户列目录或传输文件) |
| |
| Port, IP, Port yyyy |
| Port xxxx <---------------------- Port 21 |
| Port Seccussful |
| Port xxxx <---------------------- Port 21 |
| List, Retr or Stor |
| Port xxxx ----------------------> Port 21 |
| |
| |
| (TCP:20 连接初始化,数据端口) |
| SYN |
| Port yyyy <---------------------- Port 20 |
| SYN+ACK |
| Port yyyy ----------------------> Port 20 |
| ACK |
| Port yyyy <---------------------- Port 20 |
| |
| |
| (数据操作: 数据传输) |
| Data + ACK |
| Port yyyy <---------------------> Port 20 |
| . |
| . |
| . |
| |
\====================================================================/
FTP Port模式会给网络管理人员在许多方面带来很多问题,首先,在PORT命令消息中的IP地址和端口号的编码不是直白地显示。另外,应用层的协议命令理论上不应该包含网络地址信息(注:IP地址),因为这打破了协议层的原则并且可能导致协同性和安全性方面的问题。
下图是WildPackets EtherPeek协议分析仪解码了PORT命令的地址参数,地址参数后是端口号,见PORT 192,168,10,232,6,127;6,127部分的第一个阿拉伯数字乘以256,然后加上第2个阿拉伯数字就得到端口号,所以客户端指定了端口号为6*256+127=1663;
/====================================================================\
| IP Header - Internet Protocol Datagram |
| Version: 4 |
| Header Length: 5 (20 bytes) |
| |
| ............... |
| |
| Time To Live: 128 |
| Protocol: 6 TCP - Transmission Control Protocol |
| Header Checksum: 0xAA36 |
| Source IP Address: 192.168.0.1 DEMO |
| Dest. IP Address: 192.168.0.3 VI |
| No IP Options |
| |
| TCP - Transport Control Protocol |
| Source Port: 2342 manage-exec |
| Destination Port: 21 ftp |
| Sequence Number: 2435440100 |
| Ack Number: 9822605 |
| Offset: 5 (20 bytes) |
| Reserved: 0000 |
| Flags: %011000 |
| 0. .... (No Urgent pointer) |
| .1 .... Ack |
| .. 1... Push |
| .. .0.. (No Reset) |
| .. ..0. (No SYN) |
| .. ...0 (No FIN) |
| |
| Window: 65150 |
| Checksum: 0x832A |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| FTP Control - File Transfer Protocol |
| Line 1: PORT 192,168,0,1,9,39<CR><LF> |
| |
| FCS - Frame Check Sequence |
| FCS (Calculated): 0xF4C04A4F |
\====================================================================/
下图验证了服务器端的确从端口20打开到端口1663的TCP连接:
/====================================================================\
| TCP - Transport Control Protocol |
| Source Port: 20 ftp-data |
| Destination Port: 1663 |
| Sequence Number: 2578824336 |
| Ack Number: 0 |
| Offset: 6 (24 bytes) |
| Reserved: 0000 |
| Flags: 0010 |
| 0. .... (No Urgent pointer) |
| .0 .... (No Ack) |
| .. 0... (No Push) |
| .. .0.. (No Reset) |
| .. ..1. SYN |
| .. ...0 (No FIN) |
| |
| Window: 3731 |
| Checksum: 0x8A4C |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| TCP Options |
| Options Type: 2 Maxinum Segment Size |
| Length: 4 |
| MSS: 1460 |
| |
| FCS - Frame Check Sequence |
| FCS (Calculated): 0x5A1BD023 |
\====================================================================/
当使用FTP时候,网络中的防火墙必须要声明相应的端口,防火墙必须要跟踪FTP对话然后检查PORT命令,防火墙必须要参与从服务器端到客户端在PORT命令中指定的端口连接的建立过程。如果网络中使用了NAT(注:网络地址翻译),那么NAT的网关同样也需要声明相应的端口,网关需要把在PORT命令中指定的IP地址翻译成分配给客户的地址,然后重新计算TCP的Checksum;如果网关没有正确地执行这个操作,FTP就失败了。
黑客可能会利用FTP支持第三方特性这一特点,在PORT命令中设置IP地址和端口号参数来指定一台目标主机的地址和端口号(有时候称这种攻击为FTP反弹攻击),例如黑客可以让一台FTP服务器不断地从它的源端口20发送TCP SYN包给一系列目的端口,让FTP服务器看起来正在进行端口扫描,目的主机不知道攻击来自黑客的主机,看起来攻击象是来自FTP服务器。一些常用的FTP应用在PORT命令中设置地址为0.0.0.0,这样做的意图是让FTP服务器只需要与打开控制连接的相同客户进行数据连接,设置地址为0.0.0.0可能会让防火墙不知所措。例如,CISCO PIX IOS 6.0以上版本的PIX(注:CISCO硬件防火墙设备,6.0以上版本为其修正了相关的FTP协议)要求数据连接的IP地址与已经存在的控制连接的IP地址必须相同。这样做的原因是防止黑客用PORT命令来攻击别的机器,虽然一些FTP应用设置IP地址为0.0.0.0不是有意图的攻击,但在PIX修正协议环境下的确引起了一些问题,同时对其他不允许第三方模式和避免FTP反弹攻击的防火墙来说,这也会引起相同的问题。
2.2 FTP Passive模式
下面的列表描述了Passive模式的FTP的步骤,步骤1到3和Port模式FTP相同,步骤9到11同样与Port模式FTP最后三步相同。
1、客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使用暂时的端口作为它的源端口;
2、服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口;
3、客户端发送一个ACK(确认)包;客户端使用这个连接来发送FTP命令,服务器端使用这个连接来发送FTP应答;
4、当用户请求一个列表(List)或者发送或接收文件时候,客户端软件发送PASV命令给服务器端表明客户端希望进入Passive模式;
5、服务器端进行应答,应答包括服务器的IP地址和一个暂时的端口,这个暂时的端口是客户端在打开数据传输连接时应该使用的端口;
6、客户端发送一个SYN包,源端口为客户端自己选择的一个暂时端口,目的端口为服务器在PASV应答命令中指定的暂时端口号;
7、服务器端发送SYN ACK包给客户端,目的端口为客户端自己选择的暂时端口,源端口为PASV应答中指定的暂时端口号;
8、客户端发送一个ACK包;
9、发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(一些命令,如STOR表示客户端要发送数据,RETR表示服务器段发送数据),这些TCP段都需要对方进行ACK确认;
10、当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以ACK确认;
11、客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器同样也发送它的FIN,客户端用ACK来确认。
2006年10月3日
大香林游记
今日,开着太阳下着雨,同时享受着阳光和雨露。在这样的一个日子里,一家三口来到了大香林乡村休闲度假区。
公交603开了一个小时,总算到了,先拍照签到。
这是吉祥如意的一家。
水深20米,冒险留念,不过没拍好,可惜。这个潭,水绿得如碧玉,我在好几年前似乎到过香林花雨(那时候的名称),其余的都没有印象了,但这个潭一直在梦中出现,却又记不得在哪里见过。今天总算了却了一桩心事。
在标志性景点,终归是要纪念一下的。
孩子睡着了,该走了,临走时,再次留念。
第一次带孩子出门游玩,经验不足,时间也紧迫,基本上就是到处一游。抱着孩子出门真是累啊,况且在香林和在家门口对他来说也没有什么区别,不过在家门口是呼吸不到新鲜空气的,这大概算最大的收获了。
2006年10月2日
禅理故事
骡子的故事
从前有一头骡子,它从小就在磨坊拉石磨工作,日复一日每天绕着石磨兜圈子………
有一天,它老得再也拉不动石磨………
“你工作了一辈子,现在老了也该退休不必再工作了。从今天起你每天就躺在这里吃草、睡觉、呼吸新鲜空气。”
可是,这样的日子骡子活不下去,它每天还是绕着树兜圈子,日复一日…………
佛禅:
诸君莫笑骡子傻,也许有一天………你也是笨骡之一!
熊与鱼
一只熊在溪边苦等了一天……… 终于捕到一条小鱼。
“我太小了根本不够你塞牙缝。放我回溪中吧,过几年我就长成一条大鱼,那时你再吃我才肥美也够你饱餐。”
“你知道我为什么能长得这么高壮肥胖吗?因为我不会为了一个大而无望的机会,而抛掉手上拥有的小利益。”
佛禅:
人多怀念着过去,期盼着将来而没有在过现在。能掌握目前拥有的真切地过着现在,才算是体会人生的人。
狐狸与葡萄园
有一只狐狸看到一个葡萄园结满了果实…………
可是它太胖了穿不进栅栏…………
于是它三天三夜不饮不食使身体消瘦下去…………
“终于能够进来了!好吃!好吃极了!”
“吃得真过瘾,回去吧。”
哇!又钻不出去了…………… 只好重施故技,又三天三夜不饮不食………
结果是出来了没错,但肚子不是跟进去是一样。
佛禅:
人生何尝不是如此?赤裸裸的诞生,又孑然而死去。人死之后遗留下善行才值得称颂,无人能带走自己一生经营的财富与盛名。
2006年10月1日
为什么我们没有老板赚钱多?
这是一篇很有哲理的财富寓言故事, 通过猎人与猎狗的博弈,很形象的阐述了老板与打工族的不同生存思维。或许,它能带给大家一些启发——
一、出发点
一条猎狗将兔子赶出了窝,一直追赶他,追了很久仍没有捉到。牧羊看到此种情景,讥笑猎狗说“你们两个之间小的反而跑得快得多。”猎狗回答说:“你不知道我们两个的跑是完全不同的!我仅仅为了一顿饭而跑,他却是为了性命而跑呀!”
二、目标
这话被猎人听到了,猎人想:猎狗说的对啊,那我要想得到更多的猎物,得想个好法子。于是,猎人又买来几条猎狗,凡是能够在打猎中捉到兔子的,就可以得到几根骨头,捉不到的就没有饭吃。这一招果然有用,猎狗们纷纷去努力追兔子,因为谁都不愿意看着别人有骨头吃,自已没的吃。
就这样过了一段时间,问题又出现了。大兔子非常难捉到,小兔子好捉。但捉到大兔子得到的奖赏和捉到小兔子得到的骨头差不多,猎狗们善于观察发现了这个窍门,专门去捉小兔子。慢慢的,大家都发现了这个窍门。猎人对猎狗说:最近你们捉的兔子越来越小了,为什么?猎狗们说:反正没有什么大的区别,为什么费那么大的劲去捉那些大的呢?
三、动力
猎人经过思考后,决定不将分得骨头的数量与是否捉到兔子挂钩,而是采用每过一段时间,就统计一次猎狗捉到兔子的总重量。按照重量来评价猎狗,决定一段时间内的待遇。于是猎狗们捉到兔子的数量和重量都增加了。猎人很开心。
但是过了一段时间,猎人发现,猎狗们捉兔子的数量又少了,而且越有经验的猎狗,捉兔子的数量下降的就越利害。于是猎人又去问猎狗。猎狗说“我们把最好的时间都奉献给了您,主人,但是我们随着时间的推移会老,当我们捉不到兔子的时候,您还会给我们骨头吃吗?”
四、长期的骨头
猎人做了论功行赏的决定。分析与汇总了所有猎狗捉到兔子的数量与重量,规定如果捉到的兔子超过了一定的数量后,即使捉不到兔子,每顿饭也可以得到一定数量的骨头。猎狗们都很高兴,大家都努力去达到猎人规定的数量。一段时间过后,终于有一些猎狗达到了猎人规定的数量。
这时,其中有一只猎狗说:“我们这么努力,只得到几根骨头,而我们捉的猎物远远超过了这几根骨头。我们为什么不能给自己捉兔子呢?”于是,有些猎狗离开了猎人,自己捉兔子去了。
五、骨头与肉兼而有之
猎人意识到猎狗正在流失,并且那些流失的猎狗像野狗一般和自己的猎狗抢兔子。情况变得越来越糟,猎人不得已引诱了一条野狗,问他到底野狗比猎狗强在那里。野狗说:“猎狗吃的是骨头,吐出来的是肉啊!”,接着又道:“也不是所有的野狗都顿顿有肉吃,大部分最后骨头都没的舔!不然也不至于被你诱惑。”于是猎人进行了改革,使得每条猎狗除基本骨头外,可获得其所猎兔肉总量的n,而且随着服务时间加长,贡献变大,该比例还可递增,并有权分享猎人总兔肉的m。就这样,猎狗们与猎人一起努力,将野狗们逼得叫苦连天,纷纷强烈要求重归猎狗队伍。
故事还在继续……
六、只有永远的利益,没有永远的朋友
日子一天一天地过去,冬天到了,兔子越来越少,猎人们的收成也一天不如一天。而那些服务时间长的老猎狗们老得不能捉到兔子,但仍然在无忧无虑地享受着那些他们自以为是应得的大份食物。终于有一天猎人再也不能忍受,把他们扫地出门,因为猎人更需要身强力壮的猎狗。
七、Birth of MicroBone Co.
被扫地出门的老猎狗们得了一笔不菲的赔偿金,于是他们成立了MicroBone公司。他们采用连锁加盟的方式招募野狗,向野狗们传授猎兔的技巧,他们从猎得的兔子中抽取一部分作为管理费。当赔偿金几乎全部用于广告后,他们终于有了足够多的野狗加盟。公司开始赢利。一年后,他们收购了猎人的家当。
八、Development of MicroBone Co.
MicroBone公司许诺给加盟的野狗能得到公司n的股份。这实在是太有诱惑力了。这些自认为是怀才不遇的野狗们都以为找到了知音:终于做公司的主人了,不用再忍受猎人们呼来唤去的不快,不用再为捉到足够多的兔子而累死累活,也不用眼巴巴地乞求猎人多给两跟骨头而扮得楚楚可怜。这一切对这些野狗来说,这比多吃两根骨头更加受用。于是野狗们拖家带口地加入了MicroBone,一些在猎人门下的年轻猎口也开始蠢蠢欲动,甚至很多自以为聪明实际愚蠢的猎人也想加入。好多同类型的公司象雨后春笋般地成立了,BoneEase, Bone.com, ChinaBone....一时间,森林里热闹起来。
九、F4的诞生
猎人凭借出售公司的钱,走上了老猎狗走过的路,最后千辛万苦要与MicroBone公司谈判的时候,老猎狗出人意料的顺利答应了猎人,把MicroBone公司卖给了猎人。老猎狗们从此不再经营公司,转而开始写自转《老猎狗的一生》,又写:《如何成为出色的猎狗》,《如何从一只普通猎狗成为一只管理层的猎狗》《猎狗成功秘诀》《成功猎狗500条》《穷猎狗,富猎狗》,并且将老猎狗的故事搬上屏幕,取名《猎狗花园》,四只老猎狗成为了家喻户晓的明星F4。收版权费,没有风险,利润更高。