﻿<?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/relax/category/298.html</link><description>记述我学习java的里程</description><language>zh-cn</language><lastBuildDate>Thu, 21 Jun 2012 08:07:09 GMT</lastBuildDate><pubDate>Thu, 21 Jun 2012 08:07:09 GMT</pubDate><ttl>60</ttl><item><title>学习管理笔记，领导类型与管理的三重境界</title><link>http://www.blogjava.net/relax/archive/2012/06/21/381264.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Thu, 21 Jun 2012 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2012/06/21/381264.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/381264.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2012/06/21/381264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/381264.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/381264.html</trackback:ping><description><![CDATA[<p>摘自：《青梅煮酒论领导》</p>
<p>1.报时型领导与造钟型领导</p>
<p>&nbsp;&nbsp;&nbsp; 可以用一个比喻来说明这个问题。领导者有两种类型，一种是报时型领导，整个团队都不知道几点了，只有领导知道，大家就都来问领导，领导能够准确地告诉大家几点。领导在的时候，一切正常。这样的管理存在两个问题：一是尽管一切正常，但是领导自己会很忙碌、很辛苦，因为所有的人都来找领导，所有的事情都需要领导来拍板；二是如果领导不在，大家找不到领导，正常的工作马上就会陷入混乱，找不到报时的人，大家都不知道几点了，都不知道工作该怎么干。</p>
<p>&nbsp;&nbsp;&nbsp; 与此不同，第二类领导是造钟型领导。领导知道几点了，但是主要力量不是放在给大家报时上，而是集中力量给大家造一个钟，不管自己在不在，不管自己说不说，所有的人只要看看钟就知道几点了。让组织有一种自动运行的机制，这是一个非常重要的问题。领导不需要事必躬亲，而应该只关注异常、不关注正常，只关注例外、不关注例行。因为正常的事情、例行的事情，有制度管、有下属管，不用领导自己管。只有那些超出制度框架之外的事情，领导不管就没人来管，这时候才需要领导亲自上阵。</p>
<p>&nbsp;&nbsp;&nbsp; 管理首先要把基础的、基本的事情做对。基本的事情就是为组织建立一个自动运行的机制，把基础的制度建设落到实处。基础管理的四化是制度化、标准化、结构化、流程化。通过基础管理，要让组织内的每个成员遇到了正常的、例行的事情时都知道该怎么做。这好比是一座大楼的框架和支柱，先把框架和支柱建结实了，然后才能搞内部装修。规范管理和制度建设是所有组织的基础，一切先进的管理理念和方法都要建立在这个基础之上。对于一座大楼，如果框架和柱子的问题还没有解决，建设者就热衷于搞内部装修赶时髦，那将是非常可怕的灾难。</p>
<p>&nbsp;&nbsp;&nbsp; 2.管理的三重境界</p>
<p>&nbsp;&nbsp;&nbsp; 让组织有一个自动运行的机制，这是管理的第一重境界。管理的第二重境界是让每个员工都有自动运行的机制。要达到第一重境界，基本途径是制度建设，靠的是领导者的规范能力和掌控能力；要达到第二重境界，基本途径是动机的激发，需要综合使用绩效管理和团队建设的手段，靠的是领导者的价值观和激励能力。</p>
<p>&nbsp;&nbsp;&nbsp; 管理的第三重境界，也就是最高境界，是员工的自动运行和组织的自动运行相结合，互相推动，互相促进。这就好比员工不但知道怎样看钟，还知道怎样调钟和修钟。钟也成了智能钟，可以根据不同场合、任务以及不同员工的特点，选择自己的报时方式和提醒间隔。在这个过程中，文化建设和队伍的培育与发展成为最关键的问题。</p>
<p>&nbsp;&nbsp;&nbsp; 一旦达到了第三重境界，那么组织的管理就可以举重若轻，收放自如。做一个闲人领导，其实不但是一种能力的考验，看其能否建立起自动运行的组织机制，而且更是一种个人境界的考验。为什么这么说呢？我们可以来分析一下。</p>
<p>&nbsp;&nbsp;&nbsp; 领导者居中调度、总领全局的时候，要把自己的精力和时间逐渐从具体工作中解脱出来，要把很多执行层面的事情交给下属去做。在这个过程中有一点是肯定的，就是下属当中能做得跟领导一样、能让领导完全满意的人不多。有些人能力不行做不好，有些人态度不行做得不主动，有些人思路不一样做得不让领导称心。这个时候挑战就来了，看着下属不顺眼，领导怎么办？不能临阵换将，也不能自己上阵，不但要接受这个不满意的结果，而且在下属完成任务以后，还要给下属奖励和表扬。这种情况是最考验一个人的心胸的。</p>
<p>&nbsp;&nbsp;&nbsp; 每一个管理者都应该学会接受一个不完全满意的结果，学会安排不完全满意的下属去做一件让自己不是完全满意的事情。明知道下属会犯错误，甚至连什么样的具体错误都能预见到，还是让下属去做，锻炼下属，培养下属，容许下属犯错误，让下属在犯错误中成长，不断改进工作。</p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/relax/aggbug/381264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2012-06-21 15:42 <a href="http://www.blogjava.net/relax/archive/2012/06/21/381264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给新人的建议：新项目经理常见难题</title><link>http://www.blogjava.net/relax/archive/2010/10/22/335906.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Fri, 22 Oct 2010 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2010/10/22/335906.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/335906.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2010/10/22/335906.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/335906.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/335906.html</trackback:ping><description><![CDATA[<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">工作两三年后开始有机会带领一个不大团队，这是一个好的机会同时面临着很大的压力。从技术角色转换为管理角色多少有一些新的课题。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">需求范围的控制问题</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">要做到良好的控制需求至少有两个前提：正确理解了客户当前阶段的主干需求（包括：最高期望和底线），其次在需求管理过程中控制节奏。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">如何在控制需求范围上掌握节奏的主动权，</span><span style="font-family: 宋体; font-size: 14pt">我们经常碰到的是客户追在屁股后面问进度、要文档、加需求、变更需求；以前也曾经考虑过这个问题：如何扭转这样被动的局面呢？这种局面的一个特点就是客户在安排我们的工作；如果我们能安排客户的工作，问题就解决的一大部分。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">如何让客户听从我们的安排来做事，对不同的客户确实应该有不同的方法，但我们心里必须记住要让他为我所用，而不是被动挨打；有一种方法是：有节奏的抛给他足够多的需求问题</span><span style="font-size: 14pt"><font face="Calibri">,</font></span><span style="font-family: 宋体; font-size: 14pt">当然这些问题都是你分析的结果而不是平白无故造出来的；让他忙起来，而且还要让他感觉你兢兢业业的干活。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">主持会议的问题</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">管理团队免不了开会，安排工作、讨论问题或评审等。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">第一什么时候开会？开会比独立沟通更有效时；大家以前没合作过需要通过开会来混个脸熟；讨论有争议的问题离线交流不如面对面的来到快捷；无法通过行政命令执行的东西，需要大家通过会议来认同。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">如何开会？首先为确保参会人有思考的时间，必须将资料提前发给他们；其次会议有明确的议程和目标；在会议中如果跑题要及时拉回来；会议结束要有基本的会议总结，应该有会议纪要，并重复宣读一遍；如果参会的人员有比你级别更高的人，就更需要明确会议目标，否则领导都喜欢高谈阔论浪费大家的时间（好像说的就是本人）。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">开会本身没什么，关键是确定明确的目标，让会议过程在可控范围之内。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">时间管理的问题</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">一般的开发工程师时间管理重要性不那么明显，可是作为项目负责人就不同了，所有项目组成员的工作效率可能都和你的时间安排有关；其实除了从业务上的优先级来安排外，重点就是：影响他人工作的事情优先安排，比如你的项目组成员等着你的米下锅的事情优先安排，再比如评审时需要其他项目组成员配合的优先安排；再用一句白话：不要让人等我。其他能独立完成的事早点晚点你都有百分百的控制力度。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">项目负责人就是吃苦在前的活，你必须把准备工作做好了，让其他人能投入战斗。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">民主与决策的问题</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">其实我本人并不是个民主的人，民主的反面就是低效；但民主可以避免犯大错误。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">作为项目负责人至少不能犹豫不决，当断就断；否则难以取得项目组成员的认可。提交民主讨论前的决策，在没有把握前可以和组内组外的相关人员独立沟通，拿出一个有讨论价值的方案。民主过程必须是查缺补漏而不是推翻重来，特别是工期紧的项目。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">获得团队成员尊重的问题</span></p>
<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">项目负责人最值得尊重的是来自于他能做出好的决策，而好的决策来自于：经验、灵活、倾听。</span></p>
<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">我并不是一个好的领导，至少我没有耐心倾听；我还是将自己的理解和大家分享。首先，要先做哪些需要由项目负责人做的工作，比如：做决策、和客户保持联系、做计划等；其次要成为了解项目所有信息的人；对项目保持乐观，项目负责人不能抱怨或有悲观情绪；要有高期望值，不要让人们在工作还没有做好的时候就不做了；勇于承认自己犯的错误；以身作则，大家都不愿干的活你要先干，比如写文档。总之尊重是靠努力获得的，项目负责人必须比其他人付出更多。</span></p>
<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">项目管理是我们公司总体上也要加强的内容，只有更多人有这方面的经验并分享经验，大家才能共同提高。</span></p>
<br />
声明：此文章并非本人原创，转自公司的内部论坛，是公司一的位同事也是我的领导所写，觉得不错转出来与大家共勉。<br />
<img src ="http://www.blogjava.net/relax/aggbug/335906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2010-10-22 17:34 <a href="http://www.blogjava.net/relax/archive/2010/10/22/335906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给新人的建议：Db设计的常见问题的解决</title><link>http://www.blogjava.net/relax/archive/2010/10/22/335905.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Fri, 22 Oct 2010 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2010/10/22/335905.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/335905.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2010/10/22/335905.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/335905.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/335905.html</trackback:ping><description><![CDATA[<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">第一次做数据库设计的开发人员，难免会碰到一些问题，根据自己的经验简单的总结一下这些问题在没有更好的解决方法前的一种可能的备选方案。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">从技术上对表进行分组</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">我们在做业务数据库设计的时候，个人认为首先要从技术上对表进行分组，下面是个人的标准：</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt" class="MsoListParagraph"><span style="font-size: 14pt"><font face="Calibri">1)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; font-size: 14pt">流程和交易相关的表：它的特点是记录数保持最小，以便快速响应交易需求，并且相关交易主题对象的生命周期比较短；比如纳税申报表。或者可以称为操作数据库。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt" class="MsoListParagraph"><span style="font-size: 14pt"><font face="Calibri">2)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; font-size: 14pt">归档后的查询表：它的特点就是记录数很大，有足够多的索引，关键保持查询速度；它的特点就是查的多，改的少；比如车辆档案表。或者可以称为查询数据库。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt" class="MsoListParagraph"><span style="font-size: 14pt"><font face="Calibri">3)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; font-size: 14pt">提供给分析使用的汇总表：它的特点就是表中存储了很多计算后的数据并且是冗余数据。如果使用</span><span style="font-size: 14pt"><font face="Calibri">BI</font></span><span style="font-family: 宋体; font-size: 14pt">，这一部分就不用了；如果自己设计为了出报表方便还是需要的；比如纳税情况归集表。或者可以称为查询分析表</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt" class="MsoListParagraph"><span style="font-size: 14pt"><font face="Calibri">4)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; font-size: 14pt">支持类的表：这一类是对业务的支持，包括代码表、配置表、规则表等。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">特别是</span><span style="font-size: 14pt"><font face="Calibri">1</font></span><span style="font-family: 宋体; font-size: 14pt">和</span><span style="font-size: 14pt"><font face="Calibri">2</font></span><span style="font-family: 宋体; font-size: 14pt">在设计时最好分别进行处理，不要将交易数据和查询数据混在一块；如果后续要分别部署交易服务器和查询服务器就麻烦了。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">主键策略</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">个人建议在客户没有要求的情况下全部使用替代健而不是自然键，自然键是指业务本身的唯一区别，比如员工工号等。而替代健建议使用</span><span style="font-size: 14pt"><font face="Calibri">GUID</font></span><span style="font-family: 宋体; font-size: 14pt">，这样在有离线业务处理时也能应付。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">替代健中的冗余问题</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">在使用替代健后，有一个问题就是需要频繁的查找自然健，个人建议增加冗余字段将自然健也加入关联表中。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">代码管理策略</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">在客户没有特别要求的情况下，使用整数来表达代码。并确定代码表的建表策略，是建一个表统一管理还是分别建表管理？个人建议使用一个表管就行了。具体表设计后续可以和大家分享。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">字符串字典管理策略</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">我们经常碰到一个问题，内部一些状态和它的名称的管理；比如审批流程中的审核、批准等等，建议使用字符串字典表统一管理。具体表设计后续可以和大家分享。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">大字段管理策略</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">当碰到大字段时，建议尽量集中管理，并建在一个表空间（</span><span style="font-size: 14pt"><font face="Calibri">Oracle</font></span><span style="font-family: 宋体; font-size: 14pt">）或文件组（</span><span style="font-size: 14pt"><font face="Calibri">Sqlserver</font></span><span style="font-family: 宋体; font-size: 14pt">）上。后续和大家分享一下关于附件管理的表设计。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">使用视图</span></p>
<p style="margin: 0cm 0cm 0pt 21pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">个人很少使用视图，原因就是</span><span style="font-size: 14pt"><font face="Calibri">Powerdesign</font></span><span style="font-family: 宋体; font-size: 14pt">对视图设计支持不好，但是有几个方面给大家建议，所有的</span><span style="font-size: 14pt"><font face="Calibri">Select</font></span><span style="font-family: 宋体; font-size: 14pt">查询最好从视图检索，视图中将相应需要的中文信息统一带出来（比如：代码相对的名称或一个流程的状态名称等）；这样统一处理前台需要的显示问题；在业务层构建对象模型时增加状态名称的属性以保持它；这样做的另一个好处就是减少和物理表的耦合性，毕竟一般系统中查询远比修改要多。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">使用标量函数</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">我们有时有这样的需求，要查今天的收入，要查最近</span><span style="font-size: 14pt"><font face="Calibri">7</font></span><span style="font-family: 宋体; font-size: 14pt">天的收入；这时我们可以使用标量函数来完成这个工作，并能保证时间以数据库服务器一致；当然还有很多其他用途，大家去发现。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">下面是一个标量函数的声明来去给定日期当月的第一天：</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: blue; font-size: 10pt">Create</span><span style="font-family: 'Courier New'; font-size: 10pt"> <span style="color: blue">function</span> <span style="color: teal">[dbo]</span><span style="color: gray">.</span><span style="color: teal">[fn_BeginOfMonth]</span><span style="color: gray">(</span> </span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; font-size: 10pt">&nbsp;<span style="color: teal">@DayUTC</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">datetime</span></span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: gray; font-size: 10pt">)</span></p>
<p style="text-align: left; margin: 0cm 0cm 0pt" class="MsoNormal" align="left"><span style="font-family: 'Courier New'; color: blue; font-size: 10pt">returns</span><span style="font-family: 'Courier New'; font-size: 10pt"> <span style="color: blue">datetime</span></span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">使用模版表</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">用户需要做相似又有微小差别的录入或配置，可以使用模版表来增强用户体验。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">和业务相关的表都包含下列字段</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-size: 14pt"><font face="Calibri">CreatedBy </font></span><span style="font-family: 宋体; font-size: 14pt">创建人</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-size: 14pt"><font face="Calibri">CreatedOn </font></span><span style="font-family: 宋体; font-size: 14pt">创建时间</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-size: 14pt"><font face="Calibri">ModifiedBy </font></span><span style="font-family: 宋体; font-size: 14pt">最后修改人</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-size: 14pt"><font face="Calibri">ModifiedOn </font></span><span style="font-family: 宋体; font-size: 14pt">最后修改时间</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-size: 14pt"><font face="Calibri">VersionNumber</font></span><span style="font-family: 宋体; font-size: 14pt">版本号</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">特别是</span><span style="font-size: 14pt"><font face="Calibri">VersionNumber</font></span><span style="font-family: 宋体; font-size: 14pt">作为开放式锁的必要字段；在修改记录时可以通过它来判断用户提交数据时，是否其他人做过改动，以便后续处理。</span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">暂写这么多，希望大家补充。</span></p>
<br />
声明：此文章并非本人原创，转自公司的内部论坛，是公司一的位同事也是我的领导所写，觉得不错转出来与大家共勉。<br />
<img src ="http://www.blogjava.net/relax/aggbug/335905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2010-10-22 17:32 <a href="http://www.blogjava.net/relax/archive/2010/10/22/335905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>给新人的建议：浅谈需求分析的一些方法</title><link>http://www.blogjava.net/relax/archive/2010/10/22/335904.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Fri, 22 Oct 2010 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2010/10/22/335904.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/335904.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2010/10/22/335904.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/335904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/335904.html</trackback:ping><description><![CDATA[<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">需求分析是一个软件成败的决定因素，对于第一次独立承担这项任务的新人来说，有可能无从下手，临时看书好像又来不及。这里将我的理解和大家分享一下，希望对新人能有所帮助。</span></p>
<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">无论是什么项目，假设我们已经对客户的大概需求做过一些收集，好的客户可能有一些需求文档，差一点的用嘴零散的说过；收到这些信息后，我们如何分析呢？很多第一次做需求分析的人，会很自然的将分析后的功能变成数据库的</span><span style="font-size: 14pt"><font face="Calibri">CRUD</font></span><span style="font-family: 宋体; font-size: 14pt">；比如：添加员工、删除员工、修改员工等，但这里客户可能要的是员工入职、员工离职、员工异动。</span></p>
<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">为了简化分析过程，我们可以考虑分四步，每一步都建立在前一半之上的。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">识别主题对象</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">这是分析的第一步，简单的方法是将业务方面的相关名词进行收集，从中选出相应的名词作为主题对象；以车购税为例：最后确定为&#8220;纳税申报表&#8221;、&#8220;税票&#8221;、&#8220;车辆档案&#8221;、&#8220;最低计税价格&#8221;、&#8220;免征车&#8221;等。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">识别后再对主题对象的结构性的需求进行分析，说白了就是确定每个主题对象的内容，以及主题对象间的依赖关系；确定结构最初来源于一些客户提供的表格，依赖关系要根据业务分析才能得出。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">识别主题对象上的业务规则</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">识别出了主题对象，下一步从规则上描述业务对主题对象的约束，比如：纳税申报时如何确定计税价格，如何确定税率，如何确定免税等。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">识别主题对象上的业务流程和事件</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">围绕主题对象它有哪些流程，以及可预见的驱动流程的事件。流程可以分为三类：主题对象从无到有的流程、主题对象生命周期内的业务流程、主题对象生命周期结束的流程。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">比如一个员工从非员工变成员工，有入职流程；</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">员工在职内流程就很多：考勤有关的请假、加班、出差，还有很多异动流程；</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">从员工变成非员工，有离职流程。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">对每一个流程来总结事件，事件分为：系统事件和人工事件；系统事件是机器自动执行的比如：超时等，而人工事件是由交互完成的比如：领导批准请假等。</span></p>
<p style="text-indent: 0cm; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: 宋体; font-size: 14pt">在分析流程的过程中，逐步完善业务规则和主题对象的结构性需求。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt" class="MsoListParagraph"><span style="font-family: Wingdings; font-size: 14pt">&#216;&nbsp;</span><span style="font-family: 宋体; font-size: 14pt">识别主题对象上的数据分析价值</span></p>
<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">最后，也是新人最容易忽视的一点；以上所有的分析更多的站在基本交互业务分析的；接下来我们应该考虑从管理角度来分析需求，也就是在每一个主题对象上我们能提供哪些有价值的分析报告（一般意义上的报表）。这样就照顾到了客户的管理层。</span></p>
<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">通过每一步的分析，就能引出很多需要和客户交流的问题；这样就避免了总想客户能讲讲需求，可是又不知道要客户讲哪方面的内容。</span></p>
<p style="text-indent: 28pt; margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; font-size: 14pt">需求分析是一个很大的话题，这里仅仅是一些提示性的，希望有心人跟帖完善。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;声明：此文章并非本人原创，转自公司的内部论坛，是公司一的位同事也是我的领导所写，觉得不错转出来与大家共勉。</span><br />
</p>
<img src ="http://www.blogjava.net/relax/aggbug/335904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2010-10-22 17:31 <a href="http://www.blogjava.net/relax/archive/2010/10/22/335904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL Server跨数据库访问及分布式事务的使用及配置</title><link>http://www.blogjava.net/relax/archive/2010/10/18/335419.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Mon, 18 Oct 2010 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2010/10/18/335419.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/335419.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2010/10/18/335419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/335419.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/335419.html</trackback:ping><description><![CDATA[<div style="layout-grid:  15.6pt none" class="Section0">
<h2 style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt; margin-left: -21pt"><span style="font-family: '黑体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">一、</span><span style="font-family: '黑体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">跨数据库访问</span><span style="font-family: '黑体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<h3 style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">第一种方式</span><span style="font-family: '宋体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h3>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">SELECT&nbsp;*&nbsp;FROM&nbsp;OPENDATASOURCE(</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;'SQLOLEDB',</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;'Data&nbsp;Source=<font face="宋体">远程</font><font face="Times New Roman">ip;User&nbsp;ID=sa;Password=</font><font face="宋体">密码</font><font face="Times New Roman">'</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;).<font face="宋体">库名</font><font face="Times New Roman">.dbo.</font><font face="宋体">表名</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;WHERE&nbsp;<font face="宋体">条件</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h3 style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">第二种方式</span><span style="font-family: '宋体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h3>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">sql&nbsp;server<font face="宋体">组</font><font face="Times New Roman">-&gt;</font><font face="宋体">服务</font><font face="Times New Roman">-&gt;</font><font face="宋体">安全性</font><font face="Times New Roman">-&gt;</font><font face="宋体">链接服务器下建立一个具有别名的链接服务器。然后通过以下方式访问：</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">SELECT&nbsp;*&nbsp;FROM&nbsp;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">[<font face="宋体">链接服务器名</font><font face="Times New Roman">]</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">.<font face="宋体">库名</font><font face="Times New Roman">.dbo.</font><font face="宋体">表名</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">&nbsp;WHERE&nbsp;<font face="宋体">条件</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">需要注意的是建立链接数据库服务器类型如果选择&#8220;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">SQL&nbsp;server<font face="宋体">&#8221;，那么链接服务器名称必须用要链接的服务器的在网络中的机器名或</font><font face="Times New Roman">IP,</font><font face="宋体">如果要使用其它别名，可以在</font><font face="Times New Roman">WINDOWS\system32\drivers\etc\hosts</font><font face="宋体">文件里添加一个别名的映射。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; background: rgb(249,249,249); color: rgb(17,0,0); font-size: 9pt; mso-spacerun: 'yes'; mso-shading: rgb(249,249,249)"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">解除<font face="Times New Roman">SQL</font><font face="宋体">阻止</font></span><span style="font-family: '宋体'; font-size: 10.5pt; font-weight: bold; mso-spacerun: 'yes'">（<font face="Times New Roman">sqlserver&nbsp;2005</font><font face="宋体">情况）</font></span><span style="font-family: 'Arial'; background: rgb(255,255,255); color: rgb(51,51,51); font-size: 10.5pt; mso-spacerun: 'yes'; mso-shading: rgb(255,255,255)"><br />
</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">SQL&nbsp;Server&nbsp;<font face="宋体">阻止了对组件&nbsp;</font><font face="Times New Roman">&#8216;Ad&nbsp;Hoc&nbsp;Distributed&nbsp;Queries&#8217;&nbsp;</font><font face="宋体">的&nbsp;</font><font face="Times New Roman">STATEMENT&#8217;OpenRowset/OpenDatasource&#8217;&nbsp;</font><font face="宋体">的访问，因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用&nbsp;</font><font face="Times New Roman">sp_configure&nbsp;</font><font face="宋体">启用&nbsp;</font><font face="Times New Roman">&#8216;Ad&nbsp;Hoc&nbsp;Distributed&nbsp;Queries&#8217;</font><font face="宋体">。有关启用&nbsp;</font><font face="Times New Roman">&#8216;Ad&nbsp;Hoc&nbsp;Distributed&nbsp;Queries&#8217;&nbsp;</font><font face="宋体">的详细信息，请参阅&nbsp;</font><font face="Times New Roman">SQL&nbsp;Server&nbsp;</font><font face="宋体">联机丛书中的&nbsp;</font><font face="Times New Roman">&#8220;</font><font face="宋体">外围应用配置器</font><font face="Times New Roman">&#8221;</font><font face="宋体">。</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">因为<font face="Times New Roman">SQL2005</font><font face="宋体">默认是没有开启</font><font face="Times New Roman">&#8217;Ad&nbsp;Hoc&nbsp;Distributed&nbsp;Queries&#8217;&nbsp;</font><font face="宋体">组件，开启方法如下</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">EXEC&nbsp;sp_configure&nbsp;'show&nbsp;advanced&nbsp;options',&nbsp;1</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">GO</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">RECONFIGURE</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">GO</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">EXEC&nbsp;sp_configure&nbsp;'Ad&nbsp;Hoc&nbsp;Distributed&nbsp;Queries',&nbsp;1</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">GO</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">RECONFIGURE</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">GO</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">关闭<font face="Times New Roman">Ad&nbsp;Hoc&nbsp;Distributed&nbsp;Queries</font><font face="宋体">：</font></span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">exec&nbsp;sp_configure&nbsp;'Ad&nbsp;Hoc&nbsp;Distributed&nbsp;Queries',&nbsp;0</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">reconfigure</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">exec&nbsp;sp_configure&nbsp;'show&nbsp;advanced&nbsp;options',&nbsp;0</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">reconfigure</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; background: rgb(249,249,249); color: rgb(17,0,0); font-size: 9pt; mso-spacerun: 'yes'; mso-shading: rgb(249,249,249)"><o:p></o:p></span></p>
<h2 style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt; margin-left: -21pt"><span style="font-family: '黑体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">二、</span><span style="font-family: '黑体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'">分布式事务的配置</span><span style="font-family: '黑体'; font-size: 16pt; font-weight: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="margin-top: 0pt; margin-bottom: 0pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">1．</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">用</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">DTCPing.exe</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">工具测试两台机器的</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">DTC<font face="宋体">服务是否可以联通。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">2．</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">如果有问题检查</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">MSDTC</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">服务是否启动。</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">3．</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">MSDTC<font face="宋体">依赖于</font><font face="Times New Roman">RPC,RPC</font><font face="宋体">使用的端口是</font><font face="Times New Roman">135,</font><font face="宋体">测试</font><font face="Times New Roman">135</font><font face="宋体">端口是否打开</font><font face="Times New Roman">.</font><font face="宋体">是否有防火墙</font><font face="Times New Roman">?</font><font face="宋体">如果有先关了防火墙</font><font face="Times New Roman">.&nbsp;&nbsp;&nbsp;telnet&nbsp;&nbsp;&nbsp;IP&nbsp;&nbsp;&nbsp;135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="宋体">如果是关闭的打开它</font><font face="Times New Roman">.&nbsp;&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">4．</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">打开&#8220;控制面板</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">-&gt;</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">管理工具</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">-&gt;<font face="宋体">组件服务&#8221;，然后展开&#8220;组件服务</font><font face="Times New Roman">-&gt;</font><font face="宋体">计算机</font><font face="Times New Roman">-&gt;</font><font face="宋体">我的电脑&#8221;右键属性。选择</font><font face="Times New Roman">MSDTC</font><font face="宋体">的</font><font face="Times New Roman">Tab</font><font face="宋体">栏，点击安全性配置按钮，打开窗口，将&#8220;网络</font><font face="Times New Roman">DTC</font><font face="宋体">访问&#8221;选项选中，并将&#8220;允许远程客户端&#8221;，&#8220;允许入站&#8221;，&#8220;允许出站&#8221;都选中，并选择&#8220;不要求进行验证&#8221;，&#8220;启用事务</font><font face="Times New Roman">Internet</font><font face="宋体">协议（</font><font face="Times New Roman">TIP</font><font face="宋体">）事务&#8221;，&#8220;启用</font><font face="Times New Roman">XA</font><font face="宋体">事务&#8221;都选中。然后确定即可。（以上选项</font><font face="Times New Roman">windows</font><font face="宋体">默认不开放，必须配置）</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">5．</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">检查你的两台服务器是否在同一个域中<font face="Times New Roman">.&nbsp;&nbsp;</font><font face="宋体">如果不在同一个域中</font><font face="Times New Roman">,</font><font face="宋体">是否建立可信任联接</font><font face="Times New Roman">.&nbsp;&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">6．</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">如果是<font face="Times New Roman">WIN2000,</font><font face="宋体">升级到</font><font face="Times New Roman">SP4&nbsp;&nbsp;&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">7．</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">确认</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">MDAC</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">版本是</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">2.6<font face="宋体">以上</font><font face="Times New Roman">,</font><font face="宋体">最好是</font><font face="Times New Roman">2.8.&nbsp;&nbsp;</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">8．</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">在<font face="Times New Roman">SQL&nbsp;server</font><font face="宋体">存储过程中使用分布式事务时，必须</font><font face="Times New Roman">SET&nbsp;&nbsp;&nbsp;XACT_ABORT&nbsp;&nbsp;&nbsp;ON&nbsp;--</font><font face="宋体">设置分布式事务如果发生问题主动回滚操作</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" class="p0"><span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'">9．</span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'">可以声明使用BEGIN&nbsp;DISTRIBUTED&nbsp;TRANSACTION<font face="宋体">，如果未明确生明，在事务块中包含链接服务器的访问，</font><font face="Times New Roman">SQL&nbsp;server</font><font face="宋体">会自动升级成分布式事务。</font></span><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt; margin-left: -11.76pt" class="p0"><span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
</div>
<img src ="http://www.blogjava.net/relax/aggbug/335419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2010-10-18 10:50 <a href="http://www.blogjava.net/relax/archive/2010/10/18/335419.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决PowerDesigner中Name与Code同步的问题</title><link>http://www.blogjava.net/relax/archive/2010/03/10/315017.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Wed, 10 Mar 2010 00:58:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2010/03/10/315017.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/315017.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2010/03/10/315017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/315017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/315017.html</trackback:ping><description><![CDATA[<span style="line-height: 21px; border-collapse: collapse; font-family: verdana, 'ms song', Arial, Helvetica, sans-serif; color: #393939; font-size: 14px">&nbsp;<span style="padding-bottom: 0px; line-height: 19px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; font-size: 10pt; padding-top: 0px">PowerDesigner</span><span style="padding-bottom: 0px; line-height: 19px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; font-size: 10pt; padding-top: 0px">中，但修改了某个字段的<span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">name</span>，其<span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">code</span>也跟着修改，这个问题很讨厌，因为一般来说，<span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">name</span>是中文的，<span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">code</span>是字段名。</span>
<p style="text-align: left; padding-bottom: 0px; line-height: 21px; text-indent: 0px; margin: 0cm 0cm 0pt; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="left"><span style="padding-bottom: 0px; line-height: 19px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; font-size: 10pt; padding-top: 0px">解决方法如下：</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 21px; text-indent: 0px; margin: 0cm 0cm 0pt; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="left"><span style="padding-bottom: 0px; line-height: 19px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; font-size: 10pt; padding-top: 0px">1</span><span style="padding-bottom: 0px; line-height: 19px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; font-size: 10pt; padding-top: 0px">、选择<span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Tools-&gt;GeneralOptions...</span>菜单，出现<span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">General Options</span>对话框。</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 21px; text-indent: 0px; margin: 0cm 0cm 0pt; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="left"><span style="padding-bottom: 0px; line-height: 19px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; font-size: 10pt; padding-top: 0px">2</span><span style="padding-bottom: 0px; line-height: 19px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; font-size: 10pt; padding-top: 0px">、从<span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Category</span>中选择<span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Dialog</span>项。</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 21px; text-indent: 0px; margin: 0cm 0cm 0pt; padding-left: 0px; padding-right: 0px; padding-top: 0px" align="left"><span style="padding-bottom: 0px; line-height: 19px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; font-size: 10pt; padding-top: 0px">3</span><span style="padding-bottom: 0px; line-height: 19px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #333333; font-size: 10pt; padding-top: 0px">、取消右边<span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&#8220;Name to Code mirroring&#8221;</span>复选框。</span></p>
</span>
<img src ="http://www.blogjava.net/relax/aggbug/315017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2010-03-10 08:58 <a href="http://www.blogjava.net/relax/archive/2010/03/10/315017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu下QT开发不能编译报collect2: ld returned 1 exit status的解决</title><link>http://www.blogjava.net/relax/archive/2009/12/04/304801.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Fri, 04 Dec 2009 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2009/12/04/304801.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/304801.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2009/12/04/304801.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/304801.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/304801.html</trackback:ping><description><![CDATA[sudo apt-get install libfreetype6-dev<br />
sudo apt-get install libavahi-gobject-dev<br />
sudo apt-get install libSM-dev<br />
sudo apt-get install libXrender-dev<br />
sudo apt-get install libfontconfig-dev<br />
sudo apt-get install libXext-dev<br />
<br />
<p>Edit: To get OpenGL to build I also had to install libgl1-mesa-dev and freeglut3-dev.</p>
<p>Edit2: Audio required libphonon-dev.</p>
安装以上包后就可以正常使用了。
 <img src ="http://www.blogjava.net/relax/aggbug/304801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2009-12-04 17:21 <a href="http://www.blogjava.net/relax/archive/2009/12/04/304801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flash player的安全限制（不能播放本地文件）</title><link>http://www.blogjava.net/relax/archive/2009/12/04/304786.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Fri, 04 Dec 2009 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2009/12/04/304786.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/304786.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2009/12/04/304786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/304786.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/304786.html</trackback:ping><description><![CDATA[最近在linux下开发flex,在开发的过程中遇到一个很大的问题，就是在windows下编译的能播放flv的swf文件到linux下就不能播放了。真是一头雾水呀。今天和同事试了一整天。终于找到了问题的关键。<br />
这个问题原来是由于flash的安全问题造成的。<br />
在/home/{user}/.macromedia/Flash_Player/#Security/FlashPlayerTrust目录下有好多个配置文件。只有在配置文件里指定了路径下的swf文件才能够读取本地的flv.<br />
后来又从网上查了一下相关的问题，整体总结一下。<br />
ubantu Linux下<br />
找到配置目录：/home/{user}/.macromedia/Flash_Player/#Security/FlashPlayerTrust<br />
在下面新建个文件内容写上需要的路径，例如：<code>/home/{user}保存flash就可以正常使用本地文件了<br />
unbantu下没有找到适用所有用户的，也许没有吧。其它操作系统如下。<br />
<li>
<p><strong>Windows 所有用户: </strong></p>
<p><kbd>&lt;系统 &#8250; \Macromed\Flash\FlashPlayerTrust</kbd></p>
<p></p>
<p><strong>Windows 单个用户: </strong></p>
</li>
<li>
<p><kbd>&lt;应用程序数据 &#8250; \Macromedia\Flash Player\#Security\FlashPlayerTrust</kbd> </p>
</li>
<li>
<p><strong>Mac OS 所有用户: </strong></p>
<p><kbd>&lt;应用程序支持 &#8250; /Macromedia/FlashPlayerTrust </kbd></p>
<p><strong>Mac OS 单个用户: </strong></p>
</li>
<li>
<p><kbd>&lt;应用程序数据 &#8250; /Macromedia/Flash Player/#Security/FlashPlayerTrust </kbd></p>
<p>但愿看过此文章的其它朋友，别再和我一样为这个问题绕了好几天。</p>
</li>
</code>
<img src ="http://www.blogjava.net/relax/aggbug/304786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2009-12-04 16:20 <a href="http://www.blogjava.net/relax/archive/2009/12/04/304786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse3.5下载后无法正常启动的研究与解决</title><link>http://www.blogjava.net/relax/archive/2009/09/27/296608.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Sun, 27 Sep 2009 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2009/09/27/296608.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/296608.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2009/09/27/296608.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/296608.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/296608.html</trackback:ping><description><![CDATA[eclipse 3.5.1已经新鲜出炉了。可上下载了之后发现无法启动报错如下图<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/relax/eclipse-err.JPG" /><br />
进行一翻测试后发现将eclipse.ini中的最后一行的-Xmx512m改成-Xmx454m就可以正常启动（455就会报错哦，我可是一个数一个数试出来的）<br />
再又将所有其它软件全关闭一一测试后发现，刚下载不能用的问题是360安全卫士搞的鬼，如果将360安全卫士的木马防火墙和网页防火墙关掉，-Xmx512m时是可以正常启动的。<br />
我已经在360的论坛上报告这个BUG了。<br />
后来又经过一翻测试发现<br />
正常情况下-Xmx参数也只能最多设到Xmx912m设成Xmx913m也会报错的。这个还没找到是什么原因，当然也许是我机器是这样，还没有换机器测试。如果哪位看到文章测试有其它结果希望能给我回复。谢谢！<br />
<br />
总结：<br />
eclipse3.5.1如果不想关闭360安全卫士木马和网页防火墙的情况下，可以将-Xmx设成454m,这样能使eclipse使用更多的内存。<br />
如果关闭的关闭360安全卫士木马和网页防火墙的情况下，可以将-Xmx设成912m这时，这是我机器能用的最大值了，不知其它机器什么情况。
  <img src ="http://www.blogjava.net/relax/aggbug/296608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2009-09-27 11:11 <a href="http://www.blogjava.net/relax/archive/2009/09/27/296608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一种折中的取得远程主机MAC地址的方法</title><link>http://www.blogjava.net/relax/archive/2009/08/31/293321.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Mon, 31 Aug 2009 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2009/08/31/293321.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/293321.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2009/08/31/293321.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/293321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/293321.html</trackback:ping><description><![CDATA[<p>最近在做老系统的ＣＳ到ＢＳ的改造。碰到一个需要获取指定ＩＰ主机MAC地址的问题。实在没有想出什么好办法，只能通过ＤＯＳ命令折中一下。坏处就是不能跨平台了，哪位大侠知道怎么做纯java的实现？一定指点我一下。<br />
package com.dayang.utils;</p>
<p>import java.io.IOException;<br />
import java.io.InputStreamReader;<br />
import java.io.LineNumberReader;</p>
<p>/**<br />
&nbsp;* 网络工具<br />
&nbsp;*<br />
&nbsp;* @author relax<br />
&nbsp;*/<br />
public class NetworkUtil {</p>
<p>&nbsp;/**<br />
&nbsp; * 根据指定IP获取MAC地址<br />
&nbsp; * @param ip<br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;public static String getMACAddress(String ip) {<br />
&nbsp;&nbsp;String str;<br />
&nbsp;&nbsp;String macAddress = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;Process p = Runtime.getRuntime().exec("nbtstat -a " + ip);//执行DOS命令<br />
&nbsp;&nbsp;&nbsp;InputStreamReader ir = new InputStreamReader(p.getInputStream());//获取返回结果的流<br />
&nbsp;&nbsp;&nbsp;LineNumberReader input = new LineNumberReader(ir);<br />
&nbsp;&nbsp;&nbsp;//查找Mac地址<br />
&nbsp;&nbsp;&nbsp;for (int i = 1; i &lt; 100; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;str = input.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (str != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (str.contains("MAC Address")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;macAddress = str.substring(str.indexOf("= ")+2, str.length()).replace("-", "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;ir.close();<br />
&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;} <br />
&nbsp;&nbsp;return macAddress;<br />
&nbsp;}</p>
<p>&nbsp;public static void main(String args[]) {<br />
&nbsp;&nbsp;System.err.println(getMACAddress("192.168.0.151"));<br />
&nbsp;}<br />
}<br />
</p>
 <img src ="http://www.blogjava.net/relax/aggbug/293321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2009-08-31 15:30 <a href="http://www.blogjava.net/relax/archive/2009/08/31/293321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR的注释(annotations)使用及反向调用(Reverse Ajax)</title><link>http://www.blogjava.net/relax/archive/2009/08/13/290958.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Thu, 13 Aug 2009 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2009/08/13/290958.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/290958.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2009/08/13/290958.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/290958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/290958.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 注释语法的方式来使用DWR，DWR的Reverse Ajax，由服务器端反向向客户端推送数据。&nbsp;&nbsp;<a href='http://www.blogjava.net/relax/archive/2009/08/13/290958.html'>阅读全文</a><img src ="http://www.blogjava.net/relax/aggbug/290958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2009-08-13 14:37 <a href="http://www.blogjava.net/relax/archive/2009/08/13/290958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读书计划</title><link>http://www.blogjava.net/relax/archive/2009/02/10/254088.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Tue, 10 Feb 2009 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2009/02/10/254088.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/254088.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2009/02/10/254088.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/254088.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/254088.html</trackback:ping><description><![CDATA[<p>新年新迹象，为了自己能有更大的进步，更好的发展，也该时不时为自己充充电了。<br />
<br />
<br />
</p>
<fieldset><legend title="目标">目标</legend>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;既然写读书计划，读的书当然得有点目的性，不乱七八糟的，随便读一些。具体目标如下<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提高自己英语水平（去面试了两个外企真是丢人呀！一定要提高，先从基础开始）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提高自己的编程能力<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提高项目管理能力</fieldset>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<fieldset><legend>选书</legend>既然是读书计划选书当然最重要了。只是还在找，先列出来，现在已经确定想读和已经在读的几本书吧。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;《&nbsp;别笑！我是英文单词书》 一个韩国人先的，看网上评价好像不错，买来读读做为睡前读物吧。英文的就先这一本吧<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;《程序员修炼之道：从小工到专家》 本想买一本，当当竟然缺货，只好找本电子书了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;《针对Java程序的UML概述》 也是电子书Matrix网站翻译的不错。 已经看了一些。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;《职业晋升如何落地：职业晋升设计的十大关键》 人人都想晋升吗，先在线读读，如果感觉不错就买本实体书。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;《走出软件作坊》读了几天PMBOK太枯燥了。还是看看阿朱的真言吧，没出书的时候就已经在读了。</fieldset><br />
先写这些吧，回头再慢慢填全！ 
<img src ="http://www.blogjava.net/relax/aggbug/254088.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2009-02-10 15:00 <a href="http://www.blogjava.net/relax/archive/2009/02/10/254088.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高效读书心得(转)</title><link>http://www.blogjava.net/relax/archive/2009/02/10/254066.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Tue, 10 Feb 2009 05:54:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2009/02/10/254066.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/254066.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2009/02/10/254066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/254066.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/254066.html</trackback:ping><description><![CDATA[<strong>1.尽量阅读中文版</strong><br />
&nbsp; 虽然有人英文很强，有的翻译很差，但AnyWay 中文阅读与理解的时间，略读与快速定位的速度还是要快一些。<br />
&nbsp; <br />
<strong>2.即时批注、总结笔记与交流</strong><br />
&nbsp; 虽然爱书，但发现最有效的读书方式还是不断的制造脂批本，读书时在重要的文字下划线，把自己的心得写在页旁。<br />
&nbsp; 在明天复习一次批注，最好可以有空重新整理笔记，或者拿来与人讨论。&nbsp;<br />
&nbsp;<br />
<strong>3.大量思考或重复记忆</strong><br />
&nbsp; 看书最郁闷的事情就是看完之后脑袋空空了。技术书还好点，虽然看的时候可能很辛苦，但就像学会了骑单车，之后再骑的时候总是会的；而偏设计与管理的书，最容易的事情就是看的时候很快，看完没什么留下到实践中。<br />
&nbsp; 所以，我们不能以看小说的速度来看设计书，要寻找思考的机会，思考是最好的记忆。<br />
&nbsp; 又或者，大量的重复记忆，重复多遍直到无意识的记忆。&nbsp;<br />
&nbsp; <br />
<strong>4.人体工学</strong><br />
&nbsp;&nbsp;那些见缝插针的时间与地点不是看这个书单的好地方。<br />
&nbsp; 环境不要有电视，音乐等强输入源，而微风阳光鸟语等弱输入源则有助活跃大脑。<br />
&nbsp; 看书时大量的喝水。<br />
&nbsp; 如果发现自己的大脑已经疲累，已经在浮光掠影的翻看，就要休息。<br />
&nbsp; 留给大脑消化的时间，看完书不要接着看其他有难度的书或事情。
<img src ="http://www.blogjava.net/relax/aggbug/254066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2009-02-10 13:54 <a href="http://www.blogjava.net/relax/archive/2009/02/10/254066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]网络推广经典方法</title><link>http://www.blogjava.net/relax/archive/2008/12/22/247828.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Mon, 22 Dec 2008 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2008/12/22/247828.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/247828.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2008/12/22/247828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/247828.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/247828.html</trackback:ping><description><![CDATA[如何增加网站访问量？以下是你可以考虑采用29个方法。其中，你或许已经采用了一些，有的方法你可能忘了采用，还有一些是你从来没有听说过的。总之，在这里你可以了结到当前各种有效的网站推广方法。首先你要了解，网站推广是一个长期而且系统的过程，需要制定明确的目标和计划，并做好相应的准备。 <br />
以网站最重要的关键词在主要搜索引擎中排名领先，这是搜索引擎推广中最重要的策略。搜索引擎的搜索机器人会自动搜索网页内容，因此搜索引擎策略从优化网页开始。 <br />
一、添加网页标题。 <br />
为每页内容写5到8个字的描述性标题。标题要简练&#8220;的&#8221;&#8220;和&#8221;这些不重要的词汇。要说明该页面，该网站最重要的内容是什么。网页标题将出现在搜索结果页面的链接上，因此可以写得稍带煽动性，以吸引搜索者点击该链接。同时在首页内容中写上你的公司名和你最重要的关键词，而不能只是写公司名。网站的每一个页面都应该有针对该页面的标题。 <br />
二、添加描述性META标签。 <br />
除了网页标题，不少搜索引擎会搜索到META标签。这是一句说明性文字。描述网页正文的内容，句中也要包含本页使用到的关键词，词组等。 目前，含关键词的META标签已经对排名帮助不大，但有时META标签会用于付费登陆技术中。而且谁又知道什么时候搜索引擎又会再次重视它呢？ <br />
三、在网页粗体文字，一般为文章标题中也填上你的关键词。 <br />
搜索引擎很重视粗体文字，以为这是本页很重要的内容。因此，确保在一二个粗体文字标签中写上你的关键词。要尽量避免将重要的标题都制作成图片的形式，更不要将整个首页都做成一个图片。 <br />
四、确保在你的正文第一段就出现关键词。 <br />
搜索引擎希望在第一段文字中就找到你的关键词，但不要充斥过多关键词。google大概将全文每100个字出现1.5到2个关键词视为最佳的关键词密度，可获得好排名。其他可考虑放置关键词的地方可以在代码的ALT或者COMMEET标签里面。如果无法保证正文第一段出现关键词，可以考虑一些不救措施，比如给网页加一个批注等等。 <br />
五、导航设计要易于搜索引擎搜索。 <br />
有些人在网页制作中使用框架，但是这对于搜索引擎是一个严重的问题。即使搜索引擎找到你的内容页面，也可能错过其中关键性的导航栏目，从而不能进入到其他页面。用JAVA和FLASH做的导航按钮看起来是很漂亮美观，但是搜索引擎找不到它们。补救的办法是在页面底部用常规HTML链接再作一个导航条，确保可以通过这个导航条进入网站的每一页。你还可以做一个网站地图，也可以链接到每一页面。此外，有些内容管理系统和电子商务目录运用动态的网页，这些页面的网址后面一般都有一个问号带上数字，工作过度的搜索引擎往往在问号前停下，不在继续搜索。对于这种情况。可以通过更改URL，付费登陆等手段加以解决。动态站点可以通过生成静态页面的技术方便搜索引擎的抓取。网站地图要尽量可能链接到所有的主要页面，并单独把站点地图页面提交给搜索引擎。多使用HTML静态网页，虽然增加了工作量，但可以增加搜索引擎的友好度，从而为获得好的排名打下基础。 <br />
六、针对某些特别重要的关键词，专门做几个页面。 <br />
搜索引擎优化专家不推荐使用任何针对搜索引擎的欺骗性过渡页面，因为这些几乎是复制出来的网页可能搜索引擎的惩罚。但可以做几个页面，每页集中包含不同的关键词或词组。例如，无须在某一页上介绍你所有的服务内容，而是为每种服务分别作一个页面。这样，每一页都有相对应额关键词，这些页面内容因为包含针对性的关键词而不是笼统的内容，从而可以提高排名。 <br />
七、向搜索引擎提交网页。 <br />
在搜索引擎是找到【ADD YOUR URL】网站登陆的链接。搜索引擎将自动搜索你提交的网页。美国最著名的搜索引擎是：google、inktomi、alta、vista、 tehoma。这些搜索引擎向其它主要搜索引擎和门户网站提供搜索内容。在欧洲和其他地区你可以发布到区域性的搜索引擎。至于花钱请人帮你提交成千上万的搜索引擎的做法是在白花钱。也不要在那些FFA（free for all pages）网站，即所谓将你的网站免费自动提交到数百搜索引擎的站点。这类提交不仅效果不好，还会给你带来大量的垃圾邮件，并可能导致搜索引擎对你的网页进行惩罚。也不要使用网站登陆软件，所谓可以一次性将你的网站提交给数以千计的搜索引擎，其实不仅是不可能的，也是没有实际价值的。最重要的是做好网站的优化设计，对于主要搜索引擎，采用逐个手工提交的方式来进行。对于付费搜索引擎，更不可能依靠软件来提交。事实上，有效的搜索引擎营销策略根本不需要将网站登陆到数以千计的搜索引擎，因为访问量最大的几个搜索引擎几乎集中了98％以上的访问量，剩下的搜索引擎没有多少实际意义。另外要注意，提交网页不应该是一次性的，随着内容的更新，应该定期重新提交网页。由于网络页面越来越多，很多搜索机器人的回访时间很长，定期提交可以让搜索引擎前来抓取最新的更新内容。 <br />
八、调整主要内容页面以提高排名。 <br />
将你认为最重要的页面，或许是首页作一些调整，以提高他们的排名。有一些软件可以让你检查当前的排名，比较跟你的关键词相同的竞争者的网页排名，还可以获得搜索引擎对你的网页的首选统计数据，从而对自己的页面进行调整。你可以使用webpositiongold自己做这个工作，但由于很花时间，也可以请专业的公司帮你做。在其他网站做链接可以带来更多访问量。自从google等主要搜索引擎将网站的链接广泛度作为排名参考的重要因素以后，越多网站链接你，你的网站排名越高。同时，链接的质量也是搜索引擎考虑的重要因素。链接在访问量高的网站比链接在访问量低的网站更有优势。 <br />
九、将网站提交到主要的检索目录。 <br />
确保你的网站登陆到免费的open directory（<a href="http://www.dmoz.com/" target="_blank">www.dmoz.com</a>），这是由人工进行登陆审查的网站。该分级目录为所有主要搜索引擎提供目录内容提供搜索。google很看重你的网站是否在这类重要的网站有链接。yahoo 是另一个重要的检索目录，需要在上面登陆。提示：描述网站的字数最好比规定的最高字数少，不要刚好达到字数限制，以免太长的文字描述使得网站审核人员删除一些句段。目前商业网站登陆yahoo每年要交￥299，最好让他们在7个工作日内就将你的网站登陆上去。其他可以考虑登陆的检索目录有 about.com和business.com。国内有很多网站导航站点。例 <br />
<br />
如<a href="http://www.hao123.com/" target="_blank">http://www.hao123.com/</a> <br />
<a href="http://www.goobaidugle.net/" target="_blank">http://www.goobaidugle.net/</a> <br />
<a href="http://www.wangsou.mobi/" target="_blank">http://www.wangsou.mobi/</a> <br />
<a href="http://www.265.com/" target="_blank">http://www.265.com/</a>等等，也能带来非常大的流量。即使网络营销预算不多，但主要的搜索引擎如新浪，搜虎等也是很有必要登记的。 <br />
十、将网站登陆到行业站点和专业目录中。 <br />
有一些检索目录定位于某个行业，如教育或金融业。如果你属于某个贸易协会，该协会集中了诸多会员站点，你可向该协会网站申请加入你的站点，哪怕付费也是应该的，因为这会为你带来许多目标访问者。除了可以登陆到很多黄页类网站，到搜索引擎按照你的行业查找，一定也能找到很多相关的行业目录站点，应该尽量登陆这些站点。 <br />
十一、请求互换链接。 <br />
寻找一些与你的网站内容互补的站点向对方要求互换链接。最理想的链接对象是那些与你的网站流量相当的网站。流量太大的网站管理员要应付太多要求互换链接的请求，容易将你忽略。小的一些网站页可以考虑。互换链接页面要放在网站比较偏僻的地方，以免将你的网站访问者很快引向他人的站点。找到可以互换链接的网站之后，发一封个性化的电邮给对方网站管理，如果对方没有回复，再打电话试一试。一定要关注对方网站的质量，不要片面追求链接数量，更不要发垃圾邮件。 <br />
十二、发表免费文章，附带站点签名。 <br />
免费为其他网站的新闻邮件写一些专业性文章，文章里用简短的文字附带描述你提供的东西，并请求对方链接你的网站。这是一种有效的病毒营销方法，你的文章将作为成千上百的用户订阅信息发出去，让你的网站一次性获得几百个链接。没有自己的原创文章，转载别人的文章时一定也要加上自己的链接。 <br />
网下的传统推广方法依然奏效。多种手段并用的方法尤其有效。 <br />
十三、将你的网址印在信纸、名片、宣传册、印刷品上。这种简单的方法有时候却被忽略了。确保网址拼写正确。建议把http：//部分省略，只书写<a href="http://www./" target="_blank">www.</a>****.com部分。一个易于记忆的域名有利于网站的推广，在选择域名时一定要仔细考虑。 <br />
十四、使用传统媒体广告。 <br />
传统媒体广告不应该废止。无论是报纸还是杂志广告，务必确保在其中展示你的网址。要将查看网站作为广告的辅助内容，提醒用户浏览网站将取得更多相关信息。别忽视在一些定位相对比较狭窄的杂志或者贸易期刊刊登广告，有时候这些广告定位会更加准确、有效。而且比网络广告更便宜。还有其它传统方式可增加网站访问量，如直邮、分类广告、明信片等等。电视广告恐怕更适合于那些销售大众化商品的网站。让网址出现在广告中显眼的位置，相信比电话号码更好记忆。 <br />
十五、提供免费服务。 <br />
人们都喜欢免费的东西。通过免费信息内容吸引人们访问你的网站，比单纯叫人来访问了解你的业务更有效。建立免费资源需要花费时间和精力，但是对增加访问量非常有效。你提供的免费内容要与你销售的东西非常接近，这样你吸引来得访问者才有可能时目标潜在客户，提供免费服务的同时，网站要提供多种链接方式将获取免费信息的用户注意力引导到你销售的产品部分。免费资源比如：免费邮箱、免费网站登陆、免费发布信息、能提供具有特色的免费服务那就更好了。 <br />
十六、发布新闻。 <br />
寻找具有新闻价值的事件，比如宣传你提供免费服务，并将新闻发布到你所在行业的印刷期刊和网站期刊上。你可以使用一些网络新闻发布服务。比如：<a href="http://www.prweb.com/" target="_blank">www.prweb.com</a> 新闻推广总是有效的，这就是为什么传统媒体会有那么多企业的广告看起来很像新闻的原因。 <br />
电子邮件是增加访问量的重要方法，但前提是不能大量发送未经许可的垃圾邮件。 <br />
十七、在你发出的邮件中创建一个签名，让潜在客户与你联系。 <br />
大部分的邮件系统都有创建签名的功能。签名会自动出现在你发出去的每封邮件末尾。签名要限制在6-8行之内。包括：公司名称、地址、电话、网址、电子邮件和一句你的企业的描述。签名不要为了漂亮设计为图片格式，要便于客户复制拷贝。 <br />
十八、建立邮件列表，定期向用户发送新闻邮件或其他信息。 <br />
这是与客户保持联系、建立信任、发展品牌及建立长期关系的最好方法之一。你可以请网站访问者填写他们的电子邮件地址，从而收取你的新闻邮件。发送邮件需要采用群发服务器，这些在网络上有很多。 <br />
十九、向邮件列表用户发布产品信息，如优惠券，新产品及其其他促销信息。 <br />
如果将邮件主题和正文进行个性化处理将获得更好的效果。邮件主题设计的5个基本原则是：1、体现出邮件内容的精华。2、体现出发件人信息中无法包含的内容。3、体现出品牌或者产品信息。4、邮件主题含有丰富的关键词。5、邮件主题不宜过于简单或者过于复杂。 <br />
二十、租用目标客户邮件列表。 <br />
这些邮件列表客户在邮件列表商的网站注册的时候同意接受某些类别商业邮件信息，因此向这些用户发送你的产品信息是合法的，不属于垃圾邮件。自己用邮址搜索软件收集电子邮件地址，或者购买电子邮件地址都属于垃圾邮件，不仅不会带来好处，甚至会收到惩罚。 <br />
二十一、在邮件列表和新闻组中进行促销。 <br />
许多在某一专业领域中有着共同兴趣的人在网络上进行讨论交流，形成成千上万不同领域的新闻组。找到自己领域内的新闻组，不是要在其中公开宣传你的产品或者服务，而是在交流的签名中留下你的电子邮件地址和网站。当人们逐渐了解并信任你的时候，他们会访问你的网站。 <br />
新闻组在国内应用不多，因此算不上常用的网站推广方法。论坛和聊天室曾经被用来宣传产品，但现在很多网站并不欢迎在这些网络社区发布广告信息，除非有专门的广告发布版块，否则尽量不要采用这种方式。 <br />
二十二、运用竞赛。 <br />
你可以在网站上设计一个竞赛，奖品要能够吸引那些你最希望获得的那类客户。比如将奖品设计为你的产品或一定的购买折扣等等。运用竞赛可以有效的吸引更多访问量。如果你的知名度不高，如何让客户知道你开展竞赛也是一个问题，因此对有些网站这种方式并不适用。 <br />
二十三、让用户将网站加入收藏夹。 <br />
我们的做法是在网站首页上添加一个加入收藏图标，真正对网站有兴趣的客户点击浏览器上的收藏也很方便。但一定不要强制将网站设置为客户的首页或浏览你的网站的时候，经常自动出现请将本站加入你的收藏夹、请将本站设置为你的首页。 <br />
二十四、与互补性的网站交换广告。 <br />
利用对方网站的流量，可以获得新的访问人群。许多网站都有友情链接栏目，加入广告交换网是最方便的，但有些广告交换网带有一些代码，会弹出一些插件提示，可能会给浏览者带来反感以及影响网站的浏览速度。在合作伙伴之间自行交换广告是比较理想的，花点时间也值得。 <br />
二十五、创建病毒营销方式。 <br />
病毒营销是经由各种交流传递的方式，比如口头传递、新闻发布，将信息迅速扩散开去。第12个推广方法就是病毒营销。最经典的病毒营销方式是邮箱服务商在用户发出去的每一封邮件末尾简短介绍自己的服务。该信息随着邮件发送，迅速传递给新用户，而后者又可能继续传递给其他新用户。注意，病毒营销决不是制造病毒，它实质上是一种免费服务，这种服务只要是有价值的，才会在用户之间自动传播。 <br />
付费广告将更加迅速地推广你的网站。网络广告价格一般有一下三种计算方式：传统CPM方式（每千人次印象成本）、PPC方式（按照点击数目付费）、按照实际购买数量付费，还有会员联盟计费方式等等。 <br />
二十六、在电子邮件新闻邮件中购买短小的文本广告。 <br />
选择目标定位适合自己的邮件列表，在发送给该系列用户的新闻邮件中发布简短的文字广告。与其他网络广告比较，这是非常有效而又成本不高的广告方式。 <br />
二十七、实施会员制营销。 <br />
联盟会员在自己的网站上加入盟主网站的链接，通过该链接进入实现销售后，将给予该会员一定佣金。实施会员制营销需要考虑一下因素：给会员的佣金提成比例、开发适合自己的联盟程序、推广会员联盟以获得更多会员链接你的网站。可以使用一些联盟管理软件。 <br />
二十八、搜索引擎竞价排名。 <br />
在购买点击付费广告，在搜索引擎购买关键词广告，你的广告将出现在许多搜索引擎中某些关键词下的结果页面。由于同一个关键词往往有多个客户购买，则具体排名高低根据出价高低决定。竞价排名根据广告实际点击数目付费，而且目标定位准确，是一种成本低，效果好的广告方式。国内3721、搜虎、新浪、网易、百度都提供有竞价排名服务。 <br />
<br />
 二十九、将商品提交到比较购物网站和拍卖网站。 <br />
易趣网以及各大站推出的商城都可以试一试，另外，利用网上商店平台开展网络营销也是有效的方法之一。到网上搜一下，网站推广研究资料有很多，其中不乏很多有效的推广方法。实际上，虽然电子商务建设和企业网站推广的方法多，但是这些推广的方法总是万便不离其宗的。很多时候，我们不需要那么多的推广策略，需要的仅仅是，做好网站并且将选定的推广方法更深入的执行下去，这样坚持做下去网站就逐步在网上扬名了。在这里，笔者经过学习 <br />
<br />
前人的经验和自己逐步的探索实验，总结出电子商务网站建设推广不可不知的五个关键步骤，供您参考，简述如下。 <br />
<br />
一、定位分析 <br />
<br />
网站剖析：对网站的自身进行解剖分析，目的是寻找到网站的基础问题所在； <br />
电子商务定位：对企业网站进行电子商务定位，明确网站的位置； <br />
电子商务模式分析：分析网站的电子商务模式，研究与网站相匹配的电子商务模式； <br />
行业竞争分析：行业竞争的情况，行业网站的综合分析； <br />
网站发展计划分析：电子商务网站短期规划与长期发展战略的实施反馈分析等。 <br />
<br />
二、网站诊断 <br />
<br />
网站结构诊断：网站的结构是否合理，是否高效，是否方便，是否符合用户访问的习惯； <br />
网站页面诊断：页面代码是否精简，页面是否清晰，页面容量是否合适，页面色彩是否恰当； <br />
文件与文件名诊断：文件格式，文件名等； <br />
访问系统分析：统计系统安装，来路分析，地区分析，访问者分析、关键词分析等； <br />
推广策略诊断：网站推广策略是否有效，是否落后，是否采用复合式推广策略等。 <br />
<br />
三、营销分析 <br />
<br />
关键词分析：关键词是否恰当，关键词密度是否合理等； <br />
搜索引擎登录分析：采用何种登录方式，登录的信息是否有效； <br />
链接相关性分析：链接的人气是否高，是否属于相关性较大的链接； <br />
目标市场分析：对目标市场进行分析，研究目标市场与营销的关系； <br />
产品分析：分析产品的特性，产品的卖点等； <br />
营销页面分析：营销页面设置的位置，营销页面的内容，营销页面的第一感觉等； <br />
营销渠道分析：所采用的营销之渠道如何，新的营销渠道如何开拓； <br />
后续产品和服务分析：后续产品的开发，服务的情况反馈分析； <br />
价格分析：价格如何，合理性等。 <br />
<br />
四、综合优化 <br />
<br />
网站的架构优化：结构优化，电子商务运行环境优化等； <br />
网站页面优化：页面布局，页面设计优化； <br />
导航设计：导航的方便性，导航的文字优化等； <br />
链接整理：对网站的内外链接进行处理； <br />
标签优化设计：对相关标签进行优化设计。 <br />
<br />
五、整合推广 <br />
<br />
网站流量推广策略：关键还是流量问题，这个过程中会用到许多网络营销方法； <br />
外部链接推广：友情链接策略的使用； <br />
病毒式营销策略：具体的策略需要灵活运用； <br />
其它推广：关注网络变化，开发新的推广手段。 <br />
<br />
六.让虚拟世界与现实世界交融 <br />
<br />
在现实生活中让你产品成为消费者与你网站沟通的桥梁。 <br />
网络名称成为产品的名称。 <br />
注册电子ID并写在产品上。 <br />
设计某种活动并通过网络媒体传播。（如网络生存、希望工程） <br />
总之网站推广离不开现实生活。 <br />
<br />
<br />
上述网站推广的五个关键步骤统合了网络营销、电子商务网站建设、网站宣传推广和网站策划等知识，称之为不可不知的关键步骤是不为过的。能够充分理解这五个关键步骤，辅以强有力的执行，再加上持之以恒，那就等着看好吧，你的网站一定会名扬网络啊。
 <img src ="http://www.blogjava.net/relax/aggbug/247828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2008-12-22 21:42 <a href="http://www.blogjava.net/relax/archive/2008/12/22/247828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]怎么改善网站、提高浏览量的方法</title><link>http://www.blogjava.net/relax/archive/2008/12/22/247827.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Mon, 22 Dec 2008 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2008/12/22/247827.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/247827.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2008/12/22/247827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/247827.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/247827.html</trackback:ping><description><![CDATA[实用性/方便浏览 <br />
<br />
设计/开发过程 <br />
<br />
1 . 外观/图片 ： 尽你最大的努力使你的网站看起来美观漂亮，但是不要忘记，这些 外观/图片 要适合你的网站，而且还要考虑到网络速度方面的问题，不是每个人的网络都像你一样快。 <br />
<br />
2 . 从最基础的开始设计 ： 你不需要一开始就用设计软件去做设计，最好的办法就是先用笔在纸上画出大概的排版，你能确认各个元素的位置，美观可以以后再考虑。（可参考 CSS 教材：18 步改变你网站的 css ，使你从初学者成为高级用户 ） <br />
<br />
3 . 对比度/文字大小 ： 确保对比度和文字大小是能够被大多数人接受的，这里没有什么黄金比例或黄金数值，你可以多看看其他人是怎么设置，吸取好的经验。因为你认为完美的别人不一定这么认为。 <br />
<br />
4 . 独特性 ： 从功能上要有自己的独特性，现在有很多网站，如果你没有自己的独特性，要别人记住你是很难的。 <br />
<br />
5 . 测试 ： 在你的网站每次做出重大修改后，都要通过各种方式测试你的网站，越多方式越好。 <br />
<br />
网站内容 <br />
<br />
1 . 内容和空白处 ： 你是不是经常听到这句话：&#8220;我们要填充这个空白处，这样可容纳的文字会多一点&#8221;。记住，不是越多的文字越好，太多的文字会可以阅读者产生不愉快的情绪，就像一家服装店，如果里面堆的满满的衣服，你爱去逛吗? <br />
<br />
2 . 为你的读者写文章 ： 别人是不是能理解你的文章？想想你的读者，改掉一些混乱的句子，使语言通俗易懂。 <br />
<br />
3 . 把你网站的特点明确的写出来 ： 如：我们能提供全球市场的&#8230;&#8230;或我们能为你在世界上任何地方提供&#8230;&#8230; <br />
<br />
4 . 寻找读者的爱好 ： 寻找你文章里最受欢迎的，找出读者的爱好。 <br />
<br />
5 . 把你的目标加入文章中 ： 在写作的内容里加入心理暗示，使读者注意到你想要达到的目标（ 例如想要读者登记 ），尝试去猜测用户的目标是什么 ( 例如看资料 )，在你的内容里加入相应的暗示（ 要找到这些资料只需要简单的注册一下 ）等。 <br />
在你的网站以外 <br />
<br />
1 . 和其它人交流 ： 去论坛，博客和门户网站与人交流，为别人出主意，这可以建立一个良好的形象，每天 10 分钟，会带来意想不到的效果。 <br />
<br />
2 . 学习 ： 多听取意见，无论是同仁、竞争者或潜在客户。 <br />
<br />
3 . &#8220;病毒式&#8221;推广 ： 通过电子邮件通讯的方式把你的网站内容告知你身边的人，注意：只是你认识的人。 <br />
<br />
4 . 做回你自己 ： <br />
<br />
5 . 不要进行真的病毒式推广 ： 这样会破坏你网站的形象。
<img src ="http://www.blogjava.net/relax/aggbug/247827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2008-12-22 21:41 <a href="http://www.blogjava.net/relax/archive/2008/12/22/247827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>忽悠的快乐生活之一―名字的由来(原创)</title><link>http://www.blogjava.net/relax/archive/2008/01/12/174845.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Sat, 12 Jan 2008 09:42:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2008/01/12/174845.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/174845.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2008/01/12/174845.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/174845.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/174845.html</trackback:ping><description><![CDATA[&nbsp;
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">将时间的镜头拉回到</span>2007<span style="font-family: 宋体">年</span>6<span style="font-family: 宋体">月</span>30<span style="font-family: 宋体">日</span><span style="font-family: 宋体">的下午五点三十分。这正是下班时段的人流高峰时期，茫茫人海中有这么四个人，三男一女，他们骑着自行车（三辆普通自行车，一辆电动自行车）在下班的路上就这么悠闲的走着，边走好像还在津津乐道的谈论着什么。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">女士优先，先介绍一下骑着电动自行车的女同胞。她，就是本故事的主人公忽悠同志，&#8220;忽悠&#8221;这个名字追根溯源好像就是从今天开始的。当然，在她嘴里忽悠确是另有其人。到底我们主人公&#8220;忽悠&#8221;这个名字是不是名符其实，还是在名字的前面再加个&#8220;被&#8221;字更贴切，后人自有论断。言归正传，此女身高具初步推算大约在一米六左右，体重吗好像是本文开头提到的那三个家伙随便挑出一个的一半那么重。号称天津河西白领第一瘦，当然也没谁去真正考正过，也许天津白领第一瘦也非她莫数。就这身材</span>T<span style="font-family: 宋体">台是的</span>Model<span style="font-family: 宋体">也许见了都自愧不如，当然这是在不考虑身高的前提下。容貌吗，我说是闭月羞花。可是我这么说你信吗？当然咱这主人公可是某高科技软件合资公司（虽然除了章是蓝的其他都是红的）的大美工，也许我说的闭月羞花是经过她</span>PS<span style="font-family: 宋体">过的。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">其他那三位外篇咱再絮叨，还是先关注一下他们在谈论着什么。只见三人慢慢悠悠的骑着，话题慢慢的转到了忽悠同志的电动车上。&#8220;听说明天好像电动车开始抓没上牌的了。记得前一段看新闻上说的，电动车上牌截止今天，明天好像开始治理了。你这车好像还没上那吧？&#8221;一个家伙率先挑起了这个话题。&#8220;我的好像现在不给上，好像厂家没报，所以公安局不给上。&#8221;忽悠同志道出了没上牌的原因。可随后她听了下面一段话之后就有点心慌了。&#8220;天津取消摩托车中环以内上路你知道吧？你知道去年刚取消之后综合执法是怎么治理的吗？就是开个大车往路边一堵，站路边一排警察，然后过一辆摩托车就截下了，扔到大车上。上次这正好路过看见的，已经装了大半车了，起码好几十辆。不知道今年查没上牌的电动会不会这样？对了好像就在你回家的路上，好像就红旗路附近。你明天上班可小心点吧，别被逮着！&#8221;说话的这人正是忽悠同志后来口中的忽悠同志，好像被这么叫也是说了这段话的原因。听完这些忽悠心想这可怎么办万一明天被逮到可不得了，这车的价钱都快赶上我一个月的工资了，如果被没收了，这个月算是白干了。就这样心事重重的回到了家。忽悠同志可是个心里装不住事的人，还没等吃完饭就把这事告诉了忽悠妈妈。忽悠妈妈一听也慌了神儿，&#8220;得，得。闺女，明天你先忍忍吧，虽然路远点，明天你还是骑自行车去吧！&#8221;可是就在此时也发生了另外一见事。电视里都市报道正在报道这样一条消息：&#8220;今天记者从警方获息，由于我市电动车比较多，还有很多电动车还没有来的及上牌，所以我市公安局通知，集中上牌时间将再延长一个月&#8230;&#8230;&#8221;可是我们的忽悠却没有听到这条消息。第二天早晨，左思又想还是骑着自行车上班去了。刚到了公司，得知了上牌时间延长了也就是骑电动车没事了，心里这个美呀，心想明天又可以悠哉游哉的骑电动车了，可算不用这么累死累活的蹬到公司了。这一天就在对电动车的盼望中过去了。晚上，忙三火四的回到了家里，进门就喊：&#8220;妈，今天听我们同事了，电动车上牌延期，今天我也没看到警察。明天我还骑电动车吧！&#8221;。可得到的却是这样的回答，&#8220;你别忽悠我了，你还是忍忍吧，这礼拜你还是先别骑了！&#8221;忽悠这个灰心丧气啊！心想这到底谁忽悠了谁啊，还是我和我妈都被忽悠了。第二天，还得只能听的妈的灰溜溜的骑了一个礼拜的自行车。</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体">从此，我们忽悠的快乐生活也就算正式开始了。</span></p>
<img src ="http://www.blogjava.net/relax/aggbug/174845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2008-01-12 17:42 <a href="http://www.blogjava.net/relax/archive/2008/01/12/174845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于JNDI的应用程序开发</title><link>http://www.blogjava.net/relax/archive/2005/03/11/1955.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Fri, 11 Mar 2005 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2005/03/11/1955.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/1955.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2005/03/11/1955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/1955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/1955.html</trackback:ping><description><![CDATA[　JNDI(The&nbsp;Java&nbsp;Naming&nbsp;and&nbsp;Directory&nbsp;Interface，Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来，使得我们可以用名称访问对象。目录服务是一种命名服务，在这种服务里，对象不但有名称，还有属性。&nbsp; <BR><BR>　　命名或目录服务使你可以集中存储共有信息，这一点在网络应用中是重要的，因为这使得这样的应用更协调、更容易管理。例如，可以将打印机设置存储在目录服务中，以便被与打印机有关的应用使用。&nbsp; <BR><BR>　　本文用代码示例的方式给出了一个快速教程，使你可以开始使用JNDI。它：&nbsp; <BR><BR>　　1、提供了JNDI概述 <BR><BR>　　2、描述了JNDI的特点 <BR><BR>　　3、体验了一下用JNDI开发应用 <BR><BR>　　4、表明了如何利用JNDI访问LDAP服务器，例如，Sun&nbsp;ONE&nbsp;目录服务器 <BR><BR>　　5、表明了如何利用JNDI访问J2EE服务 <BR><BR>　　6、提供了示例代码，你可以将其改编为自己的应用&nbsp; <BR><BR>　　JNDI概述&nbsp; <BR><BR>　　我们大家每天都不知不觉地使用了命名服务。例如，当你在web浏览器输入URL,http://java.sun.com时，DNS(Domain&nbsp;Name&nbsp;System,域名系统)将这个符号URL名转换成通讯标识（IP地址）。命名系统中的对象可以是DNS记录中的名称、应用服务器中的EJB组件(Enterprise&nbsp;JavaBeans&nbsp;Component)、LDAP(Lightweight&nbsp;Directory&nbsp;Access&nbsp;Protocol)中的用户Profile。&nbsp; <BR><BR>　　目录服务是命名服务的自然扩展。两者之间的关键差别是目录服务中对象可以有属性（例如，用户有email地址），而命名服务中对象没有属性。因此，在目录服务中，你可以根据属性搜索对象。JNDI允许你访问文件系统中的文件，定位远程RMI注册的对象，访问象LDAP这样的目录服务，定位网络上的EJB组件。&nbsp; <BR><BR>　　对于象LDAP&nbsp;客户端、应用launcher、类浏览器、网络管理实用程序，甚至地址薄这样的应用来说，JNDI是一个很好的选择。&nbsp; <BR><BR>　　JNDI架构&nbsp; <BR><BR>　　JNDI架构提供了一组标准的独立于命名系统的API,这些API构建在与命名系统有关的驱动之上。这一层有助于将应用与实际数据源分离，因此不管应用访问的是LDAP、RMI、DNS、还是其他的目录服务。换句话说，JNDI独立于目录服务的具体实现，只要你有目录的服务提供接口（或驱动），你就可以使用目录。如图1所示。&nbsp;图1：JNDI架构&nbsp; <BR><BR>　　关于JNDI要注意的重要一点是，它提供了应用编程接口(application&nbsp;programming&nbsp;interface,API)和服务提供者接口(service&nbsp;provider&nbsp;interface,SPI)。这一点的真正含义是，要让你的应用与命名服务或目录服务交互，必须有这个服务的JNDI服务提供者，这正是JNDI&nbsp;SPI发挥作用的地方。服务提供者基本上是一组类，这些类为各种具体的命名和目录服务实现了JNDI接口—很象JDBC驱动为各种具体的数据库系统实现了JDBC接口一样。作为一个应用开发者，你不必操心JNDI&nbsp;SPI。你只需要确认你要使用的每一个命名或目录服务都有服务提供者。&nbsp; <BR><BR>　　J2SE和JNDI&nbsp; <BR><BR>　　Java&nbsp;2&nbsp;SDK&nbsp;1.3及以上的版本包含了JNDI。对于JDK&nbsp;1.1和1.2也有一个标准的扩展。Java&nbsp;2&nbsp;SDK&nbsp;1.4.x的最新版本包括了几个增强和下面的命名/目录服务提供者：&nbsp; <BR><BR>　　1、LDAP(Lightweight&nbsp;Directory&nbsp;Access&nbsp;Protocol)服务提供者 <BR><BR>　　2、CORBA&nbsp;COS（Common&nbsp;Object&nbsp;Request&nbsp;Broker&nbsp;Architecture&nbsp;Common&nbsp;Object&nbsp;Services）命名服务提供者 <BR><BR>　　3、RMI(Java&nbsp;Remote&nbsp;Method&nbsp;Invocation)注册服务提供者&nbsp;l&nbsp;DNS(Domain&nbsp;Name&nbsp;System)服务提供者&nbsp; <BR><BR>　　更多的服务提供者&nbsp; <BR><BR>　　可以在如下网址找到可以下载的服务提供者列表：http://java.sun.com/products/jndi/serviceproviders.html&nbsp;特别有意思的或许是如下网址提供的Windows&nbsp;注册表JNDI服务提供者：http://cogentlogic.com/cocoon/CogentLogicCorporation/JNDI.xml&nbsp;这个服务提供者使你可以访问Windows&nbsp;XP/2000/NT/Me/9x的windows注册表。也可以在如下网址下载JNDI/LDAP&nbsp;Booster&nbsp;Pack：http://java.sun.com/products/jndi/&nbsp;这个Booster&nbsp;Pack包含了对流行的LDAP控制的支持和扩展。它代替了与LDAP&nbsp;1.2.1服务提供者捆绑在一起的booster&nbsp;pack。关于控制和扩展的更多信息可以在如下网站看到：&nbsp;http://java.sun.com/products/jndi/tutorial/ldap/ext/index.html&nbsp;另一个有趣的服务提供者是Sun的支持DSML&nbsp;v2.0(Directory&nbsp;Service&nbsp;Markup&nbsp;Language,目录服务标记语言)的服务提供者。DSML的目的是在目录服务和XML之间架起一座桥梁。&nbsp; <BR><BR>　　JNDI&nbsp;API&nbsp; <BR><BR>　　JNDI&nbsp;API由5个包组成：&nbsp; <BR><BR>　　1、Javax.naming：包含了访问命名服务的类和接口。例如，它定义了Context接口，这是命名服务执行查询的入口。&nbsp; <BR><BR>　　2、Javax.naming.directory：对命名包的扩充，提供了访问目录服务的类和接口。例如，它为属性增加了新的类，提供了表示目录上下文的DirContext接口，定义了检查和更新目录对象的属性的方法。 <BR><BR>　　3、Javax.naming.event：提供了对访问命名和目录服务时的时间通知的支持。例如，定义了NamingEvent类，这个类用来表示命名/目录服务产生的事件，定义了侦听NamingEvents的NamingListener接口。 <BR><BR>　　4、Javax.naming.ldap：这个包提供了对LDAP&nbsp;版本3扩充的操作和控制的支持，通用包javax.naming.directory没有包含这些操作和控制。&nbsp; <BR><BR>　　5、Javax.naming.spi：这个包提供了一个方法，通过javax.naming和有关包动态增加对访问命名和目录服务的支持。这个包是为有兴趣创建服务提供者的开发者提供的。&nbsp; <BR><BR>　　JNDI&nbsp;上下文&nbsp; <BR><BR>　　正如在前面提到的，命名服务将名称和对象联系起来。这种联系称之为绑定(binding)。一组这样的绑定称之为上下文（context）,上下文提供了解析（即返回对象的查找操作）。其他操作包括：名称的绑定和取消绑定，列出绑定的名称。注意到一个上下文对象的名称可以绑定到有同样的命名约定的另一个上下文对象。这称之为子上下文。例如，如果UNIX中目录/home是一个上下文，那么相对于这个目录的子目录就是子上下文—例如，/home/guests中guests就是home的子上下文。在JNDI中，上下文用接口javax.naming.Context表示，这个接口是与命名服务交互的关键接口。在Context(或稍后讨论的&nbsp; <BR><BR>　　DirContext)接口中的每一个命名方法都有两种重载形式：&nbsp; <BR><BR>　　1、Lookup(String&nbsp;name)：接受串名&nbsp; <BR><BR>　　2、Lookup(javax.naming.Name)：接受结构名，例如，CompositeName(跨越了多个命名系统的名称)或CompondName(单个命名系统中的名称)；它们都实现了Name接口。Compound&nbsp;name的一个例子是：cn=mydir,cn=Q&nbsp;Mahmoud,ou=People,composite&nbsp;name的一个例子是：cn=mydir,cn=Q&nbsp;Mahmoud,ou=People/myfiles/max.txt(这里，myfiles/max.txt是表示第二部分的文件名)&nbsp;Javax.naming.InitialContext是实现了Context接口的类。用这个类作为命名服务的入口。为了创建InitialContext对象，构造器以java.util.Hashtable或者是其子类（例如，Properties）的形式设置一组属性。下面给出了一个例子：&nbsp; <BR><BR>Hashtable&nbsp;env&nbsp;=&nbsp;new&nbsp;Hashtable();&nbsp;//&nbsp;select&nbsp;a&nbsp;service&nbsp;provider&nbsp;factory&nbsp;env.put(Context.INITIAL_CONTEXT_FACTORY,&nbsp;"com.sun.jndi.fscontext.RefFSContext");&nbsp;//&nbsp;create&nbsp;the&nbsp;initial&nbsp;context&nbsp;Context&nbsp;contxt&nbsp;=&nbsp;new&nbsp;InitialContext(env);&nbsp; <BR><BR>　　INITIAL_CONTEXT_FACTORY指定了JNDI服务提供者中工厂类（factory&nbsp;class）的名称。Factory负责为其服务创建适当的InitialContext对象。在上面的代码片断中，为文件系统服务提供者指定了工厂类。表1给出了所支持的服务提供者的工厂类。要注意的是文件系统服务提供者的工厂类需要从Sun公司单独下载，J2SE&nbsp;1.4.x没有包含这些类。&nbsp; <BR><BR>　　表1：上下文INITIAL_CONTEXT_FACTORY的值 <BR><BR>Name&nbsp;Service&nbsp;Provider&nbsp;Factory&nbsp;File&nbsp;System&nbsp;com.sun.jndi.fscontext.RefFSContextFactory&nbsp;LDAP&nbsp;com.sun.jndi.ldap.LdapCtxFactory&nbsp;RMI&nbsp;com.sun.jndi.rmi.registry.RegistryContextFactory&nbsp;CORBA&nbsp;com.sun.jndi.cosnaming.CNCtxFactory&nbsp;DNS&nbsp;com.sun.jndi.dns.DnsContextFactory&nbsp; <BR><BR>　　为了用名称从命名服务或目录中取得或解析对象，使用Context的lookup方法：Object&nbsp;obj=contxt.lookup(name)。Lookup方法返回一个对象，这个对象表示的是你想要找的上下文的儿子。&nbsp; 
<P><EM><FONT size=2>在保留http://www.javajia.com原出处的情况下，欢迎转载!</FONT></EM></P><img src ="http://www.blogjava.net/relax/aggbug/1955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2005-03-11 17:34 <a href="http://www.blogjava.net/relax/archive/2005/03/11/1955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse Plugins </title><link>http://www.blogjava.net/relax/archive/2005/03/08/1824.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Tue, 08 Mar 2005 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2005/03/08/1824.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/1824.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2005/03/08/1824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/1824.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/1824.html</trackback:ping><description><![CDATA[<P><STRONG>插件列表网站<BR></STRONG>http://www.eclipse-plugins.info/eclipse/index.jsp&nbsp;Eclipse&nbsp;插件专门网站，有插件分类，top&nbsp;rated统计，以及用户反馈信息。&nbsp;可以让你快速地找到最好的插件了。&nbsp; 
<P>推荐插件 
<P><A href="http://sourceforge.net/projects/struts/" target=_blank>Eclipse&nbsp;插件集成</A><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;在&nbsp;Struts&nbsp;Applications&nbsp;子项目下，有人整理了这个东东。即它把&nbsp;eclipse&nbsp;常用的开源工具打包了，不需要自己再麻烦去安装整理了。真棒的工作。&nbsp; 
<P><A href="http://eclipse-tools.sourceforge.net/index.html" target=_blank>Eclipse-tools</A><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;sf.net&nbsp;的一个旨在开发&nbsp;eclipse&nbsp;插件的项目。&nbsp;有几个小巧实用的工具了。&nbsp;虽小，但看起来的确实用。比如，你想看看某个类或者方法的实现，一般是&nbsp;ctrl&nbsp;＋&nbsp;左键&nbsp;，点击即打开这个类或者方法。&nbsp;但如果是接口时，只是到达接口而已，不能解决问题。我实际应用过程中就遇到这个问题。&nbsp;没有想到就有真的做了这个插件。 
<P><BR>J2EE<BR><A href="http://forge.objectweb.org/projects/lomboz" target=_blank>Lomboz</A><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;开源&nbsp;J2EE&nbsp;开发中用得最火的插件，关键是更新速度很快，基本上&nbsp;eclipse&nbsp;IDE&nbsp;有新版本，几天之内他就可以&nbsp;release&nbsp;版本。新版本功能也改进不少，现在也可以直接在&nbsp;JSP&nbsp;中显示标签的提示了，甚至语法错误提示。（我一直用这个）&nbsp; 
<P>随着eclipse的发展，现在的LOMBOZ插件越来越大了。但是速度成了主要的问题。和Myeclipse、IBM的Eclipse&nbsp;Web&nbsp;Tools&nbsp;Platform相比，LOMBOZ的技术有点落后了。Myeclipse是把整个项目的JSP先编译了，而IBM也是第一次把所有的JSP加入索引。虽然每次打开的时候，也慢一些，但是并不随着工程的变大，而出现速度成反比的现象。现在用lomboz&nbsp;打开一个大的项目中的JSP文件的话，一般人已经受不了它的速度了。&nbsp; 
<P><A href="http://www.eclipse.org/webtools/initial-contribution/IBM/Getting%20Started.html" target=_blank>Eclipse&nbsp;Web&nbsp;Tools&nbsp;Platform</A><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;IBM为eclipse贡献的好东东！&nbsp;这个绝对是一个重量级的J2EE的插件，很多论坛上都有它的介绍，在此也不多说了。只说几个与众不同的地方，它是一个唯一打开JSP，能解释里面的JAVA，HTML，CSS，JS，TLD的编辑器，也是唯一能支持JAVA里的CTRL+鼠标单击打开相应类，鼠标停住显示JAVADOC的编辑器。IBM的东西确实不同凡响，就是体积大了些，不但用到EMF，而且还用GEF，XSD等项目，至于里面的XML可视化编辑，WEB&nbsp;SERVICE.....偶也用不着，幸好也有这样一位大侠Lonsen（在此表示感谢）爱好和偶一样，把这个插件减肥了。<BR><A href="http://www.matrix.org.cn/forum_view.asp?forum_id=25&amp;view_id=11972" target=_blank>Eclipse&nbsp;Web&nbsp;Tools&nbsp;Platform减肥记</A><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;这样改过之后，这个插件又FREE！又强大，速度比LOMBOZ快，首先推荐！ 
<P><A href="http://www.myeclipseide.com/" target=_blank>MyEclipse</A><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>开始有注册机出现&nbsp;虽然是个死要钱的东东，不过功能确实是不赖啊，尤其让我无法放手的就是那个自动发布功能，随手保存，随时发布。这个发布可不是&nbsp;ant&nbsp;的那种整站发布，而是针对某些类或是&nbsp;jsp&nbsp;进行发布，虽说只是一个简单的&nbsp;copy，可确实方便了很多。<BR>里面使用的ＸＭＬ编辑器，XML&nbsp;MEN也可以说是一个精品的插件，但是在当前的XML插件满天飞的情况而言，优点也不多了。不过，那个&nbsp;struts&nbsp;支持倒是使用了这个功能，它不但把&nbsp;easyStruts&nbsp;集成进来，而且还加入了图形（流程）化struts-config.xml的功能，还支持除错的功能，这个功能虽然不稳定，但是必竟支持这个功能的插件也仅此一位呀。&nbsp;<BR>如果除其不稳定因素外，这个STRUTS插件已经是最好用的插件之一了，不但保持了，xslt这个目录的模版文件的支持，preferences.ini这个配置文件可以修改生成文件的目录，这些easySTRUTS原有的优点以外，而且在稳定性上也有了明显的改善！<B>只是这个插件唯一让你受不了的就是，它必须使用它自身带的GEF插件包</B>，而且你还不能安装比它新的GEF的插件！！！这意味着如果你的其它插件，想使用GEF的话，能利用它的版本的，就用它的版本，不然，就意味着你永远不能使用其它使用GEF的插件！！！5555555555痛苦ing&nbsp; 
<P>Struts 
<P><A href="http://www.jamesholmes.com/struts/console/" target=_blank>Struts&nbsp;Console</A><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>最老牌的&nbsp;Struts&nbsp;插件了，支持的平台很多。同时支持eclipse2.1和3.0!!!而且一直在维护更新。我还是认为它是最好用的&nbsp;Struts&nbsp;插件。新版本也支持&nbsp;Eclipse&nbsp;IDE&nbsp;的最新版本。其实对于&nbsp;Struts&nbsp;关键是完善地支持配置文件地图形化就够了，其他关系不大。这个东东对Struts配置文件支持得很完善。另外他也可以相对独立地作为一个程序运行，我现在是这种方式在用它。&nbsp; 
<P>不得不提的easy&nbsp;STRUTS&nbsp;几乎所有的网站说到STRUTS插件的时候都会提到它，它的功能也的确不赖呀。FORM的模板的支持，生成目录..等配置文件的支持。真的可以说是STRUTS的一个非常成功的插件。只是网友在使用中，发现竟然有把Struts-config.xml文件信息丢失的现象，这个插件可以说一下子从天堂走向了...但是，好在myeclipse把它集成了，修正了一些BUG。但与此也带来一些新的BUG！:(&nbsp;软件是不是总是这样？？不过，随着FILE&nbsp;Model插件的强大，easy&nbsp;struts吸引人的地方越来越少了，甚至于它的模板不是基于velocity的,也成为它必须要重构的一个因素了。&nbsp; </P>
<P><BR>代码辅助 </P>
<P><A href="http://jalopy.sourceforge.net/" target=_blank>JALOPY</A><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;有几篇综合介绍文章，请参考：<BR><A href="http://www.matrix.org.cn/subjects/Wiki.jsp?page=EclipseDocs" target=_blank>Eclipse介绍文章页</A><BR>&nbsp; 
<P>Jalopy功能确实不错，也是我在使用eclipse2系列时必备之一，不过在eclipse3里面，格式化有了长足的进步，个人认为功能已经不弱于Jalopy了&nbsp;——郁也风&nbsp; 
<P><A href="http://beust.com/doclipse/" target=_blank>Doclipse&nbsp;-&nbsp;A&nbsp;JavaDoc&nbsp;Tag&nbsp;Plug-in&nbsp;for&nbsp;Eclipse</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;Doclipse&nbsp;is&nbsp;an&nbsp;Eclipse&nbsp;plug-in&nbsp;to&nbsp;help&nbsp;you&nbsp;write&nbsp;Java&nbsp;source&nbsp;files&nbsp;with&nbsp;Javadoc&nbsp;tags,&nbsp;either&nbsp;for&nbsp;documentation&nbsp;purposes&nbsp;or&nbsp;to&nbsp;be&nbsp;processed&nbsp;by&nbsp;a&nbsp;tool&nbsp;such&nbsp;as&nbsp;EJBGen&nbsp;or&nbsp;XDoclet.&nbsp;New&nbsp;tags&nbsp;can&nbsp;be&nbsp;added&nbsp;to&nbsp;the&nbsp;plug-in&nbsp;by&nbsp;writing&nbsp;XML&nbsp;files&nbsp;defining&nbsp;the&nbsp;new&nbsp;tags&nbsp;and&nbsp;their&nbsp;attributes.&nbsp; 
<P><BR>XML 
<P><A href="http://www.xmlbuddy.com/" target=_blank>XML&nbsp;Buddy</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;<U>标准版免费</U><BR><A href="http://www.matrix.org.cn/subjects/Edit.jsp?page=%E6%A0%87%E5%87%86%E7%89%88%E5%85%8D%E8%B4%B9" target=_blank>?</A><BR>&nbsp;排名最高的&nbsp;XML&nbsp;插件，比较好用。标准版免费开放，专业版需要付费。&nbsp; 
<P><BR>Hibernate 
<P><A href="http://hibernator.sourceforge.net/" target=_blank>Hibernator</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;&lt;开源&gt;&nbsp;<BR><A href="http://forum.javaeye.com/download/jlinux/" target=_blank>Tanghan</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;&lt;开源&gt;&nbsp;国人开发的一个&nbsp;Hibernte&nbsp;辅助开发工具。很好用。主要功能是从数据库表中自动建立&nbsp;hbm&nbsp;文件。也可以从POJO创建hbm文件,但是默认ID的类型是hilo.long,&nbsp;从这个hbm&nbsp;产生数据库schema的时候会出错。&nbsp; 
<P><A href="http://www.binamics.com/hibernatesynch" target=_blank>Hibernate&nbsp;Synchronizer</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;&lt;开源&gt;&nbsp;Hibernate&nbsp;Synchronizer可以保证hbm和java文件的同步。&nbsp; 
<P><A href="http://www.exadel.com/products_ORMstudio.htm" target=_blank>Exadel&nbsp;ORM&nbsp;Studio&nbsp;Hibernate&nbsp;Edition</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;<BR><A href="http://www.exadel.com/images/pages/orm/orm.gif" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.exadel.com/images/pages/orm/orm.gif" width=467 onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp; 
<P><BR>GUI&nbsp;相关 
<P><A href="http://www.cloudgarden.com/jigloo/" target=_blank>Jigloo&nbsp;SWT/Swing&nbsp;GUI&nbsp;Builder</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;&lt;有免费版本&gt;&nbsp; 
<P><BR>其它&nbsp;Util&nbsp;插件 
<P><A href="http://log4e.jayefem.de/index.php/Main_Page" target=_blank>Log4E</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;&lt;开源&gt;&nbsp;帮助你在代码里使用&nbsp;log4j&nbsp;写&nbsp;log&nbsp; 
<P><A href="http://commons4e.berlios.de/" target=_blank>Commons4e</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;&lt;开源&gt;&nbsp;<BR><A href="http://andrei.gmxhome.de/anyedit/index.html" target=_blank>AnyEdit</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;&lt;开源&gt;&nbsp;对&nbsp;eclipse&nbsp;edit&nbsp;做些功能补充&nbsp; 
<P><A href="http://www.visual-paradigm.com/sdeec.php" target=_blank>Visual&nbsp;Paradigm&nbsp;SDE&nbsp;for&nbsp;Eclipse</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;&lt;有免费版本&gt;&nbsp;<BR><A href="http://www.binamics.com/mavenworkshop/" target=_blank>Maven&nbsp;Workshop</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;&lt;免费&gt;&nbsp; 
<P>＃<BR><A href="http://mevenide.codehaus.org/" target=_blank>meven</A><BR><A href="http://www.matrix.org.cn/subjects/images/out.png" target=_blank><IMG alt=按此在新窗口浏览图片 src="http://www.matrix.org.cn/subjects/images/out.png" onload="javascript:if(this.width>screen.width-333)this.width=screen.width-333" border=0 galleryImg="no"></A><BR>&nbsp;免费，另一个极好的maven环境&nbsp; </P><img src ="http://www.blogjava.net/relax/aggbug/1824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2005-03-08 13:27 <a href="http://www.blogjava.net/relax/archive/2005/03/08/1824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>论程序设计方法 </title><link>http://www.blogjava.net/relax/archive/2005/02/01/892.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Tue, 01 Feb 2005 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2005/02/01/892.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/892.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2005/02/01/892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/892.html</trackback:ping><description><![CDATA[<STRONG>一、计算机硬件环境对软件设计方法的限制<BR><BR></STRONG>　　计算机的发明到现在已经60年了，计算机程序设计方法也伴随着计算机硬件技术的提高而不断发展。硬件环境对软件设计既有严重的制约作用，也有积极的推动作用。<BR><BR>　　在我的大学母校（此处删除6个字），数学系的一些老师，有幸成为了我国第一代的计算机DIY一族。呵呵，不要以为是组装PC机呦，他们组装的可是小型机。一人多高铁皮柜大小的主机，加上纸带机（后期改进为读卡机），组装好后，除了供学校自己的科研使用外，还在全国各地销售了十几台。当时（七十年代）一台的售价是10几万元人民币，如果换算到今天，相当于价值大约为100多万元，非常高档的小型计算机了。下面大家猜猜，这么高档的计算机，它的内存是多少那？（都把嘴闭好了，我要公布答案了）—— 4K。<BR><BR>　　一块50公分见方的内存板，<BR><BR>　　插入到主机箱中，好了------ 1K；<BR>　　再插一块内存板，好了------ 2K；<BR>　　再插一块内存板，好了------ 3K；<BR>　　再插一块内存板，好了------ 4K；<BR>　　再......不行了，插不起了，太贵了！这就是当时的环境。这样的环境下，用什么写程序那？当然只有机器码了。先用汇编写，然后翻阅手册手工改写为机器码，然后打卡或穿纸带，输入运行。可以想象，在当时的条件下，什么叫好的程序那？什么叫优秀的程序那？—— 技巧！<BR><BR>　　程序设计的最初始阶段，是讲究技巧的年代。如何能节省一个字节，如何能提高程序运行的效率，这些都是要严肃考虑的问题。而所谓的程序的易读性，程序的可维护性根本不在考虑范围之内。 <BR><BR>　　今天，35岁以上的学习过计算机的朋友可能都使用过一种个人计算机——APPLE-II（中国也生产过这种计算机的类似产品“中华学习机”）。主频1M，内存48K（扩展后，最多可达到64K）。我就是使用这样的计算机长大的 :)。当年，类似的个人计算机产品，还有PC1500，Layser310等。这种计算机上已经固化了 BASIC 语言，当然只是为学习使用。要想开发出真正的商业程序，则必须使用汇编，否则的话，程序就比蜗牛还要慢了。于是，程序设计中对于技巧的运用，是至关重要的了。<BR><BR>　　题外话1：<BR><BR>　　比尔盖茨是 BASIC 的忠实拥护和推动者。当年，他在没有调式环境的状况下，用汇编语言写出了一款仅有 4K 大小的 BASIC 解释器，且一次通过。确实另人佩服。（不象现在微软出品的程序，动辄几十兆。）这也许就是比尔对 BASIC 情有独忠的原因，每当微软推出（临摹）一个新技术，则他会立刻在 BASIC 中提供支持。<BR><BR>　　题外话2：<BR><BR>　　在 APPLE-II 上有一款游戏软件“警察抓小偷”，当年熬夜玩游戏，乐趣无穷。后来这款游戏被移植到了PC上，咳~~~根本没有办法玩，因为小偷还没跑就被警察抓到了。硬件的速度提升，另我无法再回味以前的时光了。<BR><BR>　　<B>二、结构化程序设计</B><BR><BR>　　随着计算机的价格不断下降，硬件环境不断改善，运行速度不断提升。程序越写越大，功能越来越强，讲究技巧的程序设计方法已经不能适应需求了。记得是哪本书上讲过，一个软件的开发成本是由：程序设计 30% 和程序维护 70% 构成。这是书上给出的一个理论值，但实际上，从我十几年的工作经验中，我得到的体会是：程序设计占 10%，而维护要占 90%。也许我说的还是太保守了，维护的成本还应该再提高。下面这个程序，提供了两种设计方案，大家看看哪个更好一些那？<BR><BR>　　题目：对一个数组中的100个元素，从小到大排序并显示输出。(BASIC)<BR><BR>　　方法1：冒泡法排序，同时输出。 <BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>FOR I=1 TO 100<BR>　FOR J=I+1 TO 100<BR>　　IF A[I] &gt; A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T<BR>　NEXT J<BR>　? A[I]<BR>NEXT I</TD></TR></TBODY></TABLE><BR>　　方法2：冒泡法排序，然后再输出。<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>FOR I=1 TO 100<BR>FOR J=I+1 TO 100<BR>IF A[I] &gt; A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T<BR>NEXT<BR>NEXT<BR><BR>FOR I=1 TO 100<BR>? A[I]<BR>NEXT </TD></TR></TBODY></TABLE><BR>　　显然，“方法1”比“方法2”的效率要高，运行的更快。但是，从现在的程序设计角度来看，“方法2”更高级。原因很简单：（1）功能模块分割清晰——易读；（2）也是最重要的——易维护。程序在设计阶段的时候，就要考虑以后的维护问题。比如现在是实现了在屏幕上的输出，也许将来某一天，你要修改程序，输出到打印机上、输出到绘图仪上；也许将来某一天，你学习了一个新的高级的排序方法，由“冒泡法”改进为“快速排序”、“堆排序”。那么在“方法2”的基础上进行修改，是不是就更简单了，更容易了？！这种把功能模块分离的程序设计方法，就叫“结构化程序设计”。<BR><BR><SPAN class=f14>　　<B>三、对程序设计中技巧使用的思考</B><BR><BR>　　我可以肯定，大家在开始学习程序设计的时候，一定都做过这样一个题目：求100以内的素数。老师在黑板上，眉飞色舞地写出了第一个程序：（C程序）<BR><BR>　　方法1：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>for(i=1; i&lt;100; i++)<BR>{<BR>　for(j=2; j&lt; i; j++)<BR>　　if(i%j == 0) break;<BR>　　if(j &gt;= i) printf("%d,", i);<BR>} </TD></TR></TBODY></TABLE><BR>　　然后，老师开始批判这个程序“这个叫什么呀？太慢了！因为我们都知道大偶数不可能是素数了，因此，要排除掉！” 于是，意尤未尽地写出了第二个程序：<BR><BR>　　方法2：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>printf("2,");<BR>for(i=3; i&lt;100; i+=2)<BR>{<BR>　for(j=2; j&lt; i; j++)<BR>　　if(i%j == 0) break;<BR>　　if(j &gt;= i) printf("%d,", i);<BR>} </TD></TR></TBODY></TABLE><BR>　　老师说：“看！我们只改动了一点点，程序运行的速度就提高了一倍多”。然后运用诱导式教学法继续提问“程序的效率，还能再提高吗？能！”，得意地写出第三个程序： <BR><BR>　　方法3：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>printf("2,");<BR>for(i=3; i&lt;100; i+=2) ''不考虑大偶数<BR>{<BR>　for(j=3; j&lt; i/2; j+=2) ''不考虑用偶数去测试，而且只验算到一半就足够了<BR>　　if(i%j == 0) break;<BR>　　if(j &gt;= i) printf("%d,", i);<BR>}</TD></TR></TBODY></TABLE><BR>　　“大家看，我们又只改动了一点点，运行速度又提高了一倍多。可以了吗？不可以！我们还能再提高”。于是又高傲地写出了第四个程序：<BR><BR>　　方法4：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>printf("2,");<BR>for(i=3; i&lt;100; i+=2)<BR>{<BR>　int k = sqrt(i);<BR>　for(j=3; j&lt;= k; j+=2)<BR>　　if(i%j == 0) break;<BR>　　if(j &gt;= k ) printf("%d", i);<BR>} </TD></TR></TBODY></TABLE><BR>　　然后，开始证明为什么我们判断素数的时候，只需要验算到平方根就足够了：<BR><BR>　　假设p是合数，那么令:p=a*b。反正法：由于我们已经判断了p的平方根以内的整数都不能被p整除，于是 a&gt;SQRT(p)。基于同样的理由 b&gt;SQRT(p)。于是 p = a * b &gt; SQRT(p) * SQRT(p) = p 得出矛盾， 命题得正。<BR><BR>　　的确，“方法4”的确比“方法1”的运行速度要提高了好几倍，甚至好几十倍。但我们仔细分析测试看看。<BR><BR>　　（1）“程序4”到底比“程序1”快了多少那？我在某台计算机上进行测试（P4，1.5G)得到的速度对比表：<BR><BR>
<TABLE cellSpacing=0 cellPadding=0 width="90%" align=center border=1>
<TBODY>
<TR>
<TD>计算范围</TD>
<TD>100</TD>
<TD>1000</TD>
<TD>10000</TD>
<TD>100000</TD></TR>
<TR>
<TD>速度差</TD>
<TD>0.00秒</TD>
<TD>0.01秒 </TD>
<TD>0.18秒</TD>
<TD>15秒 </TD></TR></TBODY></TABLE>　　<BR>　　（2） 在10万以上，才会看出一些差别。而这种差别根本就不够底偿程序设计阶段的付出。如果计算的范围再大，那么不管是“方法1”，还是“方法4”都不是好的算法。（计算素数的另外一个比较优秀的算法叫“漏筛法”）<BR><BR>　　（3）写出“方法1”，只要具有小学四年级的数学水平就够了，而“方法4”则需要初中三年级的水平并且还要具备一些“数论”的知识。<BR><BR>　　（4）从维护性看，如果你写的程序需要另外一个程序员来维护，或者若干时间以后，你重新来阅读这段程序，那么就会对这个程序产生很多疑问：这个求平方根是干什么用的？其实，就这个题目来说，使用到“方法3”就已经足够了。<BR><BR>　　总结发言：<BR><BR>　　I. 计算机的价格每年下降一半，而运算速度每年提高一倍”，因此我们应该把速度提高的任务交给硬件实现。 <BR><BR>　　II. 从易读性、维护性出发，程序员只负责按定义给出软件实现。算法的问题是数学家解决的。 <BR><BR>　　题外话：<BR><BR>　　多年以来，人们一直在寻找动态图象(影视)的存储和回放的算法，但效果都不理想。直到有人发现，原来在200多年前的数学家早就帮我们解决了这个问题——傅立叶（Fourier）级数展开。因此我要说，优秀的算法不是我们程序员要考虑的问题，我们的任务只要按照数学家给出的算法翻译为计算机程序语言而已。（这句话恐怕要遭到大多数程序员抛出的板砖袭击）再比如，计算一元多次方程解的问题。我们使用的就是牛顿的迭代算法。不要怪我瞧不起你，你能发明这个方法的话，那就是当代的牛顿了。<BR><BR>　　<B>四、程序的易读性与书写方法</B><BR><BR>　　程序是否容易阅读和维护，与怎么书写有很大的关系。说实在的，C语言中为了方便程序员书写，允许使用++,--,&lt;&lt;,&amp;&amp;，？......这些运算符号。但很多人经常乱用，以为自己写的程序多么简洁，效率多高。其实，当你分行书写的话则更加容易阅读和维护，效率也不会降低，因为编译程序早就帮你优化为最快捷的代码了。先看一个简单的例子：<BR><BR>　　计算一个整数乘 255(C语言)<BR><BR>　　方法1：a *= 255;<BR><BR>　　方法2：因为移位运算比乘法运算要快很多倍，因此a*255的运算书写为：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>a =(a&lt;&lt;8)-a; //a*255 = a*256 - a = (a&lt;&lt;8) - a</TD></TR></TBODY></TABLE><BR>　　方法1的书写非常简单，直截了当，显然更容易维护。而方法2的书写运用了移位的技巧，不容易阅读，但效率最高。是不是真的是这样那？把这两个程序编译为汇编代码看看。原来无论是方法1还是方法2，它们的汇编代码都是一样的：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>mov ecx, eax<BR>shl eax, 8<BR>sub eax, ecx</TD></TR></TBODY></TABLE><BR>　　也就是说，你认为非常技巧的书写方法，其实编译器的优化功能早就帮你想到了。那么方法2的方式就很值得批判了。下面是几个有关C语言书写方面的重要原则：<BR>　<BR>　　1）尽量表达愿义，多加注释； <BR><BR>　　2）变量名称和函数名称，要使用有意义的符号，并且遵守“匈牙利命名法”； <BR><BR>　　3）不要为俭省内存，使一个变量在一个模块中表达多个含义。<BR><BR>　　4）在某个模块中，前半部分用i表示计数器，由于后半部分不再使用计数器了，于是又用i来保存某个中间的结果。等你维护这段程序的时候，保证你肯定会犯傻的。 <BR><BR>　　5）在使用条件表达式的时候，不要混合书写运算表达式；<BR><BR>　　经常有人在书写for循环的时候，使用这样的方式： for(int a=1,s=0; a&lt;=100 &amp;&amp; (s+=a); a++); <BR><BR>　　天呀，这样写是不会提高程序运行效率的，尤其是当运算表达式复杂的时候，就更不容易阅读了，还是把运算写到for的循环体中吧。 <BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>int s = 0;<BR>for(int a=1; a&lt;=100; a++)<BR>　s += a; //计算1+2+...+100 这不很好吗?! </TD></TR></TBODY></TABLE><BR>　　再比如，if(a=b)这个写法在语法上是允许的，但不要使用。要使用也要if(0!=(a=b))这样的方式。 还有值得一提的是慎用“,”（逗号运算符）。 <BR><BR>　　不要连续使用++,--,&lt;&lt;，*，&amp; .....这样的运算符号。<BR><BR>　　a = b++-(--c&lt;&lt;1+e&amp;0x0f&gt;&gt;1); //这个人有病。出这个题目考试的老师，也有病。 <BR><BR>　　常量要写在条件表达式的左边；<BR><BR>　　if(5 == a) 这是正确的写法，这样书写可以避免勿输入而导致的 if(a=5)这样的错误。 <BR><BR>　　避免程序中{ }的嵌套层次太深；<BR><BR>　　最多4层。如果必须大于4层，那么写成调用子函数或宏的方式。 <BR><BR>　　尽量多地使用断言；<BR><BR>　　当你在书写程序的过程中，凭你的智慧，你一定是知道：程序运行到我正书写的这行代码的时候某个变量一定是某个值。好啦，那么不要忧郁，马上加上一句代码：ASSERT(nnn == xxx);。将来在调式维护这段代码的时候，你会得到无限美妙的回报。 <BR><BR>　　书写需要“成对匹配”使用的代码的时候，在写使用代码之前，就先把结束写出来；<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>file.Open(...); //当要打开文件的时候 char *lp=new char [100]; //当要申请内存的时候<BR>...... //先不要写这段代码 ...... //先不要写这段代码<BR>file.Close(); //马上写关闭 delete [] lp; //马上写释放<BR><BR>xxx.Loack(); //当某个对象需要锁定的时候 for(....)<BR>...... //先不要写这段代码 { //写大括号的时候<BR>xxx.Unlock(); //马上写解锁 } //马上写大括号结束 </TD></TR></TBODY></TABLE><BR>　　和这个道理相同，在C++的类中，如果需要申请内存，那么先在构造函数中给出 lp=NULL;然后马上在析构函数中书写 if(lp) delete []lp; <BR><BR>　　可以适当地使用goto；<BR><BR>　　在结构化程序设计中，goto 是被排斥的。但是，如果适当地使用 goto 不但不影响斜率，而且还能提高程序的可读性。 <BR><BR>　　题目：合并2个文件到一个新文件中。（不要挑我的毛病呀~~~~~，我使用的是类C的方式书写的。）<BR><BR>　　方法1： <BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>FILE *f1,*f2,*f3;<BR>if(Open(f1)成功)<BR>{<BR>　if(Open(f2)成功)<BR>　{<BR>　　if(Open(f3)成功)<BR>　　{<BR>　　　...... //这里是真正干活的地方<BR>　　　Close(f1);<BR>　　　Close(f2);<BR>　　　Close(f3);<BR>　　}<BR>　　else //f3不成功<BR>　　{<BR>　　　Close(f1);<BR>　　　Close(f2);<BR>　　　......<BR>　　}<BR>　}<BR>　else //f2不成功<BR>　{<BR>　　Close(f1);<BR>　　......<BR>　}<BR>}<BR>else //f1不成功<BR>{<BR>　......<BR>} <BR>==========================================================</TD></TR></TBODY></TABLE><BR>　　方法2：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>FILE *f1=NULL,*f2=NULL,*f3=NULL;<BR>if(Open(f1)不成功) goto err;<BR>if(Open(f2)不成功) goto err;<BR>if(Open(f3)不成功) goto err;<BR>...... //这里是真正干活的地方<BR>err:<BR>if(f3) Close(f3);<BR>if(f2) Close(f2);<BR>if(f1) Close(f1);</TD></TR></TBODY></TABLE><BR>　　方法1是最最标准的结构化设计，好吗？不好！尤其是当{ }的层次比较深的时候，估计你寻找真正干活的代码的地方都找不到。而使用方法2的程序，不但程序容易读，而且没有{ } 的深度。在C++中，又提供了异常try/catch的设计结构，而异常的结构则比 goto 的结构更好、更完善了。<BR><SPAN class=f14>　　<B>五、面向对象的程序设计</B><BR><BR>　　随着程序的设计的复杂性增加，结构化程序设计方法又不够用了。不够用的根本原因是“代码重用”的时候不方便。面向对象的方法诞生了，它通过继承来实现比较完善的代码重用功能。很多学生在应聘工作，面试的时候，常被问及一个问题“你来谈谈什么是面向对象的程序设计”，学生无言，回来问我，这个问题应该怎么回答。我告诉他，你只要说一句话就够了“面向对象程序设计是对数据的封装；范式（模板）的程序设计是对算法的封装。”后来再有学生遇到了这个问题，只简单的一句对答，对方就对这个学生就刮目相看了（学生后来自豪地告诉我的）。为什么那？因为只有经过彻底的体会和实践才能提炼出这个精华。<BR><BR>　　面向对象的设计方法和思想，其实早在70年代初就已经被提出来了。其目的就是：强制程序必须通过函数的方式来操纵数据。这样实现了数据的封装，就避免了以前设计方法中的，任何代码都可以随便操作数据而因起的BUG，而查找修改这个BUG是非常困难的。那么你可以说，即使我不使用面向对象，当我想访问某个数据的时候，我就通过调用函数访问不就可以了吗？是的，的确可以，但并不是强制的。人都有惰性，当我想对 i 加1的时候，干吗非要调用函数呀？算了，直接i++多省事呀。呵呵，正式由于这个懒惰，当程序出BUG的时候，可就不好捉啦。而面向对象是强制性的，从编译阶段就解决了你懒惰的问题。<BR><BR>　　巧合的是，面向对象的思想，其实和我们的日常生活中处理问题是吻合的。举例来说，我打算丢掉一个茶杯，怎么扔那？太简单了，拿起茶杯，走到垃圾桶，扔！注意分析这个过程，我们是先选一个“对象”------茶杯，然后向这个对象施加一个动作——扔。每个对象所能施加在它上面的动作是有一定限制的：茶杯，可以被扔，可以被砸，可以用来喝水，可以敲它发出声音......；一张纸，可以被写字，可以撕，可以烧......。也就是说，一旦确定了一个对象，则方法也就跟着确定了。我们的日常生活就是如此。但是，大家回想一下我们程序设计和对计算机的操作，却不是这样的。拿DOS的操作来说，我要删除一个文件，方法是在DOS提示符下：c:&gt; del 文件名&lt;回车&gt;。注意看这个过程，动作在前（del），对象在后(文件名),和面向对象的方法正好顺序相反。那么只是一个顺序的问题，会带来什么影响那？呵呵，大家一定看到过这个现象：File not found. “啊~~~，我错了，我错了，文件名敲错了一个字母”，于是重新输入：c:&gt; del 文件名2&lt;回车&gt;。不幸又发生了，计算机报告：File read only. 哈哈，痛苦吧:)。所以DOS的操作其实是违反我们日常生活中的习惯的（当然，以前谁也没有提出过异议），而现在由于使用了面向对象的设计，那么这些问题，就在编译的时候解决了，而不是在运行的时候。obj.fun()，对于这条语句，无论是对象，还是函数，如果你输入有问题，那么都会在编译的时候报告出来，方便你修改，而不是在执行的时候出错，害的你到处去捉虫子。<BR><BR>　　同时，面向对象又能解决代码重用的问题——继承。我以前写了一个“狗”的类，属性有（变量）：有毛、4条腿、有翘着的尾巴（耷拉着尾巴的那是狼）、鼻子很灵敏、喜欢吃肉骨头......方法有（函数）：能跑、能闻、汪汪叫......如果它去抓耗子，人家叫它“多管闲事”。好了，狗这个类写好了。但在我实际的生活中，我家养的这条狗和我以前写的这个“狗类”非常相似，只有一点点的不同，就是我的这条狗，它是：卷毛而且长长的，鼻子小，嘴小......。于是，我派生一个新的类型，叫“哈巴狗类”在“狗类”的基础上，加上新的特性。好了，程序写完了，并且是重用了以前的正确的代码——这就是面向对象程序设计的好处。我的成功只是站在了巨人的肩膀上。当然，如果你使用VC的话，重用最多的代码就是MFC的类库。<BR><BR>　　<B>六、组件（COM）程序设计</B><BR><BR>　　有了面向对象程序设计方法，就彻底解决了代码重用的问题了吗？答案是：否！硬件越来越快，越来越小了，软件的规模却也越来越大了，集体合作越来越重要，代码重用又出现的新的问题。 我用C++写的类，不能被BASIC重用——不能夸语言；你要干什么，想重用我的代码？不行，这样你就看见了我的设计思想——只能在源程序级别重用，不能在二进制级别（可执行代码及）重用。<BR><BR>　　我耗尽毕生的精力，写了一个包罗万象的类库，但没有人用。因为他们说：你这个太大了，我的程序只有1K，你却给我一个 10000MB 的库——MFC 的尴尬。<BR><BR>　　太好了，我终于找到了程序中的一个BUG，已经修改完成，而且是只改动了一个字节。接下来我要重新向我的用户分发新的版本，我的用户有......10万个——升级的非鲁棒性，不是我分发累死了，就是用户重新安装累死了。（鲁棒：robust。意为强壮性的，平顺的，顺滑的.....鬼知道是哪个不懂计算机的人翻译的这个词汇。） <BR><BR>　　我想写一个集大成的软件，这个软件的功能是我中有你，你中有我。既能实现文字编辑，又能实现电子表格计算，又能实现自动翻译，还能画图，还能实现数据库检索，还可以看电影.....只要用了我的这个软件，想要什么就有什么，我要强占整个软件的市场------OLE实现的重用功能，只要学会了COM，这些都不是问题了。<BR><BR>　　用户甲要求我的软件窗口上下分割，用户乙要求我的软件窗口左右分割......我需要在我的软件基础上，派生出100个类型，可怎么办呀？将来怎么维护呀？------在脚本的支持下，实现同一程序的的灵活配置而重用，问题迎刃而解了。<BR><BR>　　我是个老板，你知道我有多痛苦吗？我手下的员工向我提出加工资的要求，我不得不答应呀。因为如果这个员工跳槽了，他的代码要维护起来有多难！！！——现在好啦，我要求员工统统用组件写模块，想加工资？门都没有，威胁我要走？那你走吧，这个月的工资也不发了。反正用组件写的代码，我可以很容易地进行包容和聚合实现维护。（老板的福音，程序员的悲哀）。<BR><BR>　　还有好多那，现在想不起来了...... <BR><BR>　　COM程序设计方法，就是解决以上问题的一个方式。有很多朋友觉得COM非常复杂难懂，不想学习了。你一定学习过程序设计的最基本的方法（非结构化设计：汇编、gwBasic......）,然后，你又学习了结构化程序设计（C、Pascal......）,然后，你又努力学习并熟练掌握了面向对象的程序设计方法（C++、Delphi、Java......）,那么不要怕，要有信心去学习组件程序设计，它只是一个设计方法和思想，并且是目前较高级的方法，如果不掌握，就太可惜了。<BR><BR>　　学习了结构化程序设计，你就会“藐视”那些不遵守结构化设计思想而写出的代码；<BR><BR>　　学习了面向对象设计，你就会“嘲笑”那些为找BUG而晕头转向的程序员； <BR><BR>　　同样，学习了组件程序设计，你就会站在更高的层次看待程序设计。<BR><BR>　　<B>七、结束语</B><BR><BR>　　写程序的目的是什么？养家糊口、兴趣使然、我的事业......这些都对。但我要强调的是：写程序的目的是为了修改程序。在这个观点上，那么写注释、写文档、选择语言、选择结构......都是为这个服务的。本文从软件设计方法的进化角度来反复阐述这个观点，希望爱好者能有所体会和思考。<BR><BR>　　文中所讨论的技术和观点，适合于大多数情况下的程序设计，而对于特殊的应用的（驱动开发，嵌入式开发，网络通讯，实时视频......），这些领域中，由于硬件环境的限制和极限效率的要求，有些观点就不合适了，需要具体情况具体分析。另外就是对于程序设计的初学者，可以先不考虑这么多问题，以掌握基本技巧方法和思想为要。 <BR></SPAN></SPAN><img src ="http://www.blogjava.net/relax/aggbug/892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2005-02-01 12:53 <a href="http://www.blogjava.net/relax/archive/2005/02/01/892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转贴]一封电脑程序员的发烧情书 V1.0 </title><link>http://www.blogjava.net/relax/archive/2005/01/26/734.html</link><dc:creator>轻松</dc:creator><author>轻松</author><pubDate>Wed, 26 Jan 2005 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/relax/archive/2005/01/26/734.html</guid><wfw:comment>http://www.blogjava.net/relax/comments/734.html</wfw:comment><comments>http://www.blogjava.net/relax/archive/2005/01/26/734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/relax/comments/commentRss/734.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/relax/services/trackbacks/734.html</trackback:ping><description><![CDATA[<P>我所仰慕已久的佩慈小姐：&nbsp; </P>
<P>&nbsp; 　　你在我生命中的出现是一个美丽的 event，自从第一次见面后，你的身影就像CIH一样在我脑海中迅速蔓延，直至占领我的每一个可思维的脑细胞。一想到你，我这颗奔腾之心的主频便从66MHz免跳线直超133MHz，然后我就高烧不止，工作变得极不稳定，散热功率尚不足1瓦的我，只怕距系统崩溃不远矣。于是，我毅然打开机箱，向你展现这颗火热的心，希望你能明白我对你的一片真情。&nbsp;&nbsp;&nbsp; </P>
<P>&nbsp; 　先说说我眼中的你吧。&nbsp;&nbsp; </P>
<P>&nbsp; 　　1.你有着全中国最好听的名字——佩慈，其拼音缩写为PC； <BR>&nbsp; 　　2.你美丽的容颜使得Apple公司的iMac小姐也无地自容； <BR>&nbsp; 　　3.你身材优美，是标准的BABY AT型； <BR>&nbsp; 　　4.你有着一对分辨率达1600×1200的大眼睛，透过你的心灵视窗，我看到你的内涵有32bit那么丰富； <BR>&nbsp; 　　5.你说话时，信噪比达90dB以上，声音之动听犹如天籁一般，曾经凭EAX一举成名的Creative公司播音小姐 SB Live!都不能与你的3D音效相媲美； <BR>&nbsp; 　　6.你心地善良，经常把自己的资源与别人共享，还常给别人提供即时帮助；<BR>&nbsp; 　　7.你迷人的微笑使你具有友好的 GUI界面，一见到你，我的眼皮刷新率就从85Hz陡降至0Hz……&nbsp;&nbsp;&nbsp; </P>
<P>&nbsp; 　　你的优点不胜枚举，以致于我不敢使用while （条目=优点）do{println 条目；条目＋＋；}语句，怕陷入无限循环中去，而谨使用以上几个println语句，列出了我对你最为欣赏的几点。&nbsp;&nbsp;&nbsp; </P>
<P>&nbsp; 　　当然，要能得到佩慈小姐的青睐，我的配置也得达到一定的档次。为了加深你对我的了解，我提供了Readme.txt文件：&nbsp;&nbsp; </P>
<P>&nbsp; 　　“我叫刘刚，我名字的缩写为LG，是世界名牌。我的编号是770611，超频能力强于 SL2W8，与你非常匹配。我相貌英俊，不敢说貌似潘安也敢说貌比盖茨。我的身材是前卫的ATX型。我聪明好学，大脑内存有 256M，但常常还要用到虚拟内存。我知识渊博，纵然全部压缩成“我的知识.ACE”也有 10.1GB。我工作努力，我的任务栏上通常开着十几个窗口。我消息灵通，与外界有着128Kbps的连接速率。我的兼容性好，对逛街能够兼容，（如果是逛电脑城，则百分之百兼容。）”&nbsp;&nbsp;&nbsp; </P>
<P>&nbsp; 　　我用情之专，好像单任务操作系统之DOS，纯洁无瑕；我爱你之深，犹如Internet上的bit流，滔滔不绝；我念你之切，就似14.4K的老猫拉XteamLinux，心急如焚。如果你是CPU，我愿做Waterfall；如果你是硬盘，我愿做Scandisk；如果你是文件夹，我愿做Folder Guard。我对你的真情是经得起考验的，对我进行alpha测试、beta1测试、beta2测试、beta3测试，你将发现我对你的感情像Unix那样稳定；对我进行Benchmark，你将发现我的得分比Voodoo3还要高。所以，选择性能优越的我成为你的PLUS!98吧!&nbsp;&nbsp; </P>
<P>&nbsp; 　　在这封信的最后，喜爱喝Java咖啡的我将使用你的replyLove方法，期盼它返回一个true值。 <BR>&nbsp; 　　System.out.println(Pc.replyLove(loveletter 电脑迷的发烧情书；boolean love))； <BR>&nbsp; 　　当然，我们也可以通过E－mail、PCICQ、主页留言簿来交流。 <BR>&nbsp; 　　</P>
<P>痴恋你的LG<BR></P><img src ="http://www.blogjava.net/relax/aggbug/734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/relax/" target="_blank">轻松</a> 2005-01-26 17:11 <a href="http://www.blogjava.net/relax/archive/2005/01/26/734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>