RSS 2.0 Feed
技术沾边
摘要:  .net语言中的debug功能,真是令人咋舌。"编辑后继续运行","拖动程序计数器(program counter)"等等。还得我只能对每一个新来的程序员再三强调,禁止使用上述功能。平白无故给我添了很多工作,真是世风日下人心不古。 不过这些倒还可以忍,问题是传统c/c++开发环境中的"数据断点"功能没了!我承认一个东西沦落到要动用"数据断点"的地步,已经是不灵了,问提出在前面。可现实是,大工程(尤其是接手的项目)中,往往有人抱怨"我这个变量被人改掉了!"这个时候该怎么办哩?  ...[阅读全文]

posted @ | Feedback (16) | Filed Under [ 技术沾边 ]

摘要:进一步开展定段工作 林黛玉同学的段位定下来之后,定段工作今后的开展方向就提上了我们的议事日程。 受十一段和大都督鸟两位同学的启发和委托,我来推动一下围棋相关软件的定段工作。 1。TOM对弈系统 -- 6D优点: 功能全,有一定难度,稳定性好。缺点:作为很多人上线的系统,他"分布"处理能力不够。比如,大厅上限2500人,这就很弱。现状是搞了几个大厅,万军人满为患,其他的稀稀拉拉,找下棋的都找不到。不同大厅的人,不能进入同一个游戏,更是弱。 本质上,他是大厅和游戏服务器不分的做法,很业余。[i]相比之下,diablo,对外1个大厅(realm),每个都能上几万人;而diablo的游戏服务器不是realm服务器,一个realm背后准备了有N个游戏服务器,对用户是透明的。用户就感觉到一个realm里面那么多人都可以在一起玩。这就是职业水平的系统了。[/i] 综上,TOM对弈系统定为6D. 2。新郎对弈系统 -- 4D功能和实现难度和TOM对弈系统类似,没有发现超过TOM的地方,这就注定他不可能超过6D。而新郎对弈系统稳定性明显不如TOM,这是基本功的问题了。就好比一个棋手,他棋感,大局观,官子方面和6D差不多,但是死活对杀方面差了一截,两下对比,结果可想而知,只能给4D。 3。清风对弈系统 -- 面6D总体和TOM类似,但是功能少了点,所以是面6。 4。阿呆大师的multigo --5D功能强,有一定难度,非常稳定。可以说局部上无可挑剔,相当于发阳论的级别。无奈整体只是一个小小桌面工具,不能体现阿呆大师的实力,5D。 5。TOM社区 -- 4D功能强,性能高,TOM秀创意好。不过整体只是一个低难度web应用,4D差不多了。 贴子出处...[阅读全文]

posted @ | Feedback (22) | Filed Under [ 技术沾边 ]

摘要:彭大虾文章 中,提出了一个有趣的预言--“C# designers can come up with a better syntax ”,那么到底怎么个better法呢?坐等结果没劲,我来斗胆猜一猜,若是猜不中,就当是搞笑一把为大家献丑。 我猜测:1,还是 traits的路子。没办法,模般特例化/traits 的概念确确实实摆在那里,绕不开的。2,提供比C++ "better"的traits。  比如: template <typename T> class TMD {...};这里,C++语言本身提供的 特例化方案(我杜撰的词,不知道该怎么说),只能告诉编译器T是否是一个指针,大致这样template <typename T> class TMD<*T> {...};  //具体语法可能有出入,毕竟我不是写 xTL 的:) (这里x = S,A,W ...呵呵) 如果你想告诉编译器更多的类型信息,比如"T是一个类,不过你可以用memcpy来复制他"之类,对不起,请你自己写相应的traits。这可就苦了那些 xTL的大虾闷喽,随便哪一个STL容器背后都有无数traits呦。 还好,.net语言情况没有C++那么复杂,我大胆预测,范型化.net语言提供两个"天生" 特例化方案,一个代表值类型另一个代表引用类型,就可以应付大部分xTL的要求。 比如template <typename T> class TMD< 值类型 T> {...}告诉编译器T是 int ,char 之类的东西,意味着BOX地不要,要比较就memcmp,要复制就memcpy...而 template <typename T> class TMD< 引用类型 T> {...}则诉编译器T是 object 之类的东西。 于是,彭大虾的那些令人望而生畏IComparer<T>之类,就可以休息了,这  syntax 也就 better了,呵呵。    ...[阅读全文]

posted @ | Feedback (16) | Filed Under [ 技术沾边 ]

摘要:粒子随笔    native event简介  介绍了很有意思的一个 MS对C++的扩展--事件。 文中提到的 http://lamoo.s53.xrea.com/diary/diary2003a.html这个地方很不错。从那里,我还跳到了一个讲解虚基类机制的地方,搞懂了一些事情。  我一直认为虚基类是通过在vftbl里面加一个特殊的entry--比如 vftbl[-1] 的位置放一个"求基类实例地址"的函数指针-- 来实现的。现在才知道,原来vc为了 虚基类,专门搞了另一个 vtbl,专门放"求基类实例地址"的函数指针。   在有虚函数的情况下,vc的做法,比我的假说,明显地每个基类多用4字节(一个指针的大小)。 为什么VC要付出这样的代价,不可能是做VC的人没想到我的办法,一定是我的办法里面带有不能克服的缺陷,使得他们没法采用。那么,那个缺陷是什么?我又得思考了。。。。...[阅读全文]

posted @ | Feedback (8) | Filed Under [ 技术沾边 ]

摘要:  这几天在看国内拍的天龙八部,别笑我俗,还蛮好看的。和其他金庸剧相比,情节乱改得少,外景多,武打动作悦目,服饰多彩,而且PPMM很不少。 ^^贯穿天龙八部的一条主线,是乔峰的悲剧。他被那么多"好人"冤枉,还亲手送走了阿朱,世间伤心之事,莫过于此。 为什么?谁能告诉乔峰和我们,这一些都是为什么? 原因之中,民族矛盾有之,机缘不巧有之,恶人作祟有之,等等。而我,站在一个职业程序员的角度,认为导致悲剧的据定性因素,是包括乔峰在内的大批人物,说话乃至下结论时不讲证据。 凭什么说非我族类其心就必异?凭什么说乔峰就是一系列命案的凶手?乔峰凭什么断定段正淳是带头大哥? 到底有什么证据,所有情况都考虑/考察了吗? 当然,我也知道那个时代没有讲证据的条件,就是在今天,现代意义的法庭,也只有少数国家才有。可是另一方面,有了条件,也不是人人都愿意讲证据的。 比如,国内大半的程序员,在工作时,即使条件具备仍然是不讲证据的。当我指着屏幕上一个输出结果,问当事人,那个结果对不对的时候,他/她会毫不犹豫地说"对的呀"。然后,我接问,"这个数据是从哪些源头来的,中间计算过程是怎么样的,指出来我看看"。他/她就会摇摇头"不是很清楚"云云。靠!那他之前那句"对的呀",证据何在? 有意思的是,不愿意造数据,手工计算核对数据的人,往往很愿意"学习新技术",认为那些"有用"。 我就不懂了,无论用什么技术,要是不能严格保证自己的程序是正确的,意义何在?我看,这样不讲证据就下结论的人,学什么技术都没用,都不能达到职业水平;放到宋辽战争年间,也许就是乔峰悲剧的参与制造者。 工作中的一点感想,有一说一。  ...[阅读全文]

posted @ | Feedback (24) | Filed Under [ 技术沾边 ]

摘要:上次我说了没有一个司机理解"在第一个可以左拐的路口左拐"这句话。有人说确实存在BT的理解方法解读出其二义性,更多的人说对于司机用这种表述方法不合适。都有一定的道理。 现在,我又一次面临这个问题。如果我说"第二个路口左拐",固然毫无问题,可是这等于是放弃了努力,承认自己无法对司机表达上述意思,这不是我的风格。 那我该怎么说呢?"你一个路口一个路口往前开,如果遇到的路口不能左拐,就继续往前开,能左拐就左拐"这么罗嗦的话,我是说不出口的(虽然客户对我说得出口)。 办法,我需要办法! 常言道:“问题一般可以通过增加中间抽象层来解决”。 于是我问:"第几个路口可以左拐?"司机的回答有长有短,核心意思都是"第二个"。我接着说"那里左拐。" 终于在总字数维持不变的情况下,顺利表达了意思,嘿嘿!...[阅读全文]

posted @ | Feedback (10) | Filed Under [ 技术沾边 ]

摘要:  工作中经常发生协调问题,我总是认为是描述方讲述不严格不明确造成我接受方不能领会其意思。 然而,现在我感到了迷惑。 事情的起因是因为我经常要座出租到一个地方去办事,那个地方要过一个高架桥,下桥第一个路口不能左拐,也不是我要去的,而第二个路口可以左拐,拐过去之后,正是我要去的地方。可惜我记不住路名,这第一第二也是最近刚刚记住,我一直和司机说,”在第一个可以左拐的路口左拐”。 我自认为这句话严格而精确,没有二义性。 可是,几次下来,司机没有一个懂,他们都回答”第一个路口不能左拐”! 我迷惑了,我错了吗,我该怎么表达我的意思呢?...[阅读全文]

posted @ | Feedback (26) | Filed Under [ 技术沾边 ]

摘要:在一个围棋论坛上看到这么一贴,不胜唏嘘。虽然这不是一片软件技术文章,然而其--精确简明的描述,恰如其分的举例,鲜明的对比,完整的总结,以及这背后严谨的思考--,值得业内作家们学习。 出处:http://bbs2.tom.com/sports/read.php?forumid=56&postid=155700&page_back=1&mod=modify 以下转贴 主题:什么样的段位/积分系统是最合理的? 作者:mesh2003(mesh2003) [个人文集] [回复]    先介绍一下背景:我是棋手(联众5d,tom目前3d),同时也是软件工程师.从IGS开张就在下网络围棋,对于网络围棋的段位/积分系统比较熟悉。我想讨论一下目前几种流行的体系。并建议tom使用最好的体系,以解决目前的段位问题。 网络围棋段位系统上大致有三种体系: 1.以IGS/NNGS为代表的积分/段位系统。特征是对手分,时间相关和可信段位标识。2.以联众为代表的纯对手分系统。特征是纯粹使用对手分制度。3.以tom为代表的纯相对段位系统。特征是没有积分算法,纯粹使用胜率。 下面说明几种体系的基本计算方法和优劣。先从简单的说起。 A。联众的对手分系统,棋手自定段位(上限1d),同时赋予一个基准分。然后棋手在与积分相差正负100分的对手比赛中,根据输赢最多可获得10分或失去10分,双方比例和目前积分对应。相差在100分以上的,上手获胜基本不得分,失败失去10分。下手获胜全取10分,失败基本不扣分。100分升一段. 优点:1。简单易实现。2。因为存在比例算法,积分部分反映了棋手的对手水平。 缺点:1。完全没有基准控制。什么叫基准控制?就是围棋站点的管理者能设定自身段位制度具有的实际水平。比如说,联众的管理员希望联众段位和实际业余段位大致相当。但是根据我们上面看到的计算方法,他绝对做不到这一点,只能顺其自然。根据实际使用者的统计意义上的水平,整个段位可能被哄抬得很高,也可能被压得很低。2。完全不鼓励水平相差较大的对局。这样对局的对局上手有赔无赚,为什么要下?3。低段位缺乏可信度。1d以下都可以自定,根本无法标识可信度。 B。tom的相对段位系统,最接近于现实世界的段位系统。没有积分计算(目前的积分计算只是用来排排序,和升降段基本无关),只根据最后20盘升降段赛的胜率决定升降段情况。 优点:1。简单易实现。2。部分考虑了时间情况。在同一段位内,排除了20盘以前的老比赛成绩的影响。只计算棋手最近成绩。缺点:1。完全没有基准控制。理由同上。2。不鼓励“非棋份对局”。什么叫非棋份对局?比如说,系统认为9d该让7d二子。这叫作系统规定的棋份。那么如果他们下二子局,这盘棋将作为升降段比赛。如果他们要下让先局,系统就不计算它了。3。低段位缺乏可信度。理由同上。目前tom这方面的严重情况大家都清楚。 C。以NNGS为代表的段位系统。因为这是我比较推崇的段位系统,所以说详细点。 NNGS的段位系统基本类似于IGS,但有一些不同。主要算法如下:1。系统支持新的使用者宣称各种段位。30k-7d都可以。并给予基准分。仍然以100分为一段差距。2。系统对各用户的段位都标志可信度。下的盘数越多,跟拥有“可信段位”的对手对局越多,你的段位可信度越高。一般下到20盘(这个标准可由管理员调整)左右,系统对你的段位可信度就会有一个认可,并给你的段位一个"*"。常去IGS的人可能都知道,1d*比3d都管用多了。3。对局积分计算是这样进行的:系统有一个或几个“锚”(anchor).比如说网管000同志,大家公认他是1d,那么就给他一个不变的基准分3100。其他计算都以他为原点展开。这样,网站的管理者可以控制段位的基准。系统每小时进行一次重新计算,要计算每个用户的当前最新积分。这个计算涉及你下过的每一盘有效对局。并且是时间相关的。也就是说,你的每一盘比赛,时间越老的,对当前成绩的影响越小。你的最后积分是你的每一盘比赛的权重累加。在棋份对局中,你赢棋或输棋得失分大致相等。在非棋份对局中,根据与正常棋份的差距调整。但两种对局都列入计算。下面来看几个典型实例: 实例1:新使用者宝宝猪开始对局。宣称段位为1d.积分3100。一个小时内下了4盘分先棋,分别是胜宝宝狗1d,胜宝宝牛1d*,胜宝宝熊2d*, 胜宝宝驴3d*.1个小时后计算新的积分,宝宝猪获得了后三次对局的200多分!积分上涨到3312,段位上涨为3d.这里说明几个情况:因为宝宝狗也是无*段位,所以这盘暂时不计分。同时因为宝宝猪就只有3盘对局,每一盘的权重都很大,所以每一盘都得好几十分。和宝宝猪下棋的4位棋手,因为宝宝猪还是无*段位,都暂时不扣分。宝宝猪在此后几天又下了16盘和带*的棋手分先对局。这时,宝宝狗已经取得了1k*。此时宝宝猪的积分已经上涨到3648,6d。因为宝宝狗已经有*, 宝宝猪的积分中就已经计算了和宝宝狗的1k对6d分先对局(棋份相差如此大,当然宝宝猪在这盘没得多少分,宝宝狗因为猪还没有*,就没丢分)。下完第20盘,宝宝猪变成6d*了!从现在开始,其他和宝宝猪下过的棋手都开始计算与宝宝猪对局的得分。宝宝牛,宝宝熊和宝宝驴都没有丢多少分,因为宝宝猪的可信段位是6d*,太高了。第二十一盘宝宝猪6d*胜宝宝鼠6d*, 但是这盘只得9分。因为下的盘数多起来了,每盘绝对权重就开始降低。 实例2:宝宝猪现在已经下了30盘棋,8d*.和下了800盘棋的黑衣人8d*对局。第一盘分先,宝宝猪胜。宝宝猪得6分。黑衣人丢1分。第二盘分先,黑衣人胜。黑衣人得1分,宝宝猪丢6分。黑衣人说,我实在下得太多了,分已经跑不动了,我们玩让子棋吧!我让你3个。宝宝猪大怒,心浮气躁,让3子居然输了。黑衣人得5分,宝宝猪丢27分。第四盘让3子再下,宝宝猪以平常心把黑衣人杀得落花流水,宝宝猪得2分,黑衣人一分没丢。 情况已经比较清楚,总结NNGS系统的优缺点如下: 优点:1。基准可控。2。可信度有明确标示。并且算法保证了段位向实际水平逐渐靠近。3。动态计算和重新计算使对手情况得到完全体现。4。时间影响得到充分反映。5。在积分计算上支持非棋份对局。(除让子外,还支持各种贴目和倒贴目的棋份计算)。 缺点:1。系统复杂。需要较强开发能力和管理能力。2。对于对局盘数很多的用户,新的对局增减分很少,新的水平变化和刺激难以体现。3。无*新用户有时遭到冷遇。 综合来看,NNGS类的系统是最科学,最能克服问题的。强烈建议tom作为我们最喜欢的围棋网站,向这方面改进。NNGS系统的缺点也是可以克服的。对于对局盘数多产生的“分数不动”缺陷,可以通过系统管理员调整“权重指数算式”逐步适应,即将对局数多的用户统计计算的权重大幅度向最新的对局倾斜,在程序设计上完全可行。对于无*用户的情况,基本上是一个心理问题,因为迟早这些无*用户会变成有*用户,与其对局其实也有相等的价值。只要网站用户够多,不会成为严重问题。 提供一种思路供广大棋友和网站管理者商榷。关于NNGS 积分段位系统的详细情况和详细算法,有兴趣者可登陆http://nngs.sourceforge.net/(英文)参考。   ...[阅读全文]

posted @ | Feedback (1) | Filed Under [ 技术沾边 ]

摘要:看到下面小峰的"装箱与拆箱与提高效率",不禁想起自己用C#的一个花絮。 其实我没去学C#,大致知道他是个什么东西。然后我对手下某C#爱好者的source做review,看了几眼,把他叫了过来。 我说:"你看看我写的编程规范,其中一条是能加const的地方,都要加上。你这几个成员函数都没有修改成员变量,为何不对函数加const? " "对函数加const? 有这种语法? " "要不怎么说你们不严谨!C#怎么说也是一门比较完全语言,不会没有const 函数的。去,把你那本很厚的红红的书拿来,我翻给你看"。 "给。" 噼哩啪啦,噼哩啪啦。。。 "靠!我跟你们说了,不能太相信书,你看这么厚一本连const 函数都没提到,还tmd叫大全!我直接翻MSDN给你看。" 然后我开始在MSDN里面查C#语法,查来查去,真的没有,这下成了我出洋相了。 "tmd,真的没有这种语法。没办法,不严谨的人用不严谨的语言。" "#%#%$%^$^%$^%*!!!" "玩笑,不好意思,是我不了解C#。不过你应该记住,我是对的,C#不提供const 函数,是错的。" "恩。"...[阅读全文]

posted @ | Feedback (12) | Filed Under [ 技术沾边 ]

摘要:个人认为有碍观瞻啊,还请各位大虾明察。 “时间简史”只出现过一个公式,E=mc2,因为霍金说,每出现一个公式,书的销量就少一半。 呵呵。...[阅读全文]

posted @ | Feedback (6) | Filed Under [ 技术沾边 ]

Full 技术沾边 Archive