2007年6月28日

「競爭力」的迷思

今天看到的一段話引起我很深的感觸。

Quote from a slashdot comment under the topic "Internal Microsoft Email about Life at Google"

Re:Who died and made you boss?

(Score:5, Insightful)
by Techguy666 (759128) on Wednesday June 27, @12:21PM (#19664409)
If someone likes working all the time, why not respect that and move on with your life?
As long as it doesn't intrude on my life, I'm all for that. However, if you work 24/7 and our mutual boss wants to know why I'm not accomplishing 20 tasks a day, that gets annoying and your work habit is affecting me. If our mutual boss decides to make you the "norm" and expects everyone to follow suit, then you've created an environment for burnout and your work habit is affecting me. If you get in the habit of working 24/7 and you catch a cold and come in to work anyway, and I catch your cold, your work habit is affecting me. You infect me with a cold and I'm staying home, dammit. You infect other, saner, people and they'll stay home too.

Allowing someone to behave detrimentally in a work environment sets a dangerous precedent because nobody works in a bubble; it changes the work culture to one that benefits the organization unequally over the individual, it creates health risks, and combined, potentially skews a society's economy. That's why I care if *you* work yourself to the bone. You're not only my colleague but you're a barometer of the world around me.

這是個很常見的問題,以公司的角度,只要他們可以將員工設計成可替換的零件,那麼零件的損壞對於公司就沒有重大的影響。如此一來,公司的最佳選擇就是極度壓榨,把健康搞壞也沒問題,再替換就成了。對大公司而言,替換的人選可是排成長列。(我之前的主管就是明證)

但以員工來說,這樣的文化會造成兩難。如上文所述,假定你每週工作七天,一天24小時隨時待命,而共同的老闆質問為何我無法每天完成二十項工作,這就很討厭,你的工作習慣就會影響我。而如果上司決定將同事的態度視為「正常」而要求其他人效法,那麼你就創造了一個讓大家燒乾的環境,那麼你就會影響到我。而如果你因為過度工作而感冒,還堅持來上班而傳染了我,我以及其他被傳染的正常人就得待在家,而這也影響到我。

這種有害的工作習慣先例一開,所有人都會被影響。這把工作文化轉變為對公司有利,但對個人不利。除了健康風險,事實上這也潛在地搞壞了上班族行情。只要有一人這樣做了,那麼他就成為整個環境中評估大家好壞的準繩。

這是個典型的 Prisoner's dilemma(囚徒困境)。如果大家合作,那麼成果對於團體(員工)是最佳的,然而由於總會有人思考自身的最佳利益而非群體的,最終結果反而對團體不利。在目前的台灣,這問題無解,因為我們鼓勵 work harder 而非 work smarter. 這也是為何我們工作時間長而薪水低。這也是為何我們的「競爭力」總是那麼高。廉價勞工誰不要呢?

CMClass: 微軟徵才試題 in Prolog

一開始是在 thinker 那邊偶然看到這個題目,正文如下:
永源拿了兩個不同數字...
這兩個數字分別大於 1 ,也分別小於 50
永源只把這兩個數字的乘積告訴了亞譚 ...
永源再只把這兩個數字的和告訴了明歆 ...
永源問, 這兩個數字是什麼 ?

以下是亞譚和明歆的對話... (小強, 小毛, 小燕在旁坐陪)
亞譚: 我不知道這兩個數字是什麼!
明歆: 但我也還是不知道這兩個數字是什麼!
亞譚: 喔!那我知道那兩個數字是什麼了 !
明歆: 喔!那我也知道那兩個數字是什麼了 !
突然間 ....聰明的三位陪客同時也說: 我們也知道那兩個數字是什麼了 !
聰明的你, 告訴我....那兩個數字是什麼 ?
大家已經做出了 PythonC 的解法,但這題目感覺起來可以用 Prolog 解,自從修完 programming language 之後就再也沒碰過了(還被教授用一個很混蛋的理由當掉),正好複習一下。
solution(Set) :-
stage3(Set).

values(Set, S) :-
findall(V, (member(X, S), V is X), Set),
sort0(Set).

duplicate_values(Set, S) :-
values(Values, S),
findall(X, (member(X, Values), sublist([X,X], Values)), Set),
sort(Set).

single_values(Set, S) :-
values(Values, S),
findall(X, (member(X, Values), \+ sublist([X,X], Values)), Set),
sort(Set).

range(Set) :-
findall(I, for(I, 2, 49), Set).

solution_space(Set) :-
range(Range),
findall([A,B], (member(A, Range), member(B, Range), A < B), Set).

stage1(Set) :-
solution_space(S),
findall(A*B, member([A,B], S), S1),
duplicate_values(Values, S1),
findall([A,B], (member([A,B], S), V is A*B, member(V, Values)), Set).

stage2(Set) :-
stage1(S),
findall(A+B, member([A,B], S), S1),
duplicate_values(Values, S1),
findall([A,B], (member([A,B], S), V is A+B, member(V, Values)), Set).

stage3(Set) :-
stage2(S),
findall(A*B, member([A,B], S), S1),
single_values(Values, S1),
findall([A,B], (member([A,B], S), V is A*B, member(V, Values)), Set).
餵給 Prolog 之後打 ?- solution(Set). 就可以算出答案啦。

2007年6月27日

Very interesting read

Viewing American class divisions through Facebook and MySpace

很有意思的文章,將 Facebook 以及 MySpace 概括的以社會階層區分,Facebook 是給要唸大學的「好孩子」,MySpace 是給「壞孩子」;以環境、同儕、網站風格甚至軍隊等等角度來觀察。用同樣的工具集來看台灣網站的話,會發現類似情形也是存在。

2007年6月20日

Debian lenny 上 OpenOffice 中文顯示問題解決

不知從哪一次 update 之後,我的 Debian lenny 上 OpenOffice 就沒法顯示中文了,一進去原本的介面就全是亂碼。火大了把 zh-tw 的 l10n 移除,用英文介面也撐了好一陣子,直到我今天第一次要打中文為止。不光是介面,原來直接輸入的中文也會變方格字,這可不行啊。

翻來翻去找了一陣子,終於發現原來它預設的中日韓顯示字型是 Andale Sans UI,在我的系統上這字型根本不存在,當然就顯示不出啦。解決法是先用
LANG=C openoffice
進去看到英文介面,然後到 Tools -> Options -> OpenOffice.org -> Fonts ,把 Andale Sans UI 這個鳥字型替換成隨便一個 true type 的中文字型就好啦。

OpenOffice 真是傷腦筋哪,這樣下去怎能取代 MS Office 咧?

2007年6月14日

Joost on Debian lenny

Joost™ the best of tv and the internet
雖然已經出來有段時間了,還是簡介一下:

Joost 是真正的網路電視,可以讓人免費觀看高畫質、全螢幕的影音,而且有許多頻道可以切換、選節目、隨時可以暫停、往前往後移動。能夠做到高畫質的原因是因為背後採用了 p2p 分散式技術,讓使用者互相傳來傳去,所以頻寬需求不像集中式的 YouTube 之類那麼恐怖。這毋庸置疑的會是另一次風暴,創始人之一正是之前引起風潮的 Skype 作者。目前仍在 beta 測試階段,不開放給所有人下載,若有興趣想試試的,請留下您的 email 給我。

這麼好玩的東西讓我在工作室的時候也想看,偏偏那邊沒有 Windows,於是我當然就想把它裝到 Linux 上啦...(以下火星文出現)

基本上參考 HOWTO: Joost (with sound) 就可以搞定,我採用的是第二種方法,用 wine.git 自己 compile 一個版本來跑,直接用 debian 附的 wine 不行。值得注意的是 libasound2-dev, fontforge, freeglut-dev 要裝起來,不然 ./configure 出來會自動 disable 掉這些功能。

成功裝好 Joost 以後,一跑就狂當,只好執行 winecfg 調來調去。首先要注意 Windows 版本要調到 Windows XP 不然根本進不去。其他設定 audio 是用 alsa,graphic 用 virtual desktop ,解析度 800x600,let windows manager manage 那個選項關掉。跑起來很順,附上辣妹圖為證:

2007年6月11日

是趨勢觀察,還是...?

前幾天參加經濟日報辦的「網路高峰會」訪談陳士駿,其中過程網路上已多描述,我就不談了,只說說心得感想吧。

首先是這類活動或多或少都帶些馬後炮,也就是說等成功了再邀請他來談談怎麼成功,這種方向是錯誤(或說至少是不足)的。例如訪問得到彩卷的人為何得獎,他可能說我有燒香拜佛,但問題是所有燒香拜佛的人買彩卷都會中嗎?我故意舉這例子的用意是誇示法,實際上要搞出 youtube 當然不只是運氣,還有很多因素。所以在這類的訪問中,重要的就是找出那些因素,而不是找出燒香拜佛。

以這角度來看,若是有人自稱網路趨勢觀察家、web 2.0 創業大師之類的,但結果是將網路上各種新知、新網站用自己的筆調重講一次,然後對已經成功的,找幾個理由說他們為何成功,可以賺錢喔值得大家參考;剛起步的,就說前景可期值得注意,那麼這種東西基本上是垃圾。差別只是包裝的好不好,大家容不容易看出來罷了。這比經濟學家的笑話還糟:他們在事情發生以後,分析為何他們之前的分析錯誤。但至少他們事前還敢分析預測啊。

要真正判斷這類文字的價值,就要看他們敢不敢預測,以及預測的準不準。甚至如此預測的理由說明都可以省略,只要準確,就有人注意、就有價值。注意我說的「價值」。就算是來源像白龍王一般神龍附身來自天啟也可以。

聽完整場,我最終記下來的重點只有一個,就是「簡單」。他之前在 PayPal,後來 YouTube,兩者都是滿足了一個簡單的、常見的、未滿足的需求。這就是一切的重點。你必須先有個這樣的model 再來談創業,沒有就不要創。而這樣的 idea 絕不可以是拐彎抹角的創造出需求(這點我們時常看見),而必須是需求已經在那裡,大家都需要的。其他例如資金團隊技術等等都是次要,講一堆門檻夠不夠高的都只是參考。例如我們知道 Google 的技術很強,但 YouTube 非常好做,可知技術是次要,應該是為需求而服務。所有的此類評估不可本末倒置。

另外要狠狠批評一下主辦單位。首先官樣文章太多,致詞內容滿是廢話,內容安排令人緊繃、無趣,完全不符陳士駿給人的感覺。劉永平的訪問遵而不失,已經是台灣方面表現最好,座談會的部份簡直恐怖,陳銘憲、黃逸松沒講到甚麼,張成秀跟我上次看到她一樣主要為 Google 打廣告,偶爾才拋些東西出來,賀陳旦是當天最差,擺弄一堆老生常談 web 2.0 的熱門名詞以外甚麼料都沒有,只有一再幫中華電信打很可笑的廣告而已。什麼時候中華電信變成一間以使用者為主 "user is the king" 的公司啦?不要講出來笑死人。相比起來,上次參加中時辦的「2007網路趨勢論壇」卡司雖然不如人,但活動安排好得多了!

2007年6月7日

FizzBuzz?!

今早看到一篇文章,說來應徵的 200 個工程師中有 199 個不會寫 FizzBuzz 程式。需求是這樣的:
印出 1 到 100,但如果是 3 的倍數就印 Fizz,如果是 5 的倍數就印 Buzz,如果同時是 3 和 5 的倍數就印 FizzBuzz。
簡單到近乎腦殘對吧?但好笑的是就連自認會解的 programmers 在留下的 comments 裡面自己都寫錯。最常見的解法當然是:
for i in xrange(1,101):
if i%15 == 0:
print "FizzBuzz"
elif i%3 == 0:
print "Fizz"
elif i%5 == 0:
print "Buzz"
else:
print i
然而如果要把 Fizz 改成 Bizz,我們就需要改兩個字串,那如果這兩個相距很遠或是其他甚麼原因,就容易漏掉,違反 DRY (Do Not Repeat Yourself) 原則。結果想要改進的人就修成這樣:
for num in range(1, 101):
if not num % 3:
print "bizz"
elif not num % 5:
print "buzz"
else:
print num
結果在 15 時,只會印 bizz 而印不出 buzz 就錯掉啦。目前看到我覺得最帥的寫法是:
for i in range(1, 100) :
fmt = [i, "fizz", "buzz", "fizz buzz"]
print fmt[(i % 3 == 0) + 2 * (i % 5 == 0)]
用上了 binary 的想法在裡頭,很有 fu 喔。我自己的版本是這樣:
for i in xrange(1,101):
s = []
if i%3 == 0:
s.append("Fizz")
if i%5 == 0:
s.append("Buzz")
print "".join(s) or i
但我覺得速度應該不快。Anyway 實務上我覺得最好的版本是第一版啦,重複的問題可以用常數定義的方式解掉,如下:
three = "Fizz"
five = "Buzz"

for i in xrange(1,101):
if i%15 == 0:
print "".join((three, five))
elif i%3 == 0:
print three
elif i%5 == 0:
print five
else:
print i
這樣直接列出來快而且也易懂。有沒有讀者想玩一下啊? ;-)

為彎道而生的新交通工具

好想開開看喔∼



原廠網站
更多影片

2007年6月6日

Microsoft Surface

這算是舊聞了,但值得介紹。


這就是 Microsoft 的秘密武器:Surface。許多新聞寫錯,那並不是觸控式螢幕,而是由紅外線攝影機去觀察透明桌面上的東西,來做出回應。與此同時,它也利用 RFID 以及 wireless network 的技術,來達到看似神奇的辨識物件以及直接傳輸的功能。

然而與其像 Microsoft 一般認為 Surface 是終極武器,我事實上比較看好它所採用的操作介面,也就是 multi-touch. 影片中提到製作此介面的 Perceptive Pixel 這間公司是由 Jeff Han 創立的,以下是幾個 demo

這是 multi-touch 第一次出現,很快引起一陣熱潮。


最近的 demo:


Multi-touch 實際上已經商業化。是哪個產品呢?正是 iPhone!