2011年11月30日 星期三

通往地獄的路,是由『善意』鋪成的~


        如果你家裡有電視,大概不難知道最近柿子的新聞很是熱鬧。其實我最近已經被搞得很煩了,所以前幾天在FB上po了一小段文。今天早上又不巧看了Jamie的一篇文章,其中談到了軟體工程師以及台灣的整體軟體產業和資訊市場,所以許多不吐不快的想法,需要整理表達一下。

        正打算提筆(其實是敲鍵盤)剛好又看到一篇商周的報導,讓我覺得今天或許是個不錯的時間,我們可以好好討論這個問題。

        我想把順序反過來講,商周今天有篇文章『善意的大政府卻鋪出荒誕之路』,是這期週刊的專題報導的總結與社論,文章很長,如果你有興趣可以自己買來看,但文內有三個標題我直接列出來,跟大家分享一下,來看看我們的政府最近幾年(又一次,兩黨都有份)搞出的投資建設如何:

一、花上百億,架288支大風車,1年發電量只夠台灣用1.5天
二、百億拼裝計畫改造彰化大城鄉,總統支票注定落空
三、4大慘業虧損,全民埋單,每人面臨2萬8千元呆帳風險

細節請大家自己看本期商周,這篇文章主要的意旨在提醒大家,對政府不應該有過度的期待,其實這符合經濟學中對自由經濟市場的理論,也就是政府管的越少越好,才能夠讓市場發揮(創造)最大的價值。關於這個論點我不再贅述,我也沒有那麼大本事關注整個台灣所有產業,我在意的還是台灣的軟體產業和軟體服務業的整個市場。

因此,我要講的是這一路以來,我的觀察和看法。

這麼多年以來,政府對很多產業做了很多補助,從過去的石化、裕隆的汽車、早期的電子業、最近的四大慘業(面板、DRAM、LED、太陽能),不管是出於善意或是各種利益考量,總之是花了非常多的錢下去,這些錢當然出自於你我的納稅。有些時候主政者用到了還算不錯的政(事)務官,有腦袋有良心,所以這些政府支持的產業交出了還可以看的成績;但不幸的是這幾十年來沒發生過幾次,反而是,在絕大多數的情況下,政府單位中對於產業其實一點也不熟的官員,本著上面交代的政策就多少做一點的上班族心態,把產業政策搞得一蹋糊塗,最後拍拍屁股政黨輪替或是退休去,領著公務人員的退休金,然而對於過去自己做的決策導致多少人沒有工作或生計困難,不知在午夜夢迴會不會覺得良心不安而輾轉難眠?

最近補貼柿子(還有以前補貼香蕉、還有以前補貼...反正一堆)的那些事情,以及兩黨賄絡選民的老農年金,讓我對台灣的政治人物的品格之低下以及選民的短視有了更進一步的認識。

當天我在FB寫了底下這段話:
-------------------------------------------------
我想,我今年要投給有老程(老程式設計員)補助的候選人,再怎麼說,我們這些人對台灣的App和軟體產業應該多少也有那麼點貢獻,而且台灣要是再不補助軟體產業,那繁體中文App以及本土在地軟體開發商都要消失了(這跟台灣沒有人種田其實一樣嚴重耶)...

但我們都沒有領過老程津貼(給老程式設計員的津貼),我們寫App也沒有政府的保障收購價格,App賣不好的時候,我也不能要求政府來買支持我們一下,這個產業才剛起步,還要面對全球化的競爭和挑戰,政府也沒簽什麼條款來保護我們這些愛台灣的App開發商(例如國外的App一律加上100%關稅),前陣子簽的ECFA也沒有給我們任何優惠和保障。一個柿子還可以賣二十幾塊,我們的App產地收購價格只有15塊上下,量還賣的沒有柿子多XD。這些候選人都不知道其實我們也很辛苦,也需要補助耶。

雖然微軟好心的贊助了我們一部分免費的生財工具,但人家農民買肥料和柴油也都有減免耶,連計程車司機加油都有補貼和減免,但我買NB和HD只能用PC home的免手續費分期。

每年都有政府出錢辦金馬金鐘金像獎來鼓勵台灣文化產業,其實我們也好希望有一個金柑(肝)獎來鼓勵我們這些辛苦寫Code的開發人員...弄個新光大道什麼的,支持一下在這個產業奮鬥了那麼多年的工作人員吧...
-------------------------------------------------

請不要誤會我的重點,我從來就不希望政府補助軟體業,一分錢都不要,除了App之外,其實台灣還有很多弱勢傳統軟體公司都需要補助,這需要通盤的產業政策(政府看似很在乎軟體業,但,真的有人在研究擬定台灣的軟體產業政策嗎?),政府只看潮流(App或雲端)或選票來補助是行不通的~因為,我想要說的是,沒有一個產業可以靠補貼政策而茁壯、沒有哪一個產業面對競爭而殞落時政府非拿全民的錢投入火坑而非救不可,最近Nokia在手機市場上節節敗退,Nokia佔了芬蘭近1/10的稅收,但芬蘭政府是怎麼說的?

「企業本來就有起落,他們必須自己reborn(重生), 這是很自然的情況。」芬蘭國家技術創新局(TeKes)執行董事何睿楷(Riikka Heikinheimo)說。「它失敗就失敗了,政府不該救,損失也是它們自己應該承擔的, 這就是市場經濟。」芬蘭經濟研究所(ETLA)研究主管亞爾柯(.Jyrki Ali-Yrkk?)說。

而台灣人呢? 銀行逾放比太高,呆帳太多要倒了,政府拿人民的錢補貼;小股民虧錢了,政府要國安基金進場;果農稻米欠收,政府要保障價格收購;高鐵要開天窗了,政府叫國營事業投資;四大慘業如今幾乎被證明是個白癡級的政策投資,但政府照樣拿錢繼續往坑裡面丟...

這些補貼的錢,隨便拿個一兩億,都可以幹出更多有價值有意義的事情。別再唬我台灣政府沒有錢了,我們繳的很多稅從我的觀點來看,根本是亂花

更重要的事情是:我們從來沒有要政府去做這些自以為聰明的蠢事。
請不要再拿我們的錢去東補貼、西補貼,然後以為自己有在做好事,錯,大錯特錯。很多補貼輕則厚此薄彼不說,更多的情況根本是造成官商勾結的弊案,或是轉化成政策買票以及圖利特定產業特定選民的黑箱暗盤。

政府要盡全力去做的『根本只有一件事情』,就是『把基礎的建設弄好』。你把基礎弄好了,再來錦上添花一下搞產業投資,我可能也不會那麼在意,但重點在你基礎沒搞好,這些產業投資根本是聊勝於無的短期作秀而已。

什麼是基礎?
把道路鋪平,把交通弄順暢。
把商業制度與經濟環境弄健全,把行政效率全面提升。
把法律與司法制度貫徹,實現一個公平正義的競爭與投資環境。

讓我們這些廠商在打拼的時候沒有後顧之憂,這樣就可以了。

是誰叫你拼命花錢辦白目的App比賽的? 是誰叫你到處撒錢弄出一堆養肥包商的軟體專案? 是不是可以不要再做這種事情了。

把網路弄通暢,讓價格合理化,讓我們有好的連線品質,讓台灣可以成為真正運籌帷幄的訊息流通中心;把交通弄好、讓我們出國洽商或招待國外客人的時候,不用擔心機場屋頂會漏水X光機自己燒起來;把台灣的學校辦好,讓軟體研發廠商可以在本地市場找到人才...而不是每年從學校培養出一堆只想繼續躲到研究所裡面好避免失業的蠢蛋

就這樣,是的,這樣就夠了。
其他的我們自己來,讓產業中的人自己接手,我不需要政府對App或軟體開發有什麼補助,我需要的是法令可以跟上時代,App的銷售和金流可以順暢不被政府過時的法令所牽絆,其他的政府不需要操心,台灣人很努力,我們在全球上是有競爭力的,那些跟國外廠商廝殺的事情,不勞政府官員們您的費心,我們自己就可以搞定。這個道理就跟政府應該專注於農業政策,避免產銷失衡的問題,而不是拚了命在選前搞出各種補貼一樣。

我不知道過去這麼多年來,政府到底是出於善意或是背後有什麼與特定產業廠商之間的利益交換,坦白說我也不在乎,但是如今通往地獄的路是現在是眼睜睜的擺在眼前的,iPhone和FaceBook改變這個世界只用了五年! 才五年,這世界就變了,而我們還有幾個五年可以等待政府腦袋開竅而想清楚到底該怎麼做呢?

2011年11月5日 星期六

[周末留點時間給自己]起初的心情...

『...然而有一件事我要責備你,就是你把起初的愛心離棄了。 所以,應當回想你是從哪裡墜落的,並要悔改,行起初所行的事...』啟示錄 2 : 4~5

最近在寫程式的時候,突然想到上面這段聖經經文。

前陣子有些疲倦,這個疲倦可能不只是身體上的,也是心情上的疲倦。幾天前和一個廠商聊天,他提到收到一些終端用戶的來信,對於公司開發的產品的建議,以及對軟體收費的埋怨...如同我過去說的,台灣很多使用者認為大多數的App應該免費,持有的論點很多,但歸納到最終只有一個,就是能不付的錢當然就要省下來(老實說我異地自處、捫心自問,有時候連我自己也會這樣想,連老張都說未來景氣似乎不會太好,所以能省則省),這是在市集中,衝動型消費或具有強烈需求的App比較容易讓用戶甘心掏錢的原因。也因此遊戲賣的比應用程式好、辣妹賣的比遊戲好的原因,而服務型或工具型的App則大多透過廣告或其他方式的獲利。而剛好最近我和在南部的App獨立開發商朋友們有一些討論,大夥兒對於台灣軟體業的生態和走向,依舊有點憂心。

然而抱怨大家都會,所以我們要練習不要太多抱怨,今天也不適合來談什麼大道理或遠大的抱負,至於過去很多跟政府單位與長官們提出的建議,也是從整體市場的角度來看,說真的沒什麼私心。關於政府如何花錢這件事情,我就不再多說了,最近還有一些讓人聽起來很不爽的案例,例如一齣劇花上兩億之類。(文中說,曾道雄感嘆「其實只要二億一千五百萬元的一半費用,就夠我做一輩子的歌劇,甚至演到死都用不完」。兩億? 我猜我們大概可以寫一輩子App了。因此我在此宣布,如果我包到兩億元的App政府專案,我立刻先捐出1/4,然後再開放100個周休三日的工作機會,程式設計師們都不用怕無薪假)

軟體產業會有這個狀況,歸納其因素,台灣市場小,是主因,最近從數據上來看, 即便是純中文化(沒有支援多國語言)的App,在台灣的銷量依舊遠小於台灣以外(這表示國外買中文App的消費者遠比台灣多? 這豈不奇怪?),所以我們現在的App需要全面國際化,每一隻App都做multi-language是必然的,但即便如此,要讓大家願意掏錢,我們還是得要費下一番功夫,例如美術設計的補強,建立競爭者的進入障礙與門檻...等。

不過這都不是這篇文章的重點,重點是,今天我想講一個故事。嚴格說起來,是有關於我個人有生以來的第一個軟體產品的。

事情是這樣開始的,大約二十多年前,有一天下午,我的堂弟很興奮的跟我說,大偉哥哥,我們在上課的時候看到你的名字耶,啥? 我的名字???

『對啊,你的名字在課堂上,而且老師還提到 .... ... ... 』堂弟滔滔不絕的說,他們連續幾次整堂電腦課都在教我寫的軟體。

我當時只是個學生,沒那麼厲害寫出什麼教學系統,細問之下,才知道原來是我在幾年前(如果從現在開始算,大概超過25年)寫的一支個人通訊錄管理程式(DOS版,很遜,找不到Source code了),用C語言(那時候還沒有C++、沒有Java、沒有.NET)寫的。和我差不多年紀的朋友們,還記得那個freeware和shareware的時代嗎? 很多軟體是用捐款的方式來銷售(其實嚴格說起來根本沒有銷售,是推廣)的,當時是沒有internet的世界,是BBS當道的時代,寫好的程式是由開發人員上傳到BBS站台上去,讓大家自由下載使用的...

就是這樣的一個年代,我們(當時還是學生)在家裡狂寫App,沒別的原因,只是寫了開心。因為資訊較為封閉的原因,當時寫好程式之後,甚至連跟別人炫耀的機會都沒有(那個年代不是每一個人都會奢侈地擁有一台個人電腦的,甚至絕大部分有電腦的家庭,是全家共用一台...)。因此,把自己寫好的App放上BBS,和大家一起分享...是當時很流行的方式。

和我年紀相仿的朋友們,各位還記得那個年代嗎? 還記得寫程式不為別的,只是為了開心,只是在程式設計師的身體裡面有一股創作的動力,讓你源源不絕的想把這些分享出去。為了不讓堆積在腦袋裡的代碼爆炸,所以我們持續的學習,持續的撰寫,持續的分享...我要說的是,那時候,很開心

曾幾何時,寫程式的人變多了,用程式的人也變多了,整個市場變大了,流通變迅速了,應用程式從電腦跑到手機上,應用軟體從全家人共用變成每個人的私人貼身助理...轉眼間十幾二十年過去了,現在的我每天與程式碼為伍,有時候連作夢都會夢到新的開發架構或Idea,但當年那種純粹寫程式的開心卻時常消失的無影無蹤...

所以我突然想到前面那節經文(我知道可能沒什麼直接關係,但是人的腦袋就是這樣,這是真實世界,我寫的是真實的紀錄,我沒法控制我突然要想到什麼)...我在想,起初的心情...而今晚,這個周末,我想開始找回起初寫Code的心情。

Developers,何妨周末夜,為自己寫個小App吧,不為什麼,純粹只是開心而已。
圖中的文字是...
I am a Programmer. I work for days with little or no sleep. I am always evolving my knowledge. I translate theories into reality. I code in many languages. I tirelessly test the complex so you see just simplicity.

2011年11月3日 星期四

在App中讀取Windows Phone 7手機內的照片資源(Picture Hub存取)

同樣的,和存取音樂檔案一樣,手機上的照片檔案存取,也採用一樣的方式,我們可以透過Microsoft.Xna.Framework.Media.MediaLibrary取得用戶儲存於手機上的照片,關鍵在Pictures屬性:

//透過MediaLibrary存取手機照片
Microsoft.Xna.Framework.Media.MediaLibrary lib = new Microsoft.Xna.Framework.Media.MediaLibrary();
foreach (var item in lib.Pictures)
{
    //動態建立Image物件
    Image img = new Image();
    //加入容器
    StackPanel1.Children.Add(img);
    img.Width = 400; img.Height = 400;
    //設定圖片來源
    BitmapImage bi = new BitmapImage();
    //關鍵在item.GetImage取得圖片
    bi.SetSource(item.GetImage());
    img.Source = bi;
}

開發人員需要比較留意的部分,是動態建立的Image物件,是透過source屬性來設定圖片,但圖片來源必須是BitmapImage,因此我們又動態建立了BitmapImage物件,並且透過SeetSource來設定該物件的binary圖形資料來源,而這個資料來源,當然是從item取得,使用的是GetImage()方法。

執行的結果如下:



請留意,Microsoft.Xna.Framework.Media.MediaLibrary.Pictures取得的每一個物件,其型別是Microsoft.Xna.Framework.Media.Picture,這個物件除了可以透過GetImage()取得圖片之外,還有幾個重要的屬性,諸如:Name, Width, Height, Date, Album…分別可用來表達圖片的相關資訊。