﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-笨笨的思想片断-随笔分类-软件开发</title><link>http://www.blogjava.net/zhugf000/category/3822.html</link><description>零碎片断，杂七杂八。</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 10:15:32 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 10:15:32 GMT</pubDate><ttl>60</ttl><item><title>ASP 程序的国际化/本地化</title><link>http://www.blogjava.net/zhugf000/archive/2006/03/20/36357.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Mon, 20 Mar 2006 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2006/03/20/36357.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/36357.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2006/03/20/36357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/36357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/36357.html</trackback:ping><description><![CDATA[
		<p>前段时间在写一个小程序。用的是 ASP+MSSQL/MYSQL。要求能够同时出简/繁中文版本。<br />就碰到了一些ASP的国际化、本地化的问题，其中的一些处理技巧，与大家共享。</p>
		<p>1 HTML页面、Web应用、ASP 程序源文件全部采用 UTF-8 编码。<br />在文件头部加入行&lt;%@ LANGUAGE=JScript CODEPAGE=65001%&gt;</p>
		<p>2 SQL Server 2000 数据库：<br />    1 数据库字符串字段采用 NVARCHAR/NTEXT/NCHAR Unicode 字符类型。<br />    2 数据库操作SQL 中，字符串全部加 N 前缀： SELECT * FROM TABLE WHERE FIELD LIKE N'中文%' </p>
		<p>3 ASP 程序如果要访问文件，需要用如下代码打开 UTF-16 格式文件：<br />FileSystemObject.OpenTextFile(file,1,false,-1);<br />保证在不同平台下，相同文件都能够正确读取。</p>
		<p>4 ASP 源文件中，不包含任何语言相关字符串，如标题、错误消息。这些消息统一保存到某个文件inc_l10n.asp中。另外，提供一个 inc_strutil.asp 程序，辅助格式化字符串。<br />这样，要更换语言版本，只要更新的 inc_l10n.asp 即可。</p>
		<p>
				<font face="Courier New">inc_l10n.asp<br />&lt;%<br />var l10n_title = "ASP Application Title";<br />var l10n_about= "About ASP Application";<br />var l10n_dict_homename = "HOME NAME";<br />%&gt;</font>
		</p>
		<p>
				<font face="Courier New">inc_strutil.asp:<br />&lt;%<br />//Replace a substring in a String<br />//<br />function replaceAll(data, from, to) {<br />    var buf = "";<br />    var pos = -1;<br />    var i = 0;<br />    while ((pos = data.indexOf(from, i)) != -1) {<br />        buf = buf + (data.substring(i, pos))+ to;<br />        i = pos + from.length;<br />    }<br />    buf = buf + data.substring(i);<br />    return buf;<br />}</font>
		</p>
		<p>
				<font face="Courier New">//return the substitution result from Resource String<br />//Invoke examples: getString("Substitution Example: $1 $2","111","222")<br />//Invoke Result: "Substitution Example: 111 222"<br />function getString()<br />{<br />    if ( arguments.length == 0 )<br />        return "";<br />    if ( arguments.length == 1 )<br />        return ""+arguments[0];<br />    var rawStr = arguments[0];<br />    var i = 0;<br />    for(i=1;i&lt;arguments.length;i++){<br />        rawStr = replaceAll(rawStr,"$"+i,arguments[i]);    <br />    }<br />    return rawStr;<br />}<br />%&gt;<br /></font>
		</p>
<img src ="http://www.blogjava.net/zhugf000/aggbug/36357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2006-03-20 16:11 <a href="http://www.blogjava.net/zhugf000/archive/2006/03/20/36357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>架构师的工作</title><link>http://www.blogjava.net/zhugf000/archive/2005/12/17/24403.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Sat, 17 Dec 2005 12:13:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2005/12/17/24403.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/24403.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2005/12/17/24403.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/24403.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/24403.html</trackback:ping><description><![CDATA[<B>架构师的工作</B><BR><BR>就笨笨所理解，其实很简单：<BR>1 把意图表达出来，主要做法是画图。<BR>2 把意图贯彻下去，主要做法是喷，对象是项目组、客户、公司领导。<BR><BR><IMG height=577 alt=arch_fig1.gif src="http://www.blogjava.net/images/blogjava_net/zhugf000/arch_fig1.gif" width=502 border=0><BR><BR><BR><B>业务架构的目标</B><BR><BR>按照优先级排列<BR>1 固化开发和测试模式，减小开发人员的自由发挥余地，从而做到：<BR>&nbsp;&nbsp; &nbsp;1 将业务代码实现简单化和固定化，降低对开发人员的技术要求（如要求了解J2EE框架或HTTP交互过程等）<BR>&nbsp;&nbsp; &nbsp;2 复用开发人员的经验，在下个使用业务架构的项目中，不需要再行学习<BR><BR>2 减少项目的基础性<STRONG>技术代码</STRONG>开发工作和步骤，这里的技术代码，指与业务无关的部分，如配置、日志、文件上传、ORM 等等。这个目标需要在组织级维护跨项目的<STRONG>技术框架</STRONG>，单靠个人是无法做到的。<BR><BR>3 实现对项目的<STRONG>业务代码</STRONG>的重用。这个目标几乎不可能实现，业务代码重用的前提是它经过业务专家的提炼、业务过程完整、可完全配置。假如这个目标能够实现，那么开发人员的角色类似于 SAP 实施人员，主要工作是配置，而不是写代码。<BR><BR><BR><BR><BR><B>国内公司的业务架构实现的困境</B><BR><BR>对于国内公司来说，由于中长期利益与短期利益的冲突，架构一般很难坚持下去。<BR>国内公司限于成本压力，经常会要求架构师在项目中实现业务框架；但是这个目标与项目的直接目标是有冲突的。<BR><BR>业务框架为了达到可重用的目标，是需要比项目完成要多做好多工作的，如框架文档、辅助工具等等，这需要大量的开发工作量，会与项目的直接目标发生冲突，而冲突出现时，公司和项目经理一般都会选择牺牲重用的业务框架这个目标，保证项目的完成。 在项目完成后，公司也很少单独组织人力对项目成果进行评估和重构，结果最终还是得不到一个重用的业务框架。<BR><BR><img src ="http://www.blogjava.net/zhugf000/aggbug/24403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2005-12-17 20:13 <a href="http://www.blogjava.net/zhugf000/archive/2005/12/17/24403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于J2EE的业务产品/框架(PPT)</title><link>http://www.blogjava.net/zhugf000/archive/2005/12/15/24007.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Thu, 15 Dec 2005 04:49:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2005/12/15/24007.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/24007.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2005/12/15/24007.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/24007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/24007.html</trackback:ping><description><![CDATA[笨笨10月份写的一个自我小结的大纲，缺乏开发模式的部分。<br>点击<a HREF="/Files/zhugf000/j2ee_based_frame.zip">这里</a>下载。<br><br><br><div align="center"><b><font size="5">提纲</font></b><br></div><p:colorscheme colors="#FFFFFF,#000000,#808080,#000000,#BBE0E3,#333399,#009999,#99CC00">

</p:colorscheme><div v:shape="_x0000_s1026">

<div class="O" style=""><span style="font-family: &quot;Courier New&quot;; font-size: 133%;"><span style="position: absolute; left: -5.44%;">•</span></span><font size="2"><span style="font-family: 宋体; font-size: 24pt;"></span></font></div></div>技术产品与业务产品的差别比较<br><img src="http://www.blogjava.net/images/blogjava_net/zhugf000/j2ee_frame/j2ee_frame_fig1.gif" alt="j2ee_frame_fig1.gif" border="0" height="440" width="669"><br>业务产品的结构层次与实现重点<br><img src="http://www.blogjava.net/images/blogjava_net/zhugf000/j2ee_frame/j2ee_frame_fig2.gif" alt="j2ee_frame_fig2.gif" border="0" height="393" width="587"><br><img src="/zhugf000/admin/FtbWebResource.axd?a=FreeTextBox%2c+Version%3d3.1.1.34886%2c+Culture%3dneutral%2c+PublicKeyToken%3d5962a4e684a48b87&amp;r=FreeTextBoxControls.Resources.Images.Utility.spacer.gif&amp;t=632699064217187500" height="1" width="1"><br><img src="/zhugf000/admin/FtbWebResource.axd?a=FreeTextBox%2c+Version%3d3.1.1.34886%2c+Culture%3dneutral%2c+PublicKeyToken%3d5962a4e684a48b87&amp;r=FreeTextBoxControls.Resources.Images.Utility.spacer.gif&amp;t=632699064217187500" height="1" width="1"><br>应用业务框架<br><ul><li>业务框架发展策略</li><li>业务框架支持代码复用</li><li>业务框架支持CMM实施</li></ul><br><br><br><font size="2">感谢 好刚刚 同志对这篇文稿的意见，感谢 ji_cao 同志的从博弈论角度看待软件开发的思路。</font><br><img src ="http://www.blogjava.net/zhugf000/aggbug/24007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2005-12-15 12:49 <a href="http://www.blogjava.net/zhugf000/archive/2005/12/15/24007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>变，还是不变？</title><link>http://www.blogjava.net/zhugf000/archive/2005/12/13/23594.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Tue, 13 Dec 2005 02:05:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2005/12/13/23594.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/23594.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2005/12/13/23594.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/23594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/23594.html</trackback:ping><description><![CDATA[<P><STRONG>变，还是不变？</STRONG></P>
<P><STRONG>变的是概念，不变的是产品<BR></STRONG>IBM 的 MQ Series 的定位从老早的 Link/Queue ，变为 MOM ，再变为 EAI ，再变为 SOA 的基础架构。MQ Series 产品的结构始终不变，但 IBM 将它用不同的概念包装起来，推向市场；客户为概念付费，而 IBM 在收获真金白银。</P>
<P><STRONG>变的是皮毛，不变的是基础<BR>变的是排列组合，不变的是基本原理</STRONG><BR>仔细考究这些概念，就会发现，概念其实只不过是对角色、数据、处理和它们之间的相互关系，将其固定化和明确化，再起个新名词。很多现在热炒的新概念，在70年代的主机上可以找到原型；代码不管是OOP 还是 AOP ，最终还是要翻译成机器码，由CPU 执行的。<BR>别被新概念给骗了，我们现在用的计算机的结构，从1950's 诺伊曼提出开始，就没有什么新变化。在可预见的将来，除非人工智能或量子计算机有什么新突破，我们还是要继续跟诺伊曼体系打交道。</P>
<P><BR><STRONG>变的是银弹，不变的是失望(?)<BR></STRONG>巨型厂商所推的概念，更多程度上是为了营销所作的吹嘘。从用户角度来看，只要开发速度足够快，运行稳定，后续支持维护升级能够跟上；到底采用什么技术，是无所谓的事情。而技术或框架之间的差别，其实也没有它们的简称之间的差别那么大。<BR></P><img src ="http://www.blogjava.net/zhugf000/aggbug/23594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2005-12-13 10:05 <a href="http://www.blogjava.net/zhugf000/archive/2005/12/13/23594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>业务驱动用例测试</title><link>http://www.blogjava.net/zhugf000/archive/2005/12/08/22993.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Thu, 08 Dec 2005 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2005/12/08/22993.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/22993.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2005/12/08/22993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/22993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/22993.html</trackback:ping><description><![CDATA[<P><STRONG>业务驱动用例测试</STRONG></P>
<P><BR><STRONG>笨笨所知的测试大致分类</STRONG></P>
<P>单元测试/Unit test<BR>基于代码中类或函数一级的测试</P>
<P>用例测试/Use case test.<BR>基于一个完整业务用例的测试，可以不包括用户业务系统环境的完整操作流程。<BR>如，银行网银系统的转账测试可以认为是一个完整业务用例测试，但是不必要要求测试用例先执行登录过程，再进行转账业务代码的测试。</P>
<P><BR>集成测试/Integration test<BR>由业务人员主导，业务系统作为一个完整黑盒，测试系统功能和性能。</P>
<P>用户接受测试/User Accept test<BR>集成测试通过后，用户基于生产系统剥离的实际数据，再一次对业务系统执行测试；如果集成测试不充分，可以再一次有机会暴露系统的缺陷。</P>
<P>&nbsp;</P>
<P><BR><STRONG>项目实施过程与测试</STRONG></P>
<P>从项目的实施过程来说，单元测试是程序员自测，算在开发阶段，集成测试和用户接受测试所占用时间能够达到项目代码开发阶段的一倍到两倍，大型项目的测试阶段可能还要长。<BR>而用例级测试目前很少作为一个正式的阶段在项目实施过程中存在，或由程序员自行自测，或合并到集成测试过程中。</P>
<P>对于大型业务系统，集成测试和用户测试所花费的主要工作量如下，可能不全。<BR>1 数据准备，测试人员调配准备。<BR>2 测试过程中，测试人员要找到哪些测试数据还能用，再手工操作系统界面，执行测试过程。对于大型业务系统来说，可用测试数据是随着测试进展不断变化的，很有可能某个用户数据刚刚状态正常，现在就欠费了。要想找到合适的数据来测试系统，这是个费劲且混乱的过程。<BR>3 集成回归测试，业务系统如果有升级或改动，需要将所有交易重新测试一遍，以防止变更给原有代码引入缺陷。</P>
<P><BR><STRONG>用例测试<BR></STRONG>用例测试关注业务。<BR><IMG height=398 alt=usecase_test.gif src="http://www.blogjava.net/images/blogjava_net/zhugf000/usecase_test.gif" width=686 border=0><BR>用例测试集中在业务服务这一层，业务服务直接对应了业务用例。<BR>用例测试注重业务服务运行环境的模拟和重现，从而支持业务服务层的自动测试。</P>
<P><BR>用例测试的价值<BR>1 减少集成测试的时间和成本，降低集成测试发现缺陷数，从而降低项目总缺陷修复代价。<BR>&nbsp;用例测试缺陷修复代价远低于集成测试的缺陷修复代价；用例测试发现大部分缺陷后，集成测试就相对轻松了。<BR>2 可回归的用例测试支持快速代码重构。<BR>3 ...</P>
<P><BR><STRONG>单元测试无法覆盖用例测试<BR></STRONG>业务代码运行需要底层资源如数据库或其它业务系统配合，单元测试工具缺乏提供业务服务运行所需环境的模拟，从Junit系列单元测试工具来说，它还是主要从技术角度考虑，从业务角度的考虑如：<BR>底层资源（数据库，JMS）模拟<BR>依赖服务模拟<BR>服务访问模拟<BR>自动检测、重放和比对服务运行时的输入输出参数、资源、依赖服务。<BR>服务接口变动波及分析</P>
<P><BR><STRONG>代码重构的成本<BR></STRONG>代码重构需要付出代价。集成测试费时费力，但用户不可能因为程序员说“我保证代码重构不会改变系统功能”，就不对变动后代码进行测试。<BR>用例回归测试支持可以以较小代价支持代码重构，因为它可在业务服务级自动对功能进行验证，集成测试工作能够相应的减少。<BR></P><img src ="http://www.blogjava.net/zhugf000/aggbug/22993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2005-12-08 17:09 <a href="http://www.blogjava.net/zhugf000/archive/2005/12/08/22993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Java的高性能TP Monitor的设想</title><link>http://www.blogjava.net/zhugf000/archive/2005/12/06/22747.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Tue, 06 Dec 2005 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2005/12/06/22747.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/22747.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2005/12/06/22747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/22747.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/22747.html</trackback:ping><description><![CDATA[目前的高性能TP Monitor如 TUXEDO CICS全部是基于 C/多进程开发而成<BR><BR>国内市场被BEA/IBM高度垄断，可能也就&nbsp;东方通TongEASY的能虎口夺食。<BR><BR>从TP Monitor的在金融业的应用经验来看，TP Monitor主要作用是：<BR>1 提供一个高性能、高稳定的通讯框架：（如银行总分互联、应用之间互联）<BR>2 支持大并发的交易处理平台（在线交易实时处理，但一般不作为事务管理器，因为全局事务代价过高，主要用数据库自身事务机制）。<BR>3&nbsp;支持软件负载均衡，支持水平扩展（如：TUXEDO MP）。<BR><BR>开源App Server如Jboss/Jonas 全部采用纯Java实现，性能是个问题，跟TUXEDO/CICS相比。<BR><BR>假设我们要自行实现一个可用的TP Monitor，必须要解决上述几点。<BR><BR><BR>从Java的性能来看，它的内部代码执行效率不低，主要弱在：<BR>1 socket通讯效率低<BR>2 ipc机制不支持<BR>3 数据库访问效率低（实际的交易实现效率低，不管用EJB还是POJO）<BR><BR>目前有考虑<BR>1 高性能的通讯框架，必须采用C代码实现。Java做不到Zero Copy，并且JNI在Java和本地C代码之间复制内存代价也很高。<BR>2 大并发的处理平台，这个是Java的优势所在，Java对于同步、并发的实现，写起来简单<BR>3 IPC支持（SystemV消息队列、共享内存、信号灯），标准 Java 库缺乏，但是可以通过JNI实现，实现策略可以参考SWT的实现策略。<BR>4 用户SERVICE实现（数据库访问），采用C实现，充分利用高效的数据库本地接口。<BR><img src ="http://www.blogjava.net/zhugf000/aggbug/22747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2005-12-06 17:49 <a href="http://www.blogjava.net/zhugf000/archive/2005/12/06/22747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不间断运行工作系统元数据更新策略</title><link>http://www.blogjava.net/zhugf000/archive/2005/12/02/22260.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Fri, 02 Dec 2005 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2005/12/02/22260.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/22260.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2005/12/02/22260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/22260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/22260.html</trackback:ping><description><![CDATA[<P><STRONG>关键在于元数据更新的事务性</STRONG><BR><BR>一般做法如下：<BR><IMG height=469 alt=meta_refresh.gif src="http://www.blogjava.net/images/blogjava_net/zhugf000/meta_refresh/meta_refresh.gif" width=922 border=0><BR><BR><STRONG>主动检查</STRONG>：每个进程内，有一个定时检查模块，定时检查数据库中元数据表的最后更新时间戳，发现需要重新加载的元数据。<BR><STRONG>被动通知</STRONG>：每个进程内，有一个等待更新消息通知的消息驱动Bean模块，接受元数据管理机发出的元数据更新JMS消息/MQ消息，更新指定元数据。<BR><BR><STRONG>元数据更新的事务性</STRONG>：为保证业务处理模块不受元数据更新过程的影响；在程序设计上，采用双内存切换机制。即内存中，同时有两块内存用于存放元数据。任一时刻，元数据全局变量指向其中一块，为当前工作元数据内存块；元数据检查更新模块，则使用另一块内存，在元数据加载、校验过程结束后，再切换元数据全局变量指向新的元数据内存块；切换元数据全局变量的过程自身受共享锁保护。从而保证业务处理模块的处理过程不受后台元数据切换的影响，并且业务处理模块所访问的元数据始终是可用的，不会出现业务处理过程中，元数据变化的情况。</P>
<P>对于分布式应用，有可能需要自行编写元数据更新的分布式事务管理器，自行实现元数据更新的两阶段提交过程。如果想偷懒，也可以考虑用JCA自行实现Resource Manager，借用应用服务器的Transaction Manager。<BR><BR></P><img src ="http://www.blogjava.net/zhugf000/aggbug/22260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2005-12-02 16:40 <a href="http://www.blogjava.net/zhugf000/archive/2005/12/02/22260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源软件与垄断</title><link>http://www.blogjava.net/zhugf000/archive/2005/11/30/21979.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Wed, 30 Nov 2005 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2005/11/30/21979.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/21979.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2005/11/30/21979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/21979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/21979.html</trackback:ping><description><![CDATA[<P>开源软件与垄断</P>
<P>开源软件从总体效果来看，一方面对技术的自由扩散起到了推动作用，另一方面也实质上加强了巨型厂商的垄断地位。<BR>从巨型厂商如IBM,BEA,Oracle的策略来看，他们倾向于将开源软件（OS 如Linux，AppServer 如 JBoss，组件如Struts,Spring），作为自有高端产品的补充，用于占领低端部分，另一方面也可以提高软件产品商准入门槛或是直接对M$来竞争。</P>
<P>开源软件与这些巨型厂商产品的差距主要在如下几个方面：<BR>1 开源软件缺乏商用软件的所具有的如可靠性、可扩展性、高可用性等特性。<BR>2 开源软件在关键应用如TP Monitor(TUXEDO/CICS),MOM(MQ)方面缺乏相应的杀手软件。<BR>&nbsp;这个现状一方面与开源组织的策略相关：TP Monitor之类的软件是高度垄断的，很多开源组织是由巨型厂商所资助，当然不会推动这方面的软件的开发。<BR>&nbsp;另一方面也有可能是因为这类软件需要长时间的不断应用和实践，才能逐步发展，否则只能是一个实验室玩具。一开始时开源软件的可靠性是无法保证，用户也不会将自己的关键应用构筑在高风险基础之上；不借助外力，这个死循环无法打破。</P>
<P>4 对于一些高端平台或封闭平台，开源软件没有足够的硬件基础条件发展。<BR>5 开源软件多数作为技术型软件存在；而非业务型软件，在易用性、可操作性、文档方面有所缺乏。<BR>6 开源软件缺乏稳定的后续维护和支持力量。<BR></P><img src ="http://www.blogjava.net/zhugf000/aggbug/21979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2005-11-30 16:02 <a href="http://www.blogjava.net/zhugf000/archive/2005/11/30/21979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件民工与龙芯：另一种视角</title><link>http://www.blogjava.net/zhugf000/archive/2005/11/04/18081.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Fri, 04 Nov 2005 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2005/11/04/18081.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/18081.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2005/11/04/18081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/18081.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/18081.html</trackback:ping><description><![CDATA[<P>软件民工与龙芯：另一种视角</P>
<P>一些基本数据</P>
<P>发达国家IT投资软硬比为2：1；中国为1：2，中国大企业能够达到1：1。<BR>对于中大型项目的软件投资，购买基础软件如数据库、应用服务器与项目实施费用比约为1:1。<BR>IT基础设施（基础软件+硬件）的投入几乎全部为外国公司所独占。</P>
<P>如上所述，中国IT投资中，项目实施部分与IT基础设施比率为1:4左右，对于小项目，这个比率会高些，部分原因在于基础软件采用免费或开源产品，硬件也未采用Unix小型机。</P>
<P>中美货币汇率8：1，按各自能自行生产的产品和服务算购买力平价则是1：1。<BR>IT基础设施架构按美元算，与美国大致相同，价格低者不低于1/2（???）。</P>
<P>笨笨刚刚经历的一个金融行业的项目，基础软件(DB2，价格550万左右)，项目实施费用120万左右。其它基础软件如应用服务器WebSphere尚未计入，硬件成本也未计入。<BR><BR><BR>软件民工日子难过的一个重要原因：IT项目的软硬件比</P>
<P>中国IT行业软件公司和广大的软件民工日子难过的一个重要原因，是由于发达国家对于IT基础设施的垄断，造成基础设施价格刚性，消耗了中国IT投资的大部分资金；国内公司如单做软件项目实施只能维持生存，基础软件早已为国外公司所垄断，无法介入；这也是国内软件开发人员不会受重视一个重要原因。</P>
<P>从国内公司的角度出发，最容易的大概是当代理商转手卖软硬件了，其次就是拉关系搞来项目；至于靠技术积累提高核心竞争力，则不是主要因素。事实上，国内中大型软件公司都会面临项目盈利能力低下的问题，解决方法也大致相同，如增加工作量，直接降低工资或到二级城市外包等。</P>
<P>这既是国内软件公司的不幸也是我等IT民工的不幸，又更是国内IT行业的不幸：对公司而言，无法通过技术积累获得必须的发展资金，公司很难发展为能够跟国外软件公司抗衡的企业；对个人而言，在低工资高工作强度的压迫下，IT行业也就只能是个吃青春饭的地方；对中国IT行业而言，依赖国外IT基础设施的局面一经生成，就无法摆脱；在这种局势下，国内软件行业只可能追随国外潮流，不可能提出自己的主张----那是需要有市场和资金支持的----中国IT领域，始终是国外公司呼风唤雨的地方。</P>
<P><BR>龙芯与改善IT项目软硬比的可能性</P>
<P>要解决软硬比的问题，最直接的办法是将人民币与美元汇率拉平至购买力平价的水准1:1。但这并不现实，货币的购买力最终取决于该国的能用什么产品与他国交换。国际市场上初级产品和资源与精密机电产品的价格相差天壤，要卖多少条裤子才能换回一台服务器?另一个问题是没有自己的硬件生产厂商时，国家安全是要受制于人的。</P>
<P>龙芯的出现预示着一种可能性，中国有可能出现自己的硬件生产厂商，将硬件不正常的价格拉低，还给软件企业一个较正常的生态环境。<BR>做个简单的四则计算：按2004年IT投资2549.8亿，当软硬比从30%上升到70%时，软件企业的收入会从765亿增加到1785亿。</P>
<P>软件收入增加一倍，而硬件代理利润会降低70%上，此时软件项目足以支撑公司生存和发展，软件技术积累才有可能取代硬件代理成为公司的重要利润来源。以此为出发点，公司才有可能将软件开发人员作为利润支柱对待，摆脱民工待遇。</P>
<P>在此基础之上进一步的可能性是建立自己的，能够自主发展的IT体系（基础软件－商用硬件－超级计算机）。</P>
<P>上面的可能性，最需要的是自主创新的精神和国家政策和投资的支持；有必要重温毛泽东时代的“自力更生，艰苦奋斗”的精神。</P>
<P>&nbsp;</P>
<P>附一些中国IT投资的软硬件比的一些公开资料</P>
<P>《中国软件业价格战急遽升温》 经济观察报 2005-10<BR>在国外，企业在硬件、软件和服务上的投入一般是1:2:3的比例，在国内这个数字就变成了3:2:1，正好相反<BR><A href="http://www.iteer.net/modules/news/article.php?storyid=425">http://www.iteer.net/modules/news/article.php?storyid=425</A></P>
<P><BR>《2005/2006年中国行业IT需求趋势系列调研报告》 商务部研究院</P>
<P>报告显示，2004年中国行业信息化IT投入额达2549.8亿元。同比增长11.8%<BR>调研报告显示，2004年行业信息化IT投入中，软件与IT服务的投入比例达到了40.3%，05年则升至41.7%。调研报告认为，未来三年中国行业信息化IT投入中的软件和IT服务投入的比例将逐步上升，2007年二者的投入比例将达到46%。<BR><A href="http://www.chinabbc.com.cn/dxqy/news.asp?newsid=2005323101115887&amp;classid=109103">http://www.chinabbc.com.cn/dxqy/news.asp?newsid=2005323101115887&amp;classid=109103</A></P>
<P>&nbsp;</P>
<P>计世资讯《2005年中国大型企业信息化建设及IT应用趋势报告》</P>
<P>2004年我国大型企业信息化投入总额为681.9亿元，与2003要比增长15.3%。</P>
<P><BR>2005年大型企业硬件投入比例将首次降到50%以下，为48.7%。此外：大型企业软件投入比例将从2004年占总体投资额的27.1%，增长到 2005年的30.1%；大型企业IT服务投入比例将从2003年占总体投资额的20.4%，增长到2005年的21.2%。相对于其他企业而言，大型企业的信息化投入结构已经基本稳定，在未来几年不会有大的变化。<BR><A href="http://www.ccwresearch.com.cn/store/list/products_service_list4.asp?columnId=493&amp;view">http://www.ccwresearch.com.cn/store/list/products_service_list4.asp?columnId=493&amp;view</A>=#</P>
<P>&nbsp;</P>
<P><BR>中华工商时报 《神州数码：IT服务市场的长跑选手》 2005-02<BR>而从欧美发达国家看，企业在硬件、软件和服务上的投入比例是齐头并进的，基本上是1∶1∶1，而在国内，基本上维持着7∶1∶2的关系<BR><A href="http://www.surprising.cn/n332c7p2.aspx">http://www.surprising.cn/n332c7p2.aspx</A></P>
<P>&nbsp;</P>
<P>对话神州数码总裁郭为 对话计世网</P>
<P>在美国IT市场，IT服务与软件占的比例是70％，PC及各种硬件产品占的比例是30％。<BR>中国所谓的网络基础建设也远远滞后于欧美市场，整个市场结构是硬件产品占85%的比例，软件和服务只占15%。<BR><A href="http://www.ccw.com.cn/itlianghui/htm2005/20050929_17OEK.htm">www.ccw.com.cn/itlianghui/htm2005/20050929_17OEK.htm</A></P>
<P>&nbsp;</P>
<P>《IT市场终结“迷狂”尚需5年》 IDC<BR>在我国，2003年软件、服务两项收入相加，仅占整个IT市场的24.6%，同年，全球市场两项之和，占整个IT市场的62.1%，远远高出中国37.5个百分点。<BR><A href="http://www.idc.com.cn/analysts/detailpoints.jsp?docid=5">http://www.idc.com.cn/analysts/detailpoints.jsp?docid=5</A></P>
<P>&nbsp;</P>
<P>02年数据</P>
<P>一是对信息化建设的投入以软件为主还是硬件为主。我国在信息化投入中，软硬比例失调。软件加服务的投入与硬件投入的比例为二八开，其中集成与安装的比例约 8—10%；软件开发的投入约10—12%；80%的资金是用于硬件购买。而据世界银行的统计，发达城市信息化投入一般为七三开，70%用于软件和服务，购买硬件为30%。<BR><A href="http://www.centek.com.cn/news/20021218m2.htm">http://www.centek.com.cn/news/20021218m2.htm</A></P>
<P>&nbsp;</P>
<P><BR>　　随着水利行业信息化建设的不断深入，硬件投资比例不断下降，软件和服务投资比例不断增加。2004年硬件投资比例为73.4%，2005年这一比例下降至57.6%；同时软件和服务的投资比例相应提升，分别由21.5%和5.1%上升至34.1%和8.3%，<BR><A href="http://solution.chinabyte.com/shlxxh05/">http://solution.chinabyte.com/shlxxh05/</A></P><img src ="http://www.blogjava.net/zhugf000/aggbug/18081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2005-11-04 09:46 <a href="http://www.blogjava.net/zhugf000/archive/2005/11/04/18081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>元数据库(MetaRepository/MetaBase)的持久存储</title><link>http://www.blogjava.net/zhugf000/archive/2005/10/12/15330.html</link><dc:creator>笨笨</dc:creator><author>笨笨</author><pubDate>Wed, 12 Oct 2005 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/zhugf000/archive/2005/10/12/15330.html</guid><wfw:comment>http://www.blogjava.net/zhugf000/comments/15330.html</wfw:comment><comments>http://www.blogjava.net/zhugf000/archive/2005/10/12/15330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhugf000/comments/commentRss/15330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhugf000/services/trackbacks/15330.html</trackback:ping><description><![CDATA[对于业务系统，肯定会有许多的元数据需要管理。<BR>元数据需要持久存储，一般的做法是保存在数据库中，定义上复杂的关联表保存。<BR><BR>元数据的特点是：<BR>1 格式复杂，除数据字典这样格式简单外，很多是有着复杂层次和关联关系，<BR>2 格式多变。<BR>3 数据量不大，系统运行期间多为只读。<BR>4 分散使用，跨进程跨平台。<BR><BR>从这个角度来看，采用关系表表示元数据并不一定合适，特别是复杂元数据。<BR>元数据库(MetaRepository/MetaBase)在实现上不妨用结构化XML表示元数据，用HTTP之类的开放协议做到跨进程和跨平台，或干脆用LDAP。<img src ="http://www.blogjava.net/zhugf000/aggbug/15330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhugf000/" target="_blank">笨笨</a> 2005-10-12 15:02 <a href="http://www.blogjava.net/zhugf000/archive/2005/10/12/15330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>