(2007-02-02) (阅读次数: 5093)
(2007-01-26) (阅读次数: 2685)
1 设置phpMyAdmin
Language:Chinese simplified (zh-utf-8)
MySQL 字符集:UTF-8 Unicode (utf8)
MySQL 连接校对 gbk_chinese_ci
2 创建数据库时
整理设置成 gbk_chinese_ci
3 用SQL建立表中
ENGINE=MyISAM DEFAULT CHARSET=gbk;
ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=40 ;
4 检查表结构中
varchar(100) 的整理属性为gbk_chinese_ci
其它类型的整理属性为空
5 代码中加上
$db->query("SET CHARACTER SET GBK"); Linux下需要,Windows下不需要
这个相当于Connection Character Sets and Collations
(2007-01-22) (阅读次数: 1720)
通过对exo cms portal, Mambo以及IBM的CMS也深入研究,我决定要取它们的长处,利用他们的思想,但是要简化
它们的设计。针对cms里面非常重要的前台导航,我采用以下的设计方法
(2007-01-17) (阅读次数: 1517)
拜读了一篇关于敏捷过程的文章《使用敏捷过程和建模来构建企业应用程序》
(2007-01-11) (阅读次数: 1596)
工资系统中通常都有一个工资计算公式的定义。例如 实发=应发-应扣 等等。要计算这样的表达式,传统的方法就是用逆波兰表达式解析它。
下面介绍一个简单的方法来实现计算。
使用PHP的Pear库中的RPN.php。
(2007-01-06) (阅读次数: 4090)
(2007-01-06) (阅读次数: 1686)
JBoss Seam是一个强大的用来构建下一代Web 2.0应用程序的应用程序框架,它统一和集成流行的面向服务(SOA)技术,例如AJAX,JSF,EJB3,Java Portlets和BPM,工作流。
Seam自底向上设计,消除了架构和API的复杂性。它允许开发人员通过使用annotation的POJO,组件化的UIwidget和非常少的XML来组装复杂的web应用。由于Seam 1.0的简单,使得它未来易于和JBoss ESB和JBI集成。
为何选择Seam
基于EJB的发开:EJB3.0改变了EJB是粗粒度,重量级对象的名声,把它变成了有着细粒度annotation的轻量级POJO。在JBoss Seam中,所有的东西都是EJB。JBoss Seam采纳Web 2.0的概念即Web就是平台,此外,JBoss Seam消除了表现层组件和业务逻辑组件的差异。即使是session bean,也可以作为JSF动作的监听者。
基于AJAX的远程层:JBoss Seam 远程允许EJB 3.0 session bean在web浏览器中通过Ajax调用。Session beans对于JavaScript开发者来说就像是JavaScript对象,隐藏了XML序列化和XMLHttpRequest API的复杂性。Web客户端还可以通过异步通知订阅JMS主题和接受该主题的消息。
富状态应用程序:在JBoss Seam之前,HTTP session是唯一管理Web应用程序状态的方法。JBossSeam提供了多种富状态的不同粒度上下文,从对话范围到业务过程,将开发者中HTTP session中解放出来。例如,开发者可以编写多个工作空间的web应用程序,就如同多窗口的富客户端一样。
过程驱动应用程序:JBoss Seam通过JBoss jBPM透明集成了业务过程管理,实现复杂的工作流和页面流将变得非常简单。未来的JBoss Seam版本将可以用同样的方法定义表现层会话。
可测试性作为核心特性:Seam组件,就是POJO,故而天生易于单元测试。但对于复杂应用程序,仅仅单元测试还不够。因此,Seam将Seam应用程序的易于测试作为框架的核心特性。你可以写JUnit或者TestNG测试来模拟和用户的交互,检查所有系统组件,测试都在IDE中运行。
(2007-01-04) (阅读次数: 1648)
1 第一次访问,检查该文件是否存在,如果没有缓存,从数据库中取出文件放到缓存里面,以后访问,就直接从缓存里面取。每一个静态页面都需要一个辅助的meta文件,例如wp-cache-12345.meta
为什么需要独立的meta?因为返回一个静态html还不够,还有很多信息,例如还需要这个页面的时间,content-type等信息。这些信息又不能存放在html中,所以需要辅助的.meta文件
meta文件中的内容是:
$meta_object->uri = $_SERVER['REQUEST_URI'];
$meta_object->post = wp_cache_post_id();
$meta_object->dynamic = true;
$meta_object->headers = array();
array_push($meta_object->headers, "Last-Modified: $value");
array_push($meta_object->headers, "Content-Type: $value");
2 如果某篇文章修改了,删除这篇文章的缓存,如果某个blog换主题了,删除整个blog的缓存。以后按照1的逻辑来。
wp-cache-phase1 检查某页面是否存在,如果存在直接去缓存。否则进入wp-cache-phase2,访问动态页面,生成缓存文件
其中用到
ob_start('wp_cache_ob_callback');
register_shutdown_function('wp_cache_ob_end');
wp_cache_ob_callback wp_cache_ob_end
wp-cache-phase2还有个作用是响应页面的事件,例如publish_post edit_post delete_post publish_phone trackback_post pingback_post comment_post edit_comment wp_set_comment_status delete_comment switch_theme,不管什么事件,本质就是将缓存里面的页清空
采用这种插件形式需要修改的地方
1 cache: 需要有一个include文件,根据URL,统一判断所有的访问
2
(2007-01-04) (阅读次数: 2184)
InfoQ发布了一个关于规则引擎的介绍Real-World Rule Engines,原文 http://www.infoq.com/articles/Rule-Engines
ONJava上也有两篇文章:
Give Your Business Logic a Framework with Drools http://www.onjava.com/lpt/a/6093
Using Drools in Your Enterprise Java Application http://www.onjava.com/lpt/a/6160
下面总结一下其中的精华:
大多数web和企业Java应用可以分成三个部分:一个和用户交互的前台, 一个和后台系统,例如数据库交互的服务层,以及他们中间的业务逻辑。 现在使用框架构建前台和后台系统已经成为普遍共识(例如, Struts, Cocoon, Spring, Hibernate, JDO, 和 Entity Beans), 但却没有一个标准的方法来构建业务逻辑。一些框架,例如 EJB 和 Spring 只在一个高层实现业务逻辑,但对于我们组织逻辑代码没有任何帮助,所以,为什么没有一个框架来替换冗繁,易错的if...then语句呢,这个框架应该和其它前台或后台框架一样,易于配置,具有可读性和重用性。下面我们将介绍Drools 规则引擎,这个来解决我们问题的框架。
(2006-12-31) (阅读次数: 1911)
我们每天的开发中都要编写大量的单元测试,很多单元测试的对象是相对独立的,例如一个所得税计算的模块,但是更多的单元测试需要依赖其他的组件或者服务。因此,我们需要EasyMock来无缝的连接这些组件。Mock的意思就是空的,不存在的东西。
EasyMock刚刚发布了2.2版本,它开始使用很多基于jdk 1.5的特性。
(2006-12-19) (阅读次数: 1439)
Ruby on Rail尽管不断吸引软件工程领域的注意,但企业级的开发室仍然对其很不信任.为什么?“基于脚本语言的框架难道也能符合企业级应用么?!” 对于RoR,最主要的论据就是他们缺乏企业级服务(例如分布式事务,消息等)。对很多业务来说,没有这些服务的平台是根本不予考虑的。
Grail就是一个快速的企业级快速应用开发工具。它基于Groovy语言,可以无缝的集成Java的服务,同时也提供了脚本语言的巨大便利。
为了显示它的企业集成能力,Grails可以快速方便的构建一个web应用程序,后端使用EJB3实体beans。但是,不仅仅如此,Grails让你可以对实体bean实现动态控制,而不需要你修改EJB的源代码。Grails Object Relational Mapping (GORM)是基于Hibernate 3的(最终也会支持Java Persistence API),并且使用Groovy's Meta Object Protocol (MOP)来添加各种手工动态方法给实际上静态的实体bean。这些方法不仅可以给Grails和Groovy调用;Java代码也可以调用。这样我们就同时拥有了JEE/EJB3的企业级能力和RAD web应用开发的便利。
(2006-12-17) (阅读次数: 3272)
1 Webwork 2 作为MVC
web.xml
webwork
com.opensymphony.webwork.dispatcher.FilterDispatcher
webwork
/*
xwork.xml
/WEB-INF/jsp/employee/employeeList.jspx
/WEB-INF/jsp/employee/employeeForm.jspx
employee.action
EmployeeAction.java
public class EmployeeAction extends ActionSupport implements Preparable {
public String execute() throws Exception { //如果URL没有指定Action,默认调用它
return list(); //转到list
}
public String list() {
return "list";
}
(2006-12-10) (阅读次数: 1489)
Nuxeo SAS宣布他们的下一代企业内容管理平台,预计2006年11月发布,将会基于开源Java技术,尤其是JBoss SEAM, EJB 3和JBoss Application Server. 这个改变非常有意思,Nexeo曾经号称是全球最大的使用Zope开发的公司,他们使用Python和ZOPE application server.
(2006-12-01) (阅读次数: 1218)
如果QIR能够换回项目成功,我愿用一生敏捷。
何为QIR,就是快速原型Quick Prototype 迭代Iterator 重构Refactor.
敏捷软件过程大家都叫了这么多年了,Extreme Programming (XP), Scrum, Feature Driven Development (FDD), Lean Software Development, Agile Unified Process (Agile UP or AUP), Crystal, and Dynamic Systems Development Method (DSDM)每一种其实都是针对特定的问题提出的。当然每一种方法都有他的用武之地。
不过我觉得敏捷最核心的概念,或者说需要实践的地方只有三个,那就是QIR。
只要这三个概念能掌握好,其它的敏捷方法就可自然贯通。
1 快速原型
原型大家都做过,通常的意义就是设计程序的界面。有人用Visio画原型,也有人用HTML设计简单的页面。
但是这样设计出来的原型通常意义不大,我这么说的意思是,通常这些设计好的界面图对项目的真正开发只能起一个很小的参照。光是这样的原型是不够的。
什么是快速原型?为什么说需要快速原型?
在这个对项目进度要求越来越高的时代,软件开发周期内的每一步都必须发挥最大限度的作用,这就好比起跑时候的起跑动作,赛车发动时候的占位等等。每一步都要为后续步骤做铺垫。
快速原型开发不仅仅是设计界面,而是通过在设计界面的过程中,也能完成所有系统数据表的设计以及编写好常用的测试数据。也就是说设计界面的时候,心中要想到这些数据在表中如何存取。设计表的时候也要想到这个结构在界面上怎么呈现最舒服。原型还需要有简单的代码支撑,这样我们就可以看出来这个原型那些设计的不合理。
带着这个思想去做,我们发现在原型设计阶段,我们就已经开始对原型进行迭代和重构了。
这样原型就不简单的是画界面了,原型就要求把框架,数据库全部都连上。如果我要展示一个表单,不能仅仅画一个html的表单,而要实际的把里表的测试数据从库里面调出来。这样就会发现,原来某些表单项可以通过冗余字段来实现,某些表单项必需要弹出窗口来选择。
当然这样对原型设计者的要求就比较高,原型设计者必须熟悉常见的界面设计模式,数量掌握各种软件,包括桌面,web的界面设计技巧,还要懂
(2006-11-28) (阅读次数: 3313)