Friday, December 26

总结一周

年终了,今天是今年最后一天上班,下午开了"纳会",前几天项目组还开了"忘年会",前者是领导总结一下一年的工作,给大家拜个年,大家聊聊天。后者纯粹是吃吃喝喝了。
接下来一周时间,准备在家编程序。每天觉得时间不够用,这下子有一周假期,还真不适应呢。前几天一个电视节目里问:如果出了某种变故,你被告知仅有一天的寿命了,你会利用这一天做些什么?这真是一个无聊的问题,面对这样的问题,每个人有自己的回答。我想我仍然会利用这最后一天编程序的。有过太多IDEA,真正实现的寥寥无几。如果只有最后一天,还是希望实现自己的价值。:)

总结一下上一周:
1,No! Flash 2.0 release了,在屏蔽flash的基础上,增加了block spyware的功能。除了新浪,网易这样的新闻网站,3721,Baidu也成了No!Flash屏蔽的对象。对那种毫不尊重浏览者选择权的粗暴广告方式实在忍无可忍。特别是对播号上网和机器型号比较老的用户而言,直接占用了他们有限的带宽和CPU。没有No!Flash的时候真想大骂这些恶德业者。

2,写了一篇对话形式的小文章。"MM与GG的对话---关与printf和字符数组"给C语言的初学者。

3,看了大怪兽关与const的随笔,我想有必要总结一下const在C++里的各种用法,开始写一篇文章,现在写了一半,还在blogger的draft里,希望下周release它。

4,用了这么多年C++,真的没有好好总结一下,没有一个好得hint,也不会去想对于初学者会遇到些什么问题。今天在dev-club里,为了回答一个问题,总结了一下作为函数的参数时,什么情况下必须用"引用":
(1)引用保证了你传入的确实是一个对象的引用并且在函数里不会像指针一样改变用途。

void fun( X *px )和void fun( X &x )的普通在于
你可不可以这么用
fun(0);

用指针就可以传入一个0(或者其他整数),也许是一个非法的地址,而且在fun函数内还可以改变px指向的地址。例如
void fun( X *px )
{
X aaa;
px=&aaa;
}

用引用就不会有这些问题。传入0是违法的。引用在传入的时候被初始化以后,绝对不会再被改变成为另外一个对象的引用。

(2),作为重栽运算符时的参数方式。
如果你写成
X operator+( X *a, X *b )
用的时候就只能
&val1+&val2
了。
使用引用不会有这样的尴尬。
声明的时候这样
X operator+( X &a, X &b )
使用的时候这样
val1+val2

Sunday, December 14

1,微软建议的开发流程,在这篇文章里进行了详细的论述。Team Development with Visual Studio .NET and Visual SourceSafe。特别是提供了一个叫做BuildIt的小工具,可以自动从sourcesafe里checkout最新的代码,编译,更新version,设置vss的标签,对于nightly build和每日编译真的很有用。

2,VS.Net2003提供了before build,after-build的项目选项。可以做编译前预处理,编译后的收尾处理工作。ms petshop提供了足够好的例子。

3,“星轨工作室”的Orbit翻译了CodeProject上的介绍WTL的系列文章,WTL for MFC programmer ,真是做了伟大的贡献。详细所有使用WTL的中国程序员都会感谢他的。

4,看到一篇趣文:
<<大腕 之过度设计>>
一定得选最先进的架构,
怎么也得也要分布式的,
做就要规范,
把设计模拿过来,
什么Builder呀,Adapter呀,Bridge呀,
能用不能用的全用上,
多服务器,负载均衡,
搬它几台曙光来做集群,
支持十亿用户同时访问。
同行不是用CORBA 就是用EJB,
你要用一DCOM,你都不好意思和人打招呼。
客户端旁边还要做一帮助精灵,暴可爱那种,
一口一个"May i help you sir"
一口地道西雅图腔,
倍(儿)有面子。
你说这样的程序,怎么着也要花个十万八万的吧?
十万八万?那是电费!
八千万起!
你别嫌贵 还不打折。
您得研究顾客的心理,
国家钱来搞研究的,
根本不在乎多花点钱。
什么叫研究你知道吗?
就是只要最炫,不要最好。

Monday, December 8

这篇来自中文MSDN的文章"使用 Microsoft .NET 的企业解决方案模式"确实很好,很重要。我读了大约1/3。文章里面提到的内容有些是我熟知的,有些是生疏的。但感觉他们确实给我今后的asp.net项目开发提供了很好的理论基础和实践指南。我制作了PDF文件,希望在不引起任何版权纠纷的情况下,大家可以将自己的comment加进去,共同理解提高。

PDF的下载

Thursday, November 27

有开发winform经验的人都知道,要想使程序在windows XP下真正拥有XP风格,需要按照下面这篇文章所说的去做。The Code Project - Windows XP Visual Styles for Windows Forms - C# Programming
首先如果你的画面上有Button,CheckBox,RadionBox,GroupBox的话,需要改变他们属性FlatStyle为System,然后追加一个manifest文件到exe文件的同一个路径下。就像App.config文件那样。

当然,在.Net Framework 1.1下,你可以不必这么麻烦,只需要加一句Application.EnableVisualStyles();就可以了。

遗憾的是,我再做的项目要用1.0,在1.0里可没有这么方便了。

我有10几个小winform程序都需要这样做,所以我首先想到建立一个模板。就像往项目里追加一个app.config一样。我仿照app.config模板作法,复制一个模板,修改里面的app.config成app.manifest文件。改好的模板放在这里了。

AppXPStyle.zip

我在修改C:\Program Files\Microsoft Visual Studio .NET\Vb7\VBProjectItems\Local Project Items\Utility\LocalUtilityProjectItems.vsdir以后可以追加manifest进入项目了,但是文件名变成了App1.manifest,而且编译以后,它不会同App.config一样被改名,拷贝到exe所在的文件夹下。
App.config真是一个magic file啊,VS是怎么做的?

我改变想法,考虑用macro来自动生成manifest,可是不知道如何得到当前所在的project,以及它生成的exe文件的路径。:s


Tuesday, November 25

惯性太可怕
今天看了一眼一个很久以前用C++编的程序,突然发现在这个程序我这么写到
#define DECIMAL_DIGIT 3
... ...
int a = 10^DECIMAL_DIGIT; //求10的n次方
... ...
MyGod,我居然用这样的语句来计算10的3次方。
这是可是C++啊,不是Basic。
正确的写法应该是
#include < cmath >
using namespace std;
......
#define DECIMAL_DIGIT 3
... ...
double a = pow(10,DECIMAL_DIGIT)
... ...

我原来的写法至少犯了2个错误,
1,在Basic里^是求幂的符号,而在C++(包括C#)里则是求2进制"异或"的符号,作用是完全不同的。
2,无论是basic也好还是C++也好,求幂以后的返回值都是double型,即使你的输入都是int型。

沉重检讨,我为什么会犯这种错误!!!!
都是VB惹的祸????
很多时候BASIC确实很好用,我都不自觉地用到C++里了。惯性实在可怕。
2週間ぶりのBLOGだ。この2週間で新しいPCを組み合わせって、BenQ FP791 LCDを購入しました。悔しいことはLCDのドット抜けだ。一つの明るい点で、不良対象外だって悔しいだ。コーディングなら、このLCDは明るすぎだ、DVD鑑賞ならいいかも。
3連休を利用してNo!FlashをUPDATEしていた。うるさいActiveXをBLOCKしたい。来週かな?PUBLISH IT。
日本では、BLOGの利用は少ないと思いますが、実は「日記」という形式で流しています。東京大学のサイトに置いている
便所コオロギ観察日記はC++,Windows関連のBLOGを記録している。いい参考できます。

Monday, November 10

致命的BUG:KB326219

下午我在做一个WinForm in VB.Net的程序时遇到了奇怪的问题,在设置好LABEL的字体后,运行出错,是奇怪的System.ArithmeticException,可是出错的位置是VS自动生成的code。google之后发现,这是一个臭名昭著的问题:326219 - PRB: System.Arithmetic Exception Error When You Change the Floating-Point Control Register in a Managed Application
看了这篇KB,我非常奇怪,是什么改变了浮点控制寄存器呢?
我一个一个地关掉我桌面上的程序, 发现罪魁就是早上安装的WORKTIME,在这个程序里一定是使用了这个寄存器,而dotNet在使用它时没有正确地初始化。
按照KB的指示,我们必须在每new一个form之前样做浮点精度指定。就像这样:
Imports System.Runtime.InteropServices
Module StartUp

_
Overloads Function _controlfp(ByVal n As Integer, ByVal mask As Integer) As Integer
End Function

_
Public Sub Main()
FixArithBug()

' Starts the application.
Application.Run(New Form1())
End Sub

Public Sub FixArithBug()
'PRB: System.Arithmetic Exception Error When You Change the Floating-Point Control Register in a Managed Application
'http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B326219 Const _MCW_EM As Integer = &H8001F
Const _RC_NEAR As Integer = &H0
Const _PC_53 As Integer = &H10000
Const _EM_INVALID As Integer = &H10
Const _EM_ZERODIVIDE As Integer = &H8
Const _EM_OVERFLOW As Integer = &H4
Const _EM_UNDERFLOW As Integer = &H2
Const _EM_INEXACT As Integer = &H1
Const _EM_DENORMAL As Integer = &H80000
Const _CW_DEFAULT As Integer = (_RC_NEAR + _PC_53 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL)
_controlfp(_CW_DEFAULT, &HFFFFF)
End Sub
End Module

这个问题同时出现在framework1.0和1.1里面。
我实在不希望还出现在1.2里,因为这种程序之间互相干扰的问题有时候是很难发现。
类似的VS2003也对别的程序有影响。
这种类型的问题往往是因为WINDOWS的消息机制引起的,错误地发送消息给一个Window程序是常见的原因。但是因为寄存器的原因,我还是头一次遇到。

Friday, November 7

MS有一个方法允许在一个操作系统里同时运行不同的IE版本,但是并没有公开这种方法。这个秘密已经被发现了:Multiple IE's in Windows
这对需要测试多个IE版本的网页设计者带来了好处,不再需要额外的机器,虚拟机了。:)

Tuesday, November 4

可删除任意已知节点的左倾树
优先队列是一个非常有用的数据结构,一般用于多任务的优先权分配。比如一台打印机只能一个文档一个文档地打印,如果有多个打印任务,如何调度他们呢?一个简单的策略就是先来先打印(FIFO),可是如果一个等待处理的先来的任务有上千页,而后来的等待中的任务只有1,2页,那么仍然按照先来先打的策略将会很没有效率(恕我不解释"效率"这个词)。另外一个策略就是等待任务中页数最小的先打印。这个策略看上去更好一些。
我们现在的问题是如何调度类似的这些任务如何调度,合理的数据结构如何。这就要用到优先队列的这个数据结构了。一个有效的优先队列实现方案就是左倾树(Leftist Trees)。这在一些经典的数据结构和算法的书中都有介绍。
对这个数据结构稍加研究以后,就会发现它不能很好地解决一个特例,就是如果用户想取消一个还没有进行的任务(我想cancel一个打印文档是大家经常会遇到的)。解决这个特例直观的想法是重新构造左倾树,可是怎样做呢?上周五,布朗香写出了一个算法:可删除任意已知节点的左倾树。我有幸看到了这篇文章,记录于此。:)

Thursday, October 30

WinFX发想
据说下一代.NET Framework更名为“WinFX”。并且准备取代Win32成为最主要的API(应用程序接口)。
我没有详细去看WinFX的技术设计文档,但是估计今后的API将采用XML作为interface。估计会类似最早嵌入HTML的ActiveX组件,java applet。只不过这次是真正面向Desktop了。
个人认为这在技术发展到现在的程度下是极其自然的。
早期的DLL,后来的COM都无法完全实现“将用户界面的设计者与程序开发人员的工作分开进行,以便提高开发效率”(Allchin)。 特别是现在windows下成ton的API,极端混乱不看,我想即使MS windwos Team的成员也不间得所有的API都了解吧。一些接口下面隐藏的诡秘细节更是令人无从想像。这回API升级以后造成的参数不兼容问题有望在XML接口下解决。
XML接口的另外好处是所谓的AOP,可以通过设置attribute,控制API的安全性,交互协议,字节顺序等等这些API本身不应该负责的事情。
对普通用户来说,windows的界面将想同web一样丰富多彩,每个人都可以轻易设计自己的windows界面,让你感觉更亲近更友善。这种和界面相关的设计语言据说叫做XAML(eXtensible Application Markup Language)

以上纯属个人想像,如有雷同,万分荣幸!


Tuesday, October 28

我昨天胡言乱语了一通,结果遭人骂是"一个看轻自己民族的人"。555,晚上没睡好觉。我只不过介绍了人家的优点,就被基于某种民族思想的言论攻击了。
CSDN上的一篇文章说的好"客观看待自身的问题,才能使我们中国的软件行业实现真正的跨越,超越日本,击败印度,抗衡美国。 真的希望能看到这样一天:中国的程序员能面对世界自信的说:“我们是最棒的!” "

Monday, October 27

胡言乱语
理性的思考,来自怎样的大脑?
看看22岁的麻省理工大学的副教授的Erik Demaine就知道什么是智慧。
玩过联众的俄罗斯方块对战的朋友都知道,在有限的时间里找到最佳的策略是多么不容易,如果让其中一方是一个计算机程序的话,是否有一个有效的算法来解决这个问题呢?Erik Demaine告诉我们,没有这样的算法。因为这是一个NP完全问题。
这个Erik Demaine的博士论文居然是"Folding and Unfolding",完全来自对折纸的研究。
纸张的发明是中国为世界做出的巨大贡献。我不知道折纸是哪个国家发明的,但是折纸(origami)这个英文词拼写是来自日语的"おりがみ"。
历史上中国曾经发明过很多东西,但是我不知道近代中国为世界贡献了什么?
日本NHK电视台有一个节目就是"ProjectX",这个节目在晚上的黄金时间播出,每一集都讲述了近代由日本人发明并对世界都产生影响的产品,从最普通的人,开发最前线的人讲起。我没有每一集都看到,至少看过的有"方便面","洗碗机","复印机","自动检票机"...
现在有一些venture company就同自己的员工说,我们的工作今后会被ProjectX选种的。那是怎样的一种激励啊。

昨天还看了梁肇新的《编程高手箴言》的样章。本来有些感想,现在也想不起来。
在中国做程序员很累。
。。。。。。在外国也不见得舒服。

今天,我作了。。。。

太晚了,我要回家了。bye

Sunday, October 26

前几天有人问杨立伟飞行员从太空能看到长城吗?。。。取决于我们如何定义看见。:)

让我们通过下面这个网站来看看从太空到底能看到什么。
Molecular Expressions: Science, Optics and You - Powers Of 10: Interactive Java Tutorial

Friday, October 24

上海市居住证
上海比较牛啊,中国人在上海住还要申请"签证"呢,还给你评分,分数不够的话,还拒签呢。
:s
我算了算,要是有钱在上海买房的话,刚好能混上3年签证,没房的话1年。要是工作没找好的话,只能拒签了。555~~~
我一个小人物,可怎么是好。

Wednesday, October 22

Microsoft toys with open source
走向开放的微软
微软的产品一般来说都是封闭开发的。外人是无法参与进去的。不过这种说法看上去就要成为过去时了。微软正在草拟一个新的license, 来使一个Windows C++ 代码库WTL(Windows Template Library)成为开放的,允许非微软开发者参与的商业代码库。这对于微软来说几乎是一种激进的行为。
最早,微软Visual C++ Libraries Team的Pranish Kumar在今年4月12日提议将WTL变成shared source。这在WTL社区引起过争论。Pranish Kumar的mail可以在这里找到。他提出了一些重要的想法,而且在征求非微软人士的意见。

我是在2002年6月从大怪兽那里听说WTL这个名词的。在同年10月1日我写自己的第一个WTL程序No!Flash用来屏蔽国内新闻网站的动态广告。WTL让我有一种众里寻她千百度的感觉:)WTL是为那些追求开发出更小巧更快速的windows程序的开发者准备的。

我使用C++编程几乎不得不同时使用STL/BOOST/ATL/ATL Server/WTL以及自己积累的一些CLASS。C++在程序库上的贫乏,再加上一些语法的复杂性,对于一般的开发者来说,C++不是一个好的approch。java和.Net的突飞猛进,不能不说是对C++扬长弃短的结果。

Wednesday, October 15

VB Helper: Index Categories
如果你是VB.Net的开发着,那这个网站还是有些用处的。
我在这里学会了如何让一个winform上的picturebox里的图片透明显示:>
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Use MakeTransparent to make red pixels transparent.
Dim bm As New Bitmap(PictureBox1.Image)
bm.MakeTransparent(Color.Transparent)

' Display the result.
PictureBox1.Image = bm
End Sub

Tuesday, October 7

ASP.NET一个教训
今天一个aspx突然间codebind的部分不执行,页面没有初始化就显示出来了。经过一个多小时的调查,发现不知什么时候由VS自动控制的private void InitializeComponent()里this.Load += new System.EventHandler(this.Page_Load);失踪了。可能是我在修改aspx的时候不小心删除或者修改了某个控件的名字,VS自动修改的时候出现了BUG。这个问题以前也出现过几次,这次仍然在同一个地方跌倒了。写下来留作教训。

Monday, October 6

追求理想与疯狂的界限
昨天一个朋友给我介绍了他的一个同学和他的软件,MOLIPS,这是一个类似visio的画矢量图软件,从UML到分子图都可以轻松完成。这里有一个演示video
这么厉害的软件是一个人开发,并且完全免费的。据说,这个叫福代昌之的作者,为了追求理想,做自己想做软件,给最广泛的人使用,6年前从世界顶级的大公司辞职,专门做这个软件。辞职以后没有收入,坐吃山空,老婆孩子都无法理解他,离他而去。而他并没有利用这个软件谋取什么金钱,只能在一些公司需要软件人员的时候去打打工维持生活。
每个人都有理想,为了实现它,究竟要付出多大的代价?追求理想与疯狂的界限究竟怎样?我也有自己的软件梦,但是我想,我不能不对家人负责。

Friday, October 3

奇怪的session无效问题
yan一直在调试一个jsp程序。一个奇怪的问题就是在本地机器上session很好用,可是从另外一台饥器上访问他的程序,session就失效了。下午我一直与他研究这个问题。一开始以为是tomcat的bug,开始实验tomcat3.3,tomcat4.0,tomcat5.0结果状况都一样,都是不能使用session。
我知道session本质上是根据一个随机生成的sessionID,通过写入cookie来维持客户端与服务器端的状态的机制。
我开始怀疑是IE不让server将sessionID写到本地。我将IE的安全设定设为最低,并接收所有的cookie。结果还是不灵。
我决定试一下我一直在做的一个使用了session的aspx程序。My God,通过另外一台机器也无法使用我的aspx程序,。而且ms提供的一些例子,如mspetshop,Duwamish7都无法使用。
如果设置cookieless="true",则没有问题。
:s
faint

Wednesday, October 1

不要过分相信VS.Net的自动提示菜单和属性窗
在开发asp.net程序的时候,今天过分相信vs.net的自动提示,导致花了1个多小时调查< asp:label...
我将< asp:label...放在一个repeater里,希望在codebind里可以通过
foreach(RepeaterItem rpItem in extClass.Items)
{
Label className = (Label) rpItem.FindControl("clsNa");

将名叫clsNa的label值取回来。
我在aspx里写成
< asp:Label id="clsNa" runat="server">< %# DataBinder.Eval(Container.DataItem, "_class") %>< /asp:Label>
的话,取回来的值总是空字符串。而vs提示asp:Label 没有text这个属性。我就信以为真了。
最后经过调查,改写成这样就可以了
< asp:Label id="clsNa" runat="server" Text='< %# DataBinder.Eval(Container.DataItem, "_class") %>' />

另外< IMG src=其实以可以有visuable这个属性的,真假不同控制这个图像是否显示。


Thursday, September 18

ASP.NET之不爽
首先是ViewState。我本希望在codebehind的cs程序里直接定义类变量
protected int typeID;
即可以维持状态了,而且我在aspx里也设置了enableViewState="True",但是只有愿望是不行的。
不这样做是不行的。:<
protected int typeID
{
get{return (int)ViewState["typeID"];}
set{ViewState["typeID"] = value;}
}


另外,就是ViewState这个名字也是奇怪的。既然所谓的View State只能在一个Page里有效,为什么不直接使用Page这个名字呢。
Page["typeID"] = 123;
不是更爽一些吗?即使在控件里使用Page这个名字也没什么奇怪的,因为控件最终还是要在Page里使用的。
大概是不好实现吧?对微软来说,好像也不难吧。:S

另一个不爽的地方是web用户控件ascx不能像普通服务器控件一样,在aspx中%@ Register以后,自动在codebehind中自动追加类变量,还要
%@ Reference Control="MyUserControl.ascx" %

Control c1 = LoadControl("MyUserControl.ascx");
((MyUserControl)c1).BackColor = "beige";
Page.Controls.Add(c1);

我的天啊,巨麻烦!!!

Wednesday, September 17

偶然发现的网站:World Hello, Johnson is here
站主还是我的老乡呢。(赫赫,老乡这个词我头一次用)。
里面有许多好文章,整理得非常规整,很有专业精神。值得一读。
不愧是3中毕业的啊。

Tuesday, September 16

在开心就好主持的博客堂申请了一个新的blog空间:重粒子的运行轨迹,以后这两边尽量同步吧。
现在的这个blog是使用BLOGGER的系统,因为它的blog提交集成到了google的toolbar上,内容的文件自动通过ftp传输到我的ftp上,所以用起来比较放心,而且支持unicode,这样可以直接用日文blog。最近还增加了upload file和draft功能。
开心的系统使用了著名的.Text,这是一个asp.net的系统,还在不断完善中,开心对它进行了汉化。
一定要注意仔细设置asp.net的web.config配置文件。今天的在一个DropDownList的databind问题上浪费了2个小时(随后的闲逛,又浪费2个小时‘--),原因就是我在web.config里直接使用了MSpetshop的设置了,这里enableViewState="false"导致所有的页面的状态都无法保持,除非你在需要的网页里明确设置了enableViewState="true"才行,看VS的属性设置窗口的信息是不灵的,那些信息没有根据web.config的设置自动更新。这导致ms的例子都不好使了。我甚至怀疑是不是VS2003的bug。
上一个项目已经结束1个多月了,新的项目一直没有下来。最近的一个月,yan一直在设计他的workflow。workflow的思想是去年他们做open cube的时候学到的。那个系统最终还是成为了他们的噩梦。一周只回家一次,月加班时间达到300个小时,持续半年以上。最后的结果还是放弃。完全是《人月神话》里描写的泥潭。一个近百人组成的team就像一个困兽掉进了沼泽地,经常半夜2,3点钟开会,还一个人不缺,一周也不回家一次的人大有人在。开始还用sourcesafe管理,后来sourcesafe都不管用了,改用原始的笔记本,每一个要更新source的人都要先登记,在早上6点的时候,会看到大家排队,手里拿着软盘,等着更新source的场面。我虽然没有经历这些,但我可以想象得到。可笑的是,那个用来登记的笔记本有一天不翼而飞,哈哈哈哈
yan总结的workflow思想里,全部使用xml来描述各个部分。一个flow就是一个xml,一个文档也是xml,另外角色权限也是用xml管理的。这几部分最终用所谓的“部品“关联起来。没个部品就是表现层的控件,通过它来表现flow等逻辑层的内容。
我也有时间思考了一下workflow系统的设计,确实是充满难题。单单角色权限管理就很有学问。在csdn上看到一篇文章《基于授权和角色的访问控制的设计和实现》。看来角色,权限管理实在是一个复杂的问题。

white说:
企业建模里专门有一块是组织建模(BTW,企业建模中的流程建模就差
不多是工作流了,http://www.justep.com)

SAP的参考模型中,关于组织建模这块大致是将角色分为职位和组织
单元两类,组织单元是一个容器,其中可有职位和子组织单元.从而
构成一棵树,同时还可以表达上下级的管理关系,可谓比较接近企业
的真实情况(比MS的AD要更接近).用户拥有角色,可有多个角色.

我所认可的工作流模型组成包括:
   组织模型
   数据模型
   流程模型

刚好他们都是企业建模的内容.所以,要真的能很好地实现一个系统,
那它就真的称得上是BOS(Business Oeration System)了.

Thursday, September 4

想象力
早上在电车里的广告上看到一篇关于想象力的文章。上面认为诸多的艺术形式,比如电影,舞台剧,小说,绘画,都是人们之间相互交流的工具,通过这些手段传达的不是说教,而是一种共同的想象力。受众之所以喜欢这些艺术形式,是因为他们可以在精神上得到愉悦,这种愉悦就是想象力得以发挥的结果。
如果说程序设计也是一种艺术的话,从想象力的角度来看,一点也不为过。我们在利用有限的工具(程序语言,开发工具),发挥自己的想象力,去创造一个作品。对你的作品的评价好与坏,都在于需要这件产品的人是否能从产品得到某种愉悦。我们有的时候感叹一个软件非常“牛“,是因为它令我们对作者的想象力产生了佩服的感觉,通过它,作者的创作力,想象力传播给了我们。

Tuesday, September 2

ADO.Net真是好东西啊。我只能发出这种由衷的感叹。
2年多前,我在ECC设计模式的基础上成功实践开发出了一个框架结构,提高了项目的开发效率。甚至初学java的两个人在我的框架的基础之上都成功完成了一个商业网站。在当时,我非常兴奋地提出在那个框架的基础之上,做代码的自动生成程序,来解决关系数据同对象模型的相互映射,进而提高项目的开发效率。当时的想法就是通过设计XML的Schema来自动生成关系数据库结构和操纵数据的java程序。
现在看ADO.Net,它的DataSet近乎就是实现了我当时的想法,那种通过XSD来自动生成源代码的方法,确实能极大地提高生成效率。
在dev-club的这个thread里,有我对强类型DS批注的理解。

Tuesday, August 26

妻からこの畠山剛臣さんのブレインストーページを知っていた。
在这个网站上,以memo的形式记载了一个北陸先端科学技術大学院大学的研究生畠山剛臣的idea,思考方法,观点。
ブレインストーミング这个词来自英文BrainStorming(头脑风暴?)。
畠山剛臣采用这种方式,对学习和读书中遇到想法,进行发散思维,对其所思所想,记录了下来。一些观点很有价值。
BrainStorming是19世纪30年代从美国开始提倡的会议的进行方式。通过这种方法不是进行定性的数据收集,而是强调发散思维,提出解决办法。
在会议中,让全员的思维飞速转动,强调精神的亢奋状态。
它的4个准则是:
1. 批判厳禁 -- 不许恶意批判别人的意见观点
2. 自由奔放 -- 欢迎自由奔放的发言,无论什么观点
3. 量重于质 -- 发言越多越好。发言越多,包含的高质量意见就会越多。
4. 結合改善 -- 欢迎在他人意见的基础上进一步扩大联想

Monday, August 25

1989: By Thread
看到1989年的mail,不可思议。我们其实落后很多,不可盲目自大。
每天写好多程序,有时候还要同步到另外一台机器上。
如果能有一个自动备份自动同步的软件就好了。
1) Win32/.Net程序,简单易用。
2) 能实现完整备份和增量备份。
3) 选择备份文件时候能支持自定义的Filter。
4) 可以将备份刻录到CDR/DVD上,或者生成镜像文件。
5) 可以远程备份到ftp服务器上。
6) 完整的schedule定制
7) 内置脚本支持
在网络上找了几个,都不理想。
正在考虑是否自己做一个... ...

Friday, August 22

Thursday, August 21

在这个尊重历史的时代,重粒子的运行轨迹也需要记录(注意:不是"纪录",动词是记录,名词是纪录)一下。嘻嘻!!!
开张大吉