Search

5/31/2014

Imperative vs Declarative

Imperative vs Declarative

Let's generalize and say that there are two ways in which we can write code: imperative and declarative. We could define the difference as follows: Imperative programming: telling the "machine" how to do something, and as a result what you want to happen will happen. Declarative programming: telling the "machine"1 what you would like to happen, and let the computer figure out how to do it. 1 Computer/database/programming language/etc Imperative:
var numbers = [1,2,3,4,5]
var doubled = []

for(var i = 0; i < numbers.length; i++) {
  var newNumber = numbers[i] * 2
  doubled.push(newNumber)
}
console.log(doubled) //=> [2,4,6,8,10]
Declarative:
var numbers = [1,2,3,4,5]
 
var doubled = numbers.map(function(n) {
  return n * 2
})
console.log(doubled) //=> [2,4,6,8,10]
What the map function does is abstract away the process of explicitly iterating over the array, and lets us focus on what we want to happen. Note that the function we pass to map is pure; it doesn't have any side effects (change any external state), it just takes in a number and returns the number doubled. In many situations imperative code is fine. When we write business logic we usually have to write mostly imperative code, as there will not exist a more generic abstraction over our business domain.

Array.prototype.reduce() - JavaScript | MDN

Array.prototype.reduce() - JavaScript | MDN

The reduce() method applies a function against an accumulator and each value of the array (from left-to-right) has to reduce it to a single value.
var total = [0, 1, 2, 3].reduce(function(a, b) {
    return a + b;
});
// total == 6
var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
    return a.concat(b);
});
// flattened is [0, 1, 2, 3, 4, 5]

5/16/2014

JavaScript Promises: There and back again - HTML5 Rocks

JavaScript Promises: There and back again - HTML5 Rocks - http://chunghe.googlecode.com/git/experiment/es6.promise/

Domenic Denicola proof read the first draft of this article and graded me "F" for terminology. He put me in detention, forced me to copy out States and Fates 100 times, and wrote a worried letter to my parents. Despite that, I still get a lot of the terminology mixed up, but here are the basics: A promise can be: fulfilled The action relating to the promise succeeded rejected The action relating to the promise failed pending Hasn't fulfilled or rejected yet settled Has fulfilled or rejected
function get(url) {
  // Return a new promise.
  return new Promise(function(resolve, reject) {
    // Do the usual XHR stuff
    var req = new XMLHttpRequest();
    req.open('GET', url);

    req.onload = function() {
      // This is called even on 404 etc
      // so check the status
      if (req.status == 200) {
        // Resolve the promise with the response text
        resolve(req.response);
      }
      else {
        // Otherwise reject with the status text
        // which will hopefully be a meaningful error
        reject(Error(req.statusText));
      }
    };

    // Handle network errors
    req.onerror = function() {
      reject(Error("Network Error"));
    };

    // Make the request
    req.send();
  });
}

function getJSON(url) {
  return get(url).then(JSON.parse);
}

5/15/2014

Eight Terminal Utilities Every OS X Command Line User Should Know · mitchchn.me

Eight Terminal Utilities Every OS X Command Line User Should Know · mitchchn.me

You can have fun with Homebrew too: brew install archey will get you Archey, a cool little script for displaying your Mac’s specs next to a colourful Apple logo. The selection in Homebrew is huge—and because it’s so easy to create formulas, new packages are being added all the time.
Archey—My command line brings all the boys to the yard.

javascript - What does the exclamation mark do before the function? - Stack Overflow

javascript - What does the exclamation mark do before the function? - Stack Overflow

JavaScript syntax 101. Here is a function declaration:
function foo() {}
Note that there's no semicolon: this is a statement; you need a separate invocation of foo() to actually run the function. On the other hand, !function foo() {} is an expression, but that still doesn't invoke the function, but we can now use !function foo() {}() to do that, as () has higher precedence than !. Presumably the original example function doesn't need a self-reference so that the name then can be dropped. So what the author is doing is saving a byte per function expression; a more readable way of writing it would be this:
(function(){})();
+1. This really is the best answer here, and sadly, hardly upvoted. Obviously, ! returns boolean, we all know that, but the great point you make is that it also converts the function declaration statement to a function expression so that the function can be immediately invoked without wrapping it in parentheses. Not obvious, and clearly the intent of the coder. – gilly3 Jul 28 '11 at 16:58

5/09/2014

共享經濟盛行,Airbnb 和 Lyft 如何重塑人與人的信任關系? - Inside 網摘

共享經濟盛行,Airbnb 和 Lyft 如何重塑人與人的信任關系? - Inside 網摘

共享經濟盛行 在過去的幾年中,「共享經濟」已逐漸趨於成熟。主管機關、經濟學家紛紛試圖研究其影響。這些公司引發的消費者行為,在五年前看來,都是那麼難以置信的瘋狂。Lyft、Sidecar、Uber,讓我們跳進陌生人的車裡;Airbnb,使我們主動請陌生人到家裡住;DogVacay、Rover 讓我們放心的把狗狗寄托在陌生人家裡;Feastly 則牽線搭橋,讓我們去陌生人家裡吃飯...... 我們開始相信形形色色的陌生人,邀請他們進入自己的生活。也正因為如此,我們走進了親密網路的新紀元。 「共享經濟」不僅僅是經濟領域的突破,也是對文化的衝擊;它有著複雜的算法系統和明確的獎懲制度。eBay 可謂是帶領市場突破人與人面對面交易的先驅,鼓勵人們相信他人。Lyft 也有一套自己的方法,保證司機們接送的並不是馬路上隨隨便便的路人甲。每一位 Lyft 搭乘者都需要將 Facebook 的個人資料導入帳號。因此,每次他們撥出叫車電話時,自己的照片便會顯示在 Lyft 司機的手機桌面上;司機還會為乘客留下打分評級,信用記錄差的使用者將被自動忽略;此外,搭乘者還需在註冊加入信用卡資料,確保付款沒問題。 經濟飛漲,信任打折 Manit 說,自己的對他人信任門檻較低(low trust threshold)。換句話說,她更樂於信任別人,而非過度的自我保護。 懷疑論反映出一種廣泛而根深蒂固的心理狀態,並被現實中不靠譜的事例而不斷加深。因此,「共享經濟」的奉行者們認為,自己做的不僅僅是生意,而且從根本上改善了人與人的關系。傳統網路幫助陌生人在線上建立虛擬連接,而現代網路則幫助人們完成線下的真實溝通。紐約大學的教授 Arun Sundararajan 說,「人們實際的溝通程度遠遠低於客觀需要。」Lyft 聯合創始人 John Zimmer 則說,「共享經濟」要做的,就是逐漸填補兩者的鴻溝。 相識不易,信任更不易。2012 年全美社會調查數據顯示,僅有 32% 的被試願意相信他人,遠遠低於 1972 年的 46%。實際上,就算對他人信任度極高的 Manit 也並不會在沒有保障的情況下,向陌生人敞開家門。比如,她不接受陌生人租用自己的車,但如果透過 RelayRides 或者 Getaround 有口碑的中間公司,就另當別論了。 事實上,我們所處的商業環境中布滿陌生人的蹤影。每天,我們都把信用卡遞給陌生的收銀員;坐進陌生司機的計程車裡;吃著隔壁廚房裡陌生廚師做的菜;住在陌生的飯店,並從未擔心拿著鑰匙的侍應生會趁我們熟睡時潛入房間。所幸,工業革命時期建立起來的法律條例和保障體系,為如此龐大複雜的體系提供了有力支撐。 在那之前,美國人喜歡群居在小城鎮和農場社區,人際交往多呈現強關系,彼此間親切友善,價值觀也相仿。因此,做熟人生意並非難事。而情況在 19 世紀中葉發生了變化,當美國人從小村莊搬進大城市,小商人變成了大企業,本地市場也受到了跨國公司的衝擊。周圍的人從熟人頃刻變為陌生人,人們無法再依賴傳統的人際交往和文化准則來保障貿易。正如 UCLA 社會學家 Lynne Zucker 所言,曾經維系美國經濟運行的重要元素「信任」,迅速崩塌。在接下來的數年,正規的體系陸續出現,從而取代消失的「信任」。1870 年到 1920 年間,法規像雨後春筍般制定推出,銀行、保險、法律等行業紛紛建立起新制度。同時,政府法規陸續出台,協助規範新型產業。Zucker 說,「規範化的體制重建人與人間的信任,經濟秩序得以恢復。」 新時代下的新型信任關系 但新工業時代到來,體制又面臨新的改變。eBay 無法要求每一位擁有小商品的普通人,經過一系列複雜的法律條款,成為一個掛牌店主。於是,他們打造了自己的信任體系。先是監控 eBay 平台內的各種交易行為,發現買家和賣家的潛在問題,提供獨特的付款方式,並最終得以保障全部購買行為。由此,eBay 從原來「被動的主人」轉變為「積極的參與者」,如同銀行業、保險業在 20 世紀早期的變革,新的體制再一次重塑了信任—人與人不需要完全相信對方,只需依賴一個中間系統就能保障個人利益。 Airbnb 也模仿了該流程。最初,聯合創始人 Brian Chesky、Joe Gebbia、和 Nate Blecharczyk 只是想提供租客和房主的配對服務,隨後的事就留給雙方自行解決了。但幾年後,Airbnb 擴展、完善服務範圍--全面接手配對、付款、評論、溝通平台等。2011 年 6 月爆出「Airbnb 房主被房客洗劫一空」危機,也促使它不得不完善體制,建立信任與安全部門。 Airbnb 的信任與安全部門負責挖掘數據,追蹤每一筆訂單、預約、付款和房東與房客的溝通,以及評論的各個環節。如果交易雙方試圖透過第三方系統繞過 Airbnb,該資訊將被系統自動屏蔽。系統還能辨認出同一位租客是否重複訂房,有無刷高虛假信用記錄等不安全行為的嫌疑。 從多重角度來看,Airbnb 與 eBay 的體系類似--透過演算法為顧客承擔風險,提供充滿信任的交易平台。但問題在於 eBay 是一種雙向平台,你要麼買,要麼不買。對於這樣的系統,中間信任體系是必不可少的,它幫助消費者排除騙子和不良商家。而「共享經濟」公司面向的都是鬆散的個體,即便中間信用體系或許能夠檢測到個別不良使用者,卻沒法避免全部,比如愛開快車的瘋狂司機。因此,共享經濟需要的是更加細微嚴謹的條款。 私家車短租服務 RelayRides 的 CEO Andre Haddad 將「共享經濟」與父母的教養方式類比。「你有 3 個孩子,卻無法完全控制他們,只能引導他們做對的事情。」如果你在 eBay 買一款相機,你只需要知道賣主身份是 NikonIcon1972。 而在共享經濟模式下,人們不再匿名,而是傾向面對面溝通、交易。即便無法當面交流,雙方的帳號都與 Facebook 連通,使得虛擬交流也帶有真實的身份。RelayRides 發現租客和車主更傾向於面對面對接,交換鑰匙。盡管 RelayRides 想要發掘更加方便高效的方式來拓展生意,但沒想到傳統的「面對面」交易,更能增強雙方信任,並最大限度得保護車輛。 介紹人們相互認識,能鼓勵彼此表現得更加可靠,進而減少公司的保險支出。在「共享經濟」裡,商業仿佛已經退居其次,人與人的溝通、連結奠定了整個交易流程。從這一層面來看,當前的貿易仿佛回到了工業革命前--依賴人際關系和真實身份完成。新型的共享經濟公司更能吸引開放、前衛的早期早期採用者(early adopters)。全新的體系在讓人耳目一新的同時,也帶來了更加舒適的人際關系和交易體驗。

Quill - An Open Source Rich Text Editor with an API

Quill - An Open Source Rich Text Editor with an API

Quill is an open source editor built for the modern web. It is built with an extensible architecture and an expressive API so you can completely customize it for your use case. Some built in features include: - Fast and lightweight - Semantic markup - Standardized HTML between browsers - Supports Chrome, Firefox, Safari, and IE 9+

5/01/2014

聰明旅行小學堂/機上座位代碼藏玄機!字母為何少了I? | NOWnews 今日新聞

聰明旅行小學堂/機上座位代碼藏玄機!字母為何少了I? | NOWnews 今日新聞

有網友問YOYO:她請旅行社飛機選位,要求與同伴座一起,旅行社卻選33H跟33J,請問位子是真的坐在一起嗎?為什麼不是H/I/J連號一起?也就是:航空座位,真的沒有I嗎? 航空公司的座位,基本上是用數字及英文混合表示,因為機型的不同,座位配置也會不一樣。以商務艙來說,座位配置基本上是2-2-2或1-2-1;以經濟艙來說,有的是3-3,有的是2-4-2,或是3-4-3。 那航空公司是怎麼運用英文,去定義機上的座位呢?基本規定如下: 一、會與數字混淆的字母必須避免使用 如:I跟1很像,O跟0很像,S跟5很像,G跟C很像,B跟8很像。故,若您是1I,到底是11,還是1I? 二、發音會混淆的字母必須避免使用 如:I的發音跟走道的英文aisle的音接近,這會造成旅客與航空公司溝通上的誤會,故,你若選I行的座位,你可能會以為是坐到走道。 三、有禁忌的數字不用 如:東方是4,西方是13,有些航空座位數上會故意省去這些號碼。 四、通用規定 航空公司座位安排上不成文規定是:A/K一定是靠窗,C/D/G/H一定是走道,目前,恪遵這規定的航空有國泰、港龍、韓亞、新航、聯合等航空。 所以綜整以上,基本上I是一定不會用到,因為有太多爭議;B有時也不會用到。因此,商務艙常用為:2-2-2:AC-DG-HK、1-2-1:A-DG-K;經濟艙常用為:3-3:ABC-DEF、2-4-2:AC-DEFG-HK、3-4-3:ABC-DEFG-HJK。