2014年4月3日

[訊真科技技術園地] 使用 Mockito 更輕鬆地寫 unit test - 分享介紹文章


原本都使用jmock在做unit test,自從發現了mockito後,覺得比jmock好用多了。

特別的是它可以stub一個不是interface的物件行為,這是滿特別的。

下面這篇有簡單介紹,使用方法其實很簡單。


文章摘自   http://fcamel-fc.blogspot.tw/2011/07/mockito-unit-test.html




原文如下:

聽 vgod 提到可以用 PowerMock 來換掉 static、private、final 的方法,還有Mockito 用起來很順手。於是大概看了一下相關文件:
我花了一些時間看了 Mockito 範例和作者設計的思路,覺得很有意思。《behind the times: Mocks and Stubs aren't Spies》 提到在寫測試碼時,替換掉實際互動的元件,有四種不同層級的輔助元件: dummy、stub、spy、mock:
  • dummy: 什麼事也不做。
  • stub: 依據輸入傳回物件,藉此控制後續的邏輯。(相對來說) 不在意被呼叫的方式,像是何時被呼叫、呼叫了幾次等。
  • spy: 用來確認該物件如何被使用。比方說呼叫 cursor 物件的 commit() 前有沒有先呼叫 execute()。
  • mock: 同stub + spy,既需要傳回物件供待測方法使用,也在意它如何被呼叫。
寫測試碼常遇到的困擾是:mock 太囉唆了。這篇提供一個小例子對照Mockito 和 EasyMock 的差異。《should I worry about the unexpected?》 解釋 mock 之所以囉唆,是因為它管太多了,導致加新功能時,常常行為沒錯,卻無法通過舊的測試。使用 spy (Mockito 的主要功能) 就不會有這種困擾。大多情況我們並不在意是否每一個物件都要如預期般執行,只要關鍵的幾個步驟沒錯即可。
之前會排斥使用 mock 的原因為:
  1. 沒有和真正的物件互動,不夠踏實。
  2. 寫起來很囉唆。
  3. 囉唆就算了,稍微改改程式還很容易出錯。
第一點是 trade-off,有時候是不得不做的必要之惡。在看到 spy 的概念後,發覺它少了後兩項缺點。之後需要用到「mock」時,再來用 Mockito 看看。Mockito 另一個好處是,它有提供各種語言的版本,可以學一套語法走天下。

[訊真科技技術園地] 揭秘:Flipboard 精美的版面是這樣一步一步做出來的 - Inside 網摘

~Inside 網摘 分享文章~  


Flipboard 是一款將社群媒體上的內容整合起來,以雜誌的形式呈現給使用者閱讀的工具,致力於做出世界上最好的個人化雜誌,一本專為你訂做的雜誌。
在 Flipboard 團隊的一篇部落格文章中,我們可以更好地了解 Flipboard 如何做出精美的閱讀版面。
更多內容請參閱聯結  http://share.inside.com.tw/posts/4395




▲ 三欄內容的一些模板


[訊真科技技術園地] Android build process 的介紹

這裏有一篇關於 Android build process 的介紹,還蠻有趣的。

其中有個 Bytecode Translation 的動作,就是把 Java bytecode 轉為 Delvik VM 的格式 (dx),這個動作蠻慢的,不知道有沒辦法在開發期間讓它快一點...

http://www.alittlemadness.com/2010/06/07/understanding-the-android-build-process/








2014年3月11日

[訊真科技技術園地] 產品經理的秘密

身為一位好的PM,應該要具備哪些本領呢?
以下為公司同仁J小姐看完之後,覺得非常心有戚戚焉的一篇文章,
提供給大家作為一個思考方向!















--------------------------------------------------------------------------------

看了這篇其實很有感覺,以前剛在開產品規格時的出發點都是想開一些很炫的規格,其實還真的沒有想說要解決什麼問題所以開出這個規格,然後和RD自嗨,覺得很讚,
後來做pre-sale常和客戶接觸,有些客戶很婉轉的告訴我東西不太友善,有些是直接酸難用死了,這時感覺就像往我臉上ˉˉ一拳,因為我也曾經參與產品開發,就算不是我負責的,但對整套產品也是有感情和驕傲的,也有一種客戶不懂啦的感覺。
但和客戶接觸多了之後,感覺客戶其實要的很簡單,就是產品到底能解決他什麼問題,有時demo 完產品,聽到客戶興奮的說這就是他們要的,真的很開心也很有成就感,後來在開規格時也就更加(盡我所能)以客戶角度發想。

希望這篇文章能夠讓我們在設計產品時有些不一樣的小小想法~

--------------------------------------------------------------------------------

以下文章摘自    http://www.thenewslens.com/post/25085/

是只有我,還是全世界都很想當產品經理?也許因為我自己本身就是一個產品經理,但是我最近常常聽到一些不是產品經理的人─顧問、MBA學生、工程師─想要做做看這一行。
如果事實確實如此,我其實不會太驚訝大家都想成為一個產品經理。因為這種工作的門檻不是很高,也不需要很難的專業技能,一個產品經理,不需要知道如何建立資料模型、寫程式、設計網站,這些技能的確可以為你的工作加分但非必需,跟當一個工程師或設計師不同,你可以想像有一天早上醒來就突然成為產品經理。
而且,這份工作會讓你的履歷看起來很漂亮:
  • 你是迷你CEO
  • 你領導他人
  • 你為某產業專家
  • 你決定現在和未來產品的樣貌
  • 你賺得很多
  • 你是老闆
上面的清單只是開玩笑的,我想要表達的是:其實當一個產品經理(PM),還有很多「驚喜」沒列出來,如果你不是一個PM或是沒有跟自己公司的PM合作過,那麼產品管理並非你以為的那樣。

產品管理是:

  • 成為使用者的心、想法還有聲音
  • 促進跨功能團​​隊合作
  • 對產品本身做出取捨
  • 在有限時間及資源內達成最終目標
  • 在產品製造過程帶領工作夥伴
  • 正面思考而且非常實際
  • 在有限的資訊時做出困難的選擇

產品管理不是:

  • 當最重要的聲音
  • 成為唯一發想點子的人
  • 當一個設計師
  • 當一個程式人員
  • 管理品管
  • 最佳化網站
  • 撰寫行銷相關資料

那我是怎麼知道這些事情的呢?

我是意外踏入這一行的,那時我大四、主修心理學,很想要畢業就回到位於舊金山灣區的家,讓我很恐慌的是,那邊的工作幾乎都是科技業,於是我將每份工作的職位說明都仔細讀過,看是否有工作可以和我的主修搭上線。
出乎我意料之外地,我在Intuit這家公司得到了產品管理儲備幹部的工作,而Intuit不論是在技術或是文化上都是一家很棒的公司,讓我感到訝異的是我並不知道什麼是產品經理。「哇!」我把錄取通知信讀了又讀還是覺得不可思議,我在面試的時候只是談到我很有熱情,不知道為什麼這樣就夠了。另外一個讓我驚訝的部分是我擅長的其實是心理語言學,我又再看了看,心理語言學跟財務軟體的關聯真的很小。
我的第一個管的產品是QuickBooks,負責每年推出Beta版本,光是這個工作就已經包含了所有讓我對產品管理感到驚訝的事,而它們完全沒有寫在工作職務說明裡。
主要有四點:

1.你不是在管理一個產品,而是在管理這個產品可以解決的問題

當我知道我要管的是QuickBooks時完全不敢置信,「QuickBooks?!」我聽到時嗤之以鼻,「這個產品的年紀都比我爺爺大了!」(其實這句話並非真的,但是住在矽谷這個每秒都有新產品推出的地方,QuickBooks就像是你老爸那輩的玩意。)我很失望因為我沒辦法做一個產品經理「真正」可以做的事,讓產品不斷「創新」,我想要管的是年輕而且很酷的產品。
但是我犯了大錯!
更多內容請參考  http://www.thenewslens.com/post/25085/






2014年3月5日

[訊真科技技術園地] An Introduction to CSP

訊真科技技術園地第二發文章出爐囉!
感謝公司同仁E小姐的提供
讓我們對CSP能夠有更深入的了解^^


----------------------------------------------------------------------------------

最近在看XSS攻擊的資料,
這篇文章介紹了CSP藉由限制可存取資源的白名單避免了潛在風險,
也提到了儘量不要使用inline script的觀念。
--
CSP is quite usable in Chrome 16+, Safari 6+, and Firefox 4+, and has (very) limited support in IE 10.

2014年3月3日

[訊真科技技術園地] 你看 YouTube,Google 幫你付上網資費?AT&T 大膽推出 “Sponsored Data” 計畫

就像中華電信和Line的關係,也是最近很熱門的應用。

http://www.theverge.com/2014/1/6/5279894/at-t-announces-net-neutrality-baiting-sponsored-data-mobile-plans

-------------------------------------------------------------------------------------------------------------------
文章轉自 http://mmdays.com/2014/01/07/at-t-sponsored-data/
AT&T 在今年的 CES 大展上,發表了一個嚇人的計畫:Sponsored Data
可曾想過當你看 YouTube 的時候,你的網路流量費是由 Google 來幫你付給電信業者?是的,Sponsored Data 就是這樣的一個計畫,AT&T 推出這個計畫的目的,就是讓網路服務業者 (像是 Google、Facebook、Netflix 等等) 可以「幫客人買單」:你上這些網站用掉的網路流量,將由這些網站的業者來幫你跟電信業者買單。
聽起來是個理想的世界,AT&T 也宣稱這是「顧客」和「企業」雙贏的一個方案。但是實際上,這個舉動可能會對網路產業造成深遠的影響,而且,可能是負面的影響。
Google 和 Facebook 這些網路業者早就讓全世界的電信業者恨得牙癢癢,因為這些公司利用電信業者的頻寬,免費提供消費者各式各樣的影音和網路服務,耗費大量電信業者頻寬的成本,可是卻一毛錢都不用付給電信業者,是所謂的 OTT 模式,總而言之,就是讓這些網路業者用免錢的。所以各國電信業者無不絞盡腦汁,想要幹這些網路業者的拐子,Google 至今還無法解決台灣使用者收看 YouTube 影片過於緩慢的問題,主因就是電信業者覺得自己從 YouTube 根本一毛錢都賺不到,卻要讓 Google 搭免費的頻寬列車,怎麼想都不划算,所以拐子一個接一個。
Google 也早就知道這件事情,知道自己的利益是和電信業者相衝突的,所以在世界各地也開始到處拉光纖,或是把熱氣球放到偏遠地區的上空、讓偏遠地區也可以無線上網,這些計畫的目的就是自己想要當電信業者,免得一再因為 OTT 的方式、被傳統的電信業者阻撓自己各項業務的發展。

[訊真科技技術園地] Git Branch 的操作與基本工作流程


關於Git Branch 的操作與基本工作流程,

這一系列是比較白話的解釋和指令使用的時機,甚至還有情境呢~!


Git branch

branch (分支)應該是 Git 最重要的技能了,在一個多人專案的開發過程中我們有時候要開發新功能,有時候是要修正某個Bug,有時候想要測試某個特異功能能不能 work ,這時候我們通常都會從主 branch 再開出一條新的 branch 來做,這支新開的 branch 會帶著你的主 branch 目前的最新狀態,當你完成你所要開發的新功能/ Bug 修正後確認沒問題就再把它 merge(合併)回主 Branch ,如此便完成了新功能的開發或是 Bug 的修正,因此每個人都可以從主 branch 拉一條新的 branch 來做自己想做的事,再來我們好好了解一下 branch 的使用。
了解 branch 最好的方法就是有圖像可以看,你可以用任何你已安裝的GUI來查看,但在你安裝 Git 的時候其實同時也安裝了最基本的 Git GUI 叫做 gitk,你可以使用 gitk --all 這個指令來呼叫他,此時你應該能看到以下的畫面:
gitk
點擊左上方區塊的 commit 節點你可以看到當次 commit 的詳細資料,例如作者以及他的更新記錄,但你會發現這時候終端機是無法輸入的,因此請你先關掉 gitk ,改打指令 gitk --all & 來讓 gitk 在背景執行。
git branch 這個指令可以列出所有的 branch 並告訴你目前正在哪個 branch:
$ git br
* master
  develop
  feature/test
上面的訊息告訴我們在這個 Git repository裡有3支 branch ,而你目前正在 master branch 上。假設我們現在要開一支新的 branch 叫做 cat ,使用 git branch 來幫助你開一支新的 branch
$ git branch cat
$ git branch
  cat
* master
上面我們開了一支新的 branch 叫做 cat ,使用 git branch 再查看一次發現已經多了這支新的 branch了,這時候你去查看你的 gitk 的圖像狀態會發現像下圖一樣,新的 branch cat 與 master 在同一條水平線上,表示目前他們的狀態是一模一樣的。
git branch
你應該也有發現,雖然我們建立了一個 cat 的 branch ,但其實我們所在的 branch 還是在 master branch,因此我們現在還需要切換過去,因此我們使用 git checkout 來切換:
$ git checkout cat
Switched to branch 'cat'
這樣就會從原本的 mater branch 切換到 cat branch 了。
接下來假設我正在 cat 這支 branch 做開發,因此新增一個檔案,加上一些內容,將它 add 到 stage 後再 commit 它。
$ vim lib/cat.rb
$ git status
# On branch cat
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#   lib/cat.rb
nothing added to commit but untracked files present (use "git add" to track)
$ git add lib/cat.rb
$ git commit -m "Add Cat.rb"
[cat ea7d309] Add Cat.rb
 1 files changed, 3 insertions(+), 0 deletions(-)
 create mode 100644 lib/cat.rb
cat branch
上面的流程你已經很熟悉了,接下來我們再切換到原本的 master branch ,這時候你會發現剛剛在 cat branch 新增的 cat.rb 檔案已經不見了。
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
master branch
Git 在我們切換 branch 的同時就會很聰明的會把我們的工作目錄更動成那個 branch 該有的狀態,如果你這時候切換到 GUI 去看,你會發現到與剛剛 cat 和 master branch 在同一條水平線上不同,cat branch現在已經比 master branch 再多出了一個 commit 的內容。
gitk
現在我在切換到 cat branch 去增加更多的內容,一樣再將它 add 到 stage 後,再 commit 它。
$ git checkout cat
Switched to branch 'cat'
$ mvim lib/cat.rb
$ git add lib/cat.rb
$ git commit -m "Add initializer"
[cat a3bce42] Add initializer
 1 files changed, 3 insertions(+), 1 deletions(-)
add initializer
切到 GUI 來看的話你會發現現在 cat 這支 branch 比 master branch 要在多上兩個 commit 的內容。
gitk