2014年6月18日 星期三

小心處理call by reference in Javascript

CoffeScript:
# 錯誤範例
buggySleepSort = (numbers) ->
       for n in numbers
              setTimeout(
                     console.log n
              n
              )
buggysleepSort [4, 2, 6, 9, 3]
結果為
3 3 3 3 3
而不是4, 2, 6, 9, 3
原因是當setTimeout執行時, n value已被loop到最後一個item (3, call by reference)

# 正確解法
sleepSort = (numbers) ->
  for num in numbers
    do (num) ->
      setTimeout ->
        console.log num


sleepSort [4, 2, 6, 3]



若想要避免各語言的pitfall,可參考wiki page,
http://rosettacode.org/wiki/Sorting_algorithms/Sleep_sort

Java Keytool generate keystone from private key

透過第三方CA購買到的SSL private key和CA certificate, 各是server.key和server.crt
產生Apache Jetty所使用的keystore的步驟如下,

製作Server PKCS12文件
$ openssl pkcs12 -export -in server.crt -inkey server.key -out jetty.p12 -name jetty

產生Server private keystore
$  keytool -importkeystore -destkeystore keystore -deststorepass 11111111 -srckeystore jetty.p12 -srcstoretype PKCS12 -srcstorepass 11111111

產生Server trust CA keystore
$ keytool -keystore truststore.jks -keypass 11111111 -storepass 11111111 -alias ca -import -trustcacerts -file server.crt