20070525

隔直通交,电容(转载)

勇揭品牌机的内幕:所谓高保真音箱的猫腻 台式机-计世网

通常情况下,电脑有源音箱采用的2分频方式,即音频信号的高频成分和低频成分,分别由高音扬声器和低频扬声器来表现。这是由扬声器的分工决定的,高频扬声器适合重放较高频率的声音成分,而低频扬声器则适合于重放低频率的声音成分。低档的有源音箱中,往往只采用一个分频电容来进行分频,由于分频电容具有"阻低通高"的特性,因此高音扬声器往往串联着一个分频电容,造成低音与高音混在一起,效果令人难以接受。

中国互联网的未来(转载)

阅读文章

发信人: smokering (少年阿凡提), 信区: SF
标  题: [合集] 中国互联网的未来
发信站: 水木社区 (Fri May 25 01:20:37 2007), 站内

☆─────────────────────────────────────☆
   slli (老良) 于  (Sun Mar 25 23:17:55 2007)  提到:

发信人: shaoly (磊立凤行・宝宝执宝宝猪之手.与宝宝猪偕老), 信区: News
标  题: 中国互联网的未来
发信站: 水木社区 (Sun Mar 25 13:54:15 2007), 站内


[发表评论] [字体:大 中 小] [打印] [进入博客] [进入论坛] [推荐给朋友]
 
中国互联网真正的未来在于由娱乐的转向商务的,由娱乐消费品变成生活必需品。

月初,谷歌在北京举办了"互联网世纪论坛",并请到了被誉为"互联网之父"的Vinton G.Cerf博士与中国的业内人士见面。

这样的一个场合,除了要向Vinton频频抛出各种互联网的历史和现状相关的问题之外,我想大多数人都想从这位互联网之父的口中得到这样一个答案:互联网的未来是什么?

Vinton给出的答案足够震撼:星际互联网。Vinton目前在美国喷气推进实验室担任访问科学家,在那里从事星际互联网标准的设计。正是在1973年,Vinton和同伴Bob Kahn联合发明了互联网基础协议"TCP/IP",奠定了互联网技术的基础。

这样的答案对目前的中国互联网而言,恐怕实际的意义并不是很大。但是趁着谷歌营造的这个氛围,我倒是好好思考了一番:中国互联网的未来到底是什么?我想这样的答案还是得从历史中去寻找。中国互联网已经走过十年多的时间,我们到底取得了什么样的成就呢?

长久以来我们总是以财务数字来界定互联网公司的价值。如果我们抛却财务,改用价值的视角来看待我们的互联网公司,扪心自问,现存的中国互联网公司中,哪些公司是我们这些身处高科技革命时代的人群所不能或缺的呢?新浪也许算一个,腾讯也许是另一个,携程恐怕是最后一个。剩下的那些做网络游戏、 无线增值以及各种提供Web2.0服务的公司,它们真的已经不可或缺了么?

经常听到一些人士对中美互联网的对比:中国互联网是娱乐的,而美国互联网是商业的。甚至还有些业内人士以此为傲,我们在娱乐应用上超越了美国。但事实真是如此么?且不说中国互联网在商业价值上和美国互联网有天壤之别,即使从创新性和公司治理水准上来比较,中国互联网公司也是很难堪的。为什么会造成现在的局面呢?

我想先讲一个故事。我的一个朋友最近空降为一个医药公司的高管。前段时间他和我分享了自己在公司的惊讶发现:从公司治理的角度看,这个老牌的医药公司简直不堪入目,每年近亿元的广告费不知投向何处,公司10年间竟然没有推出一款新药,团队也极其臃肿效率低下;但是从财务角度看,这个公司却又好得让人惊讶,每年数亿元人民币的收入,公司账户上也存有数亿元人民币的现金,而且公司本身也没有任何贷款和欠债。这个朋友最后总结的原因是,行业暴利让这个公司在极其不规范的状态下持续赢利,但身在其中的人已经感受到重重危机。

实际上中国互联网恰恰和医药行业走了类似的轨迹。无线增值和网络游戏带来的暴利机会,为中国互联网掩盖了很多问题。不需要创新,不需要高水准的公司治理,中国大多数互联网公司总是能够依靠这两个暴利收入管道,打动投资商,打动资本市场。最近几年的采访中,我曾数次向那些雄心勃勃的创业者们问询这样一个问题:公司如何盈利?得到的回答多数是广告或者无线。中国互联网已经成为一个没有技术含量的行业,而当无线和网络游戏的暴利泡沫破灭后,这些身在其中的公司将为此埋单。

回到开始的那个问题:中国互联网的未来到底在哪里呢?我想真正的未来不是Web2.0,不是视频,也不是其他什么让人眼花缭乱的技术或者概念。真正的未来在于中国互联网由娱乐的转向商务的,由娱乐消费品变成生活必需品。

值得注意的是,这个趋势已经开始显现。从去年开始已经有很多的中国概念股开始向这方面努力,包括腾讯、新浪、Tom在线等,这些公司2007年在这方面都有着雄心勃勃的计划。此外,越来越多的创业者也正在瞄准这个方向,比如易趣创始人邵亦波和谷歌前亚洲首席市场官王怀南便在近期开通了一个以母婴为核心的网站。(n105)



 



☆─────────────────────────────────────☆
   smokering (少年阿凡提) 于  (Mon Mar 26 10:33:29 2007)  提到:


【 在 slli (老良) 的大作中提到: 】
: 【 以下文字转载自 News 讨论区 】
: 发信人: shaoly (磊立凤行・宝宝执宝宝猪之手.与宝宝猪偕老), 信区: News
: 标  题: 中国互联网的未来
: ...................

说实话,我觉得本贴的贴主对经济学不是很了解,娱乐应用就不是王道了?
影视业、餐饮业、洗浴中心,bbs......

互联网以前没有能够成为生活必需品,是因为缺乏基础,以前的NC、维纳斯、
都是在向着这个方向努力,提供一种低廉的终端作为应用基础,培养用户的
使用习惯。这个问题会随着电脑的普及和新一代人登上舞台得到解决。



☆─────────────────────────────────────☆
   MSC0NFIG (加油加油!) 于  (Mon Mar 26 10:34:28 2007)  提到:

        电脑的意义在于提供人机接口,其它的都可以用服务器解决

【 在 smokering (少年阿凡提) 的大作中提到: 】
: 说实话,我觉得本贴的贴主对经济学不是很了解,娱乐应用就不是王道了?
: 影视业、餐饮业、洗浴中心,bbs......
: 互联网以前没有能够成为生活必需品,是因为缺乏基础,以前的NC、维纳斯、
: ...................



☆─────────────────────────────────────☆
   Jungle (自由的荆棘~~十年树木) 于  (Mon Mar 26 10:45:09 2007)  提到:

手机啊,这个是以后的最现成的终端

【 在 smokering (少年阿凡提) 的大作中提到: 】
: 说实话,我觉得本贴的贴主对经济学不是很了解,娱乐应用就不是王道了?
: 影视业、餐饮业、洗浴中心,bbs......
: 互联网以前没有能够成为生活必需品,是因为缺乏基础,以前的NC、维纳斯、
: ...................



☆─────────────────────────────────────☆
   slli (老良) 于  (Mon Mar 26 12:07:50 2007)  提到:

        这个问题比较复杂
        我主要是看到个星际互联网
【 在 smokering (少年阿凡提) 的大作中提到: 】
: 说实话,我觉得本贴的贴主对经济学不是很了解,娱乐应用就不是王道了?
: 影视业、餐饮业、洗浴中心,bbs......
: 互联网以前没有能够成为生活必需品,是因为缺乏基础,以前的NC、维纳斯、

20070524

Matlab, maple, matlab, matcad等数学工具的对比(转载)

我搞计算物理的,说说我机子上常用的东东吧(有些不是GNU的,呵呵)
1.Mathematica 5.0
从大三见到它开始就喜欢上了,以前学高数的时候怎么没见到这个软件呢?Maxima可以
代替Mathematica的部分功能,不过习惯了Mathematica,也就不想再学新的东西了。
Mathematica现在在功能与界面上都要比Maxima要强,至少我觉得是这样的。
现在Mathematica 5.0 for linux的盗版已经有了,用linux还要盗版,hehe;
2.PGI 4.0
Fortran & C 的编译器,据说有些程序它编译出来的比g77快好几倍。做计算的对计算
效率可是很挑剔的,所以一直在用它而没用g77;
3.Emacs
终于有了GNU软件了,Emacs可以同时编译很多的文件,还能对算出来的数据做后期加工
(以前我曾经要取出一个数据文件的奇数行,Emacs轻松搞定)。Emacs是很灵活的东东,
习惯了以后就会发现是个极好用的工具;
4.Xmgr(grace)
xmgr 2.0以后就叫grace了,基本可以代替Origin的功能,一般的数据拟合,变换都
都可以胜任,我们实验室用了很久了。功能更强一点的是gnuplot,可以画xmgr不能画的
三维图,不过是命令行的,不易上手;

几点个人偏见:
1.Matlab学工科的人可能用的比较多,不过强度比较大的计算它的效率很低,还是不如
Fortran,小规模的演算Mathematica完全可以胜任。
2.为什么用Fortran而不用C:
(1) 科学计算用Fortran很久了,大量的程序都是Fortran写的,即使你不用Fortran
计算,至少也得看的懂Fortran.何况现在Fortran的数值计算性能上还是优于C;
(2) C功能上比Fortran强,但是也更容易出错。做计算的整天忙着处理跟计算不相关
的语法问题是很浪费时间的事情。实际上我现在的工作用Fortran 77就可以,Fortran 90
比77更好用,主要是矩阵运算有了专门的函数。没有类,对象,指针,科学计算照样可以
进行。

-------------------

若干数学软件的应用比较

目前,在科技和工程界上著名的数学软件主要有: MatLab、MathematicaMaple和MathCAD,它们各自针对的不同目标,有不同的特色。在学习和研究工作中,我接触比较多的是前三者。

1.MatLab――The Language of Technical Computing

MatLab V是我最先学习的计算软件,目前最新版本是MatLab 6.5。MatLab原是Matrix Laboratory在70年代用来提供Linpack和Eispack软件包的接口程序,采用C语言编写。从80年代出现3.0的DOS版本,逐渐成为科技计算、视图交互系统和程序语言。MatLab可以运行于多个操作平台上,如Windows 9X/NT、OS/2、Macintosh、Unix、Linux等。

MatLab程序主要由主程序和各种工具包组成,其中主程序包含数百个内部核心函数, 工具包则包括复杂系统仿真、信号处理工具包、神经网络工具包、图像处理工具包、统计工具包等。MatLab是数值计算的先锋,它以矩阵作为基本数据单位, 在应用线性代数、数理统计、自动控制、数字信号处理、动态系统仿真方面已经成为首选工具,同时也是科研工作人员和大学生、研究生进行科学研究的得力工具。

MatLab的功能非常强大,可编程,支持C、Fortran等程序语言,附带Editor编辑器、图片处理等应用程序,和数百兆的帮助说明文档,使用相当方便。但是占据的系统资源也相当惊人;因此,我主要用它来完成后期计算、以及数据、图形的进一步处理。

2.Mathematica――The way the world calculates

Mathematica是由美国物理学家Stephen Wolfram领导的Wolfram Research开发的数学系统软件。它拥有强大的数值计算和符号计算能力,目前最新版本是Mathematica 4.2。

Mathematica的基本系统主要是用C语言开发的,因而可以比较容易地移植到各种平台上,如Mac OS、Linux等,Mathematica是一个交互式的计算系统,所接受的命令被称作表达式,系统在接受了一个表达式之后就对它进行处理,然后再把计算结果返回。Mathematica对于输入形式有非常严格的规定,虽然给使用者造成一些不便,一点微妙的输入差别就会出现完全出乎用意的结果,但这恰恰是其魅力所在,Mathematica的输入与输出格式也更让我们习惯。

鉴于Mathematica强大的符号运算能力,我主要用它来验证我的公式推导和做一些尝试性的推测,同时配合MatLab的数值计算功能。在实际工作中,我发现Mathematica的计算结果与计算机的性能有很大关系,不仅体现在速度方面;某些运算繁琐的题,在低档机上是得不到结果的;此外,它往往不能简化为我们所希望的表达式,因此,经常需要观察比较甚至更改计算结果的形式。

3.Maple――A comprehensive computer system for advanced mathematics

Maple是由Waterloo大学开发的数学系统软件,目前最新版本为8.0,它不但具有精确的数值处理功能,而且具有很好的符号计算功能,是MatLab和Mathematica的很好的折中选择,包括代数、分析、离散数学、图形处理、数值计算等领域的工具包;Maple提供了三千多种嵌入函数,支持丰富的运算符号,提供快速的编程处理环境,使用非常方便。

所以,我主要利用Maple来迅速完成一些简单的任务,尤其是在学习、作业的过程中。

4.MathCAD――A broad collection of numerical and symbolic calculation and visualization tools in a familiar scratchpad interface.

MathCAD是美国Mathsoft公司推出的一个交互式的数学系统软件。从早期的DOS下的1.0和Windows下的4.0版本,到引用Maple强大的符号计算能力,到今日的MathCAD 2001i,功能也从简单的数值计算,有了了质的飞跃。

MathCAD是集文本编辑、数学计算、程序编辑和仿真于一体的软件,界面友好、方便灵活,与Microsoft Office等兼容性较好,也适合普通用户使用,做一些简单计算。

比较而言,Maple和MathCAD是两种比较灵活、能干的软件,使用方便、兼容性高;Mathematica具有很强的符号运算、处理能力,能完成许多其它软件不能完成的工作如某些积分、求极限等;MatLab在图形处理、矩阵计算方面占优势;在计算精度和编程方面,可以选择Mathe
-------------------
Maple、MATLAB、MathCAD和Mathematica


数学软件四大家 ---Maple、MATLAB、MathCAD和Mathematica

  目前在科技和工程界上比较流行和著名的数学软件主要有四个,分别是Maple、MATLAB、MathCAD和Mathematica。它们在各自针对的目标都有不同的特色。

  一、Maple V 系统
  Maple V是由Waterloo大学开发的数学系统软件,它不但具有精确的数值处理功能,而且具有无以伦比的符号计算功能。Maple V的符号计算能力还是MathCAD和MATLAB等软件的符号处理的核心。Maple提供了2000余种数学函数,涉及范围包括:普通数学、高等数学、 线性代数、数论、离散数学、图形学。它还提供了一套内置的编程语言,用户可以开发自己的应用程序,而且Maple自身的2000多种函数,基本上是用此语 言开发的。
  Maple采用字符行输入方式,输入时需要按照规定的格式输入,虽然与一般常见的数学格式不同,但灵活方便,也很容易理解。输出则可以选择字符方式和图形方式,产生的图形结果可以很方便地剪贴到Windows应用程序内。

  二、MATLAB 系统
  MATLAB原是矩阵实验室(Matrix Laboratory)在70年代用来提供Linpack和Eispack软件包的接口程序,采用C语言编写。从80年代出现3.0的DOS版本,逐渐成 为科技计算、视图交互系统和程序语言。MATLAB可以运行在十几个操作平台上,比较常见的有基于Windows 9X/NT、OS/2、Macintosh、Sun、Unix、Linux等平台的系统。
  MATLAB程序主要由主程序和各种工具包组成,其中主程序包含数百个内部核心函数,工具包则包括复杂系统仿真、信号处理工具包、系统识别工具包、优 化工具包、神经网络工具包、控制系统工具包、μ分析和综合工具包、样条工具包、符号数学工具包、图像处理工具包、统计工具包等。而且5.x版本还包含一套 几十个的PDF文件,从MATLAB的使用入门到其他专题应用均有详细的介绍。
  MATLAB是数值计算的先锋,它以矩阵作为基本数据单位,在应用线性代数、数理统计、自动控制、数字信号处理、动态系统仿真方面已经成为首选工具, 同时也是科研工作人员和大学生、研究生进行科学研究的得力工具。MATLAB在输入方面也很方便,可以使用内部的Editor或者其他任何字符处理器,同 时它还可以与Word6.0/7.0结合在一起,在Word的页面里直接调用MATLAB的大部分功能,使Word具有特殊的计算能力。

  三、MathCAD 系统
  MathCAD是美国Mathsoft公司推出的一个交互式的数学系统软件。从早期的DOS下的1.0和Windows下的4.0版本,到今日的8.0版本,功能也从简单的数值计算,直至引用Maple强大的符号计算能力,使得它发生了一个质的飞跃。
  MathCAD是集文本编辑、数学计算、程序编辑和仿真于一体的软件。MathCAD7.0 Professional(专业版)运行在Win9X/NT下,它的主要特点是输入格式与人们习惯的数学书写格式很近似,采用WYSWYG(所见所得)界 面,特别适合一般无须进行复杂编程或要求比较特殊的计算。MathCAD 7.0 Professional 还带有一个程序编辑器,对于一般比较短小,或者要求计算速度比较低时,采用它也是可以的。这个程序编辑器的优点是语法特别简单。
  MathCAD可以看作是一个功能强大的计算器,没有很复杂的规则;同时它也可以和Word、Lotus、WPS2000等字处理软件很好地配合使用,可以把它当作一个出色的全屏幕数学公式编辑器。

  四、Mathematica 系统
  Mathematica是由美国物理学家Stephen Wolfram领导的Wolfram Research开发的数学系统软件。它拥有强大的数值计算和符号计算能力,在这一方面与Maple类似,但它的符号计算不是基于Maple上的,而是自己开发的。
  Mathematica的基本系统主要是用C语言开发的,因而可以比较容易地移植到各种平台上,Mathematica是一个交互式的计算系统,计算 是在用户和Mathematica互相交换、传递信息数据的过程中完成的。Mathematica系统所接受的命令都被称作表达式,系统在接受了一个表达 式之后就对它进行处理,然后再把计算结果返回。Mathematica对于输入形式有比较严格的规定,用户必须按照系统规定的数学格式输入,系统才能正确 地处理,不过由于3.0版本引入输入面板,并且可以修改、重组输入面板,因此以前版本输入指令时需要不断切换大小写字符的繁琐方式得到很好的改善。3.0 版本可以用各种格式保存文件和剪贴内容,包括RTF、HTML、BMP等格式。

  五、四种软件的比较
  选用何种数学软件?如果仅仅是要求一般的计算或者是普通用户日常使用,首选的是MathCAD,它在高等数学方面所具有的能力,足够一般客户的要求, 而且它的输入界面也特别友好。如果要求计算精度、符号计算和编程方面的话,最好同时使用Maple和Mathematica,它们在符号处理方面各具特 色,有些Maple不能处理的,Mathematica却能处理,诸如某些积分、求极限等方面,这些都是比较特殊的。如果要求进行矩阵方面或图形方面的处 理,则选择MATLAB,它的矩阵计算和图形处理方面则是它的强项,同时利用MATLAB的NoteBook功能,结合Word6.0/7.0的编辑功 能,可以很方便地处理科技文章。



mathematica 值得信赖,国外很多著名的大学都在用它作解析计算和公式的推导,证明,算法的研究, 非常好的数学研究软件,我个人认为是No.1。它的数学分析可视化无与伦比。综合性能和另一个著名的软件Maple相比,又过之而无不及,要知道世界上绝 大部分的量子物理,天体物理论文中的公式推导都由它完成。绝对高端但又易用,是数学,力学,物理研究人员的好帮手,甚至它的数值计算也完全可以应付学术研 究。mathematica 和 Maple 的最新版本在用户公式的输入上都有很大改进,更加方便,随意。

北美不少Top大学的弹性力学,板壳理论,有限元等数学力学理论课的作业和Project都要求用它来完成。 我个人认为, 作为计算力学的工作者,从掌握语言的角度来讲, 只要掌握3种计算语言足够了,mathematica用来作解析法和数学模型的研究,Matlab用来实现数值算法(当然仍然可以还用 mathematica), Fortran用来写可执行源代码。没必要把自己陷入众多的语言和计算软件之中,没有意义的。

20070521

算法训练

刘先毅提到 现在的成绩与最初选拔时有很大的进步,练习是有意义的。
1.从有语法错语,无法调通程序到可以AC题目;
2.对提高工程能力有作用;
3.对其他科目实验有作用。

关怡然提到 应该如何训练。
关健问题不在于理解与否,而在于速度。
1.反复做同一道典型题,直至可以在规定时间内完成某个算法。
  如在半小时写出最小生成树算法。
2.对比
  1)大量语法错误,需要实验语法;
  2)不知道某功能应用何种函数实现,函数的参数表,需要实验函数的执行效果(作用);
  3)不知道经典算法,需要现场考虑算法;
  4)不能熟练写出经典算法,需要现场调试。

20070518

什么才是完了(转载)

Shredder Home

一个探险家在热带雨林里被一群食人族土著包围了。
他想这下完蛋了,默念道:"上帝啊,我完了。"
"不,你还没有完,"这时天空暗了下来,一个声音从云中传来,
"捡起你身边的石头,把土著首领的脑袋砸开花。"
探险家用石头砸死了站在他面前的土著首领。
于是发现那100多个土著居民愤怒了。
"好,"那个声音又传来,"这下你才完了。"

20070517

神奇的英文字典WordNet(转载)

[http://www.centory.net/bencandy.php?fid=75&id=8911]


  WordNet是美国普林斯顿大学的心理学家、语言学家们共同研发的一套用以研究语言学的词汇参考系统。对一般用户而言,与其把WordNet理解为一 个语言学的科研项目,不如把它当作一个词典软件来用。WordNet的设计是仿照人对单词记忆与理解模式进行的,因此它对正在学习英语的中国学生显得很有 针对性。

  WordNet目前最新版本是2.0,可以在Windows和Unix平台下运行。用户可以到 http://wordnet.princeton.edu/wn2.0 免费下载、安装。(Windows平台的安装文件约12M)。

  软件的安装很简单,装好后大约需要占用39M的磁盘空间。软件提示和解释均为英文,但是用过词典类软件的用户应该很容易上手。软件的界面如上图所示,简直可以用"其貌不扬"来形容,不过可千万不要以貌取人啊……

   我们赶紧来看看WordNet的功能。举个简单的例子:我们首先在Search word框中输入一个人人都认识的单词"suit",立即得到6个名词词义(称为sense)和4个动词词义。其中名词词义之一"诉讼" (lawsuit, suit, case, cause, causa -- a comprehensive term for any proceeding in a court of law whereby an individual seeks a legal rem edy)是中国学生往往容易忽略的词义。既然它被WordNet列为第一位,让我们展开来看看,"suit是一类什么东西?"(点击按钮Noun,选择第 3项"suit is a kind of …", 。)(注:解释中出现的英文限于篇幅有删节,中文为笔者注。) 立即得到:

  Sense 1(词义1)

  lawsuit, suit, case, cause, causa -- 诉讼
  => proceeding, legal proceeding, proceedings -- 法律行动
  => due process, due process of law -- 预定的法律程序
  => group action -- 团体行为
  => act, human action, human activity -- 人类的行为
  => event -- 事件

  这下即使不看详细解释,suit一词的这个含义我们也掌握的八九不离十了吧。再让我们来看看"都有什么东西是suit(案件)?"(点选… is a kind of suit)

  Sense 1(词义1)
  lawsuit, suit, case, cause, causa -- 诉讼
  => civil suit --民事诉讼
  => class action, class-action suit -- 共同诉讼
  => countersuit -- 反诉
  => criminal suit -- 刑事诉讼
  => moot -- 假设案,被法律系学生用作练习辩论的假定案件
  => paternity suit, bastardy proceeding -- 生父确认诉讼

   出现的都是日常生活中经常听到却不知英文的词组,看到上面后便不觉得神秘了。"咦?假设案的英文就是moot,这么简单?……"长见识了吧!让我们再来 看看动词:"suit" 适合)的等价词汇(Coordinate Word,这可能是一种搜索引擎会利用到的算法,当一个关键词无法找到需要的内容时系统自动用另外的词来替代。)

  Sense 1

  suit, accommodate, fit -- (be agreeable or acceptable to) 适宜于
  -> meet, fit, conform to 适应,符合,遵照
  => coordinate 调整,使互相配合
  => fit the bill, fill the bill 正合需要
  => behoove, behove 应该、有必要
  => satisfy, fulfill, fulfil, live up to 满足,实现,实践
  => suit, accommodate, fit 合身

   这难道不比查专门的同义词词典更有效?还有更绝妙的:通常我们查询单词,都是输中文查英文,或者输英文查中文,英文与中文是对应的。然而,当我们不能准 确描述某个英文单词的中文名称时,或者词义过于生僻上述方法就失效了。不要怕!我们有WordNet来帮忙!

  我们想查"鬃毛" 的英文怎么说,不用去找动物学专业的汉英词典,只需在WordNet中输入"毛发"(hair),利用WordNet中的"哪些东西是……",即可得到 "mane"(第3项)。如果我们需要了解"三架马车"这句人们耳熟能详的中文对应的英文是哪个词,恐怕一般的字典是帮不上忙的。但我们都学过"马车"是 "carriage",再"哪些东西是……",便轻松查找到"troika"这个俄语外来语。同时还可以了解其他19种形形色色的马车。(如下图)这对扩 大词汇量来说是个不可多得的好机会。

  WordNet为什么查词这样强劲呢?原来语言专家认为,语言的词汇是按照同义词类组织在一起 的,每个词类都对应一种"潜在的概念",词类与词类之间通过不同的方式联系。WordNet正是基于这种想法编写的。这套系统中,英语单词被分为名词、动 词、形容词、副词四大类(单词可以跨类),每类对应不同的查询方法。名词有"什么是……",动词有"……是一种做什么的方法"等。
  此外,对于开发人员,WordNet还提供了一套编程接口,详情可参考它的网站。赶紧下载一套神奇的WordNet装到自己电脑上试一试吧!你也会有很多单词新发现的。

20070516

正确使用DataSet和DataReader(转载)

July 26, 2006
正确使用DataSet和DataReader
Filed under: SQL&DB Accessing

By Riven Huang 2006.07.26
参照
Why I Don't Use DataSets in My ASP.NET Applications(by Scott Michell)
http://aspnet.4guysfromrolla.com/articles/050405-1.aspx

Performance Comparison: Data Access Techniques
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdadotnetarch031.asp

首先需要理解DataSet 和 DataReader的设计目标:
DataSet可以理解成一个小型的,存在于内存中的数据库,包含多个data table,table之间
可存在约束关系.
DataSet和数据库无关,由DataAdapter来负责对数据库的处理,一旦数据填充结束,就和数据库
断开连接.
DataSet对XML的支持比较好.

DataReader可以理解成程序和数据库之间的桥梁.只能顺序的,从数据库中读取记录.
DataReader是和数据库相关的,所以存在sql, ole等多个版本的DataReader.

从使用上来看,

使用DataReader需要以下步骤:
// 1. 建立连接
SqlConnection myConnection = new SqlConnection(conn);

// 2. 执行查询
SqlCommand myCommand = new SqlCommand(myConnection, sqlText);

SqlReader myReader = myCommand.ExecuteReader();

// 3. Read
while(myReader.Read())
{

}

// 4. Close connection
myConnection.Close();

使用DataSet需要以下步骤:
// 1. 建立连接
SqlConnection myConnection = new SqlConnection(conn);

// 2. 生成command 和 adapter
SqlCommand myCommand = new SqlCommand(myConnection, sqlText);
SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand);

// 3. 生成dataset并填充
DataSet myDataSet = new DataSet();
myAdapter.Fill(myDataSet);

// 4. Close connection
myConnection.Close();

如果使用UIControlo显示数据,对于dataset和datareader的操作是相同的:
把dataset或datareader赋给control的DataSource属性,
再调用control的DataBind()方法.

比较:
DataSet的性能比DataReader差很对,同时占用大量的内存.

何时使用DataSet:
1.数据传输.
2.桌面应用.

20070515

Supreme Commander的配置

Minimum Requirements
CPU: Athlon 64 3000+/Intel 2.8ghz
Graphics: Nvidia 6600/X800GTO (SM 2.0)
RAM: 768Mb/1Gb on Windows Vista
HDD: 6GB
Internet: 256k+
Optical Drive: DVD
Software: DX9.0c with Windows XP

Recommended Requirements
CPU: Dual-core CPU (Athlon X2/Pentium D)
Graphics: Nvidia 7800GTX/ATI X1800XT (SM 3.0) or DX10 equivalent
RAM: 1.5Gb
HDD: 6GB
Internet: 512k+ (128k+ upstream)
Optical Drive: DVD
Software: DX10 with Windows Vista
如果我的机器能够长大...它现在一定已经老得快不能自主呼吸了。

试了几个FireFox扩展

1.Better Gmail 0.6.1
  改皮肤的功能不错,鼠标到哪里,哪封信就加亮。
  label color
  macro
2.Clipmarks 2.0.4
  作用是方便选中网页中的某一处,然后复制。
  似乎让机器变慢了,且需要登录。禁用。
3.Download Statusbar 0.9.4.6
  在状态栏显示当前下载状态,可以停止/继续。
4.United States English Dictionary 2.0.0.6
 原以为是词霸类的软件。用于拼写检查。 禁用。
" This extension packages a subset of the original English wordlist created by Kevin Atkinson for Pspell and Aspell and thus is covered by his original LGPL license. The affix file is a heavily modified version of the original english.aff file which was released as part of Geoff Kuenning's Ispell and as such is covered by his BSD license."[ http://www.blogzilla.info/spellchecker/

Wordlist Creator(转载)

Wordlist Creator

via Freeware Home -- new additions on May 14, 2007

Wordlist Creator creates an alphabetical list of the words contained in a text file. Useful if you need to make a dictionary or otherwise provide a list of keywords as a database for example for use with Autocompletion software. (in Business and Productivity)

 
 

Things you can do from here:

 
 


--
重剑无锋,大巧不工。

20070514

Byte array <=> String in C# .Net

Byte myBytes1[]   =   myMemoryStream.ToArray();
String str   =   System.Text.Encoding.Default.GetString( myBytes1  );
Byte myBytes2[]=System.Text.Encoding.Default.GetBytes( str )   ;



Byte   myBytes1[]   =   myMemoryStream.ToArray   ();
String   str   =   (new   UnicodeEncoding()).GetString( myBytes1 );
Byte   myBytes2[]   =   (new   UnicodeEncoding()).GetBytes( str )   ;

20070511

Excel 快捷键和功能键:插入新工作表

Excel 快捷键和功能键 - Excel - Microsoft Office Online

按 Shift+F11 可插入一个新工作表。

Windows中的计时器(SetTimer和CreateWaitableTimer)

Windows中的计时器(SetTimer和CreateWaitableTimer)   
Timers (SetTimer and CreateWaitableTimer) in Windows
       
1.SetTimer
下面的例子创建了一个计时器(不与窗口相关联),该计时器过程函数建了20个消息框。
The following example creates a timer (that is not attached to a window) whose Timer Procedure creates 20 Message Boxes

#include <windows.h>

class foo_class {
  static int counter;
public:
  //static函数,相当于全局
  static void  __stdcall timer_proc(HWND,unsigned int, unsigned int, unsigned long) {
    if (counter++ < 20)
      MessageBox(0,"Hello","MessageBox",0);
    else
      PostQuitMessage(0);
  }
};

int foo_class::counter=0;

WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) {

//第1个参数,MSDN中指出如果置为NULL,即0,不与窗口相关联。
//If this parameter is NULL, no window is associated with the timer and the nIDEvent parameter is ignored.
//第2个参数会被忽略
//第3个参数,300毫秒触发一次
//第4个参数,触发时由函数foo_class::timer_proc响应
int iTimerID = SetTimer(0, 0, 300, foo_class::timer_proc);
  MSG m;
//这是消息循环
  while (GetMessage(&m,0,0,0)) {
    TranslateMessage(&m);
    DispatchMessage(&m);

   }
  return 1;
}

2.CreateWaitableTimer
这个例子演示如何在windows中使用计时器。
计时器被设计为(1)在第1次调用CreateWaitableTimer后2秒触发,(2)此后每3/4秒触发一次。
#define _WIN32_WINNT 0x0400

#include <windows.h>
#include <process.h>
#include <stdio.h>

unsigned __stdcall TF(void* arg) {
  HANDLE timer=(HANDLE) arg;

  while (1) {
    //此处,进程间通信的接收方
    //timer是命名的,因此进程间或线程间没有区别
    WaitForSingleObject(timer,INFINITE);
    printf(".");
  }

}

int main(int argc, char* argv[]) {
  //创建,命名为0,也可以是LPCTSTR,字符串
  //其他进程可以通过OpenWaitableTimer获得此timer的句柄,并对之进行SetWaitableTimer
  HANDLE timer = CreateWaitableTimer(
    0,
    false, // false=>will be automatically reset
    0);    // name

  LARGE_INTEGER li;

  const int unitsPerSecond=10*1000*1000; // 100 nano seconds

  // Set the event the first time 2 seconds
  // after calling SetWaitableTimer
  //2秒
  li.QuadPart=-(2*unitsPerSecond);
  //通过句柄设置timer
  SetWaitableTimer(
    timer,
    &li,
    750,   // Set the event every 750 milli Seconds
    0,
    0,
    false);
  //用TF函数启动worker线程
  _beginthreadex(0,0,TF,(void*) timer,0,0);

  // Wait forever,
  while (1) ;

  return 0;
}


参考:
1.[http://www.adp-gmbh.ch/win/misc/timer.html ]
2.[http://support.microsoft.com/kb/184796],中文的

20070510

能用google cache的firefox extention

  安装了CustomizeGoogle is a Firefox extension that enhances Google search results by adding extra information (like links to Yahoo, Ask.com, MSN etc) and removing unwanted information (like ads and spam).在[ http://www.customizegoogle.com/]。因为看到小众软件上提到这个extention。
  不错,真的能看cache了。

  测试另一个extention,名为torbutton,作为代理。用了之后超时,可能无法访问内置的代理。unistall,继续用SwitchProxy Tool。

20070509

UFC笔记

UFC录像两段
作为外行看到的技术
 肘击
 用肘夹住对方的头,膝盖顶头
 击打对方关或颈部,目的似乎是使颈部受力,而失去平衡
 用腿夹住对方的腰,使自己在地面时保持住,或使自己控制地面的对方
力量很重要,速度和耐力也很重要。

20070508

MIT开放课程 Structure and Interpretation of Computer Programs video下载

MIT开放课程 Structure and Interpretation of Computer Programs video下载:

  教材Structure And Interpretation Of Computer Programs - Mit Press,
  使用Scheme语言
  有免费工具MIT Scheme,
  在[ http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/Tools/detail/Guide-to-MIT-Scheme.htm]
  支持Windows和Linux。

视频下载:
1.flash或mp4
MIT OCW - 6.001 Structure and Interpretation of Computer Programs (1986)
[http://www.archive.org/details/MIT_Structure_of_Computer_Programs_1986]

[ http://ia350602.us.archive.org/3/items/MIT_Structure_of_Computer_Programs_1986/]

2.avi(Divx)或mpg, bit torrent supported
[http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/ ]

  感谢刘典先生推荐[Structure And Interpretation Of Computer Programs - Mit Press],
他告诉我这本书能帮助确定"机制与策略"的分离。
  感谢李粲先生同意刘典先生推荐这本书,李粲先生与刘典先生一同指出《Unix程序设计艺术》中的"机制与策略"正符合我所说的原则。
  感谢不记得什么时间谁请的烤牛肉,它让我们的交流很畅快。

We Live in a Time Division Universe(转载)

[http://www.quantummotion.org/index.html]
我正在读的:

Everyone Can Understand Quantum Mechanics: Motion is random and discontinuous

We Live in a Time Division Universe

The deepest implication of random discontinuous motion lies in that it entangles the world into an inseparable whole in a form of time division.

Our universe is time-divided by God in a completely random way. Everything, from atoms to stars, lives in the time division universe. It looks as if the whole world is composed of many sub-worlds, each one of which occupies one tiny part of the continuous time flow, and the occupying way is discontinuous and random in essence.

Schrodinger's cat in the time division universe Schrodinger's cat in the time division universe

No doubt the new picture will lead to a profound shift in our world view. It implies that our universe is not a mere aggregate of independent existences, but an entangled inseparable whole in the time division form.

We live in a time division universe in reality. More »

Total Commander - Addons分类

Total Commander - Addons:
"Plugins

Packer plugins
Packer plugins offer additional pack formats inside of Total Commander, or allow access to special file formats like CD-ROM images, or list files.
File system plugins
File system plugins allow access to whole file systems via the Network Neighborhood, e.g. to a PocketPC device or a Linux file partition.
Lister Plugins
Lister-Plugins allow to show specific file types via F3, e.g. program code with syntax highlighting.
Content Plugins
Content plugins allow to extract specific data from files, like mp3 tags or photo information (e.g. exposure time). This data can be displayed in file lists, or used in the search and multi-rename functions."

对面向对象设计原则的总结(转载)

[http://dev.csdn.net/author/hotmailmsn/67b483ad2819482682f1cd2f542bcd67.html#]
对面向对象设计原则的总结 - 其他 - CSDN技术中心
 
正如牛顿三大定律在经典力学中的位置一样,"开-闭"原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design或OOD)的基石。其他设计原则(里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则)是实现"开-闭"原则的手段和工具。
 
一、"开-闭"原则(Open-Closed Principle,OCP
       1.1"开-闭"原则的定义及优点
1)定义:一个软件实体应当对扩展开放,对修改关闭( Software entities should be open for extension,but closed for modification.)。即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。
2)满足"开-闭"原则的系统的优点
a)通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。
b)已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。
c)这样的系统同时满足了可复用性与可维护性。
1.2如何实现"开-闭"原则
在面向对象设计中,不允许更改的是系统的抽象层,而允许扩展的是系统的实现层。换言之,定义一个一劳永逸的抽象设计层,允许尽可能多的行为在实现层被实现。
解决问题关键在于抽象化,抽象化是面向对象设计的第一个核心本质。
对一个事物抽象化,实质上是在概括归纳总结它的本质。抽象让我们抓住最最重要的东西,从更高一层去思考。这降低了思考的复杂度,我们不用同时考虑那么多的东西。换言之,我们封装了事物的本质,看不到任何细节。
在面向对象编程中,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需更改,从而满足"对修改关闭";而从抽象类导出的具体类可以改变系统的行为,从而满足"对扩展开放"。
对实体进行扩展时,不必改动软件的源代码或者二进制代码。关键在于抽象。
1.3对可变性的封装原则
"开-闭"原则也就是"对可变性的封装原则"(Principle of Encapsulation of Variation ,EVP)。即找到一个系统的可变因素,将之封装起来。换言之,在你的设计中什么可能会发生变化,应使之成为抽象层而封装,而不是什么会导致设计改变才封装。
      "对可变性的封装原则"意味着:
a)一种可变性不应当散落在代码的许多角落,而应当被封装到一个对象里面。同一可变性的不同表象意味着同一个继承等级结构中的具体子类。因此,此处可以期待继承关系的出现。继承是封装变化的方法,而不仅仅是从一般的对象生成特殊的对象。
b)一种可变性不应当与另一种可变性混合在一起。作者认为类图的继承结构如果超过两层,很可能意味着两种不同的可变性混合在了一起。
使用"可变性封装原则"来进行设计可以使系统遵守"开-闭"原则。
即使无法百分之百的做到"开-闭"原则,但朝这个方向努力,可以显著改善一个系统的结构。
二、里氏代换原则(Liskov Substitution Principle, LSP
 
2.1 概念
定义: 如果对每一个类型为T1的对象O1,都有类型为T2 的对象O2,使得以T1定义的所有程序P 在所有的对象O1都代换为O2时,程序P 的行为没有变化,那么类型T2是类型T1的子类型。
即,一个软件实体如果使用的是一个基类的话,那么一定适用于其子类。而且它觉察不出基类对象和子类对象的区别。也就是说,在软件里面,把基类都替换成它的子类,程序的行为没有变化。
反过来的代换不成立,如果一个软件实体使用的是一个子类的话,那么它不一定适用于基类。
任何基类可以出现的地方,子类一定可以出现。
基于契约的设计、抽象出公共部分作为抽象基类的设计。
2.2里氏代换原则与"开-闭"原则的关系
    实现"开-闭"原则的关键步骤是抽象化。基类与子类之间的继承关系就是抽象化的体现。因此里氏代换原则是对实现抽象化的具体步骤的规范。
    违反里氏代换原则意味着违反了"开-闭"原则,反之未必。
三、 依赖倒转原则dependence inversion principle, DIP
       3.1概念
   依赖倒转原则就是要依赖于抽象,不要依赖于实现。(Abstractions should not depend upon details. Details should depend upon abstractions.)要针对接口编程,不要针对实现编程。(Program to an interface, not an implementation.)
也就是说应当使用接口和抽象类进行变量类型声明、参数类型声明、方法返还类型说明,以及数据类型的转换等。而不要用具体类进行变量的类型声明、参数类型声明、方法返还类型说明,以及数据类型的转换等。要保证做到这一点,一个具体类应当只实现接口和抽象类中声明过的方法,而不要给出多余的方法。
传统的过程性系统的设计办法倾向于使高层次的模块依赖于低层次的模块,抽象层次依赖于具体层次。倒转原则就是把这个错误的依赖关系倒转过来。
面向对象设计的重要原则是创建抽象化,并且从抽象化导出具体化,具体化给出不同的实现。继承关系就是一种从抽象化到具体化的导出。
抽象层包含的应该是应用系统的商务逻辑和宏观的、对整个系统来说重要的战略性决定,是必然性的体现。具体层次含有的是一些次要的与实现有关的算法和逻辑,以及战术性的决定,带有相当大的偶然性选择。具体层次的代码是经常变动的,不能避免出现错误。
从复用的角度来说,高层次的模块是应当复用的,而且是复用的重点,因为它含有一个应用系统最重要的宏观商务逻辑,是较为稳定的。而在传统的过程性设计中,复用则侧重于具体层次模块的复用。
依赖倒转原则则是对传统的过程性设计方法的"倒转",是高层次模块复用及其可维护性的有效规范。
特例:对象的创建过程是违背"开―闭"原则以及依赖倒转原则的,但通过工厂模式,能很好地解决对象创建过程中的依赖倒转问题。
3.2关系
"开-闭"原则与依赖倒转原则是目标和手段的关系。如果说开闭原则是目标,依赖倒转原则是到达"开闭"原则的手段。如果要达到最好的"开闭"原则,就要尽量的遵守依赖倒转原则,依赖倒转原则是对"抽象化"的最好规范。
里氏代换原则是依赖倒转原则的基础,依赖倒转原则是里氏代换原则的重要补充。
3.3耦合(或者依赖)关系的种类:
零耦合(Nil Coupling)关系:两个类没有耦合关系
具体耦合(Concrete Coupling)关系:发生在两个具体的(可实例化的)类之间,经由一个类对另一个具体类的直接引用造成。
抽象耦合(Abstract Coupling)关系:发生在一个具体类和一个抽象类(或接口)之间,使两个必须发生关系的类之间存有最大的灵活性。
3.3.1如何把握耦合
我们应该尽可能的避免实现继承,原因如下:
1 失去灵活性,使用具体类会给底层的修改带来麻烦。
2 耦合问题,耦合是指两个实体相互依赖于对方的一个量度。程序员每天都在(有意识地或者无意识地)做出影响耦合的决定:类耦合、API耦合、应用程序耦合等等。在一个用扩展的继承实现系统中,派生类是非常紧密的与基类耦合,而且这种紧密的连接可能是被不期望的。如B extends A ,当B不全用A中的所有methods时,这时候,B调用的方法可能会产生错误!
我们必须客观的评价耦合度,系统之间不可能总是松耦合的,那样肯定什么也做不了。
3.3.2我们决定耦合的程度的依据何在呢
简单的说,就是根据需求的稳定性,来决定耦合的程度。对于稳定性高的需求,不容易发生变化的需求,我们完全可以把各类设计成紧耦合的(我们虽然讨论类之间的耦合度,但其实功能块、模块、包之间的耦合度也是一样的),因为这样可以提高效率,而且我们还可以使用一些更好的技术来提高效率或简化代码,例如c# 中的内部类技术。可是,如果需求极有可能变化,我们就需要充分的考虑类之间的耦合问题,我们可以想出各种各样的办法来降低耦合程度,但是归纳起来,不外乎增加抽象的层次来隔离不同的类,这个抽象层次可以是抽象的类、具体的类,也可以是接口,或是一组的类。我们可以用一句话来概括降低耦合度的思想:"针对接口编程,而不是针对实现编程。
在我们进行编码的时候,都会留下我们的指纹,如public的多少,代码的格式等等。我们可以耦合度量评估重新构建代码的风险。因为重新构建实际上是维护编码的一种形式,维护中遇到的那些麻烦事在重新构建时同样会遇到。我们知道在重新构建之后,最常见的随机bug大部分都是不当耦合造成的 。
如果不稳定因素越大,它的耦合度也就越大。
某类的不稳定因素=依赖的类个数/被依赖的类个数
依赖的类个数= 在编译此类的时被编译的其它类的个数总和
3.3.3怎样将大系统拆分成小系统
解决这个问题的一个思路是将许多类集合成一个更高层次的单位,形成一个高内聚、低耦合的类的集合,这是我们设计过程中应该着重考虑的问题!
耦合的目标是维护依赖的单向性,有时我们也会需要使用坏的耦合。在这种情况下,应当小心记录下原因,以帮助日后该代码的用户了解使用耦合真正的原因。
3.4怎样做到依赖倒转?
以抽象方式耦合是依赖倒转原则的关键。抽象耦合关系总要涉及具体类从抽象类继承,并且需要保证在任何引用到基类的地方都可以改换成其子类,因此,里氏代换原则是依赖倒转原则的基础。
在抽象层次上的耦合虽然有灵活性,但也带来了额外的复杂性,如果一个具体类发生变化的可能性非常小,那么抽象耦合能发挥的好处便十分有限,这时可以用具体耦合反而会更好。
层次化:所有结构良好的面向对象构架都具有清晰的层次定义,每个层次通过一个定义良好的、受控的接口向外提供一组内聚的服务。
依赖于抽象:建议不依赖于具体类,即程序中所有的依赖关系都应该终止于抽象类或者接口。尽量做到:
1、任何变量都不应该持有一个指向具体类的指针或者引用。
2、任何类都不应该从具体类派生。
3、任何方法都不应该覆写它的任何基类中的已经实现的方法。
3.5依赖倒转原则的优缺点
依赖倒转原则虽然很强大,但却最不容易实现。因为依赖倒转的缘故,对象的创建很可能要使用对象工厂,以避免对具体类的直接引用,此原则的使用可能还会导致产生大量的类,对不熟悉面向对象技术的工程师来说,维护这样的系统需要较好地理解面向对象设计。
依赖倒转原则假定所有的具体类都是会变化的,这也不总是正确。有一些具体类可能是相当稳定,不会变化的,使用这个具体类实例的应用完全可以依赖于这个具体类型,而不必为此创建一个抽象类型。
四、合成/聚合复用原则(Composite/Aggregate Reuse PrincipleCARP
       4.1概念
定义:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用这些对象的目的。
应首先使用合成/聚合,合成/聚合则使系统灵活,其次才考虑继承,达到复用的目的。而使用继承时,要严格遵循里氏代换原则。有效地使用继承会有助于对问题的理解,降低复杂度,而滥用继承会增加系统构建、维护时的难度及系统的复杂度。
如果两个类是"Has-a"关系应使用合成、聚合,如果是"Is-a"关系可使用继承。"Is-A"是严格的分类学意义上定义,意思是一个类是另一个类的"一种"。而"Has-A"则不同,它表示某一个角色具有某一项责任。
4.2什么是合成?什么是聚合?
合成(Composition)和聚合(Aggregation)都是关联(Association)的特殊种类。
聚合表示整体和部分的关系,表示"拥有"。如奔驰S360汽车,对奔驰S360引擎、奔驰S360轮胎的关系是聚合关系,离开了奔驰S360汽车,引擎、轮胎就失去了存在的意义。在设计中, 聚合不应该频繁出现,这样会增大设计的耦合度。
合成则是一种更强的"拥有",部分和整体的生命周期一样。合成的新的对象完全支配其组成部分,包括它们的创建和湮灭等。一个合成关系的成分对象是不能与另一个合成关系共享的。
    换句话说,合成是值的聚合(Aggregation by Value),而一般说的聚合是引用的聚合(Aggregation by Reference)。
明白了合成和聚合关系,再来理解合成/聚合原则应该就清楚了,要避免在系统设计中出现,一个类的继承层次超过3层,则需考虑重构代码,或者重新设计结构。当然最好的办法就是考虑使用合成/聚合原则。
4.3通过合成/聚合的优缺点
优点:
1) 新对象存取成分对象的唯一方法是通过成分对象的接口。
2) 这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的。
3) 这种复用支持包装。
4) 这种复用所需的依赖较少。
5) 每一个新的类可以将焦点集中在一个任务上。
6) 这种复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象。
7) 作为复用手段可以应用到几乎任何环境中去。
缺点:就是系统中会有较多的对象需要管理。
4.4通过继承来进行复用的优缺点
优点:
新的实现较为容易,因为超类的大部分功能可以通过继承的关系自动进入子类。
修改和扩展继承而来的实现较为容易。
    缺点
继承复用破坏包装,因为继承将超类的实现细节暴露给子类。由于超类的内部细节常常是对于子类透明的,所以这种复用是透明的复用,又称"白箱"复用。
如果超类发生改变,那么子类的实现也不得不发生改变。
从超类继承而来的实现是静态的,不可能在运行时间内发生改变,没有足够的灵活性。
继承只能在有限的环境中使用。
五、 迪米特法则(Law of DemeterLoD
       5.1概述
    定义:一个软件实体应当尽可能少的与其他实体发生相互作用。
    这样,当一个模块修改时,就会尽量少的影响其他的模块。扩展会相对容易。
    这是对软件实体之间通信的限制。它要求限制软件实体之间通信的宽度和深度。
5.2迪米特法则的其他表述:
1)只与你直接的朋友们通信。
2)不要跟"陌生人"说话。
3)每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
5.3狭义的迪米特法则
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
朋友圈的确定
"朋友"条件:
1)当前对象本身(this)
2)以参量形式传入到当前对象方法中的对象
3)当前对象的实例变量直接引用的对象
4)当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友
5)当前对象所创建的对象
任何一个对象,如果满足上面的条件之一,就是当前对象的"朋友";否则就是"陌生人"。
缺点:会在系统里造出大量的小方法,散落在系统的各个角落。
与依赖倒转原则互补使用
5.4狭义的迪米特法则的缺点:
在系统里造出大量的小方法,这些方法仅仅是传递间接的调用,与系统的商务逻辑无关。
遵循类之间的迪米特法则会是一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。
5.5迪米特法则与设计模式
门面(外观)模式和调停者(中介者)模式实际上就是迪米特法则的具体应用。
5.6广义的迪米特法则
迪米特法则的主要用意是控制信息的过载。在将迪米特法则运用到系统设计中时,要注意下面的几点:
1)在类的划分上,应当创建有弱耦合的类。
2)在类的结构设计上,每一个类都应当尽量降低成员的访问权限。
3)在类的设计上,只要有可能,一个类应当设计成不变类。
4)在对其他类的引用上,一个对象对其对象的引用应当降到最低。
5.7广义迪米特法则在类的设计上的体现
1)优先考虑将一个类设置成不变类
2)尽量降低一个类的访问权限
3)谨慎使用Serializable
4)尽量降低成员的访问权限
5)取代C Struct
迪米特法则又叫作最少知识原则(Least Knowledge Principle或简写为LKP),就是说一个对象应当对其他对象有尽可能少的了解。
5.8如何实现迪米特法则
迪米特法则的主要用意是控制信息的过载,在将其运用到系统设计中应注意以下几点:
1) 在类的划分上,应当创建有弱耦合的类。类之间的耦合越弱,就越有利于复用。
2) 在类的结构设计上,每一个类都应当尽量降低成员的访问权限。一个类不应当public自己的属性,而应当提供取值和赋值的方法让外界间接访问自己的属性。
3) 在类的设计上,只要有可能,一个类应当设计成不变类。
4) 在对其它对象的引用上,一个类对其它对象的引用应该降到最低。
六、 接口隔离原则(interface separate principle, ISP
      6.1概念
    接口隔离原则:使用多个专门的接口比使用单一的总接口要好。也就是说,一个类对另外一个类的依赖性应当是建立在最小的接口上。     
这里的"接口"往往有两种不同的含义:一种是指一个类型所具有的方法特征的集合,仅仅是一种逻辑上的抽象;另外一种是指某种语言具体的"接口"定义,有严格的定义和结构。比如c# 语言里面的Interface结构。对于这两种不同的含义,ISP的表达方式以及含义都有所不同。(上面说的一个类型,可以理解成一个类,我们定义了一个类,也就是定义了一种新的类型)      
当我们把"接口"理解成一个类所提供的所有方法的特征集合的时候,这就是一种逻辑上的概念。接口的划分就直接带来类型的划分。这里,我们可以把接口理解成角色,一个接口就只是代表一个角色,每个角色都有它特定的一个接口,这里的这个原则可以叫做"角色隔离原则"。
如果把"接口"理解成狭义的特定语言的接口,那么ISP表达的意思是说,对不同的客户端,同一个角色提供宽窄不同的接口,也就是定制服务,个性化服务。就是仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来。
    应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。
  这也是对软件实体之间通信的限制。但它限制的只是通信的宽度,就是说通信要尽可能的窄。
遵循迪米特法则和接口隔离原则,会使一个软件系统功能扩展时,修改的压力不会传到别的对象那里。
6.2如何实现接口隔离原则
不应该强迫用户依赖于他们不用的方法。
1、利用委托分离接口。
2、利用多继承分离接口。

20070507

Coding Horror: Maximizing The Value of Your Keystrokes

[http://www.codinghorror.com/blog/archives/000854.html]
Coding Horror: Maximizing The Value of Your Keystrokes

May 03, 2007

Maximizing The Value of Your Keystrokes

I met Jon Udell this year at MIX. I was reading through his excellent blog to flesh out some of the topics we talked about, when I was struck by the powerful message of this particular entry:

When people tell me they're too busy to blog, I ask them to count up their output of keystrokes. How many of those keystrokes flow into email messages? Most. How many people receive those email messages? Few. How many people could usefully benefit from those messages, now or later? More than a few, maybe a lot more.

From this perspective, blogging is a communication pattern that optimizes for the amount of awareness and influence that each keystroke can possibly yield. Some topics, of course, are necessarily private and interpersonal. But a surprising amount of business communication is potentially broader in scope. If your choice is to invest keystrokes in an email to three people, or in a blog entry that could be read by those same three people plus more -- maybe many more -- why not choose the latter? Why not make each keystroke work as hard as it can?

hands blurred, typing on a keyboard

[converting an email to a blog entry] can have powerful network effects. To exploit them, you have to realize that the delivery of a message, and the notification of delivery, do not necessarily coincide. Most of the time, in email, they do. The message is both notification and payload. But a message can also notify and point to a payload which is available to the recipient but also to other people and processes in other contexts. That arrangement costs hardly any extra keystrokes, and hardly any extra time. But it's an optimization that can radically expand influence and awareness.

I covered similar ground in When In Doubt, Make It Public, but Jon's entry is even more compelling. It's a specific example of how you can adapt your behavior to have a much broader impact. What Jon's describing happens to me all the time. I'll be in the middle of composing an email when I suddenly realize that there's no reason to silo this information in a private email exchange. I convert that email into a blog entry. Now, anyone who is interested in the topic can find it and have a public conversation with me-- and everyone else-- about it.

The next time you find yourself typing more than a few sentences on your keyboard, stop and ask: are you maximizing the value of your keystrokes?

Coding Horror: When In Doubt, Make It Public

[http://www.codinghorror.com/blog/archives/000840.html]
Coding Horror: When In Doubt, Make It Public

When In Doubt, Make It Public

Marc Hedlund offered some unique advice to web entrepreneurs last month:

One of my favorite business model suggestions for [web] entrepreneurs is to find an old UNIX command that hasn't yet been implemented on the web, and fix that.

To illustrate, Marc provides a list of UNIX commands with their corresponding web implementations:

talk, finger ICQ
LISTSERV DejaNews
ls Yahoo! directory
find, grepGoogle
rn Bloglines
pine Google Mail
mount Amazon S3
bash Yahoo! Pipes
wall Twitter

Jason Kottke noted that most successful "new" business models on the web aren't new at all -- they're simply taking what was once private and making it public and permanent :

Blogger = public email messages. (1999) Instead of "Dear Bob, Check out this movie." it's "Dear People I May or May Not Know Who Are Interested in Film Noir, check out this movie. If you like it, maybe we can be friends."

Flickr = public photo sharing. (2004) Flickr co-founder Caterina Fake said in a recent interview: "When we started the company, there were dozens of other photosharing companies such as Shutterfly, but on those sites there was no such thing as a public photograph -- it didn't even exist as a concept -- so the idea of something 'public' changed the whole idea of Flickr."

YouTube = public home videos. (2005) Bob Saget was onto something.

Twitter = public IM. (2006) I don't think it's any coincidence that one of the people responsible for Blogger is also responsible for Twitter.

But you don't have to found a new Web 2.0 company to benefit from the power of public information. Even brick and mortar companies are finally realizing that the age-old principle of "secret by default" may not be the best policy today :

Companies used to assume that details about their internal workings were valuable precisely because they were secret. If you were cagey about your plans, you had the upper hand; if you kept your next big idea to yourself, people couldn't steal it. Now, billion- dollar ideas come to CEOs who give them away; corporations that publicize their failings grow stronger. Power comes not from your Rolodex but from how many bloggers link to you - and everyone trembles before search engine rankings.

Power, it seems, comes from public information. Secrets are only a source of powerlessness. Just ask Brad Abrams, who poses this rhetorical question :

If no one knows you did X, did you really get all the benefits for doing X?

I think Brad is being a bit too cautious here. I'll go one step further. Until you've..

  • Written a blog entry about X
  • Posted Flickr photos of X
  • Uploaded a video of X to YouTube
  • Typed a Twitter message about X

.. did X really happen at all?

This is not to say we should fill the world with noise on every mundane aspect of our existence. But who decides what is mundane? Who decides what is interesting? Everything's interesting to someone, even if that someone is only you and a few other people in the world.

It's my firm belief that the inclusionists are winning. We live in a world of infinitely searchable micro-content, and every contribution, however small, enriches all of us. But more selfishly, if you're interested in deriving maximum benefit from your work, there's no substitute for making it public and findable. Obscurity sucks. But obscurity by choice is irrational. When in doubt, make it public.

How To Make a Plastic Bag Keeper

[http://www.curbly.com/DIY-Maven/posts/1315-How-To-Make-a-Plastic-Bag-Keeper]

How To Make a Plastic Bag Keeper » Curbly | DIY Design Community « Keywords: Reduce, Reuse, recycle, plastic

How To Make a Plastic Bag Keeper

In an effort to reduce and reuse plastic bags, how about making a plastic bag keeper? Chances are you already have everything you need to make one for free. Or you can buy one at The Container Store for 4.99 plus 6.50 s & h. Your choice.

The Props

A 2 quart plastic bottle (I used a Juicy Juice bottle, which worked particularly well.)

Box cutter and/or scissors

Sharpie

Durable tape

Excess plastic bags

The Procedure

Mark your bottle on top and bottom as shown.

Use box cutter to punch hole in marked areas and then switch to the scissors to cut out openings. (Using a scissors will greatly reduce the odds of cutting off one of your fingers.)

Apply tape around openings, if plastic edges are sharp.

Punch or drill a hole in the bottle's cap and add twine to hang, if desired.

As you get them, shove bags in the top hole; as you need them, pull them out of the bottom hole. (I fit 15 medium-sized bags in my bottle.) Having the plastic bags at hand–my keeper will be hanging by my back door–should encourage reusing them. Plus, they look a lot neater packed in that bottle.

不使用backtick处理参数

  backtick, the grave accent ( ` ) is a diacritic mark [wikipeida]。
  如果使用backtick,那么在unix shell中,可以方便地用'cat ini_file.ini'把配置文件中的内容取出,对于配置文件只有一行的情况。如果配置文件有多行,也可以使用shell工具取出某行的数据。
  放弃backtick方案。 仍使用GUI部分从配置文件读入参数,再作为批处理的命令行参数。配置文件准备使用多个,每个参数一个文件,方便使用fstream读入,避免使用windows api。
放弃backtick方案的原因如下。
  需要重写所用已用批处理实现的场景

已经与袁福宇一起测试了可行性。
1.在shell中的使用方法。不是原文引用,可能有错。
  >test.exe -para `cat device_name.txt`
等同于执行
  >test.exe -para \\.\EmeterDevice0
其中,'\\.\EmeterDevice0'是device_name.txt的内容。
需要注意当前目录、配置文件目录。

2.在shell之外,由GUI调用的方法。
----引用开始
d:\msys\1.0\bin>sh
sh-2.04$ exit
exit

d:\msys\1.0\bin>sh test.sh
ok

d:\msys\1.0\bin>cat test.sh
echo ok
d:\msys\1.0\bin>
----引用结束

备忘,免得哪天又把这个方案想起来,然后再花上大半天否定它。

浙江省自然基金项目

"浙江省自然基金项目淘汰率很高,一般资助金额也较少,3~5万的也常 见"

学习郭安定的EXCEL课件

郭安定:Excel 实用基础教程
[http://wstatic.xunlei.com/content/5941A95C4A529804C899E83649FD5E6CBCB454A4.html]
---------------
技巧和值得关注的知识点:

附加到开始菜单

安全模式启动excel

打开:只读打开,打开并修复

名称框用于选择单元格

增加缩进量

滚动条高度:标签字号

新工作簿中工作表数量

工作表标签颜色

工作表快速切换:鼠标右键

强制换行ALT + Enter

有步长的自动填充:选定两个单元格,或步长值(edit->fill->series)

整列移动:选定列->shift+移动

选到最右:ctrl+shift+右

选定范围显示比例:view->zoom->fit selection

冻结窗格:window->freeze window

转置:选择性粘贴

自定义格式:分类->自定义->类型(域)
自定义格式:0 "辆"

工作组:ctrl/shift,使用相同的head

样式

斜线:Alt+鼠标,或者单元格格式
  先设置颜色,后涂,如同使用画笔

自动调整列宽:选中整表->双击网格线(或拖动)

跨列居中:单元格格式

双击格式刷

取消隐藏:先选中整个工作表
工作表也可以隐藏

数据有效性的出错和提示信息

列表,用逗号分开

数据有效性->对同样设置的所有单元格应用这些更改

审核有效性

查找特定格式:定位

查找时,根据单元格选定格式

~*,避免通配

按行排序

筛选不重复的记录

状态栏中的函数

绝对引用,用钱($)固定
  选中引用->用F4

名称框,以提高公式的可读性

快速调试公式:F9

参数过多的处理:用双括号

粘贴链接:内部引用,远程引用,外部引用,立体引用

追踪引用:来龙,去脉

页眉、页脚

顶端标题行、左端标题列 重复:页面设置->工作表

ctrl+shift+*:选定

大纲级别:alt+shift+右
  重复上次:选中->用F4
  显示/隐藏大纲:ctrl+8

模板的分类:新建文件夹

模板的位置:在word中设置
工作组模板
-------------------
未讲到的知识点,可能会在高级班中提及:
  分类汇总
  透视表
----------------
授课技巧:
1.先需求、场景,后知识点
2.视频不录制教师,只录制屏幕
3.慢语速
4.任务栏右侧,演示者广告
5.先参数,后函数名
6.每个视频文件都较小(3分钟到小于10分钟),适于下载和学习。也利于失误后的重录、教学内容的组织
7.好麦克风,好嗓音,吐字清楚
8.菜单字体,toolbar大图标

缺欠:
1.使用英文术语,而且没有解释
2.不标准发音,如"英数"发音为"音数","括号"发音为"刮号","粘贴"发音为"年贴"
3.吞音,不完全爆破
4."coū",嘬牙的声音
5.台湾词汇,如"网路"

与一般教学的对比:
1.不以考试为目的,不强调知识点
2.突出小技巧和实用性
3.不强调基本概念,如单元格、行、列。
=================
OIIO - Excel 实用基础班

OIIO - Excel 实用基础班\00 基本准备工作
9,236,351 0-1 软件基本功能概说.wmv
7,341,511 0-2 软件环境界面说明.wmv
4,775,259 0-3 解决软件运行问题.wmv
5,922,909 0-4 挽救现有损坏文件.wmv
4,664,993 0-5 设定菜单全部显示.wmv
3,047,675 0-6 设定R1C1表示方式.wmv
8,959,511 0-7 调整单元格的字体.wmv
3,873,795 0-8 调整工作表的字体.wmv
5,409,277 0-9 设定默认工作表数.wmv

OIIO - Excel 实用基础班\01 基本编辑录入
4,967,281 1-1 单元格的新增编辑.wmv
4,129,467 1-2 正确数据录入技巧.wmv
6,467,861 1-3 自动填充设定技巧.wmv
6,166,849 1-4 数据的复制与搬移.wmv
6,074,217 1-5 选定范围显示比例.wmv
16,505,291 1-6 拆分冻结编辑窗格.wmv
9,968,575 1-7 清除数据加入批注.wmv
1,712,887 1-8 行列数据快速转置.wmv
4,934,087 1-9 录入当天日期时间.wmv

OIIO - Excel 实用基础班\02 格式设定技巧
13,243,047 2-1 设置单元格的格式.wmv
11,082,833 2-2 字型大小色彩样式.wmv
6,121,145 2-3 边框及斜线的设定.wmv
6,971,475 2-4 跨栏居中对齐设定.wmv
3,814,093 2-5 设定自动套用格式.wmv
3,156,947 2-6 格式复制形态设定.wmv
8,269,181 2-7 单元格的条件格式.wmv
6,882,959 2-8 工作表的相关设定.wmv

OIIO - Excel 实用基础班\03 数据录入检查
4,276,719 3-1 限制数据的有效性.wmv
6,300,213 3-2 设定日期时间限制.wmv
2,859,813 3-3 设定序列下拉箭头.wmv
5,312,457 3-4 设定文本长度限制.wmv
5,874,167 3-5 设定出错提示信息.wmv
3,834,531 3-6 应用同样设置变更.wmv
4,266,383 3-7 审核出错数据录入.wmv
1,160,497 3-8 简繁文本批量转换.wmv

OIIO - Excel 实用基础班\04 查找替换数据
8,945,453 4-1 查找特定数据内容.wmv
7,966,499 4-2 查找特定格式设置.wmv
8,362,175 4-3 近似文本查找替换.wmv
6,659,463 4-4 特殊定位查找功能.wmv
8,403,869 4-5 行列内容定位差异.wmv

OIIO - Excel 实用基础班\05 排序筛选数据
8,707,433 5-1 简单基本排序功能.wmv
3,801,109 5-2 筛选不重复的数据.wmv
10,252,563 5-3 自定义排序的设置.wmv
7,021,579 5-4 自动筛选数据显示.wmv
5,352,201 5-5 多条件筛选的设定.wmv

OIIO - Excel 实用基础班\06 计算公式设定
8,794,919 6-1 设定函数的表达式.wmv
11,127,195 6-2 插入各种函数设定.wmv
8,706,553 6-3 绝对相对位置引用.wmv
4,626,503 6-4 名称的定义与应用.wmv
1,600,345 6-5 快速公式调试提示.wmv
1,899,199 6-6 突破参数太多限制.wmv
6,651,303 6-7 参照概念基本操作.wmv
5,307,909 6-8 追踪公式从属引用.wmv
6,927,933 6-9 管理文件链接更新.wmv

OIIO - Excel 实用基础班\07 图表打印功能
8,392,557 7-1 工作表的基本打印.wmv
7,508,367 7-2 切换分页预览视图.wmv
8,596,695 7-3 图形化页眉的设定.wmv
16,239,943 7-4 工作表的打印设置.wmv
2,274,525 7-5 图形数据分开打印.wmv
6,380,669 7-6 打印长条类型数据.wmv
5,816,125 7-7 避免打印特定行号.wmv

OIIO - Excel 实用基础班\08 文件管理作业
9,822,423 8-1 将文件保存为模版.wmv
11,177,009 8-2 设定工作组的模版.wmv
6,048,345 8-3 下载网络免费模版.wmv
11,137,003 8-4 设定文件保护密码.wmv
4,652,177 8-5 保留文件最近备份.wmv

20070506

长知识啊

1.万象峰年先生教我:自怨自艾的读音是这样的。
查了一下,没有我读的aì这样的发音。
备忘一下,免得以后忘了。
  词目 自怨自艾
  发音 zì yuàn zì yì
  释义 怨:怨恨,悔恨;艾:割草,比喻改正错误。原意是悔恨自己的错误,自己改正。     现在只指悔恨自己的错误。
  出处 《孟子・万章上》:"太甲悔过,自怨自艾。"
  示例 但倘有不知道自怨自艾的人,想将这位先生"送进疯人院"去,我可要拚命反对,尽力     呼冤的。(鲁迅《集外集・"音乐"》)
2.讲计算机应用基础的时候,全班同学一起纠正我的发音,
media,应读作 米迭,而不是 买碟。

不学无术啊,一次次被发现。

注:对于1,也有不同观点。
--引文开始
"自怨自艾(ai)"应该没有错
《汉语大词典》第9卷第270页把自怨自艾的”艾”发音标注为“ai”
艾1 [ài ㄞˋ]
艾2 [yì ㄧˋ]
【艾怨】《孟子·万章上》:“ 太甲 顛覆 湯 之典刑, 伊尹 放之於 桐 ,三年, 太甲 悔過,自怨自艾,於 桐 處仁遷義。”言 太甲怨恨自己的错误,并加以改正。后以“艾怨”谓埋怨,悔恨。 张洁 《沉重的翅膀》十二:“ 万群 知道她应该不带任何感情色彩和 方文煊讲话,但,她由得了自己么?生硬和冰冷后面,是 方文煊 几乎可以触摸到的浓烈的艾怨。”
注意"艾"后面没有数字2的都读“ai”,读yi的都标成“艾2”

商务印书馆的《现代汉语词典》1670页明确标明是ziyuanziyi,《新华成语词典》977页明确表示“艾,不读ai4。”《新华字典》550页,对yi的解释是治理,第2页ai但解释是“1、艾草,2止,如方兴未艾”。
--引文结束

20070504

[电脑游戏] 美华裔高中生自制CS地图被捕

[电脑游戏] 美华裔高中生自制CS地图被捕
from 水木社区 游戏天地区十大热门话题 by lowy
发信人: lowy (礼义廉耻忍耐克己百折不屈), 信区: Game
标 题: 美华裔高中生自制CS地图被捕
发信站: 水木社区 (Fri May 4 09:47:41 2007), 站内


  德州班德堡克莱蒙特高中一名华裔高中生躲在家中,以自己的校园为蓝本自制CS地图并上传至某服务器和同学对战,结果这种"校园枪战"游戏被两名家长发现,随即向班德堡独立校区警署(FBISD)报警,警察前往这名华裔学生家中将他带走并搜查了他的卧室。

  此事发生在弗州理工枪杀案之后的敏感时期,警方接报后不敢怠慢,但起初只在那名学生的卧室里发现一把锤子,据称是用来校正床铺的,因为那张床睡起来不太舒服。

  终于,FBISD不负众望,在五月一日又宣布说找到了五把剑,看似好像一个冷兵器版的赵承熙就此诞生,全然不顾那些剑有可能仅是装饰用品。

  最后官方将此事件定义为"三级"事态,意即导致一个涉及恐怖袭击或炸弹威胁的虚假警报。虽然警方并未就某项罪名对那名华裔学生提出指控,但他已被克莱蒙特高中除名且被转入M.R.
Wood再教育中心,不能和他的同学一起毕业了,这一切仅仅是因为一张自制的CS地图。

--

※ 来源:・水木社区 newsmth.net・[FROM: 125.121.221.*]

--

20070503

转发

  老婆不常用机器,要求我替她收邮件。试了一下GOOGLE的邮件转发。
log:
1.转发目的设置错了.转发时在老婆的信箱里有未送达通知.
2.修改目的地址,用目的地址给老婆发信,邮件未转发.
3.用我的另一个信箱,不是目的地址的给老婆发信,邮件转发到目的地址.
  似乎不能目的地址和发信人不能相同?
4.在目的地址设置过滤器,把所有to老婆的信转到一个label里.
--
重剑无锋,大巧不工。

实现一个愿望

  前天吧,与老婆从第一MALL电影院回,一路吃一路聊一路晒太阳。
  路过伊通河,当年发现时尚未完工的小公园,桃花盛开,青草才发芽。还有长凳,躺了一会,看看久违的蓝天。
  那天有个愿望,
   绿蚁新醅酒,红泥小火炉。
   晚来天欲雪,能饮一杯无?
  没想到,今天就实现了。跟老婆说,以为要几年以后才能实现呐。美好美好。
  约2174.15m,一条新的行走路线,单程。
--
重剑无锋,大巧不工。