haoxiaobo

从C到C++又到.net, 有一些心得, 和大家交流下...
posts - 34, comments - 222, trackbacks - 1, articles - 6
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2009年4月8日

    从silverlight 1开始,MS对这个技术的定位似乎更重视于互联网应用的娱乐性体验,但是,我认为silverlight技术应该更多关注一下企业应用的解决方案。

    把html应用于企业应用的原始动力是易于维护和部署,但是由于html的设计先天上就只是为了内容的展示而非交互,因此在实现企业应用中常有的复杂逻辑、界面逻辑控制方面根本就是草率应付,虽然后来加入了JS来扩展应用,但是基础html规范的简陋,使得即使我们只是想要实现一个限定类型的输入框,也不得复制一堆堆繁琐而丑陋的代码。

    另外一个问题是http协议的无状态性。功能提交后的新页面实际上与之前的页面之前没有任何关系,即使你只是刚刚离开了0.1秒,服务器都不会记得你是谁,你之前有没有来过,你的上下文信息等。可以说,WEB应用的开发,有一半努力都是在围绕如何解决这个问题而展开,session, cookies, viewstat, hiddeninput, url string ... 虽然通过这些或高明或不高明的手段,会话上下文信息可以得以一定程度的延续,但是比起CS架构的程序中上下文的自然持续来,WEB程序为解决这种问题而付出的努力、进而造成的资源浪费,真得是让人无法接受。

    http协议的无状态性带来的另一个问题是很难实现WEB事务,而操作的一致性却正是企业应用中所最重视的。用户可以随便地在页面之间中断,关闭,回退,前行,把界面控制逻辑搞得无所适从,一团乱麻,真是企业应用的恶梦。

    http的这种设计,是为了提高服务器的性能容量而,以及受限于协议开发时的技术能力,而做出的妥协,html亦然。因此,web程序极合适于开发信息发布系统,而不宜于开发逻辑要求、界面控制要求较高的企业应用。

    silverlight来自于AcitiveX\jave applet等这种嵌入式程序的思想,但是MS用新的.net技术和为这种思想进行了重新再造,虽然是新瓶装旧酒,但是有可能新一举解决部署和功能两方面的问题,即有web程序的易于部署和维护,又有客户端程序的易于开发,加上严格的UI行为控制,加强的安全性策略,以及更先进的通信能力,silverlight会成为下一代企业应用的主流解决方案。

    但是,silverlight似乎把解决企业应用问题放在了比较低的优先级上:1.0时,不支持强类型的.net语言开发,到2.0时,.net语言功能的加入使得已经可以在企业应用场合中试着做一些尝试了。但是,很多功能还只是简化版,无法完全满足要求,而企业应用中比较不重视的娱乐、多媒体等功能却得到了大力的增强。

    这与MS一向忽视企业用户的传统一脉相承,同一个原因让MS忽视过internet开发,忽视过数据库,忽视过服务器产品,忽视过服务应用开发。也正是同一个原因,使.net这个优秀平台在进入很多大型企业应用的核心地带时多遇阻碍。但是好在MS总是能及时醒悟,通过强大的技术能力收复失地。IE来了,SQLSERVER来了,.net来了,现在,silverlight也来了,但是,和MS的一贯作风一样,silverlight首先解决面向个人客户的问题。

    我对silverlight这个技术报以最热忱的希望,因为它把应用开发、逻辑控制、与部署维护等几个要素调和在同一种技术中,提供了目前为止最好的解决方案,因此,silverlight的架构非常合适于企业应用的开发。希望silverlight能在后续的发展中,能在解决富UI体验的同时,再为企业应用方案方面提供更多支持。

    可喜的时,在silverlight 3.0的改进中,果然已经包括了一些对企业应用支持的增强。 
    以下内容摘自:http://silverlight.net/forums/p/23990/87544.aspx
    Richer text control                                   富文本框
    Support for spell checking                            语法检查
    Support for inline tables                             行内表格
    Support for PDF                                       PDF文档支持!
    HTML rendering                                        html生成。
    Printing                                              打印!!
    Offline storage                                       离线保存!!
    Local database storage                                本地数据库!!
    Database synchronization                              数据同步!!
    Can install Silverlight application on desktop        可以把应用安装在桌面上!!
    Access to local hard drive limited to MyDocuments     可以访问本地硬盘上的“文档” !!!
    Access to all of hard drive                           可以访问本地硬盘!!!
    Can drag & drop from desktop to Silverlight           可以从桌面上拖拉对象到silverlight!!
    Ability to create new Silverlight windows             可以创建新窗口!! 是不是指对话窗那样的模态窗口?
    Support for device access such as USB                 可以访问本地设备!!
    Hardware accelerated graphical effects                硬件图形加速。
    Blend modes                                           融合(?)模式
    Frame based animation                                 帧动画
    Inverse kinematics / bones                            反向动力与骨架!
    3D                                                    3维动画

    (但是我仔细看过之后,似乎上述的内容比较时久,而可能与真正的silverlight3不同!)


    接下来我们还需要什么?
   
    http上下文的访问能力。
    服务器session对象访问能力。
    更方便地访问宿主页的viewstat。
    根据安全设置, 可完全访问web service。
    模态对话窗。
    应用Closeing, Closed,Unload事件支持。
    一个服务器数据源映射层,透明提供对服务器数据源的操作功能?
    事务支持。
    ...
   
   

posted @ 2009-04-08 11:58 HAL9000 阅读(2815) | 评论 (13)编辑

2008年7月18日

只是一个简单的测试, 用了三种方法来做10万条记录的插入.  不过我没有测试拼10万条sql插入的效率.
应用在:dell inspiron 640M本本上跑的. 1.60双核CPU, 2G内存.  服务器是HP360, 8CPU, 4G内存. SQL2000数据库.
仅供参考.

一.每次都调用ctx的InsertOnSubmit方法把对象放入:
2008-7-18 14:29:55 开始生成100000个对象. 并直接放入ctx; 用时4秒
2008-7-18 14:29:59  开始SubmitChanges;                   用时3分26秒
2008-7-18 14:33:25  完成.

运行时内存占用了4M左右.

二. 先生成一个list, 最后把list调用ctx的InsertAllOnSubmit方法把全部对象放入:
2008-7-18 18:45:06 开始生成100000个对象. 并放入list 用时1秒
2008-7-18 18:45:07 开始把list全部对象加入ctx.  用时2秒
2008-7-18 18:45:09 开始执行submitChange  用时3分33秒. 应该是数据库的原因导致的慢了7秒. 个人认为不重要.
2008-7-18 18:48:42 完成.

运行时内存占用了4M左右.

三.每生成一个记录都调用ctx的insertOnSubmit, 并且都立即执行submitChanges. 每5000个报一次.
2008-7-18 19:41:28
2008-7-18 19:41:29 0
2008-7-18 19:42:08 5000    此5000条用 39 秒
2008-7-18 19:43:39 10000   此5000条用 91 秒 多了52
2008-7-18 19:46:02 15000   此5000条用143 秒 多了52
2008-7-18 19:49:17 20000   此5000条用195 秒 多了52
2008-7-18 19:53:25 25000   此5000条用248 秒 多了53
2008-7-18 19:58:29 30000   此5000条用304 秒 多了56
2008-7-18 20:04:28 35000   此5000条用359 秒 多了55
2008-7-18 20:11:22 40000   此5000条用414 秒 多了55
2008-7-18 20:19:14 45000   此5000条用472 秒 多了58
2008-7-18 20:28:05 50000   此5000条用531 秒 多了59
2008-7-18 20:37:50 55000   此5000条用585 秒 多了54
2008-7-18 20:48:35 60000   此5000条用645 秒 多了60
2008-7-18 21:00:38 65000   此5000条用723 秒 多了78
2008-7-18 21:13:01 70000   此5000条用743 秒 多了20
2008-7-18 21:26:01 75000   此5000条用780 秒 多了37
.... 等不及了, 关了程序了.                
运行时内存占用了4M左右.

越来越慢.

posted @ 2008-07-18 21:54 HAL9000 阅读(1622) | 评论 (27)编辑

2008年7月17日

     摘要: 多年了,没有什么技术再能让我激动得无法控制住自己,包括WPF的超炫界面功能,我也只是小小地喜悦了一下,但毕竟知道界面设计更多还是美工创意的功夫,见过很多品味不够的开发人员,把自己程序界面搞得花里胡骚,简直得像不小心坐在调色板上的大熊的屁股,只能让人笑话。所以WPF的UI能力似乎离自己还有距离。
  但是,Linq,却真得把我雷到了。在我重新坐下来写这段话之前,我是激动得在屋里转了几圈的,嘴里至少把MS骂了十来句“WC!”,这骂不是怀了恨意的骂,而是怀了敬意的骂,是没办法控制自己兴奋和激动的心情的骂,就像是《朱罗纪公园》里的马尔康姆教授第一眼看到人工DNA造出来的活恐龙时,说的那句话:“这帮狗娘养的真的做了!”
  阅读全文

posted @ 2008-07-17 23:04 HAL9000 阅读(2971) | 评论 (73)编辑

2005年11月14日

在MSDN上闲逛, 无意中看到一个这样的东西: 屏幕逻辑集成.

 SLI(屏幕逻辑集成,Screen Logic Integration)用于将古老的UNIX绿色终端字符界面的程序包装成为一个web services, 以便在SOA的架构里重用这些古老的业务逻辑. 

比如, 在我们公司中, 业务系统是基于UNIX的终端程序,  一些业务逻辑是在界面上的一些输入框里输入参数, 一些资料, 或是计算结果被显示在屏幕上的一个地方, 这些业务逻辑通过NEON Systems ServiceBuilder可以以web services的方式发布. 其过程如下:

    1.在VS中新建一个NEON Systems ServiceBuilder的项目以建立一个SLI方案.(当然, 前提是你得先安装了这个东西).
    2.向导提供一个录制器, 用来记录你的telnet程序的输入和输出, 记录下屏幕上的所有的输入了信息的地方和输出了信息的地方.
    3.你在向导的录制结果中, 以直观的方式指定哪些是输入参数, 那些区域是输出结果. 还有数据类型等.
    4.向导生成有关的对象模型, 生成webservice.
  
    实际运行时呢? 我猜是这样的:
    1. web services被调用, 参数被传入. webservices程序调用neon的程序.
    2. NEON偷偷以telnet协议连入unix主机, 按录下的按键序列调用unix主机上的程序.
    3. 参数在指定的地方由程序摸拟输入.
    4. 主机程序回应结果, 这些结果本来是要显示在屏幕上的, 现在被NEON得到, 根据指定的位置信息和这些信息对应, 分辩出哪些是什么字段, 返回给web services程序.
    5. web services向调用者回应结果对象.

    这个东西真得有用. :D

MSDN上的文章在这里:
http://www.microsoft.com/china/MSDN/library/KnowledgeBase/kb_0409.aspx

posted @ 2005-11-14 11:30 HAL9000 阅读(737) | 评论 (1)编辑

2005年9月16日

 

项目组的文档风格问题

 

  叫我怎么说?我们项目组里现在充斥着华而不实的文档作风. 做一件事,这样浮燥,这样不脚踏实地是不行的.

 

  写工作文档,规范严格是重要的,但并不是要把简单问题往复杂了搞,不是要把实际问题抽象化,不是要去找一些意义含糊的词语来表达,不是要把一句话可以说明白的意思用一大段话来说得人人都看不懂!

 

  说到工作文档,我想有下面几点要做好,就够了.

  一.句法不能出问题:

  • 主谓宾一个也不能少.
  • 如果主谓宾的词语不能确切地,无岐义地表达事实,那么必须用确切的定语\状语\补语成分.
  • 不推荐应用定状补定子句.如果需要的定状补成分是一个子句,那么尽可能分句,在另一句中对于需要限制定的语素进行详细说明.
  • 标点符号不能出错,括号内外的标点要遵守括号标点的惯例.

 

  二.用词:

  用词的原则为:

  • 能简单不复杂.
  • 能用常用字词表达,则不用冷僻词.
  • 能用有确切含义的技术名词,则不用俗称或是其他非技术名词.
  • 能具体不抽象.例如要传达"椅子"的概念,就用"椅子"这个词,而不是采用"泛化单式坐恣人体支撑家俱"这样的词,虽然然这样说起来显得很高档.
  • 英文缩写词提供术语解释.
  • 有数值指标的,则不用比较级形容词,如"数据库的容量要达到非常大的容量,在大容量下的性能要在可容忍的限度内."这样的话实际上没有传达信息.而"数据库设计要支持1亿条记录的容量,同在达到1亿条数据时,用身份证号查询记录时,得到结果的时间最长不能大于0.1秒"这样的话就精确定义了信息.

看来我们项目组里有些人需要的不是专业技能, 而是需要补习语文!

 

posted @ 2005-09-16 11:49 HAL9000 阅读(644) | 评论 (14)编辑

2005年9月5日

     摘要: 求助: VC++ 中 DLL编译时结构体成员对齐的问题现在我们有一个需求, 要求我们用VC++编写一个DLL, 叫GT2MQ.dll, 输出一些函数供一种叫GRAPHTALK(GT)的语言使用, 在这些函数的实现里调用了另一个其他厂商提供的中件间产品的DLL函数(adapter.dll). GT对DLL函数的调用是有要求的, 其中最重要的是必须在编译时指定结构成员按1字节对齐, 否则GT在调用这个...  阅读全文

posted @ 2005-09-05 10:02 HAL9000 阅读(1578) | 评论 (5)编辑

2005年8月31日

     摘要: 一定得选最时摩的外国系统.雇法国公司?搞就搞最 high level 的方法论.IAA模型直接用上.SOW最少也得整上三四百页.什么再保呀,精算呀,两核呀, 银保呀.能整的全给他划进scope里去.这边搞个技术组, 那边来个业务组.办公室门口站一白人经理.打领带, 笑容特虚伪的那种.打工的一进门, 甭管是写程序的还是搞需求的都得跟经理打招呼:morning, 我的output昨天已经加班deriv...  阅读全文

posted @ 2005-08-31 15:07 HAL9000 阅读(593) | 评论 (1)编辑

2005年7月28日

     摘要: 1.1. Windows界面设计标准1.1.1. 易用性l 界面元素的名称、标签应该易懂,用词准确,避免使用模楞两可的字眼,要与同一界面上的其他元素易于区分,能望文知意最好。理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作作。 l disable而不是not visible。l 完成相同或相近功能的按钮用GoupBox框起来,常用按钮要支持快捷方式。 l 完成同一功能或任务的元...  阅读全文

posted @ 2005-07-28 14:25 HAL9000 阅读(2096) | 评论 (2)编辑

2005年6月21日

     摘要: 经过无数次的重装, 删除, 终于明白了, 必须要先装informix cli 2.82(这是唯一一个可以和oracle 9.2i共存的informix cli 32 版本), 再装oracle 9.2i cli, 才可以同时访问两种数据库的odbc 或oledb的连接, 不然的话就会在新建oracle92的ODBC或是OLEDB连接时出现找不到oracle驱动程序的问题.切记切记!  阅读全文

posted @ 2005-06-21 19:37 HAL9000 阅读(756) | 评论 (0)编辑

2005年6月5日

     摘要: 同一个输出流, 不可以在多线程上共用. 如果要共用, 一定要使用临界段.不同的输出流, 在多线程上并发处理时互相没有影响.代码说话:publicstaticvoidtestmulttts(){Thread[]arT=newThread[8];for(inti=0;i<arT.Length;i++){arT[i]=newThread(newThreadStart(testtts));}fore...  阅读全文

posted @ 2005-06-05 15:40 HAL9000 阅读(1094) | 评论 (1)编辑

2005年6月4日

     摘要: 先决条件: 装了office2000或更新版本中带的MS语音输入法. 这可能就是MS中国研究院的成果之一. 有语音输入功能和语音拼读功能.下载ms speech api sdk 5.0或5.1, 如果只用C#开发, 则不用装这个, 如果希望用C++开发, 加装语音库之类的, 不妨也装这个好了. 装了这个, 第一条的也就包含了.C#工程里加上对com对象"Microsoft Speech API 5...  阅读全文

posted @ 2005-06-04 22:56 HAL9000 阅读(3013) | 评论 (8)编辑

2005年6月2日

posted @ 2005-06-02 17:17 HAL9000 阅读(1823) | 评论 (3)编辑

2005年5月12日

     摘要: process早就有办法了, 只不过我没有注意.如调用一个命令行:"cmd /c dir c:\winnt"; 把结果放到一个字符串里. ProcessStartInfo psi = new ProcessStartInfo("cmd", " /c dir c:\win...  阅读全文

posted @ 2005-05-12 16:43 HAL9000 阅读(3005) | 评论 (3)编辑

2005年4月27日

     摘要:     寄来了门票, "2005年中国IT发展动向", 上印票价500. 是么! 看来是要去听了, 500元, 好值钱呀! 不要钱就送来了?        地址在北京饭店, 去时已经是10:30, 交了票, 一问, 什么都没有, 资料也发完了, 午饭票也发完了, 进场看看, 座位也坐完了....  阅读全文

posted @ 2005-04-27 17:18 HAL9000 阅读(1157) | 评论 (6)编辑

2005年4月19日

     摘要: 花了155元.  早有这个打算, 一直要考试, 学习等, 不敢买, 上周终于考试完了, 立即下手买回来. 昨天看到凌晨一点. 放不下了. 考试真烦, 明明答得不错, 可是还要担心不及格, 只因为老师想让不及格就可以给个50多分. 上次也答得不错, 可是具然还是50多分, 知情者说是老师嫌我们没有孝敬他, 故意把及格的都拉下来了. 50多分的就是已经及格的. 这社会, 满是邪恶.  阅读全文

posted @ 2005-04-19 15:42 HAL9000 阅读(604) | 评论 (0)编辑

     摘要: 这个卡和dialogic看来还是有一些差距的, 只支持8k8bit的声音文间, 其他的总是会出现一些奇怪的事情.  阅读全文

posted @ 2005-04-19 15:37 HAL9000 阅读(569) | 评论 (0)编辑

2005年3月11日

     摘要: 如何调用方法?本示例阐释如何通过反射调用各种方法。由于所调用方法的名称存储在字符串中,因此该机制提供在运行时(而不是在设计时)指定要调用的方法的功能,提供了使您的用户可以控制调用哪个特定方法的余地。尽管本演示集中于调用方法,如果需要您还可以设置和获取属性和字段。有关本主题的另一个实例示教,请参阅如何使用数学函数主题下的示例。   C# ListMembers.aspx [运行示例] | ...  阅读全文

posted @ 2005-03-11 17:32 HAL9000 阅读(2470) | 评论 (4)编辑

     摘要: 如何列出某类型的所有成员本示例使您可以列出给定数据类型的成员。列出类型成员的功能是快速发现哪些元素可用的很好方式。它是在系统中进行报告以及帮助开发用户文档的重要工具。使用 Reflection 命名空间,您可以控制希望显示给用户的成员类型以及其他信息(如特定方法的可见性)。还可以获取类中所有成员的信息,或仅指定某些子集(如方法或字段)。   C# ListMembers.aspx [运行...  阅读全文

posted @ 2005-03-11 17:31 HAL9000 阅读(1086) | 评论 (0)编辑

     摘要: 如何获取程序集内的类型本示例阐释如何检索给定程序集的所有类型。若要浏览程序集的类型,首先需要标识想操作的程序集。在使某对象引用了感兴趣的程序集后,可以在该程序集上调用 GetTypes 方法,它返回包含该程序集内所有类型的一个数组。您可以使用控制逻辑标识该数组中的更具体类型,并使用迭代逻辑分析您的数组,在需要时向用户返回类型信息。检索类型信息的功能对确定可用于给定任务的其他类型很有用,或对标识可为...  阅读全文

posted @ 2005-03-11 17:30 HAL9000 阅读(808) | 评论 (0)编辑

2005年3月2日

     摘要: 这个控件不错, 可以很方便地实现如vs 2003里那种窗口定位, 浮动, dock, tab化等界面效果, 今天有空下载来看了一下, 用起来还是很容易的, 大概讲一下, 省得以后忘记了.dockpanel中提供了几个可用的类, 重要的有两个, 一是DockPanel, 一是DockContent, DockPanel是从panel继承出来的, 用于提供可浮动的dock的子窗口进行浮动和dock的场...  阅读全文

posted @ 2005-03-02 15:23 HAL9000 阅读(9291) | 评论 (21)编辑