|
海边的贝壳<i>“我好像是在海上玩耍,时而发现了一个光滑的石子儿,<br>时而发现了一个美丽贝壳而为之高兴的孩子。<br>尽管如此,那真理的海洋还是神秘地展现在我们面前。”<br>——伊萨克·牛顿</i>
|
mountain @ 02:07 2004-05-01
在燕南评论看到了一篇好文章《中国百年现代化的六次政治选择—从清末改革到邓小平新政》,内容是萧功秦教授在天则经济研究所的一次演讲和演讲后专家的点评与辩论。萧功秦教授演讲中的许多观点都让人觉得值得深思,而批评他的“政治浪漫主义”者们(萧功秦教授语)又那么痛快、犀利,萧功秦教授的回应也不错。思想的碰撞,总是可以产生火花的,这是今年我读到的最好的一篇文章。
永久链接 |
评论(1) |
引用(1)
mountain @ 09:02 2004-04-27
DynAPI.functions = {
DecToHex : function(val){
lo=val%16;
val-=lo;
lo+=48;
if (lo>57) lo+=7;
hi=val/16;
hi+=48;
if (hi>57) hi+=7;
return String.fromCharCode(hi,lo);
},
getColor : function(r,g,b) {
return '#'+DynAPI.functions.DecToHex(r)+DynAPI.functions.DecToHex(g)+DynAPI.functions.DecToHex(b);
},
......
sintable : function(lsin) {
for (var i=0; i<361; i+=1) lsin[i]=Math.sin((i/180)*Math.PI);
},
costable : function(lcos) {
for (var i=0; i<361; i+=1) lcos[i]=Math.cos((i/180)*Math.PI);
}
};
DynAPI源码中的这段JavaScript代码不禁让我想起了Self语言中的种种技巧。在DAVID UNGAR和CRAIG CHAMBERS的论文Organizing Programs Without Classes中,他们讲述了许多基于原型的面向对象语言的编程技巧,象在这里采用的其实就是Naming and Categorizing的技巧。Naming and Categorizing的技巧总的说就是利用对象来构成名字空间,来进一步管理对象和方法。 不知道Self中的 traits, mixin, dynamic inheritance这些技巧是否可以应用到Javascript中。如何写出高质量的OO风格的JavaScript代码,还是一件可以琢磨的事情呀。
mountain @ 23:25 2004-04-25
昨晚一时兴奋,购书四本。因为在维基百科撰写了梁启超的条目,所以买了一本李喜锁、元青著的《梁启超传》;今天这本书已经读完,我的评价不高,觉得作者的史观似乎有点陈旧、老套。头几天读了袁伟时先生在南大的报告—《中国自由民主和法治的开端与挫败》,觉得有些问题谈得非常透彻,所以也就把袁先生的一本老书《帝国落日—晚清大变局》买来了;书现在还没有看,过几天再评。再有两本是艰深的书,也是值得收藏的书,是卡西尔的《人论》和赛尔的《心灵、语言和社会》;买这两本书的缘由是我们宿舍晚间的辩论,观点的交锋让我感觉到了人的差异和社会的丰富,我想起了汤因比和池田大作的对话录,在进行任何讨论之前汤因比在对话录一开始首先就讨论了人的问题,人的问题是首要的问题,所以我买了这两本书。
mountain @ 11:46 2004-04-23
逛商务出版社的涵芬楼书店,购得利玛窦传记一套,上下共两册,当天晚上就一口气读完了这个有趣的传记。下面是我摘抄的利玛窦的生平,原文在这里。 利玛窦于嘉靖三十一年(1552)出生于意大利的马塞拉塔城,从少年时代开始就进入本城的耶稣会学校学习。十六岁到罗马学习法律,同时在耶稣会主办的学校继续学习哲学和神学,师从著名数学家学习天算。……万历五年(1577),他报名参加耶稣会往印度传教的教团。在葡萄牙候船期间,他进入耶稣会士训练东方传教团的中心高因利盘大学短暂学习。……万历六年(1578)三月末,利玛窦从里斯本出发,同年九月中旬到达印度的果阿,在果阿居住四年后,耶稣会负责东方教务视察员派他到中国传教。万历十年(1582)四月,利玛窦从果阿出发,四个月后到达葡萄牙在中国的根据地澳门。……万历十一年(1583),罗明坚、利玛窦一起来到广东肇庆,着手建立在中国大陆的首个根据地。……他们在肇庆建立了中国大陆的第一座教堂,取得了极大的成功。……肇庆、广州爆发了针对传教士的抗议活动。利玛窦在这两个地方无法立足,挑选了一个繁荣的小城市韶州,在粤北建立了又一个传教中心。利玛寞的办法是彻底的中国化,他穿儒服,兴建中国式的教堂,韶州的反传教土事件依旧层出不穷,利玛窦决定到别处争取支持,他跟奉召赴京的兵部侍郎石星一路北行到达南京。但一个外国人除非进贡,否则在北京和南京两个都城无法立足,果然,兵部侍郎徐大任立即命令利玛窦离开南京。……利玛窦沿江返回南昌,出人意料的是,他在南昌取得了极大的成功,他与分封在南昌的皇族后裔建安王和乐安王建立了友好的关系,王室成员、各级官员都对地球仪、玻璃器皿、西式装订的书籍等礼物极感兴趣,利玛窦便在自己的住宅再一次举行“科普”展览,表演先进的记忆方法,出版(交友论),选择适合中国人伦理观的西方伟人语录加以刊行。他放弃建造教堂、公开传教的方法,进一步用中国自高就有的“上帝”偷换·天主”概念。……利玛窦深入到中国的知识分子中间探讨各种哲学问题,但他的传教效果不大。……万历二十六年,利玛窦随同前任南京札部尚书到达北京,但没有丝毫进展,不得不绝望地返回南京,继续在官员王忠铭的庇护下生活。……他同时动手编辑又一本格言集(二十五言),刻印后广为发行。一部分较易接受新生事物者对新的哲学神学极有兴趣,基督教的影响进一步扩大。万历二十八年(1600),利玛窦带领部分随行人员再次向北京进发,他们在临清遇到税监马堂的阻挠,等了足足三个月后,终于通过支持他们的官员的努力,获得万历皇帝事人的允许,直接到皇宫晋见皇帝本人。……万历皇帝对利玛窦的礼物兴趣十足,他特别在皇宫内为自鸣钟盖一座钟楼,并详细询问西方的风俗人情。但是,他们突然遭到逮捕,因为外国人晋见本属礼部官员的职掌范围,而利玛窦一行绕过札部走了捷径。在支持传教士官员的帮助下,利玛窦直接给皇帝上了一个奏折,他们被允许在北京.长期居住,明政府还每隔四个月给他们发一次津贴。……利玛窦开始了广泛的传教活动,他们的足迹上至达官贵人的府邸,下至穷乡僻壤,大量发行教义的宜传物。万历三十五年(1607),在北京的教徒已有四百多人,徐光启、李之藻等著名人物也受洗礼入教。……万历三十八年(1610)三月,利玛窦因病在北京去世,万历皇帝在北京拔出一块基地,利玛窦今天依旧长眠于北京阜城门外。
mountain @ 00:25 2004-04-12
下文的原始出处在维基百科,这个条目由我重新撰写,主要内容来英文版对应的条目的翻译。 单例模式是一种软件设计模式,当我们应用这个模式时,我们限制一个类只能实例化为一个或少数几个对象。许多时候整个系统只拥有一个的全局对象有利于我们协调系统整体的行为。系统的全局对象可以考虑使用单例模式来创建。 实现单例模式的思路是:一个类有一个引用和一个获得类该实例的方法(通常使用getInstance这个名称);当我们调用这个方法时,如果类保持的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的指定方法来得到该类的唯一实例。 单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁。
在Java编程语言中,单例模式应用的例子如下述代码所示: public class Singleton {
private static final Singleton INSTANCE = new Singleton();
// Private constructor suppresses
// default public constructor
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
在C++编程语言中,单例模式应用的例子如下述代码所示(这里仅仅提供一个示例,这个例子对多线程的情况并不是安全的): template [编辑]
站外链接
mountain @ 00:10 2004-04-12
本段文字来自维基百科上我们对繁简体问题的讨论,作者为我本人。 首先说说我为什么要分类:因为我意识到繁简转换是一个复杂的问题,虽然大部分繁简体字之间确实可以一一对映,但也有相当数量的繁简体字之间不是简单的一一对映,所以我想作一个细致的调查。下面先举几个例子说明繁简转换的复杂。 就拿“台湾”的“台”字举例来说,简体的“台”字对应着繁体“臺”、“檯”和“颱”,如果“台湾”一词在台湾确实是写作“台灣”而非“臺灣”的话,那么简体的“台”字对应着四个繁体字“台”、“臺”、“檯”和“颱”。另一方面,一个繁体字也可能映射为多个简体字,具体取决于这个字的含义,比如“乾、乹、亁”这三个字,作“乾坤”的“乾”讲时,被简化为“乾”,但作“乾湿”的“乾”字讲时被简化为“干”字。而“干”字本来在繁体中还有它自己的意思,如“干预”,这样的话,简化的“干”字映射为繁体字时也是一对多的,它既可以映射为“乾”字,还可以保持不变为“干”字。 从上面的例子我们可以看到,我们必须整理细分到同一个字的不同含义,才能正确转换繁简。同时,还有异体字的问题,比如“乹、亁”三个是“乾”的异体字。所有这些,都需要一个细致的调查。然后,我们还有对每一个字给出它们的unicode编码和utf-8编码。 对于我们分类的方案,我觉得是可以讨论的。如果不采用汉语拼音,那么还可以采用部首检字法。用部首检字法还有一个好处,就是Unicode编码本身是采用部首检字法来给字集排序的。 这里有一个难点,就是让计算机确定一个字在某个上下文的具体含义,这是非常困难的,但也是高质量繁简转换所必须的。我想我们可以建立一个词典,用最大匹配法匹配出一个词(这种技术在大陆叫做“分词”),然后再在词的基础上作繁简转化。比如简体的“台”字化为繁体时大概按下面的方式进行:通过分词确定出“台”字所在的词,如果是“台州”就转化为“台州”,如果是“台榭”就转化为“臺榭”,如果是“梳妆台”就转化为“梳妝檯”,如果是“台风”就转化为“颱風”,如果是“台湾”就转化为“台灣”,等等。这个方案不能保证完全正确,但我想足以应付大多数情况。 我设想期望中的程序(程式)应该具备下述特点:
mountain @ 21:41 2004-04-08
重写了维基百科搜集繁简转化资料的页面:Wikipedia:中文繁简体对照表。我计划利用空闲时间,逐步把几千个繁简转化的字的UTF-8编码都搜集全,然后搞清楚繁简转化具体场合,为下一步作繁简转化程序作准备。
mountain @ 06:50 2004-04-07
下文的原始出处在维基百科,这个条目由我创建,主要内容来英文版对应的条目的翻译。 设计模式是在面向对象的系统设计过程中反复出现的问题解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。这个术语的含义目前还存有争议。算法不是设计模式,因为算法致力于解决实现问题而非设计问题。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。 随着软件开发社群对设计模式的兴趣日益增长,已经出版了一些相关的专著,定期召开相应的研讨会,而且Ward Cunningham为此发明了WikiWiki用来交流设计模式的经验。 [编辑]
模式的格式尽管名称和顺序在不同的资料中各有不同,描述模式的格式大致分为以下四个主要部分:
[编辑]
相近的术语对某个问题经常出现的、在设计中应该尽量避免的、坏的设计方案被称为反模式。 [编辑]
设计模式列表[编辑]
基础模式[编辑]
创建型模式[编辑]
结构型模式[编辑]
行为模式[编辑]
并发模式
[编辑]
实时模式[编辑]
其他
[编辑]
相关论题[编辑]
参考资料
[编辑]
站外链接
mountain @ 06:48 2004-04-07
下文的原始出处在维基百科,这个条目由我创建,写作的过程参考了英文版对应的条目,主要内容来自我为讨论班准备的材料。 工作流管理系统(Workflow Management System, WfMS)的主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。 工作流管理系统将业务流程中工作如何组织协调在一起的规则抽象出来,从而分离了具体工作的逻辑和流程组织的逻辑。我们在工作流管理系统的协助下:开发人员遵从一定的编程接口及约定,就可以开发出更具灵活性的事务处理系统;最终用户无需重新开发事务处理系统,就可以自己更改工作流程,以适应业务变化的需要。 [编辑]
系统结构工作流管理系统由如下几部分组成:
mountain @ 06:41 2004-04-07
[编辑]
下文的原始出处在维基百科,这个条目由我创建,写作的过程参考了英文版对应的条目,主要内容来自我为讨论班准备的材料。 工作流(Workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。工作流管理系统(Workflow Management System, WfMS)的主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。 工作流属于计算机支持的协同工作(Computer Supported Cooperative Work,CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。 [编辑]
历史工作流的概念最早可以溯源到1970年代人们开发的办公自动化系统,如施乐帕洛阿尔托研究中心的办公研究小组开发的 Officetalk 系统,当时人们对工作流管理系统的应用前景非常乐观;但由于没有几个实际系统获得成功,相关的基础概念不统一,各种技术条件还未成熟,整个80年代工作流系统的发展处于停滞阶段。进入90年代以后,相关的技术条件逐渐成熟,工作流系统的开发与研究进入了一个新的热潮,但相关的基础概念仍未统一。据调查,截至1995年共有200多种软件声称支持工作流管理或者拥有工作流特征。工作流技术标准化的工业组织-工作流管理联盟(WfMC)也于1993年成立,他们给出了工作流参考模型,并相继制定了一系列工业标准。 [编辑]
参考条目
[编辑]
站外链接
mountain @ 06:39 2004-04-07
下文的原始出处在维基百科,这个条目由我创建,主要内容来英文版对应的条目的翻译。 委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用对象组合来替代继承,它还使我们可以模拟mixin。 [编辑]
简单的Java例子在这个例子里,类C拥有一个类A的属性,类C拥有的方法f()和g()各自将处理转交给类A的f()和g()。 class A {
void f() { System.out.println("A: doing f()"); }
void g() { System.out.println("A: doing g()"); }
}
class C {
// delegation
A a = new A();
void f() { a.f(); }
void g() { a.g(); }
// normal attributes
X x = new X();
void y() { /* do stuff */ }
}
void main() {
C c = new C();
c.f();
c.g();
}
[编辑]
复杂的Java例子通过使用接口,委托可以做到类型安全并且更加灵活。在这个例子里,类C可以委托给类A或类B,类C拥有方法使自己可以在类A或类B间选择。因为类A或类B必须实现接口I规定的方法,所以在这里委托是类型安全的。这个例子显示出委托的缺点是需要更多的代码。 interface I {
void f();
void g();
}
class A implements I {
void f() { System.out.println("A: doing f()"); }
void g() { System.out.println("A: doing g()"); }
}
class B implements I {
void f() { System.out.println("B: doing f()"); }
void g() { System.out.println("B: doing g()"); }
}
class C implements I {
// delegation
I i = new A();
void f() { i.f(); }
void g() { i.g(); }
// normal attributes
void toA() { i = new A(); }
void toB() { i = new B(); }
}
void main() {
C c = new C();
c.f();
c.g();
}
[编辑]
参考
mountain @ 06:27 2004-04-07
下文的原始出处在维基百科,这个条目由我创建,写作的过程参考了英文版对应的条目,主要内容来自我为讨论班准备的材料。 面向侧面的程序设计(aspect-oriented programming,AOP,又译作面向方面的程序设计)是计算机科学中的一个术语,指一种程序设计范型。该范型以一种称为侧面(aspect,又译作方面)的语言构造为基础,侧面是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)。 侧面的概念源于对面向对象的程序设计的改进,但并不只限于此,它还可以用来改进传统的函数。与侧面相关的编程概念还包括元对象协议、主题(subject)、mixin和委托。 [编辑]
基本概念
从主关注点中分离出横切关注点是面向侧面的程序设计的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用,业务逻辑同特定领域问题的关系通过侧面来封装、维护,这样原本分散在在整个应用程序中的变动就可以很好的管理起来。 “面向侧面的程序设计”(aspect-oriented programming)这一术语出现的具体时间已经不可考证了,但该词是由施乐帕洛阿尔托研究中心的Chris Maeda首先提出的。术语“横切”(crosscutting)是由Gregor Kiczales提出的。 [编辑]
例子对于一个信用卡应用程序来说,存款、取款、帐单管理是它的主关注点,日志和持久化将成为横切整个对象结构的横切关注点。 [编辑]
早期工作同许多重大的技术创新一样,面向侧面的程序设计也是在不同的地方被独立发展出来。面向侧面的程序设计的早期工作主要是由下面几个机构和人员作出的。 [编辑]
施乐帕洛阿尔托研究中心
[编辑]
国际商用机器公司托马斯·J·沃森研究中心
[编辑]
美国东北大学
[编辑]
荷兰Twente大学
[编辑]
语言实现最广为人知的面向侧面的程序设计语言是由施乐帕洛阿尔托研究中心开发的AspectJ,该语言可以和Java编程语言结合在一起使用。 [编辑]
站外链接
mountain @ 05:32 2004-04-07
我Blog的副标题引用了伊萨克·牛顿的话,这其实就是我Blog得名的出处。 “我好像是在海上玩耍,时而发现了一个光滑的石子儿,时而发现一个美丽的贝壳而为之高兴的孩子。尽管如此,那真理的海洋还神秘地展现在我们面前。”——伊萨克·牛顿 这段话让我想起以前我自己写给朋友的一段文字,附在下面: 周末我去了海边。这儿天气还算晴朗,蓝天之下便是碧海。小小的海湾对岸是港口,有船停靠在那儿,也有船驶向那茫茫的大海深处。我在海湾的这边,阳光斜射,金黄的沙滩从我脚下延伸到远方,潮水进退,白色的浪花点缀着海岸线。我在沙滩上漫步,心情愉快。浪不断地拍打着岸,我俯身拾着被浪冲上岸的石子,石子五颜六色,都没有了棱角,不知冲刷了多少年。记得高中我站在灯塔之旁,望着不断进退的水和坚硬但终被磨滑了的礁石,内心里满是激动,惊叹这自然的伟力。是呀,这颗掌中小小的石子,浪花曾经拍打过它多少遍,它在这岸边到底走了多远?这弯向远处的海岸线上又睡着多少这五彩的石子呢?宇宙无限,而我们的今生却有限。
mountain @ 02:44 2004-04-07
维基百科上这两天Shizhao没有来,首页的各个项目都没有得到更新。而我的空余时间又不够,没法去作这些,广应付侵权、恢复破坏,就已经够我忙的了。仅仅有不到10个投入的参与者,这就是我们中文维基百科的现状。我担心由于投入的参与者数量太少,使我们已经形成的操作流程和维基文化得不到保持。
mountain @ 02:31 2004-04-07
刚刚重新整理了我的Blog。我想今后应当确立这样一个原则,就是尽量上贴自己原创的文章,除非有特别的理由。今后也不应当为了上贴去找文章来凑数,而是想表达自己的时候才自己写。基于这样的原则,我删去了我Blog上不少转贴过来的文章。 |
|