Planet DebianTW

September 04, 2012

tsung

人最原始的欲望是什麼?

人生最重要的是什麼? 人最原始的欲望是什麼?

正好看到電影"新宿事件"講到這個, 相當值得省思的一段話~

此段話摘錄自: 電影 - 新宿事件

人最原始的欲望, 只不過是為了溫飽而已.

但是, 當人看見自己沒有的東西, 欲望就開始來了.

補充 孔子 與 馬斯洛 的想法:

  • 食色性也,人類最原始的欲望是溫飽,飽暖思淫欲,然後是性欲,也可說是繁殖的欲望.
  • 馬斯洛的需要層次理論認為, 人的需要從低到高分別為: 生理的需要、安全的需要、社交的需要、尊重的需要、自我實現的需要.
  • 後來他又補充了認知需要和審美需要。而原始的就是自然的欲望.

by Tsung at September 04, 2012 05:25 PM

September 03, 2012

tsung

Vim 自動回到檔案最後讀取位置 設定

Vim 自動回到檔案最後讀取位置, 只要於 .vimrc 做下述設定即可:

if has("autocmd")
    autocmd BufRead *.txt set tw=78
    autocmd BufReadPost *
    \ if line("'\"") > 0 && line ("'\"") <= line("$") |
    \   exe "normal g'\"" |
    \ endif
endif

最近突然發現都無法回到檔案最後讀取的位置, 看這邊找不到問題, 最後發現是 .viminfo 權限被改掉了.

.viminfo 如果無法寫入 / 修改, 上面那設定就無法啟用(無法紀錄檔案最後讀取位置在哪邊), 將 .viminfo 的讀寫權限改回自己就解決囉~ :)

by Tsung at September 03, 2012 05:25 PM

fred

MongoDB Replication 簡記

就在幾天前,MongoDB 邁入了 2.2.0 的穩定版本。我們若回頭來看,MongoDB 一直到了 2.0 前後,比起早期版本,已經有長足的進步,並且支援了相當多的功能,也對規模化和資料庫系統管理下了很多功夫。對於大多數的資料庫應用,已經非常適合。

若你對資料庫相關技術有些了解,就會知道,當資料庫的資料發展一定規模程度,或是要確保系統不當機時,我們就需要用到 Master/Slave 的方式去備份和備援,當主要(Master)伺服器出了問題,次要(Slave)伺服器便即時補上,保持系統運作。但是,既然已經有 Master/Slave 機制,是否可以有更多台備援呢?更或者進一步,將讀寫分開在不同伺服器,以分攤流量和系統負載,並加速讀寫速度。而 Replication 就是這樣的機制,可以用來動態同步多台資料庫伺服器的資料,也可以當主要伺服器因故下線時,讓其他伺服器即時替補主要機器的位置。

在 Debian 上設定 MongoDB 的 Replication 相當容易,首先在想要變成主要(Primary)的機器上,打開設定檔(/etc/mongodb.conf),並為我們的 Replication 群組命名(在 MongoDB 中稱為 ReplSet,一些書籍內翻譯成『複製組』):
replSet = mydb

重新啟動 MongoDB:
$ sudo service mongodb restart

使用指令 mongo,進入 MongoDB 命令模式:
$ mongo

於 MongoDB 命令模式中執行:
# 初使化 replSet
rs.initiate(null)

# 加入自己的 IP 位置
rs.add("192.168.11.1:27017")

若是回應成功,請先稍待數秒鐘,等伺服器偵測和初使化。然後會發現 MongoDB 的命令提示字元從『SECONDARY』變成『PRIMARY』,此時,代表這台機器已經變成 ReplSet(複製組) 中的主要機器。

同樣的,你可以開始為 ReplSet 加入其他次要的資料庫伺服器:
rs.add("192.168.11.2:27017")
rs.add("192.168.11.3:27017")
rs.add("192.168.11.4:27017")
rs.add("192.168.11.5:27017")

這邊要注意一點,如果你的 replSet 中只有兩台 MongoDB (包括 Primary 自己),單單這樣設定,會發生無法判定 Primary 該給誰的問題。因為 MongoDB 的機制,是讓眾伺服器投票決定誰當 Primary,但經測試發現,一個 RelpSet 中只有兩台機器時,常會發生問題,造成整個群組中無 Primary 機器的狀態。所以,這時要加入仲裁者(Arbiter)機器來協助排除。

Arbiter 設定很簡單,你要先準備第三台機器,裝上 MongoDB 和設定 /etc/mongodb.conf 裡的 replSet,接著在 Primary 主機上把這台機器加入到 Arbiter 伺服器清單:
rs.addArb("192.168.11.100:27017")
註:Arbiter 因為不處理資料,所以負載並不高,理論上也可以和原本的資料庫放在同一台機器上,但請注意,如果你要這樣做,需要另外啟動第二個 mongod 服務,並跑在不同的 Port。由於這樣的做法,在 Debian 上沒有標準安裝步驟,就不在本文詳述。此外,如果你只有兩台資料庫主機,記得兩台上面都要架設 Arbiter,這樣,當其中一台當機時,replSet 中還有一個 Arbiter 來決定 Primary 該給誰,不然也會發生整個群組中無 Primary 機器的問題,哪怕只剩一台機器還活著,MongoDB 依然憂柔寡斷的不知道該不該篡位。

最後一步,在其他主機上都將 /etc/mongodb.conf 設定好,並進入 mongo 命令模式初使化,MongoDB 會自動同步 replSet 的設定,然後會把 Primary 上的資料同步並複製過來:
rs.initiate(null)

如果一切沒問題,你可以在 Primary 主機上,進入 mongo 命令模式,然後使用指令看整個 replSet 的狀態:
rs.status()

後記

Replication 設定好後,只要 Secondary 的機器一上線,就會開始同步資料,如果 Primary 主機死掉,也會自動選定一台 Secondary 機器,讓它變成新的 Primary。

過程中,主要可能發生的問題是整個 replSet 選不出 Primary 的狀況,而且在無 Primary 機器時候,你無法去修改並設定 replSet ,造成整個系統不能正常運作。由於 MongoDB 沒有提供強制清除 replSet 設定的功能(至少到目前為止我沒有找到),一個非正式的方法是使用 mongo 去將每一台裡名為『local』的 db 砍掉,然後重啟 Service 並重新設定 replSet 。

by noreply@blogger.com (Fred Chien) at September 03, 2012 01:43 PM

September 02, 2012

tsung

解決 Android 無法建立穩定的資料連線通路 問題 - 2012

續約轉換門號到台灣大哥大, 也取得一隻 Sumsung Ace2 來用, 只是要連接 Google Account 的時候, 一直出現下述訊息:

無法建立穩定的資料連線通路,伺服器連線失敗,這可能是暫時性問題,也可能是您的手機無法使用資料傳輸服務。如果此問題持續發生,請與客戶服務中心聯絡。

無法建立穩定的資料連線通路,伺服器連線失敗 解決方法

解法1

  • 手機重新開機

解法2

  • 還原到出廠設定

注意: 使用兩階段認證的服務, 會遇到密碼錯誤, 需要到 Google 帳戶產生新的應用程式專用密碼.

by Tsung at September 02, 2012 05:49 PM

September 01, 2012

fred

夢想偉大,但步伐短小的 DBHouse

數個月前開始做一個計劃『AppHouse』,實作如 Google App Engine(GAE) 般的 PaaS,其志在打造自己的 Node.js 雲端軟體平台。然後發現,除了讓雲端服務可以在平台上跑起來外,資料庫管理也必需有個便於使用的機制和規劃,仔細想想,一個沒有資料庫配合的雲端服務,可沒有什麼太大的價值,於是,『DBHouse』便應運而生。

你可以在 github 上找到這個專案:
https://github.com/Mandice/node-dbhouse

DBHouse 起初的開發目的,是讓使用 AppHouse 架設以及開發自己雲端服務的人,可以很容易存取資料庫。此外,對我們而言更便於管理資料庫資源,面對許多不同的服務,不需要特別為他們開設資料庫權限,亦或是買許多硬體和主機,建立起許多 VM 並做各種安全性規劃。其實,如果把 DBHouse 的用途,想像成 Google 在做的事,就很容易明白:『在 GAE 上你可以使用統一的 Database APIs,存取 Google 提供的資料庫系統(BigTable)。』,同理,我們也是在做同樣的事。

只不過,學 Google 開發自己的一套資料庫太過於困難,不是一個可以達成的目標,所以我們仍然選用 MongoDB 當做 PaaS 的資料庫底層。僅管資料庫不是自己開發的,我們還是可以提供統一的 API,讓開發者存取。統一的 API 有個好處,若能做到當開發者在使用的時候,不需要知道自己在使用什麼資料庫,日後就可以在這 API 之後串接或替換不同的資料庫系統,有很大的彈性可以擴充。

當然,更遠大的目標是希望在一個 Table(Collection) 內,因應不同的欄位需求,而交由不同資料庫處理,更進一步發揮不同資料庫的特色。但是,這夢想遠大,技術上也有很多盲點待討論,所以能不能實現那是另外一回事,至少,短期內在我們的能力範圍和經濟狀況下,暫時無法達成這一步。

雖然 DBHouse 有這樣的初衷和夢一般的計劃,但不代表 DBHouse 一定得和 AppHouse 配合使用,更準確的說,他們本來就是獨立各自發展的專案,各自可獨立運作。說穿了,DBHouse 本身就只是一個 Database API,你可以在 Node.js 裡使用 DBHouse API 去操作自己的 MongoDB(目前只有支援 MongoDB,其他驅動還待開發),也提供了一套 ORM 供開發者使用。

目前 DBHouse 的特色:
  • 支援簡易的 ORM (包括:多層資料結構)
  • 支援 MongoDB v1.6+
  • 已實作驅動層以便支援其他資料庫
  • 盡可能貼近 SQL 語法習慣(如:select、insert、update、delete、replace)
  • 以 Mongo Query Language 為主要查詢語言
  • 根據 ORM 設定,自動轉換欄位類型(如:讀寫 MongoDB 時,自動轉換 BinObject)
    ex, 讀出 UUID 時轉成字串,以便 JavaScript 操作或網頁間傳遞,存入或查詢時,自動轉成 MongoDB 的 BinObject

目前仍缺少的功能:
  • Cursor
  • 索引(Index)管理
  • 完整的文件

使用 NPM 安裝:
npm install dbhouse

展示如何使用 DBHouse 新增一筆資料:
var DBHouse = require('dbhouse');

var dbHouse = new DBHouse;

/* Define schema */
var Address = new DBHouse.Schema({
company: { type: 'String' },
home: { type: 'String' },
updated_time: { type: 'Date' }
});

var Contact = new DBHouse.Schema({
_id: { type: 'UUID' },
name: { type: 'String' },
email: { type: 'String' },
tel: { type: 'String' },
created: { type: 'Date' },
address: { type: 'Schema', schema: Address }
});

/* Create connection with database server */
dbHouse.connect('mongodb', { host: 'localhost', port: 27017 }, function() {

/* Create a database operator */
var db = new DBHouse.Database(dbHouse);
db.open('dbhouse')
.collection('contact')
.model(Contact)
.insert({
name: 'Fred Chien',
email: 'cfsghost@gmail.com',
tel: '0926123456',
created: new Date().getTime(),
address: {
company: 'Taipei',
home: 'Taiwan',
updated_time: new Date().getTime()
}
}, function(err, data) {
if (err)
throw err;

console.log(data);
});
});
註:『collection()』可使用『table()』替換,兩者功能一樣,只是為了同時符合 SQL 和 NoSQL 的習慣。

如果只是想做簡單的資料庫操作,也可以不使用 ORM 機制:
var DBHouse = require('dbhouse');

/* Create connection with database server */
var dbHouse = new DBHouse;
dbHouse.connect('mongodb', { host: 'localhost', port: 27017 }, function() {

/* Create a database operator */
var db = new DBHouse.Database(dbHouse);
db.open('dbhouse')
.collection('contact')
.select({
email: 0
})
.where({
'$or': [ { name: 'Fred Chien'}, { name: 'Stacy Li' } ]
})
.limit(1)
.query(function(err, data) {
if (err)
throw err;

console.log(data);
});
});

如果你使用過 MongoDB ,也熟悉傳統 SQL 資料庫,你一定會發現兩者對於 update 的定義相當不一樣,因為在 MongoDB 中預設方法是直接取代掉整筆資料,而傳統 SQL 中只是修改欄位而已。但是在 DBHouse 中,對 update 的處理是採用 SQL 的動作,也就是修改欄位,若是要整筆取代,則另外使用 replace()。

修改 tel 欄位的資料:
var DBHouse = require('dbhouse');

/* Create connection with database server */
var dbHouse = new DBHouse;
dbHouse.connect('mongodb', { host: 'localhost', port: 27017 }, function() {

/* Create a database operator */
var db = new DBHouse.Database(dbHouse);
db.open('dbhouse')
.collection('contact')
.where({
name: 'Fred Chien'
})
.update({ tel: '0926333572' }, function(err) {
if (err)
throw err;
});
});

既然 Mongo Query Language 是特色,當然可以吃特殊命令,以下程式將把 reviewed 欄位值加一:
var DBHouse = require('dbhouse');

/* Create connection with database server */
var dbHouse = new DBHouse;
dbHouse.connect('mongodb', { host: 'localhost', port: 27017 }, function() {

/* Create a database operator */
var db = new DBHouse.Database(dbHouse);
db.open('dbhouse')
.collection('contact')
.where({
name: 'Fred Chien'
})
.update({ $inc: { reviewed: 1 } }, function(err) {
if (err)
throw err;
});
});

後記

大致上來說,DBHouse 已經足夠使用,但真要挑惕的話,還是有很多細節功能待補齊。而目前開發模式,是依照我們手邊專案所需,為其添加新功能,如果遲遲沒有加入您想要的功能,還請見諒。

此外,如果有人喜歡 DBHouse,歡迎投入開發並提交 Patch。:-)

by noreply@blogger.com (Fred Chien) at September 01, 2012 11:11 PM

August 30, 2012

jserv

MPRC 的 UniCore32 架構

其實不是什麼新聞,只是台灣較少這方面的訊息,我只是稍微紀錄。若說位於台灣新竹的 [晶心科技] 開發出的 Andes CPU/ISA 是「台灣芯」,那麼設址於北京的 [北大眾志微系統科技] 開發出的 UniCore32 (32-bit 定點 CPU) 與 Unicore-F64 (64-bit 浮點 co-processor) 就是「中國芯」。儘管兩者在設計理念有所不同,但「堅持自行設計、自主開發,擁有自主知識產權的發展思路」這樣的指導原則卻是相同的。 MPRC 的全名為 [Microprocessor Research and Development Center ] (北京大學微處理器研究開發中心; 後三個字母恰好是偉大祖國的縮寫),而北京北大眾志微系統科技有限責任公司則是 MPRC 商業化公司,成立於 2002 年 11 月,是中國專業從事自主 CPU 及系統設計的高新技術企業。在中國國家科技部、信息產業部、教育部等主管部門的重點支持下,北大眾志與 MPRC 提出了自己的 ISA (參考了...

by jserv at August 30, 2012 12:08 PM

August 22, 2012

FourDollars

如何解決在 Ubuntu 上面安裝 VirtualBox 後缺少 vboxusers 群組權限的問題

正確的解決方式是執行一個指令就好了

$ sudo gpasswd -a username vboxusers

或是執行另外一個指令

$ sudo usermod -a -G vboxusers username

但是有一點要特別提醒的,就是第二個指令的 '-a' 要記得加,不然就會杯具... 冏rz

杯具就是其它原本已經加入的群組都消失了,只剩下 vboxusers 一個群組。XD

修復杯具的方法是先從其它相同版本的 Ubuntu 上面查詢本來應該要加入的群組來,查詢的指令是:

$ id -Gn username

然後再把它們加上去。

by Shih-Yuan Lee (noreply@blogger.com) at August 22, 2012 01:08 PM

August 20, 2012

fred

【COSCUP 2012】閉幕!簡報釋出!

國內一年一度最大的開放原始碼(Open Source)活動,再次順利落幕。很多人都意猶未盡,所以每當活動結束,便會開始思考明年要分享什麼、反省今年哪裡做的不夠,有人會在活動過後的連續幾天,電腦上開著簡報編輯器,盯著空白的內容,靜靜的發著呆。可惜的是,最後總是因為沒有任何想法而放棄。一直到了明年 COSCUP 的徵稿消息發出,一堆人又開始拾起空白了近一年的想法,擠出一個題目,逼著自己在一兩個月內完成,上台發表。就如同學校的期中、期末考,沒有死到臨頭,大多數同學都沒有唸書的動力,也不會激發自己 120% 的腦力和體力。所以,Event-Driven 的開發模式,一直是在很多開發者促使自己進步的方式。

別以為兩個月時間很充足,大家都有外務、有工作、要過生活,所剩的時間實在有限,所以每當到了 COSCUP 的前夕,總是會聽到很多講者在拼命趕工的聲音。其實,這樣都還算是常態,頂多拼命一點,少睡一點,都還可以頂得過去。可是,今年一次給『兩個 Talk』,就真的讓人會虛脫到不行,還好,熱情能戰勝一切。:-)

由於今年活動承辦的分工方式比較特殊,所以被選上了兩個稿,分別是:
  • JavaScript 全面逆襲!使用 Node.js 打造桌面環境!
  • 用最潮的 JavaScript 盡情開發 KDE/Qt 程式

前者是總結這一年來,我們團隊所開發出來的各種 Node.js APIs,並整合成為一個如同 GNOME/KDE 的桌面環境(Desktop Environment),並展示使用 JavaScript 開發出來的 Juice Desktop Environment(果汁桌面環境)。後者則是為符合 KDE 的議程方向,探討使用 Node.js 開發 Qt 程式的可能。





後記

退學不是件好的事情,請勿模仿。:-S

by noreply@blogger.com (Fred Chien) at August 20, 2012 12:29 PM

August 12, 2012

yungyuc

Python to COSCUP

Python to COSCUP

這個週末就是 COSCUP 了,而感謝 littleq 的奔走,今年我們 Python Taiwan 會有一個攤位

我們會在 COSCUP 的 Python 攤位準備之前為 PyCon Taiwan 製作的貼紙和手冊,給大家作紀念。不過更重要的是,攤位有安排時段作 Python 的火力展示,時間表已經寫在 http://j.mp/NwDmqq 了,請大家一起來我們的攤位坐坐。目前我們還有一些留空的時段,各位寫 Python 的朋友,請你們一起來參與展示活動,趁 COSCUP 這個機會來 Hack!Python

即使你沒打算展示什麼東西,我們也很需要你來幫忙顧攤。熱心的朋友們,請來 http://j.mp/Pf22Wa 填一下顧攤的時段。除了 happy hacking 之外,我們也可以來聊聊明年的 PyCon Taiwan。萬事待興,非常有趣。

對我們的 Python 攤位有任何疑問,可洽詢負責人 littleq,或者到 http://groups.google.com/group/pythontw/ 或 Freenode/#python.tw 來聊聊。

August 12, 2012 11:30 PM

August 11, 2012

tsung

貝貝講父親節快樂 + 爸爸生日快樂 (2Y6M)

今年的父親節心情還是無法平靜, 不過看到 貝貝的父親節錄影, 還是要幫她做些紀錄, 要作個稱職的爸爸.

今天是我的國曆生日, 也是同學 + 同事 明玉的結婚日, 只是我無法參加, 也在此祝福她幸福快樂~

也在此感謝 Facebook 的朋友們的祝福, 希望大家天天都快快樂樂, 平安健康. :)

父親節生日蛋糕

貝貝講父親節快樂 (2Y6M)

影片講的話, 打在下面: (感謝小田老師拍的影片, 原始完整影片於: 101年七階小朋友 祝爸爸父親節快樂)

  • 爸爸我愛你
  • 我賺很多錢給你
  • 我要幫爸爸搥搥背
  • 幫爸爸拿拖鞋
  • 爸爸辛苦了
  • 謝謝爸爸
  • 註: 影片使用 Avidemux 切割.

by Tsung at August 11, 2012 02:26 PM

August 04, 2012

tsung

獻給世界上最偉大的父親 - 我爸爸 (1950 ~ 2012)

此篇紀錄我爸: 李清海

  • 生於: 農曆 38-12-27 (國曆:39-03-14)
  • 過世: 農曆 101-06-07 (國曆 101-07-25 06:08)
  • 告別式: 農曆 101-06-18 (國曆 101-08-05 7:20) 高雄金山寺金山廳
  • 光明王寺 福壽天 東二區 7-7
  • 修明 居士、羅漢

IMG_2560

IMG_2620

爸爸,

  • 在我小的時候, 都在在台灣拆船工作後, 再來去印尼拆船工作, 能夠陪伴的時間不多, 但是, 每次從印尼回來, 總是會帶幾盒巧克力回來.
  • 我們一家人, 從小到大, 不管面對任何問題, 您都可以將問題解決掉, 把我們都扶養長大.
  • 關於工作, 在從印尼回來後, 雖然面臨到中年失業的問題, 但是, 還是想辦法開店、經商、做生意來解決, 讓我們一直維持到現在. 而我從電腦組裝, 載送, 一開始也都是您開車幫忙運送. 在我就業後, 特別跟我說: "處處留心皆學問", 然後, 聽我說上班工作都已經完成, 還特別叮嚀我, "事情做完就要多去幫別人做", 我會永遠記得.
  • 關於教育, 只要我們願意讀書, 不管公立、私立, 都會想盡辦法讓我們讀完, 而平常在家, 您就常常買書、看書, 而且常常將書裡面的故事、知識講給我們聽, 讓我知道讀書有多大好處, 以致於現在也很喜歡買書、讀書. 而我在學電腦相關領域時, 最喜歡拉著您一起去書店, 因為我需要的書, 您一定不管怎麼樣都會買給我.
    您之前在印尼就會學印尼話, 現在跟日本做生意, 就常常再看日文書、聽日文錄音帶, 努力學習日文.
  • 關於音樂, 孫建平-蝴蝶夢飛 - 這首歌是您一直放在車上聽得CD, 之前您跟我解說過台灣之前蝴蝶很漂亮、很多, 但是就因為這都被抓去賣, 這首歌就是把這個寫在歌曲裡面.
    歌詞: 孫建平 - 蝴蝶夢飛 (出自凡夫所寫、圓聲唱片出版)
    過去咱台灣的山跟地 有很多蝴蝶底在飛
    春天若來滿山遍野 飛的多自在
    台灣人說是寶島 偏偏無金銀財寶
    蝴蝶乎人抓來賣 越大隻是越好價飛呀飛 你放心啊飛
    我們不會再抓你來買賣 摧殘你無辜的美麗
    飛呀飛 你放心啊飛
    飛在咱自己的山溪 飛在咱自由的土地
  • 關於知識, 平常除了工作外, 您會常常研究很多事務, 花草種植、養生、宗教... 範圍沒有侷限, 而每樣在做完, 都會告訴我們, 我也因此知道很多相關的知識, 也由此懂 蘇東坡的幽默、中醫是如何的治病、八段錦、佛教、弟子規... 等等太多太多.
  • 關於熱心幫忙, 有一次看到您眼睛旁邊有一條痕跡, 沒想到居然是看到巴士的車廂打不開, 跑去幫忙, 結果車廂後來打開時, 突然一下子拉上去, 差一點就刮到眼睛. 而周圍鄰居也是常常去到處幫忙, 告別式那天, 鄰居們也都來了, 而且都哭非常傷心, 大家都非常的想念您.
  • 關於下棋, 您常常會跑去看別人在外面下棋, 也教我怎麼走暗棋、軍旗.
  • 關於開車, 您不習慣坐別人開的車, 因為會怕、會暈車, 所以開車要注意的小細節很多, 開車要如何開才不會讓人暈車、開車不只是注意自己, 還要注意別人是否有專心開車, 會來不小心撞到自己等等.. 要開到讓您可以把手從抓住手環上面移下來就是個很大的挑戰, 這些我都學會了, 我也會在往下傳承下去的.
  • 關於身體, 換肝? 何必在多打壞一個人的身體. 要是之前中醫那醫生還在, 靠他就可以治癒了, 現在在想辦法找找厲害的中醫就好. (我們也確實都達到了, 要不是現在科技發明的一些莫名其妙的東西, 就不會有現在的結果.)
  • 關於生活, 任何時候, 甚至在醫院明明就身體不太舒服, 都還會問說, 那電視開的聲音, 會不會吵到隔壁的人. 平常在家裡椅子推動的聲音, 也會考慮, 會不會影響到樓上、樓下的鄰居. 記得有一次吃喜酒, 風雨很大, 但是一直潑水進來, 您一走過來幫忙處理, 還沒動手時, 旁邊姑婆就說: "海啊來了, 都沒有問題了.", 萬事到您手上, 都可以迎刃而解.
  • 關於新聞, 我來到台北, 對親戚的事情就比較少知道, 都是您在告訴我有什麼事情, 甚至, 新聞只要跟我的工作、環境、住家比較有關係的, 都會馬上打電話來問我, 有沒有任何事情, 有沒有影響...
  • 關於孫女, 您很愛芷庭, 在醫院要離開, 尿盆我們打算把它丟了, 但是, 您知道芷庭喜歡用這個上廁所, 還特別跟我們說要帶著, 要帶上去給芷庭用. 身體在不舒服, 沒什麼辦法講話, 還是會叫芷庭的名字, 摸摸她的臉、手, 帶著她出去玩, 玩吹泡泡、騎腳踏車. 她在玩家家酒, 明明您手就沒什麼力, 還是會陪著她玩, 喝給她看.
    聽到芷庭腸病毒, 馬上上來台北找遍週遭區域的草, 為了找到珠仔草(圖1, 圖2), 揉爛擠汁再加點蜂蜜, 喝下去後, 隔天的嘴巴破洞馬上就消失, 腸病毒一次就消失無蹤了.
  • 關於未來, 我會好好教育女兒, 但是她現在太小, 可能沒辦法留住對您的記憶, 但是, 我會常常帶她回去給您看, 希望您可以安心的去西方極樂世界.
  • 當然, 還有太多太多沒有紀錄, 等想到再來慢慢補上.

謝謝您這30幾年來的照顧.

這是我爸爸, 世界上最偉大的爸爸.

by Tsung at August 04, 2012 08:40 PM

August 03, 2012

fred

一起來用 Courser 吧!管理 Route 的利器!

跳脫出前端應用之後的 JavaScript 語言,所遭遇的挑戰極大,至今還沒有一個非常好的開發模型和原則,讓人不免抱怨。因為沒有前人可學習,也沒有太多文獻可以參考,所以,為了讓自己能夠更快完全領會 JavaScript 在各種極端環境之下的開發情況,在這一年來,花了相當多的時間投入去做各種不同類型的 Project,從 Web service、Embedded System、System Programming 到各式雲端技術開發,嘗試從中累積更多用 JavaScript 打天下的經驗。唉,慣 C 都不慣 C 了。

不過,做了許多東西後,就會開始有機會重覆開發相同的功能,這時就會希望能重覆利用舊的程式碼,讓同一段程式,不用每次都重寫一次而浪費時間。於是,開始慢慢把之前做過的專案整理,然後整併許多功能,獨立出來變成一個個 Node.js 模組。

Courser 就是這樣被獨立出來的專案,而功能是為 Express Web Framework 提供一個管理 HTTP Routing 的方案。你可以從 github 上找到專案首頁:


Express 範例的傳統做法,是每次增加一個 API 或頁面,就要更動一次主程式檔案(app.js),以管理 HTTP Routing,相當麻煩,尤其當有許多人協同開發時,更多不必要的程式碼衝突便出現了。此外,管理專案中的 Handler 也是件麻煩事,因為我們總不可能將所有的 Handler 寫在同一支檔案裡,必須適當分類分檔,才能便於維護。隨著專案規模越來越大,需求越來越複雜,這便是件苦差事。

這些問題當然有解決方案,Express Source Code 裡的範例,就提供了幾種不同的方法,供開發者參考,只不過,這些方法大部份很簡陋、不通用,多半還是要靠專案開發者自行想辦法,開發一套機制,才能解決需求。因此,之前為了專案的需要,就實作了 Courser 去管理專案下的 HTTP Routing 和所有的 Handler,嘗試讓 routes 不要每次開發出來,都是這麼醜。

Courser 目前已經釋出 v0.0.2,你可以從 NPM 上直接安裝它:
npm install courser


假設你已經會使用 Express Web Framework,你可以直接引入 Courser,並設定 HTTP Routing 的擺放位置:
var express = require('express');
var Courser = require('courser');

var app = express.createServer();

// Loading and Initializing Routes from specific path
var courser = new Courser(app);
courser.addPath(__dirname + '/routes');
courser.init(function() {
    app.listen(3000);
});

Courser 會載入所有指定目路底下的 *.js 檔案,所以在 routes 的目錄下,我們直接建立新檔(如: test.js),然後這樣定義 Routing 和 Handler:
module.exports = {
  '/': index,
  '/hello': hello
};

function index(req, res) {
    res.end('HOME');
};

function hello(req, res, next) {
    res.end('HELLO');
};

你可能不喜歡這樣的型式,喜歡自己針對不同的 HTTP Method 定義不同的 Handler:
module.exports = {
    '/method': {
        get: get,
        post: post
    }
};

function get(req, res) {
    res.end('GET Method');
};

function post(req, res) {
    res.end('POST Method');
};

要使用 Express Web Framework 的 Middleware 機制,從中安插多個 callback function,也可以這樣寫(用 Array 表示):
module.exports = {
    '/middleware': [
        DoSomethingBeforeHandler,
        middleware
    ]
};

function DoSomethingBeforeHandler(req, res, next) {
    console.log('Do Something');
    next();
};

function middleware(req, res) {
    res.render('index', { title: 'Courser Example' });
};

後記

如果日後能加上 auto-reload 和即時抽換 Handler 的功能,就更省事了!

by noreply@blogger.com (Fred Chien) at August 03, 2012 03:21 AM

August 02, 2012

FourDollars

在 Ubuntu 上面減少 apt-get update 的時間


想要讓 apt-get update 快一點完成
除了找一個速度快又近的 Mirror 點
另外就是減少下載的檔案數量
如果對中文翻譯不是很在意的話
可以增加一個檔案 /etc/apt/apt.conf.d/60language
裡面寫著 Acquire::Languages {"none";}; 就是什麼翻譯都不要下載
不過這樣會導致 Debian package 裡面的 Long Description 都看不到了
如果不在意這些 Long Description 也還好
又或者改用 Acquire::Languages {"en";}; 下載英文的 Long Description 就好了
又或者有些人就只想要下載正體中文的翻譯,那就使用 Acquire::Languages {"zh_TW";}; 吧
系統預設上是下載當下環境的語言跟英文
詳細的使用方式請看 `man apt.conf`

by Shih-Yuan Lee (noreply@blogger.com) at August 02, 2012 12:13 PM

July 30, 2012

Cornelius

Patch for bufexplorer.vim

This solve the problem detected while processing function <SNR>63_BEActivateBuffer

by Yo-An Lin (noreply@blogger.com) at July 30, 2012 11:18 AM

July 28, 2012

jserv

演講:UNIX v6 原始程式碼導讀

有什麼事值得你投入生命中一半的歲月呢?對我來說,除了作業系統相關的項目,我真的想不出來其他更具體的。雖然 UNIX 並非最早的作業系統,但絕對是現代作業系統設計的典範。研究歷史,是專家的使命,但瞭解歷史,則非專業人士的特權,探索往昔是為了更瞭解現今,對 UNIX 系統更是如此。8 月 4 日 (星期六),我將在國立臺灣大學進修推廣部,作一場時間約六小時的免費教育訓練,主題為「UNIX v6 原始程式碼導讀」,詳情可見 Study-Area 公告 [八月份 SA@Taipei -- UNIX v6 原始程式碼導讀]。以下引述活動資訊: 時間:2012 年 8 月 4 日 (星期六) / 上午 10:30 ~ 12:00 + 下午 13:30-17:00 地點:國立臺灣大學進修推廣部 台北市羅斯福路四段107號 303 教室 (位於羅斯福路上靠近基隆路口) UNIX...

by jserv at July 28, 2012 08:18 AM

July 15, 2012

fred

GNOME.Asia Summit 2012 香港遊之簡報釋出

最近因為忙錄,遲遲未寫下今年六月初飛去香港(Hong Kong)參加 GNOME.Asia 2012 的心得,以及將當時在活動中的簡報檔釋出。:-)

對一個台灣來的人而言,香港不會讓人感到陌生,若不說新發展的地方,走在街頭,讓人有走在台北西門町的感覺,或是像台灣一些繁華的老市區以及夜市,站在路中央看過去,當下可以感受到早期台灣和香港之間的微妙關係,其共同點難以言喻。事實上,除了廣東話,還有那些銅板和五花八門的紙鈔外,沒有什麼會讓台灣人不習慣的地方。

話說回來,今年的 GNOME.Asia 2012 是在香港城市大學舉行,據當地朋友所說,這是一個與大型商場(百貨公司)纏綿的學校,由於學校、商場和交通樞紐的動線很密切,走在裡面,你會感覺到商場就像學校的一部份,走沒有幾步路,就會走入了商人的魔掌,錯進了名牌服飾的專櫃。

不過,身為一個宅宅開發者,當然不會被這些名牌服飾所迷惑,它們是嚇不倒我的!活動,當然才更重要!

我能了解,很多人在今天看到 GNOME 幾個大字就興趣缺缺,GNOME 讓大家又愛又恨,許多人不喜歡 GNOME 3 將桌面大改,像是 Linux 之父 Linus Torvalds 前些日子跳出來劈天蓋地的砲轟;也有很多人(像是我)對於許多元件被改壞或是效能不彰而感到很不悅。但由於歷史因素,太多人無法逃脫出 GNOME 所設計出來的大框架,就算你不想用 GNOME 的桌面環境,在 Linux 等 Unix-like 系統中,你還是免不了要去使用基於 GTK+/GLib 所設計的軟體,可以說 GNOME 無處不在,已經不是單單『桌面環境』一詞可以概括。

喜不喜歡新一代的 GNOME 桌面環境是其次,對於我而言, GNOME 是一座作業系統『操作機制』的兵工廠,他生產了太多元件讓我們可以自由使用,然後提供方法讓使用者和開發者可以用『人的角度』去控制作業系統。所以,如果你真的不滿意新的 GNOME 圖形介面設計,自己將 UI 打掉重練也不會是件難事。

這次去香港參加活動,見到了不同地方的開發者和使用者,尤以『中文輸入法(包括輸入框架)』這個議題特別引起討論。這些同是非英語系的 CJK 開發者和使用者們,有頗多的交流。雖然有些議程全程是以廣東話進行討論,我完全聽不懂,但好在有些坐旁邊的香港朋友自動自發充當即時翻譯,還順便介紹了許多當地輸入法開發者的來歷,讓我也能聽懂他們在討論什麼東西。(由此可見中文這語言多難,雖然都是用中文字,但你頂多只能看的懂,卻聽不懂)

至於我,在這次活動中,介紹了以 Node.js 開發現代桌面程式的解決方案,以及我正在做的開放原始碼專案『jsdx-toolkit』。簡報也在此公開供各界取用:
 

後記

為了公事,此行我也順道從香港搭地鐵去了深圳一趟,其中通關、走老遠再通關,回程還錯搭了一班深圳當地的公車,花了好幾個小時繞了一大圈,也算是遊了深圳,但累垮了我的雙腿和屁股。

此外,這圈子真的是很小,活動上也碰到了在 OpenSUSE Team 的開發者(前身是 Novell,OpenSUSE 現在獨立運作),由於我過去也在 Novell 待過,所以有許多共同的話題。:-)

by noreply@blogger.com (Fred Chien) at July 15, 2012 07:11 PM

tsung

Linux user crontab 檔案存放位置

各種類的 Linux 都一樣, 使用者 用 crontab -e 編輯排程後, 總會把這些資料紀錄在某個地方.

平常都不需要在意, 但是如果是搬移 NIS 且 順便有修改帳號的 id / group id 等等, 就會爆炸, 於是花點時間翻了一下~

註: 此為 Ubuntu / Debian Linux 的存放位置.

User Crontab 儲存後 的 檔案存放位置

  • 目錄: /var/spool/cron/crontabs
  • user1: /var/spool/cron/crontabs/user1
  • user2: /var/spool/cron/crontabs/user2

by Tsung at July 15, 2012 05:15 PM

July 12, 2012

tsung

美國 ISP 業者會儲存多久的 IP Logs - 2012

IP 位址硬要算的話, 應該也算是隱私的一部分吧~

此篇文章: How Long Does Your ISP Store IP-Address Logs? 有統計, 美國的 ISP 業者, 會儲存 IP 位址多久的時間. (註: 下述摘錄自此篇文章)

Time Warner Cable

  • up to 6 months.

Comcast

  • 180 day retention policy

Verizon

  • 18 months

Qwest/Century

  • approximately 1 year

Cox

  • up to 6 months

Charter

  • one year

DSL Extreme

  • two weeks

Teksavvy

  • two years

Eastlink

  • one year

by Tsung at July 12, 2012 05:15 PM

July 11, 2012

tsung

Git immersion 入門教學文件

Git 市面上的書, 可能很多都太過複雜, 這份文件(或者可以說是線上電子書)可以很快速的入門與理解 Git 相關的操作與設定, 非常推薦閱讀.

Git immersion 入門教學文件

相關網頁

by Tsung at July 11, 2012 05:37 PM

July 09, 2012

tsung

使用 Google+ Hangouts 來作視訊聊天

今天試用 Google+ Hangouts 來玩視訊聊天, 效果還蠻不錯的, 而且特效也很強, 玩很多人臉辨識的遊戲~

註: Google+ Hangouts 可以視訊聊天、玩特效、透過 YouTube 直播、錄影、直接呈現桌面環境操作 等等.

於 Ubuntu Linux 使用 Google+ Hangouts Package (Plugin) 安裝

於 Linux 要使用 Google Hangouts 需要另外安裝 Package (註: Windows 我不確定)

安裝 Package 步驟如下述:

  1. Install Google voice and video plugin
  2. 注意:Google 語音及視訊通訊的安裝作業會在系統內添加 Google 語音及視訊通訊存放區,以便系統日後自動更新 Google 語音及視訊通訊服務。如果您不希望設置 Google 語音及視訊通訊存放區,請在安裝套件前執行 "sudo touch /etc/default/google-talkplugin"。
  3. 下載 - 64 位元 .DEB (適用於 Debian/Ubuntu) - (請選擇自己的 OS 版本)
  4. sudo dpkg -i google-talkplugin_current_amd64.deb
  5. 安裝完成進入 Google+ 就可以邀請視訊聊天了.

相關網頁

 

by Tsung at July 09, 2012 05:49 PM

台灣駭客年會 HITCON 懇請協助宣傳並敬邀您共襄盛舉 - 2012

此篇幫 HITCON 做點宣傳~ 有興趣的趕快報名吧~ :)

2012/07/20 ~ 2012/07/21 台灣駭客年會 HITCON @ 台北南港中研院

還記得歷屆 HITCON 的現場 Demo 破解金融卡、儲值悠遊卡、揭露 APT 威脅 及 各種雲端議題?

今年八國講師, 24 場精采演講,繼續帶您一窺駭客技術的奧秘!

左破 iCloud、AppStore,右破還沒上市的二代悠遊卡,再破自然人憑證;
啟動 Foxy 隱藏木馬、控制核電廠 SCADA 系統、Windows 8 還沒出先揭露 kernel 弱點;
DreamHost 被入侵全記錄、中國駭客地下經濟學、跨國 DDoS 及 LLVM 詳盡解析..….

Blackhat 等級的講師,不到 Blackhat 票價的 5%,出國機票錢都幫您省下了!
議程才公佈一半,學生票已銷售一空,全票也即將完售,快立刻搶進以免向隅!

購票資訊詳見官方網站:http://hitcon.org
再不行動就來不及了!另有團報贊助優惠唷!

by Tsung at July 09, 2012 02:10 AM

July 06, 2012

fred

Node.js v0.8 大變革?!Native Module 開發者的福音!

最近 Node.js 推出了 v0.8 穩定版,除了改善 I/O 的效能和一些 API 外,最大的變動就是跨平台開發環境的改進。包括了決定徹底使用 GYP 取代 node-waf(wscript)、宣布 libev 將死。或許,這些變動這對大部份的 Node.js 使用者來說不是什麼問題,但對於我們這些寫 Native API 和底層的開發者來說,關係到自己程式能不能跑在未來 Node.js 的新版本上,而且產生了很多移植性的工作。但是整體來說,好處其實大於壞處,因為以後我們的程式更容易跨平台了。

轉用 GYP

GYP 是 Google 發展出來的 Build script tools,就像是傳統 Autotools、Makefile 或 CMake 這類的工具。GYP 最早被應用在廣為人知的 Google Chrome/Chromium Project ,是個跨平台的解決方案,這也是為什麼 Node.js 決定要採用的主要原因。

在以前,不同的平台上,你需要為 C/C++ Addon 製作不同的 Build script,沒有統一的方法和途徑去設置和編譯程式,這讓跨平台的工作非常麻煩。使用 GYP 後,可以大幅減少這樣的問題。

棄 libev ,轉用 libuv

首先,有一點要注意,Node.js 開發者打算在下一個穩定版(應該是 v1.0)拿掉 libev 的支援,所以請所有的開發者盡快轉用 libuv。

libev 是 Node.js 在非 Windows 平台上所使用的 Event loop 解決方案,讓 C/C++ 開發者可以開發 Event-driven 的程式,除了可以用來監聽 FileSystem 等用途,也更容易整合 Thread 進 Event-driven 的設計模式中,要是你有印象,GLib 其實也是類似的解決方案之一,只不過 libev 更為輕量。不過, libev 主要還是被應用在 Unix-like 的系統上,若 Node.js 要支援多個平台,在其他系統上,就必需尋求別的解決方案,如 Windows 的 IOCP。

而過去這樣的情況,對我們 Node.js Native Module 開發者來說,是個莫大的挑戰,你必需在不同系統上,採用不同的寫法,導致開發上很困難。所以 Node.js 自行開發了 libuv,包裝了 libev 和 IOCP 等機制,讓所有的開發者,只要統一使用 libuv API 即可,不用再管跨平台的問題。

換句話說,如果你直接使用 libuv,在 Linux 等 Unix-like 的系統上,其底層依然還是使用 libev,如果你是在 Windows 上,則底層會使用 IOCP。所以,與其說是棄 libev,其實是避免開發者直接使用它。

libuv 直接支援 Thread 操作

在 Node.js v0.6 以前,libuv 還並不支援直接的 Thread 操作,若你要達成這樣的需求,只有使用 uv_queue_work() 去模擬,不然就是要使用作業系統原生的 Thread API。不過,若直接使用作業系統原生的 Thread API,也同樣有跨平台的問題存在,所以 libuv 在新版中已經提供 Thread 的包裝 uv_thread_t,也提供相關的 API,讓開發者使用。

by noreply@blogger.com (Fred Chien) at July 06, 2012 05:13 PM

July 03, 2012

tsung

政府萬稅萬稅萬萬稅 - 2012

稅金這兩年吵的很兇, 也有很多人覺得跟自己沒關係, 這個影片看完就會知道是否跟自己有關係. :P

註: 雖然這是在講中國, 但是基本上全世界都是一樣的.

到底誰在繳稅? 誰是納稅人? 為何繳稅跟每個人都有關係?

基本上, 只要你有在消費, 你都會繳到稅金.

by Tsung at July 03, 2012 05:02 PM

July 02, 2012

tsung

MySQL Fulltext Search 使用方式

使用 MySQL 來達到 Fulltext 的效果, MySQL 對於 英文會自己依照空格去斷開, 中文就得要自行斷詞囉~

MySQL Fulltext Search 使用方式 與 注意事項

MySQL Fulltext 不支援 InnoDB, 需要使用 MyISAM.

建立 Table 時, 需要設定 FULLTEXT(Col-name).

搜尋語法

  • SELECT * FROM table-name WHERE MATCH(col-name) AGAINST ('keyword')
  • SELECT * FROM table-name WHERE MATCH(col-name) AGAINST ('+keyword' IN BOOLEAN MODE)
  • SELECT MATCH('table-name') AGAINST ('+keyword') as Relevance FROM table-name WHERE MATCH ('table-name') AGAINST('+keyword1 +keyword2') HAVING Relevance > 0.2 ORDER BY Relevance DESC

範例

  1. create database keyword;
  2. use keyword;
  3. create table kw (id char(255) primary key,FULLTEXT(id)) engine=myisam; # 若使用 InnoDB 會出現下述錯誤.
    # fulltext don't support innodb
    # ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes

執行語法

  • SELECT * FROM kw WHERE MATCH(id) AGAINST ('ABC' IN BOOLEAN MODE)
  • SELECT * FROM kw WHERE MATCH(id) AGAINST ('+ABC' IN BOOLEAN MODE)
  • SELECT * FROM kw WHERE MATCH(id) AGAINST ('*ABC*' IN BOOLEAN MODE)
  • SELECT MATCH('id') AGAINST ('+ABC' ) as Relevance FROM kw WHERE MATCH ('id') AGAINST('+keyword1 +keyword2') HAVING Relevance > 0.2 ORDER BY Relevance DESC

相關網頁

by Tsung at July 02, 2012 05:19 PM

July 01, 2012

tsung

好文: Apple 首席設計師 Jonathan Ive 設計的訣竅

什麼是設計? 簡單的設計? 簡單的背後是很複雜的, 設計簡明易懂事物的背後並不簡單.

Apple 首席設計師 Jonathan Ive 說明自己的工作內容 與 設計的想法, 詳細可見此篇原文: Jonathan Ive interview: simplicity isn't simple

下述摘錄自此篇文章: Apple 首席設計師 Jony Ive 披露設計策略的秘密:平和簡約,至臻至善

  1. 讓設計盡可能簡單
  2. 把每個產品設計到足夠好,好到用戶無法接受其他樣子

Apple 及其設計團隊所極力避免的事情是,永遠不要為了設計產品而設計產品

by Tsung at July 01, 2012 05:49 PM

June 29, 2012

FourDollars

在 iMac 8.1 (Early 2008) 上面安裝 Ubuntu 12.04

首先在我的 iMac 8.1 (Early 2008) 上面要先使用 Mac OS X 裡面的磁碟工具程式分割出多餘的空間,而我是將 250GB 的硬碟對半分,一半留給 Mac OS X 繼續使用,另一半給 Ubuntu 12.04 使用。

因為 Mac Intel 系列的電腦現在都是使用 EFI 來開機,所以要下載 Ubuntu 12.04 Desktop amd64 的版本才會有支援 EFI 啟動,所以要下載 ubuntu-12.04-desktop-amd64.iso 然後使用 Ubuntu 12.04 內建的 usb-creator-gtk 中文譯成「製作開機碟」來製作出一隻可以安裝 Ubuntu 12.04 Desktop amd64 的 USB 開機碟。

接下來是重新啟動 Mac 並且按下 Option (Alt) 不放,直到出現以下畫面:

然後就可以選擇最右邊的 EFI Boot 圖示來啟動 Ubuntu 的安裝程序。

另外也可以使用燒錄好的 Ubuntu 12.04 Dekstop amd64 的光碟片來安裝,只是畫面會有一點不一樣,如下:

一樣是選擇最右邊的 EFI Boot 圖示來啟動 Ubuntu 的安裝程序。

建議使用 USB 隨身碟來安裝,一方面比較安靜,另一方面比較環保,而且安裝速度也比較快。

接下來就是一般 Ubuntu 的安裝方法,只是有個小訣竅可以在安裝程序中啟動無線網路的支援,就是在安裝過程中選擇要安裝 Fluendo MP3 Decoder 然後按下一步,稍微等一下它會偷偷把無線網卡的驅動程式裝上去,然後就可以按上一步回到上一個步驟把網路連一連,這樣在安裝的過程才會再從網路上下載其它額外需要的軟體套件

在 Ubuntu 安裝完畢重開機後仍然是無法進入 Ubuntu,此時還要在 Mac OS X 上面安裝 rEFIt,以後每次開機預設進入 Ubuntu 但是會有十幾秒的等待時間可以選 Mac OS X 進入。

以上就是我的安裝過程,接下來就是驅動程式的問題。

顯示的部份,我是使用 open source 的 ati 驅動程式,因為安裝私有的 fglrx 驅動程式反而畫面會顯示不出來。

音效的問題,我是參考 https://help.ubuntu.com/community/Intel_iMac#Sound 將 options snd-hda-intel model=mbp3 加入 /etc/modprobe.d/options.conf 裡面來解決。

WebCam 的驅動則是參考 https://help.ubuntu.com/community/MactelSupportTeam/AppleiSight 的作法。

Apple 無線鍵盤可以使用 Ubuntu 內建的藍牙配對程式就可以了。

Apple 無線滑鼠一樣是使用 Ubuntu 內建的藍牙配對程式,然後配對的 pin 碼好像是 0000

以上就是我在 iMac 8.1 (Early 2008) 上面安裝 Ubuntu 12.04 的心得筆記。

Have fun! ;)

by Shih-Yuan Lee (noreply@blogger.com) at June 29, 2012 11:17 PM

June 28, 2012

tsung

NASA 發送探測車 到 火星 的 規劃說明影片

NASA 要將探測車送到火星上, 預計降落時間是 2012年8月5日, 下述是影片簡介, 就可以知道這是多困難的一件事情:

6種不同組態, 76個爆裂物, 50萬行程式碼, 零容錯空間, 從大氣層降落到地面需要7分鐘, 但是訊號從太空船傳回到地球, 要14分鐘左右.

詳細影片介紹可見:

發射登入火星成功, 最後有第一張火星照片

相關網頁

by Tsung at June 28, 2012 05:26 PM

June 27, 2012

tsung

Windows、MacOS、Linux 如何清除暫存的 DNS Cache

Windows、Mac OS X、Linux 要如何清除暫存在系統內的 DNS Cache?

各種作業系統清除系統內 DNS Cache(快取) 的方式

Linux (Ubuntu、Debian Linux)

  1. apt-get install nscd
  2. sudo /etc/init.d/nscd restart # service nscd restart

Windows

  • ipconfig /flushdns

Mac OS X 10.4 Tiger 以前

  • lookupd -flushcache

Mac OS X 10.5, 10.6, 10.7 Lion 以後

  • dscacheutil -flushcache

相關網頁

by Tsung at June 27, 2012 05:05 PM

June 26, 2012

tsung

好文: Linus 的 kernel 管理模式說明 (2004)

Linus 創造了 Linux kernel, 這篇文章寫他的管理方式: Linus on kernel management style (Posted October 6)

玩 Open Source 都值得參考看看?

Linux kernel management style 內容大綱

  1. Chapter 1: Decisions
  2. Chapter 2: People
  3. Chapter 3: People II - the Good Kind
  4. Chapter 4: Placing blame
  5. Chapter 5: Things to avoid
  6. Chapter 6: Why me?

by Tsung at June 26, 2012 05:44 PM

June 25, 2012

tsung

TWNIC 發表 中文化Email 的技術 - 2012

TWNIC 發表 中文化Email 的技術, 預期取代現在使用的 英文Email.

ex: service@twnic.net.tw => 客服@台網中心.台灣

不過實用性不知道如何, 非台灣可能都打不出此 Email?. XD

下述摘錄自此篇: TWNIC發表中文化電子郵件地址技術 (全文請點此連結, 回原網站觀看)

  • 台灣網路資訊中心與網擎資訊合作,依據IETF國際化電子郵件工作組EAI WG在今年初發佈的電子郵件新標準,展示完成中文化電子郵件地址技術開發。
  • 台灣網路資訊中心(TWNIC)與電子郵件服務業者網擎資訊(Openfind)合作,展示中文化電子郵件地址技術,未來可望以中文取代英文電子郵件地址。
  • 這項中文化電子郵件地址技術由TWNIC與網擎資訊合作開發,依據國際組織IETF底下電子郵件工作小組(E-mail Address Internationalization Working Group, EAI WG)在今年2月發佈的RFC 5721、RFC 5738、RFC 5983,以及RFC 6530到RFC 6533所開發
  • 使用中文化電子郵件地址後,以Service@twnic.net.tw為例,可改為「客服@台網中心.台灣」收發電子郵件,對熟悉中文語言環境的華文市場,可以慣用語言使用電子郵件服務。

by Tsung at June 25, 2012 05:28 PM

June 24, 2012

tsung

Google 提出的新的 HTTP Status 451 - 2012

Google 今年(2012) 提出新的 HTTP Status 451, 內容詳見下述:

此 HTTP Status 看來是針對中國大陸的 GFW 提出的, 可見此篇作法: Google Search 面對中國 GFW 的解法 - 2012

由此狀態來規範 關鍵字是否合法, 不合法的就會給予警告或不讓他搜尋等等, 避免被 GFW 直接封鎖一段時間.

如果要作中國大陸的市場, 此狀態和作法可以實作來解決 GFW 的問題.

by Tsung at June 24, 2012 05:42 PM

jserv

《黑客列傳:電腦革命俠客誌》讀後

Steven Levy 的經典著作《Hackers: Heroes of the Computer Revolution》,以平實的口吻,娓娓道來 1960-1970 年代那些無懼權威並勇於挑戰的電腦科技革新者背後的故事。「黑客」曾是種榮耀,一種追求真善美的傳統。在 Jedi 與 Pluto 的努力下,這部經典著作終於有中譯本,並在實體通路可取得,如博客來《黑客列傳:電腦革命俠客誌(25週年紀念版)》。譯者 Jedi 亦撰文談論翻譯過程的點滴,可見 blog 文章 [《黑客列傳》,譯者序及其他]。我有幸成為中譯本早期的讀者,受到黑客以精湛的技術為支點、撼動整個人類文明的震撼之後,寫了簡短的推薦文,貼附如下: 來自狄克崔西的讀者推薦文 對筆者來說,拜讀《黑客列傳》的經驗,與其說回顧這幾十年來資訊技術的發展,不如說是黑客們以其有限精力、全然付出的勇敢舉動,從硬體系統、軟體設計,從而到思想體系等巨大變革,一再地撼動這世界。孔丘嘗言:「微管仲,吾其被髮左衽矣」,本書提及跨越三個世代的黑客雖有截然不同的立場與行事作風,卻同樣地捍衛著追求完美境界的執著與純真,沒有他們,今日的世界將不僅枯燥,甚至失去再創新的可能。 1990 年上映的迪士尼電影《狄克崔西》,改編自知名漫畫,敘述一位神探英雄 Dick Tracy 本打算退出江湖、與女友過著清閒日子之際,邪惡勢力再度猖狂,具強烈正義感的神探於是周旋到底。而機智警探狄克崔西所向無敵的秘密武器之一,即是一支「會說話、振鈴、防水、防震、防盜、防身」的高科技手錶,儼然就是今日幾乎人手一隻的 3G 手機翻版,想來著實令人吃驚。22 年前我們大概連「手機」這個概念都很難想像,遑論漫畫版本出現的年代遠在 1931 年,80 年前精準預知今日科技生活,估計也該收錄在《推背圖》解讀之中。 《狄克崔西》原本是不折不扣的科幻作品,漫畫家天馬行空地勾勒著 3G 手機的藍圖,但正因有《黑客列傳》眾多黑客與當代科學家長期的投入,科幻成為事實,而書中不提那些揚名國際的人物,反而論及長年在幕後奮鬥的黑客天才,他們的生活、技術,以及夢想等三者原本貌似不關聯的項目,緊密地交織著。今日我們或許無從得知,當初 Altair 電腦轟動全世界時,究竟以哪本科幻小說為藍圖?眾多黑客當年在 PDP-1 開發出鬼斧神工的電腦程式時,是如何超越當時想像力的極限呢?當 Siri...

by jserv at June 24, 2012 07:06 AM

yungyuc

Code for Results

Code for Results

I’d like to record some of my thoughts on how to improve the quality of scientific codes.

Programming for scientific problems is difficult. It is intrinsically a multi-discipline task. To develop efficient code to model interesting phenomena, a researcher needs to know well about his problem, computer architecture, various programming techniques, and many numerical analysis skills. After the code can finally be compiled and run, it needs to be tested, debugged, and verified for all target machines (and platforms). Then we know the results are correct, reproducible, and trustworthy.

For collaboration, there are more things to do. If the code is intended to be released to peer researchers, it should be designed with comprehensible API. If there would be general users who are not expected to touch the internals, the API must be organized to allow building a user interface and/or a scripting layer. And a guide to the software system should be provided. But perhaps more importantly, the code should be available to all collaborators, and potential collaborators.

Unfortunately, things do not always work that well. It is common to find a program that can only run on the machine it was developed on. It is common to find a program contains 5,000 lines of arbitrarily-indented code in a single file. It is common to find a program shipped with no or an out-dated manual, and users have no clue to run an example problem. It is so easy for a scientific code to become unmaintainable, and its source is usually not publicly available to reveal the fact.

In general, without a clear structure, version control, unit tests, API documentation, rerunnable examples, no one can be sure that a code really does what it claims. Although the developers usually know what they are solving for, the beauty of their work is covered by the dust of unconvincing development practice.

Producing monolithic, ill-organized, limited-use code isn’t anything that we numerical analysts feel proud of. The status quo should really be improved. I am going to write down what I think would be helpful for practicing scientific programming.

Openness

Software development is on magic. It is just an intellectual-intensive activity involving computers. When talking about intellectual development, the importance of openness cannot be overemphasized. An open society gestated the modern high-tech civilization that we are enjoying. An open environment is needed to enable the mind sharing for software development.

Such an environment should enable collaboration at the source-code level. Although many efforts have been made to shape software into components, no software is simple enough to evade source-level reviewing. Moreover, just like a normal person weaves his thoughts by using a natural language, a competent programmer thinks in a programming language. The most efficient way for programmers to collaborate is to use (well-written) source code, not diagrams, slides, reports, or anything else.

Thus, we can conclude that open-source is a straight-forward approach to respond the need for productive collaboration. It should be noted that open-source has nothing to do with free-of-charge software, although many open-source projects use free for marketing. The source-level collaboration enabled by the open-source practice introduces new business models. In the new models, software can be developed by using fewer resources.

For a long time, software is regarded as a large chunk of compiled binary that hides most of its internals and exposes only a limited amount of user interface. However, things do not need to be done in this way. In the past two decades, the widespread Internet and WWW have added new rules to the game. The open-source practice has helped new giants like Yahoo, Apple, Google, Facebook, and many other new-style software companies to win over the past invincible opponents like Microsoft, which just started to catch up in the race.

The trend of open-source will arrive everywhere that demands software. Aided by the successful marketing actions led by IBM and RedHat, the open-source Linux operating system defeats SCO UNIX, Microsoft Windows, and many other close-source competitors in the server and HPC market. In the Top 500 list of supercomputers one can rarely spot a system not running Linux. The tool chain of scientific computing is also full of other open-source software, e.g., GCC, MPI (MPICH1/2, MVAPICH1/2, or OpenMPI), LAPACK, FFTW, to name but a few. Open-source will help our pursuit of productivity in software development.

Hierarchical Software Stack

Scientific computing needs a hierarchical software stack. One reason to do so is to hide the complexity of the computing problem. On the one hand, engineering or scientific problems involve a huge amount of computation and need low-level access to the raw metal for ultimate runtime efficiency. On the other hand, the complex mathematical expressions that describe the technical problems encourage practitioners to employ high-level programming techniques to write comprehensible code. The polarized demand would shape the computing software into multiple abstraction layer.

Another equally important reason for a hierarchical structure is the protection of sensitive information. From the security point of view, it is ideal to open-source the fundamental computing platform as a framework, while protecting business secrets in a lower-level, compiled layer.

In general, an easy-to-use, high-performance system for scientific computing cannot be productively built by using an overarching tool or language. Conventional approaches are either too costly (in terms of labor and money) or unable to deliver (the runtime performance). But perhaps the most serious issue with the conventional approaches is the lack of outlook. Bleeding-edge hardware of heterogeneous architecture and the ever-increasing gap between the floating-point efficiency and the memory operation efficiency call for renovated software. Developing monolithic code does not address the new needs.

In fact, vendors of scientific software have already recognized the need, and structured their product into layers. They either implement a proprietary scripting language or use an existing one, to provide an easy-to-use platform for automation and/or parametric study. The scripting layer is built on top of its core framework which realizes fundamental numerics. One can find this design in leading companies in almost all major application fields such as MATLAB (general numerics), ANSYS (computational mechanics, fluid dynamics, electromagnetics), 3DS/ABAQUS (computational mechanics), Autodesk (computer aided design), and Synopsys (electronic design automation), to name but a few.

Although multiple abstraction layers have been materialized in these proprietary software products, there are still many barriers preventing users to gain higher productivity by accessing the internals. In this regard, I think the proprietary approach will be challenged by the users who persistently demand more and more flexibility and productivity. Many people would be drawn to the open-source approach.

Prototype as Product

Based on the hierarchical design and the open-source practice, a new breed of scientific software can be produced. In the past decade, new paradigms of developing software emerged from the need to rapidly develop web applications. Contrary to scientific software that would be used for decades, web applications usually live for only months if not weeks. As a result, web developers tend to use any means to shorten the time to market, and become the most active supporters of the open-source practice. They routinely use high-level languages for prototyping and the turn the prototype directly into a product.

This prototype-as-product approach is promoted by recognizing two facts: (i) Developers are expensive and (ii) computers are relatively cheap. Prototyping is not a new concept, but in the past, a high-level prototype is usually reworked into a product, after the proof-of-concept, by using a different and lower-level language. The hasty pace of the web world broke the boundary between prototypes and products to squeeze all the productivity out of the workflow. Optimization is postponed to a later stage of the development.

Although the experience of the web world cannot be equivalently copied into scientific computing, the spirit should be borrowed. What practitioners of scientific computing care is the turn-around time to results, which includes both development and running time of the software. The new paradigm can deliver reliable code in a shorter time than old approaches can.

As long as the performance hotspot in a prototype can be properly optimized, a prototype-turned product can deliver ideal runtime performance. It is not uncommon for an optimized prototype system to exhibit the same runtime performance as a system implemented by using solely a low-level language like C, C++, or Fortran. For example, some new projects have been developed by combining Python and a low-level language, e.g., FEniCS/DOLFIN, FiPy, Kestrel, and SOLVCON. The hybrid approach is also favored by the heterogeneous architecture, which intrinsically requires the developers to use multiple programming languages.

Final Words

Scientific computing has driven the development of digital computers from the very beginning. Computers are invented to solve technical problems, as the infamous ENIAC, the first general-purpose electronic computer, born in 1946, developed to calculated artillery firing tables. In the era that hand-held devices delivering the computing power unimaginable from a decade ago, the need for scientific computing will continue to fuel the development in all aspects of computation. And we should write better code to do it.

June 24, 2012 12:00 AM

June 22, 2012

fred

現實中,我的創業,問題,解答,手札。

最近看到一些網友轉貼的文章,還有聽聞了一些朋友的創業故事,加上自己也是在創業,因此有感而發。其實,過去就一直想寫下『在我眼中的創業』,一方面重新整理自己在創業生涯中的思緒,另一方面鼓勵自己不能倒下。此外,如果可以,讓更多人知道創業的現實面,也不是什麼壞事。這邊要先感謝許多同是創業人的朋友,無論他們現在是否還在這條路上,都給予我很多幫助和啟發,更感激許多親身跳下去『證明』的人,讓我知曉許多悲慘的事實。

依然強調,我尚未成功,也還年輕,我說的話可能影響不了什麼人,也沒什麼說服力,只是單純地將我所見的一切,如實的描述出來。如果你對我所說的一切不以為然,如果你仍然覺得你自己原本想法是對的,請堅持自己所想,無論最後是成功還是失敗,開心或痛苦的,你都能因此得到實質的經驗和正面的回報。

因為我還沒成功,所以我不會告訴你怎麼成功,更不會告訴你創業一定要做到的成功守則有哪些,這些事我都沒有答案。如果你有這樣的困擾,你應該去問的是那些研究創業的部落客專家,或是書報周刊。在這我只會告訴你,我在創業中遭遇到或看到的問題。

首先,恭喜自己。經歷過兩年的努力,好不容易還活著,這是我是創業至今最值得開心的事。相信我,這是真的,在經歷過痛苦磨難、倒閉危機和理想於現實搏鬥後,你會非常慶幸,自己還撐的下去。這一切不像是某些知名的『談創業』部落格文章中,所輕描淡寫的這麼簡單,也不像書店架上滿滿的『各類成功學』所提到的這麼有跡可循,因為你永遠可能被任何一個創業的細節所打倒,一切是這麼出乎意料,現實中的『啊!你已經死了!』天天都可能上演。所以,如果你克服了這些細節,不管落地動作好看與否,你都應該先為自己鼓掌。

問一下自己,什麼才叫做『成功』?

既然提創業,就得提大家都想要成功這件事。包括我自己,很多人不曉得創業最中最大的問題,就是『不知道什麼才是成功』。對許多創業人來說,看到 Facebook 有今天的地位會感覺到相當興奮,為自己『創業的理想』注入了一劑莫大的強心針。是的,因為你認為他是成功的,所以你感覺到了『我也有機會成功!』,夢想實現也近在眼前。

但是,我們應該先問一下自己,什麼才叫做『成功』?

是上市上櫃?手上握有幾百億美元資產?還是不缺錢用?握有極大的權力?又或者是走到世界各地,都能有人認出你來?如果你回答不出來這個問題,那請試著去想個更簡單的問題,你認為 Facebook 算成功嗎?你覺得他從什麼時候開始算是成功?

我相信有各種不同的回答,創業模式也有百百種,絕對沒有肯定的答案。不過,如果你才剛開始創業,就想模仿 Facebook,開始思索自己如何佔五成以上股份,開始幻想著剩下的四成如何分給其他人,甚至說的好像你就是現在的 Facebook 一般。那麼,你心中所認為的成功,應該是止於『拿到一大筆投資人的錢』。

有太多太多人,看到了許多新創公司的成功故事,開始誤以為拿到一筆大錢,就是成功了,然後未來都將很順利。所以一堆人為了自己的 Idea 做了很多表面功夫,也練就了世界上僅次於 Steve Jobs 的說故事功力,更畫了多到了世界末日也吃不完的大餅。其目的不外乎就是想得到創投的親睞,期望這些『金主』們倒一些錢到自己的頭上。

先不論這樣的討好的手段是對是錯,也不論你花了多少時間研究,並在過程中花了多少精力投入在『真正的核心價值』上。因為更多人沒想到的是,當幸運的拿到錢後,才是災難的開始。

很多人心中對『創業』,都有一個美好幻想,至於敢不敢說出來或承不承認,那就是另一件事了:『公司開了,然後資金充足了,公司就能夠自己賺錢,然後自己生蛋,我可以安心掛著上流社會的 CEO(CXO) 王子名號,當個人生勝利組』

沒錯,很多人拿到資金後,覺得成功了,便開始揮霍,租大辦公室、搞氣派,左邊有機會去左邊,右邊有機會去右邊,兩邊都有機會兩邊都去搞搞,已經忘記了自己的初衷。直到有一天,錢燒光了,收攤時才懊悔。

比較誇張的,就會說到多個創始人為了分錢,爭個沒完,然後拆夥。

而有些人,拿到投資人的錢後才發現,想一個怪點子容易,但經營這個點子才是最困難的。談到點子要怎麼生雞蛋,畫畫大餅很容易,但實際做下去,卻一步也走不動,有時是業務面走不動,有時是技術面跟不上。熬呀熬呀,等到錢燒光的時候還走不出自己的路時,一樣打包收攤。

這邊還沒提到,當路快走到盡頭時,狗急跳牆花招百出的盛況,會有多麼精彩。(這留著以後出外傳 :-P)

講到這裡,我想你會開始檢討,自己究竟花了多少時間在核心價值上?還是你只是求一筆注定要燒光的錢?

你應該也發現了,那些知名創業部落格根本不會告訴你這些事,那些創業和成功學的書籍,永遠也只是講他們自己成功的那一面。至於細節呢?等你照著做後,倒了才會知道自己哪做錯了。

所以,你看過多少這方面的書?多少網路上的相關文章?你以看過這些書為傲嗎?或覺得自己能因此掌握創業嗎?從許多人身上你可以發現,戰戰兢兢創業或努力一個洞挖到底的人,反而在這條路上失誤比較少,比較有成功的機會。我當然不是說讀書不好,可是如果讀了這些『聖經』,反而讓你『大意失金舟』,那你還不如不要讀了。

還不如先想想,自己想要的成功是什麼?


沒有成功的經驗?所以盡可能勤能補拙

知道自己要的成功是什麼後,大多數創業人缺少的是『成功的經驗』,我也不例外。若有成功經驗,你會更能判斷情勢,做出正確決定,也可以避免不必要的開銷。但事實是,我們並沒有這樣的成功經驗。那麼,磨練自己的決策,修正自己的想法便時時刻刻不會少。

所以,如果有著遠大的理想,而且有奮戰到底的心理準備,那你絕對不能放棄的是『不停強化核心價值』。核心價值一詞相當籠統,實際上就是『做盡一切打算』、『堅守領先位置』,想著有什麼機會、怎麼賺錢、怎麼發展、怎麼佈局、怎麼樣讓別人趕不上我們,並且實地並拼命去做。

是的,你發現我在講冠冕堂皇的廢話了,小學生都會講的廢話。可是就是這樣的簡單的事,一個財迷心竅的創業人往往做不到。

聰明人很多,每個人都有自己獨到的點子。然而,有些人以為自己的點子很獨特,認為自己只要做出來一定可以成功,根本無需多餘的努力。可是就因為實際上沒有成功經驗,所以這些人原始的想法往往經不起考驗;如果又不多做努力,在創業戰場上這樣死的人,可以說滿地都是。這就是為什麼要『強化核心價值』的原因,有做過努力,你的想法會進化,才會更經得住考驗。有努力或許不會成功,但至少可以降低失敗的機會。

當然,這邊就不多重提前面所說,有人做盡一切是為了吸引投資客目光,強化的不是核心價值,而是『投資客討好工作』。雖然勤勞的方向可能不太正當,但就勤能補拙的角度來看,也總是比人多一些機會。


創業好像彩券?

周遭有個朋友的故事,在某次私底下閒聊時,也一五一時招了他自己的血淚史。

他和幾個朋友自學生時代就會做做網站程式,後來也會寫寫目前當紅的手機 App,並自認有許多新奇的點子。然後覺得『只要做出來』就能找到『金主』給錢,只要能找到錢,接著就能變成 Angry Bird,然後可以賣周邊商品 。

的確,他很幸運,點子還不錯,App 寫出來了,也找到投資人給了錢,但最後他當然卻沒變成 Angry Bird,而是錢燒光打烊,更別說有出什麼周邊商品。過程中,他只是不斷的拿著使用者數或是下載量,去找新的投資人,沒有花太多功夫對自己本來的想法不斷檢討改進。換言之,他也是糊理糊塗拿到第一桶金後,失去核心價值,不了了之的一個實例。

他到了後期才弄懂了一件事,自己把創業當做樂透彩券了,當初以為夢到了『明牌』,找到了店家然後買了張彩券,就可以等著發財。

事後諸葛來看 Angry Bird 的成功,並不是找一堆錢把自己充飽,更不是隨便丟個 App 放在那等三個月半年,就有大幅度成長的死忠玩家。也不是急著自己跑去做周邊商品賣商標賺錢,而是先做出絕佳的產品、經營市場,並在適當時機出擊,或交給可以發揮更大效益的人來操刀。而最重要的是,這些事,前面做不好,後面也不用做了。

你會看到,這一切其實都不是彩券,也沒有明牌,而是一步步踏出來的路。沒有人一開始就完全料到是這樣發展,都是自己慢慢開出的機會,然後時機一來就是你的。再好的想法,也要有相應的經營方法,更要不斷往前改進和擴展,就算給你搖錢樹,你也要花力氣搖它才會掉錢。

所以,大家都聽過這麼多故事,當過無數次『諸葛』,應該都能發現,『痛苦的細節』才是不能說的秘密。不要再把自己的真心話藏起來了,想要當成大業,不是靠個一桶兩桶錢買個希望,而是你要對自己的點子負責到底。如果缺乏成功經驗,碰碰撞撞免不了,就怕你忽略了這些不起眼的碰碰撞撞,不願面對真相。那麼,這些你不願意面對的現實問題,就是擊垮整個事業的最大殺手。

好不容易熬到有人投資,如果你以為就此解脫了,那你就真的解脫了。


信用破產?

然後提到信用,以為投資人給你的錢是讓你隨便燒的嗎?拿到錢的人有時要自己想想,你是拿自己的信用去換錢,還是投資人真的覺得,你的東西有發展性而願意投錢?

很多創業的是年輕人,想出來的點子或許真有點價值,但很多投資人更看重的是你『年輕』,而給你機會。這時,不要以為錢可以白燒,因為你就是以信用去換錢了,燒的太難看比燒光還慘。如果是做正確的事,錢花光了,你可以抬頭挺胸,如果你不正經的燒光了,那信用就有很大的汙點。

此外,也有一些人,是因為能力太強或經驗豐富,所以投資人都信任他,只要他提得出點子,就給他錢去做。但這相對的,也是以信用去換取投資,也更需要僅慎。無論如何,不管你是不是以信用去換取投資,投資人給你的錢,是用來賺更多錢的,而不是進自己口袋的,不要覺得別人給你錢,你就發財了。

你以為在投資人手上沒有黑名單嗎?有錢的投資人在業界或非業界內,人脈會不廣嗎?小心為妙吧。


什麼叫好的 Idea?

有創意、沒人做過、有錢景、有發展性...。你可以想到無數種名詞來形容好的 Idea。每個創業人手上,都會有自己的 Idea,當然,都是各自認為最好的。但有多少想法可行?多少想法能讓投資人接受,或是讓客戶買單?此外,如何避免他人來競爭?避免有財力的大財團和公司抄襲?

在這裡,我無法評斷你的 Idea 是好是壞,所以我也無法告訴你怎樣的 Idea 是好。但既然是創業、成立公司,一個好的 Idea 一定要能夠為你帶來收入或效益(無論長期或短期,金錢還是任何種回饋),畢竟,『公司是以營利為目的』。

我想,既然有利可圖的東西,有財力的大公司一定會想辦法進場,因為,如果唯利是圖的大公司都不想進場,這 Idea 肯定也賺不到什麼錢。那麼,如果大公司和大財團肯定會來參一腳,我們要怎麼辦?

有人說,他想 Idea 時會去避免大公司競爭。但我覺得,不是要避免去和大公司競爭,而是以 Operation Cost 的角度,來看待『為什麼大公司無法跟你競爭?』,然後找從中找出著力點。

還記得,我有個朋友,用了一個小孩和大人的例子解釋了這件事(內容我有稍做修改,改的更為偏激了一點 :-P):
假設現在有一個賺錢的機會,抄一本書可以賺 1 萬元。然後抄滿 100 本,每本多給 1 萬元。此外,因為這本書比較艱澀,月薪 5 萬元的大人抄一本書的時間比較快,需要 10 個工作天(假設一個月有 30 個工作天),13 歲小孩則需要 15 個工作天。

請問,你覺得是一個月薪 5 萬元的大人,比較適合執行這任務,達成 100 本的目標,還是一個 13 歲小孩比較適合來執行這任務?(先不考慮合不合法問題)

是的,上班族抄起書來動作比較快,佔了很大的優勢,小孩抄兩本的時間,上班族可以抄三本。理論上,上班族應該更適合來執行這任務,也能更快達成目標。

但是,從成本面來看:

若抄滿 100 本書,總收入可達 2,000,000 元。

假設大人不上班,全心全意抄書,他的成本是: (10x100) x (50000 / 30) = 1,666,666 元

假設 13 歲小孩不上學,全心全意抄書,成本是 0。(小孩根本不用自己煩惱開銷問題)

如果讓一個大人來做這件事,他只比原本收入多 333,334 元。

而對小孩而言,他則多出 2,000,000 元的收入,如果書抄不完,也還有很多收益。

這邊還沒提到期間,大人的開銷,可能需要以借貸解決,其所導致的等額外利息成本,還有可能餓死的風險成本。另外,如果沒抄到 100 本書,大人的收益根本不到 1,000,000,反而賠錢。

從這樣一個簡單的例子來看,若將其中『小孩』換成『新創公司』,『大人』代換成『大公司』,你就會發現,因為 Operation Cost 太高,導致很多事情大公司不可能投入,哪怕這個新事業的收益可以超過他原本的總收益,他們也只能看的到吃不到。

所以,如果大公司真的要進入這市場,最終手段都是以買下、併購或第三方合作的方式,甚至是投資和你一樣的新創公司。當你是先驅,又領先其他人許多時,大公司們的第一順位會選擇找誰呢?

也或許,你可能真的找到了一個沒人來搶的市場,但如果久久真的沒人來搶,請多思考一下問題在哪,因為,那可能不是藍海,而只是一灘雨後的積水。我想,真正的藍海,應該是大家都會想要來的,只是能不能來是另外一回事了。


後記

創業是件很痛快的事,無論其他人支不支持你,無論投資人能不能看到你身上的光環,能在劣勢的情況下,殺下一成時,快哉!

by noreply@blogger.com (Fred Chien) at June 22, 2012 08:38 PM

June 21, 2012

tsung

[摘錄] 溫州人6年打造台灣便當王國 - 2006

這篇是 2006年的文章, 當時沒有仔細看完, 其中一個原因是因為 池上便當 的品質差異蠻大的(有些好吃, 有些難吃), 所以文章就沒很仔細看完.

這幾天正好亂翻翻到, 被最後一頁的幾句話給激到, 在此作個紀錄.

註: 大陸競爭非常激烈, 看來台灣確實是溫床.

下述摘錄自此文: 溫州人6年打造台灣便當王國 (全文請點回去看)

鬍鬚張魯肉飯董事長張永昌曾告訴他:「台灣的餐飲市場,方圓五十公尺內就會有一家便當店,簡直是擠爆了。」但跑兩個月後,林峰卻得出一個完全不一樣的結論:台灣的便當市場幾乎毫無競爭可言,充滿機會。因為林峰看到的是,過去二十年來,台灣的便當市場不管是產品種類或經營模式,全無任何一點改變,清一色賣的全是排骨飯、雞腿飯等口味,加上一成不變的小本經營,沒幾家店做過行銷、廣告。這對於林峰來說:「簡直是不可思議!而不可思議當中,透露出無限商機。」

面對如此積極的大陸老闆,員工的日子自然不會太輕鬆。林峰自承,他的管理風格或許會讓人覺得他很獨裁。但他也不能接受台灣人凡事只想著最壞的打算,結果是什麼也沒做,「與其說是婉轉,倒不如說是沒guts(膽識)。

生長於大陸的林峰如此詮釋自己的成就:「我能有如今的便當王國事業,不是因為我太厲害,而是別人太不厲害了!」「幸好我今天不是在中國發展,因為不會有任何一位大陸人,能容許我有五年時間培育出如今的便當王國。

by Tsung at June 21, 2012 05:53 PM

June 20, 2012

tsung

品壺十四要訣 (泡茶用的茶壺) 和 養壺方法

宜興壺、紫砂壺或其它泡茶用的茶壺, 如何挑選?

  • 註1: 此篇只是純粹紀錄以前大家是怎麼評鑑好壺的.
  • 註2: 不管茶壺在怎麼美觀, 請記得: 茶壺是拿來泡茶, 不是拿來觀賞的. XD

古書記載(取自: 陳景亮 品壺十四要訣 茶道文摘)

品壺之道: 理趣兼顧

品壺十四要訣 如下述:

  1. 泥要好
  2. 柸要薄
  3. 蓋要密
  4. 沿要平
  5. 流要順
  6. 口要停
  7. 耳要妥
  8. 提要穩
  9. 腳要柔
  10. 身要雅
  11. 火要堅
  12. 量要沉
  13. 氣要長
  14. 韻要厚

養壺方法

下述取自 選好壺,泡好茶 - 池宗憲

新壺的正確養壺方法: 對於燒結良好的新壺而言, 是沒有什麼土味的; 但仍須先以溫水倒入壺內, 讓新燒結的土胎與溫水接觸, 接著再用高溫注水入壺. 此後, 倒掉熱水再換上冷水, 以此模式連續冷熱交替, 活化新壺的毛細恐!

若不小心買到燒結欠火、充滿土味的壺怎麼辦?

我建議你: 先拿它當茶海, 以泡好的茶湯滋潤新壺, 並且將新壺毛燥的胎土藉由茶湯撫平, 連續使用三到五天之後, 舊可以拿來泡茶了.

養壺最大的樂趣在於眼見壺的表面從毛燥無光澤, 透過一次次的使用, 在壺表面形成"茶山", 經由手或布擦拭之後, 自然發出悠悠函光, 那是茶人的喜悅, 更是茶人與壺共生的情誼!

有人認為: 將殘茶湯滯留在壺中數天, 有利於壺的光澤.

事實上, 台灣的氣候高溫多濕, 壺中殘湯十分容易發霉. 最好在泡完茶之後立刻取出茶渣, 將茶壺清洗乾淨. 唯有靠日積月累的茶山滋潤而成的光澤, 才是最閃閃動人的.

正確的養壺方法就是將茶渣取出後, 將壺蓋取下, 壺底朝上, 用熱水澆淋壺體與壺蓋, 如此可將壺內壁的茶山保留下來, 壺體的茶山也會更勻稱, 顏色接近壺蓋, 在將壺放在通風處自然乾燥.

乾燥之後的壺必須要經常撫拭, 以棉布清潔效果為佳, 又不會刮傷壺體, 自然能養成壺的幽光.

by Tsung at June 20, 2012 05:49 PM

June 19, 2012

tsung

ICANN 新的 gTLD 簡介 與 目前申請的列表 - 2012

ICANN 之前說要推出的 gTLD (gTLD = Generic Top Level Domain) 來當 後綴網域名稱(Domain), 現在已經正式開跑, 而且已經第一輪申請完畢, 此篇紀錄些連結, 方便查看目前已經申請的 後綴 Domain 清單.

gTLD (Generic Top Level Domain) 簡介

現在的網址的後綴指的是 .com, .net, .org, .cn, .tw, .jp... 等等, 更多清單可見: TLDs alpha by domain

gTLD 就是打算可以自訂域名(網域名稱), ex: .google, .facebook... 等.

gTLD 的相關網頁

gTLD 申請價位

目前定價 USD 185,000, 約台幣 550萬元.

gTLD 目前申請通過清單列表

相關網頁

by Tsung at June 19, 2012 05:57 PM

June 18, 2012

tsung

Apple 2012 新 MacBook Pro 產品介紹影片

看來 Apple 所有產品的顯示器, 之後全部都會換成 Retina Display.

Apple 2012「MacBook Pro with Retina Display」產品介紹影片 (中文字幕版)

by Tsung at June 18, 2012 05:23 PM

fred

實作 X11 底下的 Popup Menu

既然要投入 JavaScript 的發展,一個很重要的目標就是讓 JavaScript 能被用來開發 Native 桌面程式。而為了達成這樣的願景,我們的團隊沒日沒夜的發展各類基礎技術和擴充底階 API,甚至是將以 JavaScript 開發整個桌面環境(Desktop Environment, 如:GNOME、KDE、LXDE 或 XFCE 這類專案)為終極目標。

當然,跳出瀏覽器之後的 JavaScript,缺少了繪圖引擎,所以要拿來做圖型化使用者介面,會更為困難。慶幸的是,前些日子發展出的 jsdx-toolkit 已經解決了大多數的問題,除了有 3D、動畫等支援,也已經有了許多現代桌面有的UI元件(如:Entry、Label、Button... 等),以致我們完全可以放心的開發屬於自己的圖型化應用程式。

不過,目前的情況,在手機、平板或是特定用途的嵌入式系統中完全夠用,一旦回到更為複雜的桌面環境下,就會遭遇到許多的問題。像是回到 XWindow 底下後,會遇到許多 X11 的視窗管理機制,其視窗之間錯縱複雜的交互關係,就是我們要處理的。尤其是當我們在開發桌面環境時,就會發現在一般的桌面環境下,使用者可能會同時開無數個視窗和程式,並且隨機又大量的切換使用,這迫使我們必須去修改 jsdx-toolkit 以處理 X11 底下的更多狀況,符合並更完整支援一般桌面環境下的操作習慣。

你可能用過 GTK+/Qt 這類常見的 Toolkit,也知道在 X11 之下有很多種類型的視窗(Window),像是 Dialog、Splash、Menu、Popup Menu 等等,但你可能不知道這些現代 Toolkit 內部做了多少事。事實上,X11 本身雖定義了各類視窗的類型,但實際上 XWindow 和 Window Manager 並不會完全去照定義去處理你的視窗行為,更準確的說法是,X11 HWMH 中的基本定義和我們實際的認知是有出入的,該定義只是說希望達成的行為,但沒說是由誰(XWindow、Window Manage 還是 GUI Toolkit)去處理。

舉例來說,我們現在寫一支程式,該程式不使用任何現代的 GUI Toolkit,然後單純使用 X11 API 把一個 Window 的類型設成 Popup Menu。但是你會發現,它的實際行為並不像我們所想的,失去焦點(Focus)後就會消失,無論你是點擊其他視窗讓他失去焦點,還是採用快速鍵讓他失去焦點。此外,他也仍然會保留 Title bar 裝飾(Decorator),還有會在你的 Panel Taskbar 上出現一個新的 Task。就是這些種種視窗行為,和我們心中所認知的 Popup Menu 有很大的差異。

仔細研究 X11 EWMH Spec 就會發現,對於一個 Popup Menu 的視窗,除了設定類型外,你應該要做更多屬性設定,才會讓它合乎我們預想的行為,而這些東西被分散於 Spec 文件內的各處描述,想要一次性找出來困難重重。此外,失去焦點後要關閉 Popup Menu 視窗的功能,就不僅僅是設定屬性這麼簡單,而是要使用 XGrabPointer 攔截整個畫面的輸入事件(Input event),採用特殊的做法,才能達成。

說了這麼多,既然我們是自己開發一套新的 Toolkit,當然就要來實作一個合乎我們預期行為的 Popup Menu Window,首先在建立視窗並設定為 Popup Menu 類型後,需要做一些設定並欄截事件:
...

/* Grab pointer */
int i;
Window grabWin = -1;
XGetInputFocus(disp, &grabWin, &i);
XGrabPointer(disp, grabWin, TRUE,
ButtonPressMask | ButtonReleaseMask,
GrabModeAsync, GrabModeAsync,
None, None, CurrentTime);


/* Skip Taskbar */
Atom wm_state = XInternAtom(disp, "WM_STATE", False);
Atom atom = XInternAtom(disp, "_NET_WM_STATE_SKIP_TASKBAR", False);

XChangeProperty(disp, win, wm_state,
XA_ATOM, 32, PropModeAppend,
(unsigned char *)&atom, 1);


/* Override redirect */
XSetWindowAttributes attr;

attr.override_redirect = True;
XChangeWindowAttributes(disp, win, CWOverrideRedirect, &attr);


...

接著在監聽 X Event 迴圈處,去檢查是否為 grabWin 傳來的 ButtonRelease Event(意即使用者用點擊了 Popup Menu Window 之外的區域),如果是就停止 Event 的欄截並關閉視窗。
...
if (xev->type == ButtonRelease && grabWin == xev->xbutton.window) {
XUngrabPointer(disp, CurrentTime);
grabWin = -1;

XUnmapWindow(disp, win);

continue;
}
...

後記

經過許多努力,完善各項功能,完全用 JavaScript 打造的桌面環境,指日可待。:-P

by noreply@blogger.com (Fred Chien) at June 18, 2012 01:36 PM

June 17, 2012

tsung

台灣駭客年會 HIT 2012 舉辦時間與項目

一年一度的台灣駭客年會(HITCON)第八屆將於 2012年7月 舉辦囉~

HITCON 2012 的時間與地點

  • 時間: 2012年7月20日(五) ~ 2012年7月21日(六)
  • 地點: 中央研究院 人文社會科學館 國際會議廳(台北市南港區研究院路二段128號)
  • 詳細地圖: HITCON 2012 Location

HITCON 2012 演講議程: HITCON 2012 Agenda (尚未完全公佈)

HITCON 宣傳文宣

2012/07/20 ~ 2012/07/21 台灣駭客年會 HITCON @台北南港中研院 磅礡登場

台灣最具資安技術代表的駭客年會 HITCON 今年已邁入第八屆,從第一屆不到百人參與,至去年已經成長到 800人的大型研討會。我們塑造一個優質環境並讓全台灣資安圈怪咖(高手)齊聚一堂,一起分享最尖端的技術與最有創意的駭客文化!

今年 HITCON 主辦團隊費盡千辛萬苦,死纏爛打,放棄打怪練功的寶貴時間,邀請到了亞洲各地區資安專家以及國外知名的王牌講師:

  • 日本資安圈大師級人物 Yuji Ukai 博士,是資安公司 Fourteenforty Research Institute 的 CEO,也是日本資安圈被廣為認可的意見領袖,同時也是知名美國 BlackHat 的審稿委員。
  • 日本的 Kunio Miyamoto 博士,日本知名系統整合公司的研究員,負責資訊安全領域的研究,也是 Institute of Information Security 客座研究員,在日本資安界的著作超過20本,是相當知名的研究人員。
  • 大陸的萬濤,大陸黑客圈是屬於教父級人物,也是中國鷹派聯盟創始人。他也是 IDF 互聯網威懾防禦實驗室的創始人,中國大陸最早接受 ICSA 國際電腦安全協會及 IDEFENSE 互聯網威懾情報專業培訓的資訊安全專家。
  • 大陸的大風,在大學期間創立了在中國安全圈內極具影響力的組織“幻影”。長期專注于安全技術的創新與實踐。同時還是 OWASP 在中國的區域負責人之一,在互聯網安全領域有著極其豐富的經驗。著有《白帽子講 Web 安全》一書,目前任職於阿里巴巴雲計算有限公司,負責雲計算安全,是阿里巴巴集團最具價值的安全專家,也是中國安全行業的領軍人物之一。
  • 美國的 Brandon 目前是美國 Verisign 的 Security Intelligence Engineer,同時他也是 9bplus 網站的創辦人,現在 Brandon 專注在 APT 活動與惡意文件分析研究上,針對 PDF 形式的惡意文件與 Adobe PDF Reader 弱點有相當深入的研究。
  • 葡萄牙的 Pedro 熱衷於 Mac OS X 平台的逆向研究,包含 Debugging 與 Anti-Debugging 各種技術研究,是相當知名的 Mac OS 逆向專家,參與過多項 Mac OS 上 Reversing Tools 的開發與研究。
  • 韓國的 Cha 與 Jinsuk,他們年紀輕輕一位大四一位大二,雖然年紀輕,但是卻已經韓國駭客組織 PLUS 的資深成員,曾在國際的駭客競賽立下不少豐功偉業, 包含 Codegate International Hacking Competition 2009 第三名, DEFCON 17 CTF 第三名 以及 DEFCON 19 第八名,功力深不可測。
  • 台灣最年輕的資安研究員 Dark,熟悉多種程式語言、軟體逆向工程技術、Windows 底層,18 歲曾於 HITCON 2009 演講破解遊戲作弊防護軟體,為 HITCON 歷屆最年輕講師。最近他在 iOS 軟體逆向工程上面有了些心得、將在 HITCON 2012 跟大家分享。

HITCON 本質是由純學術社團發起的資安年會,宗旨是交流推廣駭客文化而非營利,因此所有的工作同仁都是以濃厚熱情並義務奉獻,然今年台灣資安廠商多受油電雙漲以及歐債風暴的影響,以致於本年募款樂捐的贊助經費非常短缺,情非得已之下提高了票價,為的就是要維持本年會的品質以及把台灣駭客年會打造成亞洲最重大資安會議的初衷。除了一般票之外,大會還提供了 VIP 票種,來賓可享搖滾區專人帶位、優先入場、座位固定及各項貼心服務。

至 2012/06/17 以前購票皆可享有下列早鳥優惠,購票細節請見網站 http://hitcon.org/2012/

  • 一般票新台幣 3,128 元
  • 學生票新台幣 1,433 元
  • VIP 票新台幣 4,000 元

總數超過15幾場以上的精采演講,更多隱藏的王牌講師將陸續公布,請持續關注!

by Tsung at June 17, 2012 05:27 PM

fred

【心得分享】軟體人甘苦談

很抱歉,因為台北大雨來襲,導致班機延誤,讓小弟無法及時從香港趕回台灣參加 FreedomHEC 2012。相當對不起主辦單位,就這樣讓當天議程開了天窗。但是,之後我有空時,仍會整理資料,依舊會公開原先預定要給予的簡報。

不幸的是,活動第二天被客戶抓住,所以也沒辦法到場聽講。不過,雖然沒參加到 FreedomHEC 2012,為了賠罪,第三天當了司機(Be a driver, not writing driver :-S),開著車載著外國講者們一路到了宜蘭大學,給予學生機會直接面對面與 Kernel 開發者交流。

除了面對面問答解惑,其中當然也有保留一點時間,讓講者們可以自我介紹,也分享一些經驗。我也給予了一份簡短的心得分享,由於對象是學生,時間也有限,所以就不直接討論艱澀的技術,而是以輕鬆的角度切入,分享一下創業的經驗和業界的感想,還有描述就算在面對不利軟體業的環境之下,身為一個軟體人所需要的熱情和自我要求。


衷心期盼我們能培養軟體開發的熱忱,然後才有機會做出軟體的價值。:-)

by noreply@blogger.com (Fred Chien) at June 17, 2012 04:09 AM

June 15, 2012

yungyuc

PyCon Taiwan 2012 與台灣 Python 社群的啟動

PyCon Taiwan 2012 與台灣 Python 社群的啟動

謝謝各位,讓我們這群 Python programmer 渡過了一個愉快的週末。不,是超級快樂的週末才是!

我們很成功地在台灣舉辦了第一次的 PyCon (Taiwan)。包含籌辦人員,總參加人數達到了 250 人。如果還有人說台灣寫 Python 的人很少,那肯定只是因為他沒用心找。

這次大會的籌辦,還要感謝協辦的 OSSF 和幾個贊助單位。因為有他們在人力物力和財力上的協助,讓籌辦方可以無後顧之憂地準備議程和活動。當然,也不能忘了辛苦的工作人員們:marr, hychen, timchen119, niki, timhsu, andy, channing, david, jacktsai, kanru, keitheis, lichain, littleq, lloyd, mat, minkenhsu, peterwolf, tcc, terryhuang, pct, strong, tjw, tzangms, yenlung, yurenju,以及我們的顧問 pingooo。

我想在 PyCon Taiwan 的籌備人員中,我可能是出力最少的人了。或許我唯一的功勞,就是在去年 (2011) 五月的時候,開始和 thinker 與 marr 討論在 2012 年正式舉辦 PyCon Taiwan 的想法 (也許有些人聽到的版本是六月或七月,那是因為我的記憶混亂了;剛剛查了一下信箱,相關的信件往來可以追到去年五月)。我大概是少數蠢到想在台灣硬幹一個這麼貴的研討會的人。希望大家都覺得值得!

在大會結束之後,你可以在 http://www.flickr.com/photos/pycontw/ 看到 yurenju 辛苦為我們照下的照片。也可以到我們的 mailing list (google group) https://groups.google.com/d/forum/pythontw 來討論技術,到 Facebook group http://www.facebook.com/groups/pythontw/ 社交,或是到 Freenode/#python.tw IRC 頻道和幾十個流連忘返的 nick 閒扯。

我想邀請各位,透過各種你喜歡的方式,延續我們在 PyCon Taiwan 2012 中所感受到對技術的熱情 (和熱愛)。不要忘記自己是一位 Python user、是一位 Python developer。你正在使用一個非常棒的工具,而它有一個非常棒的社群。這兩者足以支持你完成那些最瘋狂的夢想。然後,我希望明年我們可以看到超過今年一倍以上的參加者,也就是 500 人的大會。當然,為了維持品質,PyCon Taiwan 還是會把握住 everyone pays 的原則,但會作得更完善。

這當然很瘋狂,不過我覺得其實也不會比今年的目標瘋狂太多。畢竟在今年的大會中,各位參加者在會前就填滿了所有開放的 250 個名額,以致於我們無法開放現場報名 (也真的拒絕了一位慕名而來的朋友,很不好意思)。報名的熱烈程度其實稍微超過了籌辦方的預期。再者,從 PyCon Taiwan 2012 現場的活潑氣氛來看,我認為要在 PyCon Taiwan 2013 看到 500 個蟒人跑來跑去,並不是不可思議的事。相信參加了今年大會的各位肯定很有意願在明年呼朋引伴 (也請你務必這樣作,還是你已經開始在拉了呢?) 而籌辦方這邊在累積了今年的經驗以後,明年也要準備得更充份。

不過 500 人的大會不是開玩笑的。為了服務今年的 250 位同好,籌備團隊的成員超過了 25 個人。如果要服務 500 個人,那明年的籌備團隊至少要有 50 個人以上。就算真號召得到這麼多志願者 (別忘了籌備團隊成員也是得買票入場的),組織也是一大挑戰。

再來,就算有足夠的志願者,也能夠進行良好的組織,明年是否能端出讓 500 位同好興奮的議程呢 (大家應該會覺得我們今年技術議程的品質算是不錯的)?這完全取決於我們這些在台灣的 Python 開發者,願不願意開始把自己使用 Python 的經驗拿出來分享給大家。今年我們只收集到了有限的 (18.5 個) 演講投稿,再加上主題演講,最後有 20 個技術演講。對一個剛起步的技術會議來說,這個表現不算差。不過明年的技術演講肯定要比今年多個幾倍,才有可能讓 500 個人都開心。

組織地區型使用者群組

為了進一步發展我們台灣的 Python 社群,我想趁著 PyCon Taiwan 結束後的氣勢,鼓勵有興趣的人在你的工作或居住地周邊,來組織使用者群組。事實上,除了一年一度的年會之外,技術社群更需要的是頻繁聚會的使用者群組,PyCon Taiwan 為社群所提供的,有點像是十年磨一劍的發表會。而因為 PyCon Taiwan 一年只辦一次,所以必定能聚集足夠的資源,邀請世界級的技術領導者,來為同好提供尖端的技術資訊和洞見。地區性的使用者群組 (譬如說,「南港 Python 同好會」或是「埔里 Python 使用者群組」之類) 則讓我們這些愛好 Python 的人,有一個最輕鬆的場合來談論技術,甚至合作專案。

我們是一群搞技術的人,不管活動辦得多大或多小,心裡所想著的都是發展技術。我們肯定不希望只有在辦 PyCon Taiwan 的幾天裡可以和別人聊 Python。我們想要把我們所認為最好的技術用在工作上,作出最棒的系統,盡力幫助我們所關心的人群。我想這是工程道德的一部分。要讓新穎的技術進入產業界需要企業家精神和時間,不是一蹴可及的。PyCon Taiwan 希望能開始將 Python 引入台灣的產業中間 (由於各行各業現在都大幅地資訊化,故此所指的產業不限於資訊相關產業)。在舉辦了一次成功的 PyCon Taiwan 2012 後,希望能號召熱愛技術的人士,透過組織使用者群組和地區性的聚會活動,延續 PyCon Taiwan 的氣勢,合力拓展 Python 的應用。

地區性的使用者群組可以引發很大的力量。始於去年 (2011) 九月,我在竹科旁邊組織了 PyHUG,而許多人可能會發現,PyCon Taiwan 2012 有不少工作人員和講者是從 PyHUG 裡出來的。從 PyCon Taiwan 的角度來看,即使是這麼年輕的使用者群組,都有很大的正面幫助。這真的很棒。希望能有許多的熱心人士,在各個城市或區域組織類似的活動。

在 PyCon Taiwan 結束時,我有提到正在準備成立 (台灣) 蟒協 (正式名稱未定)。使用者群組,甚至 PyCon Taiwan 的籌備團隊,其實都是鬆散的組織,很難凝聚我們這些技術人員之外的資源。成立之後,蟒協可以負責處理正式組織中必然會出現的官僚工作和庶務,讓愛好技術的人可以專注在技術,而不必被 Python 社群所需要的財務、聯繫、公關等等工作干擾。

請回應 Python 使用者的需要,起來成立使用者群組吧!來做吧!明年的 PyCon Taiwan 肯定會讓我們都大吃一驚的。

June 15, 2012 12:00 AM

June 14, 2012

tsung

好文: 12個寵壞孩子的方法

網路上看到的文章, 轉載於此, 以便隨時緊替自己 避免文章提到的項目.

取自: 12個寵壞孩子的方法

12個寵壞孩子的方法

  1. 有求必應
    打從孩子出生開始,你就給他所有他要的東西,如此一來就算他以後長大成人,他還是會倔強的認為所有的一切都是世界欠他的。
  2. 他出口成"髒"你一笑置之
    當孩子講出不得體的話甚至口出穢言,你卻只是笑了笑,這將會使他認為自己很可愛他說的話很討喜,你的反應不外乎是鼓勵他下次再挑些更討喜的話來講。
  3. 從不訓練他精神獨立
    從小一切幫他打點好一切事情由你來負責,等到他20歲時再突然告訴他"自己決定吧!"我們不難想像孩子們對這種突如其來且遲來的恩准,反應會是:"#~%&^...."。
  4. 從不告訴他你錯了
    如此將造成他日後嚴重的罪惡感,若我們一直避免把錯字冠諸孩子的不良行為,一直不告訴他孰是孰非,待某日他抵觸了法律,犯下了父母再也無法替他掩飾的罪行,他還以為整個社會都與他作對,是他自己受到迫害。
  5. 替他收拾所有弄亂的東西
    像個名符其實的老媽子一樣地跟在他後面,撿起他丟再地上的書鞋子髒衣服,幫他整理房間做東做西打理一切,養成他日後推卸責任,將別人的好意當成是理所當然的惡習。
  6. 毫不限制他的讀物
    小心啊!雖然碗筷洗了餐具消毒了,孩子嘴巴吃得乾淨,腦子吃的卻是垃圾。
  7. 常常當著孩子的面吵架
    日後父母離婚了家庭破碎了,你也不用為孩子麻木不仁無關痛癢的反應感到震驚與不解。
  8. 當他的搖錢樹
    若金錢對他們而言太容易到手,想買東西時只要他們搖一搖吵一吵錢就掉下來了,不讓孩子明白金錢是要靠自己的努力去賺取的,如此要他們如何能了解"錢歹賺",如何使他們能有正確的金錢概念。
  9. 滿足他所有的口腹之慾
    當你自始至終永遠滿足他的需求時,你會發現一次的拒絕,就足以對他造成傷害極大的挫折感。
  10. 永遠站在他這邊
    站在孩子這邊固然是好的,但要永遠嗎?當孩子真的犯錯時呢?你能想像這種心態----都是別人不好他們都對我的孩子有偏見,會造成他日後一生多少問題嗎?永遠站在孩子這邊,永遠教他與鄰居師長警察對立,不過是提早讓他走上不歸路罷了。
  11. 我就是拿他沒辦法
    當孩子們闖了大禍犯了大錯,若你只是一次又一次拿這句話來搪塞,替自己的不是找藉口找台階下,孩子們以後如何能尊重你呢?他難道不會想:"既然沒辦法那就乾脆讓你一輩子都沒辦法好了"。
  12. 準備過悲慘的一生吧
    想寵壞你的孩子嗎?想培育出不負責任的下一代?
    是不是草霉族都是父母培養出來的! 社會普遍沒家教更莫談家訓祖訓囉!

有人將此 12點做成影片:

下述取自此篇的留言: 12個寵壞孩子的方法

  • 法國文學家盧梭曾說:[你知道用什麼方法可以讓你的孩子成為"不幸的人"嗎?就是對他---"百依百順"!]
  • 古人說:[愛是好的,姑息卻是絕對的惡。

相關網頁

by Tsung at June 14, 2012 05:34 PM

June 13, 2012

tsung

Shell 讀取檔案並一行一行印出

Linux 於 Bash Shell 要讀取檔案, 並一行一行印出, 或者對每一行作些處理, Shell script 要如何寫?

Shell 讀取檔案並一行一行印出

#!/bin/bash
filename='examples.desktop'
exec < $filename

while read line
do
    echo $line # 一行一行印出內容
    echo 'a' $line # 印出 "a $line" 此行的內容, 可另外作特別處理.
done

by Tsung at June 13, 2012 05:44 PM

jserv

演講:PyPy -- Runtime and Dynamic Compilation Framework

6 月 18 日,我將應 [新竹 Python 使用者聚會] 的邀請,分享題為 "PyPy: Runtime and Dynamic Compilation Framework" 的演講,地點在新竹清華大學育成中心,詳細資訊請見:[PyHUG June Meeting, 2012],以下摘錄相關訊息: 時間:June 18 2012 (週一), 7:00 PM 地點:Room 115, Innovation Incubation Center, National Tsing-Hua University 摘要:PyPy is not just another Python interpreter. It...

by jserv at June 13, 2012 09:06 AM

June 12, 2012

tsung

好文: Google 目前專注的研發項目 - 2012

Google 目前專注的研究項目, 由下述兩篇文章可看到:

下述內容摘錄自上述兩篇文章, 完整內容請回原文看.

  1. Google正在嘗試各種新方法,來為電腦節電
    研究方向:演算法和理論
    研究論文發表數量:205
  2. Google也花了很多時間研究人工智慧
    研究方向:人工智慧和機器學習
    研究論文發表數量:232
  3. Google現有的資料量可以說史無前例,所以它也花了很多心思在資料管理上面
    研究方向:資料管理
    研究論文發表數量:60
  4. Google也在開發各種新的處理技術,以期望從那些數據中獲得有用或者有趣的信息
    研究方向:數據挖掘
    研究論文發表數量:83
  5. Google有成千上萬的 Server,所以它正在嘗試各種新方法,保證各 Server 之間可以相安無事一起工作
    研究方向:分散式系統和並行計算
    研究論文發表數量:67
  6. Google每天都要處理為數眾多的拍賣。所以它也在開發新的演算法,保證可以處理更多的拍賣,速度更快
    研究方向:經濟學和電子商務
    研究論文發表數量:38
  7. Google想要更多的計算機科學家和工程師,所以它準備自己"製造"他們
    研究方向:教育創新
    研究論文發表數量:9
  8. Google也在利用它的研究盡量解決很多現存的基礎問題
    研究方向:通用科學
    研究論文發表數量:42
  9. Google準備建立更快,更好的電腦
    研究方向:硬體和體系架構
    研究論文發表數量:25
  10. Google也在嘗試人機交互的新方法
    研究方向:人機互動和視覺化技術
    研究論文發表數量:126
  11. Google最初的使命還在:為用戶提供更為高效的網頁搜尋
    研究方向:信息檢索和網路
    研究論文發表數量:117
  12. Google正在教機器如何看電影,聽音樂
    研究方向:機器感知
    研究論文發表數量:135
  13. Google正在教計算機將一種語言翻譯成另外一種語言
    研究方向:機器翻譯
    研究論文發表數量:36
  14. Google正在研究並生產新的基於移動端的,連網的作業系統
    研究方向:移動系統
    研究論文發表數量:13
  15. Google正在訓練機器理解你的命令和語言。
    研究論文發表數量:154
  16. Google也花了很多時間保證你的資料安全
    研究論文發表數量:119
  17. Google也在開發自己的程式語言
    研究方向:軟體工程
    研究論文發表數量:34
  18. Google正在準備為所有東西提升速度
    研究方向:軟體系統
    研究論文發表數量:66
  19. Google試圖教機器理解世界上所有的聲音 (語音輸入 + 命令)
    研究方向:語音處理
    研究論文發表數量:31

by Tsung at June 12, 2012 05:18 PM

jserv

演講:作業系統之前的程式與 x86 保護模式 (MOSUT)

在去年 [JuluOS 開發中文社群] 建立後,吸引了若干熱衷於系統程式的朋友,其中就包含長期在此領域鑽研的 [descent] 兄。在前文 [演講:打造類似 Arduino 的開發環境],我提到在南部與若干 open source 的同好,搞了一個每兩週一次的例行性小型聚會 [MOSUT],取自 "Meeting of Open Source Users in Tainan" 之意,而 [descent] 兄即將在 6 月 16 日 (週六),在台南大學的場地,跟大家談談作業系統與 x86 保護模式議題,報名方式與詳情可見 [MOSUT: 作業系統之前的程式 & x86 保護模式]。 此議程預計會探討透過 nasm (Intel 組合語言語法), gas...

by jserv at June 12, 2012 03:28 PM

「Implement Checkpointing for Android」簡報上線

前文 [演講:Implement Checkpointing for Android] 提到 kito 與我在 [FreedomHEC] 發表的新項目 -- DMTCP/Android,也就是架構在現有的 [DMTCP] 基礎上,實做出 Android 的 checkpointing 支持,可有效縮減 Android 裝置開機時間與系統除錯的困難。簡報已上線,請見以下: Implement Checkpointing for Android View more presentations from Jim Huang 目前針對 Android 特性,我們已支援的機制有: Binder IPC Ashmem Logger Properties 上述機制也是 Zygote...

by jserv at June 12, 2012 05:08 AM

June 11, 2012

tsung

AWK 判斷式 寫法 (Shell)

Shell 很常會用到 AWK, 會順便把大小於、if、else 等判斷式也在 AWK 裡面做掉.

AWK 判斷式 寫法

假設資料大概長相如下述:

100|350
120|320
130|310
800|310

  • awk -F\| '{if ($1 >= 100 && $1 <= 200 && $2 >= 300 && $2 <= 400) { print $0 }}' datafile # 將符合條件的此行印出
  • awk -F\| '$1 >= 100 && $1 <= 200 && $2 >= 300 && $2 <= 400 { print $1 ":" $2 }' datafile # 列出限定範圍, 然後用 ":" 隔開印出
  • awk '{if ($2 > 300 && $2 < 500) {print $0}}' datafile # if 限定條件
  • awk -F\| '$1 > 100 && $1 < 200 && $2 > 300 && $2 < 400 {print $1 ":" $2}' datafile

相關網頁

by Tsung at June 11, 2012 05:26 PM

jserv

演講:淺談 Linux 輸入法系統架構 (桌面系統 + 移動裝置)

兩年前,我在 TOSSUG 分享了名為 [回顧 GNU/Linux 中文資訊化進展與未來機會] 的演講,整理了這十多年來,GNU/Linux 作為桌面系統的發展過程中,中文資訊化處理的種種議題。而參與開發 [新酷音輸入法] 的這幾年,目睹了從系統架構、需求,以至於應用範圍層面的重大變遷,因此有了「淺談 Linux 輸入法系統架構」演講議題的動機。 預計在 6 月 24 日 (週日),我將在台中作技術分享,預計探討許多人幾乎每日都使用、卻也從未關注過的軟體:中文輸入法,背後的架構與設計與實現層面的技術挑戰,涵蓋 GNU/Linux桌面系統,以及 Tizen/MeeGo, Android, B2G 等基於 Linux 的移動裝置平台的輸入法架構,詳情可見 Study-Area 的公告 [2012 6月份 SA@Taichung 淺談 Linux 輸入法系統架構 (桌面系統 + 移動裝置)]。以下摘錄公告訊息: 時間: 2012 年 6月...

by jserv at June 11, 2012 04:47 PM

June 10, 2012

tsung

Linux 使用 應用程式名稱 來砍掉 Process

Linux 要砍掉應用程式, 可以使用 kill, 暴力點可以使用 kill -9.

但是 kill 需要知道 PID (Process ID), 所以如果此應用程式(Process) 有很多小孩, 就會砍不完.

Linux 使用 應用程式名稱 來 Kill Process

於 Linux 要使用 Application name 來 kill process 可以用簡單的 Shell 達到.

下述是我常用的命令:

  • ps -A | grep apache | awk '{print $1}' | xargs # 列出 PID
    3090 3141 3143 3144 3145
  • ps aux | grep apache | awk '{print $2}' | xargs # 列出 PID
    3090 3141 3143 3144 3145
  • ps aux | grep apache | awk '{print $2}' | xargs kill -9 # 列出 PID 並砍掉 Process

此篇有另外靠 ps 不需要額外 grep 得寫法: Kill process by name in python

  • ps -C chromium-browse -o pid=|xargs # 列出 PID
    3090 3141 3143 3144 3145
  • ps -C apache2 -o pid=|xargs # 列出 PID
  • 註: ps -C 後面的應用程式名稱需要完整正確, 不能只寫部分應用程式名稱.
  • ps -C apache2 -o pid=|xargs kill -9 # 列出 PID 並砍掉 Process

感謝前輩指點:

Victor Tseng:

  • pidof chrome # 列出 PID
  • kill `pidof chrome`
  • killall chrome

gslin:

  • pkill -f

by Tsung at June 10, 2012 05:43 PM

June 09, 2012

FourDollars

$4 的 Debian 6.0 自動化安裝

製作可開機安裝 Debian 6.0 的 USB Stick

首先去下載 debian-6.0.5-i386-businesscard.iso (46M) 回來
然後再準備一個 USB Stick 接上電腦,如果 mount 在 Linux 系統上的話記得先 umount 掉
以 root 權限執行 (這裡假設 USB Stick 的 Device Node 位於 /dev/sdc)
# cat debian-6.0.5-i386-businesscard.iso > /dev/sdc
這樣就可以製作出可開機安裝 Debian 6.0 的 USB Stick 沒錯就是這樣製作的
這是 Debian 6.0 以後的新功能 hybrid CD/DVD image 不過只有在 i386/amd64 上面有作用

準備好要安裝的電腦跟可以透過有線網路 DHCP 上網的網路環境

現在這隻 USB Stick 可以接上任何可以使用 USB Stick 開機的電腦上開機就會看到:
Select Help

進去之後
Inside Help

輸入
auto url=fd.idv.tw
auto url=fd.idv.tw

然後就是等 Debian 6.0 自動安裝完就會自動關機,這樣就把 Debian 6.0 安裝好了。

接下來是開機展示

GRUB 的畫面 GRUB

開機動畫 plymouth

進入 GDM 了 GDM

輸入預設的密碼
debian
Login

進入安裝好的 GNOME 桌面環境 GNOME

關機時也會有關機動畫 poweroff

這個環境是按照 $4 個人的喜好所打造的,所以不一定會符合所有人的使用習慣,
像是 $4 喜歡使用酷音裡面的單純注音模式,不喜歡有 3D 桌面效果,
中文字型喜歡用 AR PL UMing 字型,英文喜歡使用 Droid 字型,
網頁瀏覽器喜歡用 Google Chrome,並且加入了 http://mozilla.debian.net/ 上面的 Iceweasel(Firefox)。

想要打造自己的 Debian 6.0 自動化安裝可以參考官方文件 Appendix B. Automating the installation using preseeding

而 $4 製作的腳本都放在 http://fd.idv.tw/d-i/

另外弄了一個半自動的安裝,讓使用者可以自己決定帳號密碼跟分割磁區。
auto url=http://fd.idv.tw/d-i/squeeze/manual.cfg

by Shih-Yuan Lee (noreply@blogger.com) at June 09, 2012 06:40 PM

June 07, 2012

tsung

於 Linux 使用 Lame 將 WAV 轉換成 MP3

於 Ubuntu / Debian Linux 要將 wav 轉換成 mp3 可以使用 lame - create mp3 audio files

LAME 安裝 - APT

  • apt-get install lame

LAME 操作使用

  • lame sample.wav sample.mp3
  • lame -h sample.wav sample.mp3 # highest quality
  • lame -h -b 128 sample.wav sample.mp3 # Fixed bit rate jstereo 128 kbps
  • 詳細說明可見: man lame

by Tsung at June 07, 2012 05:26 PM

June 06, 2012

tsung

[摘錄] 大台北房價一覽表 - 2012

今天看到此張圖(今周刊 大台北、桃園捷運房價超圖解), 現在時間是2012年6月份, 看起來是張捷運地圖, 然後圈圈的數字, 是此地區(台北市、新北市、桃園)的平均地價. (1坪多少錢)

註: 點下圖可放大

by Tsung at June 06, 2012 05:48 PM

June 05, 2012

tsung

Facebook 開放 線上環境 C++ Library 原始碼 Folly - 2012

Facebook Open Source 正式線上環境的 Library - Folly (Folly is an open-source C++ library developed and used at Facebook.)

詳見: Folly: The Facebook Open Source Library

Folly 函式庫包含什麼東西?

Folly 到底包含哪些東西? 可見此篇: Folly Library 與 設計模式 說明 - 建議此篇一定要閱讀 (Overview)

在此將此文件提到的 *.h 列出, 大概就可以知道是哪些 Library 了. (此為 2012/06, 新版請自行回去看文件)

  • Arena.h, ThreadCachedArena.h
  • AtomicHashMap.h, AtomicHashArray.h
  • Benchmark.h
  • Bits.h
  • ConcurrentSkipList.h
  • Conv.h
  • DiscriminatedPtr.h
  • dynamic.h
  • Endian.h
  • Escape.h
  • eventfd.h
  • FBString.h
  • FBVector.h
  • Foreach.h
  • Format.h
  • GroupVarint.h
  • Hash.h
  • Histogram.h
  • IntrusiveList.h
  • json.h
  • Likely.h
  • Malloc.h
  • MapUtil.h
  • PackedSyncPtr.h
  • Preprocessor.h
  • PrettyPrint.h
  • ProducerConsumerQueue.h
  • Random.h
  • Range.h
  • RWSpinLock.h
  • ScopeGuard.h
  • SmallLocks.h
  • small_vector.h
  • sorted_vector_types.h
  • StlAllocator.h
  • String.h
  • Synchronized.h
  • System.h
  • ThreadCachedInt.h
  • ThreadLocal.h
  • TimeoutQueue.h
  • Traits.h
  • Unicode.h

Folly 說明文件

相關網頁

by Tsung at June 05, 2012 05:46 PM

June 04, 2012

tsung

Google Search 面對中國 GFW 的解法 - 2012

於 Google Search 某些關鍵字, 就會被大陸的 長城防火牆 (GFW) 擋掉, 而且只要被擋掉, 一段時間都無法連上那個網站.

在中國如果這樣子使用網站, 應該會認為 Google 非常不穩定吧. XD

這個影片可以看到, 不管任何設備, 只要搜尋後, 就會被擋掉, 而且 1分30秒 後才能在連到此網頁.


 Google Search 面對 中國 GFW 的 解決方法 (應對方法)

這篇 Google Help 有說明原因與解法: 為什麼谷歌搜索常常不穩定?, 下述摘錄自此篇:

原因

  • 中國大陸的用戶使用谷歌搜索時,經常遭遇服務不穩定的情形。我們發現這些不穩定往往是因為您的搜索包含了某些特定字詞,從而導致您與谷歌服務器的連接被阻斷。

解法

  • 點擊修改查詢字詞將會刪除突出顯示的字詞,然後您可以嘗試修改輸入,選擇其他或許不被阻斷的字詞。
  • 點擊仍然搜索將會繼續您的搜索,但您可能會遭遇阻斷,在一分鐘或者更長時間內無法使用谷歌搜索服務。在這種情況下,您的瀏覽器一般會顯示類似「無法連接」的出錯訊息。

Google 官方說明: Better search in mainland China, 此篇為中文版的說明: 讓中國大陸搜索更好(PDF)

現在 Google 的應對作法, 就是輸入"長江", 如果這個詞是有問題的, 會在搜尋之前, 就直接於下面出現黃色區塊警告, 於是要使用者去修改這個詞.

相關網頁

by Tsung at June 04, 2012 05:33 PM

June 03, 2012

fred

如何當一個優秀的救火員之打蛇打七寸

經歷過許多救火任務(這邊當然是指軟體系統專案的問題),從 Kernel、Driver、Porting 到各類系統應用程式、Web 應用程式,幾乎無所不救,有社群內的朋友嘲笑著說:『在國內大概沒有團隊,像我們一樣什麼火都救。』。有許多的感觸是肯定的,從問題發生的那一面看去,加以急迫時間的摧化之下,感受到許多程式開發者最真實的思維和邏輯,當然,還有發案老闆的著急,以及清楚看到許多關係人暗地裡的算盤。我不敢說自己是優秀的救火員,但至少一旦承諾並接下案子,有再大的困難和阻礙也總是使命必達,哪怕連續數個月每天平均只睡兩小時,三四天只睡一次,也不會倒下。我想,最少我可以談談如何救火,還有從火堆中看到的許多『人』的問題。

其實,救火沒什麼訣竅,撲滅它是其次,主要是確保不會再燃起。俗話說『打蛇打七寸』,解問題時也要解到夠力才行。但是,或許你常聽有人說:『產品要出貨,能動最優先,好不好其次。』,似乎恰恰與我所提到的相反。沒錯,因為要確保火不會再燃起,理論上是要找出問題根源,從根源著手和解決,很多人乍聽之下,都會覺得是費工又花時間的工作。但是,每次的經驗都告訴我,實際上,找出問題根源,並解決他,往往比修補來得快很多,而且一勞永逸。尤其是碰到死線(deadline)將至,卻一直解不掉的一大坨 Bugs(指同類相關或互相影響的問題),從根本上並深入解決問題才是最快的辦法。

這邊有個簡單的案例:
有一個應用程式,與 Library、System API 和 Driver 都有相關,他們相依關係是:

應用程式 -> Library -> System API -> Driver

假設現在有個問題,這支應用程式出現了一個 Bug,而這個問題最終被發現是 Driver 缺少一些功能,而造成功能不正常。那我們應該從哪裡去解決?

一般人的做法,若是為了因應『產品要出貨,能動最優先』,所採取的方法當然是拿掉應用程式上的某些受影響的功能,或是改寫應用程式以另循途徑的方法達成同功能。但是,若你選擇這樣的做法,最可怕問題是,如果應用程式太過複雜,修改起來會有更多的副作用(Side effect),你要花更多時間去處理更多原先不存在的問題。

況且,這都還沒講到,我們根本都還不知道 Driver 造成的影響範圍有多大,有哪些 System API 、Library API 和依賴他們的應用程式受影響。而今天這個應用程式僅僅只是剛好被發現到有問題而已,一切都還只是開端,之後會發現其他地方也開始到處起火了。或許這邊講的有點危言聳聽,但都是實際上常遭遇的狀況。

不過,這種方法也不是完全不對,如果你很肯定,問題只會出現在一個地方,而且該功能可以被容許直接拿掉,這是最佳的救火方案。

可是往往情況沒有這麼簡單,你必需保留該功能或是更多功能,不但如此,你也必需修好它。所以,在這種情況下,通常我自己會使用前後夾擠式的做法,去尋求解決方案。由上而下(從應用程式往Driver 方向)的部份,主要還是與之前一樣,尋找只出現在一個地方的問題點,我們可以直接移除以滅火。而從下而上,就是盡可能直接把根源問題點解決。因此,首先當然是盡可能下手修好 Driver 的問題,不過,如果有不能修改的理由,就依序往上找到可修改的問題點。

要知道,修復一個 API 可以修好數十數百個使用它的應用程式,但你如果是從應用程式著手,那你就要重覆一一修改不同的應用程式,更別說還要花上每次測試找問題的時間,其數量是以指數級數來算的。所以除了直接刪除功能的做法,最好的處理位置依序為『Driver > System API > Library > 應用程式』。

曾經有碰過一場火,客戶軟體所在的平台本身不穩定,但他們不旦不釐清平台的問題,反而一直著手修改應用程式去避開平台本身的問題,最終不但把自己原本的程式改得亂七八糟難以維護,更是讓修改後的程式打了結,得到許多無解的副作用。更可悲的是,下次換了一個平台,這次做的所有修改,都是白做要重新來過。


後記

你或許覺得本文提供的方法,並沒有什麼大不了的,那是因為已經公布了問題點所在。事實上,實際情況可能更為糟糕,你可能根本不知道是哪一層發生問題。而如何在尋求解決方案的過程中,找出問題可能的發生源,又會是另一個故事了。:-)

by noreply@blogger.com (Fred Chien) at June 03, 2012 09:53 PM

tsung

Yahoo! Babel Fish 翻譯 由 Bing 翻譯 取代 - 2012

Yahoo! 整句翻譯主要是與 Babel Fish 合作的, 現在連到 Yahoo! Babel Fish (http://babelfish.yahoo.com), 會自動導到 微軟的 Bing 翻譯.

Google 的對應產品: Google 翻譯

幾個簡單的整句翻譯試用

Microsoft Bing Translator 結果

  • this is a book => 這是一本 # "書" 沒有翻出來, 我的書咧? XD
  • how do you do => 你好

Google Translate 結果

  • this is a book => 這是一本書
  • how do you do => 你怎麼辦 # .....

相關新聞

by Tsung at June 03, 2012 05:39 PM

June 01, 2012

jserv

Mini DebConf 2012

Debian Mini DebConf 顧名思義,是個小型的 Debian 研討會,通常在世界各地都會有當地的 Debian 社群成員,協助籌劃舉辦,預計完成一些當地的 Debian 相關議題。這次的 [DebianTaiwan / MiniDebConf 2012 ] 活動由本地團隊 Andrew Lee, Arne Goetje, Paul Liu 協助舉辦,活動日期從 2012/06/08 (五) 至 2012/06/10 (日),活動地點在台灣花蓮地區。關於詳細的交通資訊、住宿與行程,請見 wiki: [MiniDebConf2012]。 若想要報名參加,請直接編輯上述 wiki 頁面。依據現有登記的狀況,此次 miniDebConf 涵蓋了以下議題: [Ezilla] - 快速簡單打造個人私有雲 新酷音輸入法的手機與雲端開發進展 自由軟體於部落發展中的潛力...

by jserv at June 01, 2012 03:57 AM

May 31, 2012

tsung

貝貝秀氣小提琴照片 和 恐怖的鬼臉影片 (2Y4M)

貝貝非常兩極化的影片與照片, 照片看完, 不要馬上看影片, 影片很恐怖~ 要看要先有心理準備~

貝貝恐怖的做鬼臉影片

by Tsung at May 31, 2012 05:18 PM