programming

A collection of 8 posts

programming

define require include and env variable in PHP

Env variable 如果是變數,且是敏感資料,不能 commit 進 git (version control),那請用 envronment variable,最好舉的例子就是 DB password。 在 shell 裡 export BD_PASSWD="Passw0rd!,設定好環境變數, php 裡可以用 $_ENV 讀取。 getenv function取的。 define 如果是固定的字串,例如 PATH、SRC_PATH、INC_PATH,這些是固定內容的常數那就使用 define。 const FOO='BAR';

developer

bash_profile and bashrc

bash_profile 和 bashrc 的差別 對很多程式人員來說,剛接觸到 Linux (or Mac),打開 commandline,第一個學的就是 bash(shell),也往往會 copy 別人的 bashrc來使用。 但不多人知道 bashrc and bash_profile 的差別。 GNU 上的 Bash manual 倒是說得很清楚,差別就在於 interactive shells。 interactive shells 最簡單的判別方式就是,你敲入一個指令,然後終端機回給你結果,這個時候你就是處在一個 interactive shells。這時候輸入 echo $-,

javascript

cross domain request by CORS

same origin 限制 Same-origin policy[1]是在瀏覽器上用 javascript 發動 request的時候,要求所在頁面與 requested resource需要是同個 domain,因為安全性的因素,做 ajax call 或是拉 webfont 的時候,只能向自家伺服器請求,也加深了對於應用程式開發的限制。 CORS^Cross-Origin Resource Sharing 則是解決 cross domain 的方法之一,需要將 server/client 都設定好才會成功。 CORS 中文翻作跨來源資源共享,直接叫 cross domain 比較乾脆,現代的瀏覽器內建的 XMLHttpRequest 都支援,

java

doReturn and thenReturn in Mockito

用 Mockito 寫 unit test 的時候,一開始分不清楚 doReturn 和 thenReturn 的差別,基本上是一樣的,都是在做 stub。 但有一些例外。 thenReturn 不能用來 stub void method spy 不能搭配 thenReturn stub same method 多次不能用 thenReturn doReturn 在編譯期間不做 return value 的型別檢查,thenReturn 會做 type check thenReturn 會先去執行 stub 的 method,然後改寫掉 return

programming

洗撲克牌(亂數排列)

先看良葛格的洗撲克牌(亂數排列)。 以1~52的亂數排列為例好了,可以將陣列先依序由1到52填入,然後使用一個迴圈走訪陣列,並隨機產生1~52的亂數,將產生的亂數當作索引取出陣列值,並與目前陣列走訪到的值相交換,如此就不用擔心亂數重複的問題了,陣列走訪完畢後,所有的數字也就重新排列了。 簡言之 foreach $i (array){ $j = rand() swap($i,$j) } 但是這樣並不是正確的亂數排列方式,以大小為三的陣列為例,3! = 6,有六種排列變化方式,但是用這個方法得出的排列數卻是 3x3x3 = 27,而 27/6 無法整除,很明顯的不會平均分布,因此,用這種算法得到的排列並不是亂數排列。 真要做到亂數,迴圈數一樣是陣列大小,但是每 swap 一次,就要把一個元素剔除,再對剩下的陣列作重複的動作,