轉自網路 http://ooadreason.blogspot.com/: 很吻合我的想法
物件導向設計(Object Oriented Analysis and Design)的精神在於將生活中的實際物件對應成系統裡的程式物件。簡單地說一下設計原則:
靜態物件(Data Model)的拆解原理如下:
有形的物件以一對一的原則生成Class
物件內能拆解出來的獨立物件也要有對應的Class
生成物件Class的同時為之定義一個專用的介面(提供置換用)
符合同樣介面的其他物件Class表示可以取代現在物件的位置
輸出物件(View)的拆解原理如下:
頁面、區域、欄位等等可視物件與可拆解物件以一對一的原則生成Class
生成輸出Class的同時為之定義一個專用的介面(提供置換用)
符合同樣介面的其他輸出Class表示可以取代現在物件的位置
除了靜態的物件,動態的動作(Controller)也需要拆解:
功能執行的流程邏輯由一個隱喻的Class來控制進行
每一個獨立動作視動作範圍拆解為一個方法或是另一個Class
生成動作Class的同時為之定義一個專用的介面(提供置換用)
符合同樣介面的其他物件Class表示可以取代現在物件的位置而存在
如此一來,一個功能需求實作的基本Class組成與關係大致成形。
Personal notes ~
2008年11月18日 星期二
2008年11月11日 星期二
2008年8月15日 星期五
2008年7月22日 星期二
memory_get_usage
$begin = memory_get_usage();
$foo = &new Foo();
$second = memory_get_usage();
echo "allocation time: ".( $second-$begin) . "
";
$foo = &new Foo();
$second = memory_get_usage();
echo "allocation time: ".( $second-$begin) . "
";
2008年7月21日 星期一
CLI run CI
from
http://codeigniter.com/forums/viewthread/78610/
Thanks for your help but i did a file who modify routes.php with sed (unix-command) because the OS is FreeBSD and then this file execute the index.php with the good route.
exec("sed -i.bak 's/\".*\";/\"controllers_name\";/1' ./system/application/config/routes.php",$sortie);
$argv=$_SERVER['argv'];
$argc=$_SERVER['argc'];
$str='';
for($i=1;$i<$argc;$i++)
$str=$str.' '.$argv[$i];
passthru("php index.php".$str,$s);
exit($s);
http://codeigniter.com/forums/viewthread/78610/
Thanks for your help but i did a file who modify routes.php with sed (unix-command) because the OS is FreeBSD and then this file execute the index.php with the good route.
exec("sed -i.bak 's/\".*\";/\"controllers_name\";/1' ./system/application/config/routes.php",$sortie);
$argv=$_SERVER['argv'];
$argc=$_SERVER['argc'];
$str='';
for($i=1;$i<$argc;$i++)
$str=$str.' '.$argv[$i];
passthru("php index.php".$str,$s);
exit($s);
2008年7月8日 星期二
Variable scope
http://tw2.php.net/global
Using static variables
Another important feature of variable scoping is the static variable. A static variable exists only in a local function scope, but it does not lose its value when program execution leaves this scope. Consider the following example:
Static variables also provide one way to deal with recursive functions. A recursive function is one which calls itself. Care must be taken when writing a recursive function because it is possible to make it recurse indefinitely. You must make sure you have an adequate way of terminating the recursion. The following simple function recursively counts to 10, using the static variable $count to know when to stop:
Using static variables
Another important feature of variable scoping is the static variable. A static variable exists only in a local function scope, but it does not lose its value when program execution leaves this scope. Consider the following example:
function Test()
{
$a = 0;
echo $a;
$a++;
}
?>
Static variables also provide one way to deal with recursive functions. A recursive function is one which calls itself. Care must be taken when writing a recursive function because it is possible to make it recurse indefinitely. You must make sure you have an adequate way of terminating the recursion. The following simple function recursively counts to 10, using the static variable $count to know when to stop:
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test();
}
$count--;
}
?>
-------------------------------------------------------------------------
class Foo
{
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$my_static;
}
}
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
2008年6月12日 星期四
Design Pattern 新解
轉貼
本文作者:蔡學鏞
張貼日期:3/09/01
什麼是 Design Pattern?許多人一講到 Design Pattern,就會扯到什麼建築設計,因為他們全都是看四人幫的「Design Patterns」經典本的解釋,沒消化就照單全收。 如果不能用更生活化的方式解釋 Design Pattern,我會懷疑他們是不是真的瞭解 Design Pattern 的真義。
什麼是 Pattern
Pattern 最簡單的定義是:只要是一再重複出現的事物,就是 Pattern。依照此定義,生活中就可以找到一堆 Pattern 的例子:
第四台廣告中的 Pattern:
原價 ...,現在購買只要 ...,還送你一組 ...,請馬上來電 ...,如忙線中請稍後再撥。
利用分割畫面顯示出使用前使用後的差別,來加強說服力。例如:由 C 升級到 E(註:C 和 E 不是指程式語言)。
找人現身說法:「傑瑞!感謝你介紹這套歐萊禮 Java 系列,讓我在短短的三個月內成為公司內首屈一指的 Java 專家,這實在是太神奇了!」
選舉時的 Pattern:
質疑對手 A 錢或搞婚外情
把家人通通拉上台痛哭一場以示選情告急
開口唱「愛拼才會贏」
其它像是金光黨的手法,刮刮樂詐財的技倆 ... 等,也都具有一再重複出現的特性,所以都可算是 Pattern。
電影中的 Pattern
電影中也有大量的 Pattern,請看下面的例子。
提高追殺時緊張程度的 Pattern
壞人追殺好人時,好人躲進車子,卻發現車子發不動,引擎嘎嘎作響,一面努力地繼續發動,一面念念有詞「Come on, Come one」。
壞人追殺好人時,好人衝進電梯,死命地押著 close 按鈕,脫口而出「Come on, Come one」。
許多電影都會使用上述兩個 Pattern,雖然是老掉牙的 Pattern,但每次看到這裡,總是讓我緊張得心臟病差點發作,我不得不承認這兩個 Pattern 實在是挺有效的。
增加主角殺死壞人合理性的 Pattern
電影最後,壞人和好人大對決,最後好人勝利,但是好人如果直接把壞人宰了,那好人在觀眾心中的形象就會受損,所以好人先饒壞人一條生路,但是壞人卻壞到骨子裡了, 偷偷拿出一把槍瞄準好人,說時遲那時快,好人機警地察覺,為了自保於是將壞人一槍斃命。這個 Pattern 可以讓好人有人性,又讓壞人死有餘辜。
床戲的 Pattern
不管和劇情有沒有關係,編劇和導演總愛加上一段激情的床戲。這個 Pattern 相當困擾我和我的家人,因為每次看到這裡,我們保守的一家人往往覺得很尷尬,我們所反應出來的 Pattern 是:藉口倒茶水,上廁所,打電話 ... 而離座避風頭 ... 但眼睛仍不時偷瞄。
恐怖片的 Pattern
無須我舉例,電影驚聲尖叫(Scream)第一集就為我們剖析出恐怖片的一大堆 Pattern。
公式化
好萊塢的電影比較多 Pattern,而歐洲的電影比較少 Pattern。至於昆丁塔倫提諾(Quentin Tarantino)編導的電影,完全是不按排理出牌,很難找到 Pattern。正因為好萊塢的電影很容易就可以找出 Pattern,所以常常會有似曾相似的感覺。許多人批評好萊塢的電影很「公式化」。
基本上,Pattern 就是一種公式化的表現。那麼,究竟公式化是不是好事?
以藝術來說,公式化的結果會造成僵化,所以負面效果居多。電影號稱是「第八藝術」,也是一種藝術創作,所以最好不要出現太多 Pattern,否則肯定被影評人痛批「了無新意」。
以工程來說,公式化是好事。這些公式都是「千錘百鍊」的結果,運用這些公式可以確保工程具備一定的品質,並加快工程的進行。而軟體開發也是一項工程,也需要盡量運用公式。 (軟體另有需要藝術的一面,這不在本文的討論範圍)。
什麼是 Design Pattern
所以,Pattern 就是一種「千錘百鍊」的智慧結晶。有經驗的專家和沒經驗的新手,差別就在於:有經驗的專家知道如何在適當的時機,套用某些公式(Pattern)以解決特定 的問題,這是專家經年累月所培養出來的 Know-How(請參見「軟體產業的知識經濟」一文)。
一般來說,物件導向軟體開發的程序可以粗略分成 OOA(物件導向分析)、OOD(物件導向設計)、OOP(物件導向實作)。在 OOD(Object-Oriented Design)階段所採用的 Pattern 就稱為 Design Pattern。運用良好的 Design Pattern,可以使得系統架構更優良(也更快完成),對於後續的 OOP、測試、維護,都會有很大的 幫助。Design Pattern 會告訴你,什麼情況下用 Delegation 而不要用繼承、什麼情況下用 Interface 而不要用 Class... 諸如此類的知識。這些都是軟體界前輩的智慧結晶。
我要強調 Design Pattern 專指 Design 時期的 Pattern。但是 Coding 時的 Pattern(例如程式碼內縮)最好不要稱為 Pattern,以免混淆。Coding 時期的 Pattern 最好稱為 Coding Style(或 Code Style)。
Design Pattern 這個名詞也可沿用到許多地方。我認為孫子兵法就是一本軍事領域 Design Pattern 的書,它告訴你什麼時候該採什麼樣的軍事動作。至於怎麼去砍人,則是屬於 implementation 的部分,不屬於孫子兵法的範圍。
什麼是 Anti-Pattern
並非所有的 Pattern 都是好的,不好的 Pattern 稱為 Anti-Pattern。如果你的系統中出現了 Anti-Pattern,就表示你犯了別人「常犯的典型錯誤」。簡言之,Anti-Pattern 就是錯誤的示範,要盡量避免。
讓 Design Pattern 成為你的不時之需
許多人在設計階段才來喟嘆:「 Pattern 到用時方恨少。」其實你可以避免這樣的情況。現在市面上有許多本 Design Pattern 和 Anti-Pattern 的書。只要好好把這些書讀過,體會每個 Pattern 的真正涵義,你可以在短短的時間內,功力激增一甲子。即使讀過的 Design Pattern,如果比較少用,一陣子之後也可能會忘記。 所以最好能隔一陣子就把 Design Pattern 的書拿出來複習。
本文作者:蔡學鏞
張貼日期:3/09/01
什麼是 Design Pattern?許多人一講到 Design Pattern,就會扯到什麼建築設計,因為他們全都是看四人幫的「Design Patterns」經典本的解釋,沒消化就照單全收。 如果不能用更生活化的方式解釋 Design Pattern,我會懷疑他們是不是真的瞭解 Design Pattern 的真義。
什麼是 Pattern
Pattern 最簡單的定義是:只要是一再重複出現的事物,就是 Pattern。依照此定義,生活中就可以找到一堆 Pattern 的例子:
第四台廣告中的 Pattern:
原價 ...,現在購買只要 ...,還送你一組 ...,請馬上來電 ...,如忙線中請稍後再撥。
利用分割畫面顯示出使用前使用後的差別,來加強說服力。例如:由 C 升級到 E(註:C 和 E 不是指程式語言)。
找人現身說法:「傑瑞!感謝你介紹這套歐萊禮 Java 系列,讓我在短短的三個月內成為公司內首屈一指的 Java 專家,這實在是太神奇了!」
選舉時的 Pattern:
質疑對手 A 錢或搞婚外情
把家人通通拉上台痛哭一場以示選情告急
開口唱「愛拼才會贏」
其它像是金光黨的手法,刮刮樂詐財的技倆 ... 等,也都具有一再重複出現的特性,所以都可算是 Pattern。
電影中的 Pattern
電影中也有大量的 Pattern,請看下面的例子。
提高追殺時緊張程度的 Pattern
壞人追殺好人時,好人躲進車子,卻發現車子發不動,引擎嘎嘎作響,一面努力地繼續發動,一面念念有詞「Come on, Come one」。
壞人追殺好人時,好人衝進電梯,死命地押著 close 按鈕,脫口而出「Come on, Come one」。
許多電影都會使用上述兩個 Pattern,雖然是老掉牙的 Pattern,但每次看到這裡,總是讓我緊張得心臟病差點發作,我不得不承認這兩個 Pattern 實在是挺有效的。
增加主角殺死壞人合理性的 Pattern
電影最後,壞人和好人大對決,最後好人勝利,但是好人如果直接把壞人宰了,那好人在觀眾心中的形象就會受損,所以好人先饒壞人一條生路,但是壞人卻壞到骨子裡了, 偷偷拿出一把槍瞄準好人,說時遲那時快,好人機警地察覺,為了自保於是將壞人一槍斃命。這個 Pattern 可以讓好人有人性,又讓壞人死有餘辜。
床戲的 Pattern
不管和劇情有沒有關係,編劇和導演總愛加上一段激情的床戲。這個 Pattern 相當困擾我和我的家人,因為每次看到這裡,我們保守的一家人往往覺得很尷尬,我們所反應出來的 Pattern 是:藉口倒茶水,上廁所,打電話 ... 而離座避風頭 ... 但眼睛仍不時偷瞄。
恐怖片的 Pattern
無須我舉例,電影驚聲尖叫(Scream)第一集就為我們剖析出恐怖片的一大堆 Pattern。
公式化
好萊塢的電影比較多 Pattern,而歐洲的電影比較少 Pattern。至於昆丁塔倫提諾(Quentin Tarantino)編導的電影,完全是不按排理出牌,很難找到 Pattern。正因為好萊塢的電影很容易就可以找出 Pattern,所以常常會有似曾相似的感覺。許多人批評好萊塢的電影很「公式化」。
基本上,Pattern 就是一種公式化的表現。那麼,究竟公式化是不是好事?
以藝術來說,公式化的結果會造成僵化,所以負面效果居多。電影號稱是「第八藝術」,也是一種藝術創作,所以最好不要出現太多 Pattern,否則肯定被影評人痛批「了無新意」。
以工程來說,公式化是好事。這些公式都是「千錘百鍊」的結果,運用這些公式可以確保工程具備一定的品質,並加快工程的進行。而軟體開發也是一項工程,也需要盡量運用公式。 (軟體另有需要藝術的一面,這不在本文的討論範圍)。
什麼是 Design Pattern
所以,Pattern 就是一種「千錘百鍊」的智慧結晶。有經驗的專家和沒經驗的新手,差別就在於:有經驗的專家知道如何在適當的時機,套用某些公式(Pattern)以解決特定 的問題,這是專家經年累月所培養出來的 Know-How(請參見「軟體產業的知識經濟」一文)。
一般來說,物件導向軟體開發的程序可以粗略分成 OOA(物件導向分析)、OOD(物件導向設計)、OOP(物件導向實作)。在 OOD(Object-Oriented Design)階段所採用的 Pattern 就稱為 Design Pattern。運用良好的 Design Pattern,可以使得系統架構更優良(也更快完成),對於後續的 OOP、測試、維護,都會有很大的 幫助。Design Pattern 會告訴你,什麼情況下用 Delegation 而不要用繼承、什麼情況下用 Interface 而不要用 Class... 諸如此類的知識。這些都是軟體界前輩的智慧結晶。
我要強調 Design Pattern 專指 Design 時期的 Pattern。但是 Coding 時的 Pattern(例如程式碼內縮)最好不要稱為 Pattern,以免混淆。Coding 時期的 Pattern 最好稱為 Coding Style(或 Code Style)。
Design Pattern 這個名詞也可沿用到許多地方。我認為孫子兵法就是一本軍事領域 Design Pattern 的書,它告訴你什麼時候該採什麼樣的軍事動作。至於怎麼去砍人,則是屬於 implementation 的部分,不屬於孫子兵法的範圍。
什麼是 Anti-Pattern
並非所有的 Pattern 都是好的,不好的 Pattern 稱為 Anti-Pattern。如果你的系統中出現了 Anti-Pattern,就表示你犯了別人「常犯的典型錯誤」。簡言之,Anti-Pattern 就是錯誤的示範,要盡量避免。
讓 Design Pattern 成為你的不時之需
許多人在設計階段才來喟嘆:「 Pattern 到用時方恨少。」其實你可以避免這樣的情況。現在市面上有許多本 Design Pattern 和 Anti-Pattern 的書。只要好好把這些書讀過,體會每個 Pattern 的真正涵義,你可以在短短的時間內,功力激增一甲子。即使讀過的 Design Pattern,如果比較少用,一陣子之後也可能會忘記。 所以最好能隔一陣子就把 Design Pattern 的書拿出來複習。
2008年5月19日 星期一
Class , Array , Composite Implement and Practice
1 . class attribute => array
=>$this->a['a'];
class c
{
var $a = array('a'=>'aa','b'=>'ab');
var $b = 'c';
function show()
{
echo $this->a['a']; // -> 1st
echo $this->a['b']; // outputs 'ab'
$a = 'a';
$b = 'b';
echo $this->$a[$a]; // [] 1st, not what I expected
//Above first becomes $this->$a['a'] by looking at the function's local $a
//Next it becomes $this->a by again looking at the function's local $a, which references the class variable $a with no subscripts.
// In order to reference elements of the class variable $a,
// you want to use $this->a[$a]
echo $this->$a[$b]; // does NOT output 'ab'
// Same as above, but the first step $b becomes 'b'
$this_a =& $this->$a; // work-around
echo $this_a[$a]; // no question
echo $this_a[$b];
$a_arr = array('a'=>'b');
echo $this->$a_arr[$a]; // [] 1st => outputs 'c'
// This becomes $this->$a_arr['a'] which becomes $this->c,
// by referencing the local variables first.
}
}
$c = new c();
$c->show();
?>
2. array 0=>object
class test{
var $go =5;
var $go1 =15;
var $go2 =25;
}
class test2{
var $go =5;
var $go1 =15;
var $go2 =25;
}
$array = Array(new test,new test2);
Array ( [0] => test Object ( [go] => 5 [go1] => 15 [go2] => 25 ) [1] => test2 Object ( [go] => 5 [go1] => 15 [go2] => 25 ) )
=>$this->a['a'];
class c
{
var $a = array('a'=>'aa','b'=>'ab');
var $b = 'c';
function show()
{
echo $this->a['a']; // -> 1st
echo $this->a['b']; // outputs 'ab'
$a = 'a';
$b = 'b';
echo $this->$a[$a]; // [] 1st, not what I expected
//Above first becomes $this->$a['a'] by looking at the function's local $a
//Next it becomes $this->a by again looking at the function's local $a, which references the class variable $a with no subscripts.
// In order to reference elements of the class variable $a,
// you want to use $this->a[$a]
echo $this->$a[$b]; // does NOT output 'ab'
// Same as above, but the first step $b becomes 'b'
$this_a =& $this->$a; // work-around
echo $this_a[$a]; // no question
echo $this_a[$b];
$a_arr = array('a'=>'b');
echo $this->$a_arr[$a]; // [] 1st => outputs 'c'
// This becomes $this->$a_arr['a'] which becomes $this->c,
// by referencing the local variables first.
}
}
$c = new c();
$c->show();
?>
2. array 0=>object
class test{
var $go =5;
var $go1 =15;
var $go2 =25;
}
class test2{
var $go =5;
var $go1 =15;
var $go2 =25;
}
$array = Array(new test,new test2);
Array ( [0] => test Object ( [go] => 5 [go1] => 15 [go2] => 25 ) [1] => test2 Object ( [go] => 5 [go1] => 15 [go2] => 25 ) )
2008年4月9日 星期三
RIA
Adobe的RIA開發工具加入排版(Layout)的概念,使得過去很麻煩的介面設計,更為彈性。例如開發人員可以設定參考線,讓應用程式中的物件依據參考線自動對齊,不需每次手動改變畫面配置。
RIA開發的困難是,使用者行為是變動的,不像過去的系統是固定的,過去開發人員面對系統,規格是可控制的,但是現在面對使用者,無法限制使用者的行為,過去Client-Server的開發概念不能完全套用在RIA的開發,「RIA不只是炫,開發人員必須先思考如何讓程式容易使用,才能開發出好的RIA應用。」
Adobe - Adobe Flex
Rich Internet Application (2002 Macromedia , 2005被併購)
=>讓網頁具備傳統桌面軟體的行為與功能
Web Player : Flash Player、Shockwave
Develop Tools : Studio MX , Macromedia MX ,Interface : ColdFusion ,Integration : Flex , Apollo
Microsoft - Silverlight
Rich Interactive Application
Develop tools : ASP.NET、ASP.NET AJAX、JavaScript、WCF、WorkFlow
RIA開發的困難是,使用者行為是變動的,不像過去的系統是固定的,過去開發人員面對系統,規格是可控制的,但是現在面對使用者,無法限制使用者的行為,過去Client-Server的開發概念不能完全套用在RIA的開發,「RIA不只是炫,開發人員必須先思考如何讓程式容易使用,才能開發出好的RIA應用。」
Adobe - Adobe Flex
Rich Internet Application (2002 Macromedia , 2005被併購)
=>讓網頁具備傳統桌面軟體的行為與功能
Web Player : Flash Player、Shockwave
Develop Tools : Studio MX , Macromedia MX ,Interface : ColdFusion ,Integration : Flex , Apollo
Microsoft - Silverlight
Rich Interactive Application
Develop tools : ASP.NET、ASP.NET AJAX、JavaScript、WCF、WorkFlow
2008年4月4日 星期五
ZK Ajax框架
轉自 http://scw1109.wordpress.com/2006/07/13/zk-ajax-but-no-javascript/
如果要開發大型的 Ajax 專案非常值得考慮使用。
ZK 的假想敵是 Echo2,
ZK 認為 Echo2 使用的 Swing like 開發方式,是在假設開發人員都用過 Swing。
而我個人也是非常反對這點,因為這樣美工人員完全無法進場。
ZK 本身使用的是標準 XUL (XML User Interface Language) 的擴充稱為 ZUL,我目前沒有去了解 XUL 跟 ZUL 的差別有多少,但看起來差異不是很大。
ZK 也是一個 Java-based 的 framework,跟大部份的 Java web application framework 一樣,由一個 front controller servlet 去接所有 *.zul 的 request,server 會把 parse 成 html。而 ZUL 的語法大概如下:
Hello, World!
不難想像還會有 button, checkbox 等 ZUL 元件,這點跟 JSF 或是 OpenLaszlo 倒是差異不大。ZUL 的 tag 本身可以使用 css 或是 javascript。
在大型的 Ajax 專案裡,講究的是有沒有一個夠強的 framework 提供足夠的基礎元件、讓美工與開發人員簡便的合作。上面提到的幾個 framework:ZK、Echo2、JSF 和 OpenLaszlo,第一個出局的是 Echo2,不管它做得怎麼強大,網頁美工絕對不能拿來當 Swing 搞。第二個有問題的是 JSF,JSF 在 Struts 的影子之下,後端雖然強大,但前端仍然很少著墨。規範中前端的元件少得可憐,如果要找免費好用的元件恐怕不是很容易。再說 JSF 對 Ajax 支援有限,而且用起來綁手綁腳的,如果只是為了 Ajax 是沒必要跟自己過不去。OpenLaszlo 已經是很成熟的東西了,觀念上跟 ZK 非常接近,同一份 code 能產生 Flash 跟 DHTML 兩種模式實在是讓人讚嘆。只是用的是獨規的語法,比起 ZK 用類 XUL 的語法好像差了一些。在切割 MVC 這三件事上面 OpenLaszlo 也有點模糊不清,而且以我對 OpenLaszlo 粗淺的了解,沒有看到 control tag,反之 ZK 對於 if condition, iterating 等等都有考量到,這也是 ZK 優勢所在。ZK 還有一個好處是看來 extends 它的 class 或是做 custom 的元件不是很難。但是 OpenLaszlo UI event 直接 call Web Service 的模式可謂是 SOA 的奧義,非常有用。
總合以上,我覺得 ZK 跟 OpenLaszlo 都是很值得考慮使用的。可能你會發現怎麼沒提到 Dojo?因為 Dojo 現在已經成為 JavaScript component 的地下標準了,每家都讚助它,使用它。ZK 已經結合 Dojo,OpenLaszlo 也有在做這件事。看完 ZK 跟 OpenLaszlo,JSF 又再被我打入冷宮了,我寧可用 Spring Web Flow 去把 ZK 或 OpenLaszlo 的頁面接起來也不想用那一大包沒多少建設的東西。要不就使用奧義:OpenLaszlo + BPEL + ESB 往軟體工程的烏托邦前進。可惜的是 Gavin King 的 JBoss Seam 綁死用 JSF,就連帶被判出局了。之前有人做一個 HSE (Hibernate + Spring + Echo2) 的 framework,是時候來做 OLSH (OpenLaszlo + Spring + Hibernate) 或是 ZSH (ZK + Spring + Hibernate) 了。
資策會推廣ZK Ajax框架,為臺灣研發軟體扎根
文/黃彥棻 (記者) 2008-04-04
資策會與普奇科技合作,將於4月下旬首度推出由臺灣自行研發、揚名全球的ZK Ajax框架的技術解析與實戰課程,適合Java開發工程師學習。
由臺灣軟體公司普奇科技自行開發的ZK Ajax框架,不僅獲得財星前500大公司,包括巴克利銀行、昇陽、朗訊等公司的採用,更是Open Source網站SourceForge.net在Ajax分類中,下載第一名的開源軟體。為了推廣開源軟體的使用,並推廣臺灣自行研發的Ajax框架,資策會數位教育研究所將於4月下旬,首度推出ZK核心技術解析與實戰的推廣課程。
資策會數位教育研究所教學組長蘇國鈞,同時也是資策會Java課程的授課講師。他表示,一般的Java開發工程師相較於微軟.NET開發工程師,更習慣使用各種開源軟體做開發工具。而近兩年相當普遍的Ajax框架,因為具有豐富的前端動態效果,頗受開發人員青睞。
蘇國鈞在使用過ZK Ajax框架後,發現ZK解決了不同瀏覽器的JavaScript語言版本不同的問題。基於推廣開源軟體,加上ZK原廠普奇科技也希望能在臺灣推廣這一套Ajax框架,資策會決定推出ZK相關課程。
目前資策會數位教育研究所在臺北、中壢、臺中和高雄都有訓練中心,「希望至少能培訓3~4名種子講師,以應未來其他地區的開課需求。」蘇國鈞說。從整個課程規畫來看,蘇國鈞表示,ZK適合Java開發工程師進一步學習。
ZK Ajax的框架在SourceForge.net的Ajax分類上,下載已經超過60萬次,名列Ajax類別第一名,不分類的下載次數也是前5名。普奇科技ZK產品經理顏瑾和表示,ZK這麼受歡迎的原因在於簡單上手、表現豐富及擴張性強。
很多Ajax框架都必須使用JavaScript語言,而ZK是一個伺服器端的Ajax框架,蘇國鈞表示,這可以打破以往前端需要表現動態效果時,必須配合不同瀏覽器撰寫不同JavaScript的難題。顏瑾和則表示,使用ZK框架開發所有Web端的應用程式,只需要專心寫伺服器端的Java程式,不僅上手容易,也可以直接呼叫資料庫的資料,再加上所有商業邏輯都不會傳送到用戶端,也沒有被網路攔截的疑慮,也顯得較為安全。
「ZK至少有超過170種基本元件,」顏瑾和說, ZK也將其他一些好用的開放源碼工具包在ZK的擴充元件中,也使得ZK能有非常豐富的表現。ZK框架對程式開發者而言,最大的優點在於能彈性擴充,顏瑾和舉例,如果開發工程師使用JSF的平臺,若需要ZK某一些功能,可以彈性採取類似插卡的方式,在頁面上插入JSF的自動元件即可。
資策會在這一次的課程中,則會設計一個實機操作的課程內容,會利用ZK相關的元件和工具完成一個美食地圖。顏瑾和表示,主要會運用ZK有3個重要的元件,包括ZK Google Maps、Border Layout和Data Binding,完成一個美食地圖。
顏瑾和進一步指出,ZK Google Maps具有滑鼠拖拉、即時顯示的特色,能完成美食地圖的地圖呈現部分。再者,Border Layout則能夠分割功能責任區塊,完成美食地圖框架,可以依照不同目的作動態呈現。最後,Data Binding可以動態連結Java Bean和ZK的使用者介面(UI),連結ZK UI的後端資料模型。文⊙黃彥棻
ZK美食地圖3元件功能說明一覽表
元件名稱 ZK Google Maps Border Layout Data Binding
功能 拖拉,放大縮小,座標指定,標記特徵點 排版、設計、分割功能責任區塊 動態連結Data Model (Java Bean)與ZK的 UI部分
角色 完成美食地圖的地圖呈現部分,使用Google Map所提供的眾多功能 完成美食地圖的框架, 達成依目的不同而動態呈現的需求 連結ZK UI 元件與後端資料模型
優點 ● 快速以XML標籤方式宣告Gmap物件
● 數行程式碼可寫出Ajax的地圖應用 ● 直覺式呈現方式
● 可以動態調整版面寬度與高度 ● 可快速結合前端 UI與後端商業邏輯
● 可自動管Java Bean Setter與Getter行為
資料來源:普奇科技,2008年4月
如果要開發大型的 Ajax 專案非常值得考慮使用。
ZK 的假想敵是 Echo2,
ZK 認為 Echo2 使用的 Swing like 開發方式,是在假設開發人員都用過 Swing。
而我個人也是非常反對這點,因為這樣美工人員完全無法進場。
ZK 本身使用的是標準 XUL (XML User Interface Language) 的擴充稱為 ZUL,我目前沒有去了解 XUL 跟 ZUL 的差別有多少,但看起來差異不是很大。
ZK 也是一個 Java-based 的 framework,跟大部份的 Java web application framework 一樣,由一個 front controller servlet 去接所有 *.zul 的 request,server 會把 parse 成 html。而 ZUL 的語法大概如下:
Hello, World!
不難想像還會有 button, checkbox 等 ZUL 元件,這點跟 JSF 或是 OpenLaszlo 倒是差異不大。ZUL 的 tag 本身可以使用 css 或是 javascript。
在大型的 Ajax 專案裡,講究的是有沒有一個夠強的 framework 提供足夠的基礎元件、讓美工與開發人員簡便的合作。上面提到的幾個 framework:ZK、Echo2、JSF 和 OpenLaszlo,第一個出局的是 Echo2,不管它做得怎麼強大,網頁美工絕對不能拿來當 Swing 搞。第二個有問題的是 JSF,JSF 在 Struts 的影子之下,後端雖然強大,但前端仍然很少著墨。規範中前端的元件少得可憐,如果要找免費好用的元件恐怕不是很容易。再說 JSF 對 Ajax 支援有限,而且用起來綁手綁腳的,如果只是為了 Ajax 是沒必要跟自己過不去。OpenLaszlo 已經是很成熟的東西了,觀念上跟 ZK 非常接近,同一份 code 能產生 Flash 跟 DHTML 兩種模式實在是讓人讚嘆。只是用的是獨規的語法,比起 ZK 用類 XUL 的語法好像差了一些。在切割 MVC 這三件事上面 OpenLaszlo 也有點模糊不清,而且以我對 OpenLaszlo 粗淺的了解,沒有看到 control tag,反之 ZK 對於 if condition, iterating 等等都有考量到,這也是 ZK 優勢所在。ZK 還有一個好處是看來 extends 它的 class 或是做 custom 的元件不是很難。但是 OpenLaszlo UI event 直接 call Web Service 的模式可謂是 SOA 的奧義,非常有用。
總合以上,我覺得 ZK 跟 OpenLaszlo 都是很值得考慮使用的。可能你會發現怎麼沒提到 Dojo?因為 Dojo 現在已經成為 JavaScript component 的地下標準了,每家都讚助它,使用它。ZK 已經結合 Dojo,OpenLaszlo 也有在做這件事。看完 ZK 跟 OpenLaszlo,JSF 又再被我打入冷宮了,我寧可用 Spring Web Flow 去把 ZK 或 OpenLaszlo 的頁面接起來也不想用那一大包沒多少建設的東西。要不就使用奧義:OpenLaszlo + BPEL + ESB 往軟體工程的烏托邦前進。可惜的是 Gavin King 的 JBoss Seam 綁死用 JSF,就連帶被判出局了。之前有人做一個 HSE (Hibernate + Spring + Echo2) 的 framework,是時候來做 OLSH (OpenLaszlo + Spring + Hibernate) 或是 ZSH (ZK + Spring + Hibernate) 了。
資策會推廣ZK Ajax框架,為臺灣研發軟體扎根
文/黃彥棻 (記者) 2008-04-04
資策會與普奇科技合作,將於4月下旬首度推出由臺灣自行研發、揚名全球的ZK Ajax框架的技術解析與實戰課程,適合Java開發工程師學習。
由臺灣軟體公司普奇科技自行開發的ZK Ajax框架,不僅獲得財星前500大公司,包括巴克利銀行、昇陽、朗訊等公司的採用,更是Open Source網站SourceForge.net在Ajax分類中,下載第一名的開源軟體。為了推廣開源軟體的使用,並推廣臺灣自行研發的Ajax框架,資策會數位教育研究所將於4月下旬,首度推出ZK核心技術解析與實戰的推廣課程。
資策會數位教育研究所教學組長蘇國鈞,同時也是資策會Java課程的授課講師。他表示,一般的Java開發工程師相較於微軟.NET開發工程師,更習慣使用各種開源軟體做開發工具。而近兩年相當普遍的Ajax框架,因為具有豐富的前端動態效果,頗受開發人員青睞。
蘇國鈞在使用過ZK Ajax框架後,發現ZK解決了不同瀏覽器的JavaScript語言版本不同的問題。基於推廣開源軟體,加上ZK原廠普奇科技也希望能在臺灣推廣這一套Ajax框架,資策會決定推出ZK相關課程。
目前資策會數位教育研究所在臺北、中壢、臺中和高雄都有訓練中心,「希望至少能培訓3~4名種子講師,以應未來其他地區的開課需求。」蘇國鈞說。從整個課程規畫來看,蘇國鈞表示,ZK適合Java開發工程師進一步學習。
ZK Ajax的框架在SourceForge.net的Ajax分類上,下載已經超過60萬次,名列Ajax類別第一名,不分類的下載次數也是前5名。普奇科技ZK產品經理顏瑾和表示,ZK這麼受歡迎的原因在於簡單上手、表現豐富及擴張性強。
很多Ajax框架都必須使用JavaScript語言,而ZK是一個伺服器端的Ajax框架,蘇國鈞表示,這可以打破以往前端需要表現動態效果時,必須配合不同瀏覽器撰寫不同JavaScript的難題。顏瑾和則表示,使用ZK框架開發所有Web端的應用程式,只需要專心寫伺服器端的Java程式,不僅上手容易,也可以直接呼叫資料庫的資料,再加上所有商業邏輯都不會傳送到用戶端,也沒有被網路攔截的疑慮,也顯得較為安全。
「ZK至少有超過170種基本元件,」顏瑾和說, ZK也將其他一些好用的開放源碼工具包在ZK的擴充元件中,也使得ZK能有非常豐富的表現。ZK框架對程式開發者而言,最大的優點在於能彈性擴充,顏瑾和舉例,如果開發工程師使用JSF的平臺,若需要ZK某一些功能,可以彈性採取類似插卡的方式,在頁面上插入JSF的自動元件即可。
資策會在這一次的課程中,則會設計一個實機操作的課程內容,會利用ZK相關的元件和工具完成一個美食地圖。顏瑾和表示,主要會運用ZK有3個重要的元件,包括ZK Google Maps、Border Layout和Data Binding,完成一個美食地圖。
顏瑾和進一步指出,ZK Google Maps具有滑鼠拖拉、即時顯示的特色,能完成美食地圖的地圖呈現部分。再者,Border Layout則能夠分割功能責任區塊,完成美食地圖框架,可以依照不同目的作動態呈現。最後,Data Binding可以動態連結Java Bean和ZK的使用者介面(UI),連結ZK UI的後端資料模型。文⊙黃彥棻
ZK美食地圖3元件功能說明一覽表
元件名稱 ZK Google Maps Border Layout Data Binding
功能 拖拉,放大縮小,座標指定,標記特徵點 排版、設計、分割功能責任區塊 動態連結Data Model (Java Bean)與ZK的 UI部分
角色 完成美食地圖的地圖呈現部分,使用Google Map所提供的眾多功能 完成美食地圖的框架, 達成依目的不同而動態呈現的需求 連結ZK UI 元件與後端資料模型
優點 ● 快速以XML標籤方式宣告Gmap物件
● 數行程式碼可寫出Ajax的地圖應用 ● 直覺式呈現方式
● 可以動態調整版面寬度與高度 ● 可快速結合前端 UI與後端商業邏輯
● 可自動管Java Bean Setter與Getter行為
資料來源:普奇科技,2008年4月
2008年3月30日 星期日
Perl的6大應用面向
轉自 ITHOME
文/黃彥棻 (記者) 2008-01-25
Perl不只用在IT系統,連生物基因分析、會計統計分析、IC設計所使用的工具和IT設備管理語言,都支援Perl或用Perl撰寫。
Perl的6大應用面向
● IT設備的管理軟體
● 生物基因分析
● IC設計工具支援Perl
● 會計統計資料分析
● 資料庫人員(Oracle、SAP等)
● 駭客做病毒或程式破解碼
資料來源:奇科電腦,iThome整理,2008年1月
許多人對程式語言的了解,大抵不脫C、C++、Java、VB或.NET等常見的程式語言。這些程式語言的用途,也多數用於相關IT系統開發與應用上。不過,有一種程式語言號稱學習容易上手,應用範圍除了可用來寫IT系統的指令外,更常用於生物基因分析、大量資料統計分析等。這個程式語言就是Perl。目前,臺灣只有奇科電腦開設Perl語言相關課程。
奇科電腦總經理賴玉斌曾經在美國思科(Cisco)公司工作10年之久,他說:「Perl語言能力是在美國工作必備的能力之一。」他強調,在許多外商IT公司工作,精通並善用Perl語言,可以做到員工生產力的提升,舉例而言,很多IT設備都會販售專屬的管理軟體(Management Console),但不見得每間公司都有足夠的預算,購買售價高達數十萬或上百萬元的管理軟體。賴玉斌說,一個比較快的替代方案就是,用Perl寫一個指令,讓人員管理這些設備。
在美國Amazon、Yahoo都大量使用Perl,但反觀臺灣,對於Perl的了解非常淺薄,不僅企業界不了解Perl好用之處,連學習的人也不多。「不了解Perl不代表沒有需求,」賴玉斌說,所以奇科才開設Perl相關課程,藉此推廣Perl語言。Perl就是Practical Extraction Report Language,1981年由Larry Wall教授開始設計、發展。相較於其他程式語言而言,賴玉斌表示,Perl這個腳本語言(Script Language),是一個強調務實、直譯式的開發語言,程式語言怎麼寫、就怎麼執行,其特色在於:針對大量文字、二進位數字等資料,能從中取出資訊並做成報表。
因為Perl強調務實,容易使用、有效率而且完整,賴玉斌說,對於學程式有恐懼、非科班出身的人,Perl是非常好的入門學習程式開發的語言。Perl的名言就是:「只要2周就可以達到60%撰寫功力,但從60%~80%功力,卻需要5年的時間。」但是,「這60%的功力對於絕大多數的應用而言,都已經相當足夠了。」他說。全世界第1支DVD破解程式只有7行,就是用Perl撰寫的程式語言。賴玉斌說,「有很多駭客都會學Perl語言,主要目的是寫蠕蟲(Worm)程式。」
臺灣企業IT部門或者IT工作者對於Perl的了解並不深,不過,有其他行業對於Perl這種能夠針對大量文字、數字作分析能力,有急迫性的需要。最好的例子就是生物的基因分析。賴玉斌表示,生物學的基因分析,需要跟全世界的基因資料庫做大量資料比對,若要從C語言一行一行撰寫比對功能,甚至還要沒有錯誤,是一項非常艱鉅的挑戰。
不過,生物學界本來就有一個用Perl語言撰寫的BioPerl模組,就是用來解決大量資料比對時的效率問題。他說,目前上Perl課程的人,有很多都是生物研究、基因研究或者醫療衛生相關行業的研究學者或學生,重點在於學會寫程式作基因比對,「程式寫得好,基因比對就不需要用人比對,」賴玉斌說。
除了生物分析之外,有一些IC設計的工具也開始支援Perl,用來作數值分析和比對,因此,有一些IC設計研發人員也開始學Perl。而會計系需要做大量的統計資料和數字分析,賴玉斌說,很多終端分析需要懂Perl來做資料分析,如果是一些客製化的會計軟體,也需要懂Perl做客製化。許多IT設備的軟體也都是由Perl撰寫的,賴玉斌說,即使對設備、網路拓樸有了解,還是得花時間設定完成,但若懂得用寫程式語言來跑程式,有助於生產效能的提升、成本的降低。
賴玉斌表示,DVD破解檔是Perl撰寫的,連全球受害的紅色警戒(Code Red)病毒,也是用Perl撰寫。更有甚者,「資料庫人員都應該要懂Perl,」賴玉斌指出,甲骨文資料庫或SAP,甚至有自己專屬的Perl語言,是真正Perl的小集合。即便是許多用PHP的網站開發,還得處理許多網頁文字和數據分析,賴玉斌表示,很多C語言在做正規表示法時,都會直接納入Perl的函示庫(Library)來處理一些文字和數據,「這儼然成為一種趨勢,」他說。
根據TIOBE開發語言排行榜日前公布2008年初統計結果中,Java和C#最受歡迎,受到Python(第6名)流行指數急遽攀升影響,Perl(第7名)排名遭到排擠。賴玉斌指出,Python也是一個高階、跨平臺、易學習的動態語言,但在文字和數據處理能力上,Python仍難望Perl項背。文⊙黃彥棻
文/黃彥棻 (記者) 2008-01-25
Perl不只用在IT系統,連生物基因分析、會計統計分析、IC設計所使用的工具和IT設備管理語言,都支援Perl或用Perl撰寫。
Perl的6大應用面向
● IT設備的管理軟體
● 生物基因分析
● IC設計工具支援Perl
● 會計統計資料分析
● 資料庫人員(Oracle、SAP等)
● 駭客做病毒或程式破解碼
資料來源:奇科電腦,iThome整理,2008年1月
許多人對程式語言的了解,大抵不脫C、C++、Java、VB或.NET等常見的程式語言。這些程式語言的用途,也多數用於相關IT系統開發與應用上。不過,有一種程式語言號稱學習容易上手,應用範圍除了可用來寫IT系統的指令外,更常用於生物基因分析、大量資料統計分析等。這個程式語言就是Perl。目前,臺灣只有奇科電腦開設Perl語言相關課程。
奇科電腦總經理賴玉斌曾經在美國思科(Cisco)公司工作10年之久,他說:「Perl語言能力是在美國工作必備的能力之一。」他強調,在許多外商IT公司工作,精通並善用Perl語言,可以做到員工生產力的提升,舉例而言,很多IT設備都會販售專屬的管理軟體(Management Console),但不見得每間公司都有足夠的預算,購買售價高達數十萬或上百萬元的管理軟體。賴玉斌說,一個比較快的替代方案就是,用Perl寫一個指令,讓人員管理這些設備。
在美國Amazon、Yahoo都大量使用Perl,但反觀臺灣,對於Perl的了解非常淺薄,不僅企業界不了解Perl好用之處,連學習的人也不多。「不了解Perl不代表沒有需求,」賴玉斌說,所以奇科才開設Perl相關課程,藉此推廣Perl語言。Perl就是Practical Extraction Report Language,1981年由Larry Wall教授開始設計、發展。相較於其他程式語言而言,賴玉斌表示,Perl這個腳本語言(Script Language),是一個強調務實、直譯式的開發語言,程式語言怎麼寫、就怎麼執行,其特色在於:針對大量文字、二進位數字等資料,能從中取出資訊並做成報表。
因為Perl強調務實,容易使用、有效率而且完整,賴玉斌說,對於學程式有恐懼、非科班出身的人,Perl是非常好的入門學習程式開發的語言。Perl的名言就是:「只要2周就可以達到60%撰寫功力,但從60%~80%功力,卻需要5年的時間。」但是,「這60%的功力對於絕大多數的應用而言,都已經相當足夠了。」他說。全世界第1支DVD破解程式只有7行,就是用Perl撰寫的程式語言。賴玉斌說,「有很多駭客都會學Perl語言,主要目的是寫蠕蟲(Worm)程式。」
臺灣企業IT部門或者IT工作者對於Perl的了解並不深,不過,有其他行業對於Perl這種能夠針對大量文字、數字作分析能力,有急迫性的需要。最好的例子就是生物的基因分析。賴玉斌表示,生物學的基因分析,需要跟全世界的基因資料庫做大量資料比對,若要從C語言一行一行撰寫比對功能,甚至還要沒有錯誤,是一項非常艱鉅的挑戰。
不過,生物學界本來就有一個用Perl語言撰寫的BioPerl模組,就是用來解決大量資料比對時的效率問題。他說,目前上Perl課程的人,有很多都是生物研究、基因研究或者醫療衛生相關行業的研究學者或學生,重點在於學會寫程式作基因比對,「程式寫得好,基因比對就不需要用人比對,」賴玉斌說。
除了生物分析之外,有一些IC設計的工具也開始支援Perl,用來作數值分析和比對,因此,有一些IC設計研發人員也開始學Perl。而會計系需要做大量的統計資料和數字分析,賴玉斌說,很多終端分析需要懂Perl來做資料分析,如果是一些客製化的會計軟體,也需要懂Perl做客製化。許多IT設備的軟體也都是由Perl撰寫的,賴玉斌說,即使對設備、網路拓樸有了解,還是得花時間設定完成,但若懂得用寫程式語言來跑程式,有助於生產效能的提升、成本的降低。
賴玉斌表示,DVD破解檔是Perl撰寫的,連全球受害的紅色警戒(Code Red)病毒,也是用Perl撰寫。更有甚者,「資料庫人員都應該要懂Perl,」賴玉斌指出,甲骨文資料庫或SAP,甚至有自己專屬的Perl語言,是真正Perl的小集合。即便是許多用PHP的網站開發,還得處理許多網頁文字和數據分析,賴玉斌表示,很多C語言在做正規表示法時,都會直接納入Perl的函示庫(Library)來處理一些文字和數據,「這儼然成為一種趨勢,」他說。
根據TIOBE開發語言排行榜日前公布2008年初統計結果中,Java和C#最受歡迎,受到Python(第6名)流行指數急遽攀升影響,Perl(第7名)排名遭到排擠。賴玉斌指出,Python也是一個高階、跨平臺、易學習的動態語言,但在文字和數據處理能力上,Python仍難望Perl項背。文⊙黃彥棻
2008年3月25日 星期二
in_array
$string = ‘fin_helm’;
$array = array(’full_plate’,'manteau’,'boots’,'two_handed_sword’,'fin_helm’);
if(in_array($string, $array))
{
print “$string is in the array”;
}
?>
#!/usr/bin/perl
my $string = ‘fin_helm’;
my @array = qw/full_plate manteau boots two_handed_sword fin_helm/;
if(grep $_ eq $string, @array)
{
print “$string is in the array”;
}
grep语法
grep BLOCK LIST
grep EXPR, LIST
ex:
Reference from http://mach.debagua.com/archives/2007/0622_000544.html
$shopid_list = "950272 1618616 1626010 1620041 1613047 1843905 2555854 1612225 1615202 1329343 2439204 300626 1623950 2630407 2685660 1611501 301721 1864877 1672871 302296 904914 1685735 2815106 974037 1614867 2684563 1866639 1632518 1882639 1639995 1706732 1638243 1774685 2256527 1649382 1621969 941962 974113 2768569 2561992 302559 2612701 1709907 1713725 940505 1993346 301860 2177558 1906324 1504229 1637618 1638367 2128013 1867004 911219 946878 1592792 2506425 1619153 1653338 1639030 1643759 2692553 1693809";
$tmp = "950272";
if(( $shopid_list =~ m/\b$tmp\b/g)){
}
2008年3月20日 星期四
2008年3月13日 星期四
SHA Encryption
$phrase = "Hello World";
$sha1a = base64_encode(sha1($phrase));
$sha1b = base64_encode(bin2hex(mhash(MHASH_SHA1,$phrase)));
$sha256b= base64_encode(bin2hex(mhash(MHASH_SHA256,$phrase)));
echo ("SHA1..:" . $sha1a . "\n");
echo ("SHA1..:" . $sha1b . "\n");
echo ("SHA256:" . $sha256b . "\n");
?>
2008年2月25日 星期一
目前裝的 module
#!/usr/bin/perl
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();
for (sort @modules)
{
print $_,"\n"
}
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();
for (sort @modules)
{
print $_,"\n"
}
2008年2月24日 星期日
Perl 常用的一些函式
push/pop/shift/unshift
將 Array 當作 linked list 處理
push - add values to end of array
pop - remove last value from end of array
unshift - add values to front of array
shift - remove first value from front of array
範例
push(@list, $bar);
push(@list, @rest);
$tos = pop(@list);
while ( $arg = shift(@ARGV) ) { }
unshift( @ARGV, 'zeroth arg', 'first arg');
split/join
split 能夠將一個字串以特定的分隔字串分成許多段, 並傳回一個 Array, 由於這個分隔字串是以正規表示式方式來指定, 使用上非常方便
範例
@list = split(/[, \t]+/, $expr);
範例
while () {
($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/);
}
join 則與 split 功能相反
範例
$line = join(':', $login, $passwd, $uid, $gid, $gcos, $home, $shell);
sort/reverse/grep
sort 用來將一個 array 中的元素以 Ascii 排序後, 傳回一個新的 array
ps: 在利用 sort 在對 array 排序時, 可以自訂排序的方法, 詳細的說明請看這裡
reverse 用來將一個 array 中元素以與原來相反方向排列, 傳回一個新的 array,
reverse 也可以用來將 Hash 中所有的 key 與 hash value 對調
範例
print sort @list;
@list2=reverse sort @list;
grep 會根據給定的一個正規表示式對一個 array 的所有元素作比對, 找出所有比對符合的元素, 組合成一個新的 array 傳回來
@lines=grep(!/^#/, @lines); # delete all lines starting with #
keys/vlaues/each
這三個是專門給 Hash 變數用的函式
keys 傳回一個 hash 中所有的 key 組成的 array
values 傳回一個 hash 中所有的 hash value 組成的 array
each 則是自 hash 中一次抓出一對 (key, hash value) 出來
範例
foreach $key (keys %array) {
printf "%s is %s\n", $key, $array{$key};
}
print reverse sort values %array;
while (($key,$value) = each %array) {
printf "%s is %s\n", $key, $value;
}
chop/chomp
chop 移除字串的最後一個字元, 通常都是用在從檔案輸入一行後, 移除其後的換行字元
chomp 功能與 chop 類似, 但只有當最後一個字元是換行字元時才會將其移除
範例
chop($line);
chop ($host = `hostname`);
while () {
chop;
...
}
sprintf/substr/length/crypt/index/rindex
Perl 上的這些函式基本上用法都和 C language 中同名的函數類似.
詳細的說明請看
sprintf, substr, length, crypt, index, rindex
將 Array 當作 linked list 處理
push - add values to end of array
pop - remove last value from end of array
unshift - add values to front of array
shift - remove first value from front of array
範例
push(@list, $bar);
push(@list, @rest);
$tos = pop(@list);
while ( $arg = shift(@ARGV) ) { }
unshift( @ARGV, 'zeroth arg', 'first arg');
split/join
split 能夠將一個字串以特定的分隔字串分成許多段, 並傳回一個 Array, 由於這個分隔字串是以正規表示式方式來指定, 使用上非常方便
範例
@list = split(/[, \t]+/, $expr);
範例
while (
($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/);
}
join 則與 split 功能相反
範例
$line = join(':', $login, $passwd, $uid, $gid, $gcos, $home, $shell);
sort/reverse/grep
sort 用來將一個 array 中的元素以 Ascii 排序後, 傳回一個新的 array
ps: 在利用 sort 在對 array 排序時, 可以自訂排序的方法, 詳細的說明請看這裡
reverse 用來將一個 array 中元素以與原來相反方向排列, 傳回一個新的 array,
reverse 也可以用來將 Hash 中所有的 key 與 hash value 對調
範例
print sort @list;
@list2=reverse sort @list;
grep 會根據給定的一個正規表示式對一個 array 的所有元素作比對, 找出所有比對符合的元素, 組合成一個新的 array 傳回來
@lines=grep(!/^#/, @lines); # delete all lines starting with #
keys/vlaues/each
這三個是專門給 Hash 變數用的函式
keys 傳回一個 hash 中所有的 key 組成的 array
values 傳回一個 hash 中所有的 hash value 組成的 array
each 則是自 hash 中一次抓出一對 (key, hash value) 出來
範例
foreach $key (keys %array) {
printf "%s is %s\n", $key, $array{$key};
}
print reverse sort values %array;
while (($key,$value) = each %array) {
printf "%s is %s\n", $key, $value;
}
chop/chomp
chop 移除字串的最後一個字元, 通常都是用在從檔案輸入一行後, 移除其後的換行字元
chomp 功能與 chop 類似, 但只有當最後一個字元是換行字元時才會將其移除
範例
chop($line);
chop ($host = `hostname`);
while (
chop;
...
}
sprintf/substr/length/crypt/index/rindex
Perl 上的這些函式基本上用法都和 C language 中同名的函數類似.
詳細的說明請看
sprintf, substr, length, crypt, index, rindex
2008年2月20日 星期三
Regular Expression - Backreferences參考指標
對同一個樣式的比對而言,\1代表第一個符合的項目.\2代表第二個符合的項目.\3代表第三個符合的項目.
ex1.找出tag <TEST></TEST>之間的文字.
ex2.使用$1顯示字串內的數字.
$text = "I have 100 dollars.";
if($text =~ m/(\d+)/){
print "I have $1 dollars.";
}
ex3.使用$1,$2,$3來將字串內的文字顛倒排列.
$text = "he eats fish every day .";
$text =~ s/(\w+) *(\w+) *(\w+)/$3 $2 $1/; //$text =~ s/(\w+) +(\w+) +(\w+)/$3 $2 $1/;
print $text;
//fish eats he every day .
// " *" :代表空白(注意空白)
ex4..
$text = "I have 100 dollars.";
if($text =~ m/(\w*)\W(\w*)\W(\w*)\W(\w*)/){
print @a;
}
ex1.找出tag <TEST></TEST>之間的文字.
$text = <TEST>Application page
go .
</TEST>";
if($text =~ m{<(TEST)>[\w\s.]+<\/\1>}i){
print "Found a title tag.";
}
ex2.使用$1顯示字串內的數字.
$text = "I have 100 dollars.";
if($text =~ m/(\d+)/){
print "I have $1 dollars.";
}
ex3.使用$1,$2,$3來將字串內的文字顛倒排列.
$text = "he eats fish every day .";
$text =~ s/(\w+) *(\w+) *(\w+)/$3 $2 $1/; //$text =~ s/(\w+) +(\w+) +(\w+)/$3 $2 $1/;
print $text;
//fish eats he every day .
// " *" :代表空白(注意空白)
ex4..
$text = "I have 100 dollars.";
if($text =~ m/(\w*)\W(\w*)\W(\w*)\W(\w*)/){
print @a;
}
Regular Expression - Assertion
^ : 符合行的開頭.
$ : 符合行的結尾,或是在結尾的換行前.
\b : 符合一個單字邊界(word boundary).
\B : 符合一個非單字邊界.
\A : 只符合字串的開頭.
\Z : 只符合字串的結尾,或是在結尾的換行前.
\z : 只符合字串的結尾.
\G : 只符合上一個 m//g 所遺留者.
(?=EXPR) : 如果EXPR符合下一個就符合.
(?!EXPR) : 如果EXPR不符合下一個就符合.
(?<=EXPR) : 如果EXPR符合上一個就符合.
(?< !EXPR) : 如果EXPR不符合下一個就符合.
ex1.只有單行輸入 只有"quit" 才能離開
while(<>){
if(m/^(quit)$/){exit;}
}
2008年2月19日 星期二
Regular Expression - 字元類別(character class)
以[]來包含一個字元類別.
以 - 來表示一個範圍.
^ : 反集合
\s : whitespace
[^a-zA-Z\s] : 不是字母(A-Za-z)與空白(\s)的字元.
$_ : m//,s/// 預設作用物件
| : (alternative match patterns)多選一的符合樣式,like or.
數量元(quantifier),指定樣式比對一定的數目.
ex1.將不是大寫字母開頭的單字,存成陣列.
$_ = "Perl is the best language.";
@a = m/\b[^A-Z]+\b/g;
print @a;
ex2. 讀入quit,exit,stop 程式終止
while(<>){
if(m/quit|exit|stop/){exit;}
}
ex3.將一個或一個以上的空白,以一個空白來取代
$text = "Hello form Perl.";
$text=~s/ +/ /g;
print $text;
以 - 來表示一個範圍.
^ : 反集合
\s : whitespace
[^a-zA-Z\s] : 不是字母(A-Za-z)與空白(\s)的字元.
$_ : m//,s/// 預設作用物件
| : (alternative match patterns)多選一的符合樣式,like or.
數量元(quantifier),指定樣式比對一定的數目.
max min
+ +? 符合一次 或多次
* *? 符合零次 或多次
? ?? 符合零次 或一次
ex1.將不是大寫字母開頭的單字,存成陣列.
$_ = "Perl is the best language.";
@a = m/\b[^A-Z]+\b/g;
print @a;
ex2. 讀入quit,exit,stop 程式終止
while(<>){
if(m/quit|exit|stop/){exit;}
}
ex3.將一個或一個以上的空白,以一個空白來取代
$text = "Hello form Perl.";
$text=~s/ +/ /g;
print $text;
Reqular Expression - Function
quotemeta : 每個非英數字元前加上一個\.
ex.
$text = quotemeta('I said "Hello."');
print $text;
//I\ said\ \"Hello\.\";
ex.
$text = quotemeta('I said "Hello."');
print $text;
//I\ said\ \"Hello\.\";
2008年2月18日 星期一
Regular Expression - 運算子
pattern match 樣式比對(PERL)
m// (match operator) 搜尋符合Regular Expression 的字串或陳述式.
m/PATTERN/
; "/"=>分界元delimiter ,if use "/" => "m" can be abridged.
=> ex : if($text !~ /exit/i){}
can use other delimiter ex: m()、m[]、m{}、m<> , but "m" can't be abridged .
*pattern modifier 樣式修正元
=>一序列的"選項",放置在 regular expression last delimiter(分界元)之後.改變搜尋方法與解析方式.
/i => 忽略大小寫
/m => 從"行"開頭開始比對
^ => 從"字串"開頭開始比對 m/^/
/o
/s
/x
/g =>傳回所有符合的比對,而不只是第一個.
s/// (substitution operator)以新字串取代符合Regular Expression 的字串或陳述式.
s/PATTERN/REPLACEMENT/
tr/// (translation operator)只能作用在純量,或陣列與雜湊內的單一元素.
tr/SEARCHLIST/REPLACEMENTLIST/
delimiter of SEARCHLSIT can be not the same as one of REPLACEMENTLIST.
ex. $string =~ tr(:)[/];
/c =>SEARCHLIST的補集合
/d =>刪除 CHAR NOT IN REPLACEMENTLIST
/s =>重複的字元縮成一個
ex1.從鍵盤內讀入輸入文字,如果不論大小寫的"exit"輸入,則結束.
print "Enter a text:\n";
while(<>){
if(m/exit/i){exit;}
print "Enter a text : \n";
}
ex2.傳回所有符合四個字元的單字串列.
符合運算子的傳回值 = 符合運算子傳回取代的字串.
@a = ("There are many cats." =~ m/\b\w{4,4}\b/g);
print "@a";
// many cats
/b=>單字邊界
/w=>尋找一個英數字元
{4,4}=>最少4個字元,最多4個字元
ex3.以dog 取代 cat
$text = "I have a dog.";
$text =~ s/dog/cat/;
print $text;
ex4 取代運算子的傳回值 = 取代運算子傳回取代的數目.
$string =" TEXT is the uppercase of text";
$num = $string =~ s{text}{book}gi; //($num = $string) =~ s{text}{book}gi => will be $string value , not return value.
print $num; //2
print $string; //book is the uppercase of book
ex5.將字串$string 內所有的小寫字元改成大寫.
$string = "Basketball is my favorite sport.";
$string =~ tr/a-z/A-Z/;
print $string;
//BASKETBALL IS MY FAVORTIE SPORT.
ex6.將$text的 所有非字母(a-z A-Z)字元,以"-"來取代.
$string = "Basketball is my favorite sport."
$string =~ tr/a-zA-Z/-/c;
print $string;
//Basketball-is-my-favorite-sport
ex7.將 $string 內的 "\n" 字元刪除
$string = "Basketball \n is \n my \n favorite \n sport\n.";
$string =~ tr/\n//d;
print $string;
//Basketball is my favorite sport.
ex8.將重複的字元歸為單一個.
$string = "good book ball baa seek haaaa";
$string =~ tr/a-z/a-z/s;
print $string;
// god bok bal ba sek ha
ex9.計算$string 非英數字元數目.
$string = "Basketball is my favorite sport.";
$num = $string =~ tr/a-zA-Z0-9//cs;
print $string;
print $num;
//
ex10.\w符合一個字元,\;脫逸出".";\w+符合一個單字
$string = "This is a house.";
$string =~ s/\w+/There/g;
print $string;
// There There There There
ex11. 取代第一個符合的 英數字元開頭的字串
$text = "Java language is the best.";
$text =~ s/[A-Za-z]+/PERL/;
print $text;
//Perl language is the best.
"^": 反集合
$text =~ s/[^A-Za-z]+/PERL/;
print $text;
//JavaPerllanguage is the best.
m// (match operator) 搜尋符合Regular Expression 的字串或陳述式.
m/PATTERN/
; "/"=>分界元delimiter ,if use "/" => "m" can be abridged.
=> ex : if($text !~ /exit/i){}
can use other delimiter ex: m()、m[]、m{}、m<> , but "m" can't be abridged .
*pattern modifier 樣式修正元
=>一序列的"選項",放置在 regular expression last delimiter(分界元)之後.改變搜尋方法與解析方式.
/i => 忽略大小寫
/m => 從"行"開頭開始比對
^ => 從"字串"開頭開始比對 m/^/
/o
/s
/x
/g =>傳回所有符合的比對,而不只是第一個.
s/// (substitution operator)以新字串取代符合Regular Expression 的字串或陳述式.
s/PATTERN/REPLACEMENT/
tr/// (translation operator)只能作用在純量,或陣列與雜湊內的單一元素.
tr/SEARCHLIST/REPLACEMENTLIST/
delimiter of SEARCHLSIT can be not the same as one of REPLACEMENTLIST.
ex. $string =~ tr(:)[/];
/c =>SEARCHLIST的補集合
/d =>刪除 CHAR NOT IN REPLACEMENTLIST
/s =>重複的字元縮成一個
ex1.從鍵盤內讀入輸入文字,如果不論大小寫的"exit"輸入,則結束.
print "Enter a text:\n";
while(<>){
if(m/exit/i){exit;}
print "Enter a text : \n";
}
ex2.傳回所有符合四個字元的單字串列.
符合運算子的傳回值 = 符合運算子傳回取代的字串.
@a = ("There are many cats." =~ m/\b\w{4,4}\b/g);
print "@a";
// many cats
/b=>單字邊界
/w=>尋找一個英數字元
{4,4}=>最少4個字元,最多4個字元
ex3.以dog 取代 cat
$text = "I have a dog.";
$text =~ s/dog/cat/;
print $text;
ex4 取代運算子的傳回值 = 取代運算子傳回取代的數目.
$string =" TEXT is the uppercase of text";
$num = $string =~ s{text}{book}gi; //($num = $string) =~ s{text}{book}gi => will be $string value , not return value.
print $num; //2
print $string; //book is the uppercase of book
ex5.將字串$string 內所有的小寫字元改成大寫.
$string = "Basketball is my favorite sport.";
$string =~ tr/a-z/A-Z/;
print $string;
//BASKETBALL IS MY FAVORTIE SPORT.
ex6.將$text的 所有非字母(a-z A-Z)字元,以"-"來取代.
$string = "Basketball is my favorite sport."
$string =~ tr/a-zA-Z/-/c;
print $string;
//Basketball-is-my-favorite-sport
ex7.將 $string 內的 "\n" 字元刪除
$string = "Basketball \n is \n my \n favorite \n sport\n.";
$string =~ tr/\n//d;
print $string;
//Basketball is my favorite sport.
ex8.將重複的字元歸為單一個.
$string = "good book ball baa seek haaaa";
$string =~ tr/a-z/a-z/s;
print $string;
// god bok bal ba sek ha
ex9.計算$string 非英數字元數目.
$string = "Basketball is my favorite sport.";
$num = $string =~ tr/a-zA-Z0-9//cs;
print $string;
print $num;
//
ex10.\w符合一個字元,\;脫逸出".";\w+符合一個單字
$string = "This is a house.";
$string =~ s/\w+/There/g;
print $string;
// There There There There
ex11. 取代第一個符合的 英數字元開頭的字串
$text = "Java language is the best.";
$text =~ s/[A-Za-z]+/PERL/;
print $text;
//Perl language is the best.
"^": 反集合
$text =~ s/[^A-Za-z]+/PERL/;
print $text;
//JavaPerllanguage is the best.
2008年1月3日 星期四
JavaScript Class Define And Enumerating or Printing Properties
//create a class
function Person(name, age) {
this.name = name || "";
this.age = age || 0;
}
Person.prototype = new Person;
var john = new Person("John", 29);// add some custom properties
john.language = "English";
john.wife = "Mary";//Enumerate using the standard forEach method:
for(prop in john)
{
str+=prop + " value :"+ john[prop]+"\n";//Concate prop and its value from object
}
alert(str);
or
var obj = objFrm.elements["name"];
var str=""; //variable which will hold property values
for(prop in obj)
{
alert(prop);
str+=prop + " value :"+ obj[prop]+"\n";//Concate prop and its value from object
}
alert(str); //Show all properties and its value
收集的30多個與Slideshow相關的網站
[轉]收集的30多個與Slideshow相關的網站
01.Multifaceted Lightbox
來源網址:http://particletree.com/features/lightbox-gone-wild/
程序範例:http://particletree.com/examples/lightbox/
程序檔案:mf_lightbox.zip 190 Kb
使用程序:HTML、Javascript、CSS。
程序特色:有多種顯示變化。
難易程度:普通。
02.easyALBUM
來源網址: http://www.tjkdesign.com/articles/gallery/photo_gallery.asp
程序範例: http://www.tjkdesign.com/articles/gallery/easyAlbum/default.htm
程序檔案:easyAlbum_v117.zip 383 Kb
使用程序:HTML、Javascript、CSS。
程序特色:很不錯的顯示變化。
難易程度:容易。
03.minishowcase
來源網址: http://minishowcase.frwrd.net/
程序範例: http://minishowcase.frwrd.net/demo/
程序檔案:minishowcase_v09b87.zip 184 Kb
使用程序:your server must have at least php v4.2.0。
程序特色:很不錯的顯示變化。
難易程度:困難。
04.Agile Gallery
來源網址: http://www.agilegallery.com/ajax-photo-gallery.html
程序範例: http://www.agilegallery.com/demo.html
程序檔案:agilegallery_flash.zip 135 Kb 、 agilegallery_ajax.zip 81 Kb
使用程序:軟件。
程序特色:5 個簡單操作步驟。
難易程度:http://www.agilegallery.co...
06.pyxy-gallery
來源網址: http://fennecfoxen.org/pyxy/gallery
程序範例: http://fennecfoxen.org/misc/photo/reynolda/
程序檔案:pyxy-gallery.zip 20 Kb
使用程序:php。
程序特色:很不錯的顯示變化。
難易程度:困難。
07.pyxy-gallery
來源網址: http://www.zenphoto.org/
程序範例: http://www.zenphoto.org/zenphoto/
程序檔案:zenphoto-1.0.8.2.zip 316 Kb
使用程序:php。
程序特色:還可以留言喔。
難易程度:困難。
08.TripTracker slideshow
來源網址: http://slideshow.triptracker.net/
程序範例: http://slideshow.triptracker.net/howto.html
程序檔案:需付費購買。
使用程序:HTML、Javascript、CSS。
程序特色:很不錯的操作接口。
難易程度:普通。
09.Suckerfish HoverLightbox
來源網址: http://mondaybynoon.com/2006/03/27/suckerfish-hoverlightbox/
程序範例: http://mondaybynoon.com/examples ... box/horizontal.html
程序範例: http://mondaybynoon.com/2007/02/ ... overlightbox-redux/
程序檔案:Suckerfish_HoverLightbox.zip 1,811 Kb 、the_redux-1.2.zip 1,462 Kb
使用程序:HTML、Javascript、CSS。
程序特色:可以做垂直或水平安排。
難易程度:普通。
10.ThickBox 3.1
來源網址: http://jquery.com/demo/thickbox/
程序範例: http://jquery.com/demo/thickbox/
程序檔案:檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:很多不同的畫面變化。
難易程度:普通。
11.Stu Nicholls CSSplay A Photograph Gallery
來源網址: http://www.cssplay.co.uk/menu/gallery.html
程序範例: http://www.cssplay.co.uk/menu/lightbox.html#flower8
程序範例: http://www.cssplay.co.uk/menu/photo_scroll.html#nogo
程序範例: http://www.cssplay.co.uk/menu/gallery3l.html
程序檔案:檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:一般的操作畫面。
難易程度:普通。
12.Dynamic Drive CSS Library- CSS Image Gallery
來源網址: http://www.dynamicdrive.com/styl ... /css-image-gallery/
程序範例: http://www.dynamicdrive.com/style/csslibrary/category/C4/
程序檔案:檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:不錯的操作畫面。
難易程度:普通。
13.CSS Photo Showcase Mike
來源網址: http://mikecherim.com/experiments/css_photo_showcase.php
程序範例: http://mikecherim.com/experiments/css_photo_showcase.php
程序檔案:檔案需要各別下載。
使用程序:XHTML、Javascript、CSS。
程序特色:一般的操作畫面。
難易程度:普通。
14.Javascript Image Gallery & Slideshow
來源網址: http://cross-browser.com/toys/img_gallery_2.php
程序範例: http://cross-browser.com/toys/img_gallery_2.php
程序檔案:檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:一般的操作畫面。
難易程度:普通。
15.JS-CSS-DHTML based Image Gallery
來源網址: http://dasme.org/imagegal
程序範例: http://dasme.org/imagegal/demo/
程序檔案:imagegal.1.0.festivus.zip 127 Kb
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
16.JS-CSS-DHTML based Image Gallery
來源網址: http://design.tedforbes.com/
程序範例: http://gravityroom.com/sets.php
程序檔案:imagegal.1.0.festivus.zip 127 Kb
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
17.FlickrBox
來源網址: http://www.naggle.com/index.php?/articles/comments/flickrbox/
程序範例: http://www.naggle.com/index.php?/photos/
程序檔案:FlickrBox.zip 88 Kb
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
18.QuickGal
來源網址: http://andyydev.com/project.php?file=QuickGal
程序範例: http://andyydev.com/QuickGal/index.php
程序檔案:QuickGal.zip 981 Kb
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
19.Javascript Image Gallery & Slideshow
來源網址: http://pranas.net/webgallerycreator/
程序範例:軟件。
程序檔案:檔案需要各別下載。
使用程序:NET Framework required 。
20.Thickbox for mootools
來源網址: http://gueschla.com/labs/smoothbox/
程序範例: http://gueschla.com/labs/smoothbox/
檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:一般的操作畫面。
難易程度:普通。
21.35mm Photo Viewer Browser-based DHTML image display
來源網址: http://www.schillmania.com/projects/35mm/
程序範例: http://www.schillmania.com/projects/35mm/demo/
程序檔案:
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
22.Flash online image gallery and slideshow
來源網址: http://www.imagevuex.com/
程序範例: http://www.imagevuex.com/imagevue/demo
程序檔案:需付費購買。
使用程序:PHP。
程序特色:很不錯的操作接口。
難易程度:普通。
23.Thickbox for mootools
來源網址: http://photostack.org/
程序範例: http://photostack.org/demo/
程序檔案:beta-newest.zip 705 Kb
使用程序:PHP。
程序特色:不錯的操作畫面。
難易程度:普通。
24.PicsEngine
來源網址: http://www.picsengine.com/
程序範例: http://photostack.org/demo/
程序檔案:檔案需要各別下載。
程序特色:不錯的操作畫面。
使用程序:plugin Flash 8。
難易程度:困難。
25.AutoViewer
來源網址: http://www.airtightinteractive.com/projects/autoviewer/
程序範例: http://www.airtightinteractive.com/projects/autoviewer/app/
程序範例: http://www.airtightinteractive.com/simpleviewer/
程序檔案:autoviewer.zip 54 Kb
使用程序: http://www.airtightinteractive.c ... erver_instruct.html
難易程度:有點難。
26.LightWindow
來源網址: http://stickmanlabs.com/lightwindow/
程序範例: http://stickmanlabs.com/lightwindow/#demos
程序檔案:lightwindow.zip 6,467 Kb
程序特色:各式各樣的不同功能畫面。
使用程序:HTML、Javascript、CSS、Flash。
難易程度:有一點困難。
27.SimpleViewer
來源網址: http://www.airtightinteractive.com/simpleviewer/
程序範例: http://www.airtightinteractive.com/photos/
程序範例: http://www.airtightinteractive.com/simpleviewer/lores/
程序檔案:simpleviewer.zip 43 Kb
程序特色:垂直與水平畫面。
使用程序:XHTML、Javascript、CSS、Flash。
難易程度:普通。
28.AwesomeBo
來源網址: http://paularmstrongdesigns.com/projects/awesomebox/#jacob
程序範例: http://paularmstrongdesigns.com/projects/awesomebox/#jacob
程序檔案:awesomebox.zip 23 Kb
程序特色:一般的操作畫面。
使用程序:HTML、Javascript、CSS。
難易程度:普通。
29.Flickr Photos
來源網址: http://www.flickrhelpr.com/
程序範例: http://www.flickrhelpr.com/example/
程序檔案:FLICKRHELPR_v1.1.zip 23 Kb
使用程序:PHP。
程序特色:super simple way to put your flickr photos on your site。
難易程度:有一點困難。
30.Lytebox
來源網址: http://www.dolem.com/lytebox/
程序範例: http://www.dolem.com/lytebox/
程序檔案:lytebox_v3.20.zip
程序特色:一般的操作畫面。
使用程序:HTML、Javascript、CSS。
難易程度:普通。
31.DropProof
來源網址: http://www.bigfolio.com/drop_proof/
程序範例: http://www.bigfolio2.com/DropProofSample/
程序檔案:DropProof_v03.zip 343 Kb
使用程序:PHP。
難易程度:有一點困難。
32.Splash
來源網址: http://www.chez-xuxu.net/ressources/javascript/splash.image/
程序範例: http://www.chez-xuxu.net/ressources/javascript/splash.image/
程序檔案:splash.image.zip 36 Kb
使用程序:HTML、Javascript、CSS。
難易程度:普通。
33.Flickr and Dojo Image Gallery
來源網址: http://shaneosullivan.wordpress. ... dojo-image-gallery/
程序範例: http://www.skynet.ie/%7Esos/ajax/imagegallery.php
程序範例: http://www.skynet.ie/%7Esos/ajax/example_ImageGallery_markup.php
程序檔案:sos_ajax.zip 8 Kb
使用程序:PHP。
難易程度:有一點困難。
33.Slimbox
來源網址: http://www.digitalia.be/software/slimbox
程序範例: http://www.digitalia.be/software/slimbox#demo
程序檔案:slimbox.zip 7 Kb
使用程序:HTML、Javascript、CSS。
難易程度:普通。
34.litebox
來源網址: http://www.doknowevil.net/litebox/
程序範例: http://www.doknowevil.net/litebox/
程序檔案:litebox-1.0.zip 187 Kb
使用程序:HTML、Javascript、CSS。
難易程度:普通。
35.Slightly ThickerBox
來源網址: http://www.jasons-toolbox.com/SlightlyThickerBox/
程序範例: http://www.jasons-toolbox.com/SlightlyThickerBox/
程序檔案:SlightlyThickerBox.zip 28 Kb 、 SlightlyThickerBoxWithImages.zip 1,344 Kb
使用程序:HTML、Javascript、CSS。
難易程度:普通。
36.Pixlie
來源網址: http://www.pixlie.de/
程序範例: http://www.pixlie.de/demo/index.php
程序檔案:請自行前往下載。
使用程序:Flash 編輯軟件。
難易程度:不詳。
37.Consoriana JS Gallery 2
來源網址: http://www.consoriana.com/goodies/jsg2/
程序範例: http://www.consoriana.com/goodies/jsg2/
程序檔案:http://www.consoriana.com/...
使用程序:HTML、Javascript、CSS。
難易程度:不詳。
01.Multifaceted Lightbox
來源網址:http://particletree.com/features/lightbox-gone-wild/
程序範例:http://particletree.com/examples/lightbox/
程序檔案:mf_lightbox.zip 190 Kb
使用程序:HTML、Javascript、CSS。
程序特色:有多種顯示變化。
難易程度:普通。
02.easyALBUM
來源網址: http://www.tjkdesign.com/articles/gallery/photo_gallery.asp
程序範例: http://www.tjkdesign.com/articles/gallery/easyAlbum/default.htm
程序檔案:easyAlbum_v117.zip 383 Kb
使用程序:HTML、Javascript、CSS。
程序特色:很不錯的顯示變化。
難易程度:容易。
03.minishowcase
來源網址: http://minishowcase.frwrd.net/
程序範例: http://minishowcase.frwrd.net/demo/
程序檔案:minishowcase_v09b87.zip 184 Kb
使用程序:your server must have at least php v4.2.0。
程序特色:很不錯的顯示變化。
難易程度:困難。
04.Agile Gallery
來源網址: http://www.agilegallery.com/ajax-photo-gallery.html
程序範例: http://www.agilegallery.com/demo.html
程序檔案:agilegallery_flash.zip 135 Kb 、 agilegallery_ajax.zip 81 Kb
使用程序:軟件。
程序特色:5 個簡單操作步驟。
難易程度:http://www.agilegallery.co...
06.pyxy-gallery
來源網址: http://fennecfoxen.org/pyxy/gallery
程序範例: http://fennecfoxen.org/misc/photo/reynolda/
程序檔案:pyxy-gallery.zip 20 Kb
使用程序:php。
程序特色:很不錯的顯示變化。
難易程度:困難。
07.pyxy-gallery
來源網址: http://www.zenphoto.org/
程序範例: http://www.zenphoto.org/zenphoto/
程序檔案:zenphoto-1.0.8.2.zip 316 Kb
使用程序:php。
程序特色:還可以留言喔。
難易程度:困難。
08.TripTracker slideshow
來源網址: http://slideshow.triptracker.net/
程序範例: http://slideshow.triptracker.net/howto.html
程序檔案:需付費購買。
使用程序:HTML、Javascript、CSS。
程序特色:很不錯的操作接口。
難易程度:普通。
09.Suckerfish HoverLightbox
來源網址: http://mondaybynoon.com/2006/03/27/suckerfish-hoverlightbox/
程序範例: http://mondaybynoon.com/examples ... box/horizontal.html
程序範例: http://mondaybynoon.com/2007/02/ ... overlightbox-redux/
程序檔案:Suckerfish_HoverLightbox.zip 1,811 Kb 、the_redux-1.2.zip 1,462 Kb
使用程序:HTML、Javascript、CSS。
程序特色:可以做垂直或水平安排。
難易程度:普通。
10.ThickBox 3.1
來源網址: http://jquery.com/demo/thickbox/
程序範例: http://jquery.com/demo/thickbox/
程序檔案:檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:很多不同的畫面變化。
難易程度:普通。
11.Stu Nicholls CSSplay A Photograph Gallery
來源網址: http://www.cssplay.co.uk/menu/gallery.html
程序範例: http://www.cssplay.co.uk/menu/lightbox.html#flower8
程序範例: http://www.cssplay.co.uk/menu/photo_scroll.html#nogo
程序範例: http://www.cssplay.co.uk/menu/gallery3l.html
程序檔案:檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:一般的操作畫面。
難易程度:普通。
12.Dynamic Drive CSS Library- CSS Image Gallery
來源網址: http://www.dynamicdrive.com/styl ... /css-image-gallery/
程序範例: http://www.dynamicdrive.com/style/csslibrary/category/C4/
程序檔案:檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:不錯的操作畫面。
難易程度:普通。
13.CSS Photo Showcase Mike
來源網址: http://mikecherim.com/experiments/css_photo_showcase.php
程序範例: http://mikecherim.com/experiments/css_photo_showcase.php
程序檔案:檔案需要各別下載。
使用程序:XHTML、Javascript、CSS。
程序特色:一般的操作畫面。
難易程度:普通。
14.Javascript Image Gallery & Slideshow
來源網址: http://cross-browser.com/toys/img_gallery_2.php
程序範例: http://cross-browser.com/toys/img_gallery_2.php
程序檔案:檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:一般的操作畫面。
難易程度:普通。
15.JS-CSS-DHTML based Image Gallery
來源網址: http://dasme.org/imagegal
程序範例: http://dasme.org/imagegal/demo/
程序檔案:imagegal.1.0.festivus.zip 127 Kb
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
16.JS-CSS-DHTML based Image Gallery
來源網址: http://design.tedforbes.com/
程序範例: http://gravityroom.com/sets.php
程序檔案:imagegal.1.0.festivus.zip 127 Kb
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
17.FlickrBox
來源網址: http://www.naggle.com/index.php?/articles/comments/flickrbox/
程序範例: http://www.naggle.com/index.php?/photos/
程序檔案:FlickrBox.zip 88 Kb
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
18.QuickGal
來源網址: http://andyydev.com/project.php?file=QuickGal
程序範例: http://andyydev.com/QuickGal/index.php
程序檔案:QuickGal.zip 981 Kb
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
19.Javascript Image Gallery & Slideshow
來源網址: http://pranas.net/webgallerycreator/
程序範例:軟件。
程序檔案:檔案需要各別下載。
使用程序:NET Framework required 。
20.Thickbox for mootools
來源網址: http://gueschla.com/labs/smoothbox/
程序範例: http://gueschla.com/labs/smoothbox/
檔案需要各別下載。
使用程序:HTML、Javascript、CSS。
程序特色:一般的操作畫面。
難易程度:普通。
21.35mm Photo Viewer Browser-based DHTML image display
來源網址: http://www.schillmania.com/projects/35mm/
程序範例: http://www.schillmania.com/projects/35mm/demo/
程序檔案:
使用程序:PHP。
程序特色:一般的操作畫面。
難易程度:困難。
22.Flash online image gallery and slideshow
來源網址: http://www.imagevuex.com/
程序範例: http://www.imagevuex.com/imagevue/demo
程序檔案:需付費購買。
使用程序:PHP。
程序特色:很不錯的操作接口。
難易程度:普通。
23.Thickbox for mootools
來源網址: http://photostack.org/
程序範例: http://photostack.org/demo/
程序檔案:beta-newest.zip 705 Kb
使用程序:PHP。
程序特色:不錯的操作畫面。
難易程度:普通。
24.PicsEngine
來源網址: http://www.picsengine.com/
程序範例: http://photostack.org/demo/
程序檔案:檔案需要各別下載。
程序特色:不錯的操作畫面。
使用程序:plugin Flash 8。
難易程度:困難。
25.AutoViewer
來源網址: http://www.airtightinteractive.com/projects/autoviewer/
程序範例: http://www.airtightinteractive.com/projects/autoviewer/app/
程序範例: http://www.airtightinteractive.com/simpleviewer/
程序檔案:autoviewer.zip 54 Kb
使用程序: http://www.airtightinteractive.c ... erver_instruct.html
難易程度:有點難。
26.LightWindow
來源網址: http://stickmanlabs.com/lightwindow/
程序範例: http://stickmanlabs.com/lightwindow/#demos
程序檔案:lightwindow.zip 6,467 Kb
程序特色:各式各樣的不同功能畫面。
使用程序:HTML、Javascript、CSS、Flash。
難易程度:有一點困難。
27.SimpleViewer
來源網址: http://www.airtightinteractive.com/simpleviewer/
程序範例: http://www.airtightinteractive.com/photos/
程序範例: http://www.airtightinteractive.com/simpleviewer/lores/
程序檔案:simpleviewer.zip 43 Kb
程序特色:垂直與水平畫面。
使用程序:XHTML、Javascript、CSS、Flash。
難易程度:普通。
28.AwesomeBo
來源網址: http://paularmstrongdesigns.com/projects/awesomebox/#jacob
程序範例: http://paularmstrongdesigns.com/projects/awesomebox/#jacob
程序檔案:awesomebox.zip 23 Kb
程序特色:一般的操作畫面。
使用程序:HTML、Javascript、CSS。
難易程度:普通。
29.Flickr Photos
來源網址: http://www.flickrhelpr.com/
程序範例: http://www.flickrhelpr.com/example/
程序檔案:FLICKRHELPR_v1.1.zip 23 Kb
使用程序:PHP。
程序特色:super simple way to put your flickr photos on your site。
難易程度:有一點困難。
30.Lytebox
來源網址: http://www.dolem.com/lytebox/
程序範例: http://www.dolem.com/lytebox/
程序檔案:lytebox_v3.20.zip
程序特色:一般的操作畫面。
使用程序:HTML、Javascript、CSS。
難易程度:普通。
31.DropProof
來源網址: http://www.bigfolio.com/drop_proof/
程序範例: http://www.bigfolio2.com/DropProofSample/
程序檔案:DropProof_v03.zip 343 Kb
使用程序:PHP。
難易程度:有一點困難。
32.Splash
來源網址: http://www.chez-xuxu.net/ressources/javascript/splash.image/
程序範例: http://www.chez-xuxu.net/ressources/javascript/splash.image/
程序檔案:splash.image.zip 36 Kb
使用程序:HTML、Javascript、CSS。
難易程度:普通。
33.Flickr and Dojo Image Gallery
來源網址: http://shaneosullivan.wordpress. ... dojo-image-gallery/
程序範例: http://www.skynet.ie/%7Esos/ajax/imagegallery.php
程序範例: http://www.skynet.ie/%7Esos/ajax/example_ImageGallery_markup.php
程序檔案:sos_ajax.zip 8 Kb
使用程序:PHP。
難易程度:有一點困難。
33.Slimbox
來源網址: http://www.digitalia.be/software/slimbox
程序範例: http://www.digitalia.be/software/slimbox#demo
程序檔案:slimbox.zip 7 Kb
使用程序:HTML、Javascript、CSS。
難易程度:普通。
34.litebox
來源網址: http://www.doknowevil.net/litebox/
程序範例: http://www.doknowevil.net/litebox/
程序檔案:litebox-1.0.zip 187 Kb
使用程序:HTML、Javascript、CSS。
難易程度:普通。
35.Slightly ThickerBox
來源網址: http://www.jasons-toolbox.com/SlightlyThickerBox/
程序範例: http://www.jasons-toolbox.com/SlightlyThickerBox/
程序檔案:SlightlyThickerBox.zip 28 Kb 、 SlightlyThickerBoxWithImages.zip 1,344 Kb
使用程序:HTML、Javascript、CSS。
難易程度:普通。
36.Pixlie
來源網址: http://www.pixlie.de/
程序範例: http://www.pixlie.de/demo/index.php
程序檔案:請自行前往下載。
使用程序:Flash 編輯軟件。
難易程度:不詳。
37.Consoriana JS Gallery 2
來源網址: http://www.consoriana.com/goodies/jsg2/
程序範例: http://www.consoriana.com/goodies/jsg2/
程序檔案:http://www.consoriana.com/...
使用程序:HTML、Javascript、CSS。
難易程度:不詳。
2008年1月2日 星期三
JavaScript : isNumberic
method 1 :
isNaN()
return false : "-0.5",-100
return true : "string"
method 2 :
check positive Numberic
var ValidChars = "0123456789.-";
reference from http://www.codetoad.com/javascript/isnumeric.asp
The simplest way to check whether the details entered in a text field are numeric is to to loop through the string and compare each character to a pre-defined list of acceptable characters.
In this function, we've allowed decimal points and numbers nought through 9.
We use two methods to help us here : the charAt and indexOf.
Using the charAt method, we can find out which character is filling a designated position within a string. We then use the indexOf method to search our ValidChars list of valid characters. If it doesn't exist, (if ValidChars.indexOf(Char) == -1) this means the user has entered an invalid character. Here's the full function.
isNaN()
return false : "-0.5",-100
return true : "string"
method 2 :
check positive Numberic
var ValidChars = "0123456789.-";
reference from http://www.codetoad.com/javascript/isnumeric.asp
The simplest way to check whether the details entered in a text field are numeric is to to loop through the string and compare each character to a pre-defined list of acceptable characters.
In this function, we've allowed decimal points and numbers nought through 9.
We use two methods to help us here : the charAt and indexOf.
Using the charAt method, we can find out which character is filling a designated position within a string. We then use the indexOf method to search our ValidChars list of valid characters. If it doesn't exist, (if ValidChars.indexOf(Char) == -1) this means the user has entered an invalid character. Here's the full function.
function IsNumberic(sText)
{
var ValidChars = "0123456789.";
var IsNumber=true;
var Char;
for (i = 0; i < sText.length && IsNumber == true; i++)
{
Char = sText.charAt(i);
if (ValidChars.indexOf(Char) == -1)
{
IsNumber = false;
}
}
return IsNumber;
}
訂閱:
文章 (Atom)
追蹤網誌清單
IT Info
Reference
標籤
- 代討論
- 防盜
- 常規表示式(regular expression)
- 進度
- 電子地圖
- 網站搬家程式
- Ajax Library
- Application of Perl
- C#
- CakePHP
- Coding Convention
- CSS
- Data injection
- DBI
- Debug
- Diff Browser
- Effect : Slideshow
- Engineering - Desing Pattern
- framework
- Framework - CodeIgniter
- Functions
- Imgick
- jquery
- JS Framework
- JS Library
- JS Object : Statement
- Linux
- Mapping Other Language
- Need to Turnning
- NetBeans
- OOAD-MVC
- open source suit software
- Performance
- Perl Installation
- PHP Class
- PHP rpc Java
- PHP to PERL
- Presentation
- RIA
- Serculity
- Service
- SQL injection
- Tips
- Tools
- Variable
- Versus
- WCF
- WebSite Thumbnail
- XML
- ZK Ajax