2014年3月29日 星期六

[架構屍] 我的第一個 軟體系統架構規劃 !

這是我邁向 "系統架構師" 的 "一步"

某個因緣際會之下 直接從 "企業主" 取得 "需求" !

我想更專業的人去談 可以談出更多的細節 !

更明白的需求 !

如果我有更多的

"專業領域知識" 和 "輸出表格" "輸入畫面" "輸出畫面" 等等的東西!

我可以設計的部分 會更符合需求!

但這一切 靠我自己就差不多是下面的部分

就我自己訪談後 取得的需求如下:

1. 可以簡單的畫出 需要的簡圖.

2. 輸入寬高 和 中間的支架 就可以生出一張簡圖.

3. 可以自動按比例輸出一張圖 !

4. 可以列印!

根據這些需求我所產出的 圖如下!

下面是我的 "使用案例圖"





下面是我的 "功能架構圖"


下面是我的 "流程圖"



後面 我覺得比較 底層的 類別圖 等等的我就不放上來了 !

基本上 是每個單元都一張 !

因為流程簡單 所以我就不另外建立一個 控制單元

直接就 按照流程圖 把全部的單元串在一起 !


///================== 下面就是閒聊的部份拉

最後~來講一些我覺得有趣的東西!

因為我接洽的企業主! 本身也有相關的程式底子! (所以我才認識 XD)

所以我一開始是打算做成 HTML 5 的網頁給他!

這樣他可以按照 "企業主的需求" 讓他自己去修改!

也可以驗證我分的模組 類別 等等的東西

是不是 便於交接 應用 修改 就算沒有太多我使用的 程式語言 的知識
(條約外 我給自己的隱性需求)


上面講的都是目標

結果我大概花了 8 個小時(工作時數)左右~

產出有 上面的那些圖 和 底層單元的類別圖 的手繪稿

我是學 UML 2.0 的 但是我的工具出圖 是 1.4 這就是學用落差了 orz

而且我是畫好圖才發現.. (難怪我找不到 我要出圖的一些東西)

重點是 基本上 談完的那天 使用者案例圖 和 功能架構圖

已經 大概在腦海中產生了 只是沒畫出來 !

說真的這八小時 大概只有 1個小時多在出圖 和 規畫底層類別

其實卡最久的是 JavaScript 的部分 (最後也證明 我八個小時生不出來)

因為我 不想使用 dart 所以我只能靠 純JS 去做設計 和 製作~

規劃了模組! 但是沒有介面 讓我很多東西 能想

但是我沒辦法做! 當然我自己對 js 的熟悉度也不夠!

像 setTimeout 的一些問題 我到最後還是要去查規範 才知道錯在哪

也許我應該做更多的 JS 練習!

最後我使用我最熟悉的語言 action script 大概只花了兩小時

就將 我規劃的東西做出來!

雖然沒正式的分類別拉 簡單的講就是類別圖畫了

但是我自己實作 還是以 function 的方式 (一個功能一個 function) 實作了出來

因為我自己八個小時生不出來 我自己也急了 orz

來講講我 不選擇使用 dart 的思路!  (其實一開始我就想選 dart 了)

1. dart 我自己得熟悉度 還是比不上 as, 所以在快速產生原型的部分 我只能選 as

2. dart 出來的是 dart 專用的
   雖然可以轉成 JS 但是實際的 JS code
   是非常難以 維護 和 明瞭的
   我想 我交給企業主後 他應該也無法按照自己的需求去修改 orz
   除非讓他學習 dart 後 我交接 dart code 給他就會很明瞭 ! (不要花額外的時間 去教育使用者)

3. 在 企業主 自己修改 維護的 這個癥結上, 加上上面第二點的分析!
   使用 dart 和 as 沒區別 企業主都無法自行修改 !
   所以我就果斷的使用 AS.
   以求讓企業主 可以快速的看到 原型!

然後就果斷放棄 使用 AS 將東西做出來~時間 大概是兩小時 不到 !

這算是我第一個 正式的有真正 從取的需求 到出圖 規畫底層類別

到去實作 從第一步到最後一步的 SA案子 XD

雖然很糟糕! 但是總算是邁下一步了 !



2014年3月19日 星期三

[閒聊] 軟體架構師 的課程 我學到的東西! I

前一段時間 去上了  軟體架構師精修班

因為我原本就有問題 所以我也預設了不少立場和問題
下面就來講講我聽到的和我接收到的部分~~

 1.
身為一個軟體架構師 !
軟體的發展就不應該被 硬體 所侷限 !
如果硬體不足以配合一定可以透過軟體的方式 來處理!
老師的例子當然就是光棍節 !
就我自己想到我能理解的例子如下
一開始我軟體就是以 百萬人做規劃 ! 硬體足夠的情況下 百萬人可以使用 是目標 !
那這樣的軟體 就算是 後來硬體 只能承載 10 萬人! 也是可以透過軟體的方式 去處理!
如果一開始 就被硬體所侷限! 我們軟體只打算承載 10萬人 ! 這樣會造成未來的擴充的難度!
當然設計規劃的好的話! 其實 就不會有侷限問題!
另外一個重點是 硬體 很多都可以靠雲端機房取代了 ! 所以硬體 不在是問題!

2.
一張圖就是用來做好一件事情 !
而且圖是用來溝通的 !
每張圖要溝通的對象不一樣 !
所以目的也是不一樣 !

所以不用一張 使用案例圖 就要讓人明白 未來的擴充 和 規劃!
那不是 使用案例圖的目標!

如果要講未來的擴充 影響現在的規劃 !
那就是要有 1.1 的圖 1.2 的圖 讓下面的 SD 和 PG 了解!
客戶 只需要了解擴充 和展望~
如何實現客戶是不關心的! 除非他們問起!

3.
不要害怕 修改程式 !
引用新的技術 一定會有風險!
如何減少 修改的風險! 就是要靠架構去避免!
把希望期望修改的部分 包裝後 分段測試 修改 !
而且不要因為那部分 穩定 所以你就不去了解他 !

重點是 最後是需要 unit test  來證明新的部件是好用的

我覺得這段好難講~只能說 需要心領神會
總之一句 設計模式的老話 對擴充是開放的 對修改是封閉的!  (我感覺到的是老話新解)

不過我的想法是  修改是封閉在某個UNIT裡面 ! 這個 UNIT 是可以用來擴充的!
舊的(修改前穩定的UNIT)也可以用 新的(使用新方法的)也可以用 !
畢竟 新的方法只是舊的一種擴充!
如果新的不能用 可以簡單 快速的換回舊的使用!

如何證明 新的 UNIT 比舊的好用 當然就是 UNIT TEST~~~

我自己想到的例子是 一開始程式就是一大包!
但是總歸就是 增刪改查 這四種方法~~
如果有新需求 或是 覺得這東西效率不彰!

就要將這一大包拆解(重構?!)成一隻控制 + 四個小 UNIT 增 刪 改 查~~
當然要確定 這四個小 UNIT 是正常運行的!

假設我修改的是刪的部分~ 我用新的方式寫了刪2 這個刪2 是新的UNIT~
將原本的刪 換成 刪2 假設刪2 不穩只需要再抽換回 刪 即可~
並不影響其他的 增 改 查~~

刪2 是  刪 的一種擴充!
將修改 封閉在一個小 unit 中( 刪2)

其實這就是 design pattern 的東西~時間不一樣 老師不一樣 廳的感覺就不一樣.

簡單講 其實是 策略模式(Strategy Pattern)的應用,
就得可以運行的是一種策略
新的可以改善效能的是一種策略

4.
同層級的要避免互相溝通 讓偶合力太高 也為了避免無窮迴圈

5.
安全性的議題 要一開始就通盤考量 ! 可以簡化 可以不做 ! 但是不可以不規劃 !

6.
規畫出來的程式要是可以測試的! 並且經得起測試. 這才是質量!
不過老師是把 測試放最後~
這應該是開發常態~
不過我怎樣想應該都是需要是 先規劃測試 在寫程式!
至少這是我了解的 TDD (其實我的想法應該還是偏向 TFD)

SA 規劃出來的東西 不就應該是可以測試的嗎?
規劃出來的一定會有通盤細節 和使用案例圖
這一點是現在才想到 所以沒能問老師 orz

不過老師有舉一個例子 是直接把 output 貼成 test 的情況以求 test 通過!

基本精神應該是跟安全性一樣! 一開始就要通盤考量每一個unit 的功能! 需求!  然後怎樣測試!
真正 測試的部分 可以簡單(一個案例) 可以複雜(多個案例串接) 可以不做 !
  
7.
UI UX .....總之使用者體驗的問題,
那太複雜 我左邊耳朵 進去 右邊耳朵出來...老師講啥我今天已經忘光了

8.
國際化! 在地化!
要先了解各國法規 文字 等等的東西~
然後將成是細拆成模組!
可以因應各國的需要 風情 民俗 等等去規劃~
重點是容易修改 關閉 等等等

像是二戰遊戲 要在大陸上市! 日軍的結局 就是會輸給中國! 台灣要拿掉~
在美國 有一堆人時 要有黑 白 黃 等等各種人來代表民族融合等等
在日本有特殊的抽卡的法規!  造成每一張卡 都是有用的! 等等等
在台灣會有七天鑑賞期的規定! 等等等等

這個要從一開始就規劃 和 安全性一樣!

OS: 講到國際化一定要講一下 服貿! 我國得國際化 真的只有大陸這個選項 ?我知道 大陸 韓國有簽 而且下一步也快簽成了! 但是他們那樣有效率的審了多久?我國審了多久?有多少東西有攤開來說?先攤開講讓大家有時間準備, 因應 但是現在沒有!不平等條約簽了後很多事都無法挽回!像遠通!最近的戶政!都是簽了約就已經贏了!我們說在多也沒用!很多事是急不得的要慢慢規劃通盤考量!大陸慢了沒關係!我們可以往歐美...等等等另闢戰場!, 假設真的跟大陸簽了 會不會像烏克蘭的克里米亞一樣! 趁我們哪次不穩就統一了?畢竟早就被木馬屠城了!


9.
現在是 軟體工程得黃金時代 !
因為雲端機房的產生 硬體限制不在是太大的問題 !
(只要有錢 應該啥都不是問題)





2014年3月14日 星期五

[研討會] Kinect V 2.0 台灣首度曝光技術研討會

 Kinect V 2.0 台灣首度曝光技術研討會

 在 3/14 號的時候 有這樣的一個研討會!

上層有大略的提過 體感得部分~

這個也是我很有興趣的一塊!!

我一直想弄劍神 阿~阿~阿~阿~

結果只弄個滑鼠板類似 哈利波特(特殊路徑) + 水果忍者(切割)的東西 orz

所以我就請了特休去聽聽

基本我的希望 可以增加 我們線上產品的 輸入的方式 !

雖然以我們現在的產品~~

要導入 kinect 輸入 不是不可能 !

技術上  AS libs  早有了,

實體上  Kinect 普遍的程度 超乎的預期, (我的電動掛的朋友 只有我沒有 orz)

程式上  我有預留的空間 !!

剩下的就只有 Kinect  V 1.0 不容易做到的事 (有部分 看來在 V 2.0是容易做到了 )

特別是 v 2.0 多了許多我希望的部分 XDD
 
重點是來講的是英文講師  我英文上的程度不是很好 所以就看看就好

我也避掉了 許多我聽不懂的部分 orz

如果發現有錯請糾正 和告知 感謝感謝

以下就來講講我聽到(或是我只想聽到的)的部分

1. 硬體設備的提升! (理論上會更快辨識, 像是本來要幾秒的東西 只需要一秒, 單位是不對的因為我忘了, 這只是例子 應該不會有一些魔人來糾正巴 0.0)

2. 可以辨識 場景的提升 (比 V 1.0 更寬廣 更遠了, 但是 near mode 就完全被拿掉了)

3. 辨識的能力提升, V 1.0 時 肩膀 和腰 都會不那樣準確, V 2.0 就準多了~
    所以七龍珠墊肩部分不用額外調整了 XD
    手掌的部分 辨識動作的增加(要有一些特殊的 POSE,像是要看到 拐子的部分 才能辨識)
    手掌的左右轉動 脖子的轉動 腳的擺動, 扭腰擺臀 等等 都可以了 XD
    臉部的細節增加, 聲音的部分 還有一些特殊的部分 辨識度也增加
    人臉辨識 (這點是看他的 demo 的 可以按照說話者 去抓說話的人的臉, 不過也可能是位置 orz)

4. 講師的鬍子 很棒!!!! (重點)

我聽到記的就差不多這些了~~ 沒馬上寫是不對的 orz

下面是我聽到別人問的 不能 或是有待改善的事!

1. 想要轉圈 灑花 基本上還是 不可能

2. 想要抓到某些特殊的射線 還是 不可能

3. 手指的精度 (這邊我不是很確定, 記得是講 只能辨識某些 POSE)

4. 特殊吸收紅外線的布料等等的問題 現在還是不行(有人說 demo 也一樣不行 但是我沒注意到 orz)

5. 跌倒的部分 要靠自己努力 XD

6.其實我一直想問價格的....但是這是技術 礙於OOXX 的部分....就沒問了

剩下的就等正式的資料出來在哈拉亂聊了 XD



2014年3月11日 星期二

[AS3][效能] 處理 重繪區域比顯示區域大的一些方法 IV

這一篇主要是因為我看了 blitting 這種做法後

想對我自己的方式做改善所進行的一些測試

首先資料來源如下

1.bitmapdata 的功能測試 

2.利用 blitting 改善 movieclip 的效能(使用 Scout)


我自己測的結果如下

各 30 回ループ

draw :: 3 ms
最低速に比べて約 12500 %高速

copyPixels :: 3 ms
最低速に比べて約 12500 %高速

fillRect :: 6 ms
最低速に比べて約 6250 %高速

clone :: 61 ms
最低速に比べて約 614 %高速

new :: 102 ms
最低速に比べて約 367 %高速

merge :: 105 ms
最低速に比べて約 357 %高速

setPixel :: 225 ms
最低速に比べて約 166 %高速

setVector :: 375 ms
最低速に比べて約 100 %高速

clickで再計算

當然這個僅供參考

因為實際的部分 絕對不如 那個範例所顯示的

但是我自己看重的重點是!

單就 draw 和 copyPixels 的處理速度上!

以這個例子是同一個級別的,

所以就我自己的方法 特別改用 copyPixels  去做!(單對bitmapdata 的部分)

反而會影響效能!

更多的問題會是像下面的 blog 講的

利用 blitting 改善 movieclip 的效能(使用 Scout)

所講的.... 濾鏡 更新大小 等等的東西

那篇文章中的例子會很快 而且快的那樣明顯的原因是~

他只畫一份 然後給其他的使用! 而且是一次貼上一個區塊!

而且 bitmapdata 的更新只更新他畫的那一塊!

並不需要重新的 一塊一塊畫濾鏡的部分

所以越多 理論上是越明顯!

然而在我的 其他三篇中 寫的方式 並沒有辦法使用這個方法來做優化!

如果要做到的加速方式!

我必須去判斷哪一塊有更新 然後就更 新的部分一塊貼圖

就會有優化的效果!

但是就我自己的測試 不明顯!

所以相關的報告就不放上來了

話說這一篇也卡了兩個多月了 orz

[閒聊] 其實寫 Blog 還是別代壓力來的好

很久沒寫 Blog 了~~

不是不想寫 而是寫不出來

連我都覺得我自己停滯了

這樣我覺得很糟糕~

每次在發文前都在想 我的 function 命名是不是不好~

大小寫有沒有弄錯~

我的例子是不是不夠清晰~

圖得大小 截的是不是夠清楚

未來我要面試的時候 這一篇文章是不是會讓人對我有壞的印象~

這文章是不是有人寫過~

會不會重複上了一些無用的資訊~

內容詞句 是不是應該更謹慎

文章是不是跑題了 ?

內容會不會有錯 ?

是不是自曝其短 ?

有沒有太多情緒性用語 ?

會不會看小不看大 ?

當然更多的部分是~~

我拿時間去和朋友吃飯~

外出健行(慢跑)~

騎車~ 還有很多其他的事

當然浪費最多時間的還是 上網玩遊戲 

凡如 LOL 機甲 武林 笑傲 神魔 勇者 trap stone outbreak  DIII FEZ 龍族 巫師 墮落女巫 帽子世界

最近剛正名的  暴雪英霸 

還有好多好多 我忘記名稱的遊戲~ 

話說上面每一個有名子的 我都有想寫一篇 Blog 分析我想分析的東西

是不是我已經沒有專注在 了解遊戲 分析遊戲 然後做我自己的遊戲 這上面了 ?

而是太在乎一些其他的事 ?

我是不是比昨天的我更往前一步 ?  有沒有傳承一些東西

我不知道 不過我知道我看開了一些東西