研究能力?

昨天有感而发,讨论了一些关于大学教育的问题,今天不免又想了一些,正好,趁下午是邓论课,逃掉,写下来它。

前天晚上和Dean1873在MSN上聊了一会儿,说到最近5年的打算,我告诉他我准备考中科院软件研究所,然后出来找工作。提到理由,我说我大学阶段基本上没有什么学术研究,准备在研究生阶段对自己感兴趣的东西多了解些。现在想想自己这个愿望能不能实现呢?

前几天就一直想找王垠(就是清华的退学博士)以前写过的那篇《清华梦的粉碎-写给清华大学的退学申请 》重读一下,因为自己也算处在一个迷茫期,希望能从同龄人的经历中找到些答案。我挺佩服这个人的,早在他没有出名之前我就读过他的《完全用Linux工作》,这篇文章也使我慢慢走上了Linuxer的道路。非常幸运的是,居然搜到了他的SPACE,http://spaces.msn.com/shredderyin/,马上把它加到我的BLOG订阅列表里面了。

理论真的有用吗?

"理论的东西将来才会有用",这是一句很有用的借口,几乎可以掩盖所有的失败和没用的论文。这句话已经被滥用了,只有具备天才的直觉和预见力的人,才有资格说一个理论在遥远的将来会有用。我不是天才,导师也不是。我们不是Riemann,不能提出一个hypothesis让大家感觉到美,觉得多年以后肯定会有用,那么就老老实实解决实际中来的问题吧!

“理论的东西将来才会有用”这恐怕也是数学系学生们听到的非常频繁的一句话。老师总是这样鼓励我们,数学是纯理论的东西,做研究虽然很枯燥,但是数学在将来是非常之有用处的。但是这个用处是什么,他们从来不告诉我们,其实是因为:他们也不知道!!

如果有一个老师能确切的举出身边的例子,告诉我们,数学分析有什么用,高等代数有什么用,恐怕当初考试的时候挂科的同学就没那么多。我们仰望老师给我们画出的一个宏大的图景当中,而无视于身边的小处之用,总觉得数学是那么的高不可攀,也就失去了向上爬的动力。

眼界决定未来

一直到大三,我才发现数学的一些实际用处,可惜也开始后悔自己根基的不牢固。如果我能早点晓得就好了。这也就要说到了一个眼界的问题,当我们还在低年级的时候,眼界太窄了。

我订阅着一个川大计算机系学生的SPACE,http://spaces.msn.com/tangl99,(奇怪啊,王垠也是川大毕业的),叫做:设计程序的程序员。他写了一个《值得回忆的本科四年学习》的连载文章,看到他和王垠的经历,就会慨叹自己的本科四年可以说是一事无成。一个人的眼界决定了他的未来发展,中国闭关锁国的历史已经过去,只有看到外面的景象,才知道自己缺乏什么东西。

其实在身边也有这样的人,一个同学给我说,听了徐宥的讲座,觉得他对学校的资源利用的那么充分,而自己做的太少了。其实我之所以答应做系里的计算技术协会的网络服务部代部长,也是希望自己能尽己所能让学弟们了解一些更多方面的知识,我不是牛人,不过信奉这一条:If you can not do great things, you can do little things with great love. 我不遗余力地在google的group里写文章,不为名不为利,我只是希望他们能比我当时了解到更多东西。可就像我最近老说的一句话,理想和现实是有差距的,我告诉他们我希望他们参加讨论,可是到现在,group里也只有我和徐宥两个人。昨天徐宥发邮件问我,他不认为其他人知道这个group,我回信还为他们辩解,说他们有考试,而且没有Gmail的帐号,其实我心里何尝不寒那。就像我当年级长做过的许多事情一样,好多人根本就不知道,也不感激。

徐跟我要协会成员的邮件地址,他想通知他们,也许他能理解我只是一个学生,对下面的学弟学妹们没有太大说服力,希望通过他的一些影响来吸引一些人。我也不希望group成为我一个数学成绩普通,计算机能力也一般的家伙的秀场。像我起的名字一样,我希望它成为一个seminar,一个知识和激情碰撞的地方。我一直都很希望中国的大学能有国外大学那种自由的气氛,定期不定期的seminar,固定的common room,各种各样的group。而显然在现在的情况下是不可能的,所以我寄希望于google group,希望它能担负起common room的责任,不过现在看来,为时还过早,而且个人性太强,要是我们有自己的网站就好了。

僵化的教学体制

我们所学的课程里面,我承认有很多东西都是非常有用的,但是我没有学习的激情。老师枯燥的授课,boring的作业,死板的考试制度,一切都让人觉得无心学习。尤其当我发现上课根本不用听,下课自己花些时间好好看看就能考个不错的成绩时,就更加丧失了听课的兴趣。老师不会讲我们为什么需要这个定理,这个定理的作用体现在什么地方,Who, When, What, Why, Where都不说清楚就讲定理的证明,把好好的一节课花在证明一条定理,其实我在课下顶多20分钟就能看懂,老师授课的意义又在哪里?

我们所学到的,就是定理的证明,然后课后题规范的解答。我现在好多好多定理都不知道它们存在的意义,谈何研究?

其实我也不应该抱怨教育制度,大家都是从这样的制度里出来的,但也是有出类拔萃的人,功夫就在课外了。我现在只是后悔前两年学习时间的浪费,我觉得大学阶段只有大三这一年来算不上浪费时间。

要考研究生,恐怕这半年就又要放在应付考试上了,假如幸运考上的话,我希望自己能把握住自己的方向,做自己喜欢的,有激情的东西。
Copyright © 2005-2006 Solrex Yang. All rights reserved.

我们的大学教育啊

一个事件:2006年5月23日晚六点左右,南京大学附近一餐馆发生凶杀案,凶手为一电子系04级研究生,受害者为与其一个实验室的05级研究生。据悉,二人均为部队推荐到大学读研的强军计划的研究生,目前凶手已经交送军事法庭处理。

相当低调的南大可是碰到了多事之秋,到处是风声鹤唳,人心惶惶,浦口这面也不安全。

联想到马家爵事件,使人想到大学的教育问题。大学究竟应该教会我们什么?只是学术能力吗?

我觉得现在大学教育最缺乏的是对学生个体完整性的教育,到大学以后,离家庭远了,没有人告诉你该怎么样,不该怎么样。辅导员的角色更像一个服务者,而教授们的指责也仅在于教授课本知识。

个体完整性的形成应该是多方面的内容,而大学所教的,只是智力方面的发展。心理和其它方面的能力,只能从交往中获得,而这个获得的方式和效率就完全因人而异了。

相对来说,如果一些老师能在教课之余,给同学们谈论一些做人的道理,能给学生的生涯规划做一些指导,这样的老师就会更受欢迎。因为这样才能感觉到老师是个长者,并且很关心学生。很幸运的是我高中遇到过几位,大学里的就很少了。我最喜欢的两个老师,丁南庆和吴朝阳,就属于这种类型的老师。

韩愈说过:师者,所以传道授业解惑也。真正能理解“道”这个词的意思并身体力行的老师,能有几个呢?
Copyright © 2005-2006 Solrex Yang. All rights reserved.

软考结束了

忙了一个学期的软考总算结束了,感觉考的还可以,应该能拿个证吧。不过很郁闷的是下午的题目,倒数第二题居然让写WSDL,SOAP,UDDI是什么意思,我当时就想骂那出题的人,这几个词只在一些乱七八糟的软件杂志上看过,也没深究过是什么意思你让我怎么写啊!15分的题就这样瞎扯扯上去了,不过看看周围的人我平衡了不少,原来大家都不会:)!

考场在南林,昨天先去踩了一下点,摸清楚了状况省得今天再找了,也顺便照了几张照片,过会儿贴上来。发现我去过的南京的大学基础设施基本上都比南大好,南林的新教学楼教五楼是相当现代化的教学楼,还有体育馆,南师的新图书馆也是非常的好,东大虽然不咋地吧但本部校区也比南大的漂亮许多。南大只有在鼓楼有几个看起来很牛的楼还是给几个有钱的学院用的。唉,浦口的新图书馆盖好了,我们也该搬到鼓楼了。

南林有几个我非常喜欢的地方,基本上新盖的楼都有残疾人通道、电梯、专用洗手间,相比而言某些号称要建设世界一流大学的学校做的就太少了;体育馆很好,现在正在办什么重剑世界杯;饭菜质量还不错,虽然价格和南大也差不多,味道很好。很有意思的是他们校区有那种特狭窄的玻璃瓶装的雪碧、可乐之类的饮料,刚开始我还纳闷:他们学校的学生吃饭的时候喜欢弄瓶啤酒喝呢?后来才发现是饮料。餐厅也很宽敞,没像我们这那么挤,空间比较大。

唉,这些天的日子也没什么好说的,无非是老一套。不过有件很开心的事情是上次申请的江苏省优秀班集体拿到手了。当时在期中考试,申请材料都是连夜写好的,连发言稿也没准备,还好材料主体是自己写的,比较熟悉,就临场发挥了下,没想到领导们还真给面子。这下04级的哥们就要有压力了,上面连着两届都得了优秀班集体,他们就不好办了,就像当初我看02级的材料一样,当时就想,02写的那么好,我们能比得上吗?不过结果还算是好的啦。

自己的事情没什么好说的,软考完了就考研吧,也该准备了,把目标再定的明确些。是真不想在南大呆了,明天中科院到鼓楼开宣讲会,约好几个同学一块去看了,打听一下自己感兴趣的几个所的情况。
Copyright © 2005-2006 Solrex Yang. All rights reserved.

前路漫漫啊

回来的路上一路雨幕,虽然听起来是润物细无声,要走进去才知道那么大,打着伞都能淋透。

今天拿到系里推荐联合利华实习生的名额,可还是不知道到底是怎样的一个情况。按照学工组老师说的,就业指导中心的意思是系里做主。但在百合上看到有人发帖子说所谓推荐只是为了方便收简历罢了。想这些跨国公司也不应该只凭一个学校的推荐就会录取你,我觉得应该是初次选拔之类的,大概能保证进入面试,可能这样他们能省点工夫。按照他们的录取实习生名额大概也能推测出是差不多的情况。看来拿到系里推荐也并不是什么值得庆幸的事情,更难的应该在后面,据说联合利华实习生的面试也是好几关呢。可面试时候又正好是期末考试,郁闷了啊!

在机房和同学讨论考研情况,又重新看了下信息安全国家重点实验室的招生简章,才一个月没上,就全变了,要求什么的也有些细微的变化。关键是信息闭塞,不知道录取比例和分数线每年大概是多少,从网站上又看不出来,又没关系。看看别的,什么计算所啦,什么软件所啦,情况也都差不多,还是跨专业考研很没底啊。看来计算机软件基础的几门课,数据结构,编译原理,操作系统,还是得认真学,无论考哪个方向,有了这三门,基本上都能应付。考完了软考就要专心准备考研了。

暑期能混到个实习生位置的话就去实习,要找不到那就老老实实把副修暑假的课程上完,看来在家呆不了太长时间了。

如果大二时候对学习没那么放松,假如不是七十名而是二三十名,现在也不用那么痛苦了,也可以有更多选择。

路漫漫其修远兮~~~!不知道会走上哪一条。

20号前不会再更新日志了,一是为了软考,二也为了可能要花些工夫写服务器方面的小文章。系里成立计算机技术小组,WebServer组也没有合适的人去辅导,自己还算稍微懂点,在大三的最后一段时间内,算是给学弟学妹们一点帮助吧。所有文章会在我建的google讨论组里贴出来,在我的主页上有链接。其实不算是专业人士,自己也只懂些入门级的知识,但别管怎么说是从学生的角度去看这些东西,而且只专注于实用和简单的方面,可能读起来比书本舒服些。自己很清楚里面错误和疏漏有很多,希望看到的人能帮忙挑出错误,也是再学习的过程。

又:今天公布成绩,泛函分析居然考到93分,太出乎我意料了,虽然说这次考试比较简单而且几乎全是记忆性的东西,但分析类的科目第一次上90也是很开心,因为向来认为自己在分析学方面一点天赋都没有,是以此记,继续努力。今天还做了件善事,拾到个手机还给失主,希望老天能给我点好运气。
Copyright © 2005-2006 Solrex Yang. All rights reserved.

也下雨了

早上起来就说,北京下雨了,河南下雨了,南京估计也快了。没想到中午就下了。天阴沉沉的,不舒服。

Space总算可以从Web登录了,才知道什么原因,原来是Live.com没有到公安部ICP备案,被封掉了。从四月中旬到现在,今天中午 12点,这个效率也真是可以了。

别管怎么说,庆幸space可以正常了,还是习惯了这里,不想换地方。习惯总是难改的。

五一快过去了,也没出去玩一下,老看电脑,看的眼都痛了。不是一种健康的生活方式。

刚才QQ上碰到一个好久不见的网友,聊了会儿天。大家都有自己的生活问题。

其实就是这样,不管怎样,都要努力且自信的活着。

Copyright © 2005-2006 Solrex Yang. All rights reserved.

Growing Up

两天了,没干什么事情。昨天只吃了一顿饭,把半个晚上和一个白天花在了可爱的Apache和Twiki上了。然后,在自习教室里看到成双成对的情侣儿实在是受不了,回到宿舍开始看Friends,到现在(中间有睡觉,小失眠有点),大概看了40个episode,眼睛已经受不了了。

Friends里的一群家伙简直太cute了,看他们把很严肃的事情当作笑话来看待,把很隐私的东西当作常事来分享,有点不习惯,也有点羡慕。照他们对待失败和尴尬的态度,不只中国有阿Q。

多次有讲到小孩子被父母欺骗的事情,比如Ross以为他的小狗真被送到农场了,Phoebe不知道所有悲剧的结局,也让我想起小时候的事情。小学时候经常有小孩子拿避孕套到学校当气球吹,而且从小卖部里也可以买到这种“气球”,当时我就很奇怪好好的气球干嘛搞一个尖头啊?但是,一直没有人告诉我它真正的名字,并且,我一直以为标准的大气球就是这种带着尖头的东西。直到上了高中,才有人告诉我那玩意就是传说中的避孕套。刚开始那个惊讶和恶心那,就别提了,不比Ross和Phoebe的少。

We are growing up, and we think we are growing up, but we don’t know what we are growing up for. The grown-up’s world? Or the fun of enjoying the course, or just we have to?

正像Monica对Rachel说的:Welcome back to the real world! It sucks, but you can love it.

We have to back to, we’d better back to.

时间是2006年5月3日03:39分,我实在是无法忍受MSN Space了。持续两个星期的访问不正常了,如果没有一个合理的解释,会让我很鄙视微软的网络工程师。曾经还吹过牛说是一个人管理上千台服务器,看来有些夸大了,两天的Hotmail、MSN、Space全部访问不正常,足以让一个大公司蒙羞了。看来过多的依赖和相信一个服务没有太大的好处,等访问正常以后一定要把所有文章下载下来,起码自己有个备份,免得哪天收到封邮件:Sorry, Several of our databases were destroyed by some unknown reasons. Your space documents were all lost. Shit Microsoft!
Go to bed.

现在看来是MSN的网页登陆出问题了,只好用Windows了,先上MSN,然后再从MSN进SPACE,FAINT!

Copyright ?? 2005-2006 Solrex Yang. All rights reserved.

Linux学习笔记(5)

有关Ubuntu的一些心得

Ubuntu的安装:

安装方法和普通Linux没什么区别,不过主要是英文界面,要注意看,尤其是分区的时候,不然万一选错了,硬盘上数据就惨了。分区的时候可能会有明明可用的分区它标为不可用,不知道什么原因。

在安装基本系统的时候有时会出现错误,但是Ubuntu最好的就是它会让你再选择从什么步骤开始,只需要重复一下安装基本操作系统这个步骤基本就可以解决。相比而言Redhat做的就太差了,一个小文件错误就得从头开始重新安装。

Ubuntu退出安装按ESC就可以,然后选择最后一个步骤退出安装。安基本系统大概在8分钟左右,拷贝文件大概在15分钟左右,重新启动以后安装软件大约20分钟。

Ubuntu安装时候没有设置root的密码,需要进入single模式修改密码,方法是在grub引导的时候选择safe mode,更一般地,对所有Linux都适用的是,光标放到引导选项上按E进入编辑启动项,在启动内核的那句(就是最长的那句)后面加一个词:single,结束编辑再按B启动。

进入single模式不需要用户名,直接就有root权限,更改密码用:passwd。

Ubuntu中库的安装:

有些程序库默认是没有安装的,就如GCC的一些库。有时候会用到,比如Ubuntu的Firefox是1.0版本的,想用1.5的话,可以下一个1.5的免安装包,运行就需要libstdc++5.so,这时候到软件包里找到这个包装上就是了。Debian核心的Linux的介绍比较少,现在也不是很清楚怎么装软件包以外的软件。rpm包是可以用alien -i命令来安装的,但是会有诸多问题,比如依赖性不好解决。不过直接从源代码编译应该是最好的办法,就是太浪费时间了。最好是上网从Ubuntu的官方介绍的方法下载安装。

Ubuntu中如何拨号上网:

版本Ubuntu 5.10,系统中没有附带像FC里system-config-network和Red Hat中redhat-config-network这样的带图形用户界面的网络设置工具,但它附带了一个类图形界面的专门拨号工具:pppoeconf,默认是不安装的,需要在开机后从软件包中安装。可以在虚拟控制台下运行,配置拨号上网的命令是:pppoeconf,在控制台中会有页面提示,按照提示操作即可。配置好以后,可以用 pon dsl-provider 命令拨号,poff 挂断,plog 查看状态。

有时候拨号连不上,如果网路没问题的话,而且再用pppoeconf 配置,在开始的modem检查阶段就通不过,重启一下Modem可以解决问题。

Ubuntu的配置:

配置方法在Ubuntu的官方主页上就有,UbuntuWiki给出了很多指导,有什么问题到那里查一下就行了。包括软件的更新和安装,也可以从那里找到下载。
Copyright ?? 2005-2006 Solrex Yang. All rights reserved.

Linux学习笔记(6)

apache服务器

安装:

可以从官方下安装包,不过一般的Linux发行版本都会带,除了一些叫Desktop的版本(就比如Red Flag Desktop)。现在一般都是apache2.x。

根据版本的不一样,一些命令可能有差别,Red Hat一直是用httpd守护进程来执行的一些命令和管理,但是Ubuntu就是直接用apache相关的命令来管理,可能根据各自的使用范围有些差别吧,但是核心的东西还是一样的。我用的是Ubuntu,大致debian也应该如此吧。

基本配置:

基本配置文件的位置和名称也随着发行版本的不同而不同,Red Hat用的是httpd.conf,Ubuntu的是apache2.conf,虽然也有httpd.conf,但是作用是不一样的。如果你是自己编译源代码,可以设置它的名字和位置为你自己的东西。在Ubuntu中它的位置在/etc/apache2/目录下。

由于好多书介绍的服务器配置针对的是低版本的服务器,这里尝试对apache2的conf文件的格式和内容进行一下解释:
格式:一行一个指令,指令不区分大小写,指令参数要区分大小写,"#"开头行表示注释,被忽略。
内容:
ServerRoot "/etc/apache2"
apache2配置文件所在目录,主要是寻找站点的设定和模块的链接。
LockFile /var/lock/apache2/accept.lock
系统初始化时控制脚本使用LockFile来协调启动和关闭进程。
PidFile /var/run/apache2.pid
服务器启动时候保存进程序列号,以便于管理。
Timeout 300
在终止某个功能之前,用这个变量来设置时间,单位为秒,也是为了便于管理。
KeepAlive On , MaxKeepAliveRequests 100 , KeepAliveTimeout 15
是否允许每个连接提出多于一个的请求,最多允许多少个请求,服务器对请求的等待时间
<IfModule *.c>
………………
</IfModule>
用于特定模块的指令,当加载时候才会生效,仅在启动中起作用。其中有几个比较重要的:
MinSpareServers 5 , MaxSpareServers 10
系统用来处理瞬时负载的后备服务器监控程序的最小(大)数目。
StartServers 5
控制脚本运行时,默认启动的监控程序的数目。
MaxClients 20
最多客户端连接数。
MaxRequestsPerChild 0
最大请求数,超过这个次数就停止服务器,0为不限制。
User www-data
Group www-data
执行服务器的用户名和所属组
LogFormat "%{User-agent}i" agent
服务器日志格式
ErrorLog /var/log/apache2/error.log
全局错误日志位置
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
包含模块的设置
Include /etc/apache2/httpd.conf
包含用户的配置
Include /etc/apache2/ports.conf
包含监听的端口,在低版本的服务器上是用Listen命令直接加到这里的。
Alias /icons/ "/usr/share/apache2/icons/"
别名,或者叫做映射,在URL路径中加上前面的/icons/,服务器默认指向后面的目录。
<Directory "/usr/share/apache2/icons">
…………
</Directory>
此类模块中的指令和配置只作用于后面指定的目录中,若是<Files "">则是指文件。
ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
指定的服务器错误页面指向,一般只用默认即可。
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml
默认主页文件名,如果目录下存在其中的一种,就直接将它返回,比较经常修改的一个属性。
AccessFileName .htaccess
辅助访问文件名,将此文件放到某一个目录下,可以定义此目录的访问设置。
UseCanonicalName Off
TypesConfig /etc/mime.types
HostnameLookups Off
IndexOptions FancyIndexing VersionSort
这几个不是很懂。
AddIcon , AddEncoding , AddLanguage, AddCharset, AddType
顾名思义,没什么意思,默认即可。
AddHandler cgi-script .cgi .pl
以cgi或者pl为后缀的文件当作cgi-script,返回cgi处理后的数据。在这里设置以后对全局生效,一般情况下出于安全性考虑会被注释掉。
BrowserMatch "Mozilla/2" nokeepalive
对于访问类型使用不同的方法对待连接。
Include /etc/apache2/sites-enabled/[^.#]*
包含站点的设定文件,即是虚拟目录设定所在目录,在apache中,站点属性和虚拟目录的设定是在另外的目录中进行的。

也是刚开始学习,有些地方说不太清楚,以后会有更详尽的解释。
Copyright ?? 2005-2006 Solrex Yang. All rights reserved.

Linux学习笔记(7)

apache服务器

apache2的启动、停止和重启动命令:

当更改了服务器的配置文件后,必须重新启动服务器读取配置文件才能生效。

[1]:杀死进程
kill -TERM `cat /var/run/apache2.pid`
这样就看到了前一篇文章讲过的PidFile的作用了,不用再用ps找进程了。

[2]:apache2ctl脚本
apache2ctl是apache2的控制命令
apache2ctl -k restart | stop | …………
从字面意思就可以理解了。

下面以Twiki,一个cgi的wiki程序为例讲解apache2的基于cgi 脚本的服务器的其他配置。

如何允许CGI的运行:

方法[1]:修改站点或者虚拟目录设置文件
站点虚拟目录的设置放在/etc/apache2/sites-available/目录下,默认站点配置文件为default
NameVirtualHost *
虚拟目录的名字,这里*大概是指默认站点。
ServerAdmin solrex@localhost
服务器管理员信箱,主要用来出错时候页面上显示请联系xxx来处理错误。
DocumentRoot /var/www/twiki/
服务器文档根目录,这个很清楚,就不用再说了。
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
可以针对/目录的动作,这个还不是很清楚各个命令指什么。
ScriptAlias /cgi-bin/ /var/www/twiki/bin/
这个就是动作脚本的目录,假如从URL+/cgi-bin/+file,就是用script来执行file,并返回结果给请求的客户端。这样在/var/www/twiki/bin/下的文件就是作为脚本来执行,而不是返回文件了。

方法[2]:修改主配置文件apache2.conf中的AddHandler
如学习笔记(6)里所讲的,把AddHandler cgi-script .cgi .pl前面的注释符号去掉
然后再建一个配置段:
<Directory /www/somedir>
Options +ExecCGI
</Directory>
这样在/www/somedir下的文件就可以用脚本方式来执行了。

方法[3]:修改.htaccess文件
学习笔记(6)里说过,.htaccess用于配置所在目录的访问属性。
在这个文件里加上:
<Directory /home/somdir>
Options ExecCGI
SetHandler cgi-script
</Directory>
即可实现cgi脚本的运行。

CGI的库:

CGI会包含很多库,有些并不是默认安装的,就比如Twiki就需要CGI::Session,这样就要手工安装。
下载CGI-Session-x.xx.tar.gz,解压,make,然后把生成的2进制和perl脚本文件拷贝到CGI的目录中去。我的目录是/usr/share/perl/5.8/CGI,把CGI下的东西拷贝到这个目录里,把man3下的文件拷贝到系统的man库里。这样就可以有手册参考。 这样配置好以后就可以运行CGI的脚本网站了,至于Twiki的配置,我现在的Twiki版式不是很对,左侧的一部分下沉到右侧下方了,还没找出什么原因。等搞清楚了再写。
Copyright ?? 2005-2006 Solrex Yang. All rights reserved.

心烦意乱

最近心情不是很平静,大概又该到五一的缘故。每逢节日的时候就会感到孤单,也许和环境有关吧,痛恨自己。

第三天晚上没有出去自习了,本来今天是没打算呆在宿舍的,可是昨天踢球时候把腿磕破了,正好在膝盖上方,裤子一碰到就痛得不行。想想在教室里卷着裤腿也不雅观,还是回来吧。自制力还是不够,懦弱的人那。

在宿舍也干不了什么事情,迷上了wiki,用来作笔记挺不错的。调了一下一个asp的,可是没想到上传到空间里居然不能用,两个能用的吧自己又不喜欢,算了,就只在自己的机子上装一个好了,asp的东西还是不好用。

跟电脑过不去,Linux老是对中文支持不好,FC和Ubuntu用起来都很麻烦,已经习惯了Redhat的Linux,对Debian还是不习惯。一怒之下,干脆装了个RedFlag,正好自己还有原装的盘,也不用再去下了,还支持国货。没想到居然用起来很爽(这句话说出来恐怕是要被那些用Debian,SuSE的人鄙视的),但用起来真的很方便,中文输入法和文件名都根本不用配置。可惜的是它为了追求易用在界面上丧失了一些Linux共有的东西,一切全仿照Windows来的,虽然说核心没变。KDE的窗口也有点耗资源。决心以后再也不在操作系统上消耗时间了。

唉,越来越不习惯在BLOG上写自己的心情了,也没有太多的空闲去牢骚。手机也很少短信,每天晚上回去开一会儿机,有一两条就回一下,没有就关机睡觉。现在觉得实在是身外之物,不带也罢,乐得没辐射,就让它天天在宿舍躺着吧。

这个学期还是蛮平静的,偶尔烦躁一下也是难免,有点像大一时候了。对一切不再抱有期望,冷眼看人来人往,说是随遇而安也不为过。想起来东坡的词:余问柔:岭南水土,应是不好?柔对曰:此心安处,便是吾乡。可是仍有勘不破啊。

又,每晚听“City夜动听”临末了张艺的祝福:春暖心安,是一个不错的词,送诸位!

Copyright © 2005-2006 Solrex Yang. All rights reserved.

C++中计算顺序问题(补充)

接着上一篇的讨论,上次给吴老师发过去,老师回答的时候顺便提了一下,在VC6.0中,如果Optimization Switches选择maximum speed或者minimum size的方式来编译的话,计算结果b就是9。我试了一下,不管是用release或者debug mode,如果选择default或者Disables optimizations,结果就是7,如果选择maximum speed或者minimum size,结果就是9。

本来想反编译一下看看原理的,可当有优化时,从代码实在看不出来,debug调了半天也没有看到哪句是关键语句,感觉全是系统调用,只好作罢。

查了下MSDN,说是如果选择优化的话会有Local and global common subexpression elimination和Automatic register allocation。自动分配寄存器的解释是:This optimization allows the compiler to store frequently used variables and subexpressions in registers; the register keyword is ignored.鬼知道它怎么用的寄存器,难不成它在make的时候已经把结果给算出来了?

用VC写的程序可真大呀,拿这个为例,default是168k(172,083B),maximum speed和minimum size是104k(106,547B)。调程序的时候看到好多系统信息字符串,像service pack 2之类的,还有许多错误提醒的程序分支,它好多的工夫放在了对系统的识别和错误的处理上了。有感于此就顺便看了一下TC的表现:

用TC3.0编译上个程序,按C++方式,大小:5.96k(6,108B),汇编核心代码:
:0001.0298 33F6 xor si, si
:0001.029A C746FE0000 mov word ptr [bp-02], 0000
:0001.029F 46 inc si
:0001.02A0 46 inc si
:0001.02A1 46 inc si
:0001.02A2 8BC6 mov ax, si
:0001.02A4 03C6 add ax, si
:0001.02A6 03C6 add ax, si
:0001.02A8 8946FE mov [bp-02], ax
前面0001是反编译程序后来加上的,本来应该只有后面的偏移量的。TC3.0还是用的16位寄存器,而且只在存储空间里保存了b的值,a的值就只用寄存器si了,而且结果明显也是9。

用TC3.0编译,不选择优化,大小:5.99k(6,135B),核心代码:
:0001.0297 C746FE0000 mov word ptr [bp-02], 0000
:0001.029C C746FC0000 mov word ptr [bp-04], 0000
:0001.02A1 FF46FE inc word ptr [bp-02]
:0001.02A4 FF46FE inc word ptr [bp-02]
:0001.02A7 FF46FE inc word ptr [bp-02]
:0001.02AA 8B46FE mov ax, [bp-02]
:0001.02AD 0346FE add ax, [bp-02]
:0001.02B0 0346FE add ax, [bp-02]
:0001.02B3 8946FC mov [bp-04], ax
如果不选择优化,则可以看到它给了两个变量内存地址,但是运算结果还是没变,仍然是9。

用TC2.01编译,按C语言方式,大小:4.22k(4,325B),核心代码:
:0001.01FF 33F6 xor si, si
:0001.0201 33FF xor di, di
:0001.0203 46 inc si
:0001.0204 46 inc si
:0001.0205 46 inc si
:0001.0206 8BFE mov di, si
:0001.0208 03FE add di, si
:0001.020A 03FE add di, si
TC2.0就直接用两个寄存器si,di,根本不用存储空间,倒真是干净。结果显然也是9。

这样觉得其实它们做的都对。因为如果按照C++的标准语法,+是Left to right,而Pre-increment“++"是Right to left。按照优先级,()最高,先计算,Left to right,三个括号中计算完了,再计算+,Left to right,然后才是赋值=,Right to left,把值给b。这样说的话,结果等于7的时候倒是有些违反C++语法了。
就算是把()去掉,因为规定,++与()优先级一样,也是应该先算三个++,结果还是9。

结论:

看来,这个争论似乎不是编译器的问题,而是通常理解的语法与程序规范语法的抵触。计算机不可能像人一样具有抽象的推理能力,只能给它先固定好语法的模式,它只按照规范来执行,而不管语义的多样性。

但是有一个问题是,VC的不优化处理难道不根据C++语法来吗?是不是为了某些需要,每几个运算符的结合来做的?还是还有其它的一些原因。估计这个问题可以请教一下学“编译原理”的。

Copyright © 2005-2006 Solrex Yang. All rights reserved.

总算考完了

大概今天每个同学都说过的一句话就是:总算考完了。

在期末考试前最累的一个星期就这样过去了,可以这样说,接下来似乎就是两个星期的假期了。考试吧就都还可以,再说也没什么意思了,都已经大三了,又是最后的几门课。对GPA也没什么意义了,想怎么地就怎么地吧。

下午打了场球,把积压了几周的衣服处理了下,收拾收拾,把这个凌乱的一周抹掉。

接下来还有汇编三周作业没交,信息论拉下一个多月的课要补,还有近世和泛函作业,还是不能让人轻松。晚上是不可能出去自习了,在宿舍歇歇吧,顺便把上个星期借的傅译《巨人三传》看些。

Copyright © 2005-2006 Solrex Yang. All rights reserved.

又是忙碌的一天

上午考偏微分数值解,考完就直接坐车去鼓楼,到学工处“述职”,申请江苏省优秀班级的报告流程。其实就把申请材料简明扼要的讲一下。真是没想到材料能及时写完,四天中间夹着两场考试,愣是给写了三十多页。这两天我的时间那,全是掐着过的,又要复习,又要写材料,痛苦的不行啊!有句话说的非常好,人都是被逼出来的。不过好歹算是结束了,感觉还不错,可能性还比较大,期望中。
下面就只用专门忙考试了,近世代数,也是非常有挑战那。刚回来,睡会儿觉去自习,还有两天,努力。
算了,崩溃了,用Firefox无法上MSN SPACE,留着过两天再发吧!记住时间:19:56,4.19,2005

这几天老不能正常上SPACE,有点怀疑是不是胡哥正在美国访问的原因,不过既然两会都没有妨碍,为什么这会儿会这样?还有一个奇怪的是如果登录不上去可以把ADSL重连一下,大概就可以了,不懂啊!

上午自习比较郁闷,回来歇会儿再出去,天色一不好我的心情就很差,再加上明天还有考试。

顺便在这给兄弟宣传一下,金星进入南京大学十大歌星的决赛了,希望看到这篇博的人点击一下这个地址:
http://www.yono.cn
为金星投一票,不胜感激。每个IP一天可以投一次,但是注册用户可以投两票,如果您能注册一下,再投两票,就更谢谢了。

Copyright © 2005-2006 Solrex Yang. All rights reserved.

C++中计算次序问题

今天计算技术基础课上有同学提出一个问题,C++里,a=0,(++a)+(++a)+(++a)为什么会等于7?

当时想可能就是自己想的,但不确定,回来后把程序反汇编一下,发现和自己想的是一样的。对此问题的解释如下:

C++程序为:

int main()
{
int a = 0;
int b = 0;
b = (++a) + (++a) + (++a);
return 0;
}

反汇编以后的主要语句代码如下:

[01]:00401028 C745FC00000000 mov [ebp-04], 00000000
[02]:0040102F C745F800000000 mov [ebp-08], 00000000
[03]:00401036 8B45FC mov eax, dword ptr [ebp-04]
[04]:00401039 83C001 add eax, 00000001
[05]:0040103C 8945FC mov dword ptr [ebp-04], eax
[06]:0040103F 8B4DFC mov ecx, dword ptr [ebp-04]
[07]:00401042 83C101 add ecx, 00000001
[08]:00401045 894DFC mov dword ptr [ebp-04], ecx
[09]:00401048 8B55FC mov edx, dword ptr [ebp-04]
[10]:0040104B 0355FC add edx, dword ptr [ebp-04]
[11]:0040104E 8B45FC mov eax, dword ptr [ebp-04]
[12]:00401051 83C001 add eax, 00000001
[13]:00401054 8945FC mov dword ptr [ebp-04], eax
[14]:00401057 0355FC add edx, dword ptr [ebp-04]
[15]:0040105A 8955F8 mov dword ptr [ebp-08], edx

下面是对每句指令的分析(注:+是右运算符,是从左向右计算):

[01]:将0赋给a,a所在的地址为[ebp-04],int型变量在内存中占四个字节
[02]:将0赋给b,b的地址为[ebp-08]
[03]:把a放到寄存器eax中,eax中值为0,dword ptr代表以双字(4字节)放入
[04]:寄存器eax中数值+1,计算结果是:++0=1,应该是计算第一个括号里的++a
[05]:把寄存器计算结果放入内存,a所在的地址。——此时a即地址[ebp-04]中的值为1
[06]:把a放到寄存器ecx中,ecx中值为1
[07]:寄存器ecx中数值+1,计算结果是:++1=2,应该是计算中间括号里的++a
[08]:把寄存器计算结果放入内存,a所在的地址。——此时a即地址[ebp-04]中的值为2
[09]:把a放到寄存器edx中,edx中值为2
[10]:把edx寄存器中的值加上a的值,实际是为了计算(++a)+(++a),计算结果是:edx:2+2=4
[11]:把a放到寄存器eax中,eax中值为2
[12]:寄存器eax中数值+1,计算结果是:++2=3,应该是计算最后一个括号里的++a
[13]:把寄存器计算结果放入内存,a所在的地址。——此时a即地址[ebp-04]中的值为3
[14]:把a的值加到edx上,计算第一个括号外面的加号,得:edx:3+4=7
[15]:把edx中的计算结果放入b所在的地址,[ebp-08]

结论:

由此可见,之所以会产生a=0,(++a)+(++a)+(+ +a)=7的情况,是由语句的执行顺序决定的,语句执行时候先计算“+”号两边的值,然后再把它们的计算结果相加。当两边都是++a时,两次++先执行,再执行+,这样就造成了“+”号两边的值是一样的,2+2=4,其他的依次类推。
Copyright © 2005-2006 Solrex Yang. All rights reserved.

推荐一个BLOG

俗务缠身,准备考试,申报优秀班级材料,还有作业,不说了。写不了那么多,但BLOG里老是些技术文章也挺碍眼的,就在这推荐个比较欣赏的BLOG吧。

这个BLOG里主要是关于投资咨询方面的文章,尤其是我们系那么多想考金融的研究生,看了估计能有些好处,主人是易凯投资咨询公司的CEO王冉,有许多对投资事务分析,而且写的条理非常明确,值得一看,许多分析方法也可以学习一下。更新也很频繁。

Web地址是:http://blog.sina.com.cn/m/wangran
如果你有RSS阅读器,这是RSS种子,直接复制添加即可:http://blog.sina.com.cn/myblog/index_rss.php?uid=1197890497

开源

说开源这个词是个玩笑,意思是把自己做的吴朝阳老师的课的作业大家共享一下,不然也是老有人要。

声明:共享不是说同意抄袭。只是大家为了准备期中考试那么忙,而且不是有太多人坚持上了吴老师的课,做起来可能有些生疏。我只是提供一个可以运行的例子,让大家知道大致该是怎么写,希望不要原模原样的COPY。写的时候还可以参考一下我前一篇文章。也希望大家都能拿到学分,尤其是还有好多学分不够的同学,希望能尽量拿这4分。如果谁能告诉我有些更好的解决方法的话,非常感谢。

下载地址:我的BLOG左侧最上方的个人主页链接,下载就放在主页上。还有一个《STL_Programmer_Guide》的英文文档,对没有MSDN的同学可能有点用处。

注:我的作业使用的头文件和老师要求的不一样,但相似,仅供参考,grade2.txt文件本与grade.txt相同,估计是老师让自己修改为作业格式。吴老师信箱是:wu_zy@nju.edu.cn,讲义和作业在公共信箱里。

Copyright © 2005-2006 Solrex Yang. All rights reserved.

Some Tips On Using MFC and STL and Containers

做计算技术基础课吴老师的作业时候发现的一些问题和解决办法,留做备份。

作业如下:

1.两个输入文件:grade.txt及grade2.txt. grade.txt每行如:"0211111001 张三丰 99"
grade2.txt也有多行,每行形如:"0201121002 周伯通 老玩童 100"
2.用已提供的MyStl.h文件。
3.定义一个输出文件,名为“你的学号+result.txt“。
4.创立一个名为Homework.cpp的文件。
5.在Homework.cpp中用Grade 的CArray, CList, CMap, vector, list, queue, map分别做:
<A>读入grade.txt, grade2.txt于容器(即上述CArray, Clist 等)。
<B>将内容输出至输出文件(见4)。
<C>如果容器可以排序,将内容排序,再将结果输出至输出文件。
<D>删除所有grade==100的记录,再将结果输出至输出文件。

问题一:MFC库的使用

由于平常只是建立空文档,很少使用到MFC库。但当程序中使用到MFC的容器类之后,如果没有选择使用MFC库,会在link时候报出"error LNK2001"错误。
解决办法是在建立Win32 Console Application的时候在向导的第二个对话框里选择"Using MFC as shared dll"复选框。已经建立好工程的,在"工程"->"设置"->"常规"选项卡里找到"Microsoft Fundation Class"下拉框,选择"using MFC as shared dll"即可。

问题二:头文件的包含关系

由于作业涉及到MFC和STL,很多东西老的库和新的都会有冲突,还有命名空间的问题,最好对每个类别建立一个头文件和源程序文件,能尽量的避免出错。
我的方法是,用MFC来处理数据的程序为一个源文件,并在头文件里只包含和MFC有关的东西,其中要包含的系统头文件有:
#include <afx.h> //包含许多基类的声明,例如:CObject,CString
#include <afxtempl.h> //包含模板类的定义
#include <iostream.h> //标准输入输出流
#include <string.h> //包含字符串处理函数
#include <fstream.h> //文件输入输出流
用STL来处理数据的源程序的头文件包括:
#include <fstream> //文件输入输出流,标准C++
#include <iostream> //标准输入输出流,标准C++
#include <string> //字符串,串处理函数,串模板,STL
#include <algorithm> //算法,STL
#include <vector> //向量模板,STL
#include <list> //列表模板,STL
#include <queue> //队列模板,STL
#include <map> //散列表(准确的来说散列表是hash_map,但这里暂且这么称呼)模板,STL
using namespace std; //使用标准名字空间
#pragma warning(disable:4786) //不提示4786号警告,因为VC6.0与标准C++的不全相容性,对长名有警告

问题三:类的定义

由于显然性的两个文件的关系,定义类的时候可以采用继承的方法,注意变量尽量声明成protected类型,这样在派生类里可以直接访问父类的变量。其实在这里并不是完全有必要把数据封装起来,但封装会有很大的好处。比如说,通过重载函数来增加程序的一致性和可读性,重载运算符对算法的支持。下面是在MFC环境下的类定义,相应在标准C++环境下不同的地方主要是CString变为string,BOOL变为:bool,char*也可变为:string。
class cSwordsman
{
public:
cSwordsman(char* Sworder_ID = "",char* Sworder_NAME = "",int Sworder_SCORE = 0);
~cSwordsman();
CString GetId();
CString GetName();
int GetScore();
void SetId(char* Sworder_ID);
void SetName(char* Sworder_NAME);
void SetScore(int Sworder_SCORE);
BOOL operator<(cSwordsman& y);
BOOL operator>(cSwordsman& y);
BOOL operator==(cSwordsman& y);
void FileOut(ofstream& fout);
void ScreenOut();
protected:
CString id;
CString name;
int score;
};
class cLongSwordsman:public cSwordsman
{
public:
cLongSwordsman(char* Sworder_ID = "",char* Sworder_NAME = "",char* Sworder_MONIKER = "",int Sworder_SCORE = 0);
~cLongSwordsman();
CString GetMoniker();
void SetMoniker(char* Sworder_MONIKER);
void FileOut(ofstream& fout);//对父类成员函数的重载
void ScreenOut();
protected:
CString moniker;
};

问题四:文件输入和输出流的参数不同

文件输入输出流其实是一个类,平常所用的:ifstream fin("grade.txt",ios::in|ios::nocreate);其实是对象的初始化。所以在上面可以在FileOut函数的参数里设为:ofstream& fout。这样在函数里就可以直接用fout输出了,通过用ofstream对象的引用做函数参数,避免了频繁的打开文件。
在<fstream.h>和<fstream>中对文件流的定义是相似但不同的,最主要的一个方面表现在打开参数上,<fstream.h>中定义的打开模式是ios::in(输入)形式的参数,而<fstream>中是以ios_base::app(添加)形式的参数。
而且<fstream.h>和<fstream>的成员方法有些使用上差别很大,比如getline。

问题五:函数重载的使用减少工作量

比如由上面两个类的定义,可以使处理相应的类型数据的函数使用相同的名字,而在参数中使用两个不同的类引用作为参数,这样就能通过参数的不同调用不同的函数,而函数名是相同的,减少记忆和出错的可能。

问题六:运算符重载以使用已有算法

在STL的<algorithm>中定义了许多现成算法,比如:sort,就是根据类中"<"的重载来排序的。

问题七:文本文件的读取

文本文件可以用标准输入输出流来读,假如已经定义了ifstream fin("grade.txt",ios::in|ios::nocreate);,就可以像cin一样读取数据,但有时候可能需要更完善的方法,还可以用fin.getline来读入一行,然后再用字符串处理函数对这和串进行处理。

问题八:STL中iterator的使用

iterator实际是一种类型的变量,定义的时候根据模板的不同而不同。在vector,list和queue中,可以把iterator当作指向成员类的指针,用iterator->PublicVar,来使用公有成员变量,用(*iterator).MemFunctions,来使用成员函数。但在map中要注意iterator指向的是一个pair,pair是map模板中定义的一个类,有两个公有成员变量,first和second。其中iterator->first,代表使用的key,iterator->second才是模板成员类的对象。用iterator->second.MemFunctions,来调用成员函数。

Copyright © 2005-2006 Solrex Yang. All rights reserved.

Linux学习笔记(4)

SWAP分区的重建:

由于前面重装系统时候,不小心用第三方软件把硬盘分区表重建了一下,结果就丢失了SWAP分区。
用了下面的方法恢复:

先用第三方软件重新分出一个大小为256M的分区,注意要先保证这个里面没有文件。
重新启动Linux,这个时候可能会启动不了,下面有方法介绍如何重新正确启动。
启动到Linux以后,在控制台界面下(Xwindow里的虚拟控制台不可以,会提示找不到命令。),用下面命令重建SWAP分区:
mkswap -c -v1 -L label /dev/hda*
mkswap是建立swap分区或者swap文件的命令,-c是指在建立分区以前检查硬盘有没有坏道,-v1是指建立一个新的类型swap分区,-L是指建立一个标志,这样挂载的时候可以不考虑硬盘分区,从标志挂载(只能用于新型SWAP分区,即-v1选项必须要有)。标志要不要取决于fstab里面的设置,如果fstab里面对swap是这样定义的话:
LABEL=SWAP-hda3 swap swap defaults 0 0
最好建立一个标志为:SWAP-hda3,这样就不用修改fstab了。/dev/hda*是指要建立为swap分区的那个分区,如果不确定的话可以先用:
fdisk -l /dev/hda查看一下分区表。
这样做好以后,再启动就不会出现SWAP分区失败的情况了。

分区表变化以后如何用GRUB引导启动:

由于分区表的变化,很有可能GRUB找不到Linux内核的位置,这时候需要修改grub.conf来重新定位Linux内核,可以用Linux光盘的第一张选救援模式启动,这时候现有系统会挂载到/mnt/sysimage目录下,从这个目录里找到/boot/grub/grub.conf,修改一下就行了。如果搞不太懂硬盘上的Linux在哪个分区,建议用第三方软件光盘启动查看分区表,找到Linux格式的分区,看哪个是100M左右,就是安装系统时候分给boot分区的大小,就知道该是哪个分区了。

在救援模式下挂载系统时候一定要选择可修改文件,并且有时候虽然提示说失败,实际已经将硬盘上的系统挂到/mnt/sysimage下了。

Copyright © 2005-2006 Solrex Yang. All rights reserved.

浪费时间

如果想浪费时间,装操作系统可能非常适合。这两天我就干了好多愚蠢的事情

NIGHTMARE BEGIN:

觉得XP系统太慢了,装的东西太多,重装一下吧!->
放进去安装光盘,屏幕上方打出一行字,“安装程序正在检查你的硬件配置”(翻译),然后黑屏,半个小时都没有反应,换了3张光盘都是如此。->
怀疑是不是C盘为NTFS分区的缘故,或者是Windows正版验证给动了什么手脚,就用其他程序将C盘全写空。->
还是安装不了,更无奈的是原来的系统也进不去了。算了,安个2000吧。->
2000安装倒是一点事情都没有,安装成功以后,重装了几个程序和系统更新。->
安完系统更新重启电脑的时候忽然想起我还有一键恢复,想想以前是完全格式化过系统,不知道恢复还有没有,就按了一下。->
发现居然还能一键恢复,最不幸的是为了试验能不能用我让它试着恢复了下,看到果然有效忽然想起自己的2000,赶紧停掉,系统提示说你现在结束的话,原来的系统也会被破坏。->
2000果然进不了了,只好再用一键恢复重装XP,这倒是挺顺利。->
可是恢复以后进不去,提示说是system32下的hal.dll有问题,要重新覆盖一个好的。在DOS下给覆盖了一下,还是没用。->
后来猜测是分区表有问题,重建了一下分区表(为Linux SWAP分区的丢失埋下了隐患)。再一键恢复,好了,系统可以进去了。->
XP装好了,OFFICE也安上了,补丁也全打上了,结果,又出现去年的毛病,干别的一点事情都没有,只要一ADSL拨号,马上黑屏掉电重启。5555,我心中那个怒火啊!!!!->
唉,放弃一切努力,准备把XP只当作一个工作站,Linux用来上网和处理其他事务,实在不想再装什么系统了。以后实在闲得没事时候看看能不能装2003 Server吧。->
把以前备份的blog的rss源导入ThunderBird,还有Gmail帐户和Firefox的收藏夹。

END

就这样,两个晚上过去了,一点书都没看。

到现在我仍然不明白两个问题:

1)为什么用XP安装光盘启动系统就黑屏,然后硬盘灯一直亮,都不闪的,但就是没反应。而2000却可以,一点问题都没有。
这个问题百度知道上有人告诉我说是Linux引导的问题,建议我把引导程序安到/boot扇区。现在可以把Linux卸载然后再安装。
但不懂的是为什么2000没问题?

2)为什么ADSL一拨号就重启,就算换第三方拨号程序也没用,安装的时候就会重启。
这个问题我知道是怎么来的,是因为我去年装VMware的时候,没有考虑周全,先把网卡给禁用了,然后VMware也需要虚拟网卡吧,可能写到系统里面什么东西了,就发生冲突了。
可是不明白的是为什么一键恢复以后还是这样?那可是刚安好系统的时候联想的人给做的备份那。而且为什么本地连接没有问题?
要是哪个兄弟知道什么原因,能告诉我,就非常感谢了。
还好还好的是,我平常有比较经常的备份,没有损失什么重要文件。可惜的是我要告别FeedDemon和Outlook,还有迅雷,MSN 8.0,QQ2006。迎接LumaQQ,IM和ThunderBird.
最好的是FC5现在支持SCIM,比原来的那个IIIMF好用多了,输入法那个多啊,不用让我再告别智能ABC的双拼。

Copyright © 2005-2006 Solrex Yang. All rights reserved.

Linux学习笔记(3)

关于GRUB的一些记录

鉴于最近RP的一些危机,电脑也一直在欺负我,就写下了一些遭遇。下面的Linux和GRUB版本以FC4,FC5及其附带的GRUB为例,GRUB大概是0.95版本。

2000重装以后的GRUB恢复:

重装Windows会把MBR(Main Boot Record)覆盖掉,这时候就进不了Linux系统了,可以用很多方法进行GRUB的恢复,我用的可以说是最简单的方式,因为我有FC4的第一张安装盘。
光盘启动,按F5(FC默认,其他版本大概是F4)->
在boot:下输入命令:linux rescue->
出现#提示符后输入命令:chroot /mnt/sysimage 注:意思大概是把内核改为硬盘上的而不是光盘->
在#后输入:grub-install /dev/hda 注:该是把grub重装到第一块硬盘->
重新启动

这里install大概就是把GRUB重装到MBR里,而因为GRUB的引导配置是在/boot扇区下面放着的,所以原来的引导配置都还在,一般情况下不需要更改。可,不幸的是,我恰恰碰到了该修改的情况。

重建GRUB后的Windows系统寻找:

我不知道安装盘为什么会把2000安到第二个区,其实我也不知道这个第二个区是什么意思,大概似乎不是分区。
由于原来的GRUB引导配置对XP的默认是:
rootnoverify (hd0,0) //启动XP系统的扇区
chainloader +1

而现在却启动不了,可以用下面的方法一个一个尝试:
启动后按任意键,出现GRUB引导选择界面->
光标移动到Windows项上,按’e’,就是edit的意思->
将光标移动到第一项启动的分区选择上,再按’e’->
修改(hd0,0),其中前面的0代表是第几块硬盘,默认0为第一块,后面的0代表第几个扇区。->
一般情况下修改后面一个扇区,一个一个的试,改了以后按’b’,就是boot的意思,如果启动不了,按’Esc’,再加1,然后boot.
我是试到了2,才成功的。

修改GRUB的引导配置:

上面的介绍是在启动时候人工修改,但是每次改也是很麻烦的事情(除非你想藉此来增加别人进入你系统的难度),可以到/boot扇区中修改掉GRUB的配置。
用root用户进入Linux,在/boot/grub/目录下找到grub.conf文件,打开,会看到下面的东西(唉,我还是记不住vi怎么用,只好用emacs打开):
default=0 //缺省启动系统标号,0表示FC5,1表示XP
timeout=3 //GRUB启动界面等待时间
splashimage=(hd0,7)/grub/splash.xpm.gz //GRUB默认的背景文件
hiddenmenu //大概是要不要显示选择界面,这个意思是如果不按任意键就直接进入默认系统
title Solrex’s Fedora Core 5(2.6.15-1.2054_FC5) //GRUB选择菜单的选项标题
root (hd0,7) //boot所在扇区
kernel /vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet //Linux内核所在位置
initrd /initrd-2.6.15-1.2054_FC5.img
title Solrex’s Windows XP professional
rootnoverify (hd0,0) //启动XP系统的扇区
chainloader +1
显然修改一下rootnoverify (hd0,0)后面那个0就行了。


Copyright © 2005-2006 Solrex Yang. All rights reserved.

给我的兄弟

有感于周二的晚会,想说又没有合适的契机,而且有些话也不好说,就在这里写两句吧。

菜博弹肖邦的时候技术不合时宜地放出了DV片段,引得全场笑声一片,完全盖过了琴声。从一开始就知道你肯定要生气的了,钢琴是要在安静时候听的,这种环境下有谁会去欣赏呢?他们做的很不对,但我想说的却是一个对待这个的态度问题——这些东西不要太放在心上。这些晚会不是音乐会,本来就不可能有太多人能听懂你的琴,我承认,包括我。也许大家想要的就是一个放松,或者说是一个调剂。在这种场合下,可能你所做的,说得恶俗点,和一个花瓶差不多,希望你看了不要不高兴。

不是每个人的great都可以被人发现的,也不是每个人发现的great都会被别人欣赏的。像我以前说过,好多艺术家所做的就是把他们感受到的写出来、画出来,然后对别人说,看,多么的beautiful。可是很多情况下一些人会摇摇头说:so so。受教育程度和方式的不同会导致认知能力的不同,大家都没有错,但应该起码有的是对人的尊重,这一点,他们没有做到。只是希望你能想开点,take it easy,就全当“对牛弹琴”,而这群牛却被草料吸引了,根本不抬头看一眼。

还有小黑,tears in heaven,给一个女生唱的,可那个女生却不在场。很欣赏你的毅力,大概是你第一次如此认真的追一个女生,我很替你打抱不平,为什么她不答应你这么一个优秀的家伙?能对爱情如此认真的人对朋友也肯定不会差。作为兄弟,对未来的可能嫂子不好说什么,只是想对你说几句话:我知道你是真心喜欢她的,但她心里对你怎么想你清楚吗?按照现在这个状态,如果她答应你以后,你会感到快乐吗?对她一贯对你的态度,你能接受吗?

几个哥们都在劝你,虽然说大家说话只是很玩笑的那种,但还是希望你好好想想。不要反过来说我们先入为主的看法,自各儿的痛自各儿知道。Cheer up, guy!

Copyright © 2005-2006 Solrex Yang. All rights reserved.