- 博客(21)
- 资源 (9)
- 收藏
- 关注
翻译 Javascript 编程语言概论
原文出处 http://javascript.crockford.com/survey.html 综述这篇文章为专业程序员介绍 JavaScript Programming Language 。它是一个微型语言,如果你熟悉其它语言的话,很容易理解。JavaScript 并不是Java。它们是两种不同的语言。JavaScript 也不是 Java 的一个子集。更不是解释性的Java。(Jav
2006-12-29 00:19:00 1416
原创 15迷问题解空间的证明(15 puzzle)
在《15迷问题的证明(15 puzzle)》一文中,我对15 迷问题做了较为详尽的描述,并证明了什么样的初态可以达到目标状态。在这篇文章里我将进一步证明可达到目标状态的初始态状态空间为 16! / 2,并会使用上文中提到的公式进行证明。可以很容易的看出棋盘上的牌可以有 16! 种不同的排列,这些排列中包括了可以达到目标状态的初态,也包含了不能达到目标状态的初态。只有那些通过公式计算结果为偶数的状
2006-12-18 13:52:00 4431
原创 再谈tapestry-delegate——优化与重构
这段时间我对tapestry-delegate这个用于改进Tapestry 的"listener:"绑定的扩展开源包做了一次较大的调整和改进,使这个包在使用的灵活性和性能方面有了不少的提高。除了使用字节码生成技术来提高最终函数调用的效率外,还在多个候选函数的选择,类型的匹配,冗余函数的清理等方面做了改进。现在这个包可以支持如下几种使用的格式: 模糊格式:"delegate:doSub
2006-12-17 22:33:00 1522
原创 Tapestry灵魂——字节码生成
Tapestry最大的的一个特点就是通过字节码生成在运行时动态的创建页面的实例。这也是整个框架能有如此活力的基础。通过运行时的代码生成不仅使说明(specification),模板(template)和类结合起来形成一个统一的整体,更主要的是使程序员得到了极大的解放。所有重复性的,易出错的烦琐工作都有框架负责,动态的将必须的信息赋给页面。程序员需要的仅仅是关心一些最为基本的设置。 T
2006-12-16 03:12:00 2029
翻译 配置 Tapestry
<!--.heading { background-color: #E5E4D9;} .boxed { background-color: #E5E4D9;} .underlined_5 {border-bottom: solid 5px #E5E4D9;}.underlined_10 {border-bottom: solid 10
2006-12-16 03:09:00 3404
原创 使用tapestry-delegate提高Tapestry运行效率
在"tapestry-prop"这个Tapestry扩展的启示下,突然有了灵感,编写了一个叫做"tapestry-delegate"的扩展。这个扩展的功能和Tapestry内置的"listener:"绑定相似,提供了另一种定义监听函数(listener method)的方法。这里我定义它为代理函数,一方面是因为Tapestry使用了监听函数的名称,一方面毕竟叫它代理函数更加合适。 现
2006-12-16 03:08:00 2220
原创 Tapestry的template和specification定义在不同文件夹的方法
最近有朋友问:“把‘*.page’与‘*.html’完全分开,静态页面自己就是一个完整的项目,但Tapestry默认情况下是找不到的,有什么方法才能做到呢?”。 解决的方法很简单,Tapestry内部已经支持了这种做法,只是估计由于Tapestry的作者不是特别推荐这种做法所以没有介绍这种方法。在Tapestry3和Tapestry4中解决这个问题的方法都一样。在定义文件中定义一个
2006-12-16 03:07:00 1704
原创 Tapestry绑定的作用与实现
Binding是Tapestry一个非常重要的组成部分,同时也是开发者很少接触的部分。绑定是用于为组件实例定义的参数提供数据的机制。有了绑定机制,组件就不必知道数据的来源,它需要的只是在必要的时候可以获取数据。 绑定在包含该组件的定义文件或模版文件内设置。绑定可以是静态的,或动态的(这不是由组件自身决定的)。组件也可能使用绑定将一个值写回其它对象(典型的是写回某一个组件)。 简
2006-12-16 03:06:00 1599
原创 Tapestry4改进运行效率的实现方法
在Tapestry4之前的版本,Tapestry使用了大量的动态调用(大部分是使用OGNL调用的),这样势必会造成大量运行效率的损失。好在大多数WEB程序的瓶颈是在访问数据库而不是在页面上,所以并没有对Tapestry的推广构成毁灭性的影响。但是随着Tapestry社区的发展,使用人群的增加,Howard Lewis Ship(Tapestry的作者)和一些支持Tapestry项目的开发
2006-12-16 03:05:00 1858
翻译 使用tapestry-prop提高Tapestry运行效率
tapestry-prop介绍 它是一个为Tapestry4.0编写的扩展包,提供了一个新的绑定前缀"prop:"。这个前缀用于获取页面或组件的属性。 看上去和Tapestry内置的"ognl:"前缀没有什么区别,但是低层实际获取数据的方法和OGNL是完全不同的。它采用了字节码生成的方式去获取用户类中的那些可以通过名字获取的属性。 "prop:"前缀只能获取简单属性或者由路径代表
2006-12-16 03:04:00 2004
原创 Friendly URLs in Tapestry
在早一点的版本里面Tapestry并没有采用幽雅的格式来产生URLs。这种格式的URLs带来了不少的问题。比方说,因为整个连接都是围绕一个servlet构造的,所以势必会使基于路径的申明式J2EE安全机制不能使用。再比方说,依靠参数来区分页面,就会使搜索引擎只能看到应用程序的极小的一部分页面。 从4.0 版开始,框架自身已经直接支持友好的URLs格式。通过以下两种操作Tapes
2006-12-16 03:03:00 1733
翻译 HiveMind介绍
PRE.code { border: solid thin; padding: 2px; background-color: #ffffcc; } /* Styles for syntax highl
2006-12-16 03:02:00 6948
翻译 Tapestry介绍
Tapestry介绍 Tapestry是一个用java编写的基于组件的web应用开发框架。它不仅仅是一个模板系统,更是一个建立在Java Servlet API基础上的动态交互式网站的开发平台。不同于普通的模板系统,它是一个真正使用简单,可重用的组件开发复杂应用的框架。框架自身完成了把许多在创建web应用时容易出错并且极为乏味的工作,诸如分派请求,构造与解析URLs信息,处理国际化和本地化数
2006-12-16 03:01:00 3220 6
原创 Translator in HiveMind
很多情况下需要将一个用字符串代表的属性转化成特定的对象,比如说Boolean,Integer或Date。HiveMind通过Translator完成这项工作,可以在或里面声名一个Translator。 HiveMind对Translator的支持由一个叫做TranslatorManager的类负责管理。考虑到对Translator的扩展性,它对Translator的组织比较特别。
2006-12-16 03:00:00 1458
原创 Schema in HiveMind
支持自定义数据格式是HiveMind的又一大特色。通过元素,可以为配置扩展点,服务或拦截器的参数定值格式。而且随着HiveMind的自身发展,Schema所支持内容也会越来越丰富。现阶段schema仅支持对一系列element做处理,通过它可以把由它指定的xml文件片段解析成一个对象或对象的集合。 HiveMind对schema的这种支持源于Apache开元项目Jarkata的一个子
2006-12-16 02:59:00 1378
原创 Configuration Point in HiveMind
配置扩展点是HiveMind的一个核心概念。当你拥有一系列服务之后,对这些服务进行配置就是很自然的了。在HiveMind里,一个配置扩展点包含了一个无序元素的集合。其中的每个元素都是定义在某个模块里,另外每个模块都可以为一个对它可见的扩展点增加定义元素(HiveMind里面把这种定义称为contribution)。 服务扩展点(service point)和配置扩展点(configu
2006-12-16 02:58:00 1273
原创 Singleton Service Model in HiveMind
在Singlenton这种模式下,当一个服务第一次被请求的时候,这个服务的一个代理将会被生成。生成的这个代理实现了与实际服务相同的接口(也可以是对象),并且在服务接口的方法在第一次被调用的时候实际的服务对象(包括服务的实现类,拦截机,对别的服务的引用等)才会真正被创建。 HiveMind内部通过SingletonServiceModel这个类来完成服务代理的生成和实际服务创建的工
2006-12-16 02:57:00 1208
原创 Pooled Service Model in HiveMind
基于池的服务模型和与线程绑定的服务模型是非常象的。一个服务的实例会和一个特定的线程绑定,直到这个线程消亡(或者只是清空数据)。和与线程绑定模式不同的是,服务实例并不会被抛弃,会重新放入池中供之后的请求使用并与新的线程绑定。 和与线程绑定的模型一样,所有的绑定与取消绑定都是由自动生成的代理类完成的,用户代码不需要涉及这些。 核心服务实例可以实现RegistryShutdownLi
2006-12-16 02:48:00 1208
原创 Threaded Service Model in HiveMind
一般情况下,单例模式(singleton or primitive service models)足够使用。在有些情况下,服务需要保留某些详细状态。状态和多线程是没有联系的,所以与线程绑定的服务模型在需要的时候会创建一个服务实例并把它绑定到当前线程中去。实例一但创建就会一直绑定在线程中直到现成消亡。一个服务实例唯一对应于绑定的线程并且只能从绑定线程中访问。 与服务帮定的服务模型使
2006-12-16 02:47:00 1254
原创 Primitive Service Model and Interceptor in HiveMind
在Singlenton这种模式下,当一个服务第一次被请求的时候,这个服务的一个代理将会被生成。生成的这个代理实现了与实际服务相同的接口(也可以是对象),并且在服务接口的方法在第一次被调用的时候实际的服务对象(包括服务的实现类,拦截机,对别的服务的引用等)才会真正被创建。 HiveMind内部通过SingletonServiceModel这个类来完成服务代理的生成和实际服务创建的工
2006-12-16 02:46:00 1134
Introduction to Probability Models (Sheldon M.Ross, 9th Edition)
2010-11-15
Design Patterns in Java
2009-06-23
Mastering Enterprise JavaBeans 3.0
2008-06-03
Ant 入门讲解视频
2008-05-30
ejb3实例教程
2008-05-16
Building Reliable Component-Based Software Systems
2008-05-06
UML参考手册
2008-05-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人