CharlesLab.Com

04

2008.07

JAVASCRIPT 中文數字的涵式

Jul 4, 2008 by johnathan
閲讀全文  評論(0)  該篇已有 4 次訪問


以下是JAVASCRIPT涵式把阿拉伯數字變成中國數字。


function chineseNum(numstr){
        numArray='零,一,二,三,四,五,六,七,八,九,十'.split(',');
        decimalArray='個,十,百,千,萬,十,百,千,億,十,百,千,兆'.split(',');
        tmpstr=new String();
        for(counti=0;counti<numstr.toString().length;counti++){
           
            decimalPlace=numstr.toString().length-counti-1;
            if(!(decimalPlace==2  && numstr.toString().charAt(counti)!=1 && numstr.toString().length==2) &&  numstr.toString().charAt(counti)!=0){
           
                tmpstr+=numArray[numstr.toString().charAt(counti)];
            }
           
            if(decimalPlace>0 ){
            tmpstr+=decimalArray[decimalPlace];
            }
           
        }
        return tmpstr;
    }

04

2008.07

AJAX 在ie和ff接xml格式

Jul 4, 2008 by johnathan
閲讀全文  評論(1)  該篇已有 3 次訪問


瀏覽器版本不相容,是許多ajax工程師碰到最頭痛的問題了,在接收xml物件的時候ie6的.responseXML在最新的ie7不支援。而firefox常常會有xml格式不正確出現問題。以下是粗劣在不同瀏覽器接收xml物件的解決之道。

response=req.responseText.replace(/^\s+|\s+$/g,""); //1.先把接收的xml(文字格式)前後去空格
if (window.ActiveXObject){ //2.先檢查是否是ie,window.ActiveXObject是ie獨有的物件,在把接收的文字格式轉xml物件
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(response);
}else{ //3.不是ie我暫時認定是firefox,就把接收的文字格式轉xml物件
parser=new DOMParser();
xmlDoc=parser.parseFromString(response,"text/xml");
}

注釋;
1. 先把接收的xml(文字格式)前後去空格
Firefox對於xml格式的要求是很嚴格的,xml前後不可有空格,如有空格,該xml文字就不能轉成xml格式了
2. 先檢查是否是ie,window.ActiveXObject是ie獨有的物件,在把接收的文字格式轉xml物件
3. 不是ie我暫時認定是firefox,就把接收的文字格式轉xml物件。

以上的程式碼可以解決firefox和ie在ajax接收xml格式資料的差異性


fongyoung的ColdFusion心得分享
http://www.wretch.cc/blog/fongyoung/10459643


06

2008.06

coldfusion中Hash()函數的應用

Jun 6, 2008 by 當當
閲讀全文  評論(1)  該篇已有 31 次訪問


今天一開qq就發現群裏的michek提問。

 一个md5加密问题php版本:
<?php
$salt = "8092d2";
$password = 123456;
$pass = md5(md5($password).$salt);
echo "$pass";
?>
算出来的ok;
cfm版本的算出来不ok:
<cfset salt = "8092d2">
<cfset password = 123456>
<cfset pass = hash(hash(#password#)&#salt#)>
<cfoutput>#pass#</cfoutput>

why,很多人也會覺的,在語法上是沒有問題的呀,爲什麽得不到想要的加密字串呢,這是因爲大小寫的問題。由cf的hash函數產生的md5加密字串,你需要考慮它的大小寫,因爲coldfusion的大小寫無須開發者去關注的。所以很多人在使用hash的時候都會忽視大小寫問題。特別是這樣的多重加密,更是需要先轉換成小寫再進行。

所以以上問題,coldfusion的加密版本應該是:

<cfset hashedpwd = lCase(hash(lCase(hash(password)) & salt)) >

 


04

2008.06

关于cflock使用的一点心得

Jun 4, 2008 by 當當
閲讀全文   該篇已有 17 次訪問


最近经常使用到cflock就想说总结下自己使用cflock的心得给大家分享

首先在说cflock使用的时候,我想强调下为什么要使用cflock.

我们都知道sesssion,application,server的变量都有其作用域范围,并互相分享,他们这样命名是因为他们在cf server中运行的时候是被存储在内存中,各自有自己的部分去划分清楚,自己所处的范围.所有对这些变量的读写都是存放在内存中,可以响应服务器中的任何请求.那么为什么使用这些变量时,最好需要加上cflock,是因为cf是一个多线程的server,当这些session,application等变量是可以同时被多个用户访问和使用的,如果不使用cflock去划分清楚每个服务器变量的范围和权限,就有可能出现,当前一个user刚读取完一个变量,后一个user就对这个变量进行了修改value,导致应用程序的混乱,所以我们不可以忽视cflock的重要性.

那么如何正确地去使用cflock也决定了你的应用程序的性能和效率.如何让自己的程序有更好的合理性,我根据自己日常google老外写法和自己的心得,有以下总结:

1.设定服务器级变量

<cflock scope="SERVER" type="EXCLUSIVE" timeout="10">
<cfset server.myservervar="1">
</cflock>

2.读取服务器级变量

<cflock scope="SERVER" type="READONLY" timeout="10">
<cfoutput>#server.myservervar#</cfoutput>
</cflock>

请注意type="EXCLUSIVE" 和scope的属性.一个是定义你变量的操作性,一个是定义变量的作用域,如此不难理解如果需要变量是使用在session时应该这样写:

<cflock scope="SESSION" type="EXCLUSIVE" timeout="10">
<cfset session.mysessionvar="1">
</cflock>

同理application的变量也是一样的道理

<cflock scope="APPLICATION" type="EXCLUSIVE" timeout="10">
<cfset application.myappvar="1">
</cflock>

另外我们要重视怎么让cflock合理的工作,看下面的例子

不合理的demo:

<cflock scope="application" timeout="2" type="exclusive">
<cfquery name="application.qUser" datasource="#request.dsn#">
SELECT FirstName, LastName
FROM Users
WHERE UserID = #request.UserID#
</cfquery>
</cflock>

将cfquery包在lock里面

合理的操作:

1.

<cfquery name="variables.qUser" datasource="#request.dsn#">
SELECT FirstName, LastName
FROM Users
WHERE UserID = #request.UserID#
</cfquery>
<cflock scope="application" timeout="2" type="exclusive">
<cfset application.qUser=variables.qUser>
</cflock>

先设定好cfquery,再将query传给cflock控制的application变量,这才是正确的,两者的区别的就是前者把cfquery的操作放到内存上去执行.后者只是把结果存放到内存中.

2.

<cflock scope="application" timeout="2" type="readonly">
<cfquery name="qUser" datasource="#application.dsn#">
SELECT FirstName, LastName
FROM Users
WHERE UserID = #form.UserID#
</cfquery>
</cflock>

看上面的code,除了出现上面的问题外,大家是否注意到datasource="#application.dsn#",这也是可以改进的地方.虽然application的变量可以使任何页面任意执行和使用.但application变量其实和session变量一样是非常宝贵的,所以在你的application.cfm需要加载很多data的时候,我们可以将常用存储data source的application变量用lock,封锁给一个请求的变量,将其定义为application的作用去,存放在application.cfm中.

<cflock scope="application" timeout="2" type="readonly">
<cfset request.dsn=application.dsn>
</cflock>
<cfquery name="qUser" datasource="#request.dsn#">
SELECT FirstName, LastName
FROM Users
WHERE UserID = #form.UserID#
</cfquery>

另外值的一提的是cfset,这个很平常的tag,大家可能在一定程度上没有很强化的理解这个tag的含义.特别是使用它传递复杂类型数据时,比如struct,array等

特别是用cfset直接赋值application这样共享范围级别的变量.因为cfset无法传送复杂数据类型,遇到struct,array,他只是创建一个指针指向这个存储空间,所以在程序中如果经过多次赋值,那么意味着什么,意味着所有这样的变量都不是实际开放存储空间,而是都指向了application级的变量.所以操作上可以使用cf的复制函数Duplicate()来操作,以释放application.cfm,application变量的压力.

例如:<CFSET request.strDATA=application.strDATA>

可以改正为:<CFSET request.strDATA=Duplicate(application.strDATA)>


03

2008.06

Adobe又一力作,在綫文檔編輯器

Jun 3, 2008 by 當當
閲讀全文  評論(2)  該篇已有 26 次訪問


剛上綫就收到charles的email,推薦使用adobe的新作品,在綫文檔編輯器

相對于google document,我感覺它比google的操作更流暢,flex的優點都被發揮了。

沒圖沒真相 ^_^  在綫試用