Archive for the '技术(Tech)' Category

wtk3的模拟器不支持相机模拟

用来Java_ME_platform_SDK_3.0中自带的几个模拟器居然发现无法模拟相机,而这个是在wtk2.5里一个很寻常的功能.为什么同样的一个东西升级之后变得更差呢???
最郁闷的是wtk2.5的模拟器在win7中无法打开.win7提示无法兼容配色方案.郁闷!!

jdepend分析研究

jdepend使用起来还是比较容易的,但是report分析,以及背后的一些事情还是要弄明白的.否则report就真的成了只是report而没有任何实际价值.

使用jdepend的目的
分析包的依赖情况是否满足面向对象的依赖原则.其实面向对象,设计模式变出那么多花样最后无非就是要解决依赖的问题.但很多情况下,我们用了技巧却忘了为什么用,最后便的为了技巧而技巧,为了设计而设计,而忽略了最终目的.
也许这种感觉只有在深刻的体会过"混乱"之后才能理解吧.

如何分析jdepend的report

Abstractness - 抽象度,该包中抽象类所占的比例

Afferent coupling(Ca) - 被依赖度,有的翻译成传入耦合.我觉得传入耦合不是很清楚,很容易让人理解反了.指依赖该包的其他包的总数. 这个值越高说明他应该要么是公用包,要么是抽象(接口)包
Efferent coupling(Ce) - 依从度,有的翻译是传出耦合.指该包依赖于其他包的个数.通常越高表明依赖其他包越严重,如果这个包不是实现包,并不意味着ce就越大越好.依从度应该在一个合理的范围.同时依从的包应该是stable的.

Instability(I) - 不稳定性.公式 ce/(ce+ca).即依从度在所有依赖中的比例.还比较好理解,如果是完全抽象包(ca=N,ce=0),I=0,如果是完全具体实现包(ca=0,ce=N),I=1.

Distance - 指该包和理想情况的最大差距.这个有点绕.举个例子,如果一个包的A=1,也就是完全抽象的.那么他的I应该是=0的,但如果不是(也即是他还要依赖其他更抽象的包).那么distance=Instability-0(理想值).而如果一个包的A=0,即该包完全是实现,那么他的I应该是1,那么distance = 1(理想值)-Instability
而如果0<A<1,那么就不知道他的I的理想值是什么了.这个时候理想值应该是A,distance=|A+I-1|.

参考资料1

s60模拟器在mtj(eclipseME)中启动报错问题解决

MTJ(eclipseme)中使用s60的模拟器时,启动会报错:
Jar file could not be initialized.(invalid entry compressed size)

解决方法:
1.在[Run]->[Run Configuration]中MIDlet页的Executable选择JAD URL,填入相应jad文件的路径,如:D:\workspaces\MoFire.jad

2.Emulation页中的,Extra Emulator Parameters中填入:
-Xdescriptor:D:/workspaces/MoFire.jad

出处:
http://discussion.forum.nokia.com/forum/showthread.php?t=117158

写好MRD的10种技巧[转]

转自:http://bbs.bianews.com/thread-69395-1-1.html

        MRD-“市场需求文档”,是产品经理或者产品市场经理编写的一个产品的说明需求的文档。这些文档用于计划一个新产品或修正一个已有的产品,是被工 程师团队开发产品时使用。         在硅谷的一些软件公司,MRD仅仅覆盖high-level的功能。在这种情况下,产品经理通过创建了另一个文档-通常指的是PRD(产品需求文档)来 定义更加详细的产品需求。
        在本文中,我用术语“MRD”泛指所有那些由产品管理和/或产品市场团队创建的,为工程师团队传达产品需求为目的的文档。
       写好MRD的10种技巧
1、从用户角度的编写
        从用户角度编写需求内容。使用“用例(Use Case)”和“用户角色(User Personas)”来达到这个。考虑用以下两种方法来详细说明你们公司正在开发的SFA(sales force automation)软件的“Login”的功能性。
       方法A:
       用户通过一个要求用户提供证书的登陆界面,然后软件允许用户带着特定的权限进入系统。软件鉴别这些证书,在鉴定通过的基础上允许用户访问那些他们有权限访问软件的功能部件。
       方法B:
        Mike是一个销售经理,Cathy是一个销售代表。当他们打开软件,他们看到登陆界面。他们通过用户名和密码进入系统。如果用户名和密码是正确 的,他们能登进系统。一旦登陆进系统,Mike能访问软件所有的功能部件。Cathy只能访问那些对销售代表有有效的功能部件。
        哪个方法更加容易阅读和理解?就我的看法,毫无疑问,"方法B"。还有,它同时减少了令人烦恼的阅读!
2、使用Screen Shots

        使用Screen Shots或者mockup来你的想法。我们中很多人都听说过“一张图片好比一千个文字”。当提到写MRD的时候,一个screen shot好比一千个文字!
        举个例子,看看下面这个screen shot,你需要多少字来描述?我想可能不只一千个字。
3、用简单的语言编写
        在我超过11年的行业中,我通常注意到的(更多是令我懊恼)一件事是用很做作的语言来写的MRD。我想这个主要是因为MRD听起来是正式的和专业的原因吧。
        相反,想象你写的MRD是写给你的在工程师团队工作的朋友。你的目标是帮助他理解你需要什么,以便于他能开发产品实现这些需要。这个将有助于你避开陷入那些令读者人厌烦(有时他们会把MRD撕碎然后再碎片喂给碎纸机)的用做作的语言的陷阱。
        还有:
        a)保持简短的语句,把长的语句分解成多个小的语句。
        b)避免大篇幅的连续文本,把他们分解成多个小的章节。
        c)把大块文本内容分解成,screen shots,表格、重点列表等等。
4、小心的使用模板

        我发现MRD模板非常有用。他们的几个好处包括:
        a) 模板提供了一个标准的格式,使那些不得不阅读大量MRD的读者更加容易阅读。
        b) 模板让新的产品经理快速的写MRD变得容易,因为公司与公司之间的MRD内容是不同的。
        c) 模板确保你不会忘记所有需要在MRD中覆盖描述的部分;
        然而,一些公司过分的使用模板。一个硅谷最大的公司之一有一个所有部分被强制使用的近60页的模板。我觉得这个让人觉得非常难以忍受并且有几个负面的作用:
        a) 产品经理害怕但又不得不写MRD - 几乎和不得不和Dick Cheney去南德克萨斯打猎一样(译者按:美国副总统Dick Cheney在南德克萨斯打猎时意外的打伤了和自己一起去的打猎伙伴)。
        b) 工程师团队害怕但又不得不阅读MRD。
        c) 写MRD和读MRD都需要花大量的时间。
        我推荐你使用MRD模板,但确保他们不要过分的长。还有如果需要,确信产品经理可以灵活的跳过模板某些部分和创建新的内容。
5、区分需求的优先级
        在这些年里,我从来没有碰到一个工程师团队实现了MRD里包括的所有特性的没有删减的项目-通常由于那些我们控制之外因素!
        这就是说作为MRD作者的产品经理,当出现需要决定取舍的时候,应该提供一个办帮助让他们决定那些特性要实现那些可以推迟。
        区分需求的优先级是一个最好的能帮助完成这个事情的办法。我发现把需求分等级就像P1,P2,P3...这样工作的刚刚好。在这个分类中-P1是最高优先级,P2是第二高优先级等等。
        最好的决定一个已经明确的需求的优先级方法这个需求实现后的好处-包括你的客户和你的公司。在实际实践中,最好是和其他多种因素一起综合决定。
        我推荐你只要包括P1,P2,P3的需求在你的MRD中,在多数的项目中更低的优先级可能未必会实现。还有这样也让MRD变得更加容易读。
6、说明"是什么"和"为什么",但不要"如何"
       产品经理为理解客户的需求负责,然后基于这些理解定义什么和为什么需要开发.
有一件比任何事情让开发者发疯就像在几英里外都能听到的汽笛在他们耳边尖叫一样的是一个令人痛苦的详细描述了怎样实现每一个需求细节的MRD。
       考虑你们公司正在开发的以下两种描述CRM“Login”功能的方法。
       推荐-描述“是什么”
       Mike是一个销售经理,当他打开我们的CRM软件,他会看到一个登陆界面...登陆界面建议提供“记住我”复选框。如果Mike在点击登陆按钮之前选择了该复选框,我们的软件将记住并且在他下次来到登陆界面时自动填写他的名字。
       不推荐-描述“怎么样”
       Mike是一个销售经理,当他打开我们的CRM软件,他会看到一个登陆界面...登陆界面建议提供“记住我”复选框。如果Mike在点击登陆按钮之前选择 了该复选框-将通过Javascript 保存他的名字以cookie的方式写到他的硬盘。当cookie写到硬盘后,用户名和密码将被发送到服务器。下一次Mike来到登陆界面 时,Javascript 将读取他的cookie,成功读取后,Javascript 将是适当的DOM命令填充登陆页面上的用户名。好的产品经理擅长理解用户的需求和描述什么需要实现,好的工程师擅长决定怎么样实现它。好的工程师希望能自 由的决定怎么样最好的实现用户希望得到的东西。
       我注意到有技术背景的产品经理尤其喜欢描述“如何实现”。如果这些描述的就是你,应该从现在开始不要再做这样的事了。工程师们将会感谢你。
       附:这里有一些例外的情况-当在描述“是什么”中描述“怎么样”是必要的,当描述“是什么”的最好的方式和/或唯一的方式就是描述“怎么样”的情况。
7、覆盖非功能性需求
      尽管功能性需求描述产品的功能,非功能性需求描述系统特性,如:
       a)性能
       b)可伸缩性
       c)可用性
       d)国际化
       e)等等...
       我注意到因为许多产品经理和产品市场人员认为这些是“技术细节”,而在MRD中被忽略。我发现这些是我的MRD中非常重要的一部分,工程师们会非常感激在MRD中定义这些需求。
       要点:当写非功能性需求的时候,尽可能的是使他们可度量(可测试)。否则,QA不能测试它们,你将没有办法知道完成的产品是否已经实现了这些非功能性需求。

8、评审&修正
       我有一个朋友-我们叫他Matt(他的真名叫Steve)。Matt在硅谷一家成功的公司做产品经理工作。最近我在午餐的时候碰到他是告诉我一个非常有趣的故事。
       他们雇用了一个有三年经验的产品经理。在他被雇用的几个月里,不知何故他让他的产品经理同事和工程师一样疏远他。
       他是罪犯?他基本上认为他的MRD就像一个法令。他写了它,但不想和任何人评审或在反馈的基础上修改它。他仅仅想工程师团队没有问任何问题的拿着它并实现它们!
       不要像Matt的同事那样。确信做到和你的产品经理伙伴和工程师团队评审你的MRD。保持一个敞开的思想然后在评审反馈的基础上更新MRD。这将帮助你写出更好的MRD,工程师将喜欢你(或者至少少恨你一些),你的团队也将创造更好的产品。
9、定义市场目标和定位
       大部分我看到过MRD在覆盖了市场目标(谁将买和使用户你的产品)和定位(与竞争对手的产品比你的产品定位怎么样的)的方面做的很好。
       我还看到过一些没有描述市场目标和定位的MRD,他们通常会这样争辩:“为什么工程师们需要知道这些?拿到定义了什么是需要的还不够吗?”
       这些问题(谁将买和使用户你的产品和与竞争对手的产品比你的产品定位怎么样的)的确有一些正面价值,我发现许多工程师想知道为什么一个产品或特性要开发,谁将使用他们,什么是他们可以另外选择办法。
       这些信息帮助他们和产品组的其他成员想象最终用户并从而更好的为创造成功的产品工作。我的建议的尽可能的(在MRD中)包含这些信息。- 它们不一定要很详细,只要包含几个段落就足够了。
10、包含一个术语表
       如果你的MRD使用了新术语或在非通用的地方是使用了常用术语-确保在MRD后面包含一个术语表。
       当你像这样说“我们的软件将提供SME用户通过选择WAP或PSMS开MRC帐单”时,术语表将确保你的所有读者(有些可能不是技术人员)理解你的意思是什么。

互联网产品经理必备文档介绍(转)

转自 http://bbs.bianews.com/thread-69395-1-1.html

BRD
  Business Requirements Document,商业需求文档。这是产品声明周期中最早的问的文档,再早就应该是脑中的构思了,其内容涉及市场分析,销售策略,盈利预测等,通常是和老大们过的ppt,所以也就比较短小精炼,没有产品细节。

  商业需求文档重点放在定义项目的商业需求。BRD要能说出客户碰到的一个或多个商业问题,并且通过公司的产品能够解决这些问题。接着建议一个方案 —— 通常是新产品或者现有产品的改进来解决这些问题。BRD也可能包括一个高级的商业案例,例如收益预测,市场竞争分析和销售/营销策略。BRD通常是由拥有 产品经理,产品营销经理或者行业分析师头衔的人撰写的。在小公司,可能由高级主管或者甚至创始人撰写。BRD通常是一份连续的1-3页Word文档,或者 不超过10页的Powerpoint文档。
MRD
  Market Requirements Document,市场需求文档。获得老大的认同后,产品进入实施,需要先出MRD,具体来说要有更细致的市场与竞争对手分析,通过哪些功能来实现商业目 的,功能/非功能需求分哪几块,功能的优先级等等。实际工作中,这个阶段PD可能的产出物有Mind Manager的思维图,Excel的Feature List等。
  市场需求文档(MRD)重点放在为一个被提议的新产品或者现有产品的改进定义市场需求。与BRD指出商业问题和解决这些问题的解决方案不同,MRD更深入提议解决方案的细节。它包括一些或者所有这些细节:
            a. 解决商业问题所需要的特色
            b. 市场竞争分析
            c. 功能和非功能需求
            d. 特色/需求的优先级
            e. 用例
  MRD通常是由拥有产品经理,产品营销经理或者行业分析师头衔的人撰写的。MRD通常是一份连续的5-25页Word文档,或者正如之后描述那样在一些机构中甚至更长。
PRD
  Product Requirements Document,产品需求文档。进步一细化,这部分是PD写得最多的内容,也就是传统意义上的需求分析,我们这里主要指UC(use case)文档。主要内容有,功能使用的具体描述(每个UC一般有用例简述、行为者、前置条件、后置条件、UI描述、流程/子流程/分支流程,等几大 块),Visio做的功能点业务流程,界面的说明,demo等。Demo方面,可能用dreamweaver、ps甚至画图板简单画一下,有时候也会有 UI/UE支持,出高保真的demo,开发将来可以直接用的那种。
  产品需求文档(PRD)重点放在为一个被提议的新产品或者现有产品的改进定义市场需求。与MRD侧重于从市场需要角度看需求的不同,PRD侧重于从产 品本身角度看待需求。通常在特点和功能需求上更深入细节,并也可能包括屏幕截图和用户界面流程。在那些MRD不包括具体需求和用例的机构中,PRD就包含 这些具体内容。PRD通常是由拥有产品经理,行业分析师或者产品分析师头衔的人撰写的。PRD通常是一份连续的20-50页Word文档,或者针对复杂产 品甚至更长。
  提醒:一些机构将这里描述的MRD和PRD合并成一个文档,并称最后的文档为MRD。在这种情况下,MRD包括本段描述的内容,也包括上一段描述PRD的内容,并且可能超过50页。
FSD
  Functional Specifications Document,功能详细说明。有一点像“概要设计”,这步就开始往开发衔接了,产品UI、业务逻辑的细节都要确定,细化文档并保持更新。相应的,有很多内容,比如表结构设计,要由项目经理来编写了。
  功能规格文档(FSD)把焦点集中在实现,定义产品功能需求的全部细节。FSD可能通过一张张的截屏和一条条功能点来定义产品规格。这是一份可以直接 让工程师创建产品的文档。与MRD和PRD侧重于以市场需要和产品角度看需求不同,FSD把重点放在了以表格形式定义产品细节,再让工程师实现这些细节。 FSD也可能包括完整的屏幕截图和UI设计细节。FSD通常是由拥有产品分析师,工程领导或者项目经理头衔的人撰写的 – 作者通常属于工程部门。通常一个连续几十页的Word或类似文档。

giftTag

基于GAE的一个很棒的wishlist应用 - gifttag,通过一个firefox插件获取浏览网页中的图片,并直接发送到服务器上,之后可以共享。
要是可以结合类似捐款(集资)的功能就更好了。

移动支付on the way

“移动(mobile)”是互联网应用的未来,形形色色的web2.0和mashup怎样在移动平台上大展拳脚呢?
上面这句话一行隐含了“本地客户端”似乎已经不再重要了 - 比如基于javame或者symbian,或者只需要一个比较笨的客户端容器。当然基于web的话mobile浏览器应该算是一个客户端容器 - 前提是如果应用是一个兼容移动平台的RIA(Flex)。
拿支付来说,传统支付平台其实本身并没有多少复杂的应用场景,只是如何组合从而催生出各种各样应用,而且这个领域目前是一片红海。支付平台最主要要解决的是安全问题,毕竟是关乎到老百姓的血汗钱。目前移动支付领域,我所了解的是支付宝,手付通,国外的有Billing Revolution,paypal和amazon也有类似的解决方案,大多都无非是客户端,短信,蓝牙热点,wap几种,结合市场推广。一直在想如果一定要用手机支付的话,应用场景在哪里?在家有台式机,出差有笔记本,也许唯有在路上时候才需要,或者是在排队买电影票时候?如果在这种场合下而且支付过程足够简单安全,并且还有一定的优惠那就是最合适的场景了。但是还有哪些呢:
- 和老婆逛街的时候,通过热点登录附近的书店,预览,购买
- 还是逛街时候,商家通过热点发出折扣信息,透过优惠券下载,完成支付过程
- 路过电影院,想去看电影的时候
-候机时候
。。。
客户端还是一个主要问题,如何整合到易用,简单也是一个很重要的问题。

mindmap2ppt[todo]

如果有一个可以直接从mindmap生成ppt的工具多好啊!
研究一下freemind的mindmap生成格式,看看是不是可行。

spring事务配置总结

这里总结一下吧,否则像我这种记性差的人,下次遇到类似的问题还要重新做一遍。
背景:使用toplink jpa,存在外部webservice调用 - 内外事务"混搭"的情况
目标:将事务定义为方法级别(每个service方法都是独立一个事务,并提交),外部调用不置入事务
方法:
1.spring 事务aop配置
--要点:配置propagation为require_new,同时隔离级别设置为READ_COMMITTED - 只可读提交,不可脏读;ABCService中的所有方法配置为非事务 - propagation为NEVER(这样在执行时会报IllegalStateTransaction异常,并不会影响),或者这里外部调用也是用requirenew。;
<tx:advice id="txAdvice" transaction-manager="entityTransactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="save*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="create*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="confirm*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="redirect*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="receive*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="delete*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="update*(..)" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
<tx:advice id="noTxAdvice" transaction-manager="entityTransactionManager">
<tx:attributes>
<tx:method name="*" propagation="NEVER" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor
pointcut="execution(* com.modofo.domain.service..*.*(..))"
advice-ref="txAdvice"  />
<aop:advisor
pointcut="execution(* com.modofo.domain.service..ABCService*.*(..))"
advice-ref="noTxAdvice"  />
</aop:config>

2.调用时在controller中控制内外事务的异常处理,并做相应的补偿操作。会使controller(调用端)变的复杂。但也没有想到更好的方法。

潜在问题:
1.读提交(read_committed)

常用正则表达式

正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字

匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用

匹配特定数字:
^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$   //匹配负整数
^-?[1-9]\d*$   //匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正

匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
评注:最基本也是最常用的一些表达式

原载地址:http://lifesinger.3322.org/myblog/?p=185