August, 2005 > 所有文章列表

compare 好伙伴 – UltraCompare

In flash   August 30, 2005 - 11:03 pm

最近為了編輯文字檔又開始survey文字編輯器,本來想去看看 ultraEdit 現在的發展如何,結果意外發現這家公司居然也有出 diff/merge類的工具,也就是上圖的 UltraCompare。

通常 diff/merge工具都是跟 CVS, Subversion類的 Source Code Management (SCM)系統結合,當兩份(或多份)程式碼發生衝突時可以快速比較出兩者的不同,而聰明一點的diff/merge tool甚至還能自動合併。

UltraCompare比較有特色的地方是以這個價位的軟體來說,它提供了 3-way compare,算是非常難得,另外整個介面簡單易用,跟ultraedit 的整合性也高,算是加分的項目。

自從Flash開始成為程式開發平台後,version control 自然也就越發重要,因為從此不再是一個人做完整個案子,而是一個team在共同製作,往往光actionscript coder就有三個,再加上 flashcom 的SSAS一個,php/.net 兩個,這麼多工程師同步進行的情況,version control自然是最重要的事。

目前我們採用的是 Subversion, 它是 CVS的後代,SVK的前身,算是目前pc上免錢solution中表現最好的一個,而且更新快速,通常每個月都會有新版次出現(這實在是非常煩人的事啊~但跟Gaim 幾乎每三天就有新版本發佈比起來,大概又不算什麼了…),然後client端統一用 TortoiseSVN + PrimalScript編輯,等明年初換到 Eclipse後就可用 SubClipse直接進Svn,整個開發流程就更順暢了。

至於Diff / Merge方面,幾年來我都是Araxis Merge的忠實用戶, 這大概是目前地球上能找到最強大的diff/merge軟體,可惜的是它太高貴不太屑跟subversion為伍,只願意跟 Perforce 做朋友,所以目前只能分開用,好在真正衝突的機會不多,手工開三份起來還是能接受的。

comments(7) | by admin

xbox 360 UI照片

In General   August 27, 2005 - 8:00 pm

雖然我對玩game一向沒什麼興趣,但user interface design與 usability到是有無限的吸引力。

teamxbox上讀到這篇文章,裏面介紹了xbox 360 與設計公司合作共同開發新介面時面臨的挑戰與技巧,裏面還提到xbox team甚致開發了一個類似flash的 animation tool以方便做到介面的切換與動畫效果。

不過說實話當初會感興趣主要的原因是MS一向不是以優良 UI 設計所著稱,通常在usability書中MS的產品與介面都是放在負面教材那列,所以其實我感興趣的是這次號稱的全新介面到底能改良多少,或者這只又是另一堆 brochure slogan而已。

由於沒辦法實際操作,只看畫面還無法客觀的感受到它的效果,畢竟 usability 是 use + ability, 一定要用了才知道它的能力,例如它提供的 user feedback是否足夠、頁面與頁面的切換與接續是否合理、每個流程是否有提供足夠的 visual clue?

目前只能說畫面藍藍的很像MS一貫風格啊(廢言…)

1 comment | by admin

flashlite 應用調查

In flash   August 27, 2005 - 12:03 pm

原文

Yahoo FlashLite group最近辦了一場 flashlite 應用調查,結果如下:

- fun(games, screensaver etc.) –> 30.00%
- application –> 70.00%

雖然跟一般的想像不同(理論上拿去做game的機率應該大一點),但卻正符合我的推測與想法。

flashlite 目前仍然是太弱的平台,不論是普及率或開發工具或工程師數量皆是如此(會寫actionscrpit不代表能寫 flashlite app,更慘的是會寫flashlite app也不代表就能寫出效能快資源少的程式),如果再跟 J2ME或 BREW等相對成熟的技術比起來,現在怎麼看都很難發覺它的未來。

另一方面,flashlite雖然在 vector drawing表現很出色,但單憑這點要開發完整的game仍然很困難,更別提actionscript 4 能力實在單薄的讓人無言以對。

但如果將flashlite做為app 的 front-end UI 則可行性大一點,只要有設計良好的UI library(內含幾個基礎的UI components) ,很快就可以開始寫app,而且它還同時有下列好處:

-一般 GPRS或3G的計費基礎是「資料傳輸量」,因此以往 html + server的tier 架構無可避免的會一直產生往返的資料傳輸,費用也就一直增加;而用flashlite這樣的 rich client透過良好的架構設計跟資料壓縮傳輸,可以有效降低資料傳輸量,也就代表可能可以節省不少費用。

-rich client另一個好處是回應快速,現在手機傳輸再快(實際表現值而非理論最大值)也很難跟最爛的adsl連線相比,因此減少跟server間往返的資料交換就可以直接避開最瓶頸的那一段,此時只要能在app本身下功夫,很輕鬆就可以打敗大部份其它競爭技術。

另外,如果有硬體廠商夠大膽(或觀念先進?)能將swf 引進做為手機內建的操作介面,例如3G手機裏的UI (反正現在 swf <> C/C#/Java 間的溝通已很成熟,只是將 MVC 中的 View這段換掉),那flashlite的前景就真正值得期待,不然在此之前,flashlite做為休閒時把玩試試可以,但真要提供商業應用上場實戰恐怕還有非常遠的一段距離。(這裏面還包含即使會寫、能寫也寫好了flashlite程式,你真的敢交給客戶做大規模商業應用嗎?在一個技術還太年輕的階段,這種憂慮總是無可避免的存在啊)

Luar在最近的兩篇文章中也提到類似的看法,我也認同目前 flash platform離開pc後說實在發展空間有限,尤其在手機或embedded system這兩塊市場先天或後天的限制太多,導致進入門檻異常的高因此不是常人能隨便接觸的;比較有機會的反而是 跨平台的stand-alone-app 與 pda應用,未來的文章中我會聊聊之前完成的pda與app應用,並解釋為何它們比較有前景。

相關閱讀 > Luar的兩篇文章
你是Flash Platform Developer,你賺到錢嗎?
再說用Flash「賺錢」問題

Add comment | by admin

RecordSet 使用小技巧

In actionscript, flash   August 27, 2005 - 10:49 am

RecordSet是使用flash做RIA 時非常重要的東西,大筆的資料通常都是放在裏,然後不論新、刪、修、查(所謂的CRUD四大天王)都是先在裏面做完,然後透過某種binding機制反應到UI元件上。

之前的兩篇文章:

recordset 的缺點
recordset 第二擊

裏面曾經提過當時做案子遇到的困擾,主要是在於recordset雖然有一個固定不變的unique欄位 __ID__ 可做為辨識每筆資料用,但它並沒有提供一個類似 removeItemByID(id:Number) 這樣的指令來刪除資料,因此當時寫了一個 findByValue() 去依照 __ID__找出對應的 index,再用 removeItemAt()刪除。

經過半年後最近因為另一個案子又要回來惡搞 recordset,只是這次要做的東西比較複雜,因此有些過去的 dirty trick就要認真思考一下是否可以最佳化或改寫的更好用。

在開始之前,先稍微解釋一下 __ID__的運作原理,假設你有一個從db撈回來的resultset如下:

Actionscript:
  1. var _data:RecordSet;
  2. _data = new RecordSet(["id", "parent", "title", "content"]);
  3. //
  4. _data.addItem({id:"1", parent:"", title:"1-this is label", content:"iiiiiiiiiiiiiiiiiiii"});
  5. _data.addItem({id:"2", parent:"", title:"2-this is label", content:"iiiiiiiiiiiiiiiiiiii"});

然後將它的內容 dump出來

Actionscript:
  1. {_items: [{__ID__: 0, content: "iiiiiiiiiiiiiiiiiiii", id: "1", parent: "", title: "1-this is label"},
  2.           {__ID__: 1, content: "iiiiiiiiiiiiiiiiiiii", id: "2", parent: "", title: "2-this is label"},mTitles: ["id", "parent", "title", "content"],
  3.      uniqueID: 2}

這時可以發現 recordset已經自動為每筆資料加上一個新欄位,名稱就是 __ID__,更重要的是最後那個 uniqueID:2,這代表recordset內部會維護這個流水號,2即是下一筆插入資料的__ID__。

ok,那有了 __ID__後,可以怎麼用呢?recordset也提供了一個function叫做 getItemID(idx:Number),只要先用 recordset.selectedIndex 找到目前選取的項目,再將這個index number丟給 getItemID(idx:Number)就可以知道該item的unique ID是多少。

但真正重要的地方在於,知道 __ID__後該如何刪除?如前面所講,recordset沒有依照ID刪除資料的method,因此當年寫了一個小程式去達成。但今天仔細想了一下,其實 getItemID()就可以做到這件事。

Actionscript:
  1. for(var i=0;i<rs.length;i++){
  2.     if(rs.getItemID(i) == mark){
  3.         rs.removeItemAt(i);
  4.         break;
  5.     }
  6. }

其中mark就是先前找出來要刪除item的index,這樣就可以輕鬆依id刪除資料了。

不過依照「凡走過必留下痕跡」原理,當初寫的那支 findByValue()其實也沒白廢,因為它可以自訂要搜尋的欄位(field),而不像 getItemID() 只能檢索 __ID__這一欄,因此理論上任何二維或多維的陣例結構也都可以用那支程式去找到特定欄位的資料,只是實作上可能要用 binary search 改寫一下才會更快。

另外附帶一提,Recordset在flash裏面的重要性實在是無可取代,尤其要非常熟悉整個 RecordSet - DataProvider - V2 component的運作原理,例如裏面的 modelChanged event 模式,這樣在開發application 時才能真正事半功倍;至於 DataBiding, DataSet等元件其實只是把基礎的東西包裝起來方便入門者使用,通常我都敬而遠之,因為包裝的越精美往往就代表彈性越小。

比較可惜的是原本想好好用一下 DeltaPacket與 SQLupdate之類的功能,無奈這玩意要運作就是得靠 Connector - DataSet - DataBinding - UI,這樣一來我寧願用 RecordSet 自已 implement一個類似的 deltaPacket功能啊~

Add comment | by admin

白癡電腦笑話

In General   August 26, 2005 - 4:25 pm

Tech support: Click on the 'my computer' icon on to the left of the screen.
Customer: Your left or my left?

===

Customer: Hi, good afternoon, this is Martha, I can't print. Every time I
try, it says 'Can't find printer'. I've even lifted the printer and placed
it in front of the monitor, but the computer still says he can't find it...

have you tried to phone it ?
===

Tech support: What's on your monitor now, ma'am?
Customer: A teddy bear my boyfriend bought for me in the supermarket.

後來再看一遍覺得這個才是真正經典啊~

===

Customer: I can't get on the internet.
Tech support: Are you sure you used the right password?
Customer: Yes, I'm sure. I saw my colleague do it.
Tech support: Can you tell me what the password was?
Customer: Five stars.

===

Tech support: How may I help you?
Customer: I'm writing my first e-mail.
Tech support: OK, and what seems to be the problem?
Customer: Well, I have the letter 'a' in the address, but how do I get the
circle around it?

↑這個真正讚

Add comment | by admin

Previous Posts

mobile phone