2007年6月30日
改寫了一下Java基類,添加了一個(gè)計(jì)數(shù)器。
用tomcat測試了一下連續(xù)若干次請求時(shí)創(chuàng)建的對象個(gè)數(shù)。
第【148259】個(gè)對象
天哪,服務(wù)器啟動開始就是14萬個(gè)對象。
第【148668】個(gè)對象
第【149091】個(gè)對象
第【149211】個(gè)對象
第【149291】個(gè)對象
第【149418】個(gè)對象
第【149541】個(gè)對象
第【149867】個(gè)對象
第【149947】個(gè)對象
回想一下以前人們?yōu)槌舐膕truts1的單例Action的設(shè)計(jì)的辯護(hù),真是可笑之極,哈哈哈哈
posted @
2008-03-11 11:35 金大為 閱讀(939) |
評論 (4) |
編輯 收藏
無意間看到的一片趣文:
希望有一天能看到文言文版的國外圖書翻譯,真的比較有趣,還有,不懂的時(shí)候,也可以順帶看看英文原文,也好順便學(xué)學(xué)英語,呵呵。
引:
Thus spake the master programmer:
"When you have learned to snatch the error code from the trap frame, it will be time for you to leave."
師曰:『惑中取錯(cuò)之日,可出山矣。』
…..
全文見:
http://livecn.huasing.org/tao_of_programming.htm
posted @
2007-12-01 15:27 金大為 閱讀(269) |
評論 (0) |
編輯 收藏
我一直都想搞一個(gè)
XML的模板引擎 ,大凡非xml的模板風(fēng)格,第一感覺就是那么的不爽。
可是CommonTemplate例外。
CommonTemplate處處為程序員考慮周到的漂亮的語法風(fēng)格,確實(shí)非常誘人。
具體的語法我就不一一列舉了,大家可以到他的
官方網(wǎng)站 去翻閱。
挑幾個(gè)亮點(diǎn)介紹一下:
for循環(huán)的空處理,相信曾經(jīng)麻煩了不少程序員吧。
現(xiàn)在好了,CT支持如下語法:
$for{ }
< tr >
< td > 1 </ td >
< td > 2 </ td >
< td > 3 </ td >
</ tr >
$forelse
< tr >
< td colspan ="3" > 沒有數(shù)據(jù) </ td >
</ tr >
$end
大膽的關(guān)鍵字利用。
< html >
< body >
$if{users != null && users.size > 0}
< table border ="1" >
$for{user : users}
< tr >
< td > ${for.index + 1} </ td >
< td > ${user.name} </ td >
< td > ${user.coins} </ td >
</ tr >
$end
</ table >
$end
</ body >
</ html >
大家看這段代碼。一般來說,for這種常用關(guān)鍵字是不好用作id的,但是這里作為默認(rèn)的循環(huán)狀態(tài)對象的id。既解決了塊對象存放的問題,又不會引起其他命名的沖突。一個(gè)字,妙!!!!
其他漂亮的特征:
注釋版語法外套,方便于測試數(shù)據(jù)填充及可視化編輯。
單一的語法規(guī)則,方便解析與擴(kuò)展。
等等。。。。
好了,贊嘆之余還是給出一點(diǎn)點(diǎn)遺憾:
boolean 運(yùn)算有點(diǎn)丑陋。
我個(gè)人更期望 js的boolean運(yùn)算風(fēng)格,沒有必要一碰到boolean 運(yùn)算就返回true ? false
我們完全可以返回一個(gè)更有意義的值,比如,我更期望這個(gè)語句能如我所愿的執(zhí)行。
${ variable|| " 默認(rèn)值 " }
當(dāng)能,如上支持,CT是有的,它的寫法是
${ variable | " 默認(rèn)值 " }
但是,我感覺,這個(gè)語法就有點(diǎn)復(fù)雜了,也不那么直觀。
一般來說| 是按位取或,是位運(yùn)算符,這里這個(gè)用法,跳躍的確實(shí)有點(diǎn)大,較難接受的。
posted @
2007-11-29 21:28 金大為 閱讀(1446) |
評論 (5) |
編輯 收藏
剛剛經(jīng)歷的一點(diǎn)小技巧,共享一下。
1。給代理函數(shù)加上空判斷
一個(gè)組合模式的運(yùn)用。代碼如下:
class Composite impliments IF1,IF2,IF3{
private IF1 if1;
private IF2 if2;
private IF2 if2;
public Composite (if1,if2,if3){
}
}
eclipse 生成指代方法>>>>
class Composite impliments IF1,IF2,IF3{
private IF1 if1;
private IF2 if2;
private IF2 if2;
public Composite (if1,if2,if3){
}
public void method1(){
if1.method1();
}
.
}
//正則表達(dá)式
// (\w+method\d)(\..*) if($1!=null){$0}
//>>>
class Composite impliments IF1,IF2,IF3{
private IF1 if1;
private IF2 if2;
private IF2 if2;
public Composite (if1,if2,if3){
}
public void method1(){
if (if1 = null ){
if1.method1();
}
}
.
}
//還有一個(gè)構(gòu)造函數(shù)里的屬性賦值:
// (\w+) this.$1=$1
結(jié)果,略
觸類旁通,更多新的用法待你去發(fā)掘^_^
posted @
2007-11-10 18:17 金大為 閱讀(970) |
評論 (3) |
編輯 收藏
被一個(gè)貌似hsqldb bug的問題折磨了好幾個(gè)小時(shí)。
把經(jīng)過帖出來,大家?guī)臀铱纯础?br />
習(xí)慣把hql都寫成預(yù)定義的形式,同時(shí)又為了避免過多的hql定義,我的慣用伎倆:通過如下方式定義hql。
from Message
where packageKey = :packageKey
and ( null = :fileKey or fileKey = :fileKey)
and ( null = :objectKey or objectKey = :objectKey)
and ( null = :memberKeys or memberKey in ( :memberKeys))
但是。今天在hqldb上測試時(shí)發(fā)現(xiàn),在任何情況下 (null = ?) 都為真!!!
非常奇怪,害我調(diào)試了老半天,后來把數(shù)據(jù)庫換成了mysql,ok!!
非常奇怪啊。
不過,上面的寫法(
null = :fileKey )也有點(diǎn)怪怪的。
posted @
2007-10-18 22:31 金大為 閱讀(805) |
評論 (2) |
編輯 收藏
摘要: 剛剛學(xué)習(xí)了一下網(wǎng)頁動畫中上的緩動效果,分享一下學(xué)習(xí)心得。
緩動曲線的概念:
緩動曲線是一個(gè)0為起點(diǎn)的連續(xù)函數(shù)曲線,x軸表示時(shí)間變化,y軸表示位移變化。曲線的斜率反映出運(yùn)動的數(shù)度。
緩動效果在Flash動畫中比較常見,用于模擬一些現(xiàn)實(shí)中常見的運(yùn)動軌跡,或者制造一些超絢的效果。
而且新版本的Flash中,內(nèi)置了一些常用的緩動曲線函數(shù)。
可惜,Flash的這些曲線函數(shù)不是開源的...
閱讀全文
posted @
2007-10-14 21:14 金大為 閱讀(1243) |
評論 (0) |
編輯 收藏
目前為止,JSA依然是最強(qiáng)大的腳本壓縮工具。
As i know,JSA is the most powerfull compressor for javascript.
for jquery1.2.1 (80,469 byte;)
Compressor
beforegzip
aftergzip
source:
80,469;
24,975;
jquery default:
46,437;
14,641;
yuicomressor
46,210;
14,452;
JSA(without eval)
40,704;
13,604;
JSA(with eval):
26,157;
13,549;
JSA(webstart):
http://www.xidea.org/webstart/JSA.jnlp
posted @
2007-09-29 14:04 金大為 閱讀(831) |
評論 (2) |
編輯 收藏
JSA 這個(gè)壓縮工具,是java編寫的,需要安裝java運(yùn)行環(huán)境。
這多少給一些非jav程序員帶來點(diǎn)不便。
現(xiàn)在我們發(fā)布servlet在線壓縮版本。無需安裝,在線壓縮,給非Java用戶一個(gè)更加便捷的使用方式。
項(xiàng)目主頁:http://www.xidea.org/project/jsa/
現(xiàn)在的在線壓縮服務(wù)器由Seaprince 提供。
歡迎更多有空閑服務(wù)器資源的朋友安裝JSA在線服務(wù),我將在jsa項(xiàng)目主頁提供鏈接,方便大家使用。
仍外,為了避免服務(wù)器資源被惡意濫用,我們默認(rèn)啟用了圖片驗(yàn)證,服務(wù)頻率限制等保護(hù)設(shè)置。
給用戶帶來些不便,敬請諒解。
posted @
2007-08-22 16:28 金大為 閱讀(1040) |
評論 (5) |
編輯 收藏
今天無意間打開了一個(gè)CSDN上的個(gè)人blog,發(fā)現(xiàn)窗口無法拖動,F(xiàn)irefox的標(biāo)簽頁也無法切換。
查看代碼:
< script type ="text/javascript" > Include( " Csdn.Blog.UserOnline " ); </ script > < script type ="text/javascript" > Include( " Csdn.Blog.ShowmeDataDeal " ); </ script >
看到Include函數(shù),馬上可以想到,它很可能使用了動態(tài)包含腳本的設(shè)計(jì)。
// http://blog.csdn.net/scripts/jsframework.js window.Include = function (namespace, path) { .. }; S.load = function (namespace, path) { }
仔細(xì)閱讀這兩個(gè)函數(shù)代碼,發(fā)現(xiàn)它是通過XMLHttpRequest對象同步裝載腳本資源的(對IE,它采用userdata緩存優(yōu)化)。而這必將導(dǎo)致一種完全阻塞問題(這種問題我在仍外一篇blog上描述過:http://jindw.javaeye.com/blog/66702 )。
說到阻塞問題,我想大家可能會以為只是一種下載延遲,其實(shí)不然。
下載延遲不是完全阻塞,瀏覽器依然可以響應(yīng)用戶事件。而同步XHR請求阻塞是一種完全的阻塞。
瀏覽器在腳本運(yùn)行與事件響應(yīng)共用同一個(gè)線程(我的猜測)。任何腳本尚在運(yùn)行時(shí)(包括被同步XHR請求阻塞的時(shí)間),瀏覽器將無法響應(yīng)任何用戶事件(無法拖放窗口、切換標(biāo)簽、重畫頁面等等,就像程序死了一樣)。與普通的下載延遲造成的阻塞,感覺明顯不同。
我對這個(gè)問題可以說深有體會,起初,在構(gòu)建JSI1的項(xiàng)目站點(diǎn)時(shí)。因?yàn)榫W(wǎng)站放在sourceforge上,訪問數(shù)度不是一般的慢,幾個(gè)簡單的例子,瀏覽器就要完全阻塞好幾妙鐘。正是厭惡這種完全阻塞的現(xiàn)象,我才開發(fā)了JSI2。
事實(shí)上,現(xiàn)在的一堆堆js框架中,采用XHR同步裝載資源的有不少,JSVM、dojo、a9engine、hax的pies;其中JSVM,
dojo都提供打包工具,將可能裝載的腳本打包到啟動文件中,所以也可以避免XHR同步請求。不過這樣也就失去了部分動態(tài)裝載的意義了。
總之,我非常討厭這種完全阻塞現(xiàn)象,認(rèn)為這個(gè)嚴(yán)重影響用戶體驗(yàn)。
可能也有些主觀因素把,希望聽聽大家的看法。
posted @
2007-08-12 22:22 金大為 閱讀(797) |
評論 (0) |
編輯 收藏
最近看見一個(gè)JavaEye上關(guān)于Java基本類型編譯優(yōu)化的帖子。
貌似高深莫測,其實(shí)疑點(diǎn)重重。吧內(nèi)容轉(zhuǎn)貼過來,希望在這里找到更合理的解釋。
引用 網(wǎng)上看得一些文章
int a = 3;
int b = 3;
編譯器先處理int a =
3;首先它會在棧中創(chuàng)建一個(gè)變量為a的引用,然后查找有沒有字面值為3的地址,沒找到,就開辟一個(gè)存放3這個(gè)字面值的地址,然后將a指向3的地址。接著處
理int b = 3;在創(chuàng)建完b的引用變量后,由于在棧中已經(jīng)有3這個(gè)字面值,便將b直接指向3的地址。這樣,就出現(xiàn)了a與b同時(shí)均指向3的情況。
再令a=4;那么,b不會等于4,還是等于3。在編譯器內(nèi)部,遇到a=4;時(shí),它就會重新搜索棧中是否有4的字面值,如果沒有,重新開辟地址存放4的值;如果已經(jīng)有了,則直接將a指向這個(gè)地址。因此a值的改變不會影響到b的值
不知道真正的原理是不是那樣的?
如果是的話能證明嗎?
這些描述我也看過,很是不解。
如果說這種基本類型也需要用這種指針的風(fēng)格,還要共享數(shù)據(jù),那么后續(xù)的操作處理起來不是更麻煩嗎?
每次寫操作都要查找已有常量。甚至開辟新的空間存儲新值。
再說這個(gè)指針怎么的也要個(gè)32位吧。為什么就不能直接吧值放進(jìn)去,硬是要通過指針跳來跳去的,有意義嗎?
這優(yōu)化了嗎?
反正在我看來,這是不可能的。
希望有高手出來澄清一下,給個(gè)合理的解釋。
如果是對的,那也應(yīng)該給出有點(diǎn)說服力的證據(jù)。
如果是錯(cuò)的,那么建議大家吧這篇文章的源頭揪出來,這個(gè)確實(shí)誤人不淺。
不過java對 String 這類不可變對象的處理,編譯器確實(shí)有類似優(yōu)化,不過也只是編譯期。
這種系統(tǒng)類庫受到點(diǎn)編譯器的特別關(guān)注倒是很合理的。
posted @
2007-07-30 08:29 金大為 閱讀(1180) |
評論 (12) |
編輯 收藏
* 類庫導(dǎo)出支持(完全脫離JSI環(huán)境)
從JSI托管類庫中,選擇文件/對象集,導(dǎo)出為單一腳本文件,完全脫離JSI裝載環(huán)境。
也就是說,屆時(shí)JSI不僅可以作為一個(gè)運(yùn)行時(shí)的腳本管理框架,也可以當(dāng)作一個(gè)部署時(shí)的腳本定制、打包工具。
我是看Ext的定制工具后產(chǎn)生這個(gè)想法的,JSI的依賴定義API完全可以用作一個(gè)通用的腳本定制、打包工具的依賴描述語言。
* Ext集成(歡迎Ext用戶加入)
集成Ext,一方面可以彌補(bǔ)JSI組件的缺乏。另一方面可以優(yōu)化Ext的裝載延遲。
ext目前大小為:462,031字節(jié),JSI2Alpha版的內(nèi)核為35,140字節(jié),不到Ext的十分之一(文件大小均在文本壓縮之前記數(shù))。集成Ext后,用戶可以使用JSI導(dǎo)入函數(shù),按需導(dǎo)入那些頁面上直接 使用到的元素。
一些細(xì)節(jié)的想法:
初步?jīng)Q定使用jquery為其基礎(chǔ)類庫(prototype不必?fù)?dān)心,JSI可以隔離腳本沖突,不會影響到prototype用戶)。
裝載單元劃分的兩種想法:
1.按照 http://extjs.com/download/build 中描述的定制模塊劃分(可能做些文件合并,避免零碎 件的裝載開銷)
2.按照Ext內(nèi)部包劃分(Ext 下載包的packages目錄下好像已經(jīng)做了文件合并)
我個(gè)人還沒用過Ext,非常希望有Ext用戶合作。
posted @
2007-07-12 12:35 金大為 閱讀(874) |
評論 (0) |
編輯 收藏
大約兩年前私下編寫一個(gè)wiki時(shí)使用的代碼生成工具,最近想繼續(xù)這個(gè)wiki項(xiàng)目(http://sourceforge.net/projects/txdoc ),也順便吧這個(gè)代碼生成工具整理出來。
PPT見:http://www.aygfsteel.com/jindw/archive/2007/06/30/127195.html
eclipse項(xiàng)目,文件太大,SF文件發(fā)布系統(tǒng)最近問題多多,只好分成三分上傳在javaeye blog:http://jindw.javaeye.com/blog/98436
其中,代碼生成工具及一些基礎(chǔ)類庫在web/WEB-INF/lib/xdoclet-xidea-plus.jar文件中(附源碼)
目錄結(jié)構(gòu) src/main: 源文件 src/gen: 生成的源文件及配置文件 src/test: 測試類 build: ant 腳本(build.xml)、ant配置、構(gòu)建過程的臨時(shí)目錄(temp) web: web根目錄 lib: 編譯器附加類庫(如ant任務(wù)需要的lib) doc: 文檔目錄 doc/xdoclet: xdoclet參考文檔 一.創(chuàng)建持久類: 1.改類為一個(gè)有諾干屬性的簡單java類 2.為持久類打上hibernate標(biāo)記: 必要標(biāo)記:hibernate.class(指定該類為持久類,無必選屬性,可選屬性參考xdoclet文檔) hibernate.id (指定持久類主鍵,必選屬性generator-class,指定主鍵生成算法,常用算法有uuid.hex、hilo、assigned....) 常用標(biāo)記:hibernate.property(指定持久屬性,無必選屬性) hibernate.cache(預(yù)定義查詢,必選屬性 name,query) hibernate.one-to-many,hibernate.many-to-one等,指定對象關(guān)系,比較復(fù)雜,建議先看hibernate官方文檔、xdoclet文檔 3.打開項(xiàng)目下build/build.xml、運(yùn)行hibernate任務(wù),該任務(wù)將生成hibernate映射文件、hibernate dao實(shí)現(xiàn)、hibernate的spring配置,及dao配置。 其中hibernateDao實(shí)現(xiàn)常用DAO方法,并定義以后將使用的常量:如預(yù)定義查詢名、預(yù)定義查詢參數(shù)名、集合名,等等。 4.持久類的路徑一般為:src/main/{package}/po/{TableName}.java ,生成的DAO路徑為src/main/{package}/dao/{TableName}Dao.java 二.創(chuàng)建Spring服務(wù)實(shí)現(xiàn): 1.Spring服務(wù)實(shí)現(xiàn)無任何接口約束,普通java對象即可。 2.將需要使用的hibernate Dao 聲明為該服務(wù)類的屬性(spring.property標(biāo)記)。 3.為服務(wù)類打上spring標(biāo)記: 必要標(biāo)記:spring.bean(parent:對于所有需要spring事務(wù)支持的javabean,必須聲明parent屬性值為"transactionProxy"; 生成工具將根據(jù)類名為spring bean自動生成默認(rèn) id,) 常用標(biāo)記:spring.property(spring 屬性)。 spring.transaction(對于parent=transactionProxy的bean,需要為需要聲明是事務(wù)支持的方法聲明事務(wù)屬性,具體請參考xdoclet文檔) 4.打開項(xiàng)目下build/build.xml、運(yùn)行spring任務(wù),該任務(wù)將生成spring配置文件。 三.創(chuàng)建XWork Action,一般為*/action/*.java 1.Action需要實(shí)現(xiàn)com.opensymphony.xwork.Action,如果我們需要xwork的國際化支持,繼承ActionSupport基類,必然需要實(shí)現(xiàn)TextProvider接口。 2.為Action打上xwork標(biāo)記: 必要標(biāo)記:xwork.package(必要屬性有name), xwork.action(必要屬性name,表示某方法為Action方法,將映射到一個(gè)具體的url地址), xwork.result(必要屬性name,該標(biāo)記定義在定義了xwork.action的地方,可定義多個(gè),表示該Action的結(jié)果集) 常用屬性: xwork.spring-ref (屬性的set方法上,其值將從spring context中獲取) 3.為Action制作結(jié)果集頁面: 若未在 xwork.result標(biāo)記中定義value屬性,其值未ActionName+"-"+resultName,若有大寫字符,將用"-"隔開,并轉(zhuǎn)小寫; value值即未頁面地址。可以為jsp,velocity,xsl等等。 4.打開項(xiàng)目下build/build.xml、運(yùn)行xwork任務(wù),該任務(wù)將生成xwork配置文件。
posted @
2007-07-06 14:37 金大為 閱讀(1063) |
評論 (1) |
編輯 收藏
帶ID的函數(shù)表達(dá)式:
var fn = function fnid(){};
按照ECMA262定義,上面這段腳本等價(jià)于:
with ({fnid: null }){ var fn = fnid = function (){}; }
注意:fnid在with外是不可見的,但是IE沒有嚴(yán)格遵守ECMA規(guī)范(同樣的情況發(fā)生在catch語法上)。在IE上相當(dāng)于:
var fnid = function (){}; var fn = fnid;
在剛剛發(fā)布的JSA1beta上,還不能處理這個(gè)問題(新版本將這周內(nèi)發(fā)布)。同時(shí),鑒于這種語法在不同瀏覽器上表現(xiàn)不同,還是建議盡量避免使用(這點(diǎn)上,我個(gè)人還是更喜歡ie的方式)。
var語句:
太常用了,但是,沒有注意還是很容易出問題。
var 用來聲明全局或函數(shù)變量,但是,只是申明,重復(fù)申明也不能置空,范圍是函數(shù)或者全局空間,位置在函數(shù)或腳本頂端,與塊無關(guān),這些與常用高級語言區(qū)別很大。
怪癖的代碼
var vaiable = 0 ; function test(){ variable = 1 ; // 別擔(dān)心,不會改動全局變量vaiable // do .. var vaiable; // 變量申明無順序(一律置頂),只是賦值有順序。 }
常見錯(cuò)誤有:
var flag; // 這里可能有人(包括我自己)喜歡自做聰明的利用一下變量的初始值undefined while (!flag){ // 沒準(zhǔn)那個(gè)角落里面已經(jīng)給當(dāng)前函數(shù)內(nèi)同名變量給賦值了就慘了 // .. }
posted @
2007-06-30 16:47 金大為 閱讀(1267) |
評論 (3) |
編輯 收藏
已經(jīng)有一年多沒做java這塊了,今天翻出這個(gè)一年前寫的代碼生成工具,準(zhǔn)備開放出來,或許對某些人還有點(diǎn)用處。
這個(gè)代碼生成器是基于xdoclet2的改進(jìn)版。
所做工作:
* 生成Hibernate 映射文件及相應(yīng)得spring的配置文件。
* 生成Hibernate DAO 文件及命名查詢名稱常量(新)。
* 生成Spring配置文件(支持事務(wù)申明)。
* 生成xwork配置文件(增加多包及spring屬性支持)。
* 驗(yàn)證資源冗余及缺失。
先吧PPT放出來,如果有人(包括我自己)能用上再吧代碼整理一下,放出來。
ppt下載:http://www.aygfsteel.com/Files/jindw/codegen.rar
posted @
2007-06-30 08:44 金大為 閱讀(1022) |
評論 (6) |
編輯 收藏