November, 2005 > 所有文章列表
呼,昨晚上課時還在說 FMS 18號就要到期了,結果mm在今天的 Max Korea 中就宣佈 FMS 正式出貨,下面是在網站上看到的購買訊息。
*A single license of this product limits use to 100 simultaneous users and 3 virtual hosts. The number of simultaneous users can be increased by purchasing additional Professional Editions and stacking the serial number. Note, virtual hosts can not be increased in this manner.
所以答案揭曉,入門價是 professional 版 100人不限頻寬 $4500 (約台幣十四萬),可以疊三張license也就是最高 300人同時連線。
*Upon purchase of the product you will have access to both Windows and Linux platforms; only one platform may be installed and deployed at a time.
光碟裏同時有 windows + linux版 (不過當然同一時間只能裝一種版本)
*This product is licensed to be run on a Single or Dual CPU server.
呃,只能裝在 1 or 2 cpu的機器上,那如果每台是三顆cpu該怎麼辦?
*This product can not be used by Internet Service Providers (ISPs) or Content Delivery Networks (CDNs) for hosting services.
這個就有意思了,mm不準 ISP或CDN使用這個版本來提供hosting服務,而是要求這種大量用戶買下面這個solution:
*Flash Media Server 2 Origin and Edge Servers
Customers who have very large websites that require media delivery to over 1,000 simultaneous users (or 200,000 viewers per month) should consider deploying with Flash Media Server 2 Origin & Edge Servers rather than stacking Professional Editions.
Origin and Edge Servers help achieve scalable deployments by facilitating load balancing, failover, redundancy and clustering. Origin Server deployments start at $45,000.
呵呵呵,這下子精彩了,超大量用戶要從 Origin/Edge server這個版本入手,而入場價是將近一百四十八萬新台幣啊~~~
根據這些日子來為了備課寫範例而廣泛使用FMS2的心得,它的表現真是比FCS 1.5好許多,光是video 的quality就值回所有票價,更別提新出現的那一狗票 API 跟 clustering edge server support。
但誰會是我們第一個做的FMS客戶呢?呵
| by admin
網站
preview
preview裏是將 EAS2裏面的 photoviewer 改寫成 AS3.0。
這代表趙英傑桑又要開始忙了嗎?
| by admin
目前 asUnit的最新版是 asUnit 3.0.1 alpha,據兩位負責人說這是多年以來最大的改版,完全使用 actionscirpt 3 語法,並且忠實的照者 JUnit 去刻出一樣的功能,因此對大部份熟悉 JUnit使用方式的工程師來說,只要記得把 type 改成放後面並加上 : 就可以直接開工了。
下面簡單說明一下 asUnit 3的用法。
假設你有一個叫做 Money的class,它的功能是用來加減運算金額的數目
(note:這個程式是從 as2unit裏面借來的,我將它改寫成AS3 語法並修掉一些錯誤以通過測試)
Actionscript:
-
package{
-
-
class Money {
-
-
private var __pounds:Number;
-
private var __pence:Number
-
-
public function Money( pounds:Number, pence:Number )
-
{
-
/*
-
if ( pounds == undefined || pence == undefined )
-
throw new Error( "Invalid constructor arguments" );
-
*/
-
-
if ( pence> 100 )
-
{
-
pounds = pounds + Math.floor( pence / 100 );
-
pence = pence % 100;
-
}
-
//it's using setters here, for updating __pounds indeed.
-
this.pounds = pounds;
-
this.pence = pence;
-
}
-
-
-
//------------------------------------------------------------------------------
-
-
public function addMoney( money:Money ):Money
-
{
-
var pounds:Number = this.pounds;
-
var pence:Number = this.pence;
-
-
pounds = pounds + money.pounds;
-
pence = pence + money.pence;
-
-
return flatten( pounds, pence );
-
}
-
}
-
}
在這個class裏目前只有一個method,叫做 addMoney。
以往我們要測試這個class會不會通過,可能會用類似下面的程式:
Actionscript:
-
var m:Money = new Money(5,10);
-
m.addMoney(new Money(2,10));
-
trace(m)
然後看結果是不是如預期中的金額。
這很明顯的,這樣做非常沒有效率,而且當class結構越長越大時,就很難維護這些test code。
因此比較好的做法是寫一個獨立的 test class,像這樣:
Actionscript:
-
package{
-
-
/*
-
這裏是真正的 test class, 測試每一支 method
-
*/
-
-
import flash.util.*;
-
import Money;
-
import asunit.framework.TestCase;
-
import asunit.framework.TestSuite;
-
-
public class TestMoney extends TestCase{
-
-
private var money:Money;
-
-
/**/
-
public function TestMoney( ... args:Array )
-
{
-
trace("abba:"+ args);
-
super( args[0] );
-
}
-
-
-
//------------------------------------------------------------------------------
-
-
public function testAddMoney()
-
{
-
var pounds2:Number = 3;
-
var pence2:Number = 20;
-
-
money = new Money( 3, 50 );
-
-
-
var money2:Money = new Money( pounds2, pence2 );
-
-
var money3:Money = money.addMoney( money2 )
-
/*
-
//assertNotNull( "money was null", money3 );
-
//assertNotUndefined( "money was undefined", money3 );
-
*/
-
assertEquals( "Pounds should be 6", 6, money3.pounds );
-
assertEquals( "Pence should be 70", 70, money3.pence );
-
-
}
-
}
-
}
在這個class裏可以看到許多 assertEquals(), assertNotNull()之類的method, 這些就是 asUnit提供的測試功能,以 testAddMoney()為例,我們用一個新數字加上原本的數字後,透過
assertEquals( "Pounds should be 6", 6, money3.pounds ); 來檢查加總的結果是否為 6,也就是將 money3.pounds 當做參數傳入,然後看看程式跑完後跳出來的數字是否為6,如果兩者相等,那這個測試就通過,如果不是,那就要開始debug囉~
由上面兩個例子可以類推,如果未來 Money class裏又增加了下列功能:
subtractMoney()
greaterThan()
lessThan()
equals()
勢必每個method都可以透過一個 testXXXX()來進行測試,透過這樣系統化的撰寫test code,不但可以確保程式如預期般的運作,更重要的是未來不論要修改,或是人事交替必需由新進工程師接手維護程式碼,都可以透過這組 test code來確保程式功能完整無誤。
asUnit另一個更棒的功能就是 test suite (唸做 sweet),可以將一堆test class集合起來一次執行,請看範例:
Actionscript:
-
package{
-
import asunit.framework.TestSuite;
-
-
import TestMoney, TestCar, TestObject;
-
import flash.util.*;
-
-
/*
-
aggregates all test classes here to run at once
-
*/
-
public class MyTestSuite extends TestSuite{
-
-
public function MyTestSuite(){
-
addTest(new TestMoney());
-
addTest(new TestCar());
-
addTest(new TestObject());
-
}
-
}
-
}
這裏我們建了一個 MyTestSuite,並且將三個要測試的class (別別是 TestMoney, TestCar, TestObject) 都丟進去,將來只要執行這個 MyTestSuite就可以一次測試完三個class裏所有的method。
測試語法如下:
Actionscript:
-
mt:MyTestSuite = new MyTestSuite();
-
mt.run();
不過這樣做有個小缺點,就是除非執行過程中有發生錯誤,才會在eclipse的console中顯示錯誤訊息,但如果全部通過的話就完全不會顯示任何資訊。
為此asUnit很貼心的提供了兩種選擇,第一個是用 flex 畫出來的測試介面,使用方法如下:
Actionscript:
-
package {
-
import asunit.textui.TestRunner;
-
import TestMoney;
-
-
public class AsUnit extends TestRunner {
-
-
public function AsUnit() {
-
start(MyTestSuite); //this is for multiple test sets
-
//start(TestMoney); //this is for single test set
-
}
-
}
-
}
只要把MyTestSuite傳進去,它就會自動執行並開啟一個小swf視窗,最後把結果顯示在裏面,如下圖:

從圖中可以看出只花了0.025秒就完成了12項測試並且全部通過。
另一個方法則是用xul ui。xul是一個可以在 firefox裏執行的 GUI app,使用方式也差不多,只是他得在browser裏面執行,但由於我不需要這種玩意所以抓回來後從來沒執行過。
| by admin
unit test在專業的軟體開發過程中一直是非常非常重要的一環,透過一個有系統的方式來檢測程式碼的正確度可說是軟體開發最低限度的要求。
但到目前為止,10 個flash coders裏大概有 11 個都是用唯一的一種方式來做所謂的 test : CTRL-Enter,也就是 test movie來執行電影,然後看看output panel裏有無出現錯誤。(呃,如果你不屬於這11個,並且已經在用某種 unit test framework,那請直接跳過這篇文章去做更有意義的事,例如補個眠)
傳統用 test movie做測試對付小型的專案還行有餘力,但當案子發展的越來越大,並且完全走向 class (OO)導向的開發方式時,這種做法就顯的費時費力且不切實際,另一方面,這種測試方法往往要等UI好了才比較能整合起來測試,但往往這時有些根本的錯誤已經種的太深很難再改了。
在java的世界裏,這個問題很早就獲得了解決,他們可以靠一個叫 JUnit的 testing framework 來自動化所有的測試工作,只要簡單的設定與編輯,就可以完整的測試所有class中的每一個method運作是否正常,並且更重要的是,這些test class可以做為日後改版或 refactoring時重要依據,例如每次改完程式碼或refactor一大段code blcok, 就重跑一次test,只要測試能過,就代表剛才做的改變沒問題。
在Flash的世界中其實也有類似JUnit的東西,幾個檯面上比較知名的(其實是也就只有這幾個啦)
-as2unit:
這是英國的 iteration:two顧問公司所發展的test framework,,as2unit的基礎架構是照者 JUnit翻版而來,但它只保留了幾個重要的部份,因此功能上不是非常完整。btw, 這家公司日前才剛被macromedia收購成為 Macromedia Europe Consulting (MEC)。
-as2lib:
這是最早期出現的一個全能型 library,裏面也包含了一個小型的 unit test library,但由於太冷門一直無法成為主流。
-flex unit:
這也是 iteration:two推出的project,但主要是針對 flex 做 unit test,只是隨者 flex 2的出現(與伴隨而來的大改良),這個project結束的日子應該不遠了。
而本文要介紹的,則是由macromedia官方支援(金援)發展的正宗JUnit flash-port版:
AsUnit
asUnit也是一個open source的testing framework, 並且也存了在相當長一段時間,但由於一年前macromedia正式加入這個proejct,並且提供足夠的經費供他們做研發,因此他們順利的成為第一個支援Actionscript 3 的 testing framework。
| by admin

本來去樓下誠品是要買藍海策略(幾個不同領域的朋友在不同的時機推薦這本書,代表一定有什麼可觀之處啊,只好去買了),結果一進去在架上先看到這本就順手拿了。
這本書在背面寫者:「最真實、未經公司官方授權的賈伯斯成功奇譚」,不過讀起來比較像是最up-to-date的jobs歷史整理。
內容大致上跟其它同類型的書沒有多大差別,只是有比較多的八卦跟私人面的側寫。
書裏對 steve 可說毀譽參半,雖然不否認他在電腦、電影跟音樂三個領域的成就,但也引用了許多source說明了在這些發展過程中其他人對他的負面評價。
不過這本來就是現實生活的一部份,就像在一間公司裏總是會有小團體、耳語、八卦、勾心鬥角,任何一個執行長的背後也必定會跟者一群大嘴巴,這是身為人的難處與不得不面對的現實,尤其是像 steve 這種特立獨行的人物在三十年的職業生涯過程中勢必會累積不少這樣的評價啊~
簡單來說,這本書挺適合想快速瞭解apple與steve job一生發展的人入門使用,它有點像編年史,也有點像剪報本,作者把過去幾十年的點滴新聞都記錄下來然後加上一些背景解釋,所以看完後你會瞭解apple 也曾經有失敗的作品,但為何他們特別重視產品造型設計,然後ipod的熱賣其實不是偶然等等之類的事實。
對了,書中有特別提到 reality-distortion field一事,主要是說steve有者一種神奇的個人魅力/口才,能說服週遭的人認同他的想法並進而做出有利於他的決定,但這種事本來就是願者上鉤,大部份的領袖本來就該有這種特質才可能成事。
書中最後一段這樣寫:
我們期待我們的英雄有缺陷,沒有缺陷的英雄不會成功,不過,最後我們必需記住的不是他們的缺陷而是成就。
這個結論挺不賴。
note: 書中對於 pixar的發展有很重的描述,主要是說明pixar與disney間有者多麼的不同。
以我個人最近的例子,原本弄了 chicken little (四眼天雞)回來,但才看了十分鐘大家就一致認為太兒童、了無新意然後切掉改看 Doom了,看完這本書我才突然想起,chicken little不正是 disney的年度大片嗎?為何我對它就沒有像「海底總動員」「驚奇四超人」「怪獸電力公司」與「玩具總動員」(這幾部都是 pixar 製作的片子) 那樣的觀賞熱情呢?
兩相比較之下,兩者的優勝劣敗似乎當下立見,但當然,有可能是片子鎖定的 target audience不同,只是純就創意、劇情兩者來看,勝負也還是相當明顯啊~
| by admin
Next Posts
Previous Posts