2007年5月17日星期四

Windows下没有图形界面

Windows是以图形界面的方便易用而行销于世,但如果没有图形界面,该如何控制Windows呢?
昨天虾米管的服务器出现问题了,其无法启动“网络连接”界面来设置网卡的IP地址。我怀疑是某个服务进程损坏了。重装Windows是最后一步庸招,当前还不需要使出来。在没有图形界面的时候,命令行是最有效的工具。
我的方法是编写如下Bat文件,通过 netsh interface 命令修改了网卡的IP地址。
netsh interface ip reset name="本地连接"
netsh interface ip set address name="本地连接" source=static addr=*.*.*.* mask=255.255.255.0
netsh interface ip set address name="本地连接" gateway=*.*.*.* gwmetric=1
netsh interface ip set dns name="本地连接" source=static addr=*.*.*.*
netsh interface ip set wins name="本地连接" source=static addr=none

看来在Windows下,学习命令行还是相当有用的。

2007年3月30日星期五

美丽的素数 伟大的证明[转贴]

(来源: 科学网)

公元前3世纪,古希腊数学家欧几里得已经证明素数的数目是无穷的;2004年,陶哲轩和格林证明存在任意长的素数等差数列,他们的发现揭示了素数中存在的某种规律。

在数学家的眼中,素数是美丽的。就像原子之于化学家、DNA之于遗传学家,素数是自然界中全部数的最基本的结构砖块。那么究竟什么是素数呢?也许任何一位小学三年级的学生都会清楚地回答这个问题:在正整数中,除了1以外,只能被自身和1整除的数就是素数,素数从2,3,5,7,11和17开始……

美丽的素数

1,2,3……是正整数,其他数字如负数、有理数则都是以正整数为基础定义出来的,所以,研究正整数的规律非常重要。因为任何一个整数均可表示为素数的乘积,而且这个表示是唯一的,所以,研究清楚素数的问题非常重要,但从素数中是很难得到一条定理的。

公元前3世纪,古希腊数学家欧几里得已经证明素数的数目是无穷的。今天,陶哲轩和格林证明“存在任意长度的素数等差数列”,揭示了素数中存在的某种规律。

什么是等差数列呢?这是一个古老的数学课题。一个数列从第二项起,从后项减去前项所得的差是一个相同的常数,则这个数列就被称为等差数列。比如,1,3,5是一组由三个数构成的等差数列,1,3,5,7则是由4个数构成的等差数列。

用素数构成的等差数列被称为素数等差数列。比如从5开始,以12为间隔常数,就可以得到这样的序列:5,17,29,41,53,65……但对这个数列来说,只有前5个数是素数,因此,5,17,29,41,53是一个由5个素数构成的等差数列。因为65可以被5和13整除,不是素数,所以这个特定的素数等差数列不可能延展到6个数的长度。

问题出现了:由其他素数构成的等差数列会更长吗?答案是肯定的。事实上,199,409,619,829,1039,1249,1459,1669,1879,2089就是间隔常数为210的10个素数构成的等差数列。

而且,数学家们一直认为,由素数构成的等差数列可以任意长,这个猜想提出的时间太长,以至没有人知道这个问题最初是由谁提出来的。但是,在2004年前,没有数学家能证明它。

永不消失的素数

到目前为止,已知的素数等差数列的长度为23,即由23个素数构成的等差数列,而且这还是在当今最先进的计算机上找到的,这个数列的第一个数是 56211383760397,数之间的间隔常数为44546738095860,最后一位数是56211383760397+ 44546738095860×22.

根据上面的描述,一个比较清楚的事实是:随着自然数数值的增加,素数的分布变得越来越稀疏,要寻找这样的等差素数序列就越来越困难。但是,古希腊数学家知道素数是永远不会彻底消失的,自然界中有无穷多个素数。

尽管在正整数中,素数看起来是以一种随机的方式出现的,但在19世纪末,法国数学家雅克。哈达玛达(Jacques Hadamard)和比利时数学家法勒布赛(Charles de la Vallee-Poussin )证明:一种隐藏的规则存在于素数稀疏的背后。换言之,在看似混乱无序的素数数列中,一定存在某种规律。

而存在任意长的素数等差数列则是素数性质中的另外一种规律。尽管数学家一直认为“存在任意长度的素数等差数列”,但到2004年前,还没有人能证明它的存在。

有关这个问题的一个真正的进展出现在1939年,当时,荷兰数学家Johannes van der corput证明:有无穷多个由3个素数构成的等差数列。那么,由4个素数构成的等差数列的数目是不是也无穷多呢?

伟大的证明

英国大数学家Atath Brown证明,由前面三个素数和后面不超过两个素数的乘积构成的4个数的等差数列有无穷多。

1975年,匈牙利科学院的数学家施米列迪(Endre Szemeredi)证明了一个定理。如果简单地解释,这个定理的意思是在任何不会快速稀疏的整数子集中,肯定会有任意长度的等差数列。世界上只有极少数数学家能懂得这个证明,但施米列迪定理不适合于素数,因为,随着自然数的增加,素数的出现会突然变得稀疏。

2002年,两位20多岁的数学家着手证明施米列迪定理在某种特定性质的素数子集中也成立,他们希望能证明:有无穷多个由4个素数构成的等差数列。为了证明这个问题,陶和格林用了两年多的时间分析证明施米列迪定理的4个完整证明的背后因素。

陶哲轩说:“我们研究施米列迪定理并努力推进它,以便它能解决素数的问题。为了实现这个目标,我们借用这4个证明方法来建造一个施米列迪定理的扩展版。每次当格林和我陷入困境时,其中一个证明的思想总能解决我们的问题。”

两年后,用了一个非常漂亮的方法,格林和陶哲轩解决了问题,但结果实在惊人。2004年4月18日,两人宣布:他们证明了“存在任意长度的素数等差数列”,也就是说,对于任意值K,存在K个成等差级数的素数。例如 K=3,有素数序列3, 5, 7 (每两个差2)……K=10,有素数序列 199, 409, 619, 829, 1039, 1249, 1459, 1669, 1879, 2089 (每两个差210)。他们将长达 50页的论文——《素数含有任意长度的等差数列》——张贴在当日的预印本网站上,并向《美国数学年鉴》(Annals of Mathematics)投稿。

这是一项惊人的成就,他们的发现揭示了素数中存在的某种规律。这是一项伟大的成就,他们的证明立即在国际学术界引起轰动。2004年5月21日出版的美国《科学》杂志报道说,“两位数学家用数论中一个令人眩晕的突破结束了一个问题。”

《发现》杂志将陶哲轩和格林在素数方面的研究评选为2004年100项最重要的发现之一;2004年出版的《现代数论导引》已经引用这篇尚未正式发表的论文所涉及的工作。

据最新消息,格林和陶哲轩的这篇论文已被《美国数学年鉴》接受,即将出版。(王丹红/编译整理)

程序员四大忌 你该如何避免[转帖]

来源:希赛社区 更多内容请登陆:http://bbs.csai.cn/bbs/index.asp

一忌:轻易言败,没有自信

  没有永不放弃精神的程序员,只是一个有程序员名号的假程序员。一个真正的程序员,知道在程序设计的过程中,可能会遇到不计其数的困难和问题,可能有极多的挫折和失败,而成功只有一次。

  就为解决一个问题,我们可能连续十几甚至几十小时的坐在计算机前不停的工作。一个问题解决了,可能又有其它的问题出现。而你要是不能坚持下来,可能从前的一切努力都流失了。轻易言败的人请不要做程序员,你不可能成功。执着是最可贵的。

  执着的程序员都是相信自己的人,每时每刻都会鼓励自己,你做的出来,你能解决,你会成功。这样他才能坚持下去。

二忌:浮华不实,自满自大

  夸夸奇谈的人不是优秀的程序员。整个程序设计的过程就是一个研究学习,应用,再研究学习,再应用的过程。一名优秀的程序员决不会认为自己足够好了,不需要再提高了。自满自足的人不会是好程序员,会很快落后以致落伍。所以越是优秀的程序员越是感觉自己懂得少,不会在人前故意卖弄,这并不是故作谦虚,而是实实在在的感受,亲自体会才能明白。

  浮华的程序员会不懂装懂,不停的强调语言的优劣,平台的好坏。追求所谓最新最时尚的技术,停留在表面问题上。或假做深沉,用不适合的方式做不适合的事情。就像孔已己一样,以为知道"茴"字有四种写法就是学问。最后是简单的作不好,困难的也作不好。

三忌:死气沉沉,不求甚解

  优秀的程序员是充满激情和活力的程序员。求知欲和创造欲是原动力。有求知欲你才能不停的学习,有创造欲你才能不停的超越自己。死气沉沉的程序员已经对程序设计失去了兴趣,很快就会主动或被迫离开。

  创造不是指你要发明什么别人不知道的技术或方法,而是说不能仅仅知道怎么做,还要知道为什么这样做。之后你才能创造,其实程序设计的整个过程就是创造的过程。

四忌:强调客观,忽略自身

  很多程序员都是在失败的时候强调客观因素,而优秀的程序员的程序员都是先反省自己。要明白自己缺陷,再努力去学习。没有人事事都做的成功,也没有人生来就什么会做。所以失败了,多想想自身的原因,这样你才会不停的进步,而不是留在原地抱怨。

2007年3月6日星期二

传统之大略——《我的哲学之路》笔录

   该书概况了汤一介教授的哲学研究心得,可视为一本精湛的传统哲学入门随笔。如果于丹教授的“心得”可给我以传统经典的现代解读的话,那么这本书则从宏观的角度给我以传统哲学体系大体架构。
   汤教授将中国传统哲学的理论体系梳理为三个层次:普遍和谐观念——宇宙人生论;内在超越精神——境界修养论;内圣外王之道——政治教化论。其中所蕴含的古 代朴素辨证法都是从日常生活经验中得来的。汤教授认为普遍和谐是:自然的和谐,人与自然的和谐,人与人的和谐(社会生活的和谐)以及人自我身心内外的和 谐。而中国哲学(包括儒家、道家和中国化的佛教)与西方哲学最大的不同是它是以“内在超越”为特征的;其价值在于把“人”看成是具有超越自我和世俗限制能 力的主体。如此通观古今,为当代之大家。
   汤教授如是研究传统哲学的目的在于将其有价思想元素应用于现代社会。他认为哲学是文化的核心,深刻地反映着一个时代的精神面貌。所以研究并提炼哲学观念可 以总结人类社会文化精华。虽然汤教授认为:自古以来,我们的社会是一个以家族为本位的农业宗法专制社会,这种社会是缺乏开拓性的,比较注重守成,因此不大 注意向外输出自己的文化,在制度和观念上都压制着开拓精神,但他提出:“己所不欲,勿施于人”是可以为不同文化传统的民族和国家所共同接受的伦理准则;他 提倡“和而不同”,其意思是要承认“不同”,在“不同”基础之上形成的“和”(“和谐”或“融合”),才能使事物得到发展;从人类社会发展到今天看,任何 文化不受外来文化的影响是不可能的,也是不可取的。但是只有充分发挥其原有文化的内涵精神,才可以更好地吸收外来文化以滋养本土文化。由此看来汤教授是主 张一种“包容”的“拿来观”与“弘扬”的“送去观”,这比较现在许多困守故纸堆的“保守派学者”要开明许多。

2007年2月27日星期二

ADSL MODEM 设置

今天回来发现无法上 ADSL,打 10000 号咨询后解决了。方案记录如下:
1. 故障表现为 ADSL MODEM 的 ADSL 灯不亮, ISP 技术工程师重新刷新电信端口。
2. 在刷新端口后故障仍未解决。技术工程师问我是否重新启动过该 MODEM,这样
会造成该 MODEM 的工作模式与网络设置不匹配。需要重新设置 MODEM 模式。
(1) 将本机 IP 设置为 192.168.1.11 ,网关设为 192.168.1.1
(2) IE 登录 192.168.1. 1,修改"基本设置-ADSL模式"为 标准 " G.dmt"模
式。保存后,系统会提示"重启"。用软件重启该 MODEM 。
3. 原因是:该 MODEM 长期不用,造成端口无法与远程计算机进行同步操作,且在
本网络中只能使用 G.dmt 模式。

2007年2月25日星期日

EPS图片绘制与转换

在 Latex 中, EPS 是最常用的图片格式。但由于我最常用的 Visio 不支持
EPS 输出,所以我要重新寻找合适的 EPS 图片绘制与转换工具 。

【绘制】
Metapost 和 Asymptote : Metapost 是 Latex 平台使用最广泛的图片绘制环
境,其语法还是很容易学习的。但在 CTex 套件中的 Metapost 在 WinXP2 平台下
编译似乎并不好,有时会出错。所以我最常用的绘制环境是 Asymptote, 其优点
是编译稳定,且是类 C 语法,对于程序员更容易上手。但其支持文档很少,其帮
助文件中对于支持包的解释更少,常常需要直接阅读 asy 代码。

【转换】
(1) bmeps: CTex 套件中这个工具可以将 JPG/TIFF/PNG 格式的图片转换到
EPS 格式。由于在编译 Latex 之前总要进行对应的转换,可以用下面的 Windows
命令行来批处理(保存在 BAT 文件中运行)。
for %%f in (*.jpg) do D:\CTeX\texmf\miktex\bin\bmeps.exe -c -t jpg %%f
%%~nf.eps
for %%f in (*.png) do D:\CTeX\texmf\miktex\bin\bmeps.exe -c -t png %%f
%%~nf.eps
for %%f in (*.tiff) do D:\CTeX\texmf\miktex\bin\bmeps.exe -c -t tiff
%%f %%~nf.eps
(2) 我使用了 eps2png(linux)、AdvanceBatchConverter(Windows)和
ReaConvert(Windows)这三个软件来进行 EPS 到 JPG/PNG 格式的转换,但效果
都不是很好,会出现锯齿感。

【数据可视化】
gnuplot:在编写 Latex 文件中,常要将一些数据进行图表化。我以前的方法
是在 Excel 中导入数据绘制图表,然后导出为 JPG 文件,再转换为 EPS 格式。
如果遇到大规模数据则在 Matlab 中编写个小程序来绘制。现在看来这都是很"笨
拙"的方法。现在我使用 gnuplot 来进行数据绘制,该软件是一个数据绘制环境,
可以对数据进行2D/3D绘制,并提供多种图片格式输出(如JPG/EPS),甚至可直接
输出 Latex/Metapost等代码。

2007年2月24日星期六

Delphi中的UI组件控制

Delphi的VCL设计精妙,给现代许多Framework提供了良好的基础与开发思路。在
Delphi中,继承自TControl的UI组件可以在运行期进行遍历并能够修改其属性。比
如常见的选择框样例,某个选择框的点选决定了一个GroupBox中多个组件的状态。
我写了一个简单的Delphi函数来完成这个功能。
unit FuncComponentDisplay;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
ComCtrls, StdCtrls, ExtCtrls;


procedure SwitchGroupBoxState(CheckBox: TCheckBox; ParentObj: TControl );

implementation

{ TComponentDisplay }

procedure ChangeEditDisplay(aEdit: TEdit;
State: Boolean);
begin
aEdit.Enabled := State;
if State then begin
aEdit.Color := clWindow;
end
else begin
aEdit.Color := clBtnFace;
end;
end;

procedure ChangeButtonDisplay( aButton:TButton; State:Boolean );
begin
aButton.Enabled := State;
end;

procedure ChangeCheckBoxDisplay( aCheckBox:TCheckBox; State:Boolean );
begin
aCheckBox.Enabled := State;
end;

procedure ChangeRadioButtonDisplay( aRadioButton:TRadioButton;
State:Boolean );
begin
aRadioButton.Enabled := State;
end;

procedure ChangeProgressBarDisplay( aProgressBar:TProgressBar;
State:Boolean );
begin
aProgressBar.Enabled := State;
end;

procedure ChangeTrackBarDisplay( aTrackBar:TTrackBar; State:Boolean );
begin
aTrackBar.Enabled := State;
end;

procedure ChangeListBoxDisplay( aListBox:TListBox; State:Boolean );
begin
aListBox.Enabled := State;
if State then begin
aListBox.Color := clWindow;
end
else begin
aListBox.Color := clBtnFace;
end;
end;
procedure ChangeComboBoxDisplay( aComboBox:TComboBox; State:Boolean );
begin
aComboBox.Enabled := State;
end;

procedure ChangeMemoDisplay( aMemo:TMemo; State:Boolean );
begin
aMemo.Enabled := State;
if State then begin
aMemo.Color := clWindow;
end
else begin
aMemo.Color := clBtnFace;
end;
end;

procedure SwitchGroupBoxState(CheckBox: TCheckBox; ParentObj: TControl );
var
I: Integer;
TempObj : TComponent;
begin
for I := 0 to CheckBox.Owner.ComponentCount - 1 do begin // Iterate
TempObj := CheckBox.Owner.Components[I] ;
if (TempObj is TControl) then begin
if (TempObj as TControl).Parent = ParentObj then begin
if ( TempObj is TEdit ) then begin // TEdit State Switch
ChangeEditDisplay( (TempObj as TEdit), CheckBox.Checked );
continue;
end;
if ( TempObj is TButton ) then begin
ChangeButtonDisplay( (TempObj as TButton), CheckBox.Checked );
end;
if ( TempObj is TCheckBox ) then begin
ChangeCheckBoxDisplay( (TempObj as TCheckBox), CheckBox.Checked );
continue;
end;
if ( TempObj is TRadioButton ) then begin
ChangeRadioButtonDisplay( (TempObj as TRadioButton),
CheckBox.Checked);
continue;
end;
if ( TempObj is TProgressBar ) then begin
ChangeProgressBarDisplay( (TempObj as TProgressBar),
CheckBox.Checked);
continue;
end;
if ( TempObj is TTrackBar ) then begin
ChangeTrackBarDisplay( (TempObj as TTrackBar), CheckBox.Checked);
continue;
end;
if ( TempObj is TListBox ) then begin
ChangeListBoxDisplay( (TempObj as TListBox), CheckBox.Checked);
continue;
end;
if ( TempObj is TComboBox ) then begin
ChangeComboBoxDisplay( (TempObj as TComboBox), CheckBox.Checked);
continue;
end;
if ( TempObj is TMemo ) then begin
ChangeMemoDisplay( (TempObj as TMemo), CheckBox.Checked);
continue;
end;
end;
end;
end; // for
ParentObj.Enabled := CheckBox.Checked ;
end;

end.

其调用方法是:


procedure TForm1.CheckBox1Click(Sender: TObject);
begin
SwitchGroupBoxState( ( Sender as TCheckBox ), GroupBox1 );
end;