前不久看了园友的一篇文章《asp.net下web控件点评》,地址如下http://www.cnblogs.com/windinwing/archive/2009/08/17/1547803.html,主要是分析了一下web控件的优劣势。文章说的很在理,也引发了我的一些思考。这几天做一个网站,遇到一些里面所说的问题,大部分是和作者一样的烦恼,当然也有些不同的看法。

文中的第四点如下:
Title4.对于新手还有长长的_VIEWSTATE

很多时候,我们编写前台代码的时候,只是需要简单的呈现出来,不需要长长的ID,不需要span,不需要_VIEWSTATE,仅仅需要几行干净的
HTML标签,但是根本没有选项或属性设置,要么全部给你,要么全不给 .虽然我们可以像asp,和asp.net那样来编写代码,但是既然提供了
总是要用的.

其实这一点是可以通过控制web控件都有的EnableViewState="False"的属性来控制是否产生ViewState。不过,首先,每个页面控件一多,这么做就显得麻烦了;其次,有时根据页面的逻辑,有些控件还不能将属性设为false,必须得保存控件的状态,尤其在使用AJAX技术的时候,否则页面一回调,内容就丢失了。

其次,文中也提到关于Image控件的一个BUG,如下:
Title前几天碰到一个奇怪的问题,想做一个效果, 鼠标移动到图片上,高亮显示边框,美工做好加入到代码中,死活没效果,找半天不知道怎么回

事,后来无意中发现所有的Image控件,自动加上了style="border-width:0px;", 好吧,后处台处 Image.Attributes.Remove("style");
还是有style="border-width:0px;"在加上Image.Attributes.Clear();仍然有style="border-width:0px;",决对是个脑残的设计,大概是为了

解决夹在a标记中的img标记默认的1px的border的问题吧,可是这就没办法用css来处理Image的border属性了.

以前其实不大常用Image控件,所以也没有特别留意这个问题,只是觉得微软应该不会这么失败。这几天做东西,刚好用到了Image控件,刚好也产生了同样的问题,通过设CSS样式表,始终无法把边框给弄出来。后来到页面上一看Image控件的属性,就明白了。
首先,BorderStyle属性默认是"NotSet",这样通过服务器一解析,肯定会生成style="border-width:0px;"的代码,所以无论怎么改样式表,边框也无法解析出来,因为样式优先级,最先优先的是写在控件HTML代码的style属性。
其次,设为BorderStyle="Solid"后,依然没有效果,因为BorderWidth属性仍然没有,解析后仍然会出现style="border-width:0px;"的代码,只需要将其设为BorderWidth="1px",此时边框就能解析出来了。然后再根据需要处理样式表就可以控制了。

别的就暂时没有了。
微软提供的这些自带控件,应该是考虑的比较全面的,有他们的优势,不过在实际应用中,需要我们花点脑筋来解决怎么样使用。但是缺点也是很明显的,主要就是固化的比较死,不好灵活运用。作为我个人来说,我还是比较喜欢用他们提供的自带控件的。
小小意见,和大家共勉。
posted @ 2009-08-18 23:21 老四 阅读(149) | 评论 (0)编辑

通过园子里的文章看到了下边这两篇文章:

(转)我奋斗了18年才和你坐在一起喝咖啡

(转)我奋斗了十八年不是为了和你一起喝杯咖啡

关于“我的奋斗”还有这么一套短篇漫画《My struggle》很值得一看。作者是一个名叫CMJ的中国原创漫画人,画风坚韧而犀利,视角独特而个性,思想深刻而反思。在我看来,他,就是一个天才。

《奋斗》这个电视剧应该不少人都看过。我很不幸的以为这是一部励志的电视剧,看了才知道,片名应该改为《根本不用奋斗》或《富家公子奋斗在泡妞的第一线》。诚然,为泡妞而奋斗也是一种奋斗。


这两篇文章都是说一个农村的孩子通过自己的奋斗,在大城市谋得了自己的一席之地,过程的辛酸虽然在文章中都只是淡淡的带过,但还是以无比犀利的方式划开了我不愿意提及的那一部分感触。他们中的前者,在上海读了硕士,虽然没有明确指出,但可以推测已经获得上海户口;后者则一开始就在北京找到外企的工作,也应该已经获得北京户口。

可我?……

我和他们两位不同,生在一个小县城。虽然是所谓的城镇户口,但我并没有觉得这有多大的优势,尤其相较于北京、上海这些难以入迁的地方。城镇户口的优势也就是让我在小时候能过得无忧无虑一些,不用为生计发愁,不用为没钱发愁,不用学习之余还要忙地里的农活。

对于现在的我,马上就要步入而立之年,面对生活依然有着不少的窘境、困惑和忧虑。我属于绝对的“北漂”一族:没有朋友在北京,没有同学在北京,没有关系,没有后门,没有背景,当然也没有北京户口。靠得只能是自己,相信的也只有自己。每天都要重复面对快节奏而又高压力的城市生活。即使累了,疲了,倦了,伤了,痛了,也只能蜗居在自己的房间里,独自一人舔舐着的伤口,承受着内心的孤独和苦痛。

经常有人问我:“你觉得这不好,那不好的,那还留在北京干啥?”我一般马上纠正他:“我从没说过北京这不好,那不好。北京的硬件设施越来越好,北京的社会安定度相对比较高,北京的人文气息很浓重,北京的历史意味非常悠远。”我喜欢北京这座城市,喜欢它的文化氛围,喜欢它的历史意味,喜欢它的人文环境。我不喜欢那些毗邻邸次的高楼大厦,我喜欢在胡同里骑着自行车慢慢的晃悠,喜欢听那些抑扬顿挫的吆喝声。可这些,对于一个来到北京的异乡人,尤其没有户口的异乡人,换不回也很难得到这座城市对于自己的认同感。

网络上充斥着对于外地人的指责,生活中随处可见对于外地人的嘲弄。更可悲的是,我们同样在为建设这个城市在努力,我们同样在为这个城市纳税,但找工作需要你出示暂住证,买车需要你出示暂住证,买房需要你出示暂住证,甚至生孩子也需要你出示暂住证,孩子生下来没有户口,上学有钱也不一定能上,上了也不能在北京参加考试,等等等等……虽然我在极力回避“暂住”这个制度,我更没有所谓的“地域歧视”,政府也放宽了对于暂住证的排查,但无孔不入的“暂住”制度明确的告诉你,你不是这个地方的居民,你永远只是个暂住的。对于北京,我是外地人;对于家乡,我是在外的游子。北京人怪我们抢走了他们的工作机会,提高了北京的生活成本,哄抬了北京的房价;家乡人认为我们学成在外却没有为家乡的发展做什么贡献;家里人希望我们能在大城市好好工作,好好学习,闯出名堂。

社会发展的区域性不平衡,政策的优势,投入力度的不同,以及人们思想的开阔,造就了这种大规模涌入一线大城市的现象。一个城市人多了,必然造成人均占有资源的减少。相对于作为本地人的你们所减少的资源量,外地人获得资源量要少得多。你们生来就拥有这个城市的户口,生来就在这个城市占有一席之地,你们有家有朋友,你们工作时,无须为后勤的事考虑太多。而最重要的是,逢年过节,你们不需要经过火车站进行像候鸟一样在中国大地上的大规模迁徙。而我,非但要进行而且更需要看天吃饭,哪天国家的放假政策一变,回家的时间就变得更少。有时,你们可以埋怨父母管得太多,却不知道,我内心有多么羡慕你们,父母就在身边,触手可及的地方。

所有的这些我都能接受,我认为这就是我的奋斗。我的奋斗与别人无关,与我所在的地方无关。

其实,我的奋斗从小学到大学都与程序无关。直到找工作,我才意识到,原来自己在大学学了个挺不错的专业:计算机。当然,找到工作后,才发现,原来这一行也没比别人好多少,就只是找个工作相对比较容易而已。

第一份工作在长沙,离家很近,待遇很低。一个比较可笑的事情是,过年的时候,公司对员工没有任何表示,反而是客户给我们做现场开发的所有人员封了一个100的红包。记得有一次想给一个朋友送份比较好的礼物,攒了3个月的钱楞是没攒上。那时,虽然很苦,可自己很要好的朋友经常来我租住的地方玩,要多热闹有多热闹。那段时间对我来说,用一个比较洋气的说法就是:the best time of my life

第二份工作去了上海。其实也就是这个时期,才坚定了我飘在外头的决心。因为大城市毕竟眼界要开阔很多,接触的范围也要广很多。对于搞程序的人来说,接的项目也要丰富很多,能够接触到的技术人员也更多更好,对于自身的发展是有很大的促进作用。但是,印象最深的还是刚到上海那会。除去火车票钱,身上仅仅带了1100多块钱,除掉第一个月的房租700,靠着400多块钱在上海生活,找工作。每周前程无忧的报纸必买,每个招聘会必去,一个人终日奔波在人生地不熟的城市。一次次的碰壁,一次次的继续应聘。一开始还坐地铁去应聘的地方,后来为了节约钱,开始研究公交线路。家里来电话,我总是说,形势挺好的,很多单位有面试的机会。其实听着爸爸在电话那头说“实在不行就回家吧”,眼泪忍不住就想往外掉。凭着不服输的劲头和年轻的闯劲,在最后只剩下90多块钱,到上海20多天的时候,终于有了工作。当时那种拨开云雾见青天的感觉,我至今还记忆犹新。

后来我来到了从小向往的北京,它的氛围并没有让我失望,很快的我就喜欢上了这里。工作方面,因为有了之前的技术积累,找工作也比较容易。虽然来北京后也有换过工作,但总算是比较稳定的。而得到一个技术总监的帮助后,我的工作能力也有了长足的进步。

但和你们有着自己固定的家,甚至好几处房产不同,我还是需要租房。合租负担小但生活不方便,单独租开支又过大,而租房最大的敝处就是需要不停的换地方和搬家。因为厌倦了不停的搬家,我终于厚着脸皮让家里支援了一些钱,05年底付了首付,买了也只能买得起一个54平的房子,从此踏上了“房奴”这条不归路。对我而言,一再声称在买房这一点上我比较幸运,可你们随便一出手就是多大多大的房子。而我的家,多一个人就觉得有些拥挤了。

当我终于有了一个要好的女友后,生活的磨砺,却让我不得不思考我是否能提供给她一个安定殷实的生活。虽然知道女友的等待并不容易,可我却不敢轻易的给她关于结婚关于一辈子的承诺。而更加烦恼的是以后孩子的事情。因为没有北京户口,在北京生小孩要办的很多手续需要穿梭于老家和北京之间。生下来孩子以后,怎么来带小孩?放在北京,父母过来后房子太小,父母不过来,我们谁来带他?小孩长大后,他的教育怎么办?在北京念书?要交高额的附加费用,还不一定有学校愿意接收,即使念了最后还是不能在北京参加考试。在老家念书?既给年迈的父母增加了负担,孩子不在自己身边感觉也不会太好,留守儿童的问题现在还少吗?去申请所谓的北京绿卡?被卡住无法申请下来那还是小事,即使有了还是一样要面临上面所有的问题……唯一让我欣慰的是,父母有着自己的退休金,除了逢年过节给家里带点钱,父母并不需要我负担太多。父母也无数次贴心的跟我说:“你在外头好好干,我们不会成为你的负担。”在即将步入而立之年的我的面前,非但没有什么可立的,还是摆着一堆这样或那样的问题。

随着工作能力的增长,生活逐步的稳定,我却发现时间已经匆匆的从我身边溜走了好几个年头。我的奋斗进入到上升时段的时候,我却发现时光已经磨平了我年轻的锐利,失却闯劲的我上升的幅度已经开始减慢。年岁的增加,对于干软件这一行的,多少有些不利的影响。新技术的层出不穷,学习精力的分散,身后年轻人的迅速崛起,这些都是我需要面对的。而当我接触软件这一行,越接触久,越接触深,却越发现自己所知道的越少越不足。失去闯劲的我,面对“跳槽”这个词开始了更多的思考。因为有着房贷的压力,有着小家庭的压力,我甚至开始考虑如果失业了该去做什么……

浑浑噩噩这个词并不是随便说说,随着思考的深入,回首这30年,我竟然发现,我甚至都不知道我为了什么奋斗?而什么又是奋斗?简单的问题,我想我和你的答案一定是不一样的。

所有的这些,都是我真实的奋斗,我到目前为止将近30年的奋斗。我的奋斗,不是为了得到这个城市的认同,更不是为了能和你一起喝咖啡。

posted @ 2009-06-05 13:40 老四 阅读(174) | 评论 (2)编辑
我能抽象出整个世界...
但是我不能抽象出你...
因为你在我心中是那么的具体...
所以我的世界并不完整...
我可以重载甚至覆盖这个世界里的任何一种方法...
但是我却不能重载对你的思念...
也许命中注定了 你在我的世界里永远的烙上了静态的属性...
而我不慎调用了爱你这个方法...
当我义无返顾的把自己作为参数传进这个方法时...
我才发现爱上你是一个死循环...
它不停的返回对你的思念压入我心里的堆栈...
在这无尽的黑夜中...
我的内存里已经再也装不下别人...
我不停的向系统申请空间...
但却捕获一个异常---我爱的人不爱我...
为了解决这个异常...
我愿意虚拟出最后一点内存...
把所有我能实现的方法地址压入堆栈...
并且在栈尾压入最后一个方法---将字符串"我爱你,你爱我吗?"传递给你...
如果返回值为真--我将用尽一生去爱你...
否则--我将释放掉所有系统资源. 
posted @ 2008-06-26 10:02 老四 阅读(130) | 评论 (3)编辑
        无意中看到这篇文章,觉得挺好的,就转过来自己收了。

/*****************************************************************************/
        如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS)。

  在这里,我不打算介绍使用SQL Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计。这些经验来自我过去几年中经受的教训,一直来,我看到许多同样的设计错误被一次又一次的重复。

  一、了解你用的工具

  不要轻视这一点,这是我在这篇文章中讲述的最关键的一条。也许你也看到有很多的SQL Server程序员没有掌握全部的T-SQL命令和SQL Server提供的那些有用的工具。

  “什么?我要浪费一个月的时间来学习那些我永远也不会用到的SQL命令???”,你也许会这样说。对的,你不需要这样做。但是你应该用一个周末浏览所有的T-SQL命令。在这里,你的任务是了解,将来,当你设计一个查询时,你会记起来:“对了,这里有一个命令可以完全实现我需要的功能”,于是,到MSDN查看这个命令的确切语法。

  二、不要使用游标

  让我再重复一遍:不要使用游标。如果你想破坏整个系统的性能的话,它们倒是你最有效的首选办法。大多数的初学者都使用游标,而没有意识到它们对性能造成的影响。它们占用内存,还用它们那些不可思议的方式锁定表,另外,它们简直就像蜗牛。而最糟糕的是,它们可以使你的DBA所能做的一切性能优化等于没做。不知你是否知道每执行一次FETCH就等于执行一次SELECT命令?这意味着如果你的游标有10000条记录,它将执行10000次SELECT!如果你使用一组SELECT、UPDATE或者DELETE来完成相应的工作,那将有效率的多。

  初学者一般认为使用游标是一种比较熟悉和舒适的编程方式,可很不幸,这会导致糟糕的性能。显然,SQL的总体目的是你要实现什么,而不是怎样实现。

  我曾经用T-SQL重写了一个基于游标的存储过程,那个表只有100,000条记录,原来的存储过程用了40分钟才执行完毕,而新的存储过程只用了10秒钟。在这里,我想你应该可以看到一个不称职的程序员究竟在干了什么!!!

  我们可以写一个小程序来取得和处理数据并且更新数据库,这样做有时会更有效。记住:对于循环,T-SQL无能为力。

  我再重新提醒一下:使用游标没有好处。除了DBA的工作外,我从来没有看到过使用游标可以有效的完成任何工作。

  三、规范化你的数据表

  为什么不规范化数据库?大概有两个借口:出于性能的考虑和纯粹因为懒惰。至于第二点,你迟早得为此付出代价。而关于性能的问题,你不需要优化根本就不慢的东西。我经常看到一些程序员“反规范化”数据库,他们的理由是“原来的设计太慢了”,可结果却常常是他们让系统更慢了。DBMS被设计用来处理规范数据库的,因此,记住:按照规范化的要求设计数据库。

  四、不要使用SELECT *

  这点不太容易做到,我太了解了,因为我自己就经常这样干。可是,如果在SELECT中指定你所需要的列,那将会带来以下的好处:

  1 减少内存耗费和网络的带宽

  2 你可以得到更安全的设计

  3 给查询优化器机会从索引读取所有需要的列

  五、了解你将要对数据进行的操作

  为你的数据库创建一个健壮的索引,那可是功德一件。可要做到这一点简直就是一门艺术。每当你为一个表添加一个索引,SELECT会更快了,可INSERT和DELETE却大大的变慢了,因为创建了维护索引需要许多额外的工作。显然,这里问题的关键是:你要对这张表进行什么样的操作。这个问题不太好把握,特别是涉及DELETE和UPDATE时,因为这些语句经常在WHERE部分包含SELECT命令。

  六、不要给“性别”列创建索引

  首先,我们必须了解索引是如何加速对表的访问的。你可以将索引理解为基于一定的标准上对表进行划分的一种方式。如果你给类似于“性别”这样的列创建了一个索引,你仅仅是将表划分为两部分:男和女。你在处理一个有1,000,000条记录的表,这样的划分有什么意义?记住:维护索引是比较费时的。当你设计索引时,请遵循这样的规则:根据列可能包含不同内容的数目从多到少排列,比如:姓名+省份+性别。
       七、使用事务

  请使用事务,特别是当查询比较耗时。如果系统出现问题,这样做会救你一命的。一般有些经验的程序员都有体会-----你经常会碰到一些不可预料的情况会导致存储过程崩溃。

  八、小心死锁

  按照一定的次序来访问你的表。如果你先锁住表A,再锁住表B,那么在所有的存储过程中都要按照这个顺序来锁定它们。如果你(不经意的)某个存储过程中先锁定表B,再锁定表A,这可能就会导致一个死锁。如果锁定顺序没有被预先详细的设计好,死锁是不太容易被发现的。

  九、不要打开大的数据集

  一个经常被提出的问题是:我怎样才能迅速的将100000条记录添加到ComboBox中?这是不对的,你不能也不需要这样做。很简单,你的用户要浏览100000条记录才能找到需要的记录,他一定会诅咒你的。在这里,你需要的是一个更好的UI,你需要为你的用户显示不超过100或200条记录。

  十、不要使用服务器端游标

  与服务器端游标比起来,客户端游标可以减少服务器和网络的系统开销,并且还减少锁定时间。

  十一、使用参数查询

  有时,我在CSDN技术论坛看到类似这样的问题:“SELECT * FROM a WHERE a.id='A'B,因为单引号查询发生异常,我该怎么办?”,而普遍的回答是:用两个单引号代替单引号。这是错误的。这样治标不治本,因为你还会在其他一些字符上遇到这样的问题,更何况这样会导致严重的bug,除此以外,这样做还会使SQL Server的缓冲系统无法发挥应有的作用。使用参数查询, 釜底抽薪,这些问题统统不存在了。

  十二、在程序编码时使用大数据量的数据库

  程序员在开发中使用的测试数据库一般数据量都不大,可经常的是最终用户的数据量都很大。我们通常的做法是不对的,原因很简单:现在硬盘不是很贵,可为什么性能问题却要等到已经无可挽回的时候才被注意呢?

  十三、不要使用INSERT导入大批的数据

  请不要这样做,除非那是必须的。使用UTS或者BCP,这样你可以一举而兼得灵活性和速度。

  十四、注意超时问题

  查询数据库时,一般数据库的缺省都比较小,比如15秒或者30秒。而有些查询运行时间要比这长,特别是当数据库的数据量不断变大时。

  十五、不要忽略同时修改同一记录的问题

  有时候,两个用户会同时修改同一记录,这样,后一个修改者修改了前一个修改者的操作,某些更新就会丢失。处理这种情况不是很难:创建一个timestamp字段,在写入前检查它,如果允许,就合并修改,如果存在冲突,提示用户。

  十六、在细节表中插入纪录时,不要在主表执行SELECT MAX(ID)

  这是一个普遍的错误,当两个用户在同一时间插入数据时,这会导致错误。你可以使用SCOPE_IDENTITY,IDENT_CURRENT和IDENTITY。如果可能,不要使用IDENTITY,因为在有触发器的情况下,它会引起一些问题(详见这里的讨论)。

  十七、避免将列设为NULLable

  如果可能的话,你应该避免将列设为NULLable。系统会为NULLable列的每一行分配一个额外的字节,查询时会带来更多的系统开销。另外,将列设为NULLable使编码变得复杂,因为每一次访问这些列时都必须先进行检查。

  我并不是说NULLS是麻烦的根源,尽管有些人这样认为。我认为如果你的业务规则中允许“空数据”,那么,将列设为NULLable有时会发挥很好的作用,但是,如果在类似下面的情况中使用NULLable,那简直就是自讨苦吃。

  CustomerName1

  CustomerAddress1

  CustomerEmail1

  CustomerName2

  CustomerAddress2

  CustomerEmail3

  CustomerName1

  CustomerAddress2

  CustomerEmail3

  如果出现这种情况,你需要规范化你的表了。

  十八、尽量不要使用TEXT数据类型

  除非你使用TEXT处理一个很大的数据,否则不要使用它。因为它不易于查询,速度慢,用的不好还会浪费大量的空间。一般的,VARCHAR可以更好的处理你的数据。

  十九、尽量不要使用临时表

  尽量不要使用临时表,除非你必须这样做。一般使用子查询可以代替临时表。使用临时表会带来系统开销,如果你是用COM+进行编程,它还会给你带来很大的麻烦,因为COM+使用数据库连接池而临时表却自始至终都存在。SQL Server提供了一些替代方案,比如Table数据类型。

  二十、学会分析查询

  SQL Server查询分析器是你的好伙伴,通过它你可以了解查询和索引是如何影响性能的。

  二十一、使用参照完整性

  定义主健、唯一性约束和外键,这样做可以节约大量的时间。

posted @ 2008-06-13 14:03 老四 阅读(291) | 评论 (1)编辑
6月9号,在平衡了恩多的利益关系后,北京地铁的自动售检票系统终于亮相了。这个系统从根本上来说,是为了给广大人民群众的出行提供方便的一个系统,是一个提高城市现代化的手段。可是,因为技术支持单位对于困难的考虑不足,导致了一个本应为用户提供方便的系统却给用户带来了更多的麻烦,实际上就是将系统不完善所造成的额外开销都转嫁给用户来承受。对于一个社会性的利民系统来说,可以说是一个彻头彻尾的失败,至少在现阶段是如此。

在经历了北京站的一系列混乱和痛苦之后,作为一个软件开发人员,从软件工程的角度也分析了一下这个项目阶段性失败原因。也为自己在以后的工作中提了个醒。

一、软件需求阶段
系统是为使用者服务的,那么是不是要多了解用户的需求?排了很长的队进站,但被堵在卡机外的很短的一个时间里,我碰到了好几例同样的情况:准备两个人同用一张卡,结果被告知一卡通的卡只能刷一次。这样最基本的需求难道都没有人曾经提过吗?有没有就这个问题论证过呢?需求分析,需求分析,说到底,提出了需求,还需要分析的。

首先是旧有系统的分析。旧的北京地铁是通票制,无论坐多久多远,导多少次车,只要不出站,就是2块钱。出站什么都不用管,到站就出去就是了。
既然如此,那么有没有必要现在的电子票进站要刷一次,出站要刷一次?如果说,以后北京地铁会变为分段收费(先不说什么时候变),那么现阶段是可以为这个留一个扩展的接口,然后先实现通票的需要吧。如果是通票,只需进站刷一次卡,那么,一张卡是可以多人使用的。其实这在以前一卡通刷卡进站都是已经实现的,改为现在的卡机,实际上是退后了一步。

有的人会说只刷一次不好解决逃票的事情。但是,以前售纸质票和刷刚开始刷一卡通的时候就能杜绝逃票的问题吗?我一直都认为,软件系统不可能解决实际应用中的所有问题,尤其是这样社会性质的大系统,必须配备相应的制度来进行管理,加大规范执行的力度,把从售票系统节省下来的人力用在这些制度的执行和规范上来。


二、系统设计阶段
从我个人的使用过程来看,这个系统好像只设计到了一种理想的状态,完全按照系统的约束才能正常使用这个系统。缺乏处理分支情况的能力,缺乏处理非正常情况的能力。也就是整个系统的容错性,健壮性不够。

三、系统测试阶段
据我所知,这套系统的测试用户是技术支持单位组织某学校的学生配合进行的测试。其实,这还是在说一点,太过理想化了。北京的小孩,不说别的,光耳濡目染的,见识都少不了,整体素质都是很高的。他们对于这样的系统的认知和接受度是很高的。而整个测试过程又是在技术单位的组织下,按照固定的流程进行,没有充分考虑人流量、用户心理以及进站口实际环境等问题,所以这个测试过程估计还是过于理想化,对系统在实际应用过程中会出现的问题还是没有充分的预算。

在北京站地铁入口的经历很够说明问题,有非常多的用户无法刷卡,没处买卡,被门扇夹压等。本来北京站就是个人流大的地方,大伙都是刚下火车,有不少人,可能还是站着到的北京,一路上诸多辛苦。坐地铁本来就是希望能快点回家,到头来,不光进地铁站排了很长的队不说,拥挤不说,临到进站了,突然告诉你,你进不去。这不是添堵吗?也难怪那么多人在入口处破口大骂。真难为了在现场的地铁工作人员和技术支持单位的技术支持人员。

四、系统的实施阶段
这个其实是这个系统最为失败的一个环节。一切系统的问题其实都可以在这个环节进行补救,但是就是因为技术支持单位根本没有认识到实际情况的复杂性,对自己的系统过于理想化,结果却给所有的用户造成了诸多的不方便。

1、对各个地铁站出入口的情况没有很详细的掌握
在北京,很多的地铁站由于历史的原因,出入口都很窄,不像上海那边会有一个很大的入口大厅。这样,设置卡机后,造成的一个问题,尤其在人流量巨大的几个站,比如北京站,建国门站,复兴门站等等,就会造成人员极度拥堵的情况;而我经过的北京站又没有像西直门那样在入口外做一个有一定长度的规范排队的铁护栏,因此人员拥挤的情况比较严重。
2、卡机本身的设置问题
地铁站的入口,因为一部分卡机要用来做进站刷卡,一部分用来做出站刷卡,因此卡机占据了入口横截面所有的宽度。卡机就等于是一个拦路虎,栏住了所有人的去路。因为没有设置应急的出入口,所以卡机如果有任何的状况,根本就没有任何的回旋余地,旅客就根本无法进站。
就北京站这个具体的个案来说,它周围没有可以买单程卡的窗口,唯一的自动售票机又不工作,只能出了地铁站,从火车站广场的天桥到马路对面的地铁入口,再去买票进站。这给旅客增加了很多很多的麻烦。一个本来是为民服务提供方便的系统,却完全起了反效果。
对于这个问题,其实只要提供一个按照原有方式进站的通道,很容易就能解决。毕竟,这个自动售验票系统是在初次运行的试运行阶段。在这个阶段居然没有保留应急出入口,一下把所有的路线全部堵死。旅客不骂才怪。
3、卡机的扇页门
挺可笑的是采用这种扇页门来封闭卡机通道。其实从宣传片上也能看出技术支持单位其实已经发现了问题了,却没有进行补救。以至于扇页夹人的事情还是会经常发生。技术支持单位总是希望人人都能按照他们理想的情况下来使用这套系统。却没有想到,有很多人,可能是头一次来北京,甚至可能投一次坐地铁;而这些使用者的认知程度不一定都会和北京的学生一样那么高,那么容易接纳新事物。我几乎可以肯定的是,初次见到这个扇页的人,在扇页打开那一瞬间多少会迟疑一下。而扇页关闭的时间刚好和不少人惊异后反应过来的时间差不多,夹人的事情发生也就在所难免了。不希望发生和不会发生是两码事。
其实超市那种横向的3脚支架挺好的,而且这种方案已经被市场证明过了,而且很成熟了,却非得弃之不用。
4、系统的使用培训
对于整套系统,地铁的工作人员和旅客一样也是系统的用户之一,只是拥有不同角色和不同权限而已。因此,不仅仅只是对旅客需要在进出站的时候进行引导,而且对于地铁工作人员对系统使用和操作的培训也应该同样重视。
目前,一卡通的故障率比较高。很多人的一卡通都存在不能刷或刷了没有反应的问题。系统又要求进站出站刷卡的严格一一对应(在通票体系中完全没有意义),导致很多一卡通的卡会出错。出错后的卡必须去售票窗口进行处理。那么处理卡故障的人和买票的人必然混杂在一起,从而导致买票的队伍长时间停滞,延长了买票人的等待时间。
我在北京站刚好遇到了这样的情况。好不容易从天桥翻过去,排队买票。结果前头排的一哥们的卡出故障了,在窗口处理卡。因为售票员熟练度不高,导致处理过程花了比较长的时间。后面有不耐烦的人就可是在抱怨了。


其实,无论做什么系统,最后做出来都是给人用的。在设计、实现和实施系统的时候,我们都应该本着方便使用者的目的,站在使用者的角度,尽量多一些人性化的考虑。
地铁的自动售检票系统虽然在目前阶段,有很多不如意的地方,但是毕竟总体上它是要往前走的。只是希望开发方和地铁运营方,多为乘客思考,在初次运行的试运行阶段能够多多换位思考,乘客最需要的是什么样的系统,解决一些实际的问题。对于自动售检票系统的实施,不能过于着急,想着一口气就完成所有的更新换代工作。这需要开发方和地铁运营方的精诚合作,也需要给乘客逐步适应的时间,循序渐进的才能把这个工作沿着真正有利于乘客有利于现代化的方向推动下去。

最后,用一个交流会上听一微软专家说过的话来结尾:无论系统用什么实现,技术手段是多么的复杂,但表现给用户一定得简单易行,越傻瓜越好。我想,这也就是软件行业的一个终极目的吧。
posted @ 2008-06-10 14:06 老四 阅读(981) | 评论 (22)编辑
     摘要: 2008Beta2版也试用了一段时间,最近比较忙一直没时间捣鼓这个,再一上网就发现正式版已经发布了,不过是英文版带90天限制的。下面是微软官网的下载页面地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=83c3a1ec-ed72-4a79-8961-25635db0192b&DisplayLang=en突破90天使用限制...  阅读全文
posted @ 2007-12-28 14:00 老四 阅读(1981) | 评论 (6)编辑
     摘要: 最近工作很忙,无法更新设计模式的读书笔记,几乎没有时间看书。真实罪过啊……不过工作当中还是很有收获的。2005新上岗了。慢慢的也开始熟悉了它的用法。其中提供的母版页技术,是个相当实用的东西。大大简化了编程的手段,减少了工作量。随着使用的深入,开始使用母版页嵌套的技术。不过这个东西好,但是一直有一个比较困扰开发人员的地方。那就是:使用母版页嵌套,无法切换到视图界面进行编辑,在编辑页面的时候,只能看着...  阅读全文
posted @ 2007-08-02 16:17 老四 阅读(4067) | 评论 (21)编辑
     摘要: 今天项目正式上线运行,结果被测试出一个问题,登录后,结果转向一个登录服务器的页面,按道理这个页面不会出现,即使出现也应该出现在登录页面之前。大为不解。回到开发环境一看,原来登录后转向的页面被修改了,两个页面同名,都叫index页面,但是路径完全不同。选择登录服务器的是在根目录下,而登录后转向的页面是在根目录/Ent下。打开VSS一看历史纪录,表明在根目录的index页面在签入的同时也将ent目录下...  阅读全文
posted @ 2007-06-21 10:27 老四 阅读(261) | 评论 (4)编辑
     摘要: 免得到了要用的时候,要到处找window.open(page, "", "height=300, width=520, top=100, left=300, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no");toolbaryes/no建立或不建立标准工具条location yes/no建立或不建...  阅读全文
posted @ 2007-06-14 13:28 老四 阅读(306) | 评论 (0)编辑
     摘要: 一段很有用的代码,转过来看看。1usingMicrosoft.Win32;2usingSystem.Reflection;3AssemblyNamean=newAssemblyName();4RegistryKeyRegKey;5RegKey=Registry.ClassesRoot;6RegKey=RegKey.CreateSubKey("*\\shell\\MyApp");7RegKey.Se...  阅读全文
posted @ 2007-05-18 11:38 老四 阅读(831) | 评论 (2)编辑