網頁

機師王丰與流浪狗的故事

小花以前也流浪過

我們家的愛犬小花,前身就是流浪狗。牠因車禍導致左眼失明後主人棄養。後來因為一些事件,讓我們收養了牠。算算日子,小花成為我們家的一分子已經近8年的時間。日前於電視新聞上到在報導一位機師王丰,他花費大量的時間與金錢從事流浪狗的收養與照顧工作。那非常短的時間裡,他就成為我的偶像。新聞報道的時間太短,我想要多瞭解一些王丰的故事,二不的選擇當然是網路。

王丰說浪流狗的故事

PeoPo 公民新聞

影片來源:王丰說流浪狗的故事 駕駛艙獨家報導

PeoPo 公民新聞

影片來源:王丰真情流露 暢談流浪狗故事

新聞報導:熱血機師 散百萬救流浪狗

王丰的故事感動了我,我也希望能感動你。流浪狗的問題在於棄養,還有這些被棄養流浪狗沒有節育。突然有個想法,為什麼像陳樹菊這樣的善人,可以發光到全世界,而像王丰這樣的人不行呢?

P.S 影片中說他們有FB,我沒有找到,知道的人可以通知我一聲。感謝。

從EverNote的求職需求看未來開發人員應有的技能

EverNote的求職需求

此篇靈感來自Johnny.Net的Plurk,Johnny.NET貼了一個EverNote的求職連結,從中我們可以看到一些趨勢,我簡單做個整理,各位開發者做個Check List,其中你擁有了幾項技能。

EverNote技能需求

EverNote 職位職責

EverNote技能需求職責

這裡的關鍵點有幾個:

  1. HTML5/CSS/JavaScript的應用程式

    這裡談的是應用程式,不單只是網站網頁,我會強調在application app。

  2. prototype(原型),我猜這是指JavaScript裡的原型,通常使用到prototype都已經是JavaScript裡的物件導向(OOP)。以前JavaScript可以隨便寫寫,能動就好,現在連JavaScript都開始走物件導向(OOP)。

EverNote 技能最低需求

EverNote技能最低需求

這裡的關鍵點有幾個:

那些年,我們應該瞭解的 JAVASCRIPT 小知識 - 函式 function

JavaScript 是需要被瞭解

前一篇,我們針對了物件, 數字, 字串, 陣列, 迴圈提供了一些小知識,續前篇,我們再談一些關於函式的小知識。

函式小知識

函式(function)可說是 JavaScript 裡頑皮又最有趣的…(函式)物件。還記的「萬物皆物件,萬物皆可放」這兩句話嗎。

具名函式

function add(x, y) {
    var total = x + y;
    return x + y;
}

這是一個非常完整的函式,正式名稱叫具名函式,但一般我們簡稱的函式就是具名函式:

  1. 名稱,name
  2. 參數,x 與 y
  3. 區域變數,total
  4. 運算,x + y
  5. 回傳值,return

目前為止都是中規中舉,函式是拿來呼叫的,所以我們來不正常呼叫吧!

// 傳入兩個 undefined
// undefined + undefined = NaN (就不是整數呀)
document.writeln(add());              // NaN 
document.writeln(add(5, 9, 999));     //  14,函式忽略第三個參數

第二個才是好玩的地方,JavaScript 對於多傳入的參數給省略了,但其實不是,因為我們可以在函式之內存取一個 arguments 的變數,arguments 內有傳遞給函式的所有值。這與一般程式語言的用法不同,一般程式語言的函式,你定義幾個參數就是能傳入幾個參數,頂多是依參數的不同設計為重載,但你能傳遞的參數個數還是被函式所限制,JavaScript 透過 arguments 變數的幫忙,可以把所有函式設計成接受無限的傳入值。讓我們改寫原始函式:

function avg() {
    var sum = 0;
    // 透過 arguments.length 取得要加總的次數
    for (var i = 0, total = arguments.length; i < total; i++) {
        sum += arguments[i];
    }
    return sum / total; // 平均值
}

document.writeln(avg(1,3,5,7,9,2,4,6,8,10));    // 5.5

用起來好像很不錯,但 arguments 變數有一個問題,就是它只接受用 ,(逗點)分隔的參數值,所以如果我們還想要處理來自陣列的值,我們就要再寫一個函式來處理陣列:

// arr 為陣列
function avgArray(arr) {
    var sum = 0;
    // 透過 arr.length 取的要加總的次數
    for (var i = 0, total = arr.length; i < total; i++) {
        sum += arr[i];
    }
    return sum / total;
}

var arr = [2,4,6,8,10,1,3,5,7,9];
document.writeln(avgArray(arr));    // 5.5

明明是一樣的事,為什麼要做兩分工呢?還好,函式也是物件,要讓 arguments 變數也可以接受陣列值,最要一點小技巧,我們必須使用到一個函式物件所提供的方法 apply()

// Function.apply(thisArg, arrayArg);
// thisArg, 物件內部的 this 會等於 thisArg;
// arrayArg,傳入一個陣列的參數
var arr = [2,4,6,8,10,1,3,5,7,9];
document.writeln(avg.apply(null, arr)); // 5.5

這邊我們先關注在 ArrayArg 這個參數就好,這行 avg.apply(null, arr); 翻譯成白話就是「執行 avg 函式物件,而且幫傳入二個參數,一個給 this 使用,另一個是陣列的參數」,經過如此改良之後,arguments 變數就看得懂傳入陣列是參數。或許這樣想,經過 Function.apply() 的幫忙,它把我們要傳入的陣列 [2,4,6,8,10,1,3,5,7,9] 變成 2,4,6,8,10,1,3,5,7,9 (去除陣列實字符號[])然後傳入。

還有一個函式物件方法為 call(),用法上與 apply() 相似,差異只有第二個陣列參數,我們必須一個一個傳入,例如:avg.call(null, 1,3,5,7,9,2,4,6,8,10)

如何省下你的月租費與通話費,然後存起來或花更多XD

從打往中國的一通電話說起

我有一位長期在大陸深耕的好友(可參考:什麼是好朋友一文),近年來,因為他都在大陸發展,在台灣的時間很少,印象中只有護照或證件之類要過期,才會飛回台灣一趟,飛回又時間緊湊,算算我們應該已經超過十年沒碰到面了。最近,透過 Email 他向我問及台灣的教育情況,他原來是有意想送小孩回台灣受教育,但寫 Email 實在太費心費力,Email 寫著寫著突然想到,我們家有裝 070網路電話,號稱打國際電話很便宜,我就把 Email 內容刪除,然後寫了一句:等我電話吧!

070網路電話打大陸費用

以下由電話費省錢達人 KKBruce 為你介紹如何省下你的高額電話費,然後你可以存起來增加戶頭裡的數字,或拿去花,再花更多錢買更多東西 XD。

家用電話改申請070網路電話

只要你家裡有網路,都應該去申請一組070網路電話來當家用電話。目前台灣已經有多家業著順利開通,讀者可自行請Survey相關月租及內容,我個人是使用遠傳070家用節費盒。好處是:

  1. 1省每月月租費

    申請免月租方案,即有撥出才有算錢,如果一整個月都沒有撥出,那就不用錢。[註]我是基本方案月租$90元,但每月回饋$90元,即免月租方案。用專業術語稱「實打實付」,真正打多少算多少。

  2. 2省通話費

    比起使用中華電信的市內電話,不管打市話、長途、行動、國際(如上圖)都便宜許多,現在只要是不急的電話,能回家再打的電話,我都是回家再打。

  3. 3省同家業者070互打免費

    因為是070是網路電話,和使用Skype、Line、WhatApp、MSN、QQ…等軟體去互通話是一樣道理。

以上圖而言,打了約45分鐘,我是打到大陸的手機上,算一算1分鐘不到2元,突然覺得,國內的電信真的是爆利。

demo.tc 分享 - 版本控管以 SVN 為例

人因分享而偉大

感謝 demo.tc 整理分享此圖。我自己使用過 XMind 軟體整理製作 JavaScript 資料,Blog 的文章一多真的不易整理,想要入門版本控管者,我大力推薦。

那些年,我們應該瞭解的 JavaScript 小知識 - 物件, 數字, 字串, 陣列, 迴圈

JavaScript 是需要被瞭解

JavaScript 是一種非常方便就能上手及使用的程式語言,但真正瞭解 JavaScript 就不多了。借由 HTML5 的推助,JavaScript 再一次站上主角,第一次是 XMLHttpRequest 的 AJAX 應用,而 HTML5 滿滿的 API 全部都必須使用 JavaScript 撰寫來實現。我們必須更進一瞭解 JavaScript,而不只是簡單帶過。

這一篇會介紹 JavaScript 裡一些小知識,包含物件,數字,字串,陣列,迴圈等。

萬物皆物件

在 JavaScript 的世界裡,除了非常少數核心部分,廣義而言,可以說萬物階物件(Object),我們常看和不常看的型態都是一種物件,例如:

  • Number (數字是物件)
  • String (字串是物件)
  • Boolean (布林是物件)
  • Object (物件是物件)
    • Function (函式是物件)
    • Array (陣列是物件)
    • Date (日期是物件)
    • regExp (正規表達式是物件)
  • Null (空是物件)
  • Undefined (未定義是物件)
  • Error (錯誤是物件)

好多物件,這和我們學習的正規程式語言有很大差異,但沒關係,當你在學習 JavaScript 時,如果有卡卡的,看不懂的地方,回想這句話:「萬物階物件」,用物件的角度來看事情,先不要管它是個什麼東西,它就物件,很多時候問題會簡單很多。

數字小知識

第一件事,在 JavaScript 中沒有整數這件事。在規範中 JavaScript 數字是一個「雙精確度 64位元格式 IEEE745 值(double-precision 64-bit binary format IEEE 754 value)」,所以在做小數點大數運算時必須小心。例如,「0.1 + 0.2」或「一個 16位數或超過 16位數」的數值。

第二件事,在進行 parseInt() 函式將字串轉成整數時,一定要指定第二個參數,第二個參數指定進位數

var a = 0.1 + 0.2;
document.writeln(a); // 0.30000000000000004

var b = 9999999999999998;
document.writeln(b);

var c = 9999999999999999;
document.writeln(c); // 10000000000000000 

var d = parseInt("014");
document.writeln(d); // 12,果然有問題

var e = parseInt("014", 10);
document.writeln(e); // 14,你在貪污呀,抓到了吧

var f = parseInt("014", 16);
document.writeln(f); // 20,這是洗錢手法之一

以上程式碼純屬程式,沒有其他用意。@_@

軟體測試(Software Testing)超快速入門筆記

測試的目的

軟體測試(Software Testing)是一個大題目,不過其目標都是一樣的,例如,提早發現缺陷,提高軟體品質,產生可靠的程式碼…等。軟體測試的方法論中,測試的範圍可大可小,以程式碼的測試為例,小的單元測試(Unit Testing)、大的整合測試(Integration Testing)。除了對程式碼進行相關測試外,我們還可以對整個網站、資料庫、I/O … 等進行壓力測試。測試可是一門大學問,當然不可能在這小小一篇裡寫完,這一篇只是前言,讓大家對於測試有個初步的瞭解,先有初步瞭解,接下來再介紹 ASP.NET MVC 裡單元測試(Unit Testing)。

手動測試

  1. 了解需求
  2. 手動進行基本驗證

例如,我們寫了一段驗證 Email Address 的 Regular Pattern,我們很順的把網頁執行起來,開始在表單的 Email 欄位亂打一通,【abc@abc】、【abc@abc.】、【abc@abc.abc】 … 看不正常資料是否能通過驗證。很多寫的不好的 Regular Expression 到第三個 abc@abc.abc 就 … 過了。這樣對嗎?這就稱【手動測試】,我們日常的 Debug 就常做這種事,但你能瞭解或記得多少組的測試組合呢?

自動化測試

  1. 介面測試(UI Testing)
  2. 單元測試(Unit Testing)
  3. 整合測試(Integration Testing)

簡單說就是透過程式軟體去進行測試,沒有人的介入去進行測試。舉例來說,字母o與數字0,如果我不要加【字母 | 數字】只單純打【o/0】,你分得出來嗎那個是"ㄛ"那個是"零"嗎?我們常用密碼組合中有一組是 w0rd,透過程式 w0rd 是字串,對就是對,透過人工加老花眼,很容易輸入為 word。自動化測試就是要去除人工介入而可能產生的錯誤,進而提升測試的可信度可靠度例如手動測試的例子中,我們的測試資料有一組 abc@abc.c0m (c零m),驗證程式要能正確抓出錯誤才是對的,結果很順手的輸入成 abc@abc.com,然後跑去罵寫這支 Regular Expression 的人,事後又模擬出不來(又輸入了正確的測試資料),然後被冠上"你的程式一定有Bug."的臭名,青天大人這冤不冤?