2014年10月27日 星期一

[Coffeescript] Difference between with and without question mark in condition statements (判斷式中變數加不加問號的差別)



一般問號使用的時機為,如果有某物件則判斷某物件屬性 ... 等,像是
if obj?.value
  console.log "obj exists, obj.value exists, obj.value isn't 0 and obj.value isn't ''"


這邊則討論較為特別的使用情況:

console.log "obj.value? is true" if obj.value?
console.log "obj.value is true" if obj.value

以上兩行敘述,主要的差別在 obj.value 為 0 或者 "" 時會表現不一樣,

也就是情況一和二:

### Condition 1
obj =
  name: "aaa"
  value: 0

# obj.value? is true
### Condition 2
obj =
  name: "aaa"
  value: ""

# obj.value? is true

以下是兩者表現相同的情況:

### Condition 3
obj =
  name: "aaa"

# NO OUTPUT.
### Condition 4
obj =
  name: "aaa"
  value: null

# NO OUTPUT.
### Condition 5
obj =
  name: "aaa"
  value: {}

## obj.value? is true
## obj.value is true
### Condition 6
obj =
  name: "aaa"
  value: []

## obj.value? is true
## obj.value is true

轉成 Javascript 後比較清楚,分別為:

// if obj.value?
if(typeof value !== "undefined" && obj.value !== null) {
    console.log("obj.value? is true");
}

// if obj.value
if(obj.value) {
  console.log("obj.value is true");
}

2014年10月21日 星期二

[宏觀] 談產品發展


在一個資源不充裕的情況下,產品有了開頭,之後開發中,還是必須持續地發想、持續地剖析、持續地詢問自己——當初的方向可行嗎?有沒有更好的路?這樣的東西是不是自己要的?夠好嗎?目前盡力了嗎?我把它當做什麼?是孩子、維生的工具甚或搖錢樹?階段怎麼定?考核點、成果可以量化嗎?

2014年10月17日 星期五

[Javascript] Best way to store key-value array (存 key-value 陣列的最佳方法) / Object v.s. Array tips (物件 v.s. 陣列 小撇步)


資料型態簡單釋義

物件 (Object)

可以存放屬性和函式的容器。

陣列 (Array)

可以存放多個不一定要相同資料型態變數的容器。

當兩種型態皆可使用時,如何選擇?

2014年10月13日 星期一

[Mac] Terminal - Split Pane (分割同一個分頁)

原先只知道 Command + T 是開新分頁,
剛剛想按 Command + F 搜尋時,
手太粗,按到 Command + D,不小心發現這個功能!

分享分享分享 =)

當 Terminal 同一個分頁訊息太多太長卻又需要上下內容的比對時,
就可以使用 Split Pane (Command + D),可以一直增加,
按 Shift + Command + D 取消分割。

實際情況:


2014年10月11日 星期六

[Android] L - Wireless & Connectivity (無線網路和連線)



多重網路連線

Android L 新增了多重網路連線 API,可以讓應用程式搜尋可用的特定網路並建立連線,特定的網路像是 SUPL、MMS、Carrier-Billing 網路,或者特殊的傳輸協定 (Transport Protocol)。

從應用程式選擇網路、建立連線的步驟如下:

1. 新建一個 ConnectivityManager。
2. 新建一個 android.net.NetworkRequest 來指定應用程式想要連接的網路連線型態。
3. 將設定好的 NetworkRequest 物件和 ConnectivityManager.NetworkCallbackListener 的實作當參數,呼叫 ConnectivityManager.requestNetwork() 或者 ConnectivityManager.registerNetworkCallback() 來搜尋適合的網路。
4. 當偵測到適合的網路,系統會自動連線並呼叫 NetworkCallbackListener.onAvailable(),開發者可以透過這個函式裡面的 android.net.Network 物件取得這個網路的資訊,或者把流量引導到這個網路上。

[Javascript] MapReduce 用法 (MapReduece Usage)



[].map(callback [, thisArg])

把 A 型態陣列 map 成 B 型態陣列,
回傳的 B 型態陣列長度相同,B 有可能等同於 A。
var callback = function(element, index, context) { /* omitted */ }
第二個參數 thisArg 用來指定 callback 中 this 指到的物件。

2014年10月3日 星期五

[Android] L - Important Behavior Changes (重大改變) (2)


上一篇


RemoteControlClient

鎖屏時,應用程式可以自行在通知裡增加媒體播放的控制元件,而不再有以往的透明控制面板,好讓應用程式在無論鎖屏與否的控制體驗相同。
程式中新增了一些方法、類別,像是:


  • android.app.Notification.MediaStyle :可以用來調整媒體播放通知上面的樣式;
  • android.media.session.MediaSession 、 MediaStyle.setMediaToken() :可以用來告知系統,哪個通知是用來控制正在播放的媒體。
  • Notification.Builder.setVisibility(Notification.VISIBILITY_PUBLIC) :可以用來標示,哪個通知是要顯示在所有頁面上層的,就算鎖屏也一樣。

2014年10月2日 星期四

[Android] L - Important Behavior Changes (重大改變) (1)


新的 Android Runtime —— ART 

4.4 版本以前,預設的 runtime 為 Dalvik;從 L 開始,預設的 runtime 變更為 ART。ART 改進了一些功能包括編譯方式垃圾回收 (Garbage Collection) 機制除錯 (Debug) 的支援等,詳細的請參考 Introducing ART

2014年10月1日 星期三

[Android] L - Overview (新舊差異概論)



最近蘋果陣營,有最新 iPhone 6 和 6 Plus 的發表,
往前追溯,Google 陣營六月的 Google I/O 也有發表 Android 最新版本。

有別於以往,Android 這次的版本名稱不再以甜食點心們為主,
而是一個簡單的 L,目前尚未得知由來。