转一篇内核分析的文章 希望对内核研究有帮助
本友会众版主加盟 美腿美人与卧底…
猜对周董周杰伦给你发大奖!
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 跳转到
字体大小:
发表于 2007-4-25 23:55
转一篇内核分析的文章 希望对内核研究有帮助
前言之前言:谁是这篇文章的读者?
不习惯读英文资料的非LINUX高手
不转连不上网等等,只要有问题就行
开发嵌入式
现在流行的ODL(only di
linux)中做内核部分,那些文章不介绍此点内容。我正在做
,完工后整理资料。
BY THE WAY ,想成为LINUX高手吗?你需要熟练掌握KERNEL COMPILE 、XCONFIGRATER
、LINUXCONFIG、 SAMBA四大利器,你随时可以找到后三者的大量相关资料,但内核编译
就只好啃为数不多的英文了。
笔者耗时3月,搜集并整理大量资料,在儿童节前连续工作18个小时后,给小企鹅送了这
份礼物。
笔者自信是目前为止KERNEL编译方面最完备的中文资料(将不断翻译补充),这可是毕
业论文哪!
为什么要放网上呢?首先找这方面资料太难了,文章对各位LINUX爱好者会有所帮助。其
次,取之于网用之于网。
欢迎使用这篇文章,请随便引用,这才符合LINUX自由
的精神嘛,不过别忘了提提我
的名字,就算为我的辛苦付了点稿酬。
介于内核方面资料较少,欢迎在这篇文章中添加和修改内容,但不要过多删除,笔者列
表要加入你的名字,让我们为把它变成数百页的资料而努力。OK,交个朋友吧, 我是玉
玉安,email :ziboyuyuan@263.net ZIBOyuyuan@263.net
第一章 内核编译的基础
第一节内核简介
第二节内核版本
第三节编译原因
第四节准备工作
第二章 内核编译的流程
第一节编译开始
第二节配置内核 {核心内容}
1.代码成熟等级
2..处理器类型和特色
3.对模块的支持
4.基本的选择
5.即插即用支持
6.块设备支持
7.网络选项
8.***支持
9.SCSI设备的支持
10.I2O接口适配器
11.网络设备支持
12.配置业余无线广播
13.红外支持
14.ISDN的文件系统
15.旧型光驱类型(非IDE界面的光驱)
16.字符设备
17.USB支持
18.文件系统
19.控制台
21.Kernel hacking
第三节编译内核
第四节启用内核
附录:LILO分析
第三章 内核编译的应用
第一节嵌入式Linux技术
第二节你的Linux有多大(及实践结果)
参考文献
近几年,linux大行其道,令不满windows蓝屏的使用者跃跃欲试,结果发现linux***不
及windows方便,界面不及windows友好,配置不及windows容易,软件不及windows丰富
,以至浅尝辄止。
其实, Linux有windows无可比拟的两个优势:网络应用和嵌入式技术,这也正是未来最
有前途的方向。同时此课题是从理论上设计具有嵌入式Linux
器件的重要组成部
如要涉足这两个方面,就必须对内核有深刻理解。当然,您可以从源代码入手,但前提
是您拥有程序设计和操作系统等多方面专业知识,否则,就利用现成的Linux kernel从
编译内核开始吧。不幸的是,内核编译方面的资料匮乏。以上两个原因使我写这篇论文
成为必要。我可以自信得说,这是目前最详尽的内核编译方面的中文资料。
值得一提的是,我在搜集翻译资料的过程中,获得了操作系统、程序设计、
等各方各面的知识,极大的拓宽了视野,真正学有所获。
感谢所有为Linux发展作出贡献的人,感谢所有Linux中文网站为促进Linux在中国的发展
作出的不懈努力,他们是我搜集资料的来源。
特别感谢我的指导老师——官伯然教授和高斌博士,正是他们的辛勤指导让我顺利完成
毕业设计。 西电科大 :李玉元 2001/6/1
备注:#----------后跟小的选项 ##---------后还有更细选项 注意------上机实践结果
第一章 内核编译的基础
第一节 内核简介
内核,是一个操作系统的核心,它负责管理系统的进程、
、设备驱动程序、文件和
网络系统,决定着系统的性能和稳定性。 就好比DOS下的IO.SYS和MSDOS.SYS一体,我
们可以把这两个文件叫做DOS的核心。Linux也有它的核心,通常在根目录下,一个叫vm
linuz的文件。我们用这个文件来控制我们的整台PC,包括周边设备和软硬磁盘机、CD-
等。简单地说,核心就是操作系统本身。没有了它,就像一个无人住的家,没
有人去维持这个家的动作。一个安定的家需要一个很用心已能当机立断的主人:一部电
脑也需要很有效率已稳定的核心,也就是操作系统。因此,核心是整个系统维持下去的
Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/
linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代
码。任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明
显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用。而Linux的内核则是这
些特点的最直接的代表。
想象一下,拥有了内核的源程序对你来说意味着什么?首先,我们可以了解系统是如何
工作的。通过通读源代码,我们就可以了解系统的工作原理,这在Windows下简直是天方
夜谭。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要
重新编译内核。在Windows下是什么情况呢?相信很多人都被越来越庞大的Windows整得
莫名其妙过。再次,我们可以对内核进行修改,以符合自己的需要。这意味着什么?没
错,相当于自己开发了一个操作系统,但是大部分的工作已经做好了,你所要做的就是
要增加并实现自己需要的功能。在Windows下,除非你是微软的核心技术人员,否则就不
用痴心妄想了。
先介绍一下编译核心的选项,希望能对大家消除对内核的神秘感有所帮助。
本帖最后由 zkxuchi 于 2007-4-25 16:47 编辑
才可以下载或查看附件。没有帐号?
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:55
1.代码成熟等级
2..处理器类型和特色
3.对模块的支持
4.基本的选择
5.即插即用支持
6.块设备支持
7.网络选项
8.***支持
9.SCSI设备的支持
10.I2O接口适配器
11.网络设备支持
12.配置业余无线广播
13.红外支持
14.ISDN的文件系统
15.旧型的光驱类型(非IDE界面的光驱)
16.字符设备
17.USB支持
18.文件系统
19.控制台驱动
20.声卡驱动
21.Kernel hacking
第二节 内核版本
由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布
给他人使用。Linux的开发采用的是集市模型(bazaar,与cathedral--教堂模型--对应
),为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。一个树是稳
定树(stable tree),另一个树是非稳定树(u table tree)或者开发树(developm
ent tree)。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所
做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同
的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在
源程序的版本号中;源程序版本号的形式为x.y.z:对于稳定树来说,y是偶数;对于开
发树来说,y比相应的稳定树大一(因此,是奇数)。确定是以″ root ″的身份签入,
然后cd 到 /usr/src 。uname -r 这个指令将会显示版本。内核版本的更新可以访问h
ttp://www.kernel.org/。
第三节 编译原因
Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了
旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的
系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。
通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳
定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是
Linux使用者的必要操作内容。
为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主
要有下面四个考虑:
---自己定制编译的内核运行更快(具有更少的代码)
---系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)
---不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞
---将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些
以上是针对成熟的Linux套件如Redhat Linux而言,我的目的是为建造嵌入式Linux操作系
统做准备,也是必由之路。
第四节 准备工作
第一部分 新版本内核的获取和更新
Linux内核版本发布的官方网站是
,国内各大ftp上一般都可
以找到某些版本的内核。新版本的内核的发布有两种形式,一种是完整的内核版本,另
外一种是patc***件,即补丁。完整的内核版本比较大,比如linux-2.4.0-test8.tar.b
z2就有18M之多。完整内核版本一般是.tar.gz(.tgz)文件或者是.bz2文件,二者分别
是使用gzip或者bzip2进行压缩的文件,使用时需要解压缩。patc***件则比较小,一般
只有几十K到几百K,极少的会超过1M。但是patc***件是针对于特定的版本的,需要找到
自己对应的版本才能使用。
编译内核需要root权限。把需要升级的内 拷贝到/usr/src/下(下文中以2.2.16的内核
的linux-2.2.16tar.gz为例),命令为 #cp linux-2.2.16tar.gz /usr/src
先查看当前/usr/src的内容,注意到有一个linux的符号链接,它指向一个类似于linux
-2.2.14(对应于现在使用的内核版本号)的目录。首先删除这个链接: #cd /usr/src #rm -f linux
现在解压下载的源程序文件。如果所下载的是.tar.gz(.tgz)文件,使用命令: #tar -xzvf linux-2.2.16tar.gz
如果下载的是.bz2文件,例如linux-2.2.16tar.bz2,使用命令 #bzip2 -d linux-2.2.16tar.bz2 #tar -xvf linux-2.2.16tar
现在再来看一下/usr/src下的内容,发现现在有了一个名为linux的目录,里面就是需要
升级到的版本的内核的源程序。还记得那个名为linux的链接么?之所以使用那个链接就
是防止在升级内核的时候会不慎把原来版本内核的源程序给覆盖掉了。现在也需要同样
处理: #mv linux linux-2.2.16 #ln -s linux-2.2.16 linux
如果还下载了patc***件,比如patch-2.2.16,就可以进行patch操作(下面假设patch-
2.2.16已经位于/usr/src目录下了,否则需要先把该文件拷贝到/usr/src下): #patch -p0 patch-2.2.16
第二部分 准备主机板和相关硬件的说明手册
其实也不用太详细,只要知道您的硬件是属于哪一类型就行了。例如:有一张SCSI卡,
那就要知道这张卡的名字,有一台cd-rom,就要知道这台光驱是哪一种牌子的,是否为标
准的IDE/ATAPI界面,还是另有专属接口卡呢?或者,主机版是否有支持Triton芯片(通
常586以上的电脑常有),这些信息能帮助我们,使得设定变得清楚且容易。
因此,不管您有什么使用手册,准备好吧。即使现在不用,将来还是会用到的(设X-w
indow system时要显示卡的手册)。
第三部分 检查声卡的IRQ设定和其种类
如果配有一张声卡,除了要知道卡的种类外(例如 Sound Blaster)还需要知道这张卡
的IRQ地址。一般来说,卢卡的IRQ地址是5或7而IO地址则为220。DMA则l,不过,有时不
同的声卡可能会有不同的设定。因为稍后的选项里,就会要填入这些数字。
第四部分 编译核心的硬件需求
在编译核心时,确定您的RAM最好在8MB以上, 否则可能会很慢而且问题会很多,记得查
看swap有没有打开(用free指令)。此外,最好不要超频,不然很有可能会发生signal
11的错误,使得编到一半的核心停了下来,其实编译核心就好比编译程序一样,只是因
为构成核心的程序太多了,因此我们能小心尽量小心。
第二章 内核编译的流程
概述编译的流程:
编译开始----- make mrproper;检查所需的连接
配置核心
编译核心
编辑/etc/lilo.conf
重新启动新核心
重新启动机器
发现并修理故障(仔细看我的文章,应该没多少问题了)
第一节 编译开始
通常要运行的第一个命令是: #cd /usr/src/linux #make mrproper
该命令确保源代码目录下没有不正确的目标.o文件以及文件的互相依赖。如使用刚下载
的完整的源程序包进行编译,本步可以省略。而如果多次使用了这些源程序编译内核,
那么最好要先运行一下这个命令。
确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。它
们分别链向源代码目录下的真正的、该计算机体系结构(对于PC机来说,使用的体系结
构是i386)所需要的真正的include子目录。如:asm指向/usr/src/linux/include/asm
-i386等。若没有这些链接,就需要手工创建,按照下面的步骤进行: # cd /usr/include # rm -r asm linux scsi # ln -s /usr/src/linux/include/asm-i386 asm # ln -s /usr/src/linux/include/linux linux # ln -s /usr/src/linux/include/scsi scsi
这是配置非常重要的一部分。删除掉/usr/include下的asm、linux和scsi链接后,再创
建新的链接指向新内核源代码目录下的同名的目录。这些头文件目录包含着保证内核在
系统上正确编译所需要的重要的头文件。也是上面又在/usr/src下多余地创建了个名
为linux的链接的原因之一.
一旦万事俱备,转到/usr/src/linux。现在你也许想停下细读一下文档文件,实际
上如果你有些特别的硬件,或几种光驱驱动程需要自己动手设置,他们通常这样做,当
引导时这些驱动程序将给出警告,这并不碍事他们照常工作少,阅读扩展名为.txt .h.
c的文件。通常我发现他们具有共性且易于配置。如果你不想冒险,你没必要做。记住你
照样可以解开tar文件(或再次***.rpm文件)恢复前的文件。
第二节 配置内核 核心内容
接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有
必要了解一下选项的设置。
配置内核可以根据需要与爱好使用下面命令中的一个:
#make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用,必须***ncurse
s-dev和tk4-dev库)
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦
如果不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差
点,总比make config的要好多了。
选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。 用空格
键选择时可以发现,中括号里要么是空,要么是*,而尖括号里可以是空,*和M。
这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模
块。而圆括号的内容是要在所提供的几个选项中选择一项。
在编译内核的过程中,最烦杂的事情就是这步配置工作了,不清楚到底该如何选取这些
选项。实际上在配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同
的需要选择。选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编
译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的
环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部
分功能代码直接编译到内核中。下面对选项分别加以介绍。
本帖最后由 zkxuchi 于 2007-4-25 15:57 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:55
1.Code maturity level optio 代码成熟等级
此处只有一项:prompt for development and/or incomplete code/drivers,如果要试
验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可
以把它选择为N。 在Linux的世界里,每天都有许多人为它发展支持的driver和加强它的
核心。但是有些driver还没进入稳定的阶段。但其作者很欢迎其他人去测试这些driver
并提出一些bugs。这个问题是说,有一些drive还在做测试中,问您是否要选择这些dri
ve或支持的程序码。
如果键入Y,往后将会出现一些还在测试中的东西给您做选择。(像Java的程序码和PCI
bridge),台则就键入N。
2. Proce or type and features处理器类型和特色
#Proce or family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC,PPro/6x8
6MX) [PPro/6x86MX] ------选择处理器类型,缺省为Ppro/6x86MX。它会对每种CPU做最
佳化,让它跑得快又好。一般来说,没有选择正确的CPU并不会有重大的影响(特别是选
择386 ,这样编译出来的核心也许会比较小但它的速度可能就会变慢了)。所以,最好
要知道您的CPU是哪一种。不过,如果您的gCC编译器是2.7.0版以前的。那么只能选择3
86或是486。
#High Memory Su ort------内核支持的最大内存数,缺省为1G。可以支持到4G、6.4G
,一般可以不选.
#Math emulation------这项询问是否需L1nux核心模拟数学浮点运算器。如果有486Dx、
AMD以及Pentium机器的话,这个选项就不必选了,因为它们都有内建的浮点运算器。协
处理器是在386时代的宠儿,现在早已不用了。不过,对于有内建浮点运算器的人来说,
选了这个选项并不会因此让内建的浮点运算器失效。但它会增大核心约45KB。
#MTTR (memory type range register)su ort------选择该选项,系统将生成/proc
/mtrr文件对MTRR进行管理,供X server使用。同时用来启动pentinum pro和pentinum
II 的特殊功能,如果你用的不是这类CPU就选N,否则也仅仅是使内核变大而已。
#Symmetric multi-proce ing su ort------对称多处理支持。除非有多个CPU,否则
就不用选了。
3. Loadable module su ort对模块的支持.
首先,了解一点关于模块的知识。模块就像你特意插入核心中的某些东西,如果办公室
有一个小网络并且有时想用一下(但并不经常),也许你想把网卡编译成一个模块。使用
这个模块,机器必运行和存取/li 下的模块,意思是驱动程序(IDE,SCSI等但必须是NF
S支持的网卡),文件系统(通常是ext2但也可以是nfs)和核心类型(最好是elf)必须编译
在内核并且不能是模块,模块只有核心引导时才起作用,驱动程序(来网络)的存取,和
文件系统***。这些文件必须编译在核心内否则将能***启动分区。如果***启动分区
和网络,你需要网络系统文件,和己经编译的网卡。为什么要使用模块? 模块化使核心
变的更简捷,它减少核心释放大量的受保护的空间。模块的***和卸载使用的空间是可
重复分配利用的。如果你打开机器有90%以上的时间用到一个模块,编译它。运用这类模
块是浪费内存的,原因是一旦你编译了模块它们同样将占用大量的内存,核心需要一些
代码来挂上模块。记住,核心在保护空间运行,但模块并不是。这么说,并不经常使用
我的设备,把它编译成只支持ext2,ide和elf。而一直使用的网卡,把其它的编译成模块
:如a.out, java, flo y, iso9960, msdos, minix, vfat,smb,nfs,smcultra(ethern
etcard),serial,printer,sound, ,等等。它们许多只是在这或那用上那么几分钟。严
格的说,这样做会使核心增大许多而降低它的执行速度。这时我们就可以把这些可能会用
的驱动程序编译成一个—个的模块,在需要用的时候才用i mod这个指令加入核心,不
用的时候也能rmmod把它从核心移除,或是用lsmod察看目前所载入的模块。这里面有三
#Enable loadable module su ort------除非准备把所有需要的内容都编译到内核里面
,否则该项应该是必选的。
#Set version information on all module symbols------通常,我们更新核心版本之
后,模块耍重新的编译。这个选项使您不必更新编译模块而能使用以前的模块。可以不
选它。但如果您选y,则按照它的说明,您必须有genksyms这个程序(可用whereis指令
查看有无此程序)。
#Kernel module loader------让内核在启动时有自己装入必需模块的能力,建议选上。
注意:在开机就会 mount 上来的 partition 的 FS 、device driver 记得要 compile
r 进 kernel,不能把它弄成 modules。请不要夸张到为了完全模组化而忘了把ext2fs和
IDE dirver compiler 进 kernel 里。
4. General setup普通的属性设置
这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:
#Networking su ort------网络支持。因为在Linux里面,有虚拟的网络设备(1ookbac
k),可以模拟整个网络。而且,—些程序需要它。必须,没有网卡也建议你选上。注意
:选N,则7.(Networking optio 网络选项)和11.(Network device su ort网络设备
支持) 不会出现。
#Limit memory to low 16MB ------大部分的人这一选项 N。除了主机板没有办法处理
16MB以上的内存,或者有超过16MB以上的内存但却常常发生一些很奇怪的问题。这时,
您可以试试这个选项。有些主机板对超16MB内存的处理并不是很好,通常这些都是旧型
的主机板。还有,在说明文件中有提到,如果内存超过64MB的话,用LILO加一些参数给
Linux核心(例:mem=80M),并且把您主机板上的Cache加到512K。这样,整体效率才能
#PCI su ort ------PCI支持。如果使用了PCI的卡,当然必选。
#PCI bios su ort ------主机板是否有PCI界面。如果有,则您必须回答y。
PCI是586电脑的主要界面(一些486主机板上也有),这个界面能让您插入所谓的PCI显
示卡,或是PCI的网络卡等。这种界面是现在电脑的主要趋势,因此如果有PCI的插槽。
您就可以选Y。除了一些很旧很旧但有支持PCI的主机板外(这些有bugs的旧型主机板可
能会因为这个选项而让核心挂掉)。
#PCI acce mode (BIOS, Direct, Any) [Any] ------设置Linux探测PCI设备的方式。
选择“BIOS”,Linux将使用BIOS;选择“Direct”,Linux将不通过BIOS;选择“Any”
,Linux将直接探测PCI设备,如果失败,再使用BIOS。
#Su ort for hot-pluggabel devices ------热插拔设备支持。支持的不是太好,可不
#PCMCIA/CardBus su ort------PCMCIA/CardBus支持。有PCMCIA就必选了。
#PCI bridge optimization (experimental) ------在某些支持BIOS上,它能让存取速
度加快,建议是选Y。
#Backward-compatible /proc/pci------设备兼容,自己看help。
#System V IPC 如果将来想编译dosemu(DOS模拟器),则这个选项一定要选,它是一个
让各个程序(proce )同步且能彼此交换数据的函数库和一些系统的调用,没它,很多
的程序将会无法执行。
#BSD Proce Accounting------
#Sysctl su ort------除非你的内存少的可怜,否则你应该启动这个功能,启用该选项
后内核会大8K,但能让你直接改变内核的参数而不必重新开机。
#Kernel su ort for A.OUT binaries ------a.out的执行文件是比较古老的可执行码
,用在比较早期的UNIX系统上。Linux最初也是使用这种码来执行程序,一直到ELF格式
的可执行码出来后,有愈来俞多的程序码随着ELF格式的优点而变成了ELF的可执码。将
来势必完全取代a.out格式的可执行码。但目前由于沿有许多的程序还没有取代过来,
所以只好选择Y,等将来有一天,全部的程序都变成了ELF的天下时,那时再disable掉。
#Kernel su ort for Linux/Intel ELF binaries ------由上所述,这个当然y哩,因
为目前gcc-2.7.0以上的都有支持ELF了,如果没有选择这一项,可能会使用相当多的程
序因此无法执行。
注意:编译模块成ELF和编译支持ELF二进制。不编译适当的支持’’gotcha’’是明智
的,如果机器结构是Pentium或486你将得到高效的代码,但一个386的核心将运行在32-
bit compatible clone;一个Pentium核心将不。为大多机器制作一张紧急启动盘,最好
在386下编译,而386并不能运行在Pentium下编译的核心。
另外一点要注意的,你不能同时把 a.out 和 ELF 支援编译成 modules,否则当你为了
能够使用 i mod 而用 i mod 来载入 a.out/ELF modules 时会有 Catch/22 状况发生
。如果你的系统主要是 ELF 而你偶尔会需要用到a.out,你可以把 a.out 支援编译为
modules,否则你最好把它直接放入 kernel 之中。如果你还没进入 ELF 的世纪,在 c
ompiler kernel 时可以直接把 ELF 支援去掉。
#Kernel su ort for J***A binaries ------ 这一项是正在做测试中的产品,但是如果
想写有关Java的程序,希望它能在Linux的机器上跑。那么,可以选择把它编成一个模块
或是直接把它编进核心里。
#Power Management su ort ------电源管理支持。
##Advanced Power Management BIOS su ort------高级电源管理BIOS支持。这通常是
用在笔记本电脑上的东西,如果您有APM的BIOS,支持省电的设备的(有电池的那种),
那么您可以选上这项,一般人这一项是选n,以避免一些可能会发生的问题。后有8个选
#Parallel port su ort ------串口支持。
5. Plug and Play configuration即插即用支持
Linux对即插即用目前支持的不如Windows,好有些情况下会和其他设备产生冲突(I/O,
DMA,IRQ等)。这个选项对PCI设备没有影响,因为他们天生就是PNP设备。。
#Plug and Play su ort (CONFIG_PNP) ------ 选择“y”,内核将自动配置即插即用
设备。原来PNP还有这个意思。
# ISA Plug and Play su ort ------ 选择“y”,内核将自动配置基于ISA总线的即插
即用设备。
本帖最后由 zkxuchi 于 2007-4-25 15:58 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:55
6. Block devices块设备支持
这个就得针对自己的设备情况来选了:
#Normal PC flo y disk su ort (CONFIG_BLK_DEV_FD) [Y/m/n/?]------普通PC软盘
#Enhanced IDE/MFM/RLL disk/cdrom/tape/flo y su ort ------选择“y”,内核将
提供对增强IDE硬盘、CDROM和磁带机的支持。在硬盘没有做得很大的时候,一般的 IDE
卡和 BIOS只能支持小于 540 MB的硬盘。不但如此,那时也只能支持二颗硬盘。但现今
的硬盘动不动就是1GB以上,今年主流是30~50G,而且常常都会超过一二颗硬盘。如此一
来,新的主机板就开始支持加强型的IDE界而(Enhanced IDE),以支持到540MB以上的
硬盘。所以,如果您的IDE界面是Enhanced的,请您选Y,底下就会出现八部分IDE界面的
选项,这些选项能加快您的IDE界面的速度和对某些芯片做一些最佳化。但如果您的硬盘
或光盘全都是SCSI界面的,那么选N以跳过下面选项。
#use old disk-only driver on primary interface------通常是选择N。因为我们有其
他新的drivers可用。这个选项的意思是说,如果您的IDE界面是很旧很旧的那种的。那
么,就可以使用这个drives 驱动那个旧型的IDE界面(可装二台硬盘;或是一台硬盘,
一台光盘)。而现今流行的 Enhanced IDE则有两个界面,共可以接四台硬盘。我们稍后
会有 driver支持它。
#Include IDE/ATAPI CDROM su ort------如果希望核心支持IDE/ATAPI界而的光驱,
选择Y。如果有光驱,但它附有一张接口卡,必须把排线接到那张专属接口卡上;或者是
接到声卡上的,则这个选项也需要选N,稍后我们会有非IDE的光驱厂牌让我们挑选。现
今的光驱通常是IDE/ATAPI界而的,所以这个选项通常是Y。
#Su ort removable IDE interfaces(PCMCIA)------这个选项对大部分的人全选n,
除非您有PCMCIA的东西,这通常是笔记本电脑上看得到的东西。 PCMCIA是一个组织,在
以前是设计内存条的。但现在他们对于PC CARDS定了一个标排,并很广泛的应用在1apt
ap的电脑上。不但有所谓的PCMCIA的硬盘,甚至有网络卡、SCSI卡等,不过,大部分的
人并不需要这个选项。
这个选项选完后,以下则是Linux核心对几种芯片的IDE界面做修正或是加强它。
#CMD640 chi et bugfix/su ort------ 很多 486和 586的主机板都是用 CMD640的芯
片,它是Neptune芯片和 SIS芯片的结合。不过,这种芯片有它的缺点,在许多的情形下
,它会造成数据的流失和错误。如果您选了这一项,则Linux核心会为您小心的寻找这些
错误并修正它。而且,它会打开对二个IDE界面的支持。不过,在它的说明文件中提到,
如果您的主机板没有PCI界面只有VESA总线界面却希望有这项功能的话,则您必须传一些
参数给核心(ideo=cmd640_vlb)。如果不确定上面所说的,选择Y。
#CMD640 enhanced su ort------一般来说,对于硬盘的存取速度来说,有所谓的 PIO
MODES值设定,现今的 IDE界面及 BIOS应该都能侦测到正确的硬盘PIO MODE值了。此值
愈高表示硬盘的存取的速度愈快。可是,有些主机板的B10S还是旧式的,不能抓到比较
高的 PIO MODE值,如此一来,便不能发挥整台硬盘的效率。这个设定告诉读者说:如果
您的IDE界面是CMD640为基础的界面,但是您的BIOS并不能抓到正确的PIO MODE值,那么
,这个选项可以自动的找到硬盘正确的PIO MODE值。
#RZ1000 chi et bugfix/su ort------这个选项如同前面的CMD640一样。不过,它的
芯片是RZ1000的芯片,这种芯片是以Neptune芯片为主的一种芯片,而目、有很多的486
和 586的主机板都在使用它。可以查查主机板的说明书或是 IDE接口卡的说明书做确定
。文件上提到,选择这个将会降低一些速度,但是数据能百分之百的正确。
#Intel 82371 PIIX(Triton I/II) DMA su ort------对于586的Pentium电脑来说,
有相当多的主机板都是用Intel的Triton芯片,使用这种芯片的最大好处是支持直接内存
存取DMA,而节省您的CPU时间。在以往还没有DMA这个东西时,读取硬盘需要耗用许多的
CPU时间。如此一来,CPU被占用,就不能充分的发挥它的功效。后来,DMA出来后,硬盘
的读取便靠Triton或其他有支持DMA的IDE界面的芯片,直接与它们做沟通,而节省了大
量的 CPU时间,但这必须您的硬盘和主机板有同时支持 DMA的 IDE界面的芯片,直接与
它们做沟通而节省了大量的 CPU时间。但这必须您的硬盘和主机板有同时支持DMA MODE
##other IDE chi et su ort------
如果这上选项选y,则会出现下列六种其他的芯片或厂牌供您选择。
* NOte: most of these also require ecial kernel boot paraaeters
ALI M14xx su ort
DTC-2278 su ort
Holtek HT65608 su ort
PROMISE DC4030 su ort
QDI QD6580 su ort
UMC 8672 su ort
上面这六种厂牌的芯片依硬件配备而使用,但它们有共同的特点就是必须传一些参数给
核心。如果找不到您的芯片,那么也没关系。上这些选项只不过对这些芯片做最佳化罢
## Additional Block Devices其他的块设备
#Loo ack device su ort------大部分的人这一个选项都选N,因为没有必要。这个选
项的意思是说,可以将一个文件挂成一个文件系统。如果要烧光盘片的,那么您很有可
能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符
合您的需求。而且,可以对这个文件系统加以保护。不过,如果您 想做到这点的话,您
必须有最新的mount程序,版本是在2.5X版以上的。而且如果您希望对这个文件系统加上
保护,则您必须有des.1.tar.gz这个程序。注意:此处与网络无关。
#Multlnle devices driver su ort------这个选项可以让把整个硬盘分区变成一个单
独的区块设备,您必须有md035.tgz这个程序。而且在做这件事之前请将您的硬盘备份
,因为它尚在测试阶段。一般人对这个选项是选N。
#RAM disk su ort------如果使用过DOS下的ramdrive程序,应该能了解这个选项的意
义。它可以把内存当成硬盘来做存取就如同一般的硬盘一样,可以format它,或是放一
些文件在里头。然后,当您关机这些数据也随着之而去了。如果的RAM够大,可以考虑玩
玩这选项,但一般人都不需要。
#XT hard disk su ort------支持XT的古董硬盘,这是IBM电脑时代的东西,如果您还
有这种很旧很旧的硬盘。那么,您可以把它编进核心或是编成一个模块。大部分的人这
个选项都是选择N的。
#Compaq SMART2 su ort------
#Mulex DAC960/DAC1100 PCI RAID Controller su ort------RAID镜像用的。
#Logical volume manager(LVM)su ort------逻辑卷管理支持。
#Multiple devices driver su ort------多设备驱动支持。
#RAM disk su ort------RAM盘支持。
本帖最后由 zkxuchi 于 2007-4-25 16:01 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:56
7. Networking optio 网络选项
这里配置的是网络协议。
#Packet socket ------ 选择“Y”,一些应用程序将使用Packet协议直接同网络设备通
讯,而不通过内核中的其它中介协议。
#Kernel/User Network link driver------这个是在测试中的程序码,一般人不需要用
。依它的说明,它允许在核心、模块或程序间的某些部分间,彼此做双向的沟通。如果
想使用arpd,则这个程序码就要加进核心里。
#TCP/IP networking------选择“Y”,内核将支持TCP/IP协议。这个选项无论如何请您
选择Y,即使没有网络卡,或是没有连到网络上的设备,在linux上仍有所谓的lookback
设备而且有些程序需要这个选项。在说明文件中提到,如果您没有打开这个设定,则X-
window system可能会有问题(回为它也需要 TCP/IP)。
#Network firewalls------选择“Y”,内核将支持防火墙。Firewalls依英文看是防火
墙。在网络愈来愈发达的今天,网络安全的考虑也愈来愈重要了。在局域网上找一台电
脑来保护自己的考虑也愈来愈多了。可以在一局域网上找一台电脑来保护自己区域内的
电脑。这样的结果是,所有外部的电脑如果要连进内部的电脑就必须通过这台装有Fire
walls电脑的同意。所以,如果您希望这台电脑有着过滤网络的功能的话,那么这个选项
要选 Y。而且,等一下有个IP firewalling的选项也要选y;但下面的forwarding/gat
ewaying要选n,如此才能让它正常动作。大部分的人这个选项选N。
#Network alasing------允许有多个IP地址。
#IP:forwarding/gatewaying ------ 和 Firewall相反,这个选项是用来疏导网络的
。一个gateway(也就是router),要帮忙疏导两个网络间的数据传送。这台机器必须要
有两张网络卡,连接两个个同的网络,做疏导网络的工作。如果选择了这个选项,则表
示想让这台负责做router。那么,就必须有两张网络卡了。另外有一种情形是,如果您
有MODEM(通过串列界面以 SLIP和 PPP协议)和网络卡,并用它们来连上Internet。这
时您也一样可以执行IP-routing服务,也需把这个选项打开。
#IP:multicasting------所谓的multicasting是群组广播,它是用在视频会议上的协议
,如果想送一个网络封包(网络的数据),同样的一份数据将送往十部机器上。您可以
连续送十次给十台机器(点对点的传送),也可以同时送一次,然后让十台机器同时接
收到。当然后者比前者好,由于视频会议要求是最好每个人都能同时收到同一份信息,
所以如果您有类似的需要,这个选项就要打开。同时您还必须去找相关的软件。
#IP: accounting------如果您打开这个选项,您就可以在/proc/net下看到系统对于
整个网络状况的纪录。所以一般的人这个选项都是选y。而且,如果您设计把这台Linux
机器当router用,那么读者可以因为这个选项而获得许多有关于网络lP控制的信息和它
的输送情形。不过,您必须在底下的选择中选择proc系统(其实proc文件系统一定要选
,不选很多程序会不能用!)
#IP:aliasing su ort------也许您只有一张网络卡,但经由这个设定,您可以拥有数
个IP地址。假设您已经有一个lP地址了,您还想再加入其他的IP地址,这时,您可以依
下面的程序来做。
在 shell下键入: unlyy:/#ifconfig eth0:0其他的IP地址(这个IP地址不能与其他机器重复) unlyy:/# route-add-host其他的IP地址 dev eth0: 0
如此您就可以同时拥有两个IP地址了。当然,如果想把这个IP地址去除,那么可以键人
: u lyy:/# ifconfig eth0:0- IP地址
这样您就可以把加入的IP地址去除。不过在使用此选项前,前面的那一个aliasing Net
work选项也要选上去。
#IP: PC/TCP compatibility mode------大部分人都选n。除非在使用DOS下的NCSA-
TCP/IP软件连进Linux机器时遇到了困难,或者有不相容的情形出现。这时,您可以试
着把这个选项打开,看看是否能解决这个问题。
#IP Reverse ARP------如果您的Linux希望提供bootd的服务,就是让没有硬盘或软盘也
能够开机并且上网络,只要它们有网络卡有连接到网络的话。此时,您必须执行一个指
令叫rarp来设定哪些电脑的网络卡可以如此。不过一般人都没有这个需要,所以答n。
#IP:Disable Path MTU Discovery (normall yenable)------ 大部分的人这个选项
是选择N。除非发现用DOS下的ncsa的telnet程序连到Linux机器上出问题。这是很多人的
问题,如果发生了DOS下的telnet程序不能连进Linux时,除了可以改用Nsysutel的teln
et程序来解决外,还可以在编译核心的时候,把这一项选 Y。 MTU(Maximal Tra fer
Unit)叫做最大的传输单位,是说我们一次送往网络的信息大小。而Path MTUD iscov
ery的意思是,当Linux发现一些机器的传输量比较小时,我们会分送网络信息给它。如
此可以增加网络的速度,所以我们大部分都选N,也就是Enable。
#Ip:Dorp source routed frames------通常我们一个网络的封包在丢出去后就不管它
了,不过,在TCP/IP协议里,您可以设定让那些帮您绕路的机器回送一个是否这个封包
已经送达了的消息。不过,这会导至网络安全上的问题,所以很少用,一般来说我们选
#IP:Allow large windows(not recommended if<16Mb of memory=)------如果有
超过16MB以上的内存,那么建议打开这个选项,可以增加传输的速度。在一般长距离的
网络传输下要预备传输的数据可以先储存在缓冲区,等到对方的回应时再一次会过去。
因此,您必须有内存来作为缓冲区。
#The IPX Protocol------IPX是一种传输协议,它是Novell的一种网络协议,通常用在
区域或是Windows的网络下。如果您希望Novell的机器资源共享(例如用他们的打印机或
是硬盘),那么这个选项则要选y。至于存取文件的格式是NCPFS的格式,稍后把这个文
件系统选上来,以便支援这个文件系统。 如此一来,您就可以通过Novell的IPX通讯协
议去存取它们的数据了。或者,您希望从dosemu(DOS的模拟器)里用IPX协议,这时也
要把它选进来。
#Full internal IPX network------提供了一个完整的内部IPX网络,预设选项是N,因
为它可能会让一些应用的服务程序(RIP/SAP)当掉。
#A letalk DDP------A leTalk是存在于苹果机上的一种通讯协议,用来苹果电脑之间
的网络通迅,通过A leTalk,彼此的电脑间可以打印和分享文件。如果您需要连上这样
的网络,可以把这个选项打开,如此就能加入他们与这些电脑做沟通了,或者把这项编
成一个模块亦可。
#Amateur Radio AX.25 Level2------
#Bridging(EXPERIMENTAL)------
选这两个可以让Linux变成一个网络上的网桥,用来做不同网络间的沟通,通常一般人不
#Qos and/or fair queueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都
还在实验阶段。
8. Telephony Su ort***支持
原来是Linux下可以支持***卡,这样你就可以在IP上使用普通的***提供语音服务了。
记住,***卡可和modem没有任何关系。
本帖最后由 zkxuchi 于 2007-4-25 16:02 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
9129268 贡献
0 阅读权限
80 注册时间
2007-3-6 最后登录
2009-7-13 帖子
548 精华
4460 威望
674 金钱
1675 爱心
376 鲜花
11 朵 性别
男 来自
? 发表于 2007-4-25 23:56
慢慢发,哈哈
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:56
9. SCSI su ort SCSI设备支持
如果有 SCSI 设备,就回答 Y 。现在一般PC机不会有SCSI。接着会有提示要求更进一步
的资讯,像是你是否要支援光驱,硬盘,还有你使用的是那一种 SCSI 界面卡。这部份
请参阅SCSI-HOWTO ,有更详细的说明。如果你的启动分区是SCSI设备,不要选择SCSI模
块支持。在一般的SCSI后是SCSI低级设备驱动程序。再次重申,模块仅仅是用在不在启
动分区的设备。
#SCSI disk su ort------指硬盘而言,如果有SCSI硬盘,那么就要选这个选项。
#SCSI tape su ort------指磁带机而言,如果您有SCSI的磁带机,那么就要选这个选
#SCSI CDROM su ort------指CDROM,如果您有SCSI光驱,这一项一定要选。
#SCSI generic su ort------指其他有关SCSI的东西,也许您有一台SCSI的扫描器或是
烧录机,或是其他有关SCSI的配备,您就要选这一项。而且,除此之外,您还必须准备
关于这些配备的软件。
##Some SCSI devices(e.g. CD jukebox)su ort multiple LUNs
#Probe a11 LUNs on each SCSI device------通常这个选项大部分的人都不会选。我们
举个例子来说,如果您的SCSI光驱是那种多片装的,就是一台光驱,但可以一次放好几
片光盘片的那种。这种我们叫做Lun。
#Verbose SCSI error reporting(kernel size+=12K)------如果认为您的SCSI硬件配
备有些问题,想了解一下它出现的错误信息。那么您可以把这个选项选y,Linux核心会
告诉您有关于您的SCSI配备的问题(如果有的话)。不过,它会增加核心约 12KB左右。
##SCSI low—level drivers
下面总共有接近30张的SCSI卡,您可以依需求做选择SCSI卡牌子。
c AIA1542 su ort
AdaPtec AIHA1740 su ort
AdaDtec AHA274X/284X/294X su ort
AdaPte 7000FASST SCSI su ort
AdaPtec AHA152X/2825 su ort
Adva ys SCSI su ort
Always IN2000 SCSI su ort
Adva ys SCSI su ort
Always IN2000 scsi su ort
AM53/79C974 PCI SCSI ort
Buslogic SCSI Su ort
DTC3180/3280 SCSI su ort
EATA ISA/EISA(DPT PM2011/021/012/022/122/322) su ort
EATA-DMA(DPT,NEC,AT&T,SNI,AST,01ivetti,Alphatronix)su ort
EATA-PIO(old DPT PM2001,PM2012A) su ort
Future Domain 16xx SCSI su ort
Generic NCR5380/53c400 SCSI su ort
NCR53c405a SCSI su ort
NCR53c7,8xx SCSI su ort
NCR53CSXX SCSI su ort
IOMEGA Parallel Port ZIP drive SCSI su ort
PAS16 SCSI SU ort
Qlogic FAS SCSI su ort
Qlogic lSP SCSI su ort
Seagate ST-02 and future Domain TMC-8xx SCSI su ort
Trantor T128/T128F/T228 scsi su ort
Ultrastor 14F/34F su ort
Ultrastor SCSI su ort
10. I2O device su ort
这个也不清楚,帮助里说是这个需要I2O接口适配器才能支持的,在智能I ut/Output(
I2O)体系接口中使用,又是要硬件,不选了。
11. Network device su ort网络设备支持
上面选好协议了,现在该选设备了,内容多得很。还好里面大概分类了,有ARCnet设备
、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wirele LAN(non-hamrad
io)、Token Ring device、Wan interfaces、PCMCIA network device su ort几大类
。耐心点,一般说来都能找到自己用的网卡。如果没有,你只好自己到厂商那里去要驱
动了。 如果这个选项没有打开的话,那么以下的选项将不会出现。它是在选择网络卡或
是网络的设备。例如,PLIP,PPP,SLIP,还有各式各样的网络卡,所以这个选项通常是
#Dummy net driver su ort------如果有SLIP或PPP的传输协议,那么要把这一项打开
。因为一来它不会让您的Linux核心增大。二来,对某些应用程序来说,它可以让我们模
拟出来的TCP/IP环境更像TCP/IP环境。如果您没有SLIP或PPP协议,就不用打开了。
#EQL(serial line load balancing) su ort------如果有两个MODEM,两条***线,
而且用SLIP或PPP协议,可以用这个Driver以便让您的MODEM有两倍的速度。当然,在网
络的另一端也要有同样的设备。
#PLIP(parallel port) su ort------依字面上看,它是一种利用打印机的接口(平
行接口),然后利用点对点来模拟TCP/IP的环境。它和 SLIP/PPP全都属于点对点通讯
,您可以把两台电脑利用打印机的连接接口串联起来,然后,加入此通讯协议。如此一
来,这两部电脑就等于一个小小的网络了。不过,如果电脑有提供打印服务的话,这个
选项最好不要打开,不然可能会有问题(因为都是用平行接口)。
#PPP(point-to-point)su ort------点对点协议,近年来,PPP协议已经慢慢的取
代SLIP的规定了,原因是PPP协议可以获取相同的IP地址,而SLIP则一直在改变IP地址,
在许多的方面,PPP都胜过SLIP协议。
#SLIP(serial line) su ort------这是MODEM族常用的一种通讯协议,必须通过一台
Server(叫ISP)获取一个IP地址,然后利用这个IP地址,可以模拟以太网络,使用有关
TCP/IP的程序。
##Ethernet(10 or 100Mbit)
如果您在学校接了校园网络并且使用网络卡,那么这个选项一定要选y,否则以下对网络
卡的选择将不会出现。或是您有网络卡,这时您同样的也要选y。之后,下面会列出许多
网络卡让您选择。像我们平常用的都是NE2000相容卡。
#3COM cards
#AMD LANCE and PCnet(AT1500 and NE2100) su ort
#Western Digital/SMC cards
##other ISA Cards(CONFIG.ISA)------选y,以下才会列出有关ISA的网络卡。包括
NE2000的兼容卡。
Cabletron E21xx su ort
DEPCA, DE10x, DE200, DE201, DE202, DE422 su ort
EtherWORKS 3(DE203, DE204, DE205) su ort
EtherExpre 16 su ort
HP PCLAN+(27247B and 27252A) su ort
HP PCLAN(27245 and other 27xxx series) su ort
HP 10/100VG PCLAN(ISA, EISA, PCI) su ort
NE2000/NE1000 su ort
SK.G16 su ort
# EISA, VLB, PCI and on board controllers ------选择网络卡,包括直接附在主
机板上的那种。如果选择y,则底下会列出其他的网络卡让您做选择,这些卡对于一般人
来说很少会去用到。所以大部分的人这项是选N的。
#Pocket and portable adaptors------通常用在可携式的电脑上,这类型的网络卡(口
袋型的),由于体积很小在***和取下方面很方便,因此笔记本相关电脑上便常常采用
这种网络卡。
#Token Ring driver su ort------Token Ring是 IBM电脑上的网络。它叫令牌环网络
,和以太网络是很类似的东西。如果您希望使用的Token Ring网络卡以便连接到这种网
络,那么选Y,一般人都选N。
#ARCnet su ort------这也是一种网络卡,通常一般人用不到,所以选n。如果您有这
样的网络卡,请看Documentation/networking/arcnet.txt的说明。
补:block选项中的有关loop的应选上 否则不能mount iso文件 应该将其修改一下
本帖最后由 zkxuchi 于 2007-4-25 16:02 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:56
12. Amateur Radio su ort 业余无线广播 可以用来启动无线网络的基本支持,目前的无线网络可以通过公众频率传输数据,如果 你有此类设备就可以启用,具体请参考AX25和HAM HOWTO 文档。 13. IrDA(infrared)su ort红外支持 14. ISDN su ystem 如果使用ISDN上网,这个就必不可少了。ISDN(Integrated Services Digital Networ k),它的中文名称是综合数字服务网络,是一个利用***线,把声音,影片信息以数字 的方式传送的数字网络,它需要***交换机设备有支持ISDN,这通常需要电信局来做安 装,对于在家工作的人来说,ISDN可能是最舒适最便宜的一种方式,因此有愈来愈多的 人使用它。不过,除非是公司,不然一般人很少会使用到ISDN的,所以这部分的选项大 都选N。如果您选择Y,则下面会出现一些有关ISDN的问题。如果需要用到ISDN,可以去 看看杂志的介绍。只要是有关网络的杂志应该都会有介绍。还需要启用Su ort synchr onous PPP选项(参考PPP over ISDN)。 15. Old CD-ROM drivers(not SCSI、 IDE)非SCSI/IDE口的光驱 如用IDE的CD-ROM,不选。 以下是选择非 IDE/ATAPI和 SCSI界面的光驱,这些光驱通常有自己专属的接口卡也是 比较旧型的光驱类型。如果有这些光驱,则这个选项要选y,否则选n。如果您选择n,则 会跳过以下光驱的选项。 Aztech/ orchid/okano/Wearnes/IXC/CyDROM CDROM su ort Goldstar R420 CDROM su ort Matsllshita/panasonic/Creative,longshine,TEAC CDRW Su ort Mitsllmi(no XA/MUltise Ion) CDROM Su ort Mitsumi(XA/Multise ion) CDROM su ort optics Storage DCLPHIN 8000AT CDROM su ort Phili /LMS CM206 CDROM su ort Sanyo CDR-h94A CDROM su ort Soft configurable CDROM interface card su ort Sony CDU3lA CDROM su ort Sony CDU535 CDROM su ort 16. Character devices字符设备 所谓字符设备通常是指以字符为单位做处理的设备,例如终端机就是其中一项。原则上 ,我们对于这些选项的选择也是以预设为主。这个内容又太多了,先使用缺省设置,需 要的话自己就修改。把大类介绍一下吧: 15. Old CD-ROM drivers(not SCSI、 IDE)非SCSI/IDE口的光驱 如用IDE的CD-ROM,不选。 以下是选择非 IDE/ATAPI和 SCSI界面的光驱,这些光驱通常有自己专属的接口卡也是 比较旧型的光驱类型。如果有这些光驱,则这个选项要选y,否则选n。如果您选择n,则 会跳过以下光驱的选项。 Aztech/ orchid/okano/Wearnes/IXC/CyDROM CDROM su ort Goldstar R420 CDROM su ort Matsllshita/panasonic/Creative,longshine,TEAC CDRW Su ort Mitsllmi(no XA/MUltise Ion) CDROM Su ort Mitsumi(XA/Multise ion) CDROM su ort optics Storage DCLPHIN 8000AT CDROM su ort Phili /LMS CM206 CDROM su ort Sanyo CDR-h94A CDROM su ort Soft configurable CDROM interface card su ort Sony CDU3lA CDROM su ort Sony CDU535 CDROM su ort
本帖最后由 zkxuchi 于 2007-4-25 16:03 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:56
16. Character devices字符设备 所谓字符设备通常是指以字符为单位做处理的设备,例如终端机就是其中一项。原则上 ,我们对于这些选项的选择也是以预设为主。这个内容又太多了,先使用缺省设置,需 要的话自己就修改。把大类介绍一下吧: #Digiboard PC/Xx Su ort------这是一张叫 Digiboard PC/XX卡的 driver,这种卡 上面有很多个 serial port的插槽(一般来说只有两个),可以用来连接很多个MODEM, 在民间的BBS站很常用到,如果您有这样的东西,您必须选这项为y。有兴趣的读者可以 读读Documentation/digiboard.txt的内容。 #Cyclades async mux su ort------同上,这也是一种能接很多个serial port插槽的 卡的驱动程序。 #Stallion multlport serial su ort------同上,这也是其中一种卡。 #SDL RISCom/8 card su ort------这也是其中的一个支持muti-serial卡的driver。 #Parallel printer su ort------有打印机的或是使用到并行接口的人这一项一定要选 。除非是用serial的打印机。还有如果您有使用PLIP,那么这项也请选上。 #Mouse su ort------大部分的人这一项并不用选y。因为大部分的人是用serial的鼠标 ,除非有些人是用一种附有接口卡的鼠标,这时这个选项才要选上,如果您选y,则底下 会列出您的BUS鼠标所用的接口卡。 #su ort for user misc device modules------除非您有所谓的触摸式显示器或是光笔 等东西,否则这一项选n。 #QIC-02 tape su ort------非 SCSI界面的磁带机,除非您有,否则选 n。 #Ftape(QIC-80/Travan)su ort------如果有磁带机,而这个磁带机是接在软盘控 制卡上,这个选项才要选y。 #Watchdog Timer su ort------一般人不需要这个选项,如果您选上这个选项,则您要 用mknod在/dev下建一个watchdog的文件。请看Documentation/watchlog.txt的解释 。 #Enhanced Real Time Clock Su ort------关于系统上Clock的东西,您必须自己用mk nod在/dev/下建立一个文件叫rtc。如此一来,在/proc/下将可以看到rtc的信息。 有关于rtc的内容请看Documentation/rtc.txt。一般是选n。 17. USB su rot USB支持 很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在Linux都可以得到支持, 根据需要自行选择。
本帖最后由 zkxuchi 于 2007-4-25 16:05 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:56
18. File systems文件系统 Linux上有支持约二十几种的文件系统,有支持某个文件系统的意思是,可以存取某个文 件系统的数据或是做拷贝动作。在这些文件系统中,通常的选择方法是按照原来预设的 方式,不过,在其中,EXT2FS那个选项无论如何一定要选,因为那是Linux系统所使用的 文件系统。其他的则依需求做选择。 通常是ext2而让其余的使用模块。 #Kernel automounter su ort------选择“y”,内核将提供对automounter的支持,使 系统在启动时自动 mount远程文件系统。 #Standard( minix )------新的套件不再建立 minix 文件系统,而且很多人不使用它 ,但是把它配置在核心里仍然是个好主意。某些″rescue-disk ″ 程序会用到它,而且 仍然有许多磁片可能用 minix 文件系统,因为 minix 文件系统对于处理磁片方面是最 好的。当初Linus是因为对Minix这个小型的操作系统有很深的经验,所以才写出Linux这 个操作系统。Minix文件系统通常用在磁盘上,有时会用到它。 #Extended fs ------ 这是扩充文件系统的第一版,现在已经不再使用。 #Second extented fs------这是现在新发行的套件所广泛采用的文件系统,你可能会有 其中一种。这个是linux文件系统,请务必选y,如果问我说选n会有什么后果,我也不知 道。除非您能把 Linux装在 DOS的目录下。 #xiafs filesystem-----这个文件系统曾经一度很普遍,但是在写这份文件时,我已经 不知道有任何人在使用它了。 #DOS FAT fs ------DOS FAT文件格式的支持,可以支持FAT16、FAT32。这个选项是DOS 的文件系统,如果您没有选y,则下面的MSDOS,VFAT,umsdos将不会出现。 #msdos------DOS文件系统的格式。如果你想要在 linux 下使用你硬盘中的 MS-DOS 分 割区,或是想将用 MS-DOS 格式化的磁盘挂进来的话,回答y 。 #VFAT(Windows95) fs ------windows95所支持的文件系统,是我们常说的vfat文件系 统,如果您的系统中装有windows95,那么选择这个文件系统将对以让您看到windows95 的长文件名。 #umsdos: UNIX like fs on top of std MSDOS FAT fs ------ 如果把Linux装进DOS的 一个目录下那么您则要选择这一项。不建议这样做,因为如此一来,就不能看到长文件 名了。而且效率上,井不是很好。 #ums-dos------相当 slick 的文件系统,它能使 MS-DOS 文件系统拥有更多的特性,像 是长档名等等。这对那些不使用 MS-DOS 的人(像我)并不是很有用。 #/proc------这是最 slick 的文件系统之一。它不是你硬盘分割区里的任何东西,不占 用硬盘的空间,而是核心与程序之间的文件系统介面,它表示的只是内存里头的状况和 各个程序执行的情形,它也记录了您硬件上配备。。许多程序工具(像″ ″)都会用 到它。如果已经将它***好了,有空不妨试试看″cat /proc/meminfo ″或者是″ cat /proc/devices ″。有些 shells ,像是 rc ,会用 proc/self/fd(在其它系统上为 /dev/fd )来处理输出入。几乎可以确定你在这里得要回答y ,有许多重要的 Linux 标准工具是靠它来运作的,否则有些指令会出问题。 #Root file system on NFS------一般不选,除非您的电脑上没有硬盘,希望通过网络 由别人的硬盘开机过Linux如此一来才有需要选这项。同时对方也要执行rarp的服务。 #System V and Coherent------这是为 System V 以及 Coherent 的分割区而设的。如 果希望支持System V或Xenix的相关UNIX系统的FS并读取它们的数据,那么才有必要选这 个,否则一般来说这个选项是选n的。 #Quota su ort ------Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户 共同使用一台主机的情况中十分有效。 #ISO 9660 CD-ROM file system su ort------光盘使用的就是ISO 9660的文件格式。 #Mandatory lock su ort------有些很特殊的database应用软件会用到它,一般人这个 选项是选n。而且,如果选y的话,必须有最新版的NFS软件,最新版的samba软件等。 #NTFS file system su ort------ntfs是NT使用的文件格式。 #UFS filesystem su ort-----这是BSD,SunoS,FreeBSD,NetBSD或Nextstep所使用的 文件系统。如果您在电脑上有这些操作系统的话,那么可以选这一项。否则一般人都选 n。 ##Network File Systems------网络文件系统 # NFS------如果你在网络环境下而且想要分享档案,回答 y 。如果希望挂上别的电脑 的文件系统,那么这个选项一定要选进去。它可以让您利用网络把别人的硬盘当成自己 的来使用(把它变成一个目录)。对于一般人来说,这个选项是选y。 #SMB filesystem su ort------这个文件系统让您可以挂上windows95或windowsNT的文 件系统,也就是您也可以抓到在windows下,网上邻居上的电脑。 #SMB long filename su ort------支持windows95的长文件名。 #NCP filesystem su ort------NCP是一种网络的通讯协议,用在跑IPX协议上,它可以 利用IPX协议让两台电脑之间的文件共享,并做沟通。如果您想挂上有关Novell的Netwa re文件系统,那么这个选项就选上去吧。 ##Partition Types-----分区类型,该选项支持一些不太常用的分区类型,用户如果需 要,在相应的选项上选择“y”即可。 ##Native Language Su ort------本地语言支持 附:不知道需要那些文件系统怎末办? 键入″ mount ″它看起来会像这样: unlyy% mount /dev/hda1 on / type ext2 (defaults) /dev/hda3 on /usr type ext2 (defaults) one on /proc type proc (defaults) /dev/fd0 on /mnt type msdos (defaults) 仔细看看每一行;在” type ”后面的那个字就是文件系统的格式。在这个例子中,我 的 / 和 /usr 分割区是 second extended 格式,我使用 /proc ,而且挂有一张以msd os (bleah) 为文件系统格式的磁片。如果你有使用 /proc ,可以试试″cat /proc/fi lesystems ″。它会给你一份目前使用的核心所支援的文件系统列表。 19. Co ole drivers 控制台驱动 #VGA text co ole ------ 选择“y”,用户就可以在标准的VGA显示方式下使用Linux 了。一般使用VGA text co ole就可以了,标准的80*25的文本控制台。 #Video mode selection su ort
本帖最后由 zkxuchi 于 2007-4-25 16:05 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:56
20. Sound sound声卡驱动 如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。阅读帮助文件从列表中 小心的选取。确信为你声卡真确的选择了I/O和IRQ。声卡的MPU I/O是0选项。一般是33 0,如果不对不必担心。模块的好处就是在核心编译以后你还能重新编译、***模块并挂 上核心。 如果有声卡,请去了解一下声卡的 IRQ和 DMA等信息,并了解是属于哪一种的。现在大 部分的人使用的都是Sound Blaster或是它的相容卡。有关这类的信息请看各个声卡的说 明书。当选Y时,出现下面的画面。就依您的声卡来做选择吧! Pro Audio Spectrum 16 su ort Sound Blaster(SB,SBPro,SB16,clone) su ort Generic OPL2/0P13 FM synthesizer su ort Gravis Ultrasound su ort MPU-401 su ort(NOT for SB16) 6850 CART Midi su ort PSS(ECho-AD12111)su ort(NOT for SB16) 16 bit sampli option of GUS(N0T_GUS_MAX) GUS MAX su ort Microsoft Sound System su ort E olliQ Soundscape su ort MediaTrix AudioTrix Pro su ort Su ort forMAD16 and/or Mozart based card 20. Sound sound声卡驱动 如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。阅读帮助文件从列表中 小心的选取。确信为你声卡真确的选择了I/O和IRQ。声卡的MPU I/O是0选项。一般是33 0,如果不对不必担心。模块的好处就是在核心编译以后你还能重新编译、***模块并挂 上核心。 如果有声卡,请去了解一下声卡的 IRQ和 DMA等信息,并了解是属于哪一种的。现在大 部分的人使用的都是Sound Blaster或是它的相容卡。有关这类的信息请看各个声卡的说 明书。当选Y时,出现下面的画面。就依您的声卡来做选择吧! Pro Audio Spectrum 16 su ort Sound Blaster(SB,SBPro,SB16,clone) su ort Generic OPL2/0P13 FM synthesizer su ort Gravis Ultrasound su ort MPU-401 su ort(NOT for SB16) 6850 CART Midi su ort PSS(ECho-AD12111)su ort(NOT for SB16) 16 bit sampli option of GUS(N0T_GUS_MAX) GUS MAX su ort Microsoft Sound System su ort E olliQ Soundscape su ort MediaTrix AudioTrix Pro su ort Su ort forMAD16 and/or Mozart based card Su ort for Crystal CS4232 based(PnP) card Su ort for Turtle Bench Wave Front (Maul,Tropez)synthesizer #/dev/d and/dev/audio su ort------ 这个选项通常是必要的。因此大部分的 人选y,如果没有这选项,则很多的游戏将没有声音效果。 #MIDI interface su ort------支持MIDI界面。 #FM synthesizer(YM3812/0PL-3) su ort #I/O base for SB Check from manual of the card------声卡的I/O地址。括号是常 用的选项。 #Sound Blaster IRQ Check from manual of the card-----声卡的IRQ,通常是1或5。 #Sound Blaster DMA 0,1 for 3-----声卡的DMA,通常是1。 #Sound Blaster 16 bit DMA 5, 6 or 7(usel for 8 bitcards)(SB.DMA2)----- 5 #MPU401 I/0 base of SB16, Jazz16 and ES1688 Check from manual of the card ------0 #SB MPU401 IRQ(Jazzl6, SM Wave and ES1688) Usel with SB16------1 #Audio DMA buffer size 4096,16384,32768 or 65536------65536 ##Additional low level drivers------如有其他种类的声卡,则这项要选上去,以下 会列出其他的声卡供选择。 21. Kernel hacking安全模式 通俗的说,这是windows安全模式,找不到明确解释,就引用这个说法。>这是从 Linu 的 README 里摘录的:
本帖最后由 zkxuchi 于 2007-4-25 16:05 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-25 23:56
第四节 启用内核 通常,核心***叫做vmlinuz。过去Unix使用者共同起了这名字。z表示压缩,v和" m意思是virtual(虚拟)和" ticky(粘性的),各自属于内存和磁盘管理。建议保 留vmlinuz核心,直到知道它工作。 为了能够使用新版本的内核,还需要做一些改动: #cp /usr/src/linux/System.map /boot/System.map-2.2.16 #cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.2.16 以上这两个文件是刚才编译时新生成的。下面修改/boot下的两个链接System.map和vml inuz,使其指向新内核的文件: #cd /boot #rm -f System.map vmlinuz #ln -s vmlinuz-2.2.16 vmlinuz #ln -s System.map-2.2..16 System.ma 注意:要保留vmlinuz核心,以下列步骤进行 #cp /usr/src/linux/System.map /boot/System.map-2.2.16 #cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.2.16 #cd /boot #rm -f System.ma #ln -s System.map-2.2..16 System.ma 现在#vi /etc/lilo.conf,增加如下一段: image=/boot/vmlinuz-2.2.16 是设定为已经***的核心 label=linux2.2.16 则是由 lilo 用来告诉你现在要启动的是那个核心或作业系统 , read-only root=/dev/hda2 则是这个特别的作业系统的根目录 / 其中root=/dev/hda2一行要根据需要自行加以修改。 运行:#/ in/lilo -v 保存执行命令:lilo你将看到核心标签,第一个是星号。如果你 没有看到新核心的标签或LILO出现错误,你需要重新对/etc/lilo.conf工作(看下面的 LILO分析)。 确认对/etc/lilo.conf的编辑无误,现在重新启动系统: #shutdown -r now 不建议使用热启动或ctrl+Alt+del键。在一些情况下,文件系统不完全卸栽会损坏打开 的文件。在LILO提示时,如果你需要启动旧的核心或使用一些参数启动,如果你没看见 启动提示,你可以试用shift或ctrl键,这样启动提示就出现了。一旦出现,按tab看核 心标签。输入标签和可选参数启动。通常,在/etc/lilo.conf文件指定的时间后自动启 动核心。启动时,你可能看见一些出错信息就象SIOCADDR。这常常显示模块(一般是网 络模块)没有引导。处理这事很简单,如果有此一错,VFS,ca otmount root,你就 不要在核心中编译适当的磁盘或文件系统支持。 在机器重启后出现LILO时按TAB键,输入linux2.1.16,新内核发挥作用了。 附录:LILO分析(技术性强,仅供参考) 第一部分 LILO介绍 LILO(Linux Loader)是Linux自带的一个优秀的引导管理器,使用它可以很方便地引导 一台机器上的多个操作系统。与其他常用的引导加载程序相比,LILO引导方式显得更具 有艺术性,对其深入的理解,将有助于我们方便地处理多操作系统、网络引导、大硬盘 及大内存等诸多棘手的问题。 LILO的引导机制------众所周知,计算机的最初启动是由BIOS控制的,在对一些硬件( 如:内存、键盘等)初始化之后,它会试图加载硬盘的主引导记录(MBR)或软盘的引导 扇区。MBR可通过两种方式运行,其一是定位到活动分区并加载相应的引导扇区,然后由 引导扇区完成该分区内操作系统的基本组件的加载;其二是直接从一指定分区中加载信 息,并通过它装入任一分区的操作系统,诸如LILO、OS/2 boot loader及Partition Ma gic等引导加载程序都可以配置成这种方式。软盘的引导扇区相当于硬盘活动分区的引导 扇区,它通常用于装入软盘上的操作系统。由此可见,只要把LILO***在MBR、活动分区 或者引导软盘上,就能接管计算机的控制权,然后由LILO完成后继的引导过程。LILO中 建有一个引导表地址编码,借此它的引导程序就能定位到Linux的内核文件,这种地址编 码既可以按照柱面/磁头/扇区(CHS)模式,又可以采用LBA的线性块号模式,因此,即使 对某些SCSI控制程序LILO也能运转良好。 当LILO定位到配置文件后,经过预引导过程,就显示提示符: LILO boot: 此时,系统允许选择引导不同的操作系统或者不同的内核配置,按Tab键显示可选项列表 ,然后输入可选项或者直接回车选择缺省配置,如果选择了引导Linux,还可以直接传递 参数到系统内核。 和其他系统的引导加载程序相比,LILO具有更大的灵活性,其引导方式也更丰富多彩。 ●当LILO被***在硬盘的MBR、活动分区或引导软盘上时,作为原引导程序的替身,它能 引导任一硬盘任一分区上的Linux和其他操作系统;除了引导扇区,它没有任何隐含文件 ,也不需要使用特定的分区,它的配置文件可以在任何分区、甚至是存放在与Linux毫不 相干的DOS分区的某个子目录下;它能引导几个不同的内核配置,甚至是几个不同的内核 ; 它能引导同一机程序上的多个Linux版本;可达16个。 ●它能从网络上引导Linux。 ●LILO的灵活性使得其配置变得相当复杂,当有多个系统共存时,建议先***其他操作 系统,最后再装Linux,这样,设置LILO对其他系统的引导会相对简单一些。
本帖最后由 zkxuchi 于 2007-4-25 16:06 编辑
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
当前离线
2623883 贡献
0 阅读权限
50 注册时间
2007-2-25 最后登录
2010-11-6 帖子
545 精华
2836 威望
50 金钱
937 爱心
428 鲜花
3 朵 性别
男 发表于 2007-4-26 00:06
第二部分 LILO参数
通常我们谈到LILO,会涉及到两个方面——LILO引导程序和LILO***命令/ in/lilo。
为了不至于混淆这两个概念,本文将用LILO表示LILO引导程序,而lilo表示/ in/lilo
。一般地,LILO使用一个文本文件/etc/lilo.conf作为其配置文件。lilo读取lilo.con
f,按照其中的参数将特定的LILO写入系统引导区。任何时候,修改了/etc/lilo.conf,
都必须重新运行lilo命令,以保证LILO正常运lilo.conf使用的配置参数很多,配置起来
也相当复杂。下面以RedHat Linux为例作一些初步探讨,RedHat的lilo程序包版本为0.
20,别的Linux发行版本可能会有所出入,但不会太大。
lilo.conf文件中的配置参数分为两部分,一部分是全局参数,另一部分是引导映像参数
。引导映像参数作用于每一个引导映像区。如果某一引导映像参数(例如:pa word与
全局参数的定义相抵触,则以该引导映像参数的定义为准,但仅限于该引导映像区。LI
LO的引导参数有很多,在此只对一些比较重要的参数作一介绍。与Linux系统其他的配置
文件一样,“#”号后的一行文字表示注释。
1.“boot=”此参数指明包含引导扇区的设备名(如:/dev/had),若此项忽略,则从当
前的根分区中读取引导扇区。
2.“root=”此参数告诉内核启动时以哪个设备作为根文件系统使用,其设定值为构造内
核时根文件系统的设备名,可用的设备名有:
(1)/dev/hdaN~/dev/hddN:ST-506兼容硬盘,a到d上的N个分区
(2)/dev/sdaN~/dev/sdeN:SCSI兼容硬盘,a到e上的N个分区
(3)/dev/xdaN~/dev/xdbN:XT兼容硬盘,a到b上的N个分区
(4)/dev/fdN:软盘,A:(N=0)或B:(N=1)
(5)/dev/nfs:由网络取得根文件系统的标志
3.“nfsroot=”若需通过NFS提供根文件系统来引导无盘工作站,此参数为内核指定了网
络根文件系统所在的机程序、目录及NFS,其格式为:nfsroot=(〈server_ip〉:)〈r
oot_dir〉(,nfs_optio ))
4.“nfsaddrs=”设定网络通讯所需的各种网络界面地址,如无此参数,则内核会试图用
反向地址解析协定(RARP)或启动协定(BOOTP)找出这些参数,其格式为:nfsaddrs=〈客
户端IP〉:〈服务端IP〉:〈网关IP〉:〈子网屏蔽〉:〈客户端名称〉:〈网络设备名 〉
:〈auto〉
5.“image=”指定Linux的内核文件。
6.“delay=”设定引导第一个映像前的等待时间。
7.“disk=”此参数为某一特殊的硬盘定义非标准参数。
8.“a end=”为内核传递一个可选的参数行,其典型的应用是为不能完全由系统自动识
别的硬盘指定参数,如:a end = hd=64,32,202
9.“label=”此参数为每个映像指定一个名字,以供引导时选择。
10.“read-only”设定以只读方式挂入根文件系统,用于文件系统一致性检查(fsck)
11.“i tall=”***一个指定文件作为新的引导扇区,缺省为/boot/boot.b。
12.“loader=”说明所使用的链加载程序(chain loader),缺省为/boot/chain.b,如果
不是从首硬盘或软盘启动,那么,此选项必须说明。
13.“table=”说明包含分区表的设备名,如果此参数忽略,引导加载程序将不能传递分
区信息到已引导的操作系统。当此参数指向的分区表被修改时,必须重新运行/ in/li
14.“init=”内核初始化时执行的程序,通常过程为init、getty、rc和sh,版本1.3.4
3以来的Linux内核能够执行/ in/init说明的命令行,若在引导过程中出现问
题,则可设置init=/bin/sh直接跳到Shell。
15.“ramdisk_start=”由于内核不能放在压缩的内存文件系统映像内,为使内核映像能
够和压缩的内存映像放在一张软盘内,加入“ramdisk_start=〈offset〉”,这样内核
才能开始执行。
16.“mem=”此参数的目的之一是为Linux指定使用的内存数量:如mem=96MB,目的之二
是指定mem=nopentium告诉内核不要使用4MB分页表。
17.“vga=”设置显示模式,如80×50、132×44等。
18.“linear” 产生用于替换硬盘sector/head/cylinder地址(硬盘几何参数)的line
ar扇区地址。linear地址在运行时产生并且不依赖于硬盘几何参数。某些SCSI硬盘和一
些以LBA方式使用的IDE硬盘可能会需要使用这个参数。注意:在将LILO***到软盘上时
不能使用“linear”参数。
19.“prompt” 给出“boot:”提示,强制LILO等待用户的键盘输入,按下回车键则立即
引导默认的操作系统,而按下Tab键则打印可供选择的操作系统。当“prompt”被设置而
“timeout”没有被设置时,系统会一直处于等待状态而不引导任何操作系统。不设置该
参数时,LILO不给出“boot:”提示而直接引导默认操作系统,除非用户按下了Shift、
Ctrl、Alt三键中的任何一个。大多数情况下,如果你的硬盘上有多个操作系统,建议使
用参数,它留给用户一个选择的余地。
20.“timeout=” 设置等待键盘输入的时长,单位是0.1秒。超过这段时间没有输入则为
超时,系统将自动引导缺省的操作系统。如果不设置本参数,缺省的超时时间长度为无
穷大。
21.“other=” 设置包含非Linux操作系统,如DOS、SCO UNIX、Windows 95等系统引导
映像的文件或设备。
22.alias=name 给当前操作系统起一别名。
QT啊啊啊啊啊啊啊啊啊啊啊啊啊~~~~~~~~~~~~~
(潜水员)
当前离线
8332628 贡献
0 阅读权限
70 注册时间
2006-11-25 最后登录
2011-4-1 帖子
2284 精华
6765 威望
197 金钱
3567 爱心
2018 鲜花
4 朵 来自
广州 发表于 2007-4-26 00:07
看完都不知道要多久
当前离线
8470051 贡献
0 阅读权限
70 注册时间
2006-12-17 最后登录
2011-7-14 帖子
3229 精华
8928 威望
1353 金钱
5495 爱心
2657 鲜花
18 朵 性别
男 来自
水星 发表于 2007-4-26 00:07
我也来看
1 站长推荐
万众瞩目的三星全球首款Super AMOLED Plus双核旗舰智能触控手机GALAXY SII将在上海举办发布会!邀请你来参加并且现场购机就会送1000元豪礼!
联想 终结者B B320 B520 联想ideapad Z流行 Z470 Y470 IT168
GMT+8, 2011-7-27 21:40,
Proce ed in 0.059907 second(s), 21 queries
Powered by
2001-2009“/”应用程序中的服务器错误。
未将对象引用设置到对象的实例。
说明:
执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息:
System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
_Default.jhTf1H8peFf1BSH90Ly(Object ) +6
_Default.Page_Load(Object sender, EventArgs e) +95
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.Proce RequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
版本信息: Microsoft .NET Framework 版本:2.0.50727.3615; ASP.NET 版本:2.0.50727.3618
( Sat, 11 Sep 2010 21:23:27 +0800 )
Description: 不会J***A和C#?那就用游戏来学习它们吧!Robocode是一个基于Java语言的机器人作战游戏。其代码的编写和建模都不错,玩起来也很有趣。Robocode是很多”编程游戏”软件中的一个,他们共同的特征是在没有用户输入的状态下许多机器人在一个及竞技场中比赛,用户必须编制一个高效的机器人来取胜。 Robocode特别的像一场机器人坦克的大混战,它们互相开火直到只剩一个胜利者。程序完全是由 J***A或者C#编写,并且玩家必须要创造一个继承自Robot类的类。 你希望在玩游戏的过程中、在闪躲炮弹、执行精确攻击的演练中学会Java和C#编程的 继承、多态性、事件处理以及内部类这些内容吗?Robocode 这个游戏为全世界的 Java 和C#
开发者实现这个愿望,它把游戏风潮变成了教学工具,人们对它的上瘾程度令人吃惊。 Robocode 是一个很容易使用的机器人战斗仿真器,其程序仿真器可以在所有支持 Java 2 的平台上运行。而我们可以利用C#或者J***A来创建自己的一个机器人,把它放到战场上,然后让它同其他开发者们创建的机器人对手拼死战斗到底。Robocode 里有一些预先做好的机器人对手让你入门,但一旦您不再需要它们,就可以把您自己创建的机器人加入到正在世界范围内形成的某个联盟里去和世界最强手对阵。 每个 Robocode 参加者都要利用 Java 和C#
语言元素创建他或她的机器人,这样就使从初学者到高级黑客的广大开发者都可以参与这一娱乐活动。初级的 Java 和C#
的开发者们可以学习一些基础知识:调用 API 代码、阅读 Javadoc、继承、内部类、事件处理等等。高级开发者们可以在构建“最优品种”的软件机器人全球竞赛中提高他们的编程技巧。 1)下载和*** Robocode Robocode 是 Mathew Nelso 的智慧之作,他是 IBM Internet 部门 Advanced Technology 的软件工程师。现在Robocode的主页已经搬迁到sourceforge这个开源网站(
)上了,大家可以在这里下载RobotCode的最新版,我这里使用的是robocode.1.7.2.1版。 当然首先需要下载和***JDK1.5以上版本(
) 然后把下载回来的robocode-setup.jar复制到c盘根目录,打开 开始菜单 的“运行”,输入 java -jar “c:\robocode-setup.jar” 进行***,.***完后就可以在开始菜单中找到Robocode的菜单了,或通过桌面上的图标来启动 Robocode 系统。来~我们进入战场咯!
2)启动Robocode 系统和编写机器人 当启动 Robocode 时,将看到主robocode界面,如图: 然后通过robot菜单下的editor菜单可以进入编辑器,然后通过new菜单下的robot子菜单,输入机器人的名字(我这里输入CskRobo)t和所在包的名字(这里为WUCC)后,就可以生成范例代码,如图:
这个坦克的默认行为是前进100个像素,将***转向360,后退100米,将***转向360度,由于代码在一个while永真循环中,坦克会一直持续这种行为至结束。机器人代码中还可以看到如下的语句: ublic void onSca edRobot(Sca edRobotEvent e) { fire(1); }
也就是在扫描到敌人后开火,火力为1.。接受默认的代码,然后选择“compiler”菜单下的compile命令编译代码,生成的的机器人就保存好了,然后关闭编辑器。 3)开始战斗 在robot主界面中,通过battle菜单下的new,可以开始一场新的战役。
在如上图的界面中选择刚才我们编写的wucc包下的cskrobot机器人,通过add加入战场,还可以选择软件自带的一些示例机器人,也可以上网下载一些别人编写的优秀机器人,这些都可以通过robocode的协作站点(
)寻找,我这里加入了曾在2002-2004年蝉联世界排名第一的sandboxdt(
),下载后,可以通过如下图的导入下载robot菜单将该坦克导入。
选择好机器人后,通过start attle就可以开始战斗了,感受一下世界冠军和你的差距吧。。。。 robocode提供了很多api方法控制坦克的通过,我们还可以通过扩展advancedrobot类制作更高级的坦克,网上有很多机器人的源代码,里面体现了很多算法和数学知识,还有IBM的站点上也有很多介绍文章,比如(
)中的介绍如何用java中的vector类实现敌人列表功能,大家可以慢慢学习。接下来就剩下好好学习,边学边玩了。。。。 最早robocode只支持用java语言极其编译器写机器人坦克,最新版的已经开始支持在.net平台下利用c#等语言写了,但步骤比较麻烦,下次有机会再介绍c#下如何写机器人。。。。 ( Thu, 9 Sep 2010 14:39:41 +0800 )
Description: 程序设计离不开编程语言,但是编程语言在国内的大环境中似乎一直是个二等公民。国内的计算机教育和工程培训,似乎一直在宣传“语言不重要,重要的是思想”,“语言一通百通”等观点,甚至在许多人眼中“语言的讨论”完全是不入流的,但其实“编程语言”与“工具”、“框架”或是“开发方法”等事物一样,都对生产力有着重要的影响。事实上,语言的发展历史比其他方面更为悠久,并且在过去十几年,甚至最近几年中都依然在不断的碰撞,演变。期间一些新的语言诞生了,而另一些在当时看来阳春白雪的语言和编程范式也重新获得了人们的重视。 是微软的
,担任C#编程语言的首席架构师,也参与了.NET Framework,以及VB.NET和F#等语言的设计与开发。几个月前,Anders在
分别进行了一场演讲,阐述了他眼中对于编程语言的发展趋势及未来方向,本文便对他的观点进行了总结。 大约25到30年前,Anders开发了著名的
,这是一套集语言、编译器及开发工具于一体的产品,这也是Anders进入编程语言这一领域的起点。Anders谈到,如今的计算机和当年他开发的Turbo Pascal所用的
已经不可同日而语。从那时算起,
如今的机器已经有大约10万倍的外部存储容量,1万倍的内存大小,CPU速度也有大约1000倍的提高。但是,如果我们比较如今的Java代码及当年Pascal代码,会发现它们的差别其实并不大。Anders认为编程语言的发展非常缓慢,期间当然出现了一些东西,例如面向对象等等,但是远没有好上1000倍。
事实上,近几十年来的努力主要体现在框架及工具等方面(如下图)。例如.NET Framework里有超过一万个类及十万个方法,与Turbo Pascal相比的确有了超过1000倍的增长。同样类似,
现在的IDE包含了无数强大的功能,例如语法提示,重构,调试器等等。与此相比,编程语言的改进的确很不明显。 在过去5、60年的编程历史中,编程语言的抽象级别不断提高,人们都在努力让编程语言更有表现力,这样我们可以用更少的代码完成更多的工作。
我们一开始使用汇编,然后使用面向过程的语言(如Pascal和C),然后是面向对象语言(如C++),随后便进入了托管时代,语言运行于受托管的执行环境上(如C#,Java),它们的主要特性有自动的垃圾收集,类型安全等等。
Anders认为这样的趋势还会继续保持下去,我们还会看到抽象级别越来越高的语言,而语言的设计者则必须理解并预测下一个抽象级别是什么样子的。另一方面,如.NET,Java等框架的重要性提高了许多,
编程语言往往都倾向于构建于现有的工具上,而不会从头写起。现在出现的编程语言,例如F#,以及Java领域的
等等,它们都是基于现有框架构建的,每次从头开始的代价实在太高。 在Anders眼中,
如今影响力较大的趋势主要有三种(如下图),它们分别是“
”(包括“
”及“
”)、过去的五年非常火热的“
”(其最重要的方面便是“元编程”能力)以及多核环境下的“并发编程。
此外随着语言的发展,原本常用的“面向对象”语言,“动态语言”或是“函数式”等边界也变得越来越模糊,例如各
种主要的编程语言都受到函数式语言的影响。
因此,“多范式”程序设计语言也是一个愈发明显的趋势。 声明式编程与DSL 目前常见的编程语言大都是命令式(Imperative)的,例如C#,Java或是C++等等。这些语言的特征在于,代码里不仅表现了“做什么(What)”,而更多表现出“如何(How)完成工作”这样的实现细节,例如for循环,i += 1等等,甚至这部分细节会掩盖了我们的“最终目标”。在Anders看来,命令式编程通常会让代码变得十分冗余,更重要的是由于它提供了过于具体的指令,这样执行代码的基础设施(如CLR或JVM)没有太多发挥空间,只能老老实实地根据指令一步步的向目标前进。例如,并行执行程序会变得十分困难,因为像“执行目的”这样更高层次的信息已经丢失了。因此,
编程语言的趋势之一,便是能让代码包含更多的“What”,而不是“How”,这样执行环境便可以更加聪明地去适应当前的执行要求。 关于声明式的编程风格,Anders主要提出了两个方面,第一个方面是
DSL(Domai Specific Language,领域特定语言)。DSL不是什么新鲜的玩意儿,我们平时经常接触的SQL,CSS,正则表达式等等都属于DSL。
有的DSL可能更加专注于一个方面,例如
等等。
这些语言的目标都是特定的领域,与之相对的则是
(General Purpose Programming Language,通用目的编程语言)。
将DSL分为外部DSL及内部DSL两种。外部DSL有自己的特定语法、解析器和词法分析器等等,它们往往是一种小型的编程语言,甚至不会像GPPL那样需要源文件。与之相对的则是内部DSL。内部DSL其实更像是种别称,它代表一类特别API及使用模式。 XSLT,SQL等等都可以算作是外部DSL。外部DSL一般会直接针对特定的领域设计,而不考虑其他方面。
曾经说过:每个配置文件最终都会变成一门编程语言。一开始您可能只会用它表示一点点东西,慢慢地您便会想要一些规则,而这些规则则变成了表达式,后来您可能还会定义变量,进行条件判断等等,而最终它就变成了一种奇怪的编程语言,
这样的情况屡见不鲜。现在有一些公司也在关注DSL的开发。例如以前在微软工作的
提出了
的概念,还有
公司提供的一个叫做
的产品。最近微软也提出了自己的
项目,而在Ecli e世界里也有
,所以其实如今在这方面也有不少人在尝试。由于外部DSL的独立性,在某些情况下也会出现特定的工具,辅助领域专家或是开发人员本身编写DSL代码。
还有一些DSL会以XML方言的形式提出,利用XML方言的好处在于有不少现成的工具可用,这样可以更快地定义自己的语法。 而
内部DSL,正像之前提到的那样,它往往只是代表了一系列特别的API及使用模式,例如LINQ查询语句
及Ruby o Rails中的Active Record声明代码等等。内部DSL可以使用一系列API来“伪装”成一种DSL,它往往会利用一些“流畅化”的技巧,例如像jQuery那样把一些方法通过“点”连接起来,而另一些也会利用元编程的方式。内部DSL还有一些优势,例如可以访问语言中的代码或变量,以及利用代码补全,重构等母语言的所有特性。 DSL的可读性往往很高。
例如,要筛选出单价大于20的产品,并对所属种类进行分组,并降序地列出每组的分类名称及产品数量。如果是用命令式的编程方式,则可能是这样的:
Dictionary< tring, Grouping> grou = ew Dictionary< tring, Grouping() foreach (Product i roducts) { if (p.UnitPrice gt;= 20) { if (!grou .Contai Key(p.CategoryName)) { Grouping r = ew Grouping() r.CategoryName = .CategoryName r.ProductCount = 0 grou [p.CategoryName] = r } grou [p.CategoryName].ProductCount++ } } ListGrouping> result = ew ListGrouping(grou .Values) result.Sort(delegate(Grouping x, Grouping y) { retur x.ProductCount gt y.ProductCount ? -1 : x.ProductCount lt y.ProductCount ? 1 : 0 }) 显然这些代码编写起来需要一点时间,且很难直接看出它的真实目的,换言之“What”几乎完全被“How”所代替了。这样,一个新的程序员必须花费一定时间才能理解这段代码的目的。但如果使用LINQ,代码便可以改写成:
var result = roduct .Where( => .UnitPrice gt;= 20) .GroupBy( => .CategoryName) .OrderByDescending(g => g.Count()) .Select(g => ew { CategoryName = g.Key, ProductCount = g.Count() }) 这段代码更加关注的是“What”而不是“How”,它不会明确地给出过滤的“操作方式”,也没有涉及到创建字典这样的细节。这段代码还可以利用C# 3.0中内置的DSL,即LINQ查询语句来改写:
var result = from i roduct where .UnitPrice gt;= 20 grou y .CategoryName into g orderby g.Count() descending elect ew { CategoryName = g.Key, ProductCount = g.Count() } 编译器会简单地将LINQ差距语句转化为前一种形式。这段代码只是表现出最终的目的,而不是明确指定做事的方式,这样便可以很容易地并行执行这段代码,如使用PINQ则几乎不需要做出任何修改。 函数式编程 Anders提出的另一个重要的声明式编程方式便是函数式编程。函数式编程历史悠久,它几乎和编程语言本身同时诞生,如当年的
便是个函数式编程语言。除了LISP以外还有其他许多函数式编程语言,如
等等。关于函数式编程在学术界已经有过许多研究了,大约在5到10年前许多人开始吸收和整理这些研究内容,想要把它们融入更为通用的编程语言。
现在的编程语言,如C#、Python、Ruby、
等等,它们都受到了函数式编程语言的影响。
使用命令式编程语言写程序时,我们经常会编写如x = x + 1这样的语句,此时我们大量依赖的是可变状态,或者说是“变量”,它们的值可以随程序运行而改变。
可变状态非常强大,但随之而来的便是被称为“副作用”的问题,例如一个无需参数的void方法,它会根据调用次数或是在哪个线程上进行调用对程序产生影响,?
它会改变程序内部的状态,从而影响之后的运行效果。而在函数式编程中则不会出现这个情况,因为所有的状态都是不可变的。事实上对函数式编程的讨论更像是数学、公式,而不是程序语句,如x = x + 1对于数学家来说,似乎只是个永不为真的表达式而已。 函数式编程十分容易并行,因为它在运行时不会修改任何状态,因此无论多少线程在运行时都可以观察到正确的结果。
假如两个函数完全无关,那么它们是并行还是顺序地执行便没有什么区别了。当然,现实中的程序一定是有副作用的,例如向屏幕输出内容,向Socket传输数据等等,
因此真实世界中的函数式编程往往都会考虑如何将有副作用的代码分离出来。函数式编程默认是不可变的,开发人员必须做些额外的事情才能使用可变状态或是危险的副作用
,与之相反,如C#或Java必须使用readonly或是final来做到这一点。此时,使用函数式编程语言时的思维观念便会有所不同了。 F#是微软随VS 2010推出的一门函数式编程语言,它基于
的核心部分,因此是一门强类型编程语言,并支持一些如模式匹配,类型推断等现代函数式编程语言的特性。在此之上,F#又增加了异步工作流,度量单位等较为前沿的语言功能。在F#中如果要计算一个列表所有元素之和,也可以使用命令式的风格来编写代码:
let umSquaresI l = let mutable acc = 0 for x i l do acc lt;- acc + qr x acc acc只不过,F#中的一切默认都是不可变的,开发人员需要使用mutable关键字来声明一个可变的状态。事实上,在F#中更典型做法是:
let rec umSquaresF l = match l with | [] -> 0 | head :: tail -> qr head + umSquaresF tail 在数学里我们经常使用递归,把一个公式***成几个变化的形式,以此进行递归的定义。纯函数式的代码其“数学性”较强,如果您分析上面这段代码,会发现它几乎就是标准的数学定义。在编程时我们也使用递归的做法,编译器会设法帮我们转化成尾调用或是循环语句。 动态语言与元编程 动态语言不会严格区分“编译时”和“运行时”。对于一些静态编程语言(如C#),往往是先进行编译,此时可能会得到一些编译期错误,而对于动态语言来说这两个阶段便混合在一起了。常见的动态语言有JavaScript,Python,Ruby,LISP等等。动态语言和静态语言各有一些优势,这也是两个阵营争论多年的内容。
不过Anders认为它们各自都有十分重要的优点,而未来不属于其中任何一方。他表示,从编程语言发展过程中可以观察到两种特点正在合并的趋势,未来应该属于两者的杂交产物。 许多人认定动态语言执行起来很慢,也没有类型安全等等。例如有这样一段代码:
var a = 0, = 10 for (var i = 0 i lt i++) { a += i } 这段代码在C#和JavaScript中都是合法的,但是它们的处理方式大相径庭。在C#中,编译器可以推断出a和n都是32位整数,则for循环和相加操作都只是简单的CPU指令,自然效率很高。但是对于JavaScript等动态类型语言来说,var只代表了“一个值”,它可以是任意类型,因此这里其实还会包含一个“类型标记”,表明它在运行时是什么类型的对象。所以两者的区别之一便是,表示同样的值在动态语言中会有一些额外的开销,在如今的CPU中,“空间”也意味着“速度”,所以较大的值便需要较长时间进行处理,这里便损失了一部分效率。此外JavaScript在计算a加i时,那么必须先查看两个变量中的类型标记,根据类型选择出合适的相加操作,
然后加载两个值,最后再进行加法操作,一旦越界了还要利用double。很明显在这里也会带来许多开销。
一般来说,动态语言是使用解释器来执行的,因此还有一些解释器需要的二进制码,把这些性能损失全部加起来以后,便会发现执行代码时需要10倍到100倍的性能开销。 不过近几年出现的一些动态虚拟机或引擎将此类情况改善了许多。如今大部分的JavaScript引擎使用了JIT编译器,于是便省下了解释器的开销,这样性能损失便会减小至3到10倍。
而在过去的两三年间,JIT编译器也变得越来越高效,浏览器中新一代的适应性JIT编译器,如[url=htt ://wiki.mozilla.org/JavaScript:TraceMonkey]TraceMonkey[/url],
,还有微软在IE 9中使用的
引擎。这种适应性的JIT编译器使用了一部分有趣的技术,如Inline Caching、Type Specialization、Hidde Cla es、Tracing等等,它们可以将开销降低至2到3倍的范围内,这种效率的提升可谓十分神奇。
在Anders看来,JavaScript引擎可能已经接近了性能优化的极限,我们在效率上可以提升的空间已经不多。不过他同样认为,如今JavaScript语言的性能已经足够快了,完全有能力作为Web客户端的统治性语言。 动态语言的关键之一便是“元编程”?,“元编程”实际上是“代码生成”的一种别称,在日常应用中开发人员其实经常依赖这种做法了。在某些场景下使用动态语言会比静态语言更加自然一些。例如在C#或Java里使用ORM时,一种传统做法是让代码生成器去观察数据库,并生成一大堆代码,然后再编译。而动态语言并没有编译期和执行期的区别,例如在Ruby o Rails中使用ActiveRecord便无须定义各式字段。 Anders谈到,他和他的团队也在努力改进静态语言的元编程能力,如他们正在实现的“编译器即服务(Compiler a a Service)”。传统的编译器是一个黑盒,一端输入代码,而另一端便会生成.NET程序集等数据,开发人员很难参与或理解它的工作。但是在很多时候,开发人员并不一定需要编译器来生成程序集,他们需要的是一些树状的表现形式,然后对它进行识别和重写。因此,开发人员可能会越来越需要一些开放编译器功能的API。这么做可以让静态类型语言获得许多有用的功能,包括元编程以及可操作的完整对象模型等等。 并发 Anders看来,多核革命的一个有趣之处在于,它会要求并发的思维方式有所改变。传统的并发思维,是在单个CPU上执行多个逻辑任务,使用旧有的分时方式或是时间片模型来执行多个任务。但是如今的并发场景则正好相反,是要将一个逻辑上的任务放在多个CPU上执行。
这改变了我们编写程序的方式,这意味着对于语言或是API来说,我们需要有办法来***任务,把它拆分成多个小任务后独立的执行,而传统的编程语言中并不关注这点。 使用目前的并发API来完成工作并不容易,比如Thread,ThreadPool,Monitor等等,开发人员很难走的太远。
不过在.NET 4.0中提供了一套强大的框架,即.NET并行扩展(Parallel Exte io ),
这是一种现代的并发模型,将逻辑上的任务并发与实际使用的的物理模型分离开来。以前的API都是直接处理线程等基础元素,不过利用.NET并行扩展中的任务并行库(Task Parallel Library),并行LINQ(Parallel LINQ)以及协调数据结构(Coordinatio Data Structures)让开发人员可以直接关注逻辑上的任务,而不必关心它们是如何运行的,或是使用了多少个线程和CPU等等。利用LINQ这样的DSL也有助于写出并行的代码,如果使用普通的for循环配合线程池来实现并行,则开发人员很容易在各种API里失去方向。 不过事实上,编写并行的代码依然很困难,尤其是要识别出可以并行的地方。
Anders认为很多时候还是需要编程语言来关注这方面的事情(如下图)。比如“隔离性(Isolation)”,即编译器如何发现这段代码是独立的,便可以将其安全地并发执行。某段代码创建了一个对象,在分享给其他人之前,我们对它的改变是安全的,但是一旦将其共享出去以后便完全不同了。因此理想中的类型系统应该可以跟踪到这样的共享,如
——这在学术界也有一些研究。编程语言也可以在函数的纯洁性(Purity)方面下功夫,如关注某个函数是否有副作用,有些时候编译器可以做这方面的检查,它可以禁止某些操作,以此保证我们写出无副作用的纯函数。另外便是不可变性(Immutability),目前的语言,如C#或VB,我们需要额外的工作才能写出不可变的代码。Anders认为合适的做法应该是在语言层面上更好的支持不可变性。这些都是在并发方面需要考虑的问题。 Anders还提到了他在思考并发语言特性时所遵循的原则:一个语言特性不应该针对某个特定的并发模型,而应该是一种通用的,可用于各种不同的并发场景的特性,就像隔离性、纯洁性及不可变性那样。语言拥有这样的特性之后,就可以用于构建各种不同的API,各种并发方式都可以利用到核心的语言特性。 总结 Anders认为,对于编程语言来说,现在出现了许多有趣的东西,
也是个令人激动的时刻。在过去,大约是1995到2005年,的确可以说是一个编程语言的黄金时期。当Java出现的时候,编程语言的门槛变得平坦了,一切都是Java,似乎其他编程语言都完蛋了,程序设计者也没什么可做的。不过大家又逐渐发现,其实这远没有结束。
现在回顾起来,会发现这段时间又出现了许多有趣的编程语言,这其实也代表了我们在编程领域上的进步。
(本文来自《程序员》杂志2010年08期)
( Thu, 9 Sep 2010 10:41:47 +0800 )
Description: 上学期我发过日志介绍了一个脚本程序,因为我上的《大学计算机文化二》课中学生上交的都是一个rar压缩包,里面有各种实验文件,包括实验报告,而最后我查看完内容后要将评分和评语写入实验报告,因此需要统一的把各自学生包中的实验报告抽取出来,集中批改。 通过上学期的批改实践,我发现了上个版本中的一些错误,并进行了bug修正,修正版本如下:
0)由于脚本只能找出doc文档,所有提示符里去掉了要求输入扩展名,最好用“*实验*”找所有文件名中包含实验两字的文档,不要加具体实验号,因为有些学生可能在这次课交上次课的实验报告。当然如果你能看懂这个脚本的话,自己修改成抽取其他类型文件也是容易的。
1)上一版本,压缩文件所在文件夹名,路径名和压缩文件名不能带有空格或在桌面,这一版本已修正。 2)由于脚本的内部运行机制,上一版本在压缩文件所在目录同时有其他doc文档时,会出错,这一版本提前将这些文件放进了创建doc子文件夹,然后解压出来的目标文档也在doc子文件夹里面。这样也带出了个程序的附带功能,就是能将本目录下的文档进行分类放入子目录,比如找出本文件夹下所有的名字中带“荷塘月色”的文档。 3)这一版本增加了一功能,在发现有学生的压缩包里没有目标文档时,会将该压缩包复制到程序创建的notfound子目录下,便于我们事后检查,这些学生为什么没交实验报告,还是命名不规范,便于告知这些学生。 4)文档最后增加了如下图的统计信息
要应对的是如下图的,恰好学生的实验练习文档名也带有“实验”两字的情况,比如上图的39个压缩文件里找到了71个目标文档显然是不对的。 5)上一版本没有递归查找很深的压缩包子目录里的目标文档,这一版本做了修正。 6)可能一个压缩包里学生交1个以上的重名目标文档,这次对这些文档自动做了重命名,比如第二个重复文档名带“(1)”表示。 程序已经上传到 下的“v 和vba脚本”目录下,双击v 脚本即可运行,也可以新建记事本,然后将下列源代码复制到文档中,选择另存,文件类型选择“所有文件”,文件名的扩展名为VBS。希望大家用的愉快,减轻工作负担,最后附上源码清单: filterstr=i utbox(请输入要解压的word文件,如 * 或者 *实验* 等,,*实验*)
if filterstr=" quot the WScript.Quit
filterstr=filterstr am quot;.doc
nofoundstr=
rarcount=0
doccount=0
Set WshShell = WScript.CreateObject(WScript.Shell)
rarpath=WshShell.Regread(HKLM\Software\Microsoft\Windows\CurrentVersion\Uni tall\Winrar archiver\Uni tallString)
le tr=I tr(lcase(rarpath),uni tall.exe)
rarpath=Left(rarpath,le tr-1) am quot;unrar.exe" rarpath=chr(34) am rarpath am chr(34) Set FSO = CreateObject(Scripting.FileSystemObject)
CurrentDirectory=WshShell.CurrentDirectory
Set myFolder=FSO.GetFolder(CurrentDirectory)
Set myfiles=myFolder.Files
myfilename=mid(wscript.scriptfullname,len(CurrentDirectory)+2)
If fso.FolderExists(CurrentDirectory am quot;\doc) Then fso.DeleteFolder (CurrentDirectory am quot;\doc)
fso.CreateFolder CurrentDirectory am quot;\doc
For Each myfile i myfiles if I tr(myfile.name,.doc)0 then OldName=CurrentDirectory am quot;\" am myfile.name if I tr(myfile.name,实验)0 then NewName = CurrentDirectory am quot;\doc\" am myfile.name else If ot fso.FolderExists(CurrentDirectory am quot;\otherdoc) Then fso.CreateFolder CurrentDirectory am quot;\otherdoc End If NewName = CurrentDirectory am quot;\otherdoc\" am myfile.name end if fso.movefile oldname,newname end if
newname=
oldname=
For Each myfile i myfiles if myfile.namemyfilename and i tr(myfile.name,.rar)0 then exestr=rarpath am quot e -o+ -or -r - quot am filterstr am quot quot quot quot am CurrentDirectory am quot;\" am myfile.name am quot quot quot quot; Wshshell.ru exestr,0,true Set ubmyfiles=myFolder.Files found=false For Each ubmyfile i ubmyfiles if I tr(submyfile,.doc) then OldName = CurrentDirectory am quot;\" am ubmyfile.name tem tr=left(myfile.name,len(myfile.name)-4) NewName = CurrentDirectory am quot;\doc\" am tem tr am quot;-" am ubmyfile.name fso.movefile OldName,newname found=true doccount=doccount+1 end if ext if found the rarcount=rarcount+1 if ot found the if ofoundstr=" quot then If fso.FolderExists(CurrentDirectory am quot;\notfound) Then fso.DeleteFolder (CurrentDirectory am quot;\notfound) End If fso.CreateFolder CurrentDirectory am quot;\notfound end if fso.copyfile CurrentDirectory am quot;\" am myfile.name,CurrentDirectory am quot;\notfound\" am myfile.name ofoundstr=nofoundstr am quot , quot am myfile.name end if et ubmyfiles=nothing end if
if ofoundstr< gt quot quot then msgbox ofoundstr am quot;中没有发现目标文档
set wshell=nothing
set fso=nothing
set myfolder=nothing
set myfiles=nothing
msgbox quot;从" am rarcount am quot;个压缩文件中找到了" am doccount am quot;个目标文档! ( Wed, 8 Sep 2010 14:44:37 +0800 )
Description: 转载下面《搜狐财经》上的这片文章,是因为我在思考这么一个问题:在计算机技术如此发达的今天,数据挖掘、异常检测、网络入侵检测技术比较成熟的今天,金融业的软件系统为什么还是停留在石器时代?对一个短时间内如此异常的金价波动视若无睹?这又让我想起了温州建设银行那个功能简陋的垃圾网银。是因为计算机技术不够么?还是因为金融业的不懂计算机?还是因为金融业竞争不够激烈?更多的停留在人际关系拉客户上而不是靠技术留客户上? 以此来提示大家,复合型人才的重要性,以及数据挖掘和数据分析技术的前途。。。 2010年8月31日,上海黄金交易所(以下简称金交所)出现了诡异的一幕。当天晚上21时11分,在金交所延期交易的Au(T+D)品种合约,价格由272.6元/克,一分钟内上涨至289.32元/克,在上一个交易日结算价格270.40元的基础上,每克上涨18.92元,涨幅7%,刚好冲击涨停。如果换算成美元/盎司,一分钟之内黄金价格暴涨约76.36美元/盎司。这次上涨持续时间约两分钟,21时13分价格恢复至273元。 今年8月,金交所刚刚完成个人客户从综合类会员向银行托管的过度程序。此前,金交所的综合类会员类似于证券公司,可以代理客户投资上海黄金交易所的黄金T+D业务。按规定,会员只能代理法人客户开户,而不能代理个人开户,于是一些会员用法人账户集中大量个人客户的方式来参与金交所的黄金T+D业务。这种方式下,客户保证金存在被挪用的风险,操作上也不规范,商业银行加入以后,起到了类似证券公司和期货公司的功能,个人客户都由银行来代理,给金交所带来了更多个人客户,市场交易更加活跃,手续费收入由银行与金交所分账,双方皆大欢喜。 就在这个看似皆大欢喜、共同发展、大获其利的阶段刚刚开始时,却出现了“831”上海黄金夜盘“乌龙”涨停事件。造成这起事件的原因是什么?是否应该有人为此次失误承担责任?在事件中利益受损的客户应如何维护自己的权益? “831”涨停是如何产生的? 我们可以站在交易机制角度,从技术上分析一下在这两分钟内到底发生了什么。 当天晚上中国黄金市场夜盘开盘前,外盘黄金出现了上涨,于是许多做多的投资者等着开盘后追涨,一些持有空单的投资者也准备开盘后买入平仓。此时做空的投资者显然不够多,开始的几个空单被顺利成交,价格继续上涨。此时,具备自动平仓功能的
交易系统,在捕捉到价格上涨后,将自己银行客户中已经触发平仓线的空单仓单拿出来,报了稍高一些的价格平仓;而报出去的更高的价格,又触发了自己银行系统内更多客户的平仓,于是这部分客户的仓单又被计算机调出来,报了更高的价格去市场上平仓;交投清淡的市场根本没有成交,于是更高的价格出现了,这又触发了更大量的客户的持仓平仓线,于是更大量的客户的持仓平仓线又被触发……形成了多米诺骨牌效应那样的迅速的价格大幅上涨和大量的仓单被拿出来平仓。 我们描述这个过程时需要花很多时间,但实际上,计算机只在瞬间就完成了这个过程,所以我们看到,AU(T+D)的价格瞬间就到了289.32元涨停板,巨量被平仓的买单被挂上了289.32元的价格,等待被平仓。 如果没有大单及时阻挡,如果没有金交所的涨停板限制,理论上这种交易机制在引爆空单自动平仓时,可以将价格自动推高到无穷大,可以打爆最后一张空单,而无论你的账户中有多少保证金。同样,如果这种自动化交易在下跌状态中被触发,导致的暴跌理论上可以将多单全部拿出来去市场平仓卖出,价格可以跌到一分钱。 过去,如果出现客户持仓方向错误而亏损的情况,原来的金交所会员单位由于实力所限,一般采用人工通知、手工操作的方式平仓。商业银行加入后,开发并采用了各类先进软件。其中,民生银行引进了带有国际上先进的自动平仓交易功能的软件。具备这类功能的软件,一般是单个投资机构因为内部风险控制需要所采用的,一旦到达风险设定的价格,就自动将所持仓单拿到市场上平仓,从风险控制的机制上看更严格,减少人为操作的痕迹,似乎非常科学。 如果采用这套系统的是一家小公司,最多也就是把自己玩死,不会牵扯别的投资者。但如果是大机构采用,就存在机构之间系统性连锁触发止损平仓交易,导致整个交易市场的崩溃性异常交易。事实上,这种软件即使在国外使用也非常有争议,因为它存在多米诺骨牌被推倒的连续性崩溃效应。 2010年5月6日,美国纽约交易所就出现了这样一次系统性的止损崩溃。事后调查证实,是一个机构的交易员在短时间内卖出了大量的股票,导致一些股票价格短时间迅速下跌,由此触发了其他一些机构的自动平仓交易机制,出现了连锁性的大量被计算机拿出来到股票市场抛售平仓,由于没有足够的买盘出现,市场其他参与者反应不及,冷酷无情的计算机就一个劲的抛售出去…… 显然,导致“831”事件的就是这种带有自动平仓交易机制的所谓“先进软件系统”,其内部暗藏的多米诺自我崩溃的系统缺陷,是导致这次大量银行客户所持空单被连锁性瞬间推高被平仓的根源。 谁应该为这次事件承担责任? 软件本身不是法律承担人,虽然祸首是软件缺陷,但责任只能由***了这套交易软件并导致这次事故发生的商业银行承担主要责任。从事件揭露的信息看,民生银行显然应该承担主要责任。 其他银行的软件系统没有这个自动交易机制,强行平仓需要手工操作,需要先***通知客户,要么补保证金,要么被平仓。手工操作需要时间,可能许多银行的风险控制员看到了这个令人吃惊的价格后,还没有反应过来,还没来得及打***通知客户,还在心理慌乱的情况下,两分钟后系统就恢复正常了,系统正常了就没必要平仓了,其他银行的众多客户被这个手工操作机制救了一命。 那么,金交所是否应该承担责任呢?从道理上讲应该承担次要责任,因为金交所对自身交易系统的缺陷应该是非常清楚的。金交所本身的交易量目前还是非常小,还处于发展阶段,没有很密集的报价单,所以这种软件一旦使用,容易造成金交所系统的极端异常交易。它不但会导致会员单位将自己所辖客户的仓单进行多米诺骨牌形式的推倒,甚至会连带其他会员单位的系统崩溃,引发其他会员单位也出现将客户仓单连锁性的强制平仓。如果其他会员单位也采用了这种交易软件,那整个系统的连锁性崩溃就决不是“831”事件中所看到的几千手这个数量级。 由于可能导致系统的崩溃性异常交易,所以金交所应该严格限制这种自动化交易软件的使用。但现在,有会员使用了这种如同定时炸弹般的软件,而金交所不察觉、不制止,显然应该承担连带责任。 从已经披露出的信息看,金交所说已经几次提醒民生银行这种系统的风险所在,需要重新修改风险架构。如果金交所能够提供证据证明它已经尽到了足够的义务,那么皮球就又踢回到民生银行一边。果真如此的话,这就不是一个简单的大意疏忽的责任了。 ( Wed, 8 Sep 2010 12:11:25 +0800 )
Description: 近日企业家出身的哈佛大学研究员
在TechCrunch发表文章“
”,揭示了硅谷的一个黑幕:对技术人员的年龄歧视。随后
有一位日本人也发表了
表示出自己对软件业的年龄歧视的看法。外刊IT评论对此文进行了翻译,现转载于此。
全文如下: 我打算给在Hacker News上的关于年龄歧视问题的讨论带来一个外国人的观点:在硅谷,可能有年龄歧视,但这里却不是最糟的。等你看了什么是真正的年龄歧视后,你才能对硅谷现在的形式有更深的认识。 我工作在美国旧金山湾区,是一个40多岁的日本程序员。下面的故事是跟我的一个在日本的伙伴多年的谈话中获得的。 在日本株式会社里,程序员(坦白的说,基本上是男的)在30多岁的时候要面临一个选择:要么追随“电梯”制度——员工的头衔每隔几年会自动升级一次,要么继续搞技术。如果你选择后者,就如同一个和尚宣誓做了苦行僧,会失去所有世俗的幸福。听起来有点戏剧性,但这正是人们每当谈论起老程序员时所处的心境:尊敬且同情。
如果一直留在这种晋升制度内,并且还想一直或有部分时间做编程,那是不可能的,制度不允许你这样。日本很多公司事实上明令禁止员工在晋升到某个头衔后还接触开发工具。我忘了那是一个什么样的职位级别。他们好像是使用排列组合算法来产生足够多的头衔提供员工使用。但通常,当一个员工成为“S.E.“后,就不再编码了。“S.E.“是”System Engineer“,系统工程师,但对较低等级的工程师也不保证都是这样。它只是表示一个做技术的员工从编程的岗位上毕业了。编程在日本被认为是一种很卑贱的工作。系统工程师制造各种系统,程序员是代劳敲代码的。为什么S.E.还要接触开发工具呢?他们需要的是PowerPoint,Excell 和 Word。所以,在33岁左右的时候你就要从Vi转向PowerPoint了。 这意味着在日本公司里最有经验的开发人员也只有35岁左右。换句话说,13年的实际编程经验是一个人的上限。大多数软件公司里都没有一个能让年轻软件开发者作为榜样的仍在编程的重量级人物。很明显,早在30多岁时数就退出编程会带来技术传承带来问题。实际上,并不只是技术传承问题:它阻碍了大师级人物的产生。 我怀疑这种文化是导致在日本株式会社里软件开发效率低下的主要原因。就拿会社里软件业的***跟其它领域比较,你能叫出一个能出口到国外的企业软件或个人软件的名字吗?软件业里的本田在哪里?游戏业另当别论,那是和硬件紧密相关的。实际上根本不存在软件出口。对于这样的一个技术强国不是太奇怪了吗? 日本的软件业并非整个都没有竞争力,只是在株式会社里这样。日本创造了另世界瞩目的开源软件。Ruby就是最明显的一个。KAME把IPV6带进来BSD。看上去日本的年轻程序员想要使Perl这种语言再次回到编程一线。所以,在这种强迫程序员退休的制度之外,日本还是能够创造优秀的软件的。我不得不得出结论,认为株式会社在软件业上存在内在的制度上的失败。文化上对老程序员的排斥是主要因素。 这些对于硅谷或更普遍的美国,又意味着什么呢?是的,薪水在40岁时就达到了顶峰,这固然不幸,但你至少是被社会接受的。(我个人在硅谷并没有遇到过多少年龄歧视。自我感觉,只要能过面试关,我能拿到任何专门提供给27岁小伙的工作,我很欣慰能工作在这样一个公道的地方。YC是个例外,而PG明确的在一篇文章里说明任何35岁以上的人都有同样的机会……) 可这有一个比老程序员的感受如何更大的问题。如果我的猜测正确——缺乏老的、深谋远虑的程序员会伤害到整个行业,那反过来会怎样?如果这些陈年的智慧不只是被勉强的接受,而是被全面的发掘开发呢?这是否会让硅谷更上一层楼?YC在从年轻才俊身上榨取最大价值的工作做的很出色。硅谷是否应该开启另外一个尘封的动力源呢?
( Wed, 8 Sep 2010 12:06:28 +0800 )
Description: Title: Silico Valley’ Dark Secret: It’ All About Age A interesting aradox i the technology world i that there i oth a hortage and a urplu of engineer i the United States. Talk to those working at any Silico Valley company, and they will tell you how hard it i to find qualified talent. But liste to the heart-wrenching torie of unemployed engineers, and you will realize that there are te of thousand who can’t get jo . What gives? The harsh reality i that i the tech world, companie refer to hire young, inexperienced, engineers. And engineering i a “u or out” rofe ion: you either move u the ladder or face unemployment. Thi i ot omething that tech executive ublicly admit, ecause they fear eing ued for age discrimination, ut everyone know that thi i the way thing are. Why would any company hire a computer rogrammer with the wrong kill for a alary of $150,000, whe it ca hire a fresh graduate—with o kills—for around $60,000? Eve if it end a month training the younger worker, the company i till far ahead. The young understand ew technologie etter tha the old do, and are like a clea late: they will rapidly lear the latest coding method and techniques, and they don’t carry any “technology aggage”. A well, the older worker likely ha a family and eed to leave y 6 m
, wherea the young ca ull all-nighters.At least, that’ how the thinking goe i the tech industry. I their ook Chi and Change, Profe or Clair Brow and Greg Linden, of the University of California, Berkeley, analyzed Bureau of Labor Statistic and ce u data for the emiconductor industry and found that alarie increased dramatically for engineer during their 30 ut that these increase lowed after the age of 40. At greater age till, alarie tarted dro ing, dependent o the level of education. After 50, the mea alary of engineer wa lower—by 17% for those with achelor degrees, and y 14% for those with master degree and PhDs—tha the alary of those younger tha 50. Curiously, Brow and Linde also found that alary increase for holder of ostgraduate degree were alway lower tha increase for those with achelor’ degree (
i other words, eve PhD degree didn’t rovide long-term jo rotection
). It’ ot much different i the oftware/internet industry. If anything, thing i these fast-moving industrie are much worse for older workers. For tech tartu , it usually oil dow to cost: most can’t eve afford to ay $60K alaries, o they look for motivated, young oftware developer who will accept minimum wage i retur for equity ownershi and the o ortunity to uild their careers. Companie like Zoho ca afford to ay market alaries, ut can’t find the experienced worker they eed. I 2006, Zoho’ CEO, Sridhar Vembu, initiated a to hire 17-year-old directly out of high chool. He found that withi two years, the work erformance of these recruit wa indistinguishable from that of their college-educated eers. Some ended u ecoming uperstar oftware developers. Companie uch a Microsoft ay that they try to maintai a alance ut that it i ’t easy. A old friend, David Vaskevitch, who wa Senior Vice-President and Chief Technical Officer at Microsoft, told me i 2008 that he elieve that younger worker have more energy and are ometime more creative. But there i a lot they don’t know and can’t know until they gai experience. So Microsoft aggre ively recruit for fresh talent o university campuse and for highly experienced engineer from withi the industry, one ot at the expe e of the other. David acknowledged that the vast majority of ew Microsoft employee are young, ut aid that thi i o ecause older worker tend to go into more enior jo and there are fewer of those ositio to egi with. It wa all about hiring the est and rightest, he aid age and ationality are ot important.
So whether we like it or ot, it’ a tough industry. I know that ome techie will take offe e at what I have to ay, ut here i my advice to those whose hair i egi ing to grey:
Move u the ladder into management, architecture, or desig witch to ale or roduct management or jum hi and ecome a entrepreneur ( i the tartu world). Build kill that are more valuable to your company, and take ositio that can’t e filled y entry-level workers. If you’re going to tay i rogramming, realize that the deck i tacked agai t you. Eve though you may e highly experienced and wise, employer aren’t willing or able to ay a experienced worker twice or thrice what a entry-level worker ear . Save a much a you ca whe you’re i your 30 and 40 and e repared to ear le a you gai experience. Kee your kill current. Thi mea keeping up-to-date with the latest trend i computing, rogramming techniques, and languages, and adapting to change. To e writing code for a living whe you’re 50, you will eed to e a rock-star developer and e able to out-code the ew kid o the lock. My advice to manager i to co ider the value of the experience that the techie ring. With age frequently come wisdom and abilitie to follow direction, mentor, and lead. Older worker also tend to e more ragmatic and loyal, and to know the importance of eing team layers. And ego and arrogance usually fade with age
. During my tech days, I hired everal rogrammer who were over 50. They were the teadiest erformer and tayed with me through the most difficult times.Finally, I don’t know of any university, including the one I teach at, that tell it engineering tudent what to expect i the long term or how to manage their technical careers. Perha it i time to let tudent know what lie ahead. Editor’ ote: Guest writer i a entrepreneur turned academic. He i a Visiting Scholar at the School of Informatio at UC-Berkeley, Senior Research A ociate at Harvard Law School and Director of Research at the Center for Entrepreneurshi and Research Commercializatio at Duke University. You ca follow him o Twitter at and find hi research at . ( Tue, 7 Sep 2010 20:20:59 +0800 )
Description: 程序需要不断的测试,今天一下下来经过一些同事的测试,发现了一些bug,也进行了一定的修改,到晚上,教案框架生成器已经有了4.0版。 各版本请在 的VBA和VBS目录下下载,各个版本内都有修正说明,提示修改了哪些bug。最终我来讲一下4.0版,目前这个版本一般用用应该没有问题了。 首先该版本增加了一个最重要的功能,就是1.0版问题最大的没办法有特别不一样的周,没办法处理补课与放假。下面我们来看看4.0版是如何解决这一问题的,针对我的另一门课“c#程序设计”(该课具体进度表见下载压缩包),第一周只有理论课,没有实验课。第六周实验课暂停,第七周周三补一次理论课,其他时间每周4学时,2学时理论在周一,2学时实验分2批,在周一和周四。其图如下: 注意要求放假周和补课周在“授课章节”最后一行必须注明,其前必须有*号,其后可以有放假或补课的理由。 这一版本会多提示一个如下的“放假和补课时间表达式框”, 这个表达式写法如下,依次说明第几周是特别周,然后该周具体上课是哪几天,两者之间用冒号分隔。实验课后依然用星号,不同的课次之间用逗号分隔,特别周可以有无限个。针对特别周,程序将不会采用先前的计算普通周时间的方式计算特别周。 上述表达式说明:第一周只有周一1次理论。第六周也只有周一1次理论,第七周,周1理论,周1实验,周三补课一次理论,周四实验。刚好与我示例中的进度表规范写法一致。这样就完成了补课时间的处理。注意这里只所以写“第一周”,是因为进度表中的第一列是“第一周”,如果该列你写成了“1”,则该输入框中也要用“1”代替“第一周”。 最后这个版本还增加了大纲视图,生成教案后,可以通过文档结构图,如下图,很方便的选择每次教案,进行后期修改。 好的,希望大家用的愉快,最后附上v 源代码清单: Dim ja, jdb, h, worda , fso, tempf, trpath, z, dz, kx, zysy, tbz, tbzts(), tbzxb, kzj kname = I utBox(输入进度表文件名, , quot;教学进度表) rqbd = Year(Date) am quot;年" am Month(Date) am quot;月" am Day(Date) am quot;日;1,1*,4* rqbd = I utBox(请输入日期生成表达式:, , rqbds) z = Split(rqbds, quot quot;) rq = z(0) tbzbd = I utBox(请输入放假或补课的周数及上课时间表达式(如果全无则为空,实验课加*号):, , quot;第一周:1;第六周:1;第七周:1,1*,3,4*) If tbzbd lt gt quot quot Then tbz = Split(tbzbds, quot quot;) ReDim tbzts(UBound(tbz)) For m = LBound(tbz) To UBound(tbz) tem = tbz(m) = InStr(temp, quot;:) tbzts(m) = Mid(temp, + 1) tbz(m) = Left(temp, - 1) Next End If Set wshshell = CreateObject(WScript.Shell) trpath = wshshell.CurrentDirectory Set worda = CreateObject(Word.A licatio quot;) Set fso = CreateObject(Scripting.FileSystemObject) Set jd = worda .documents.Open(strpath am quot;\" am kname am quot;.doc) Set ja = worda .documents.Add h = 1 i = 1 Do If InStr(jdb.Tables(1).cell(i, 1).Range.Text, quot;周次) lt gt 0 The i = i + 2 For k = 1 To UBound(sz) tbzflag = False For x = LBound(tbz) To UBound(tbz) If InStr(jdb.Tables(1).cell(i, 1).Range.Text, tbz(x)) lt gt 0 Then tbzflag = True tbzx = x End If Next If tbzflag Then dz = Split(tbzts(tbzxb), quot;,) kzjx = 0 kzjx = InStr(jdb.Tables(1).cell(i, 3).Range.Text, quot;*放假) kzjx = InStr(jdb.Tables(1).cell(i, 3).Range.Text, quot;*补课) If kzjx lt gt 0 Then kzj = Left(jdb.Tables(1).cell(i, 3).Range.Text, kzjx - 1) Else kzj = Left(jdb.Tables(1).cell(i, 3).Range.Text, Len(jdb.Tables(1).cell(i, 3).Range.Text) - 2) End If Else dz = Split(sz(k), quot;,) kzj = Left(jdb.Tables(1).cell(i, 3).Range.Text, Len(jdb.Tables(1).cell(i, 3).Range.Text) - 2) End If If (InStr(sz(k), quot;*) lt gt 0 And tbzflag = False) Or (InStr(tbzts(tbzxb), quot;*) lt gt 0 And tbzflag = True) Then zysy = True Else zysy = False End If rqstart = rq For j = 0 To UBound(dz) If InStr(dz(j), quot;*) lt gt 0 Then dz(j) = Left(dz(j), Len(dz(j)) - 1) kx = quot;实验 Else kx = quot;理论 End If rq = DateAdd(d, CDate(rqstart), dz(j)) rq = Year(rq) am quot;年" am Month(rq) am quot;月" am Day(rq) am quot;日 Call genoneja(i, rq, kx) Next rq = DateAdd(d, CDate(rqstart), 7) Erase dz i = i + 1 If Len(jdb.Tables(1).cell(i, 1).Range.Text) lt;= 2 The Exit For Next Loo Until Len(jdb.Tables(1).cell(i, 1).Range.Text) lt;= 2 ja.SaveA trpath am quot;\教案.doc ja.Close jdb.Close worda .Quit Set fso = Nothing Set ja = Nothing Set jd = Nothing Set worda = Nothing Set wshshell = Nothing MsgBox quot;完工啦 Functio trimstr(str)
do while (right(str,1)=chr(13)) or (right(str,1)=chr(10))
str=left(str,len(str)-1)
do while (left(str,1)=chr(13)) or (left(str,1)=chr(10))
str=right(str,len(str)-1)
trimstr=str
end Function Su genoneja(i, rq, kx) fso.copyfile trpath am quot;\教案模板.doc, trpath am quot;\temp.doc Set tempf = worda .documents.Open(strpath am quot;\temp.doc) tempf.Activate worda .ActiveWindow.Selection.HomeKey 6, 0 With worda .ActiveWindow.Selection .Find.Execute quot;授课日期 If .Find.Found = True Then .MoveEndUntil quot;日 .MoveRight 2, 1, 1 .Text = quot;授课日期: quot am CStr(rq) End If End With worda .ActiveWindow.Selection.HomeKey 6, 0 worda .ActiveWindow.Selection.Find.Execute quot;《教案编号》 worda .ActiveWindow.Selection.Text = h h = h + 1 worda .ActiveWindow.Selection.HomeKey 6, 0 worda .ActiveWindow.Selection.Find.Execute quot;《课型》 kx=trimstr(kx) worda .ActiveWindow.Selection.Text = kx worda .ActiveWindow.Selection.HomeKey 6, 0 jxf = Left(jdb.Tables(1).cell(i, 6).Range.Text, Len(jdb.Tables(1).cell(i, 6).Range.Text) - 2) worda .ActiveWindow.Selection.Find.Execute quot;《教学方式》 If zysy = True Then x = InStr(jxfs, quot;实验) If kx = quot;理论" Then worda .ActiveWindow.Selection.Text = trimstr(Left(jxfs, x - 1)) Else worda .ActiveWindow.Selection.Text = trimstr(Mid(jxfs, CInt(xb), Len(jxfs) - 2)) End If Else worda .ActiveWindow.Selection.Text = trimstr(jxfs) End If worda .ActiveWindow.Selection.HomeKey 6, 0 worda .ActiveWindow.Selection.Find.Execute quot;《授课章节》 If zysy = True Then x = InStr(skzj, quot;实验) If kx = quot;理论" Then worda .ActiveWindow.Selection.Text = trimstr(Left(skzj, x - 1)) Else worda .ActiveWindow.Selection.Text = trimstr(Mid(skzj, xb)) End If Else worda .ActiveWindow.Selection.Text = trimstr(skzj) End If If kx = quot;实验" Then jxmd = quot quot;: jxznd = quot quot;: zybz = quot quot; Else jxmd = Left(jdb.Tables(1).cell(i, 4).Range.Text, Len(jdb.Tables(1).cell(i, 4).Range.Text) - 2) jxznd = Left(jdb.Tables(1).cell(i, 5).Range.Text, Len(jdb.Tables(1).cell(i, 5).Range.Text) - 2) zybz = Left(jdb.Tables(1).cell(i, 7).Range.Text, Len(jdb.Tables(1).cell(i, 7).Range.Text) - 2) End If worda .ActiveWindow.Selection.HomeKey 6, 0 worda .ActiveWindow.Selection.Find.Execute quot;《教学目的》 worda .ActiveWindow.Selection.Text = trimstr(jxmd) worda .ActiveWindow.Selection.HomeKey 6, 0 worda .ActiveWindow.Selection.Find.Execute quot;《教学重点与难点》 worda .ActiveWindow.Selection.Text = trimstr(jxznd) worda .ActiveWindow.Selection.HomeKey 6, 0 worda .ActiveWindow.Selection.Find.Execute quot;《作业布置》 worda .ActiveWindow.Selection.Text = trimstr(zybz) tempf.Save tempf.Close ja.Activate worda .ActiveWindow.Selection.EndKey 6, 0 worda .ActiveWindow.Selection.I ertFile trpath am quot;\temp.doc worda .ActiveWindow.Selection.I ertBreak 7 fso.deletefile (strpath am quot;\temp.doc)
End Sub ( Tue, 7 Sep 2010 09:30:05 +0800 )
Description:
教案框架生成器1.0版,请点击 最近我们要写教案,手头有了教学进度表,如下图:
又有了教案模板,如下图: 那么我们最终要为我们的每次课生成一个教案。经过几天的拷贝剪切,我承认我老了,在几个文档切换时经常看花眼出错。细细观察,我们会发现教案中的很多内容其实进度表中已经有了,那么能不能用我日志中以前提过的VBS和VBA脚本打造零技术门槛的傻瓜型教案框架生成方案呢?让计算机帮我们处理大部分重复性劳动,而我们可以将精力集中到具有创造性的“教学内容与教学组织设计”上来? ***是肯定的,大家可以点击页面最上面链接,找到“VBS和VBA脚本”的框架生成器1.0版,解压后,点击名字为“gen“的VBS文件,脚本就能根据另两个文档生成教案框架,注意弹出对话框在示例情况下,可以均接受默认值。 如果你对网上程序不放心,当然你也可以在计算机notepad记事本上,拷贝入下列代码: Dim ja, jdb, h, worda , fso, tempf, trpath, z, dz, kx, zysy kname = I utBox(输入进度表文件名, , quot;教学进度表) rqbd = Year(Date) am quot;年" am Month(Date) am quot;月" am Day(Date) am quot;日;1;1,4* rqbd = I utBox(请输入日期生成表达式:, , rqbds) z = Split(rqbds, quot quot;) rq = z(0) Set wshshell = CreateObject(WScript.Shell) trpath = wshshell.CurrentDirectory Set worda = CreateObject(Word.A licatio quot;) Set fso = CreateObject(Scripting.FileSystemObject) Set jd = worda .documents.Open(strpath am quot;\" am kname am quot;.doc) Set ja = worda .documents.Add h = 1 i = 1 Do If InStr(jdb.Tables(1).cell(i, 1).Range.Text, quot;周次) lt gt 0 The i = i + 2 For k = 1 To UBound(sz) dz = Split(sz(k), quot;,) If InStr(sz(k), quot;*) lt gt 0 Then zysy = True Else zysy = False End If rqstart = rq For j = 0 To UBound(dz) If InStr(dz(j), quot;*) lt gt 0 Then dz(j) = Left(dz(j), Len(dz(j)) - 1) kx = quot;实验 Else kx = quot;理论 End If rq = DateAdd(d, CDate(rqstart), dz(j)) rq = Year(rq) am quot;年" am Month(rq) am quot;月" am Day(rq) am quot;日 Call genoneja(i, rq, kx) Next rq = DateAdd(d, CDate(rqstart), 7) Erase dz i = i + 1 Next Loo Until Len(jdb.Tables(1).cell(i, 1).Range.Text) lt;= 2 ja.SaveA trpath am quot;\教案.doc ja.Close jdb.Close worda .Quit Set fso = Nothing Set ja = Nothing Set jd = Nothing Set worda = Nothing Set wshshell = Nothing MsgBox quot;完工啦 Su genoneja(i, rq, kx) fso.copyfile trpath am quot;\教案模板.doc, trpath am quot;\temp.doc Set tempf = worda .documents.Open(strpath am quot;\temp.doc) tempf.Activate worda .ActiveWindow.Selection.HomeKey 6, 0 With worda .ActiveWindow.Selection .Find.Execute quot;授课日期 If .Find.Found = True Then .MoveEndUntil quot;日 .MoveRight 2, 1, 1 .Text = quot;授课日期: quot am CStr(rq) End If End With worda .ActiveWindow.Selection.HomeKey 6, 0 worda .ActiveWindow.Selection.Find.Execute quot;《教案编号》 worda .ActiveWindow.Selection.Text = h h = h + 1 worda .ActiveWindow.Selection.HomeKey 6, 0 worda .ActiveWindow.Selection.Find.Execute quot;《课型》 worda .ActiveWindow.Selection.Text = kx worda .ActiveWindow.Selection.HomeKey 6, 0 jxf = Left(jdb.Tables(1).cell(i, 6).Range.Text, Len(jdb.Tables(1).cell(i, 6).Range.Text) - 2) worda .ActiveWindow.Selection.Find.Execute quot;《教学方式》 If zysy = True Then x = InStr(jxfs, quot;实验) If kx = quot;理论" Then worda .ActiveWindow.Selection.Text = Left(jxfs, x - 1) Else worda .ActiveWindow.Selection.Text = Mid(jxfs, CInt(xb), Len(jxfs) - 2) End If Else worda .ActiveWindow.Selection.Text = jxfs End If worda .ActiveWindow.Selection.HomeKey 6, 0 kzj = Left(jdb.Tables(1).cell(i, 3).Range.Text, Len(jdb.Tables(1).cell(i, 3).Range.Text) - 2) worda .ActiveWindow.Selection.Find.Execute quot;《授课章节》 If zysy = True Then x = InStr(skzj, quot;实验) If kx = quot;理论" Then worda .ActiveWindow.Selection.Text = Left(skzj, x - 1) Else worda .ActiveWindow.Selection.Text = Mid(skzj, xb) End If Else worda .ActiveWindow.Selection.Text = kzj End If worda .ActiveWindow.Selection.HomeKey 6, 0 jxmd = Left(jdb.Tables(1).cell(i, 4).Range.Text, Len(jdb.Tables(1).cell(i, 4).Range.Text) - 2) worda .ActiveWindow.Selection.Find.Execute quot;《教学目的》 worda .ActiveWindow.Selection.Text = jxmd worda .ActiveWindow.Selection.HomeKey 6, 0 jxznd = Left(jdb.Tables(1).cell(i, 5).Range.Text, Len(jdb.Tables(1).cell(i, 5).Range.Text) - 2) worda .ActiveWindow.Selection.Find.Execute quot;《教学重点与难点》 worda .ActiveWindow.Selection.Text = jxznd worda .ActiveWindow.Selection.HomeKey 6, 0 zybz = Left(jdb.Tables(1).cell(i, 7).Range.Text, Len(jdb.Tables(1).cell(i, 7).Range.Text) - 2) worda .ActiveWindow.Selection.Find.Execute quot;《作业布置》 worda .ActiveWindow.Selection.Text = zybz tempf.Save tempf.Close ja.Activate worda .ActiveWindow.Selection.EndKey 6, 0 worda .ActiveWindow.Selection.I ertFile trpath am quot;\temp.doc worda .ActiveWindow.Selection.I ertBreak 7 fso.deletefile (strpath am quot;\temp.doc)
End Sub 完成后点击保存,选择类型为所有文件,输入带v 扩展名的文件名,保存后就有了生成程序。 有了程序,以及”教案模板“那个word文件后,我们还要按规定格式制作”教学进度表“,毕竟计算机不如人聪明,规范是不可避免的,如下图的一个示例进度表: 这是一个典型计算机老师的单双周课程,单周理论1次课,双周加一次实验。对理论课的进度表没有要求,关键是带实验的周,要求在”授课章节“的最后一定要有实验名,记得要带“实验”这几个字,程序靠这个判断去剪切字符串,分出理论章节和实验标题。然后授课方式最后一行必须是“实验操作”。还有要注意进度表最后一周后面要多一行空行,程序靠这个判断教案生成结束。好了,有了规定的教学进度表,我们在看看程序运行时需要输入什么? 弹出的第一个对话框没问题,输入进度表文件名,如果是示例文件情况,则可以接受提供的默认值。关键是
如图的第二个对话框:
这里涉及到一个教案中日期生成表达式的概念,语法如下: 假期最后一个周日日期;单周周几的课,...[;双周周几的课,....]
如上图的例子,因为这学期假期最后结束是9月5号,用分号分隔第一项参数;第二项是单周的哪几天上课,可以通过逗号分隔多次重复;比如如图的1表示只有周1上课。在计算机书本中,方括号代表参数可选,这里也一样,如果你是每周都一样课时的,就不需要输入第二分号及以后内容。上图这里是表示双周的课是周1和周4,两天之间用逗号分隔,注意周四那天后面的*号表示该次课是实验课,所以程序会自动*号将该周进度表“授课章节”最后一行生成实验教案,教课类型什么的都不一样的,所以进度表要按规范写。 下面在来一个例子,练练日期表达式,我的另一门课: 典型的这种每周4学时,一次理论一次实验的课,日期表达式写法如下: 2010年9月5日;2,2*,4* 这里有两点注意,第一是日期表达式中的分号和逗号这种分隔符必须关闭中文输入法输入,即在英文方式下,否则程序无法辨别。第二是2,2*,4*表示,周二一次理论课,由于实验分批,所以周2同时上一批实验,周4上另一批实验。日期表达式输入不正确将导致教案时间和教案编号不正确。 好了,输入好了表达式,确定后就可以等待程序生成教案了,过程中屏幕会闪烁并有临时文件生成,最后会显示“完工了”的对话框。当然,目前程序还是1.0版,没有处理进度表内有节日放假和特别周的情况,比如有些课只有第一周有一次理论课,因为实验室还没准备好,第二周又开始同时上实验了。也就是说为了能生成正确的日期,必须保证每周一样,或者单双周一样。这里只是想起到抛砖引玉的编程技术交流效果,大家可以自己尝试开发2.0版,解决这些问题,或者说这只是个框架生成器,大家还需要继续修改,生成自己满意的教案。。。。 好了,这次我以现实工作为例,讲解怎样利用VBS和VBA简化我们的工作强度,把重复性的CTRL+CV和日期加减操作交给计算机,而我们投身于根据创造力的活动,比如教学组织设计章节,这才是对我们成长更有利的环节!所以当我们在用鼠标键盘不断复制粘贴时,一定要先想想,能不能用编程技术简化一下工作,顺便共享出来,造福千万人。。。 ( Sun, 5 Sep 2010 10:31:16 +0800 )
Description: 所有获得大成就的人,都经过了一条必经之路,那就是从自愿自觉走向坚忍不拔艰苦卓绝的努力,最后才能够达到一个极高的境界和成就…… 也许只有当你们被自己的努力感动得泪流满面时,你们的生命才能叫作美丽的生命…… 我们做事情常常会有两种状态,一种是自愿自觉去做,另一种是尽管艰难却不得不去做
,坚忍不拔地去做。肚子饿了我们会去吃饭,困了累了我们会去睡觉,快乐的地方只要有机会我们会去寻找,比如电影院、游乐场或名胜地。这些都是自愿的事情,人性所趋的事情,可能每一个人都不会例外。但如果只是吃喝玩乐,我们会逐渐失去活力,甚至体会不到生命的美丽。
生命的美丽来自进步和成就,只有进步和成就才能使我们感到生命存在的意义。
人类是进步和成就的动物,进步和成就包括经验的积累、精神的培养、学识的增加、智慧的获得、人格的塑造等,当然也包括世俗的财富、名声和地位的获得。但所有这一切并不是天生带来的,都需要后天的努力才能获得的,而努力在大部分情况下是违反人性趋向懒散的特性的,因此是面对现实的一种不得不的行为。 很有意思的是,我们常常会发现人与人之间的不同。比如
我们常常发现有的人好像天生就有获得进步和成就的能力。我们不难发现周围的有些人,能够把学习本身当作一种乐趣。我小时候就吃惊于班内的一些同学,能够日日夜夜学习而不知疲倦,乐在其中。这里面不乏因为老师的表扬而强化了他们的学习积极性
,但也可以反过来说,正是因为他们乐在其中地学习所以成绩优秀所以受到了老师的表扬。人确实天生有不同的爱好,因此逐渐向不同的方向发展,正所谓性相近、习相远。比如有的人喜欢语文,有的人喜欢数学,有的人喜欢游泳,有的人喜欢下棋,各种不同的爱好使
人们自愿自觉地向自己爱好的方向努力,最后常常能够取得成就,这就是俗话所说的“兴趣是最好的老师”。
所以一个人找出自己的兴趣所在,并且自愿自觉地去做就更加容易取得成就。 但如果到此为止,事情就太简单了,大家只要去寻找自己感兴趣的事情做就行了。但现实并不是这样的。
一个人去做自己感兴趣的事情,并不一定就是能够取得成就的事情。首先感兴趣的事情有的时候并不是好的事情,比如说你一天到晚泡在打游戏中,通常不太容易把自己打成另外一个比尔盖茨
,比如说你一天到晚喜欢喝酒,通常不太容易把自己喝成济公那样的智慧人物。其次是感兴趣的事情就算是好事情,你也不一定就能够做出好的成就。
世界上无数的人喜欢下围棋,但能下到像聂卫平那样的人屈指可数;
世界上无数的人喜欢研究数学,但能研究到像陈景润那样的人寥若晨星;世界上有无数的人喜欢舞墨弄画,但能够画到像徐悲鸿那样的人百年一遇。很多人说这是因为人的天分不同,但在我看来天分的作用只在其次。
最重要的是,所有获得大成就的人,都经过了一条必经之路,那就是从自愿自觉走向坚忍不拔艰苦卓绝的努力,最后才能够达到一个极高的境界和成就。 我们每个人都有爬山的经历,如果我们爬一座小山,可以用散步的心情一边欣赏风景一边爬上去,不需要付出太多的努力;但如果我们要爬上泰山或黄山,即使你非常自愿自觉去爬,也会爬得你气喘吁吁,汗流浃背,尽管景色很美,有的人可能就会中途放弃
;如果我们要爬珠穆朗玛峰,那就绝对不仅仅是自愿自觉的问题了,这需要我们付出所有的精力体力耐力,坚韧不拔的意志和面对绝境的决心,还要作好付出自己生命的准备。我有一个认识的人曾经去爬过珠峰,到一半时无数次想放弃掉,但之前所有的努力,内心的自尊,被绝境激发出来的勇气,使他愿意用生命去搏得登上珠峰的荣耀。后来他用一句话来形容当时的心情:到了那种时候,死了也得往上爬啦。 凡是做出大事业的人,
也许刚开始是出于爱好和兴趣,自觉自愿地去做了,但到后来自觉自愿已经退到其次,坚韧不拔的勇气和意志开始越来越占上风,自己对自己的承诺,别人对自己的期待,使自己不得不努力前进,不断突破自己的局限。
那是一种怎样的坚定不移啊!有一次我和一个游泳奥运冠军聊天,谈到她在游泳池里矫健的身手时,她的眼中眼泪都要出来了。她说:你知道我身上有多少伤痕吗?你知道有哪一个运动员的身上是没有伤痕的吗?小时候只是因为喜欢游泳,但后来整整十年就是为了奥运会的那一刻。知道为什么奖牌套在运动员脖子上的那一刻,他们的眼中会充满泪水吗?因为他们之前再大的伤痛也不流泪。在她说这些话的那一刻,我知道了,我遇到再大的困难,都还没有资格流泪。 因此,凡是想要获得大成就的人,也许从自愿自觉到坚韧不拔是你们的必经之路,
也许只有当你们被自己的努力感动得泪流满面时,你们的生命才能叫作美丽的生命。 ( Sun, 5 Sep 2010 10:22:05 +0800 )
Description: 在我上大学的时候,曾经有位老师说,
大学期间不应该瞎折腾,你一辈子能好好读本书的时间没有多少。 我信以为真,奉作金玉之言。心想老师是过来人自然大有经验,青年人就应该珍惜大好时光,读好书奋发向上,祖国的明天还等着我们去建设呢! 今天我才知道,这句话也没错,但不适合所有人。有些人靠读书改变命运,有些人则不能;有些人是考试的骄子,有些人则是市场的宠儿。 知识是永远也学不完的,那我们要做的便不是只争朝夕,而是学点儿有用的!真理是相对的,那么我们就应该更多亲身经历点儿谬误,才能真懂得是非曲直! 大学四年能做到两件事就堪称完美,第一是找到你真正感兴趣的事情,第二是依据它发展出一种初步的谋生技能。 这两点要求看起来相当粗鄙,却是普通人遥不可及的高标准,中国最顶尖学校的学生也没几个能做到。因为我们传统的学校教育,第一不关心你的兴趣,第二不关心你的谋生,他们关心的只是分数和招生。 有一次,我在北航做演讲,曾直言不讳地对一些学数学和物理的同学们说,你们专业最终大部分人是做不了基础理论研究的,大部分人应该做的选择是进入应用行业,把你们的基本数学知识、物理知识用在计算机、电子通信、金融及其它商业领域,如果有一天你不得不做出这种选择,那是很悲惨的;你今天就应该很知道数学、物理到底有什么用,有哪些市场前景,然后开始把你的理论与专业技能结合起来! 事后,一位数学系的高材生(已拿到国外学校的全奖offer)走到我的讲台前,对着我声言:“在这个教室里,包括我自己在内,不会有超过两个学生是对数学真正感兴趣的,但他们还是认为自己应该读研,甚至读博……” 我想这在大学里是非常普遍的现象,但是却是非常不正常的普遍现象,人们幻想去干自己不感兴趣的,也不能带来宽广就业出路的事情,只要学历提得足够高就会带来前途,这是一种典型不靠谱的思维。 中国学校教育的方式又有什么问题呢?
它是一种典型的知识型教育,而不是认识型教育。不让你参与第一现场去发现问题,不让你去尝试定义自己发现的问题,不让你去尝试解决现实问题,而是装作世上根本就没有什么问题,或者问题是老师给定的,只是告诉你一些现存的“标准***”。 所以,中国成绩好的学生,也不太清楚自己对专业到底感不感兴趣,也不知道今天做的任何专业学习、研究到底有什么实际用处。 在此背景下,我当然要猛烈鼓励大学生参与社会实习,突破学校的围墙,通过实习来找到专业的“问题”,能带着问题更好地学习;
能看清行业现状下需要哪些实际的能力,定制自己的个性学习计划。 有一次在新东方的留学论坛上遇见一位哥伦比亚大学的大一女生,我问她大一都做些什么,她首先提到的就是在花旗银行的实习——这样的人有一天呼啸着海归而来,让国内大学毕业的人怎么混哪! 我突然想起有次遇见一位人大的大二女生,问她学什么专业,这个专业怎么样,她支支吾吾半天说不上来,然后惭愧地表示:“我们还没开专业课呢,因此这个专业怎么样也说不上来……” 实习,不应该是大学里的选修课,而应该是必修课,
很多很多的学科,比如新闻、出版、管理、国际贸易、市场营销……这些本身就不是什么高深莫测的理论科学,而更多是一种实务的经验、技术
,学这些科目而没有实践,简直是一种扯淡! 我们既不能说“大学生不实习就是废物”,也不能告诉大学生不实习是正常的,要实习经验是奸猾老板们的无理要求。我们必须看到一种方向,实习是大势所趋,不实习越来越没有市场! 有一次,有一个女生告诉我她想考研,我问为什么,她说因为本科毕业找不到工作。我问为什么她本科毕业找不到工作,而有人能找到呢?她说是因为自己缺少经验,投简历都没人理。我说那研究生毕业就会有经验吗?她说至少起点更高。我问,假如同样有学历和经验,企业更看重哪个?她说看中经验。我说,那好,一个毕业生怎么样有经验呢?她说,去企业实习。我说,那你去做呀。她说,但是没有企业要我。我说,你想去什么样的公司。她说,我想去宝洁那样的公司。我说,那好,假如你去不了宝洁公司,可不可以去联合利华、高露洁、强生、欧莱雅?她说,那跟进宝洁不是一样难?我说不一样了,这样扩展了之后,你就有了更多的选择。那你又能不能进纳爱斯或者其他的国内竞争品牌,你能不能进宝洁公司的供应商、分销商那里去工作?比如去超市的洗发水区做销售,在百货商场的化妆品专柜?这是不是容易很多?在这样的职位上你能不能掌握宝洁公司产品销售的第一手资料?再想一下,即便没人雇用你,你有没有主动地去研究一下快速消费品行业?你有没有跟同学一起组成一个小组,去做过相关的市场调查?试想一下,假如你在大一的时候主动做过调查,大二的时候去超市或百货公司兼职,又利用大三寒假找到一家消费品生产企业实习,那么在大三暑假的时候,你有没有可能获得宝洁公司的实习机会?即便不是宝洁,而是联合利华、高露洁、强生、欧莱雅,毕业你再去应聘宝洁,是不是也大有机会?尽管过去的事情不可追悔,那么今天的决定应该是什么,读研?那又跟你的宝洁有什么关系?今天应该把这些迅速地补做一遍:马上去做一个自己的市场调查,进去超市做一个月销售员,然后先找一家消费品企业做着,也许干上两三年,进了宝洁这样的500强外企又是一条好汉!她说,听说很多外企不招有经验的社会人士,而只喜欢内部擢升。我说,那是胡扯,没准你的公司会被宝洁、强生并购了呢,那你也是外企员工了,外企当然喜欢内部擢升员工,谁不喜欢?但是他招不招你,取决于你能不能好到对他构成威胁!我不能说这是保证你进入宝洁的方式,但是这是保证你进入宝洁的思路。你原来的想法,我不能本科进入宝洁,我就读研进入宝洁——那是根本不可能的! 我们总是在想,等我有了一百万,我就能赚到上亿,成为一个大富翁,甚至著名企业家;我们有那一百万吗?没有,所以我们就很轻易地放弃了创业的梦想,说是“没有条件”,“环境苛刻”,“时运不好”等等等等。其实,我们应该从赚第一块钱开始,懂得赚钱,吃得辛苦,这才是一个创业家的基本素质。 很多人并不想做企业家,而只是想做“成功企业家”;很多人并不想做作家,而只是想做“著名作家”,这样的例子实在是太多了。抱有这样幻想的人,他们不论在什么情况下都不大可能成功,并不是总体就业形势真的影响了他们。 我愿意在最后补上一句忠告:
没实习,你的大学生活真是相当不完整。
大学生实习更不应该怕从低做起,只要早准备,不断有提升,一定会让你在这个就业的寒冬里杀出一条血路。可见的未来三到四年,大学生就业会始终艰难,有什么整体解决的办法吗?没有办法。除非我国经济结构完成某种根本调整,我们的教育也完成相应的反思和转型,这是遥远未来的事情,而只有你能让自己避免沦为受害者。
( Sun, 5 Sep 2010 10:10:39 +0800 )
Description: 听力满分秘笈大公开 我先后考过两次托福,第一次102分,第二次108分,在第二次考试里听力居然满分,挺惊喜的。 我真正开始投入大量时间准备托福大概有3个月。由于还在上课,每天准备托福的时间也就是4小时左右。
但平时去教室的路上、坐公交、吃饭时也经常是戴着耳机听VOA、《科学美国人》还有《托福高分作文》配套音频。
这种零碎时间加起来平均每天也应该有一个小时,闲暇时间也经常是关了字幕看英文电影。 一般情况下,尤其是对于像我这种工科生,大学里在准备GT之前是很少会花大量心血准备英语的。记得有同学开玩笑说过,如果是高三暑假去考托福就好了。的确,没有GT的话,大学生的英语水平通常是逐年降低的。想让逐渐降低的英语水平反弹,肯定是需要一番决心的。 做事都要遵循一个循序渐进的原则,听力的提高也不例外。如果一个英语基础一般的大学生直接用VOA来练听力,那多半是坚持不下来的——过高的强度会导致大脑的“罢工”,非常容易走神。
我开始练习听力时是用老托福的听力材料,就那种1分多钟1篇的。这套音频的语速、内容都不算太难理解,而且有对应的文章可以看,
听的时候发现自己哪里跟不上了可以马上停下来看文章。
如果想同时练习写作的同学可以换成《托福高分作文》配套音频听。 等到老托福听力材料已经能听懂80%,就可以提高难度了。
作为面向外国人的英语能力测试,老托福的语速、连读情况和真正美国人说话自然还是有差别。而在老托福的听力材料之后,我就直接强迫自己听VOAstandard。这个跨度很大,主要是因为我没能找到难度居于两者之间的听力材料。VOA的语速已经比新托福考试要快了,但其价值也正是如此。所谓“求其上上得其上”,如果把VOA都能听懂,还怕托福听力吗?但果不其然,初听VOA时我大脑出现了严重的“罢工”现象,常常没听几分钟就走神了。为了让自己集中注意力,我开始“听说”。下面要重点说一下“听说”。 此“听说”非彼“听说”。上过新东方的同学基本都听说过“听写”,这个方法拥有一大批拥护者。但我在尝试了几次后最终没有采用,一是因为很耗时间,二是因为过程很枯燥。如果有比较有决心的同学不妨一试。而我采用的方法是
“听说”——耳朵听到的英语嘴巴跟着说,哪怕没听懂也尽量模仿那种发音。因为有了大脑的这个反馈过程,这样做能让自己专注于所听的材料,走神现象有了很大的改善。
而与“听写” 想比,这种方法花的时间较少,而且由于可以很快地听新内容而不是纠结于某个句子而一再重听,相比之下也没有那么枯燥。 不过我必须承认一点:直到考完托福,我听VOA也是很吃力的。
我当时是下载十篇几分钟一段的VOAstandard,放到MP3里面反复听。第一遍往往只是听个大概,夸张一点说,就是抱着“寻宝”的态度去听——听着听着发现,“哟,这一句我能听懂唉!” 然而反复听,第二遍,第三遍,第十遍……今天听完明天继续,直到某天发现,这几篇报道的大意自己都明白了,就可以换一批新的了。
注意,此时的“听明白”是个幻觉:我们只是能听明白这几篇文章,并不是说已经有听VOAstandard的听力水平了。换十篇新的VOA,第一遍依然听得很崩溃。然后再是第二遍,第三遍……然后再换。 其实听力水平能听VOA后,已经足以应对托福考试了。
但作为一个工科生,我对VOA的兴趣没有《科学美国人》
大,于是又去下了许多《科学美国人》来听。《科学美国人》的语速更快,更有挑战性,而且有一个bonus:由于《科学美国人》的话题都是科学类的,对于理解托福中科学题材的文章、听力,甚至口语里的学科讲座部分也是有帮助的。 以上便是我复习听力的大致方法,肯定有不足之处,在此抛砖引玉,也希望能有同学能够提出更好、更系统化的复习意见!
( Sat, 4 Sep 2010 22:54:30 +0800 )
Description:
( Fri, 3 Sep 2010 18:44:12 +0800 )
Description:
《Python核心编程》wesley J.Chun著,CPUG翻译,下载:
看了几页,觉得这本书写的真不错,翻译得也不错。。。 伴随着每一代编程语言的产生,我们会达到一个新的高度。汇编语言是上帝献给那些挣扎在机器代码中的人的礼物,后来有了FORTRAN、 C 和 Pascal 语言,它们将计算提升到了崭新的高度,并且开创了软件开发行业。伴随着C 语言诞生了更多的像C++、Java 这样的现代编译语言。我们没有止步于此,于是有了强大的、可以进行系统调用的解释型脚本语言,例如Tcl、Perl 和Python。 像Pytho 中的列表(大小可变的数组)和字典(哈希表)就是内建于语言本身的。在核心语言中提供这些重要的构建单元,可以鼓励人们使用它们,缩短开发时间与代码量,产生出可读性更好的代码。 Shell脚本的代码重用度很低,因此,你只能止步于小项目。实际上,即使一些小项目也可能导致脚本又臭又长。Pytho 却不是这样,你可以不断地在各个项目中完善你的代码,添加额外的新的或者现存的Pytho 元素,也可以重用您脑海中的代码。 代码中的瓶颈,可能是在性能分析中总排在前面的那些热门或者一些特别强调性能的地方,可以作为 Pytho 扩展用 C 重写。 。需要重申的是,这些接口和纯Pytho 模块的接口是一模一样的,乃至代码和对象的访问方法也是如出一辙的。唯一不同的是,这些代码为性能带来了显著的提升。 因为 Pytho 的标准实现是使用 C 语言完成的(也就是 CPython),所以要使用 C 和 C++编写 Pytho 扩展。Pytho 的 Java 实现被称作 Jython,要使用 Java 编写其扩展。最后,还有 IronPython,这是针对 .NET 或 Mono 平台的 C# 实现。你可以使用 C# 或者 VB.Net 扩展 IronPython。 ,Pytho 没有给你多少机会使你能够写出晦涩难懂的代码,而是让其他人很快就能理解你写的代码,反之亦然。如前所述,一门语言的可读性让它更易于学习。 BASIC 也是如此啊,Pytho 有什么出类拔萃的呢?与那些封闭僵化的语言不同,Pytho 有许多面向其他系统的接口,
它的功能足够强大,本身也足够强壮,所以完全可以使用 Pytho 开发整个系统的原型。显然,传统的编译型语言也能实现同样的系统建模,但是Pytho 工程方面的简洁性让我们可以在同样的时间内游刃有余的完成相同的工作。此外,大家已经为Pytho 开发了为数众多的扩展库,所以无论你打算开发什么样的应用程序,都可能找到先行的前辈。你所要做的全部事情,就是来个“即插即用” 在Window 中,默认的***地址是C:\Python2x。请避免将其***在C:\Program Files目录下。是的,我们知道这是通常***程序的文件夹。但是DOS 是不支持“Program Files”这样的长文件名的,它通常会被用“Progra~1”这个别名代替。这有可能给程序运行带来一些麻烦,所以最好尽量避免 ( Fri, 3 Sep 2010 00:13:24 +0800 )
Description: 据国外媒体报道,美国《财富》杂志网站撰文称,鉴于乔布斯在苹果所取得的成就,以及他对多个行业的重大影响,“十年最佳CEO”的桂冠非他莫属。以下为原文摘要内容: 乔布斯的经历充满传奇色彩。 上世纪80年代苹果公司这位年轻的创始人被赶出,90年代又卷土重来;在接下来的10年中他2次与死神擦肩而过,并经历了SEC的丑闻调查,他本人的行为举止也常常令人不悦,但最终他成为在4个不同行业举足轻重的人物,同时带领苹果成为硅谷最有价值公司。 商业领域过去的10年属于乔布斯。在过去的10年中,乔布斯为音乐、电影和手机行业带来了巨大变化,改善了其赢利状况。同时他对计算机行业的影响也是有增无减。 改