07 2008 档案
摘要:怀胎十八个月的SpringSide 3.0 终于低调的发布了。这个版本里的SpringSide,终于放弃梦想,不再奢望做一个框架,或者一个像RoR/Gails那样极简的、创新的封装,只剩对如何用不轻也不重的主流选型、编程实践来开发JavaEE企业应用的老老实实的总结。如果说Sun 的代码规范规定了大家在代码中如何命名变量,怎么编写注释的话,SpringSide就是对JavaEE企业应用开发的建议。当然,SpringSide 3.0 还同步了这一年半里Java社区的技术升级:JAX-WS 2.0/CXF,Struts2,Spring 2.5,Acegi 2.0 …… 也全面引入了Maven作为项
阅读全文
摘要:当语法分析一个脚本完成时,那么就会把整个脚本的分析结果保存起来,在第二人生里把脚本的结果保存到那里呢?现在就来分析这个问题,先来看看语法分析的文件里,有如下的代码:#001 case 3:#002 #line 277 "indra.y"#003 {#004 (yyval.script) = new LLScriptScript(NULL, (yyvsp[(1) - (1)].state));#005 gAllocationManager->addAllocation((yyval.script));#006 gScriptp = (yyval.script);#007
阅读全文
摘要:在脚本里有很多语句组成的,那么对于语句又是怎么进行语法分析的呢?下面就来分析for语句的分析过程,它的声明代码如下:#001 class LLScriptFor : public LLScriptStatement#002 {#003 public:构造函数,输入保存的值。#004 LLScriptFor(S32 line, S32 col, LLScriptExpression *sequence, LLScriptExpression *expression, LLScriptExpression *expressionlist, LLScriptStatement *statement.
阅读全文
摘要:AM(敏捷建模)是一种态度,而不是一个说明性的过程。AM是敏捷建模者们坚持的价值观、敏捷建模者们相信的原则、敏捷建模者们应用的实践组成的集合。AM描述了一种建模的风格。当它应用于敏捷的环境中时,能够提高开发的质量和速度,同时能够避免过度简化和不切实际的期望。AM可不是开发的“食谱”,如果你寻觅的是一些细节的指导,如建立UML顺序图或是画出用户界面流图,你可以看看在建模Artifacts中列出的许多建模书籍,我特别推荐我的书The Object Primer 2/e(尽管这有失公允)。 AM是对已有方法的补充,而不是一个完整的方法论。 AM的主要焦点是在建模上,其次是文档。也就是说,AM技术..
阅读全文
摘要:下面来详细地分析语法分析相关的类,以便了解整个语法分析的过程和细节,这样也方便地复用第二人生里的脚本编译器,达到源码复用的目标。先来分析类LLScriptFilePosition,它的声明代码如下:#001 class LLScriptFilePosition#002 {#003 public:构造函数,保存脚本所在的行号和列号。#004 LLScriptFilePosition(S32 line, S32 col)#005 : mLineNumber(line), mColumnNumber(col), mByteOffset(0), mByteSize(0)#006 {#007 ...
阅读全文
摘要:<?php $showtime2=strtotime($myrow["updatetime"]);echo date("D d,M Y",$showtime2);?>其中updatetime,形如2008-06-20 01:16:20格式化后,形如 形如(Wed 30,Jul 2008)
阅读全文
摘要:背景图只显示一次,不循环 这个用一个CSS就搞定.{background-repeat:no-repeat;}PHP后台就是一个表单域textarea,输入时候要回车时候就回车前台<?php $text = $res_now['oem_no']; $text = str_replace("&","&",$text); $text = str_replace(" <","<",$text); $text = str_replace(
阅读全文
摘要:GEF 概述 GEF 假定您拥有一个希望以图形方式显示和编辑的模型。为了做到这一点,GEF 提供了可在 Eclipse 工作台中任何地方使用的查看器(类型为 EditPartViewer )。象 JFace 查看器一样,GEF 查看器是 SWT 控件上的适配器。但是它们的类似之处仅此而已。GEF 查看器基于模型-视图-控制器(model-view-controller,MVC)体系结构。 控制器作为视图和模型之间的桥梁(请参阅图 1)。每个控制器(即本文所谓的 EditPart)负责将模型映射到它的视图,也负责对模型...
阅读全文
摘要:首先我们来创建一个基于 GEF 的浏览器(而不是编辑器),也就是说,它只能浏览一个模型,而不能够进行编辑。先关注于浏览而不是编辑,有助于理解 GEF 的一些核心的概念。 GraphicalViewer 和 createControl () 方法 ...
阅读全文
摘要:当玩家书写一个脚本时,如果写错了脚本,那么肯定运行不了。现在就来分析怎么样确保脚本是正确的问题,如果不正确就需要显示出来那里不正确。脚本是否正确,其实是根据脚本的语法来判断的。那么又怎么样来构造语法分析的程序呢?在第二人生里是通过使用程序bison.exe来创建的。下面先来看看bison.exe是做什么东西的:Yacc 代表 Yet Another Compiler Compiler。 Yacc 的 GNU 版叫做 Bison。它是一种工具,将任何一种编程语言的所有语法翻译成针对此种语言的 Yacc 语 法解析器。它用巴科斯范式(BNF, Backus Naur Form)来书写。按照惯例,Y
阅读全文
摘要:定义 XML 和编码 经常使用的缩写词 DOM:文档对象模型(Document Object Model)DTD:文档类型定义(Document Type Definition)HTML:超文本标记语言(Hypertext Markup Language)IDE:集成开发环境(Integrated Development Environment)SAX:XML 简单 API(Simple API for XML)XSD:XML 模式定义(XML Schema Definition)XML:可扩展标记语言(Ext...
阅读全文
摘要:前面分析词法分析的代码生成,并且生成可编译的C++文件,那么它是怎么调用这个词法分析文件的呢?下面就来了解它的调用过程。当你在第二人生里创建物体后,就可以编辑脚本了,当完成脚本编写之后就需要保存起来,这时就会触发脚本编译。它就如下调用:#001 void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename,#002 LLViewerObject* #003 object,#004 const #005 LLTransactionID& tid,#006 BOOL #007 is_running)#008
阅读全文
摘要:前面介绍了flex文件的格式,那么flex程序又把这个文件生成怎么样的文件呢?下面就来仔细分析这个文件,由于flex程序生成C++的文件格式,那么就需要C++的编译器才可以编译了。它的代码如下:#001 #line 2 "lex_yy.cpp"这行是行号同步使用。#002 /* A lexical scanner generated by flex */#003 #004 /* Scanner skeleton version:#005 * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:5
阅读全文
摘要:下面来分析flex文件的最后一部份,就是辅助代码部份,这部份代码是原封不动地拷贝到生成的文件里。它的代码如下:#001%%这个双百分号开始,就表示flex文件的第三部分开始了。#002#003LLScriptAllocationManager*gAllocationManager;定义分配管理器指针。#004 LLScriptScript *gScriptp;定义脚本的指针。#005#006// Prototype for the yacc parser entry point#007int yyparse(void);前置声明yacc的语法分析的函数。#008#009int yyerror(
阅读全文
摘要:接着上一次,再来分析flex文件的下一部份:规则部份。它们由一连串带有代码的正则表达式组成,当匹配相对应的正则表达式时,这些代码就会被运行。下面就一段规则的代码:#001%%这行表示规则代码开始。#002"//" { gInternalLine++; gInternalColumn = 0; comment(); }这里使用“//”来表注释一行代码。#003#004"integer" { count(); return(INTEGER); }这里识别关键字integer为整数据处理。#005"float" { count(); ret
阅读全文
摘要:从前面的脚本可以看到它的代码,也理解它的意思了,但是它是怎么样执行的呢?又是怎么样变成可执行的脚本呢?下面就来分析这部份相关的代码。要了解脚本执行,就得把脚本中的每一个单词识别出来,如下: default { state_entry() { llSay(0, “Hello, Avatar!”); } touch_start(integer total_number) { llSay(0, “Touched.”); } } 把上面的脚本识别...
阅读全文
摘要:Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。 既然我们已经有了make, gnumake, nmake, jam以及其他的build工具为什么还要要一种新的build工具呢?因为Ant的原作者在多种(硬件)平台上开发软件时,无法忍受这些工具的限制和不 便。类似于make的工具本质上是基于shell(语言)的:他们计算依赖关系,然后执行命令(这些命令与你在命令行敲的命令没太大区别)。这就意味着你 可以很容易地通过使用OS特有的或编写新的(命令)程序扩展该工具;然而,这也意味着你将自己限制在了特定的OS,或特定的OS类型上.
阅读全文
摘要:换位思考带来的是更多谅解和机会 当初只是说了句“我想去外面看看”而已 他就误会的不行了 现在他说“要去上海了” 我终于体会到他当时的心情 只能说抱歉 不是不想流下 只是想去看看 现在的我和他一样 很想像他不理我一样不去理他 可是这样会造成现在我和他这样的结果 我和他都是任性的 所以我知道这样来不得 这样换位思考一下 我能体谅到他 就好象我现在的感觉一样 可是他却不能体会到我和他的感觉。。。 纯意识流 看不懂的不要问 看懂的也不要有任何疑问....
阅读全文
摘要:根据以下标准来评选: 1)Amazon的浏览次数 ; 2)Amazon的评分 ; 3)google的点击次数 ; 4)是否得到 Jolt 奖 (一本技术书籍只有在获得了Jolt奖之后才能真正奠定经典的地位)。下面列出前20位,全部列表请点击下面链接,看你喜欢的书籍有没有在里面Top 100 Best Software Engineering Books, Ever1 Steve McConnell Code Complete: A Practical Handbook of Software Construction 2 Elisabeth Freeman, etc. Head Firs...
阅读全文
摘要:前面我们学习怎么样打开窗口来创建脚本,接着下来就需要知道这些脚本是做什么用的,这样最终才会按它的语义来正确地执行起来。现在我们能够查看脚本的内容: default{ state_entry() { llSay(0, “Hello, Avatar!”); } touch_start(integer total_number) { llSay(0, “Touched.”); }} 如果您编写过程序, 你会觉得很熟悉其中的几个关键字,下面我来逐字分析。关键字...
阅读全文
摘要:今天安装sun-java6-source的时候,突然发现了一个令我愤怒的消息 eclipse居然也可以在源里面安装,也就是所谓的新李德安装包 oh,伤心阿,想起以前为安装这个东西的时候费了不少力气,自己的是amd64 然而安装不上去,就在机房正了个windows 然后几经周折发现了64位的eclipse 最后成功安装。。。 可是现在居然在源里面有。。。 伤心了 不过我现在没有安装。。。 这几天休息下来感觉好无聊阿 不过自己决定要好好的学习哈英语了 因为在JInfonet面试中觉得自己英语不好真的太。。。 不是因为他们的原因,因为自己真的觉...
阅读全文
摘要:WebWork中可以使用两种方式实现数据保存之前的校验,一种方式是针对每个action写一个校验的xml配置文件,例如对于BaseAction.java,就要在同目录下建立一个BaseAction-validation.xml,另外一种方式就是BaseAction实现Validateable接口,在validate方法中使用addFieldError(fieldName,message);构造字段-错误信息对照. 使用xml的方式有个问题就是:如果更改或添加校验规则需要重新装载部署xml文件,另外还有一个问题,OpenJWeb的BaseAction是一个处理所有实体类的action,换句话说,
阅读全文
摘要:哲学里说,世界是永远在运动的。那么在现实中人们对软件的需求是永远在变化的,为了对付这种不断变化的需求,有什么好方法吗?难道还是像过去一样,每一个需求都是发布一个版本来解决?随着市场竞争的激烈化,满足每一个用户个性化需求,就需要考虑一种办法让用户自己去改变的游戏世界里的东西了。在第二人生里,就引入了脚本语言来解决不同用户的需求的变化,而不必重新发布新程序。有了脚本系统之后,用户想创建一个飞机在游戏里飞来飞去,就非常简单了,只要写几行脚本代码,就可以控制飞机移动了。比如还可以创建一些物体,当不同的用户来点击它时,就弹出不同的欢迎标语,这样更加具有人性化的表现。下面就带你去创建第一个最简单的脚本,打
阅读全文
摘要:"餐厅" --> "Translate server error"
阅读全文
摘要:前面已经介绍雷达地图的类声明,现在就来仔细分析一下雷达地图是怎么样显示出来的。雷达地图显示函数LLNetMap::draw代码如下:#001void LLNetMap::draw()#002{#003 static LLFrameTimer map_timer;#004判断是否显示雷达地图。#005 if (!getVisible() || !gWorldPointer)#006 {#007 return;#008 }创建对象图片。#009 if (mObjectImagep.isNull())#010 {#011 createObjectImage();#012 }#013 #014 mCu
阅读全文
摘要:在Java Web应用中,经常会遇到许多树型维护的功能,例如功能菜单树,网站栏目树,商品分类树,这些树的开发耗费了软件公司开发人员大量的开发时间.实际上,通过一个好的设计,树的功能是可以用一个通用的创建向导创建出来,OpenJWeb在树向导的开发中,数据库表字段按照一个统一的命名规则,例如节点编码tree_code,节点名称为node_name,节点类型为node_type等等,另外在struts返回JSP页面时带了一个NodeForm的List列表,此NodeForm类也是一个通用的与具体数据库表无关的,包含了节点编码nodeCode,树编码treeCode,节点名称nodeName等,在J
阅读全文
摘要:无论是在2D的游戏里,还是在3D的游戏里,雷达地图的实现,都是比较基本的功能了。因为随着游戏世界里越来越大,参加的玩家也越来越多,需要一个大体的地图来让玩家方便地看到全局的概貌。比如在打对战的游戏里,更加需要了解别人在那里战斗了。有了雷达地图之后,就可以让玩家更加方便地了解全局地图上发生的事情,也方便玩家相互查找,也让玩家不会走迷路。下面就来了解第二生里的怎么样实现雷达地图的实现,它的显示界面如下:它主要通过类LLNetMap来实现的,它的声明代码如下:#001class LLNetMap : public LLUICtrl#002{#003public:构造函数和析构函数。#004 LLNe
阅读全文