PageRank



轉移公告

計劃把 http://blog.hoamon.info/ 文章全部轉移至 http://www.hoamon.info/blog/ 這裡,而本 Blogger 站台的文章近 500 篇,我預計在 2014-12-31 前移轉完畢,完成後 http://blog.hoamon.info/ 將只作代轉服務,一律把舊連結如 http://blog.hoamon.info/index.html 轉成 http://www.hoamon.info/blog/index.html ,敬請舊雨新知互相走告。

新文章只發佈在 http://www.hoamon.info/blog/

何岳峰 敬上

2010年12月16日 星期四

Google Adwords 10 歲了





上兩張圖,是 Google Adwords 慶祝 10 歲生日,特定為我的網址( HOAMON.INFO )作了一個慶祝活動。活動影片在此

「政治文」: 民國百人不能有「毛澤東」、「鄧小平」?

那中小學教科書在談中華民國歷史的部份,就讓全部刪除這兩人的事蹟,因為他們與民國無關,也不是中華民國人民。

不過,明明中華民國是在 1912 年成立,而中華人民共和國是在 1949 年成立,這中間曾是中華民國人民,而後是中華人民共和國人民都不算數的話,那中華民國憲法的領土幹麼還包括大陸地區呀! 我想不出理由,為什麼可以不算他們!

如果爭議的重點是在「蔣介石」的排名在「毛澤東」之後、「鄧小平」是軍事類第一名,那我想,這問題是出在票選的民眾上吧! 跟擬名單的國史館委員有何干呀! 如果我們的民眾就是想選「鄧小平」,結果在評選名單就被國史館人員『技術性』地不列入,那這算不算作弊呀! 「毛澤東自傳」都可以在台灣賣了,如果真的討厭他,幹麼還賣他的書呢!

身為一個『民主』大國,我們就該包容人民選擇的結果,就算結果不是『高級知識份子』所偏好的,也應接受,而不是事後再來質疑為什麼當初不作弊,作掉熱門人選。

何況,這種網路票選結果看看就好了,有多少投票的人真的了解那些人是幹什麼的。到最後還不是靠「知名度」取勝,就像我們的官員滿意度一樣,作了什麼事不重要,在鏡頭前要會講話(要不然就會被強制要求請辭),用一份誠懇的心"感動"觀眾就行了。

網路票選與學術論定是兩回事。

2010年12月14日 星期二

安徒生童話展及卜湳文明心得

昨天(2010/12/12)我不太甘願地跟著老婆到台中國美館看安徒生童話展,因為我覺得這東西的訴求對象是小朋友。講起來,這應該是她想帶著侄女、侄子去看的,而我只是陪客。尤其它一張預售票還要賣到 150 元,我覺得實在好貴。

在去程中,老婆也提到目前國美館有卜湳文明特展,可以順便看看,當時覺得怪怪地,所以我們就討論起來,什麼樣的展品是放美術館、什麼是放博物館,而結論是如果展現的重點是古文明的生活型態應該是放在歷史博物館中,如果著重的是雕刻、陶器、服飾等其外形部份,則可以放到美術館中。

抵達美術館時,我向侄女、侄子提到,現在的小朋友比較可憐,以前我們沒有網路遊戲、第四台這些東西,所以時間很多的,如果不去文化中心、美術館、電影院…這些地方打發時間的話,那日子會過到起笑。結果,侄子回說:「也有一些同學放假的時候,是不玩網路遊戲的,他們都騎著摩托車到處跑」,我聽了哈哈大笑,因為侄子現在不過是個國一生而已。果然鄉下小孩就是不一樣。

其實我很久沒進國美館了,之前 921 過後,國美館修了好長一段時間,長到讓我忘記它,再加上後來我也搬到埔里定居,自然去的機會就少很多了。不過,至今我還能想到之前在省美館(那是在廢省前的事囉)時,看過的一件陶藝品,外形是一片波浪狀的,上有許許多多的孔洞,配合著燈光角度變化,可以看到很多陰影。如果沒記錯的話,它的名字叫作「日照」,但那已是近 20 年前的事了,測謊也都不算數了,就別計較我記得對不對了。

進了童話展場,果然發現很多的孝子、孝女帶著小朋友來。我看展示內容也的確花了不少錢,裡面有許多客製的模型、書本以及裝置藝術,這裡有份遊記可以參考看看。還得花不少錢去請工作人員來配合進場者玩童話故事的小遊戲,這錢看來是真的有花在東西上,而不是買爽的。

至於它的實質內容到底展示了什麼東西,就容我賣個關子,待我把卜湳文明特展講完後,再一併奉上。

出了童話展後,國美館非常體貼地設計大家的動線鐵定會經過童話商品銷售部,裡面有許多童話故事書、新奇的幼兒學習軟體、各種安徒生童話相關的玩具、拼圖等,如果剛剛看得不過癮,還可以買回家,隨時觀看。其中,我也看到一些讓我眼睛一亮的產品,像是指著書本內容就可以發出相關聲音檔的語音筆。

出了銷售部的門口,映入眼廉的就是卜湳文明特展,它有幾個展品,我感到十分特別,首先是文物上的文字有阿拉伯數字、埃及文字及中文字,再來是看到幾種類似現代化設備的圖騰,驚覺這些卜湳文明的古人非常先進。

基本上,這趟我不期待的旅程,實際上收獲頗多的。而安徒生童話展及卜湳文明特展的詳細心得為了不讓大家壞了興趣,我特定寫到下一篇文章,如果你非常肯定不會去看卜湳文明的展覽,又想吞下我的速食心得,才麻煩你點過去。不然,還是希望你先去實地看得究竟。

2010年11月22日 星期一

2010-11-21 第 29 屆台中市舒跑杯

From 20101121舒跑杯


第一次參加舒跑杯。之前聽表弟說他跑的是 7.2 公里的賽程,當時就覺得不可思議。不過,現在對我來說, 10 公里只是我正常訓練的長度。

但經歷過台東之美鐵人三項賽第 29 屆舒跑杯後,發現我的瓶頸是在腳的肌力上,往往還沒有到氣喘如牛的階段,我的腿部肌肉就不行,膝蓋、腳踝也開始痛了。

所以現在首要的工作就是訓練腿部。有幾種方法:

  • 背負重物走樓梯

  • 背負重物站立,並作蹲下動作(腿的彎曲角度介於 120 ~ 90 度)



目前還在考慮是否參加 2010 府城馬拉松比賽

2010年11月13日 星期六

近代唯一有用的金融創新,其實只有提款機?!

標題這句話,引用自綠角文章:「投資人宣言(The Investor's Manifesto)讀後感」。不過,這應不是綠角原創,我好像在那部書有看到過。

標題這句話或許對一般投資人是對的,但對其他人、其他公司就不見得了。當然,無用的金融創新也不少,這些無用的金融創新只能幫投資銀行賺取飽飽的佣金。

我個人很喜歡,也覺得對這世界很有幫助的金融創新之一,就是「交換(SWAP)」。常見的交換有外匯交換、貨幣交換、利率交換、股權交換、商品交換及信用違約交換(CDS)等。其中,就是 CDS 被濫用才導致 2008 年的次貸風暴

在這些創新中,我認為貨幣交換就是一種對世界是很有幫助的金融創新。什麼是貨幣交換?

在使用不同貨幣別的兩個公司 A 、 B 上,若恰好這兩家公司對雙方的貨幣有需求,在傳統方法上, A 公司得準備一筆 A 貨幣,然後跟銀行進行外匯買賣,拿到 B 貨幣後,再去進行業務推展; 反之, B 公司也得如此。若能使用 SWAP ,則雙方公司可免去銀行手續費及匯兌風險。這作法是兩家公司簽定一份合約,明定交換金額以及再交換的到期日。

舉個例子來說, A 國 A 公司想要成立跨國的子行銷公司,在 B 國推展業務,而 B 國 B 公司因為常向 A 國的公司購買原料或半成品,所以也計畫在 A 國成立子製造公司,他們兩家公司一拍即合,由 A 公司拿出一筆錢(A貨幣)給 B 公司的子行銷公司,另由 B 公司拿等值的一筆錢(B貨幣)給 A 公司的子製造公司。這樣兩筆錢各在自己國內轉手,少了跨國資本轉移的麻煩(彭總裁應該很喜歡大家都這麼作)及省了銀行換匯的手續費,在到期後換回也是以期初相同的匯率計算,也少了匯率波動的風險,這種交換對雙方都有好處。惟一的缺點是信用違約的風險。有可能 B 公司的子行銷公司經營不善,在到期日時,無法歸還 A 貨幣給 A 公司,這種交換的計算重點就是在利率風險及信用風險上。

這種貨幣交換,也有其他轉變形式。

不知道,大家有沒有注意到街上某些奇怪招牌的商店,上面寫了一堆印尼文、泰文、越南文、菲律賓文…等,就是沒有中文。你看不懂招牌沒關係,因為這些店的顧客並不是台灣人,而是印尼、泰國、越南、菲律賓…這些國家的人民。它們的功能是提供跨國匯款服務,在台灣的銀行中,要作跨國匯款,每次的手續費(不是佣金)約在 1000 元左右,對這些外國勞工而言,他們一個月匯一次薪水回家,至少要花 5% 的金額在手續費上,那家人所得的金額就會更少了。當然這些勞工可以把薪水集合起來,湊個 10 萬、 20 萬的,再一起匯。不過,就有信用風險啦! 既然是一筆錢,那相對應的另一頭帳戶也是只有一個人可以領出來,如果那個人耍賴怎麼辦呢? 這些奇怪商店的重要性就在這了。他們保證早上台灣匯款,下午另一國的家人就可以去領錢了,而手續費也很低(耳聞是每次 50~100 元之間,不過我不確定是不是真的)。

那麼這些奇怪招牌商店是如何作到這種服務的? 是把勞工們要匯的錢集合起來,再一次轉到國外去嗎? 我不知道這種行為有沒有違反「管理外匯條例」。不過,它們有另一種方法可以把錢運到國外。

這些商店多半是貿易公司兼營的,原本它們就有業務是在台灣買貨,然後運到其他國家銷售,過去的作法是把國外的銷售所得匯回台灣購買台灣商品,再運至國外銷售。但如果結合這些商店,貿易公司就不須把國外所得匯回台灣,它們可以利用台灣外藉勞工存入的錢,拿去買貨,然後把國外銷售所得,分配給外藉勞工的家人,這樣就少了從國外匯回的手續。利用這種管道,不但貿易公司少了匯款手續費,還可以賺得外藉勞工的手續費,真是一舉多得。

這手法在洗錢中也有介紹到。據說,賓拉登就是利用這種手法將錢匯至美國,首先他將販毒所得運至第三世界國家,然後在美國一樣開設這種「匯款商店」供外藉勞工匯錢回母國。這樣他不須透過銀行匯款機制,就能把錢從第三世界國家,轉移至美國以供他的恐怖行動運用。

從這些例子看來,金融創新只是一項工具,好壞還是得看人是怎麼運用的!

2010年11月12日 星期五

沒良心的被動投資人

某天,學弟問我:「為什麼要賺這種沒良心的錢?」他的意思是,有許多的上市公司,可能是靠著壓榨勞工生產力、排放超標汙染物、欺騙消費者…等來獲得超額利潤,而我買了它們的股票,形同我提供資本支持它們從事這些不法行為,也從這些不法行為中間接獲利。

事實上,在他問我這個問題前,我就曾經問過我自己了。那是在鴻海員工跳樓事件頻傳及台塑仁武廠土壤及地下水污染事件(相關文1文2文3文4文5)爆發時。在本人的股票投資名單中,這兩家公司皆羅列其中。當時我手頭也已經擁有鴻海,台塑則是在待購買名單中(但至 2010-11-13 為止,尚未買進)。

我是否該因為這些爭議事件而放棄購買鴻海、台塑作為我向上或向下追求平均報酬的機會嗎? 我的答案是「」。

一個被動投資人是不在乎被投資公司的業務及獲利表現的,我連它未來是不是賺錢都不在乎了,為何還得費心它的營業行為是否是合法、合理、合情呢! 如果我開始煩惱它們的生產行為,那還有時間自在地生活!

作一個被動投資人,目的只是在個人生產消費過程當中,將盈餘儲存在抗通膨資產上,待年老時這些抗通膨資產才能支持我過著依舊平凡的生活。這個過程,持續儲存才是重點,而不是選擇什麼樣的抗通膨資產。簡單講,就是維持存錢的習慣比找到投資必勝的方法重要。

因為我不想花時間去比較買什麼公司賺的錢更多,當然也不想花時間去思考那些公司對社會、台灣、地球是更有用的。

在金錢投資的道路上,我選擇「沒有良心」。

上市公司從事違法的營業行為卻還有獲利能力,這表示我們的政府也支持這件事,它放縱企業排放超標汙染物,卻只收取低於「處理汙染費」的罰緩,甚至還讓它們上市,得到直接融資的機會。政府不管控企業營業行為,把責任交給投資人,這是政府的失職。

然而,我也是台灣的住民,對於台塑仁武廠管理能力不佳也是有意見的。對此,我的作法是贊助綠黨,因為對環保評估並不善長(我學土木的,通常學的是破壞),將資源撥給有能力的人去訴求才符合比較利益法則。

另外,對於懲罰非法排放汙染的公司,我倒是希望能夠修法的,像這次的仁武廠地下水汙染事件,到現在還沒有處份,這與我們營造業工安事件相比,實在是爽太多了。在工地,只要有出人命,馬上就是停工等待調查,然而這地下水遭汙染的事實,卻到現在都還只是調查

在工地出人命,有時候不完全是管理單位的責任,從我耳聞來的消息,部份是工人自己對安全狀態不甚了解或是輕忽個人生命所造成的,管理單位往往苦口婆心勸說要帶安全帽、掛安全索、材料堆放整齊、機具維修前確實斷電…,但就是有人作不到。對應這地下水汙染問題,原因要不就是工廠管理能力不足,要不就是蓄意排放,我實在看不出來會是汙染物自己想透口氣跑出來的。

如果有機會修修法,讓這些惡意排放汙染物的企業因為新環保法規而倒閉了,就算已擁有它的股票,我也不反對,因為我是個「沒良心」的被動投資人。

什麼,行文至此,你居然還不知道什麼是「被動投資人」,真佩服你的毅力。過去,我都稱呼自己是「指數投資人」,但在「投資人宣言」中,伯恩斯坦明確地把指數投資與被動投資區分開來,它們分類的原則是把須以一特定指數作追蹤的投資方法定為指數投資,但被動投資不用。因為我只是選了百來支的股票進我的菜籃,等我有了錢就近似隨機的買進,所以充其量,這是被動投資手段。

= 後記 =

感謝 id 的回應,讓我想到以黑奴賣買來深入解釋「沒良心的被動投資」。

在 16、17 世紀,荷蘭有兩家貿易公司: 東印度公司、西印度公司,東印度主要業務為買賣香料、瓷器、絹絲和茶葉,而西印度則是販賣黑奴。從業務項目來看,西印度公司是無法符合現今社會觀點的,但若從實際營業行為來看,東印度公司也沒多對得起台灣先民及其他地區的原住民。

如果我是當時採用被動投資的荷蘭投資人,還是會將資金平均投入東印度公司及西印度公司,來確保我的投資收益位於荷蘭投資人的平均排位上。還好,到了 17 世紀末,許多國家開始禁止買賣黑奴,西印度公被迫終止營業,其財產沒入荷蘭政府。這時,我的西印度公司股票可能變成壁紙,可是也無所謂,我還是確保了投資收益能位於荷蘭投資人的平均排位之上。

從上面的例子來看,我認為政府是管控營業行為的責任人,當它讓公司公開上市,就表明它接受了公司的營業行為,如果公司違法,政府有責任課以罰緩,如果時代變遷,營業行為不再受世人接受,政府就明令禁止,並強制公司停業。反之,政府對違法公司處以不符實之罰緩或忽略其違法行為,且依舊讓公司上司,那我只好變得沒有良心了。

以上都是從「被動投資」的角度來看待。若以我個人角度來說,當有能力開一家貿易公司,且具有經營決策制定權力時,我必然不會選擇「販賣黑奴」為營業項目,在交易香料、瓷器、絹絲和茶葉時,也會採取公平貿易原則。

2010年11月3日 星期三

中了發票再用劃撥來捐款,成本就會降到 1% 以下




依郵局劃撥規定: 100元以下向劃撥戶收取 10 元手續費, 101~1000 元收取 15 元手續費,而 1000 元以上則一律收取 20 元。

因為中了 1 張 200 元的99年1、2月發票,所以決定劃撥 2000 元,這樣的劃撥成本才會壓到 1% 以下。接下來,就等我再中 9 張 200 元的發票吧! 之後就能再啟動新一輪的捐款。

行善絕對需要考慮成本,如果出了錢,但弱勢團體才拿到一點點兒,那就有點偽善或是笨的味道。藝人除了要有臉蛋外,如果『打算行善』還是要多學點數學吧!


= 後記 =

又中 2 張 200 元的。再差 7 張,就能啟動新一輪的捐款。


= 後記 1 =

又中了 2 張差一點無緣的 200 元發票。明天(11/7)是最後兌獎期限。還要再 5 張 200 元的。

2010年10月19日 星期二

完成 2010 台東之美 51.5K 鐵人三項賽

總排名: 675(完賽人數為 740)
組別: M30
分組名次: 130(分組完賽人數為 141)
總成績: 04:01:44.57
游泳: 01:05:58.12(時限 50 分鐘)
自由車: 01:43:03.47(時限 100 分鐘)
路跑: 01:12:42.98(時限 80 分鐘)



三項運動中,主要還是游泳最弱。不但比標準時間多了十六分鐘,也讓我在比自由車時,多花了點時間在休息,而這段時間都算在自由車比賽當中。

雖然成績差強人意,不過,這是第一次參加三鐵賽,原本的目標就是「完賽」而已,所以當我從活水湖起來時,感到十分興奮,因為我從來沒有在游泳池中一次游上 1500 公尺。在比賽的前三天,最佳紀錄不過是一次游 300 公尺而已。

何況在活水湖中游泳的路線並不是直的,必定比 1500 公尺更長。但在比賽中,我完全沒有在魚雷浮標上休息過,真的是一口氣游完。

事實上,在比賽前一日的試游中,我變得有點怕水,因為這是第一次在開放水域(踩不到底)中游泳,覺得非常可怕,尤其是第一次下水時,完全是出乎意料的狀態,我不知道活水湖是有階梯可以走下去的,當我從岸邊準備下水時,所踩的地方是斜坡,所以走著走著我就滑下去了,想走回斜坡,可是它上面長滿了青苔,根本走不上去,接著就漂離岸邊了。這時都還沒戴上蛙鏡及泳帽呢! 根本就不會游泳。

還好有背了魚雷浮標,趕快趴在上面休息,然後戴上蛙鏡及泳帽。待心情平復一點後,開始試游了幾公尺,不過覺得怎麼游都游不太動,所以先回到岸邊,這時才發現兩側是有階梯可以走上去的。走上階梯後,在岸邊休息了幾分鐘,剛好有其他有經驗的參賽者,跟我說到「從剛剛的游泳姿勢中,我的浮力還不錯,放輕鬆游就行了」。於是在休息了幾分鐘後,又下水了,這次是有準備的,所以大約游了 20 公尺,在看到離岸邊很遠後,我實在不敢再游下去,所以就游回岸上,經過這二次的試游,我的雙腳還在不停的發抖,真的是被嚇到了。比賽前一晚,我的心情都是在擔心隔日的游泳,我到底能不能完成???

真的到游泳比賽時,男人的面子問題對我真的是太重要了,實在不想作那個被救生員撈起來的人,於是說服自己,可以游的慢一點,但是一定要游完,這種心態讓我渡過這 1500 公尺的考驗。

到了自由車比賽時,這算是我比較擅長的部份,所以在這個時候,我大概超了 40 個人的車,只被 1 個人超過去。

在自由車比賽部份,我將它界定成「為路跑準備」,所以出發前我就吃了一根香蕉,而在這段路上,我也吃一份補給品及整罐水。這種補給計畫是因為我在今年暑假時,就有先來這邊試騎,然後發現我不在路上吃補給品的話,在後面的 10 公里根本就沒有力氣騎完所制定的。

不過,在這次比賽中,我吃得太多了。在路跑前,我又在自由車的車棚中,吃了一份補給品及喝了一些寶礦力,結果,在路跑時,我覺得肚子跟著振動,而且有點痛,在走了 2 公里後,才開始慢慢地起跑。跑步時,也發現我的右小腿及膝蓋有點痛,真的是太操勞它們了。不過,耐著痛,還是慢慢地跑完了。最後拿到人生第一面的完賽獎牌。



這次比賽中,除了我很累之外,老婆也很累,在游泳時,她得一直在岸邊注意我有沒有溺水,要不要叫救生員。就這樣,也跟著我走了一個多小時。老婆,辛苦妳了。

2010年10月9日 星期六

工程施工項目預算編列


本文與台北花博爭議有間接關係,當然不是因為我要為郝龍斌說話,也不是要撻伐他。只是純粹就「工程施工項目編算編列」這個讓大家都有話說的爭議問題來提供我的所學。

基本上,我對整個花風暴的資訊掌握的不如他們局內人了解,所以,我只是分享我在「營建管理」這個學科所學到的東西。

常收看這個 blog 的朋友們,或許會認為我學的是資訊方面的學科,畢竟我發的文多半是 python, google app engine, mercurial, django 相關的文章,不過,我可是道道地地的土木系學生,從大學、研究所,一直到現在的營建管理博士班。

一個傳統的土木系學生主要有幾種專長可以選擇: 結構、大地、水利、測量、運輸、建築、環工、營建管理(奇怪我記得應該有九項的,到底少了那一項?),其中建築、環工、運輸多半早已分家,而水利、測量、營建管理則視學校發展方向而有所不同,像中興土木就包含了結構、大地、水利、測量、營建管理,但逢甲土木就只有結構、大地、測量、營建管理。

而這次大家吵得十分火熱的話題,也就是營建管理學生應當了解的課題: 工程預算編列。

一個營建專案的生命周期有五個階段: 規劃構想(業主)、設計(工程顧問/建築師)、發包(業主)、施工(營造廠)、保固營運(管理公司/業主)。由業主針對本身需求提出構想,委託顧問公司設計,確認施工圖說後,由業主招開發標程序依「最有利標」或「最低價標」方式委託營造廠商施工,在施工階段,由監造單位(業主/工程顧問/建築師)負責監督施工品質及工期,待驗收合格後,由廠商向業主請款,通常會保留 10% 工程款,作為保固工作之保證,最後再交由業主或管理公司管理最終產品(大樓、橋梁、道路…)。

一個項目單價編列會有三個單位接觸到這件事: 業主、設計公司、營造廠。這也就是工信為什麼會在報上刊登聲明稿,請台北市政府說明為何不採用工信編列之項目單價,而是使用自己編列的預算書。而這份市政府決定的預算書現在卻被叮得滿頭包。

再回到生命周期五個階段,這次聚焦在預算編列上,業主在規劃構想階段中,首先要先拿到錢,如果是公家機關,它們可能是從上級單位那邊拿到錢,然後要針對某種計劃,給予它特定金額,而這個計畫下又會分好幾種工程,這些工程主要是呼應所屬計畫的目的,如中央政府提出八年八百億要治水,它就會拿一筆錢給水利署,而水利署也會提出幾個計畫來達到治水目標,像是易淹水計畫…等,而這個易淹水計畫中,轄下再分成幾個工程,而這幾個工程就會交由水利署工程專業人員主導,把錢花掉,來換回工程設施,就公共工程預算分配課題可詳讀我學弟的論文來了解。

工程專業人員在拿到工程預算後,就會委託設計單位,或自行設計工程的施工圖說,並撰寫分標計畫書、施工綱要計畫書、工程數量概算書…等。這個工程的建造金額在設計後,發現其小於預算金額,則會回沖到所屬計畫中由其他工程支領,若不足則反之,又或者直接刪減設計。而這個建造金額是怎麼來的,就是在施工圖說中,由設計單位作了工料分析,統計出要多少材料(鋼筋、混凝土、模版)、多少人工(鋼筋綁紮工、模版工)的數量,再乘以各項單價得之。

這個規劃總價與實際建造金額真的相等嗎? 不可能!!!

在規劃總價中,通常工料分析的數量是不準的,而且單價也是不準的。數量不準其原因是,設計單位在設計階段,是否能得到施工現地的詳細資訊,如基地高程、地質報告、水流速度、流量…等,以基地高程來說,若取得點不夠多,則其他位置就必須用內插法代換,當然也可以使用航空測量,不過飛機一起飛就要 40 萬(之前聽說的,不知行情有沒有變)。詳細的資訊是得用錢去換來的。那基地高程數據不準確,在整地時就會造成挖填不平衡 *1,像土方量過多的話,原本設計上沒有棄土作業,結果在實際整地上,就會出現棄土作業,數量從 0 變成 N 。

* 註1 挖填平衡,是指在整地作業上,要將原本過高的基地經過機具的開挖把土方運至過低的基地填入,而通常我們希望在一個建造基地中,挖方量是等於填方量的,這樣我們就不需要從外地運入土方,或是將本地土方運至外地。可減少運輸成本及環境汙染成本。

那單價不準的原因在於時間因素及供應商因素兩種。在規劃工程到實際建造工程中間,短則半年,長則 10 年(像是水壩、高鐵),這麼長的時間,都可以讓鋼筋從一噸 9 千漲到 4 萬,再跌到 1 萬 4 了,那你還會覺得單價準有必要嗎? OK,我舉的例子太極端了,設計單位也的確不能因工期長,就亂訂單價,他們還是得自行訪價,自行訪價大致有三種方法: 機關內部訂價、電訪供應商、營建物價(工商廣告: 這是我學長負責的,乃國內第一名的專業營建物價報告)。

  • 機關內部訂價: 依過去工程經驗,明定工料價格,提供內部人員編列預算之用。其缺點為機關內部資料不夠豐富,還是有工料會沒有明確訂價。

  • 電訪供應商: 從供應商那邊得到報價資訊。其缺點為一個施工項目要打三通電話(如果你都有這些供應商的電話)的話,一個工程若有 3000 個項目,你覺得設計單位會乖乖每個項目都認真訪價嗎? 而且你問的供應商,也不是實際營造廠所配合的供應商,那設計單價真的能符合施工單價嗎?

  • 營建物價: 因應「機關內部訂價」不夠豐富,而「電訪供應商」又麻煩且不具公正性,所以營建研究院對國內的設計單位提供「營建物價」資訊,由他們幫你打電話,而且不只問 3 家,提供高達 4000 項的常見營建工料價格資訊。


如果「營建物價」都已提供價格資訊了,那這次花博相關工程直接套用,不就行了。何必自己生單價數據呢? 原因在於「營建物價」是包山包海,不過它還是沒包到宇宙呀! 我相信,這次花博的「馬蘭花」、「龍吐珠」的報價資訊,它一定沒有,所以這二項報價又回到使用「電訪」方式。

看到這裡,你會不會覺得公共工程的錢,好像花得不踏實,居然在設計時,沒有一個公正且明確的項目單價分析表來決定出工程真正的成本價,然而這就是營建專案的特性:規模大、項目雜、工期長所造成的。無法明確定出成本價也沒有關係,因為到時候成本價也會被營造廠商的投標價所修改,且通常是往下修改。

當設計單位決定施工圖說後,業主就會進行發包招標程序,採用最有利標或是最低標方式發包。在最低標中,營造廠商只提供一個工程總價,只要它的工程總價比其他在場的營造廠商低,它就得標了。而得標後,業主與營造廠商就會簽約,約定該工程各項施工細節,而其中,就重要的是「單價分析表」,這個單價分析表乃紀錄該工程有多少施工項目,每個施工項目的施作數量,及施工項目的單價。

前述所提之單價分析表,除了設計單位要製作,營造廠商也會製作一套內部的單價分析表。

營造廠商在提出投標總價前,它會作幾件事,將招標的施工圖說拿來分析,研究設計單位提供的各項現地測量、實驗報告,得到自己一套的工料數量,再透過供應商報價或「營建物價」刊物決定每個項目的單價,再加上可接受的利潤成數,這樣就能得到一個「營造總價金額」,如果以這個「營造總價金額」去投標,且幸運得標後。業主與營造廠商就會協調(合併)出一套契約項目單價分析表,把雙方自己分析的表合併成一張。並依照這張契約項目單價分析表,作為廠商請款依據。

契約項目單價分析表的合併有二個限制,一、契約項目的總價就是廠商的得標價,這也就是工信在聲明稿中第二點所強調的『本工程契約除訂約總價與決標總價相同之外,契約個別項目單價是依據政府機關的預算而來,與本公司實際投標單價並不相同。』,這是其來有自的呀!; 二、契約項目的施工數量必須依照業主招標文件,就算業主認定該工程沒有棄土作業,但營造廠商評估一定會多餘土方要棄土而且是營造廠商考量正確,也必須依照業主招標文件。所以在這兩者的限制下,惟有調整各項契約的單價方可滿足。

從這裡看來,就可以知道項目單價是不可能與實際市價相符的。有可能因為設計單位認定的數量計算過低,所以單價必須往上調,也有可能是營造廠商以超低價搶標,造成單價往下調。所以當你提出某個項目單價去評估它與市價有所差別,這都是不盡合理的。

在合併契約項目單價分析表上,營造廠商會提出一套,而業主也會提出一套,但通常是採用業主的。為什麼? 因為出錢的人最大。另一方面,也因為從調整單價數據上,可能會讓營造廠商有超額利潤,或是增加工程無法完工的風險。

契約項目單價分析表是廠商計價的依據,對廠商而言,它一定希望將較早施工的項目單價調高一點(這個動作一定會讓較晚施工的項目單價變低,因為「總價不變」的限制),這樣它在早期施工時,可得到超額利潤,雖然在晚期施工時,它會是賠錢施工的,不過,這部份的成本早在之前就領到了。我們來看看下面這個簡單例子。


業主編定的XXX工程契約項目如下:
A工項: 設計數量 1000 ,施工開始日 1 ,施工完成日 10 ,單價 100 元
B工項: 設計數量 1000 ,施工開始日 6 ,施工完成日 15 ,單價 450 元
C工項: 設計數量 1000 ,施工開始日 16 ,施工完成日 30 ,單價 350 元
廠商利潤: 設計數量 1 ,施工開始日 1 ,施工完成日 30 ,單價 100 元


營造廠商編定的XXX工程契約項目如下:
A工項: 設計數量 1000 ,施工開始日 1 ,施工完成日 10 ,單價 800 元
B工項: 設計數量 1000 ,施工開始日 6 ,施工完成日 15 ,單價 50 元
C工項: 設計數量 1000 ,施工開始日 16 ,施工完成日 30 ,單價 50 元
廠商利潤: 設計數量 1 ,施工開始日 1 ,施工完成日 30 ,單價 100 元


由業主的單價分析表來看,可繪製下圖的藍線,而廠商的則是繪出紅線。



上圖是預定進度曲線,橫軸是工作日,縱軸是進度百分比。因為每個項目都有先後施工依據,所以每張單價分析表,都可以繪出這條曲線,而這條曲線往往是 S 型的,所以又稱 S curve 。

在上圖中,我們假設藍線是真實世界的預定進度曲線,但契約項目單價分析表卻是簽紅線版本的話,這代表廠商得到了紅線減藍線面積的現金流量利息,這是對「有良心」廠商的超額利潤。又或者遇到的是「沒良心」的廠商,它會在第 10 日請款,並在一領到錢後馬上倒閉,這樣它會領到 86% - 8.6%(保固保證金) - 10%(期初繳交的履約保證金) = 67.4% 的價款,但此時,它卻只支付 37% 的貨款,而且還有可能都是開票的,所以它實際上可得到大於 30.4% 的差價。

所以呀! 本來業主就不會相信廠商提出的單價分析表,而是會自己生一套。

而業主在調整契約項目單價分析表上,如果只是單純就以得標價與預算金額作等比例的調整,那還簡單。如藍線版本,是招標時的單價分析表,而實際開標後,廠商以 92 折得標,那一律把單價乘以 92 折不就結了。如果世界這麼簡單美好,那很多人就沒有工作了。

一個工程的契約項目從 300 個到幾萬個都有可能,而有些工項是固定費用,如工程保險、試驗費用,有些工項是其他工項的等比例金額,如廠商利潤、營業稅,有些工項在未來又可能遇到變更設計,需要增減數量,如果現在的單價調整的不合理,等到變更設計時,大家就會吵翻天。所以就單價調整工作本身來說,它本來就不是一件簡單的事,這部份可詳讀蔡昇穎的「工程採購標價審查與合約單價調整機制之研究」一文。

簡單講,如果該工程在簽定契約項目單價分析表後,並沒有變更設計(增減施工數量),且工程品質完全通過監造要求,並依約完工的話,契約項目單價分析表訂得隨便一點也不會有爭議,一朵蘭花要訂 200 元或是 2000 萬都沒關係,因為工程總價就是標價,差別只是廠商多領點利息或是少領點利息而已。

但如果有變更設計的話,那單價有沒有按照市價就很重要了,因為變更設計的數量,會對總工程款造成爭議。像是原本簽訂 1 朵蘭花單價 1000 萬,結果市政府覺得原先規劃的 10 朵蘭花太少了,要求再增加 10 朵,這樣工程款就會暴增 1 億,這樣合理嗎? 又或者反過來說,市政府後來覺得這次花博應該展示較稀有的花卉,所以就不展示蘭花了,在變更設計後,會讓整個工程款少 1 億,你覺得營造廠商作得下去嗎?

結論:

  1. 無法期待一個幾年後才完工的工程,在規劃設計時就明確定出它的工料數量。

  2. 只單看幾個施工項目的單價是不盡情理的。

  3. 變更設計時,施工項目的單價才重要。

  4. 施工項目訪價時,要善用「營建物價」(再一次工商廣告)


以上是我對契約項目單價分析表相關資訊的分享,然而這內容畢竟是我參與政府機關計畫案中,從部份公務員口中聽來的,再混合課本所學,所以並不全面,且我本身尚無任何工程實務經驗,如果有所闕漏錯誤,懇請指教。

2010年10月8日 星期五

我們該痛恨投資客嗎?

從以下這些文章中,我們可以了解台灣想買房子的人目前對「房產投資客」極度地不友善。

http://blogs.myoops.org/lucifer.php/2010/10/05/housewuwu
http://www.wretch.cc/blog/oolong1001/5641402

然而這想法對嗎? 或許是我已經買了房子,所以想法才會與其他人不同! 但照邏輯推導,還沒買房子的人要歡迎投資客才是,而且是愈多投資客去推升房價對沒買房子的人是愈有利。

Why!?

首先分清楚投資財與消費財的差別,投資財對擁有者而言,只是單純的金錢效用,擁有者的目標就是以最少的價格買進投資財,並以最高的價格賣出。但消費財就不是單以金錢論之的,擁有者視消費財含有其他不同金錢的效用,如: 飽食、製造、炫燿、管理權力等。

以股票作例子,買進 1 張巨大(9921),如果視之為投資財,則購買者一定希望以最低價格購買,並在持有後,每年領取最多股息,期末並以最高價格賣出。簡單講,它的內部報酬率(IRR)愈高,對購買者的效用就愈高。

但如果是把巨大股票當消費財,就不一定了。若購買者對掌握巨大公司有高於一般人的需求,他想要持股達到 5 成以上並擔任董事長,那他可能會進行收購,這時候,我們就不能以 IRR 來分析它的買進價格了,因為這與購買者在擁有巨大後的作為有關。而其他像汔車、金飾以及 3C 產品,也都是消費財的一種,擁有它們的人,並不在乎買進後,該產品的市價波動。

房產與股票類似,對某些人而言,它是投資財; 對另外的人而言,它是消費財。

本文主要討論從消費者(將房產視為消費財的人)角度,來看待投資客(也就是將房產視為投資財的人)的態度應當如何!

從目前的現象看來,投資客對房產的價格推升是有影響的,然而只看到推升情形,就跳出來大肆批評投資客,我個人是覺得有點短視。投資買賣是一種中性行為,「買入」後一定要「賣出」才會有獲利(若不考慮股息及租金收入),這些投資客現在拼命買房產造成價格推升,但總有一天,他們也要賣出的,這時候一定會造成價格下跌,當這現象發生時,消費者你還要痛恨投資客嗎?

若只考慮投資客以本金買賣房產來看,它對價格應是中性的,但考慮了外部性,就會發現,以長期而言,投資客會導致拉低房產價格。一、因為房價大幅上漲,所以很多建商開始搶建,想想農產品的例子,前年香蕉價格好,今年通常賤如屎,如果房價漲得不夠多,就吸引不了建商們的興趣; 二、因為房價短時間大幅上漲會讓投資客認為錢好賺,所以他們借錢來買的機率會變高(因為錢好賺,就不會在乎利率了),借愈多買愈多,等到房價反轉時,就可以看到一堆法拍屋了。到時候,就變成買方市場。

簡單講,如果投資客真能不斷控制市場價格上揚,那日本股市現在不只 3 萬了,而美國兩年前不會發生次貸風暴,台灣的營建上市公司不會有人下市。

消費者一生通常只會買一棟房子,別讓自己陷入這一小時段中,把眼光放遠一點,或是說有耐心一點。只要活得夠久,你會發現,房價就是在那邊上上下下的。千萬不要相信:「台灣土地就那麼多,未來會不夠用」這種屁話。

所以站在消費者的立場上,應該要歡迎投資客入市,然後消費者要忍耐購買的慾望,等到他們玩完你丟我撿的遊戲膩了後,消費者一定可以買到更便宜的房子,而且在玩「你丟我撿」的遊戲中,消費者的平均租金還會往下降的。

這樣子,你還要痛恨投資客嗎!

2010年9月28日 星期二

使用 Google AJAX Libraries API 時,無法離線撰寫網頁程式?

在網頁程式中,我都是使用 Google AJAX Libraries API 來 host jquery 程式庫的,然而這麼作有一個缺點,如果你是在離線作程式設計時,要手動修改樣版,把 Google 來源的 js 檔改成從本機讀取,是有點麻煩,但致少作得到。

但若是將來在系統上線後,使用者上得了你寫的網頁系統,卻無法連至 www.google.com 呢? 那怎麼辦,雖然這個機率會滿低的,但也是有可能會發生在這個網頁系統屬公司內部系統,而對外連線卻被中斷的情況下。

別怕! 很簡單,下面就是一個範例,第 6、7、8 行改成本機 host 的檔即可。



1 <link rel="stylesheet" title="default" type="text/css" media="screen" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/smoothness/jquery-ui.css"> 2 <script type="text/javascript" src="http://www.google.com/jsapi"></script>
3
4 <script type="text/javascript">
5 if (typeof google == 'undefined') {
6 document.write(unescape('%3Cscript src="/localmedia/jquery-1.4.min.js" type="text/javascript"%3E%3C/script%3E'));
7 document.write(unescape('%3Cscript src="/localmedia/jquery-ui-1.7.2.custom.min.js" type="text/javascript"%3E%3C/script%3E'));
8 document.write(unescape('%3Clink type="text/css" href="/localmedia/smoothness/jquery-ui-1.7.2.custom.css" /%3E'));
9 } else {
10 google.load("jquery", "1.4.0");
11 google.load("jqueryui", "1.7.2");
12 }
13 </script>


延伸閱讀: Using CDN Hosted jQuery with a Local Fall-back Copy

2010年9月26日 星期日

如何處理「合併(merge)錯誤的 hg 儲存庫」? 就是再用「merge」來復原!

學弟把我們已經作好的分枝要合併進主線時,不知怎麼搞地 merge 得非常混亂,而且也 push -f 進 hg 伺服器。

我們總共有三種分枝: 'default', 'Release for XXX', 'convert to InnoDB',這次是要把 'convert to InnoDB' 的成果合併進 'default' ,再合併到 'Release for XXX' 。'convert to InnoDB' 是我們將 django-based 的系統從 MyISAM 引擎改到 InnoDB 所作的程式碼修改。主要的修改是發生在索引上,因為原本有一個地方設定了 unique_together = (('name', 'uplevel_id'), ) ,而它會造成 MySQL Error code 1071錯誤('Specified key was too long; max key length is 767 bytes'),因為 name 的原長度是 256 ,而我們又使用 utf8 ,所以它的實際長度為 256 * 3 = 768 ,但在 InnoDB 的索引中,限制為 767 以下,所以我們必須將 name 的長度限制為 255 。

當我改完程式碼後,就請學弟們在自己的本機上測試,如果沒問題的話,就作合併的動作,並送到實際運作的網站去。

結果,他合出了下面這個東西:



D 版是我的分枝成果,我希望他把 D 合併到 B 跟 C 中。但他生出了 E, F, G, H 。這 4 個版本都不是我想要的。

一開始,我的作法是再次作手動合併,結果我迷失在那些修改的程式碼中,花了快 3 個小時,依舊無法解開,所以我當時用下策來處理,就是以 hg strip 指令把 hg 伺服器上的 E ~ H 的版本洗掉。然後重作合併。

這個方法十分爛,但當下,剛好沒有人上傳程式碼,而我又陷在那堆程式碼中,所以我選了這個作法。

這種作法,會有一個大問題,如果有人在未刪除版本前,就作了 pull, update ,那麼下次他在 push 時,就會出現衝突。他一定會 merge 到亂掉,因為他手上的 E ~ H 版本的程式碼不具含意,所以他也無法以程式碼內含意義來作合併,這樣他會像我一樣陷入毛線當中。

所以,在我解決 hg 伺服器上的亂象後,我靜下心來仔細思考,才發現我何必管 E ~ H 作了什麼事呢! 我只要在 merge 時,忽略它們的修改就行啦!

首先,我 clone 一個 LOCAL 儲存庫,而且只 clone A, B, C, D 之前的版本。作法必須分兩次,因為 clone 只會把該版本的媽媽下載下來,所以像是 A, B, C, D 4 個版本,卻有 2 個 heads ,我就得分兩個指令來下載,指令如下:

$ hg clone https://SERVER/my_software LOCAL -r C
$ cd LOCAL
$ hg pull -u -r D

然後,依我原本想要的合併方式處理:

$ hg ci -m '"convert to InnoDB" branch ...' --close-branch #P.S. 這個作法事後會造成問題 *1
$ hg merge -r B
$ hg ci -m WRITE_f'_COMMIT_MESAGE # 產生 f'
$ hg merge -r C
$ hg ci -m WRITE_g'_COMMIT_MESAGE # 產生 g'

這樣 LOCAL 的版本圖就像下圖一樣。



再來,我把伺服器上的錯誤版本 clone 到本機的 SERVER-FIX ,然後在 SERVER-FIX 中依 branch 作合併,最後合併出 'convert to InnoDB' 及 'Release for XXX' 兩種 heads ,指令如下:

$ hg clone https://SERVER/my_software SERVER-FIX
$ cd SERVER-FIX
$ hg update -C H
$ hg merge -r E
$ hg ci -m WHATEVER_MESSAGE

成果如下圖:



接下來,我回到 LOCAL 儲存庫中,把 changeset push 到 SERVER-FIX 中,成果如下圖:



最後,我要作的就是把 I, G, g' 三者合而為一,而且要在 merge 時,完全忽略 I, G 的程式碼修改,怎麼作呢? 指令如下:

$ cd SERVER-FIX
$ hg update -C g'
$ hg merge -r I
$ hg status
M models.py
$ hg cat -r g' models.py > models.py # I 版的修改,只在 models.py 上,而我又用 g' 版的 models.py 把 I 版修改完全洗掉了
$ hg ci -m MERGE_g'_I_MESSAGE
$ hg merge -r G
$ hg status
M models.py
$ hg cat -r g' models.py > models.py # G 版的修改,只在 models.py 上,而我又用 g' 版的 models.py 把 G 版修改完全洗掉了
$ hg ci -m MERGE_g'_I_G_MESSAGE

最後成果如下圖:



再為各位整理一下,合併「錯誤的 hg 儲存庫」步驟:

1. 在本機上,重作一個完全正確的 LOCAl 儲存庫。
2. 在本機上,重現一個與伺服器相同的 SERVER-FIX 儲存庫,並依 branch 作合併,讓一個 branch 只有一個 head 。
3. 將 LOCAL 的成果 push 到 SERVER-FIX 中。
4. 讓 SERVER-FIX 中的 head 與 LOCAL 的 tip 合併。而且在合併時,完全消除程式碼的修改,讓它們合併完,程式碼是與 LOCAL 的 tip 程式碼完全相同。
5. 確認無誤,就能 push 到 hg 伺服器了。

以這種方式處理完的 hg 伺服器,才可以讓所有人都免去再次合併 E~H 這段錯誤程式碼的痛苦。

基本上, hg 的主要運作方法,就是要讓所有人習慣在自己的本機上, merge 自己與其他人的成果,如果你能順暢地走完 1 ~ 4 的步驟,也代表你足以應用 hg 在大部份的程式碼修改工作了。

註1 我太早在 'convert to InnoDB' 分枝上下 --close-branch ,所以我後來在使用 hg update -C 'convert to InnoDB' 時,它居然是 update 到 I 版,而不是 e' 版。

2010年9月25日 星期六

在 django-based 系統中,將MyISAM 轉換成 InnoDB

詳細請見官方文件

我簡單整理如下:

一、將 settings.py 中的資料庫引擎從 MyISAM(預設值) 換成 InnoDB , 加下以下設定,


DATABASES = {
'default': {
'NAME': 'xxx',
'USER': 'xxx',
'PASSWORD': 'xxx',
'ENGINE': 'mysql',
'OPTIONS': {
"init_command": "SET storage_engine=INNODB",
},
}
}


二、將原來的表格作


mysql> ALTER TABLE ????? ENGINE=INNODB;


至於第二種方法該如何處理,我是使用 mysql 指令手動處理:


mysql> \T /home/hoamon/alter.sql;
mysql> show tables;
mysql> \q;
sh# perl -i -pe 's/| +([^ ]+) +|/ALTER TABLE \1 ENGINE=INNODB;/g' /home/hoamon/alter.sql
sh# mysql -u xxx -pxxx xxx < /home/hoamn/alter.sql


我在將 MyISAM => InnoDB 時,遇到一個問題 MySQL Error code 1071錯誤('Specified key was too long; max key length is 767 bytes')。

因為原本的 models.py 有一個 Model 設定了 unique_together = (('name', 'uplevel_id'), ) ,而它會造成 1071 Error code,因為 name 的原長度是 256 ,而我們又使用 utf8 ,所以它的實際長度為 256 * 3 = 768 ,但在 InnoDB 的索引中,限制為 767 以下,所以我們必須將 name 的長度限制改為 255 才行。

2010年9月18日 星期六

挑戰清境

第三屆挑戰武嵿盃在 2010 年 9 月 5 日舉辦,而我又錯過了報名時間,所以只能在下午出發。而目標也只是清境而已。


花了 1 個小時 45 分後,我抵達霧社鄉公所。上次所花的時間是 1 小時 40 分,不過,這次我多了置物架,所以裝了不少補給物品。


一路上,看到不少上午比賽人員所拋棄的圾垃,像是補給飲料空包、高壓填充空瓶、酸痛貼布空袋等。我不知道主辦單位在事後會不會統一打掃,但就算會打掃,我相信這些比賽人員有能力帶上來,也應該有能力帶下去。


我的補給食品主要是香蕉,帶香蕉有一個好處,如果我真的沒公德心的話,丟在路邊,也會是路旁小樹的肥料。不過,我還是把香蕉皮帶回家了。我怕路樹吃太胖了。


最後在 PM 5:15 時,我抵達清境的第一家 7-11 ,而在這裡我就結束這趟自行車之旅。本來是想到 Starbucks 旁的那一家,不過,我的體力實在不行了,我連最輕段數的齒輪比都踏不下去了,而且再晚點下山,我就無法騎快車衝下山。



騎乘路線示意圖:


View 埔里鎮公所到清境的第一家7-11(花了三小時) in a larger map

我後來在想,這段路上,其實有很多 7-11 ,我應該只帶上 icash 來就行了。

2010年9月17日 星期五

手機(市話)小額付款

手機與信用卡的相同點為何? 都可使用後付制(post-pay),也就是服務/商品先享受,到期才付款,這也代表電信公司與銀行都具備 消費信用 的交易功能。本文要談的手機小額付款是單純指目前以 sim 卡為主的付款機制,不牽扯其他技術,如 NFC 非接觸式手機付款。


那我沒事講這個小額付款幹什麼呢?


原因出在老婆帶了本天下雜誌( 455 期,2010/9/8出版)回來,其中一篇全球視野中提到「手機當銀行 貧富市場通吃」。我非常驚訝,這讓我想起往事,過去在網際網路剛席捲全球的時候,中華電信就有推出以電話帳單代替信用卡帳單的服務,詳細內容在這麼多年後,我已經不太記得了,但目前看來利用電話付費的概念沒造成趨勢。


結果到現在還是有人在提說在偏遠地區沒有銀行服務,一般窮人用手機付款比銀行轉帳容易,而這將是"""趨勢"""。我驚訝的就是,一個本來應該是事實的東西,怎麼還是趨勢? 而且在台灣,電信付款的比例,除了在線上遊戲收款上,有比較明顯的應用,其他商品付之闕如。


目前的電信小額付款服務,運作方式分兩種,首先消費者先向所屬電信業者申請「小額付款」功能,申請時,會建立一組付款密碼,當消費者線上付款時,就以手機、身份證號及付款密碼作為付款的認證依據,成功付款後,會在下期的電信費中繳納;另一種則是消費者不用事先申請,而是在付款時,電信業者傳送一筆付款密碼到消費者手機上,待消費者將此付款密碼輸入付款頁面後,交易始算成立,若是使用市話方式,則是用市話撥打付款專線,並輸入付款密碼,詳細方式可參考 台科大碩士論文闕仁斌所著之「線上遊戲玩家使用電信小額付款服務接受度暨行銷模式之探討」 一文。該文主要以行為科學方法來探討消費者的接受程度,並回饋給電信業者及線上遊戲業者提供行銷策略。我不是學行為管理的人,所以我無從評斷該論文從消費者角度出發是否分析合理,但我以電信小額付款的本質來分析,這玩意的出現根本就是天經地義的。


本文一開頭就提到信用卡與手機都具備消費信用的交易功能,理由就是它們都可使用後付制。如果業者不相信申請人在消費後的一定期限內如實付款,則信用卡業者或電信業者必定終止消費信用的交易功能,此消費信用對信用卡而言,是購物;對電話而言,則是通話。而且經過聯合徵信中心或電信業者分享的資料庫的查詢,這些沒有信用的人,都會成為拒絕往來戶。


再來,信用卡與門號在一定程度上,是可以作到單一個人的認證功能,當我線上刷卡時,有卡號、到期月份、CSC碼等認證程序,實體刷卡時,要有卡片、簽名等認證程序,而電信小額付款時,我得提出手機(市話)號碼、身份證號、付款密碼或實際門號擁有證明(也就是簡訊密碼認證)。就認證功能上,它倆是一致具備的。所以電信門號與信用卡在本質上根本是一樣的,


甚至信用卡會被盜刷的機率還比電信門號高,因為電信門號的付款密碼沒有記在手機的背面,而簡訊驗證還可以證明實際擁有門號,你現在也很少聽說 SIM 卡被偽造的新聞。既然信用卡付費是常態,那電信小額付費沒理由只可應用在小眾範圍,尤甚者,我個人認為「電信小額付款」還可以應用在實體商店的消費服務上。


然而,目前的現實卻不是:信用卡消費遠遠打敗電信小額付款。第一個原因是信用卡經過銀行的徵信工作,可以給予消費者高額的「信用」,而電信業者卻只在初期開放給消費者 1000~2000 元的「信用」,待時間及消費頻率的增加,最多也到 3 萬而已。想當初慶豐銀行在我 22 歲還在唸研究所時,就給我 49 萬的額度,果不期然,它的信用卡部門最後被賣了,整個銀行從此結業。


從信用額度來看,我要繳保費、買電腦、機票,這些動則上萬的商品都無法使用電信小額付款,因為我對電信業者來說,「信用」太低了。這就是小額付款消費金額比例偏小的原因之一。


另一個原因,則是出在電信業者的不合作,就是這兩個原因造成小額付款不流行。第一個原因好解決,兩個手段:一、data mining 一下客戶資料庫,區別一下"好"客戶,讓他們擁有高額信用; 二、納入預付機制,讓消費者可對門號作預繳,像是從超商買來預付卡,並加值到一般後付的門號上,而這預繳的錢除了定期的電信資費扣款外,剩下的金額就是「電信小額付款」的上限,也就是把門號變成借記卡/金融卡(Debit card)。而第二種手段可以先第一種手段施行。


第二個原因,比較不好解決,但理論上卻是可以解決的。


銀行在推出信用卡服務上,並不是由銀行決定一切的,而是透過信用卡國際組織作為中間的橋梁,讓消費者能作輕鬆刷卡消費服務。所有的銀行合作起來,都加入 VISA 、 JCB 、 Master Card 還是中國銀聯等組織,並透過這個橋梁來協調消費者與特約商家之間的買賣關係,才能讓我用玉山信用卡在捷安特自行車店刷卡買一台 TCR1 ,而不會因為它的收單銀行是合庫就不准我刷卡。


然而我們的電信業者卻不是這樣想的。特約商店要收中華電信的用戶錢時,得去申請中華電信的小額付款服務,要收遠傳用戶的錢,得申請遠傳的,當然啦!你會說台灣就那麼三家大家的電信公司,都申傳了,特約商店就能收台灣人的錢。錯! 錯! 錯! 那佳樂福的手機用戶要抗議了,統一電信的用戶也會不爽。除了消費者的差別待遇外,這特約商店最困惱的還是每申請一家小額付款服務,就多一個帳務管理介面,及程式設計的工作,介面多了,管理成本自然提高,既然電信業者對特約商店不友善,那這個「小額付款」就成不了氣候。想想看如果信用卡特約商店全台灣就那麼 100 家,那消費者會去辦信用卡嗎? 辦了去那裡刷呀!


現實中,電信業者的合作早就不是問題,要不然中華電信用戶打電話給遠傳用戶時,電話會不通嗎! 不會呀! 它們早談好拆帳比例了,那為什麼不把這個合作模式放到金流上呢!特約商店只須申請一家電信業者的小額付款服務,消費者只要向他的電信業者申請開放小額付款功能,那須管他們是不是同一家電信業者呢!


甚至,跨國金流都可以一起搞定,現在隨便都可以打國際電話到美國吧!那我一樣可遵循此模式用讓美國客戶利用 Verizon 的小額付款功能,在我的網站上透過中華電信提供的小額付款網頁消費。由 Verizon 收款,然後再拆給中華電信。


跨電信公司收款,那信用違約怎麼辦! 首先信用違約的產生與同不同電信公司無關,是個人信用問題。在同一電信公司中,當消費者違約了,難道電信公司就可據此不撥款給特約商家嗎!如果一樣都要撥款,那在跨電信公司的案例中,消費者違約了,電信公司還是得撥款給收單的電信公司,而收單的電信公司一樣會撥給它的特約商家,這兩種情況中,吃虧都是消費者所屬的電信公司,然而它難辭其疚,是它的徵信能力不佳,給予不對的人,過高的信用,就像發卡銀行一樣,當持卡人擺爛了,吞下苦果的就是發卡銀行呀! 不會是收單銀行的問題。


總的來說,信用卡服務可廣泛使用,那電信小額付款沒理由不行,而我認為出問題的是電信公司對"小額付款服務"的用心程度不足。


與銀行經營信用卡業務相比,電信公司經營付款業務,只差在利息而已,銀行可對信用不佳的消費者收取較高的利率,但電信公司卻只能一視同仁,要計利息的話,也只能算存款利率。但這是沒辦法的事,只有銀行可以算利息。


不過最後這一點我不是很肯定,因為在一般人的借貸之間,是可以收取不同且比銀行存款利率還高的利息,那電信公司為什麼不能針對不同的人收取不同的利息呢?這我得再研究。


最後我期待國內的電信公司能早點合作,推出這種金融服務,一方面讓消費者多一種付款方式(通常此方式的最大收益者是學生,因為他們沒有信用卡),另一方面,則是電信服務在 NCC 的處處掣肘下,電信資費愈喊愈低,早點想點別的賺錢之術,要不然將來還有 VOIP 業者的競爭,我看會愈來愈難過。

2010年8月31日 星期二

應用 HTML5 及版本控制技術提昇 Web-based 營建資訊管理系統使用效率之研究


2010-7-20 參加 2010 營建管理研究會,並發表一篇論文「應用 HTML5 及版本控制技術提昇 Web-based 營建資訊管理系統使用效率之研究」,僥倖獲得評審青睞,拿到一張獎狀。

論文摘要:網路科技不斷創新,已經為各個領域帶來重大利益與產值提昇。然而,營建工業絕大部分的施工區,因屬於無法享受網路科技的郊外,這道先天上的屏障,使得營建業被詬病是『網路資訊科技應用』最落伍的產業,就算目前無線網路技術(如 3G 、 WiMAX 等)起步佈建,也很難改善大部份地區工程的網路使用率,而攸關品質管理所需之現地作業,無論如何增加營造廠總公司、監造單位、主辦機關內部辦公室的網路頻寬,也無法解決現今營建工區法利用網路科技的困境。目前的工地管理往往還是採用傳統紙張報表方式作業,造成品質管理效率低下及錯誤率高。

當前資訊管理應用系統的世界趨勢是朝向網頁應用程式靠攏,因為網頁應用程式可以跨平台,不需使用者作額外設定及安裝,介面也較傳統桌面應用系統具有親和力,所以過去以作業系統綁應用程式的情境不會發生在網頁應用程式中,網頁應用系統功能升級也不會困惱使用者,可以更方便地作到資料保全,網頁應用系統惟一的問題則是離開網路就無法發揮功用。

本研究利用最新 HTML5 標準技術結合軟體產業普遍應用之版本控制技術建置一個可在無網路環境下填寫的Total Web-based 營建資訊管理系統。藉由此『Total Web-based』技術,讓管理人員在無網路的工地環境中,仍可在電腦上作業,在回到有網路的辦公室環境中,可即刻進行資料同步整合至網頁伺服器並進行數據統合運算,避免重覆謄寫造成的錯誤,提高無紙化作業程度,降低人力成本。

簡報 PDF 下載全文 PDF 請來信索取

2010年8月30日 星期一

以 least square method 搜尋非線性方程式的係數值

針對非線性迴歸求解其係數值,我寫了一份文件,考慮了其中繁雜的數學,我是用 rst 格式撰寫,配合 latex 轉成 PDF 。因為要轉 html 時,那些數學式實在是太麻煩了,所以我想就只提供 PDF, rst 給各位下載。

本文件用途說明:

當我們有一堆觀測數據,想要找出一條方程式可以將自變數、應變數的關係明確表示時,可以使用 least square method 求解,例如我們有 10 個觀察值(1, 4), (4, 5), (1, 2), (4, 5), (6, 9), (1, 8), (4, 5), (3, 4), (5, 5), (6, 6) 等,而我們先猜測它們的關係是二次的,應該要符合 Y = a * X^2 + b * X + c 方程式,有了觀測值及預估方程式形式後,接下來就可以利用 least square method 計算出 a, b, c 三個係數,期使它們能讓計算出來的 Y 值與觀察值的誤差最小。

在求取 a, b, c 三個係數上,我介紹了 4 種方法: the steepest descent method, Newton's method, the Guass-Newton method 和 levenberg-marquardt method 。

PDF表文下載

rst全文下載

** 以下純供搜尋引擎使用,生人勿近 **

應用問題說明
--------------------------------------------------------------------------------

當我們有一堆觀測數據,想要找出一條方程式可以將自變數、應變數的關係明確表示時,
可以使用 least square method 求解,例如我們有 10 個觀察值
(1, 4), (4, 5), (1, 2), (4, 5), (6, 9),
(1, 8), (4, 5), (3, 4), (5, 5), (6, 6) 等,
而我們先猜測它們的關係是二次的,應該要符合 :math:`$Y = a \times X^2 + b \times X + c$` 方程式,
有了觀測值及預估方程式形式後,接下來就可以利用 least square method 計
算出 :math:`$a$`, :math:`$b$`, :math:`$c$` 三個係數。

評估非線性方程式的係數值
--------------------------------------------------------------------------------

假定一含有 :math:`$n$` 個未知係數的
方程式 :math:`$E(x_1, x_2, ..., x_k, p_1, p_2, ..., p_n)$` ,
在 :math:`$m$` 組觀測值
(:math:`$(y_1, x_{11}, ..., x_{1k})$`, :math:`$(y_2, x_{21}, ..., x_{2k})$`, ..., :math:`$(y_m, x_{m1}, ...x_{mk})$`) 下,
欲求出此 :math:`$n$` 個係數的值,
期使 :math:`$E(x_1, x_2, ..., x_k, p_1, p_2, ..., p_n)$` 與觀測值的誤差最小。

首先定義理論值與觀測值的誤差如式 :ref:`\ref{errors define}` 的 :math:`$f_i$` 。

.. raw:: latex

\begin{equation}\label{errors define}
f_i(p_1, p_2, ..., p_n) = y_i - E(X_i, p_1, p_2, ..., p_n), i \in 1, ..., m
\end{equation}

\begin{equation}\label{F function}
F(p_1, p_2, ..., p_n) = \sum_{i=0}^{m} (f_i(p_1, p_2, ..., p_n))^2, m \geq n
\end{equation}

將每一觀測值誤差平方並加總起來,可得到一目標函式 :math:`$F$` 其定義如式 :ref:`\ref{F function}` 。
當 :math:`$ F $` 函式的值為全域最小值或是區域最小值,
其特定 :math:`$ [p_1^*, p_2^*, ..., p_n^*] $` 組合,
也就是 :math:`$P^*$` ,即為該 :math:`$ E $` 函式的係數全域或區域最佳解。

所有的非線性最佳化都是用迭代方法計算的:
從一個起點 :math:`$P_0$` 開始搜尋,產生一系列的向量 :math:`$P_1, P_2, ..., $` ,
希望可以收斂至一個 :math:`$ P^{*} $` ,使得函式成為全域或區域
最佳解 :cite:`\cite{k_madsen_imm_2004}` 。

.. raw:: latex

\begin{equation}\label{Taylor expansion}
F(P_{k+1}) = F(P_k) + h^{\top} {F}'(P_k) + \frac {1}{2} h^{\top} {F}''(P_k) h + O(||h||^3)
\end{equation}

\begin{equation}
h = P_{k+1} - P_k
\end{equation}

如式 :ref:`\ref{Taylor expansion}` ,首先以 Taylor expansion 改寫 :math:`$ F $` 函式,
:math:`$O(||h||^3)$` 代表後面無窮盡的項目,
:math:`$ k $` 代表的是第幾次 iteration 。在每次 iteration 中,
我們先找出 :math:`$ h $` ,使得 :math:`$F(P_{k+1}) < F(P_k)$` 。
目前常見計算 :math:`$h$` 的逼近法有 The Steepest Descent method,
Newton's method, Guass-Newton method, The Levenberg-Marquardt method。

The Steepest Descent method
********************************************************************************

Steepest Descent method 將式 :ref:`\ref{Taylor expansion}` 改寫
為式 :ref:`\ref{Taylor expansion2}` ,忽略二階以後項目。

.. raw:: latex

\begin{equation}\label{Taylor expansion2}
F(P_{k}+\alpha h) \simeq F(P_k) + \alpha h^{\top} {F}'(P_k), \alpha > 0
\end{equation}

而原來的 h 改寫成一個純量 :math:`$\alpha$` 再乘以向量,這樣在 :math:`$P_{k+1}$` 接
近 :math:`$P^{*}$` 時, :math:`$\alpha$` 必定近似 0 ,
所以我們又可以得到式 :ref:`\ref{steepest descent}` ,

.. raw:: latex

\begin{equation}\label{steepest descent}
\lim_{\alpha \to 0} \frac{F(P) - F(P + \alpha h)}{\alpha \left \| h \right \|}
= - \frac{1}{\alpha \left \| h \right \|} h^{\top} {F}'(P)
= - \frac{h^{\top}}{\alpha \left \| h \right \|} \frac{{F}'(P)}{\left \| {F}'(P) \right \|} \left \| {F}'(P) \right \|
= - \left \| {F}'(P) \right \| cos \theta
\end{equation}

:math:`$\alpha \left \| h \right \|$` 為純量,所以我們
希望 :math:`$F(P)-F(P+\alpha h)$` 的值愈大愈好,
這樣 :math:`$ cos \theta $` 就必須為 -1 ,
而 :math:`$cos \theta$` 是 :math:`$h$` 與 :math:`${F}'(P)$` 的夾角,
所以如式 :ref:`\ref{sd}` ,最佳的 :math:`$h_{sd}$` 必為 :math:`$-{F}'(P)$` 。

.. raw:: latex

\begin{equation}\label{sd}
h_{sd} = - {F}'(P)
\end{equation}

如式 :ref:`\ref{sd}` ,陡降法中的 :math:`$h_{sd}$` 是以斜率值負值為移動方向。
而 :math:`$\alpha$` 的值,
我們需用 line search 求得,但效率通常會是個問題,所以也可以使用 binary search 方式來求得,
其概念是先取得一個 :math:`$\alpha_{min}$` 值讓 :math:`$F(P)-F(P+\alpha h)$` 大於 0 ,
再取得一個 :math:`$\alpha_{max}$` 值讓 :math:`$F(P)-F(P+\alpha h)$` 小於 0 ,
接下來以 :math:`$\frac{1}{2}(\alpha_{min} + \alpha_{max})$` 為
新的 :math:`$\alpha_{middle}$` 值,
去計算 :math:`$F(P)-F(P+\alpha h)$` 是大於 0 還是小於 0 。若大於 0 ,則
新的 :math:`$\alpha$` 值
應為 :math:`$\frac{1}{2}(\alpha_{middle} + \alpha_{max})$` ,若小於 0 ,則新
的 :math:`$\alpha$` 應為 :math:`$\frac{1}{2}(\alpha_{middle} + \alpha_{min})$` ,
如此迭代計算後,當 :math:`$\alpha$` 滿足預設條件或達迭代次數即可決定。

Newton's method
********************************************************************************

牛頓法則考慮以 :math:`$ F $` 函式的二階 Hessian 矩陣來計算 h 。
它將式 :ref:`\ref{Taylor expansion2}` 再取其一次微分得到
式 :ref:`\ref{Taylor expansion for newton}` ,若 :math:`$(P_k + \alpha h) = P^{*}$` ,
則 :math:`${F}'(P_k + \alpha h )$` 必等於 0 。

.. raw:: latex

\begin{equation}\label{Taylor expansion for newton}
{F}'(P_{k}+\alpha h) \simeq {F}'(P_k) + \alpha h^{\top} {F}''(P_k), \alpha > 0
\end{equation}

所以我們可以得到式 :ref:`\ref{newton}` ,而 :math:`$h_{n}$` 就等於
式 :ref:`\ref{newton2}` 定義。

.. raw:: latex

\begin{equation}\label{newton}
0 = {F}'(P_k) + \alpha h^{\top} {F}''(P_k)
\end{equation}

.. raw:: latex

\begin{equation}\label{newton2}
h_{n} = - \frac{{F}'(P)}{\alpha {F}''(P)}
\end{equation}

在搜尋效率上,牛頓法為二元收斂,而陡降法為線性收斂,所以牛頓法在接近最佳解時比較快,
而陡降法則是離最佳解較遠時比較快,且因 Hessian matrix 在計算上
不一定為 positive definite ,所以牛頓法往往會混合陡降法來實作。

The Guass-Newton method
********************************************************************************

Least squares problems 一般能用陡降法或是牛頓法求解,但要追求效率的話,我們應該作部份調整。
像是盡量使用二元收斂或是不需實作出 :math:`$F$` 函式 :cite:`\cite{k_madsen_imm_2004}` 。

我們將式 :ref:`\ref{Taylor expansion}` 的 :math:`$F$` Taylor expansion 改使用
在 :math:`$f$` 上,如式 :ref:`\ref{f Taylor expansion}` 。

.. raw:: latex

\begin{equation}\label{f Taylor expansion}
f(x + h) = f(x) + J(x) h + O(||h||^2)
\end{equation}

\begin{equation}
(J(x))_{ij} = \frac{\partial f_i}{\partial x_j}(x) = {f}'(x)
\end{equation}

式 :ref:`\ref{f Taylor expansion}` 可再整理為式 :ref:`\ref{f Taylor expansion2}` 。

.. raw:: latex

\begin{equation}\label{f Taylor expansion2}
f(x + h) \simeq l(h) \equiv f(x) + J(x) h
\end{equation}

\begin{equation}\label{new F Taylor expansion}
F(x + h) \simeq L(h) \equiv \frac{1}{2}l(h)^{\top}l(h)
= \frac{1}{2}f^{\top}f + h^{\top}J^{\top}f + \frac{1}{2}h^{\top}J^{\top}Jh
\end{equation}

再將式 :ref:`\ref{new F Taylor expansion}` 對 h 作一次微分得到式 :ref:`\ref{gn function}` 。

.. raw:: latex

\begin{equation}\label{gn function}
{L}'(h) = J^{\top}f + J^{\top}Jh
\end{equation}

因為在最佳解時, :math:`${L}'(h)$` 等於 0 ,所以我們可以得到 :math:`$h_{gn}$` 如
式 :ref:`\ref{guass-newton}` 。

.. raw:: latex

\begin{equation}\label{guass-newton}
h_{gn} = - \frac{J^{\top}f}{J^{\top}J}
\end{equation}


The Levenberg–Marquardt method
********************************************************************************

The Newton's method may not be defined beacause of the singularity of
:math:`$ {F}''(P_k) $` at
a given point :math:`$ P_k $` , or the search direction :math:`$ h_n $`
may not be a descent direction
:cite:`\cite{bazaraa_nonlinear_2006}` .
The algorithm used the gradient methods their ability to converge from an
initial guess which may be outside
the region of convergence of other methods. The algorithm uses the Taylor
series method the ability to close
in on the converged values rapidly after the vicinity of the converged
values has been
reached. Thus, The method combines the best features of its predecessors
while avoiding their most serious
limitations. :cite:`\cite{marquardt_algorithm_1963}` .

Levenberg-Marquardt 方法乃加入一 damping parameter :math:`$ \mu $` 。

.. raw:: latex

\begin{equation}
h_{lm} = - \frac{J^{\top} f(P)}{J^{\top} J + \mu I}, J = {f}'(P), I = Identity\ Matrix
\end{equation}

此自定參數的效益在於,For all :math:`$ \mu > 0 $` the coefficient matrix is positive
definite,
and this ensures that :math:`$h_{lm}$` is a descent direction. For large
values of :math:`$ \mu $` we get

.. raw:: latex

\begin{equation}
h_{lm} \simeq - \frac{1}{\mu}{F}'(P)
\end{equation}

If :math:`$ \mu $` is very small, then :math:`$ h_{lm} \simeq h_{gn} $` ,
which is a good step in the
final stages of the iteration, when P is close to :math:`$ P^{*} $` .
If :math:`$ F(P^{*})=0 $` (or very small),
then we can get (almost) quadratic final convergence :cite:`\cite{k_madsen_imm_2004}` .

:math:`$\mu$` 值在每個 iteration 中,皆不同,而 :math:`$ \mu_{k} $` 的選擇,
主要有兩種方法,
一是看 :math:`$J(P_{k})^{\top} J(P_{k}) $` 中,
對角線元素中最大值再乘以 :math:`$ \gamma $` ,
一般來說, :math:`$\gamma$` 的值介於 :math:`$ 10^{-6} \sim 1 $` 之間。
或是也可以用 :math:`$ F(P_{k}) - F(P_{k-1}) $` 的值 :math:`$s_{k}$` 來判斷,
當 :math:`$ s_k \geq 0 $` 時
, :math:`$ \mu_k $` 增加 10 倍,
當 :math:`$ s_k \le 0 $` 時, :math:`$ \mu_k $` 減少 10 倍,
:math:`$ \mu_0 $` 的初始值則是設為 0.001 。

小結
--------------------------------------------------------------------------------

理論上,非線性最佳化是很難求得全域最佳解的,就算你運氣真的很好,
瞎貓怕上死耗子,讓你遇到全域最佳解,但你還是沒有辦法去驗證它的確是全域最佳解。
只有在某些特殊題型下,你才知道所求出的解是全域最佳解,最簡單的例子就一元二次方程式,
當它是凹向上時,有全域最小值,當它是凸向上時,有全域最大值。

所以,以上介紹的 4 種找尋 h 的方法,都只是一種有系統的找尋技巧,這些方法經過數學推導,
可算是比較有效率罷了,不代表只有這些方法可以用在 least square problem 上。
你也可以任意混合這 4 種方法,如在第 1 ~ 10 次迭代時,使用陡降法,在第 11 ~ 20 次時,
使用 Levenberg-Marquardt 方法,在第 20 次以後一律使用高斯-牛頓法,
這種方法是沒有對錯的,只有解題時間的快與慢而已,而這快與慢就又牽扯到起始值的挑選及非線性函式的特性。
這次這樣用比較快,不表示這對其他問題的解題速度就會比較快。

References
[1] M. S. Bazaraa, Hanif D. Sherali, and C. M. Shetty. Nonlinear programming. John Wiley
and Sons, 2006.
[2] K. Madsen, H. B. Nielsen, O. Tingleff, and Mathematical Modelling. IMM METHODS
FOR NON-LINEAR LEAST SQUARES PROBLEMS, 2004.
[3] Donald W. Marquardt. An algorithm for Least-Squares estimation of nonlinear parameters.
Journal of the Society for Industrial and Applied Mathematics, 11(2):431–441, June 1963.
ArticleType: primary_article / Full publication date: Jun., 1963 / Copyright 1963 Society
for Industrial and Applied Mathematics.

2010年8月28日 星期六

慢跑時如何避免腳指瘀青



在體能可以慢跑 3 公里後,我時常會跑到食指指甲瘀青、變形。而這次則在跑了 12 公里後,造成我的左腳指甲剝離流血,上圖是右腳指甲的狀況,我想左腳相片就不給各位看了,會讓你們吃不下飯的。

本來,我一直認為是慢跑鞋的問題,因為它的腳趾空間不夠多,在跑步時指甲會一直摩擦到鞋頭。現在的慢跑鞋是 Brooks Trance 6 ,非常喜歡這一雙鞋,嚴格說來,應該是這一雙鞋讓我愛上慢跑的。它是我第一雙真正的慢跑鞋,過去我都是穿迪亞多那的休閒鞋來慢跑的,當我第一次穿著 Trance 6 跑步時,我感覺到「工欲善其事,必先利其器」的意義。它的避震效果十分好,讓我的腳底板沒那麼痛,增大了我的跨步步幅,它的好,使得我又買一雙。

不過,今天我終於下定決心要換一雙慢跑鞋了,畢竟指甲剝落不是小事。首先我 google 「如何挑選不會讓腳指瘀青的慢跑鞋」,才發現,這問題不在鞋子,而是出在我的鞋帶綁法。

之前我為了登山,有買了一雙登山鞋,老闆有跟我說明為了在下坡時,不要讓腳指甲往前衝到鞋頭,所以要在高統部份將鞋帶綁緊,而鞋頭部份的鞋帶可以不用這麼緊。這個方法我也延用到慢跑鞋上,習慣上,我都是前頭比較鬆、後頭比較緊,然而這畢竟是慢跑鞋,跑在下坡時的衝擊力比登山下坡的力道還大,跑久了前頭的線會慢慢往後頭鬆去,於是我的腳掌就開始自由地在鞋內移動了,指甲也就瘀青了。

所以,只要綁緊鞋帶,指甲就不會瘀青了,不用換鞋子。

2010年8月24日 星期二

從埔里騎自行車到台中

周日下午臨時起意從埔里騎到台中,去回總路程約 106 公里。 1:30 出發,約在 2:50 到霧峰的一家 7-11 ,位置在立法院中部辦公室(原省議會)到霧峰農工之間,在 3:30 到達中興大學。

因為出發時,天空有點飄雨,也就沒帶著 GPS 紀錄器及手機,幸好到了研究室,有學弟帶了數位相機,把我這難得的疲態拍下來。從埔里到台中這段路還滿好騎的,畢竟下坡比較多,只有在烏溪橋遇到了大雨,比較辛苦外,路程還算輕鬆。


View 埔里 <=> 台中 by 自行車 in a larger map

下面是折返點的相片,我在研究室待了近 1 個小時,主要是等我的襪子乾,學弟建議我使用粉紫塑膠袋來作鞋子雨衣。套上後,感覺是可以防水,但我沒有勇氣這樣騎在路上。

還好回途中,沒有再下雨了。我在 4:30 出發, 5:30 在草屯療養院附近的 7-11 用晚餐, 6:00 繼續上路。最後,到家時間是晚上 8 點了。



總共騎乘時間是 5 個小時,考量道路情況,下次應該在上午就得出發到台中,才不會晚上回埔里時,沒有路燈,而自行車照明設備又不像汔車車燈一樣又亮又遠,騎快的話,有點可怕。

2010年8月22日 星期日

IBM R60e 上的 Ubuntu 10.04 透過 HTC wildfire 上網

我的 R60e 在裝了 Ubuntu 8.04 或是 Ubuntu 9.04 之後,無線網路的運作一直很奇怪,在開啟無線網卡後,訊號十分不穩定,用 ping 來測試,往往時間都會超過 500ms 。一直到現在的 Ubuntu 10.04 都是一樣的,無線網路能連但是不能用。嘗試了很多方法,都沒效果,再加上我家有一段時間是沒有 AP 的,要到學校研究室才會遇到這個問題,而往往我都是用"有線網路"來解決這個無線網路的效能問題,所以也就沒有認真地想把這個問題解決。

一直到我買了一支 HTC wildfire 後,因為對 3G 無線上網的需求實在不高,我大部份時間都待在家,所以就弄了台 AP 擺在家裡。 wildfire 使用無線網路當然是非常順暢地,要不然宏達電不會躍升為全球第八大的手機商。既然 wildfire 上網很順,我想不如就把它的網路分享給 R60e 用吧!

為此,我找了個周日,打算好好地研究一番。想說這種分享方法,原則上應該會在 Ubuntu 上生成一種 usb 裝置,然後我再找出它設定方式就解決了。

結果,我只是用 usb 線把 wildfire 跟 R60e 接起來後,在 wildfire 上選擇「網際網路分享」,它就能用。

它就能用了耶!

2010年7月4日 星期日

「郵遞區號」: 3+2 = 5 碼郵遞區號查詢離線網頁程式(已放上 Google Code)

當我開始開發資訊系統時,就一直認為地址處理是一般資訊系統中最基本且常見的功能。不過,目前使用過的資訊系統,了不起就是把 3 碼郵遞區號作完而已,很少看到網頁系統有作到無碼 5 碼的地址處理功能(當然啦,郵局自家的確有提供 5 碼查詢功能,但是不好用)。所以我想郵局苦心推動大家使用 5 碼,除了能讓寄信速度加快外,未來在許多 GIS 應用愈來愈普及下,我相信大家都會利用 5 碼郵遞區號來作加值應用的。

所以為了搔自己的癢,我寫了 http://zipcode.ho600.com/ 網站,除了可作網上查詢 5 碼功能外,也把 HTML5 的 Offline 作進去,讓查詢功能可在無網路的本機端處理。另外也提供其他人嵌入「地址查詢表單」的方法。詳細說明請見「嵌入方法」,本專案我也放到 Google Code 開發,授權條款是 NEW BSD License ,希望能聽到您們的聲音。

這個程式是跑在 GAE 上的,不過可以很容易地移稙到其他框架中,因為這個功能,我主要是用 javascript 開發的。 GAE 不過提供檔案放置的功能。

注意,第一次瀏覽會比較慢,因為要把約 2MB 的郵遞區號資訊下載下來。不過,如果你用的是支援 html5 offline 功能的瀏覽器,像 Firefox3.6+, chrome4+, safari4+ 的話,之後就不用再下載了。

範例:

2010年6月25日 星期五

果真升息!

之前,我寫了二篇文章: 「政治文」:政府真的在打壓房市嗎?指數化投資第五階段檢視 時,我就在猜央行今年應該會升息,所以我才把部份「其他的類股(統一超、中華電、英業達…)」轉換到「金融類股」上,買進標的主要是銀行、壽險、產險類股上。

如今看來,我是猜對了,但又如何呢? 我從「其他的類股」轉換過來的金融股,到現在的報酬率還是低於未轉換前,因為歐債風暴的影響太大了。

預測真的是件難事,單一事件或許猜(分析)得到,但股市是多個單一事件相互影響的區域,預測不是容易事。

2010年6月12日 星期六

「政治文」: 全民與國光石化搶地!

前言:非常怕有人看不懂我的文章,所以我先把「已認購 10 股」這個事實講在前面。

昨天看了公視有話好說的節目,它提到環保團體欲利用全民信託的方式認購國光石化打算開發的濕地。

這塊濕地的地主是國有財產局,目前傳說(真的是傳說)它打算以 1 平方公尺 100 元的價格賣給國光石化,當然要進入售地階段前,還得待環評通過。不過,以大家不相信政府、不相信環評的心態,環保團體早已提出另一套措施: 「與國光石化搶地」,來維護他們的述求。

這個方法,當然不是台灣人首創的,通常台灣人沒什麼創意,也就是喜歡走別人走過的路,像發展石化業就是一個非常好的例子。但這個方法,的的確確是一個好方法,過去,我們常爭執環保與經濟孰輕孰重,通常沒有結論,因為經濟可用利潤、就業率等指標評估,但環保不容易。你說在海邊看夕陽時不會看到一堆魚屍,這風景值多少錢,又能等同多少就業機會? 嘿嘿,沒幾個環保團體的人說得出來,他們通常只會說:「我能帶著我的小孩親眼見到青山綠水,這就是無價之寶呀!」

因為產業無法換算成幾個美好夕陽,而健康、美麗的自然又無法兌換成幾個工作機會,所以環保團體與企業們總是在雞同鴨講,但結果只能有一方勝,所以輸的一方,總會質疑政府的行政能力,用語通常都是沒有遠見,為了短期利益犧牲長期利益。很矛盾吧! 怎麼兩方都把自己的論點講成長期利益,而對手都是短期利益,我想,這就雙方最大的共通點。

所以利用這個全民信託制度,它帶出了你心目中的濕地價錢,只要全民所認同的價錢高於國光石化欲支出的成本,國有財產局沒理由要把地賣給國光石化,如果它還是賣給國光石化,不但可能會吃上圖利他人的官司,也會面臨選票的制裁。

但這個「全民來認股 守護白海豚 | 環境信託」制度有幾個缺點,而我不能告訴大家,因為我被老婆下了禁口令,不准說,她怕我壞了環保團體的好事,雖然,我認為「我提出的修改制度」是比較好的。所以,跟大家預告一下,明年(2011)我會寫一篇研討會論文,如果被接受了,到時再跟大家分享。

最後我要說的是,雖然我認購了 10 股,但理由並不是我希望白海豚會繼續活下去,事實上,我認為整個西海岸也沒多乾淨,少了國光石化,不見得就能讓牠們族群存活下來,所以,如果把認購目標放在「買了濕地,白海豚數量就會更多或是不會減少」,然最後濕地是給全民買了,但白海豚還是死光了,怎麼辦?


雖然我覺得這個制度有些缺點,但暇不掩瑜,也鼓勵大家如果你支持生物多樣性、喜歡海邊的夕陽、痛恨石化業,那麼還是應該去認個股,表達自己的意見。

2010年6月2日 星期三

「政治文」:關於富士康自殺事件,我是錯的

日前,我發了「富士康的工作環境真的容易讓人跳樓嗎?」一文,結論是富士康的自殺率,還不夠"傑出",無須大驚小怪。這個結論,我現在想來是錯的,錯的是「無須大驚小怪」,而不是「還不夠傑出」。

為什麼已經自殺了 12 個人還不算傑出呢? 因為
  1. 以自殺比率來看,目前每 10 萬人死了 3 人,這還不算高(或許到年底會是 6 人)
  2. 這是自殺,不是他殺,如果是他殺,死 1 個都要追根究底,但自殺畢竟是個人意志選擇
  3. 如果富士康真的不好,請轉換公司跑道,整個珠江三角洲目前缺工 200 萬
  4. 與川震相比,死了 3 萬多人,其中 5 千多個還是學生,都不見官員究責,這民間公司努力保護了勞工生理健康(至少,我還沒聽到有職災的),有必要用放大鏡檢查嗎?
  5. 對台灣人而言,台塑仁武廠及台塑集團的良心更重要,台灣媒體應該要更關注這個事件
人的大腦是個簡單的構造物,所以在處理大量資訊時,必須有所捨棄,否則一旦資訊超載,輕則決策錯誤,重則腦筋秀逗。像是如果我們將對一個人死亡的重視程度,等比例放大至 3 萬倍,那我們必然會發瘋,所以史達林也說:「死一個人是悲劇,死一百萬個人則祇是個數字!」 對大數字而已,我們的人腦會比較不重視。

有數學家也發現,我們天生就無法處理大數字,他舉了個例子,在一個工程公司中,與會專家花了 30 分鐘談論 20 億美金的核能發電廠興建案,但卻花了 4 個小時,來討論員工停車場是否要加蓋遮雨棚,而且還沒有結論。就重要程度而言,員工停車場根本就不值 5 秒來討論,但人們卻花了 4 個小時以上,為什麼? 因為員工停車場是每個人都用得到、看得到的,所以大家都發表意見,但核電廠,天呀! 有多少人會走進核電廠,有多少人懂得核電廠的運作。

這 12 個確確實實的生命在職場中消逝了,我們體會得到這種痛苦,至少我們大部份的人在面臨工作/學業/感情壓力時,都曾想過不如歸去兮(這個不如歸去指得是到蘇州賣鴉蛋),所以我們可以同理他們的痛苦,但對全世界人類影響更大的碳排放或是汙染排放就不一樣了,畢竟我們很多人家裡附近的河川看起來還像礦泉水(只不過是水在瓶子外),而不是彩色顏料,對我們來說,你能體會喝水得膧瘤特獎的感覺嗎? 不容易呀! 台灣的自來水事業作得不錯,少有人是喝自然的水。

所以我以重要程度來看,我不認為對台灣人而言,該給鴻海高於台塑的關注,也不贊同對中國人來說,關注富士康該多於川震。

不過,事情雖小,但還是應該「大驚小怪」。如果中國人民現在不敢再有第二個「譚作人」,那拿富士康開刀就是一個好開頭。

為什麼中國這個經濟大國,到現在還不是民主國家呢? 因為人民無權,政府有權,權力的分佈就影響了金錢的分配,目前的中國貧富差距大,且特色是有權的人通常有錢,如果,小老百姓終其一生只能在代工廠裡工作賺微薄薪資,他那能體會得了民主素養。

想想,我們台灣,過去物資貧乏,還需要美援時,就是白色恐佈時期,等到後來,台灣錢淹腳目之後,人民開始思考了,要的不止是金錢,而是健康生活、美麗環境、正義的時候,我們就民主了。

或許,今天批鬥富士康或是其他資本家(最近本田也在吵了),能夠讓工人們生活品質往上調整,這是件好事,可以等鬥完資本家,無產階級納蓄了更多資源,再來對「無視人民生活」的政府開刀,這成功率會高一點。

加油囉! 中國,我期待你們變成民主國家。

2010年5月28日 星期五

如何解決 TortoiseHG on Windows 上中文檔名的問題

因為 Windows 在紀錄檔案名稱時,是用 UTF-16 ,而不是 UTF-8 作紀錄,所以如果在 Windows 中,加入一個「中文檔名(嚴格來說,是非 ascii 編碼的名稱)」的檔案,那麼這個檔案到了 Mac OS X, Linux 平台時,就無法使用了。

要解決這個問題,只要 Windows 使用者用 fixutf8 extension 先處理檔名即可。下載程式碼後,只要到 hgrc.d/Mercurial.rc 檔中,加入

[extensions]
fixutf8 = C:/fix-utf8/fixutf8.py

但使用這個外掛(16 (baf283ab9f92)版)會導致 TortoiseHG 無法作 commit 的動作,這 commit 問題,我找了很久,但實在沒辦法解決,只知道 TortoiseHG 將 commit message 以 cp950 送出,但 fixutf8 卻要求 message 要以 utf8 進入,但那裡的程式要修改,我就 de 不到了。

目前我只能回到 cmd.exe 底下,用 hg ci 來作提交動作。

而且,在使用 fixutf8 下,有可能會導致 merge 功能錯亂,這時候,就只得用 Linux/Mac OS X 來解決 merge 問題。

Install Python2.5 on Ubuntu 10.04 i386 for Google App Engine

Ubuntu 10.04 已經預設不包 Python2.5 了,對寫 GAE 的人來說,這有點麻煩,到目前為止 GAE 並未正式地支援 2.6 ,所以最好認命地在 Ubuntu 10.04 中創建一個 Python2.5 的環境。

裝 2.5 的目的是為了開發 GAE 程式,所以我們需要額外下載這些程式碼:
  1. Python2.5
  2. PIL
  3. python-ipaddr
  4. python-ssl
# 利用 apt-get 安裝相關函式庫,除 libssl-dev 外,其他的套件是給 PIL 用的
$ sudo apt-get install liblcms1-dev zlib1g-dev libfreetype6-dev libjpeg62-dev libsqlite3-dev libssl-dev

# 安裝 Python2.5.5 至 /usr/local
$ tar -jxf Python-2.5.5.tar.bz2
$ cd Python-2.5.5
$ ./configure -with-zlib-library=/usr/lib --with-zlib-include=/usr/include --with-tk --with-tcl-library=/usr/lib --with-tcl-include=/usr/include --with-tk-library=/usr/lib --with-tk-include=/usr/include
$ make
$ sudo make install

# 安裝 GAE 相依模組 ipaddr
$ tar -zxf ipaddr-2.1.1.tar.gz
$ cd ipaddr-2.1.1/
$ sudo /usr/local/bin/python2.5 setup.py install

# 安裝 GAE 相依模組 python-ssl
$ tar -zxf python-ssl-1.15.tgz
$ cd python-ssl-1.15/
$ sudo /usr/local/bin/python2.5 setup.py install

#安裝 PIL
$ tar -zxf Imaging-1.1.7.tar.gz
$ cd Imaging-1.1.7
# 修改 setup.py 中的使用函式庫位置
# LCMS_ROOT = '/usr/lib'
# TCL_ROOT = '/usr/lib'
# JPEG_ROOT = "/usr/lib"
# ZLIB_ROOT = "/lib"
# TIFF_ROOT = '/usr/lib'
# FREETYPE_ROOT = "/lib"

#檢查模組是否可使用
$ /usr/local/bin/python2.5 setup.py build_ext -i
#測試模組
$ /usr/local/bin/python2.5 selftest.py
 PIL 1.1.7 TEST SUMMARY
 --------------------------------------------------------------------
 Python modules loaded from ./PIL
 Binary modules loaded from ./PIL
 --------------------------------------------------------------------
 --- PIL CORE support ok
 --- TKINTER support ok
 *** JPEG support not installed
 *** ZLIB (PNG/ZIP) support not installed
 --- FREETYPE2 support ok
 --- LITTLECMS support ok
 --------------------------------------------------------------------

雖然有過 build_ext ,但到了 selftest.py 時,我總是會得到 JPEG 及 ZLIB 兩種函式庫不支援的情形,但因為我的網頁程式不太用到影像處理的功能,所以我直接強制安裝 pil 。

$ sudo /usr/local/bin/python2.5 setup.py install

最後,再把 dev_appserver.py, appcfg.py 中的 #!/usr/bin/env python 改成 #!/usr/bin/env python2.5 即可(也不是必須的,只要你知道執行 GAE server 時是用 python2.5 就夠了)。

完成後就可以在 Ubuntu 10.04+ 中開發 GAE 程式了。

2010年5月25日 星期二

指數化投資第五階段檢視

今天是 2010/5/25 ,大盤大跌了 236 點,跌幅約 3.18% ,而我的台股報酬率也只剩下 5% 多了。與第四階段相比,我的持股成本提昇到了 6750 左右。我在 7、8000 點都有繼續投入。理由是 Vanguard 基金不賣給外國投資人了,所以我只好把這筆錢又轉回台股。

其實,現在跌到 7000 點了,我也沒什麼好擔心的(*1),只是在這一段時間,我又作錯了幾件事。實在克制不了買賣的慾望,所以頻頻將其他的類股換成金融保險類股,結果以事後來看,我多賠了 13% 的換股金額。多賠這 13% ,以目前來看,雖然是錯,但未來可不一定,畢竟這是交易損失,在一個具有市場風險的環境,有交易損失,就可能有交易收益。

但重點是,它再次提醒我,自以為了解市場走向,可未必呀!

就像現在很多人講說,我們 DRAM 技術打不贏南韓,到了明年南韓產能開出來後,這些 DRAM 廠鐵倒的。沒錯,以科技規格來看,我們的確打不贏,但又有人料得到北韓會無聊到去挑釁南韓,如果兩國打了起來,南韓能賣 DRAM 嗎? 當然,我不是在幫台灣 DRAM 廠講話,如果可以的話,倒一倒對台灣來說,或許也是件好事,我只想強調:「世事難料」。

今天寫這篇文章,只是想給自己一個警剔,既然用了指數化投資,就別再去猜測那些股票股價是高點,那些是低點了。買了就長期持有,等退休再賣。

相關閱讀:

簡單指數化投資
指數化投資第一階段檢視
指數化投資第二階段檢視
指數化投資第三階段檢視
指數化投資第四階段檢視

註1:以前我一次融資買進 10 張巨大(9921)的時候,差價賠 2 萬塊,我睡不著覺,賺 2 萬元,我一樣還是睡不著覺。用指數化投資,生活品質明顯改善了。

用隨身碟安裝 Linux

我的電腦有些是沒有光碟機的,事實上,光碟機的使用機率是愈來愈低,我曾有一台 Thinkpad 大半年沒開過光碟機,結果要用時,它卻發生讀片錯誤。

所以這次重新安裝 Ubuntu 10.04 時,我是採用隨身碟安裝的方式,而也因為 Open Source 工具愈來愈多、愈來愈方便下,我只使用了 usb-creator 程式,就將 ubuntu-10.04-alternate-amd64.iso 燒到 4G 隨身碟了,方法很簡單,先安裝 usb-creator(# apt-get install usb-creator) ,然後在命令列裡執行 usb-creator-gtk 。選擇要安裝的 iso 檔,並抹除隨身碟內的資料,就可以「製作開機磁碟」了。


接下來,就是重新安裝機器了,首先要切換 BIOS 的開機選項,在技嘉的 BIOS 上,我只選了 usb-hdd 就可從隨身碟開機,然而華碩的 BIOS ,除了要將 boot 選項切到 remoted-device 外,還要調整 usb storage 的 Forced FDD 類型。調整後,就如往常一樣重灌 Ubuntu 了。



"ThinkPad USB Keyboard with TrackPoint" 在 Ubuntu 10.04 的中鍵滾動設定方式

參考了我與小黑(ThinkPad X200s)之小紅點文章後,可輕鬆地設定了我的 R60e 中鍵滾動功能,然而一直無法在我的桌上型電腦上以 gpointing-device-settings 方法或是用 xinput 指令設定成功。因為設備名稱不同所以 "TPPS/2 IBM TrackPoint" 要改成 "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" ,但它就是不成功,指令如下:

# 啟用中鍵模擬功能
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Middle Button Emulation" 8 1
# 啟用滾輪模擬功能
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Wheel Emulation" 8 1
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Wheel Emulation Axes" 8 6 7 4 5
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Emulation Button" 8 2

# 靈敏度
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Middle Button Timeout" 8 50
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Wheel Emulation Inertia" 8 10
xinput set-int-prop "Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint" "Evdev Wheel Emulation Timeout" 8 200


還好該文章有詳細參考文件 How to configure the TrackPoint ,從該文中,得知還有別種設定方法,所以我在 /usr/lib/X11/xorg.conf.d/20-thinkpad.conf 中,置入文句如下:
Section "InputClass"
 Identifier "Trackpoint Wheel Emulation"
 MatchProduct "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device"
 MatchDevicePath "/dev/input/event*"
 Option  "EmulateWheel"  "true"
 Option  "EmulateWheelButton" "2"
 Option  "Emulate3Buttons" "false"
 Option  "XAxisMapping"  "6 7"
 Option  "YAxisMapping"  "4 5"
EndSection

然後重開機,就搞定了。

2010年5月22日 星期六

Mercurial 在開發「模組或函式庫」的應用策略

前幾天,學弟問了我一個問題,讓我發現原來我們對 branch 的概念還不是很熟悉。事實上,這是件好事,從問問題中,才能發現原來事情不是我們所想像的,早發現早好。最痛苦的是在弄亂運作中的程式碼後才驚醒。

在說明學弟的問題前,要先來前情提要。我們研究室到目前為止至少開發了 4 套系統,用「至少」是因為這 4 套比較大型,除 django 程式碼外,自己所寫的 .py 及 .js 近 4 萬行,且不含樣版。而這 4 套系統當然有部份的程式碼是一樣的,我想程式碼寫得多的設計師一定也是這麼想,常用的 bug 紀錄器、郵政地址選擇、政府機關資料等東西,一定會弄個模組另外放,到時候開發新系統時,整個模組(資料夾)拿進來就行了。

但是一個模組該如何與主系統共存開發呢? 尤其是模組與主系統程式碼都還在變動階段。
使用 Mercurial 讓這件事,變得非常輕鬆,假設我們有 A, B, C, D 等 4 個系統,而有一個 common 模組,這時,我們應該在 common 模組開 4 個 branches ,分別是
  • 'release for A
  • ''releasr for B
  • ''release for C'
  • 'release for D'
假設這 4 個 branches 都是在 changeset:300 時 branch 出去的。然後,過了一段時間,因為 C 系統的需求,我們修改了 common 模組,它的 changeset 來到了 340 ,且我們也將這 300:340 的修改 merge 到 'release for C' 了,這樣對其他 3 個系統有沒有影響? 當然沒有。

因為在伺服器運作的儲存庫上,以 A 系統為例,一定是把 common 模組切到 'release for A' 了(用 hg update -C 'release for A' 這個指令),就算某天將 A 系統上的 common 更新至 changeset:340 ,但這也只有在 common/.hg 的資料是 340 的, common/* 的資料一定還是停在 'release for A' 這個 branch 上,而 'release for A' 的最新版仍舊是 300 。

所以那天如果負責 A 系統的程設師有空了,它想使用 common 模組的最新功能時,他只要在 'release for A' 的 branch 中, merge tip 版本,並處理 A 系統這邊應對新 common 模組的修改,就可無痛昇級。

利用 branch 觀念,我們可以輕鬆整合多種函式庫、模組之間的版本整合問題,那麼學弟的問題是什麼呢?
如下圖:



學弟很貼心地在 branch 後,再為 " default 分枝" 作一個 manual commit ,以維持兩個 heads ,這樣會讓其他人在使用時,不致於出現 +1 head 的訊息(但這也只是在某些情況下)。

結果我後來又把 " default 分枝" 的成果 merge 到 'Release for XXX' ,這讓儲存庫上只剩下 1 個 head ,這個結果讓學弟有點困惑,他以為剩下一個 head ,那其他人在寫程式時,會不小心 commit 錯 branch 。
我說不會,因為他們原本手頭上的儲存庫就指定好是用那一種 branch ,所以在 hg pull -u 後,程式碼會變成該 branch 的最新版,在改完程式後,他們 commit 的成果也寫入相同的 branch ,而不會在 " default 分枝" 上, commit 到 'Release for XXX' 。

這惟一的小問題是其他學弟要把 commit 後的成果 push 到 HG Server 時,會出現提醒 +1 head 的訊息,但這是沒辦法避免的,用 hg push -f 就解決,因為既然 branch 了,就一定會有 multi heads 的情形。

2010年5月20日 星期四

使用 eCryptfs ,記得一定要備份下「加密錀匙」

使用 eCryptfs 加密目錄時,通常會隨機生成一把 32 字元的加密錀匙,來作目錄作加密,然後再使用使用者密碼來對「加密錀匙」作加密。所以如果因故弄丟了「加密錀匙」,但還記得「使用者密碼」,也是沒有用的。

所以記得,在使用此加密功能前,一定一定一定要先備份「加密錀匙」。

備份方式如下:

# cd /home/.ecryptfs/YOUR_ACCOUNT/.ecryptfs
or
# cd ~/.ecryptfs

# ls
auto-mount auto-umount Private.mnt Private.sig wrapped-passphrase

這個 wrapped-passphrase 就是「加密錀匙」被「使用者密碼」加密後的檔案。

# ecryptfs-unwrap-passphrase wrapped-passphrase
Passphrase: '''輸入使用者密碼'''
b19becdz81z8ba06aa4z35e6z1c0227f

這個 b19becdz81z8ba06aa4z35e6z1c0227f 就是「加密錀匙」,趕快把它記錄到其他檔案去。

使用公私錀登入 Linux 後,如何掛載被加密的目錄?

登入後,因為還沒有輸入過系統密碼,所以無法掛載加密目錄,這時候只會在家目錄看到

Access-Your-Private-Data.desktop README.txt

兩個檔案,其中 README.txt 的內容如下:

# cat README.txt
THIS DIRECTORY HAS BEEN UNMOUNTED TO PROTECT YOUR DATA.

From the graphical desktop, click on:
"Access Your Private Data"

or

From the command line, run:
ecryptfs-mount-private

也就是要你執行 ecryptfs-mount-private ,執行後,它會問你系統密碼,鍵入後,加密目錄就被掛載進來,只是你要重新再進入一次家目錄,才會看到還原的內容。

快速進入家目錄指令:

# cd

升級到 Ubuntu 10.04 後,發生無法使用公私錀登入問題

Ubuntu 10.04 對我而言,最大的優點是內建了家目錄加密的功能。然而在實際使用上,才發現這與我預期的有一段落差,只是這個落差是當初我沒想清楚所造成的。

原本,我以為用了家目錄加密後,一般使用者可以不怕檔案被 root 看光光,但
這是錯的,創建帳號的管理員一開始就可以備份「加密錀匙」,所以就算一般使用者登入後更換密碼,也不會重新製作一把「加密錀匙」,所以更換密碼的動作,只把「加密錀匙」用另一組密碼保存起來,帳號管理員一樣可用之前所保存的「加密錀匙」還原檔案。除非,使用者更換「加密錀匙」(但很麻煩,也需要系統權限),或是一開始,就不要帳號管理員設定「家目錄加密」功能,而是使用者自己作「目錄加密」的動作

原本,我以為不打「登入密碼」,就看不到家目錄,但
這是錯的,只要該使用者登入後有掛載該目錄,其他人就可以透過權限驗證方式來觀看,因為該使用者已將目錄解密了。

原本,我以為一般人可以在自己的家目錄執行網頁程式而不被其他人知道他搞了什麼網站,只要 apache 設定檔有設定 Include /home/xxx/self.conf 之類的語法即可,但
這是錯的。家目錄既然已加密,那 apache daemon 就沒辦法進到網頁程式的目錄,又如何執行它們。

嚴格的說,這個家目錄加密功能,只能用在其他人無法使用光碟開機或是重灌系統來獲取硬碟資料,就只是這樣而已,而這功能,我的 IBM Thinkpad 用硬碟密碼就作到了,我白玩了。但這一切都是我自己先想錯了呀!

而且在使用此功能還發生一件非常烏龍的鳥事,就是無法使用公私錀登入,因為公錀資料夾是放在家目錄的,既然它被加密了,那 ssh daemon 又如何拿到公錀來驗證呢! 解法很簡單,在 /etc/ssh/sshd_config 中,設定

AuthorizedKeysFile /home/ssh-keys/%u/authorized_keys2

即可,也就是將使用者公錀放到沒被加密的資料夾。解法很簡單,但我卻搞了兩天,因為我在 sshd_config 中寫的是

AuthorizedKeysFile /home/ssh-keys/%u/authorized_keys

,但在資料夾中放的是
authorized_keys2 。一個 2 ,我看了 2 天,才發現不一樣。這就是人生呀!

2010年5月15日 星期六

令我驚訝的 2010 日月潭鐵人三項比賽

根本就沒有這個比賽。

年初生了一場病,最近才比較好,本來想想報個日月潭半鐵就成了,結果今天上網查閱相關資料時,才發現今年根本沒辦。所以目標移轉到「台東之美」,也因為還有 5 個月,所以報個 51.5 km 應該是沒問題。

2010年5月14日 星期五

「政治文」: 富士康的工作環境真的容易讓人跳樓嗎?

[利益揭露]: 我有鴻海 100 股。

今年以來,鴻海子公司富士康陸續已有 8 名員工自殺,其中 6 死 2 傷,一般人多半認為富士康苛該對待員工,致使員工輕生。然事實如此嗎?

我認為苛待對待員工或許是有的,但以每天工作 12 個小時來看,台灣也是一堆公司都是這麼對待員工的,怎麼就不見台灣媒體反省自己人呢? 前陣子的觸控面板廠勞資問題就是一例。工時長也不見得就導致自殺率高。

基本上,以自殺率來看,富士康還算是個不錯的工作環境,以深圳地區來說,富士康有 40 萬名員工,到目前為止有 8 個人自殺,以這種速度下去,今年底,可能會到 20 位,也就是平均 10 萬人可能只有 5 位。這跟世界其他國家(包含中國)的自殺率比較起來,算是非常好的紀錄了。

在討論問題前,一定要分清楚總體問題與個體問題。

所以,當中國媒體廣泛討論此事件時,我總覺得這是政治不正確所造成的,因為富士康是鴻海的,而鴻海是台灣的指標公司。

== 後記 ==
我不是中國人,所以找到的中國自殺率數據或許是錯的,但我是台灣人,我相信我們的衛生署公佈的台灣自殺率數據。另外從與南韓、日本的比較數據中,我們寶島台灣可算是比較幸福的,每 10 萬人只有 19.3 人。反觀今年的富士康每 10 萬人自殺人數只有 5 個,我覺得他們公司算是優秀了。中國政府管理下,每 10 萬人的自殺人數是 20 個以上呀!!!!!!!!

== 再後記 ==
我又發了一篇,說明本文論點可再改善的文章:「政治文」:關於富士康自殺事件,我是錯的

2010年5月11日 星期二

創世十六年來,六億六千多萬張發票,才有一張兩百萬!!

以下這個「對到第一特獎 創世中200萬」新聞又讓我不敢相信了。

6億多張的發票至少應該中了 6 張 200 萬才對呀! 怎麼只有一張。我很想知道創世的發票兌獎稽核程序。這會是那裡出了問題?



[修: 以扣稅後實得重算] 再比較 97 年創世基金會發票中獎金額,一樣偏低



期望值落在 1.1285 1.08962(應以扣稅後實得計算) 元。但實際兌獎金額如下:


只有 0.9336 元,還是低了 17%((1.1285-0.93)/1.1285)14.3%((1.08962-0.9336)/1.08962) 。我個人還是覺得直接捐錢比較沒問題,發票留給自己兌吧!

以下是整個 97 年的中獎號碼:

2010年5月10日 星期一

[修: 以扣稅後實得重算] 創世基金會的發票中獎金額似乎有點少

依財政部公告的 98 年中獎號碼(*1)來看, 6 次中獎號碼有兩種情況,就是陸獎有 4 個號碼的有 2 組,其餘 4 組只有 3 個。像 9 、 10 月的只有 3 個,所以它的期望值只有 1.0218 。


而 11 、 12 月的有 4 個陸獎號碼,所以它的期望值比較高,有 1.2218 元。但以財政部規定: 2000 元以上獎稅應扣除 20% 的稅金以及 1000 元以上要補貼 0.4% 的印花稅,所以實得的期望值分別下降為 0.9775 、 1.1775 元。



因為我不知道各月份出現發票數有多少張,所以我假定它們都是一樣的數目,那麼整個 98 年發票的平均期望值應該是 (1.2218 * 2 + 1.0218*4)/6 = 1.0885(1.1775*2+0.9775*4)/6 = 1.0442 元。


但是創世基金會 98 年所兌獎的 99,238,439 張發票總金額 92,694,400 元來看,它只有 92694400./99238439 = 0.9341 元。這 14% ((1.0885-0.9341) / 1.0885) 10.5%((1.0442-0.9341) / 1.0442) 的差距是怎麼來的?

我的推斷有五種:
  1. 部份人士把沒中的發票才寄給創世基金會,所以增加了發票總數
  2. 內部兌獎人員錯把中獎發票當成未中獎發票,所以降低了得獎金額,這問題還算小
  3. 內部兌獎人員私吞中獎發票,所以降低了得獎金額,這問題比較大
  4. 財政部所公告的中獎號碼是在發票銷售之後,所以它調整過中獎發票的數量
  5. 純粹是命運造成的
是那一種原因或是多種原因造成的,我無法下定論。但可知道的是,如果這九千多萬張的發票,是用信封寄給創世的話,那麼實際上,善心人多花了 9,923,843 元在郵資上,也就是浪費了約 10% 的金額。而且我還沒算,當創世收到發票後再回郵寄信給善心人的費用喔!

寄發票真的很傷呀!!

註1 :以下是 98 年財政部公告中獎號碼





2010年4月15日 星期四

「政治文」:起初他們追殺共產主義者

起初他們追殺共產主義者
我不說話
因為我不是共產主義者
接着他們追殺社會民主主義者
我不說話
因為我不是社會民主主義者
後來他們追殺工會成員
我不說話
因為我不是工會成員
之後他們追殺猶太人
我還是不說話
因為我不是猶太人
最後他們要追殺我
但再也沒有人站起來為我說話了 [原文]

[重要提示]: 我這篇文章並不是在為資方緩頰,而是提醒勞資問題中,勞方也佔了一部份呀! 不要每次都只罵資方無良! 像是這個事件的主角,如果可以的話,勞委會應該把勞動條件視為安全衛生事件,一發生此類爭議,第一階段就是勒令停工,罰款都只是小錢,停工一天對他們的傷害比較大。

9大罪狀!勞工控洋華光電』新聞給我很大的感慨,這也是我覺得「了解歷史」常常是於事無補的。人學不會教訓。

我相信,這些被惡意資遺的員工,過去還在該公司任職時,應該會耳聞該公司的勞動條件不佳,甚至違法。然而,卻到了被資遺後,才揭露這些現象,這不是說明了他們只關心自己的利益,一但利益有所損害時,才開始「主張正義」,那過去你領薪水時,不就是縱容非法的幫兇嗎?

我也相信,今天員工會走到這階段,有很大部份的原因是在自己的身上,勞動條件不佳,不是一朝一夕發生的,在認知了那麼久的時間中,怎麼不趕快換工作呢! 無非是找不到更好的工作,那為什麼找不到更好的工作,有兩個原因: 一個是自身能力不如別人,一個是找錯方向。

自身能力不如別人,這很白話,我就不解釋了。那什麼是「找錯方向」,就是不要跟別人一起擠在特定產業,不要以為只有商業公司、工廠才能賺到錢。說個例子,有天我在看南投新聞時,看到一個原本在建設公司擔任會計的人,在金融風暴時,被公司解職了(不過,她是有拿到資遣費的),因為景氣普遍不好,所以找不到工作,她就回老家幫忙,老家是在種植笅白筍的,她就發揮之前所學,開始作科學化管理,將笅白筍二次加工作成泡菜,並在網路上銷售,一方面,他爸媽很高興,女兒能回來幫忙,再方面,他們賺到的錢比以前多了。

當大家都擠在明星產業中,腦力全花在這上面時,其他團體的利益自然而然被削減了,在台灣,最大的被啃食對象就是農民,因為這些農民本身或其小孩都覺得種田太辛苦了,唸書多半不是選擇與「農」有關的,所以之後找工作也不會是農業,所以這方面的人才愈少,就愈不會有人為這個產業發聲 *1 ,所以想想,為什麼那些高科技產業都有產創或是租稅補貼,因為他們有人才可以跟政府斡旋,但農民只有政客。

註1 會為農民發聲的人,只有政客,因為農民有選票,但他們的發聲常是表面的,愈喊,農民權益愈倒退。
Related Posts Plugin for WordPress, Blogger...