Medium 與 Facebook Notes 簡短試用

意象說明

看不中意 < 努力看清楚 < 老眼昏花

前言

由於實在是受不了使用 HTML 寫部落格的瑣碎,前一陣子決定將部落格由 Blogger 移轉出來之後,除了 GitHub Pages / hexo 這個可以使用 Markdown 的組合之外,其實還評估了幾個平台,尤其其中 Facebook Notes 剛剛全新改版,吸引了不少的目光,所以就順勢評估了一下 MediumFacebook Notes

Read More

JavaScript Promise: resolver vs. handler

意象說明

Promise < 承諾

鑽牛角尖時間:Promise: resolver vs handler

不曉得讀者有沒有同樣的困擾:Promise 的 resolver 與 handler 有著不同的 signature (形式) 及啟動方式,看起來非常地不協調:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// resolver 由 Promise() constructor 啟動
return new Promise(resolver)
// handler 由 then() 函數啟動
.then(handler, onerror);

// resolver 具有 function (resolve, reject) 的形式
function resolver(resolve, reject) {
fs.readFile('readme.md', function (err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});
}

// fulfillment handler 具有 function (result) 的形式
function handler(markdown) {
return marked(markdown);
}

// rejection handler 具有 function (reason) 的形式
function onerror(error) {
log(error);
}

Read More

JavaScript: Resolver vs. Promise

意象說明

Design Pattern < 重複的模式

前言

讀者應該已經發現,上一篇 文中提到的 resolver 模式,與 Promise 似乎有著極為類似的形式。的確,Promise 與 resolver 模式有許多相似之處,尤其是 resolver 的變體形式,與 Promise 一樣,都有著 resolve() 函數。然而,resolver 主要是用來對付 falsy 值問題,而 promise 的主要目的是處理 asnyc (異步) 問題。

Read More

JavaScript Programming Pattern: Resolver

意象說明

Resolver < 過關斬將 < 飛魚拍打水面飛行

前言

在 JavaScript 中,有許多數值,在邏輯判斷中,其結果與 false 等價。由於其數值實際上並非 false,因此,特別稱此類數值為 falsy value。

上一篇文章 中,介紹了一般在程式中處理 falsy 值的方法。對於函數回傳值是 falsy 的狀況,上述的原則也都同樣適用,譬如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 回傳的空字串是 falsy 值
function getText() {
return '';
}

var text = getText();

// 錯誤方式:空字串是 falsy 值,不會進入 if 敘述區塊。
if (text) {
}

// 不佳方式:分別檢查空字串與非空字串的情形。
if (text || text === '') {
}

// 上一篇文章建議的方式。
if (typeof text === 'string') {
}

但是,對於函數回傳值是 falsy 的狀況,其實有更好的表達方式,就是本文要介紹的 resolver 模式。

Read More

JavaScript: Truthy? Falsy?

意象說明

Truthy? Falsy? < 迷惘

簡介

在 JavaScript 中,有許多數值,在邏輯判斷中,其結果與 false 等價。由於其數值實際上並非 false,因此,特別稱此類數值為 falsy value。

falsy values

Value Type Implementation
0 Number Constant
NaN Number Global Variable
'' String Constant
false Boolean Constant
null Object Constant
undefined Undefined Global Variable

Read More

在 Blogger 上顯示 GitHub Ribbon

意象說明

Fork me on GitHub < Fork < 叉子

首先,到 GitHub Ribbons 挑選喜歡的配色,抄下其中 srcdata-canonical-src (非必要) 屬性。

Google Blogger 部落格的「版面配置」中,捲動到最後面,找到「新增小工具」,確認它是在「網誌文章」的後面,點選後,選擇「HTML/JavaScript」,然後插入下面程式碼:

Read More

Lazy-umd.js - 懶人 UMD (Universal Module Definition)

意象說明

Open source < 模組 < beans

前言

最近在整理過去寫的程式庫,想要統一支援 script loader,同時又很貪心地想要:

1.同時支援 AMD (RequireJS)、CommonJS (node.js) 及 browser,解決不同語法差異。
2.模組套用時,避免修改 script loader 程式碼的需要。

研究了一下,發現偉大的 Addy Osmani 已經寫了 UMD。UMD 可以滿足第一點,但是應該是為了避免 script loader 程式碼擁腫,所以套用的時候,一定要修改 script loader 的部分。所以我自己整理出兩種做法,放在 Github 供大家參考:

Read More