顯示具有 FLEX 標籤的文章。 顯示所有文章
顯示具有 FLEX 標籤的文章。 顯示所有文章

2012年4月16日 星期一

Flex 解析 XML

前陣子在 Flex 上實作簡單的所見即所得編輯器,當時是參考網路上的範例,利用既有的「TextArea」再加上「TextFlow」的操作達成,不過在儲存的時候遇到狀況。因為不是單純只在 Flex 裡呈現,所以需要讓它輸出成較接近 HTML 格式的內容。而 Flex 既有的 TextConverter 類別,只支援很古早的 HTML 語法,不但使用早就不建議使用的「<Font>」標籤,而且還會漏掉一些像是文字背景色的屬性。

為了記錄屬性以及避免未來可能發生的語法問題,只好去查文件去自行建立編/解碼的 TextFormat 類別,花了一天多的時間,將當下用到的屬性都加進去,能夠編/解(自認為)符合 HTML 5 格式的字串,一開始的使用上沒有遇到什麼問題,一直到同事反應出狀況才將這個放了一兩個月的程式再翻出來。

2012年3月25日 星期日

使用 Flex 程式畫出 QRCode

在入手第一支智慧手機沒多久,就知道有 QR code 這個東東,當時認為它是一個神奇的東西,由於當時手機鏡頭的像素不夠高,許多 QR code 無法順利辨視,而沒有怎麼放在心上。直到最進身邊看到的應用越來越多,也就產生要自己作出 QR code 圖型的念頭。

對於寫程式的我,並不認為 QR code 的產生是不可行的,只要有已經釋出的函數庫,或是不太難理解的演算規則,產生出圖片應該不成問題。尤其是最近因為專案因素對於使用 Action Script 繪圖有不少的實作機會,更是增加自己不少信心,不過現實總是有些不如預期,繞了一些遠路後才找到解法。

在快要下決定研究 QR code 生成的數學公式時,還好發現在 Google Codes 裡發現有人提供的函數庫,讓我免於研究那些可能會讓人煩燥的數學公式,不過函數庫裡有小 Bug,以至不支援中文字,還好最後查到問題點,在這裡作一下記錄…

使用 FLEX 連結 FTP Server 初探

最近公司的一個使用 Adobe AIR Runtime 製作的工具,需要包含上傳檔案的功能,由於檔案可能超出一般 http server 的上傳上限,或是等待時間。所以產生需要修改上傳模式的研究需求,想到的方式有兩個,第一種是將要上傳的檔案切割後分開上傳,在伺服器端將這些片斷拼回原來的檔案。而第二種方式則是改用本來就支援大檔案的傳輸協定,像是拿 FTP 取代 HTTP 傳輸檔案。

我負責的是後者,在網路上查詢了一些資料,發現一些網路上的範例有提到使用 Socket 和 FTP Server 建立連線,以資料串流的方式上傳檔案,並沒有發現 Flex framework 裡有提供類似 FtpClient 的類別可以使用。不過在嘗試理解範例的同時,發現一些似乎沒有寫完整的地方,讓人覺得有「規則沒講通」的感覺,為此花了一些時間去了解一下 FTP 的機制,在底下記錄一下已經理解的內容…


首先是 FTP 的傳輸特性,它由一開始就是設計來作為檔案傳輸的協定,在溝通上有兩種類型的連線(頻道),分別為「command channel(命令頻道)」和「data channel(資料頻道)」,前者用來發出命令以及取得命令的結果,後者則是資料的傳輸。以一般使用者的角度下認知的「保持連線狀態」指的是 command channel 仍在連線狀態中。但是實際上在一段時間沒有任何動作下,達到 Server 設定的閒置上限(timeout)後會被 Server 斷線,所以其實一些 FTP 軟體會在背後幫使用者作重新登入的動作。

2011年10月15日 星期六

判斷對象為「物件」

這個標題起得有些奇怪,依照大多數物件導向的理論中,Object 類別是所有的類別的「根」,也就是說,除了一些基本型態的變數(如︰int, float…等),所有類別都是 Object 的子類別。不過,偏偏就讓我遇到一個得判斷「純 Object」的狀況。

事情是這樣子的,我所負責的專案中間有一個編碼/解碼的功能,採用 JSON 格式的字串進行資料儲存。依照「測試驅動開發」的思維,得作一個測試程式,來判斷解碼後可以得到和原始資料完全相同的內容,因此放入假資料開始撰寫程式。

一開始我思考到,JSON 字串通常是用來存放值名對,或是陣列的資料。而身為制定 JSON 格式的自己,很清楚不會放入其它奇怪的資料型態,只要比對每一個鍵值和所包含的內容即可。因此我的第一版程式沒有花費太多時間就寫出來了。

後來由於要編碼的內容變得複雜,得放入數量不固定的多筆資料。因此 JSON 的內容,由原來的值名對 + 基本型態,又多加上了陣列 Array。由於 Array 也是一種物件,所以兩個陣列必須進入的迴圈對每一個元素進行比對,若是直接使用「A == B」則為因為 Array 存放在的記憶體位置不同,而總是得到 false 的結果。它讓我花了一些時間作思考,最後決定使用遞迴的方式進行,以免出現陣列之中間又出現陣列。

再過不久,我發覺資料變得更加複雜,必須得在陣列或是屬性中加入另外的 Object 類別,在 JSON 格式中是被允許的,不過對於我的測試、檢查程式來說,就是一場災難。其中最糟的一點是 Flash AcrionScript 語法中,基本型態也是 Object 的子類別。因此底下的判斷為真…
1 is Object

2011年9月28日 星期三

Flex Compiler 學習筆記 - 3

再次回顧一次編譯的語法…
mxmlc [要編譯的檔案]
如果帶有參數的話,最好在參數和檔案中間加上「--」分隔比較保險。
mxmlc [參數] -- [要編譯的檔案]

一些個人覺得重要的編譯參數…(因為我是一面看文件一面打的,所以應該會少掉一些還沒看到的參數)

2011年9月14日 星期三

Flex compiler 學習筆記 - 2

# 設定檔 #
老是要輸入一堆設定值才能開始編譯,是一件很煩人的事情,因此可以將設定包覆在設定檔中,在編譯的時候載入。
Flex 預設的設定值存放在「[安裝目錄]/frameworks/flex-config.xml」裡,可以去修改它或是自己 copy 一份再進行調整。
在 Flash Builder 中,會將設定檔複製一份到「[安裝目錄]/sdks/[sdk 版本]/frameworks」下,因此如果要修改 Flash Builder 的設定,要到這個地方,光是修改 flex sdk 的預設值是沒有用的。

可以利用
mxmlc -dump-config [目標檔案名稱]
將目前的預設值 copy 出來存成複本,個人在使用這個指令的時候,會出現「錯誤: 必須指定目標檔案」的錯誤訊息,不過在「mxmlc -help」卻找不到這個指令的相關資訊,可能被隱藏起來了。
不過檔案倒是被建立出來,看到裡面的註解是中文的,又再次感受到 flex 開發團隊的用心。

2011年9月9日 星期五

Flex 學習筆記︰對介面撰碼

記得第一次看到程式設計模式的教學書中提到「對介面撰碼」這個概念時,花了我好長的時間才有些了解。

其中讓我疑惑的地方在於「為什麼要說對『介面』,而不是父類別」,在似懂非懂的狀況下,我自行對這個概念作修改,成為「對介面或父類別撰碼」。
雖然現在證明這個修改是不佳的,不過得和大家分享的是,這種思考「概念是否正確,為什麼要這麼說」的想法,幫助我在程式領域的學習成長很大。

實際上我的修改,如果是在 Java 程式語言,也許沒有太大的問題。由於教導物件導向與設計原則的書大多是以 java 作為示範的對象,而 Java 這個對於物件思考有著大幅規劃的語言,很顯然在規劃的時候就試著去避免一些物件導向可能的問題。(註)

所以一直到我要面對我工作使用的 Flex ,而非書上範例的 Java 時,我才了解為什麼只能對「介面」而不是「父類別」寫程式。

2011年9月7日 星期三

Flex compiler 學習筆記 - 1

# 概要 #
以命名列編譯 ActionScript(*.as) 或 MXML (*.mxml)檔案,可以使用 mxmlc 和 compc
mxmlc 是用來編譯主程式的,也就是說編譯的結果可以直接由 flashplayer 或是用來打包成 AIR 程式。
而 compc (component compiler)則是用來編譯函數庫、版型、動態函數庫。
(函數庫是在編譯的時候作為資源引入,而動態函數庫則和版型一樣是在執行期動態被載入使用)

# 基礎語法 #
mxmlc [參數…] 目標檔案
其相關的參數列表可以使用指令
mxmlc -help [選項]
或是…
mxmlc -help 參數名稱 [選項]
進行查詢

讓人意外的是…查詢出來的結果中文化程度頗高,令人興奮。
至於提示是否足夠,就要練習和實作後才能評斷了。

Flex Compiler 學習筆記 - 0

緣起… 沒有筆記內容喔~~

由於我想導入測試驅動開發專案開發上,所以希望能夠讓 Flex 這個目前大量使用的技術也能夠納入,因此列出幾個需求…

  1. 每個可以撰寫測試程式的項目都要撰寫類別進行測試
  2. 測試類別需要能簡單執行,簡單到不是開發這個功能的人,也能在沒有文件的情形下執行測試
  3. 測試需要能夠達到由系統定時執行,在沒有人特別維護的狀況下,也能對既有及新加入的測試項目進行處理

為了達到第 3 點,我認為應該得找台沒有人在用的主機,插上電接上公司的區網就能夠放著給它跑。如果發現分析的結果是有問題,在上頭寫個通知的機制,寄封信給我,達到「No news is good news」的原則,讓我可以不用擔心手上的事情一多,就忙到忘記要對程式作檢查。至少有寫測試類別的部分,可以以每天一到數次的頻率持續作檢查。