2012年1月12日

學海無涯

如同 Steve Jobs 所說過,「不要什麼」比「要什麼」還重要。

若妄以為自已什麼都要學會,未免太太太太過自大!!!

謹記

2012年1月3日

寫點東西?

常看到叫人「寫點東西」的這種建議,突然對於背後的道理有點感覺

寫東西出來除了分享,也會希望有些回應。如果希望有高品質的回應,心態就不能是一副我超強的樣子在寫,也要有一種「隨時會被打臉」的心理準備

所以寫作也算是在培養「謙受益,滿招損」的認知吧?

在對的時間做事

這個標題可以說得很大,不過這裡只是有幾個小感想而已

最近越來越感覺到時間不夠用,想做的事情太多卻沒時間,而人說的「限制更會帶來進步」(差不多是這樣講吧...(汗))倒是真的,所以開始發現一些我早該領悟到的時間使用方式,其中之一就是標題

時間的使用效率是一個關鍵就沒什麼好說的,在錯的時間做事,真的很浪費,例如:

  1. 在上班時間補充新知或讀RSS。 如果看得東西跟工作直接相關的還好,但如果看的是離得有點遠的主題,怕被看到還要遮遮掩掩,真是沒自尊又浪費切換時間的事。而且公司通常會鎖某部分網站,根本打不開,麻煩的要死。更別說分散了本該專注的注意力。
  2. 在通車時間上網看文,尤其是用手持裝置。雖然可以盡量利用3G連線的方便性,但是一定會碰到連線不穩或等待,還要算上螢幕較小和裝置處理速度較慢,如果要再處理(轉寄、收錄)也很苦手。也許ReadItLater這類軟體可以減緩這問題,但是我不太確定效果。這個時間比較推薦睡覺和看書。
  3. 在可以睡床上的時候不睡,拿去做其他事,反而是通車或在公司睡,導致睡眠不夠好。還不如交換,床上多睡一點,通車拿來做事看書。

現在想到的大概是這些,雖然說我現在應該在睡覺...但是我真的很想講,我有多白痴~

2011年10月12日

2010年8月4日

閱讀Joel對軟體考績制度的想法

 

先提一下,這篇同樣充滿對職場上的臆測。一個不想面對論文的學生通常會開始思考一些奇怪而且還不會碰到的議題。

我想寫一點對公司考績制度的疑惑,疑惑開始於在噗浪上看到 @avhacker 的公司(後來知道是鼎鼎有名的...(消音XD))有所謂的「依程式行數」之類的評比制度,和在PTT programming版看到的「有BUG就扣考績」這兩件事。

然後ddavid@PTT提到 Joel 的三篇文章:

Ch21 激勵是有害的(2000)
Ch28 測量(2002)
Ch32 兩則故事(2000)

(我開始懶得幫文章上連結了,原諒我...)

先抄幾句來當大意,混個篇幅

第一篇,Joel講了一個他認為是污辱人的獎勵制度(在微軟),然後說,有些人的貢獻不一定會被看出來,所以有負面考績,導致士氣下降。有趣的是,就算給某人正面評價,但是如果不如那個人的預期,一樣還是士氣下降。更有趣的是,就算有一個公正的考績系統(而且這很難做到),大部分的人還是會失望,因為每個人都覺得自己應該有更好的考績。總之都會讓士氣低落、憂鬱、離職、嫉妒...甚至導致所謂的團隊自殺。他建議軟體經理在考績上做做樣子就好,如果沒有其他選擇的話。

第二篇,大意就是當管理的人想要測量知識工作者的績效時,總是下有對策。下面總是有辦法變出花樣來迎合測量系統就對了,而實質的工作品質可能還因此變得更糟。這裡有好幾個例子不只是軟體領域的。

第三篇說了兩個故事,描述管理良好的科技公司和一團亂的公司的差別。微軟在這裡是好的,「在微軟這家公司裡,如果你是Excel巨集策略的專案經理,即使來公司還不到半年也不要緊,你就是Excel巨集策略之神,連員工代碼六號的老員工也不能擋你的路。事情就是這樣。」另一家風格是「不管你多麼努力工作又有多聰明,也不管你是否在「負責」,你對再微小不過的事都沒有權力。把你該死的點子訓練以及聰明睿智放一邊...」Joel認為「最終的差異在於相信員工並讓他們把事情做好,還是把他們視為作業員對待,必須不停監視控制以免偏離主題並造成破壞。」

ddavid說:

「簡單的結論是,不要想用某種死板固定的規則來打程式人員的考績並做獎懲,只
會造成上有政策下有對策的反效果。你該做的事是一開始就選到對的人(在其它篇章
中有清楚的說明),然後讓他們有真正能做好事情的環境(同樣在其它篇章中有清楚
的說明),而不是用他們寫了多幾行程式或改了幾個Bug就獎勵他,反之就處罰。」

我自己看完三篇的感覺是,我認同Joel說的,但還是不禁冒出一堆疑問,所以不用打考績了嗎?主管只要「找對的人+能做好事的環境」就夠了?那台灣的軟體管理大多是什麼方式?我想,對於這些問題我實在是素材不足無法思考,還是要等真正進了業界才會有更進一步的想法吧?有什麼想法歡迎討論 :p

2010年7月31日

今晚的旅程

晚上走了一趟很意外的旅程。
原本為了標錯價的mac mini server,隨意在google reader裡以這關鍵字搜尋,想找是否要買或是買了之後如何用的文章,而在當中包含了vgod一篇關於為什麼用Mac的文章,這篇雖然之前看過也大概了解其論點,但以這篇又連到另外兩篇大陸人寫的Mac相關文章,於是這兩篇變成旅程的起點。
這三篇文章都在討論程式設計在Mac上開發的好處和其原因,但我反而有其他無關的想法跑出來,例如:
  1. 對台灣的軟體業感覺:要討論這麼大的題目,我實在是沒什麼能力,身為一個技術不精也還沒上班的學生,見解絕對不會高明到哪裡去。只是身為一個目前對軟體還算有憧憬而且徬徨的米蟲,總是會想東想西希望能找到一條相對正確的路來精進自己的實力,所以特別注意這類話題。好,廢話講完想說一下我的感覺(臆測),就是台灣軟體應該是他媽的玩不起來吧。當然玩不起來要看怎麼定義,只是我會有這種(絕望的)感覺,就是因為看到文章在介紹到Apple/OSX的發展史時,那種一路發展和架構出來的層級根本不可能在台灣發生...這麼說吧,隨便舉例,歐美有人做出UNIX,有人做出Linux,有人做出smalltalk,有人做出C,有人做出obj C,Java/.NET/各種GUI的IPC標準...,軟體架構完整的從下而上堆疊,開發的軟體等級都是深刻影響整個世界的,而我們做出了...防毒軟體和DVD軟體。不是我們的東西不好,純粹只是等級差太多而已。我們只有用的份,沒什麼偉大的創造。所以突然覺得,與其怪老闆沒做軟體的遠見,不如說根本沒環境吧?我覺得到我退休前應該還看不到像Apple這種可以說是偉大的公司在台灣出現吧。結論:沒結論。以上算是近乎哀號的論點而已,「軟體業」本身就是一個複雜多元的名詞,所以台灣軟體業可否興盛要先看怎麼定義何謂「軟體業」。
  2. 大陸的IT寫作:好東西越來越多了,常看到不錯的Blog有不錯的長文,另外也翻譯了不少經典的好書,有幾本還比正體的好。怎麼會這樣呢?
  3. pipe/D-bus/Cocoa:pipe是UNIX精神的其中一個體現,我也深深的為這種運作模式著迷,被我視為增進工作效率及有效學習的一環。而當application以GUI呈現時,D-bus就是其中一種IPC的方式,Apple則是發展出Cocoa。感覺是,發展這些技術背後的精神和思想真是不簡單啊...。
至於我認為該不該在Mac上開發程式,等之後有機會再寫一篇文章來討論看看吧 :D

2010年6月16日

GDB中如何存取不在current context的static variable

下午和 型男hasashi 討論一個malloc/free的問題,他寫了一個小程式來驗證malloc是否會自動free這件事,但是會 segmentation fault,我就想說開GDB來debug,同時練習GDB的用法。(自從上次在元智大學聽 變態 高手 Jserv 講解過GDB就一直在找機會練習 :D)

雖然說事後想一想這小程式其實意義不大,所以這程式邏輯是什麼也就不是重點了XD 但是碰到一個很有趣的GDB問題,所以想筆記一下。

這程式中,main會call一個function,裡面建立一個 static variable叫xxx,我想監看這個變數,不過如果程式離開這個function回到main了,我們在gdb裡要p(print)這個變數會出現:

No symbol "xxx" in current context.

所以我知道這個static variable其實存在,但是我看不到。雖然發現用把xxx加到display卻可以印出,我也不知道為什麼?(補充一下display的作用:每次breakpoint被觸發的時候,有被加到display裡的參數會自動被gdb print出來,就不用手動print。) 而且,只有display並不夠,因為有時會想存取這個變數來複製、assign給別的變數或做別的動作。

於是我先去 stackoverflow 找,但並沒有找到相關討論;接著我去google "gdb static variable No symbol  in current context",發現答案就在 gdb manual 裡;在 "Examining Data" 這一章的 "Program Variables" 這一節提到:

...If you wish, you can specify a static variable in a particular function or file, using the colon-colon (::) notation:
file::variable
function::variable
Here file or function is the name of the context for the static variable....

所以就可以很快樂的用 function::xxx 這種方式來存取不在current context的static variable了!

ps. 也許這就是沒先k過manual的報應啊…可是 gdb manual 有整整 32 章耶(不含一堆附錄)!?而且又不是只有gdb要看,想看的文件太多了,要怎麼取得平衡對我來說還是一個未解的問題…。

ps2. 在使用"gdb --tui"時曾經碰到好幾次上方視窗的source code會突然亂掉,發現別人也有碰過這個問題,但是暫時不知道解法,也許要找一個好的front-end來用。


2010年6月11日

新竹清夜的乾杯(ComeBuy)與零錢

一直以來都滿喜歡這家飲料店。

這家有很多特殊而且好喝的茶,例如有些微酒味的白蘭地奶茶和其他店比較沒有的花草茶;然後在去年低潮的時候,常常離開實驗室已經很晚,心情都不會太好,那時候就常午夜去買一杯,加上店長和店員比其他店都還親切,感覺很溫暖;而且記得以前在東吳的時候,偶爾會被現在已經是波麗士大人的威志帶去當時還沒轉型的乾杯買喝的,有點懷念。

最近突然想喝焦糖奶茶,昨天去全家沒看到,剛才去85度C也沒看到,去乾杯果然找到了,小小的開心一下。

買完之後,剛好有看到乾杯的義賣活動,+10塊可以買一杯桂圓八寶茶而且乾杯會把義賣所得全數捐出去當營養早餐基金,於是就買了一杯然後把身上剩下的零錢都丟到伊甸的零錢箱。開心又加了一點。

我偶爾會丟零錢到便利商店或飲料店的零錢箱,想到就會丟,其實不多,每次也才幾十塊,而且又簡單方便。我發現我丟的多寡會跟我對那家店的喜好有關係,像乾杯就比較常丟,而且會多一點。

故事就這麼結束了,沒錯…這是一篇很雜的雜記。大三元新開的燉飯很好吃,剛點的是奶油雞肉燉飯。下次我想吃中央羊肉 :D

2010年5月27日

什麼叫豐盛的早餐!(rock)

crowd-oh-yeah

昨天自己把很多事情做到一個段落覺得很開心,包括論文看的paper還有看很久的金字塔原理,而且最近都堅持沒吃宵夜加上昨天只吃一餐有夠餓,所以決定要吃個豐盛的早餐激勵自己一下…睡覺前一直在想要吃以下哪一個:

  • 摩斯
  • 小麥
  • 拉亞

所以今天早上就全部都吃了(爆)

科科…既然決定不了就通吃XD 真是有史以來最誇張的早餐

比較可惜的是到摩斯時剛好過了早餐時段,所以只好自己升級成冰鱈鱈魚堡,沒達到三家早餐大聯合。而且付賬才發現儲值卡不見了(驚)還好之前是掉在這家店,囧…

下次要吃新竹著名的饅頭肉排蛋+蔥抓餅 :D

腦海裡,滿滿的 盧廣仲 - oh yeah!!!

crowd-oh-yeah-os 19b6a7a5 starhall

只要大聲說~OH YEAH!!!

2010年5月25日

為什麼不該看「圖解金字塔原理」


1 金字塔原理完稿out
(台灣出的圖解)
(原作)
我實在對這本書太失望了,才特地把原因寫出來。 
這本的原作「金字塔原理」是一本從外文翻譯成中文,還算有名的書,如同這本書的副標,是在介紹一種思考、寫作、解決問題的邏輯方法。
而「圖解金字塔原理」是台灣人寫的,因為原作有點複雜而且冗長(簡單講就是很搞話),作者希望用圖解的方式來讓讀者加快理解原作的內容。
我就是因為啃原作啃的很累,知道有圖解這本後,在網路上找了一些書評,如aNobii和豆瓣,看起來還不錯。於是很開心的跑去交大圖書館借來看,想說可以加快自己理解原作,結果讓我大失所望,原因如下:
  1. 圖的組織亂七八糟:這是最大的問題!也許作者很用心的在畫圖,但是以我看過原作再去看圖解的圖,竟然很多還看不太懂,常常不知道圖要用哪種方式解讀,圖的符號也用的紊亂,想表達的東西太多但卻沒有一個統一的表達方式,讓圖失去價值。…一本「圖解」書的圖畫不好那還要看什麼?
  2. 要「圖解金字塔原理」卻沒有照「金字塔原理」去安排章節:作者想用自己的方式表達,但卻正好打破的原作的邏輯,我不覺得是這一個好的trade-off。原作的鋪陳是一步步的介紹概念,但圖解卻跳來跳去,會讓人不知道在講哪一部分,觀念沒有連貫,看的反而更累。
雖然這本還是有優點,但是光這兩大缺點就不值得看。絕對不建議在看原作之前就先看圖解這本。如果說可以用借的,來配合看原作倒還有可能小有幫助。希望作者能夠更用心一點,讓台灣能有更好的圖解好書可以看呀…。
抱怨完畢…寫論文去!

UPDATE: 有一個專門代讀商管書的部落格也認為這本書不值得讀

2010年5月3日

iPhone?哼...

MMDays的這篇好文,講出iPhone OS和Android兩個平台的根本差異點,也看得出來作者對Android有愛而發出不平之鳴:p 唯有兩個地方值得商榷:

  1. 在「Android信心崩盤?言之過早。」該段,結果我大致上我認同,不過推理邏輯上,是否AdMob能確實反映出Android的成功與否?我必須要說,我不清楚(lol) 再說,Android的成功也和Google的成功不完全相同。
  2. 在批評「Adobe第三方軟體不長進,會拖累Apple」這個說法時邏輯有點不完全,對使用者來說確實會有成立的可能。因為使用者可以分成10種...(lol) 第一種會瞭解iPhone慢是因為AppStore上的App有問題,另一種則會說:It sucks! Apple直接中槍倒地...。

話說回來這篇還是講得相當好,除了很多地方講得很清楚,而且我也對Android有愛XD
iPhone?哼...

2009年12月10日

Chromium OS Talk (GTUG)

之前有幸參加到八月份由 pingooo 召集的 COSCUP ,最近也一直想去由 ericsk 召集的 Taipei GTUG 看看,剛好今天辦的 talk 我很有興趣:
下星期三(12/9)的聚會很高興邀請到 Google 的 Chrome OS 工程師 Louis Lo 來為各位介紹 Chromium OS 專案及 Google Chrome OS 產品概念,如果您已經錯過了 tossug 舉辦的演講,或是來不及解答心中對此專案的疑惑,那就不能再錯過這次在 GTUG 演講。
會參加這次的聚會也是因緣際會,本來名額有限沒報名到,卻剛好有人退出而搶到最後一個XD 但報名到了反而猶豫要不要從新竹上去,花車錢又花時間,不過後來證明不虛此行!還抓到 clyde 一起去,謝謝這位型男當我今晚的司機和豐富此行的討論!
底下就我比較有印象的做一些筆記,並沒有包含所有的重點就是了。
IMAGE_121主持人 ericsk 開場後,由 pingooo 介紹 Louis
精采的 Talk
講者是加入 Google 約兩年的 Louis Lo,交大畢業後進入 RealTek 當 firmware 工程師,之後進入Google,目前參與 Chrome OS 的開發。
IMAGE_122 Louis 上場!
因為怕無意間講出不能說的祕密,presentation 用的 slide 是之前就公開的,所以 slide 本身沒有太多新意,大抵是在說 Chrome 推出的原因、目的和在 speed/simplicity/security 的優勢和架構等等。Louis 有特別強調一個特性,Chrome OS 會在背景偷偷地下載新版本的 OS image,當使用者重開機就會自動執行新版(前提是下載成功而且image的signature正確),使用者不會察覺。個人覺得新東西大多在 demo 和精采的 QA。
demo 的機器是 Acer 的 netbook,裡面已經灌了 Chrome OS(尚未對機器最佳化),開機 7~10 秒後就能看到登入畫面,登入後就是 Chrome Browser 那樣,特點大概有:
  • 左上角有個按鈕按下去會看到一些 service 的圖示,e.g., Gmail/calendar/twitter/youtube/計算機…類似 windows 中開始鍵的意義,想開什麼 service 可以從這裡找。(參考pingooo的這篇)
  • 右上角有電池狀態、時間、網路設定
  • 有個叫 panel 的東西:當使用者開啟計算機、音樂這種不該因為切換 tab 而隱藏的程式,會一直保持在前景,直到使用者想縮小它為止
  • 有個桌面的概念:chrome OS 似乎能有多個 chrome 介面,類似 work-space,而 chrome 介面全部縮小會露出背景,縮小後指到某介面能指定要還原介面中的哪個 tab,和 win7 的工作列運作類似,這裡講的會有點模糊,看過操作就會瞭解。
IMAGE_125 指到某介面會看到有哪些 tab
  • 有 terminal 可以用,可以用 su 切到 root(有些事不能做的假 root?)
  • 至於關機的方式,關機並沒有按鈕,按下電源鍵一下子就關機了(意義類似送出 shutdown –h now),期待以久的電腦家電化啊!(淚)
  • 另外還順便 demo 了 Google 在四月放出的 O3D,這是讓使用者能在 browser 裡用 JavaScript 開發 3D 應用的 API,Louis講到這裡激動的讚嘆著貼圖多麼美麗、多麼順暢云云XD
而QA的部份,其實一直穿插在整個 talk 之中,大家都有很多的問題想問,不過 Louis 基於保密也不能透漏過多,整場瀰漫一股諜對諜的氛圍 :p 問題實在很多,隨意列幾個:
  • local 問題:印表機問題怎麼處理?能不能存取自己的硬碟?能不能跑 native client?GPS/3G晶片怎麼處理?如果不能上網那 device 是不是石頭?
  • security 問題:如果帳號洩漏?有沒有 remote wipe?本機存的密碼如果 out-of-date 那能登入嗎?
  • JVM能不能上去?和 Android 的區隔?最低建議配備?
  • 太多了,我想睡了…Orz
Louis,真是難為你了…(拍)
很多問題現在也正在研究中,有時是受限於其他公司的政策和利益權衡,總之 Google 會希望能開放儘量多的東西給外界,來達到互惠的效果。
自己則是問了,chrome OS 能不能以 LiveCD/USB 的形式運作?會問是因為 Louis 說 chrome OS 的 customized firmware 會省略很多檢查,直接用硬碟/SSD開機。而我大學專題是做 LiveUSB 系統,客制的微型 Linux 不用硬碟/CD-ROM,會直接在記憶體解開來運作,於是有點好奇 chrome OS 能不能這樣做(早知道就先看過pingooo的blog!)。回答是有 source 當然都可以,只是這種非 Google 自己釋出的版本不能稱為 Chrome OS(有trademark),要叫 Chromium OS。
會後,大家開心的聊聊天吃吃點心,我和 clyde 討論了一些 JS 的overloading、JIT和趨勢面試的考題XD
還有個中文講的非常好的老外跑來和我們討論(中文名字也非常的美),原來是某公司的 Director,還向我們招募員工 :D
我覺得有個有趣的事,阿修帶了一台灌好 chrome OS 的 Asus 貝殼機,pct 問 Louis 是否有 default password,答案是有,是 codename 的「chronos」 (而非更直覺可能的「chromeos」)。clyde 提出了一個非常棒的懷疑,「是不是typo?」XDD 不過我剛剛查了一下,應該是是希臘神話中代表時間的神?Google,你是在說你能主宰時間就是了? :p

2009年11月25日

printf() 與 fflush()

flush-t15018

有時候在用printf(),例如debug,會發現前面一句printf()的輸出反而會比後面一句printf()的輸出還慢,例如:

printf("111");
printf("222");
有時會先印出222

這種情況會造成很多的不確定性和debug困擾。

但如果在 printf() 後面加上 fflush(stdout); 就解決了。(這是在C,和C++的 flush 不太相同)

也就是改成以下就沒問題:

printf("111");
fflush(stdout);
printf("222");
fflush(stdout);

因為 fflush() 能把 stdout 這個 stream 的 buffer 強制沖(flush)出,也就是先寫出再說(write)。

講的可能不是很清楚,有興趣的話可以man fflush,或是google 「printf fflush」。

以下是我自己的摘錄:

NAME
fflush - flush a stream

SYNOPSIS
#include <stdio.h>
int fflush(FILE *stream);

DESCRIPTION
The function fflush() forces a write of all user-space buffered data for the given output or update stream via the stream's underlying write function. The open status of the stream is unaffected.
If the stream argument is NULL, fflush() flushes all open output streams.

NOTES
Note that fflush() only flushes the user space buffers provided by the C library. To ensure that the data is physically stored on disk the kernel buffers must be flushed too, for example, with sync(2) or fsync(2).

順帶一提,google時有看到另一個不太一樣的問題,有人會用fflush(stdin) 來刷新scanf,這是沒定義的行為,不能亂用。

2009年6月5日

Be Brave.

tankman

僅以此圖紀念 一個 無數個勇敢無比、為了信念而站的血肉之軀。

也以此自勉,讓我有面對一切的勇氣,Be Brave.

附上一部由美國公共電視台 [PBS] 製作的 [著名紀錄片]。

UPDATE:

最近又看了一些紀錄片,更認識這件事後,在激情和感動之外,會更認知到一件事的發生要從很多個面向去看,尤其是如此複雜的事。

學生充滿理想,但也要懂得考慮實際的問題,何時收何時放,可行的目標是什麼,如何面對意見紛爭和內部一天三四次的政變,這些都是關鍵。
軍隊也不是完全沒人性,有一開始和人民同心的,也有司令等級抗令或不出兵或不開槍、自己棄械的,當然也有只顧升官殘忍屠殺學生的。
政府,也有溫和改革派,結果反而被學生弄下台,讓想要操弄的鷹派得勢,當時相對開放的風氣也被壓抑。
人民,群眾聚在一起還是需要提高智商和自制力。
媒體,即使是黨的發聲機器也在關鍵時刻干冒風險用迂迴的方式婊了黨一頓。

所以說,事情可能不是表面的那樣,而越開放、越了解就更能知道從中能獲得什麼教訓。不過看來中國還是有個悲慘的既定前提:不要挑戰我的絕對權力。

再附上 [香港的長篇紀錄片] 和 [逃亡海外人訪問影片] ,還有一片夠雞歪夠帥氣的 [短片] ,6/4當天在北京大學到處問學生今天是幾號,學生的經典回答我給五顆星。

2009年6月3日

為什麼要寫Blog?

開了blog以來一直沒有認真的寫過文章,最主要的原因有二

  • 肚子裡沒墨水,想不出有什麼好寫的
  • 太花時間

所以反而跑去玩plurk這樣的micro blog打打嘴砲聊聊天,把這邊都放著。

當初曾經很認真的想過,開一個blog要幹嘛?要給誰看?定位是什麼?該寫些什麼?版面風格要表達什麼?我想一個blog主要是用文字傳達自己的想法,要有內容、有思想才值得別人花時間來看。想了想,自己沒什麼料也就不寫了。再者,如果真有什麼想分享的,要組織出一篇像樣的文章,感覺就很花時間,似乎沒什麼好處。

今天看了一個對岸網友寫的文章覺得很有道理,也讓我有再試試寫blog的動力,文章在此:「[BetterExplained]為什麼你應該(從現在開始就)寫博客

我不寫的第一個原因:沒墨水
作者說的很有道理,寫出來的文章一定會有人覺得沒用(以前就知道了)、但也會有人覺得有價值(如果發的文章有認真思考過),所以不必太在意文章是否是最好的,重點在於記錄自己的思考過程,養成思考的習慣,培養思考能力。而如此一來也會因為思考能力進步而寫的文章越來越好。

第二個原因:太花時間
這就要看寫blog帶來什麼好處,看是不是值得了。看到作者提出的其中幾個好處就覺得也許可以一試:

  • 結識同領域的朋友:很多人是透過閱讀別人的blog知道對方的興趣、專長,進而認識有同樣愛好的彼此。寫出來的文章可以一再的被閱讀,就好像是一份簡歷,每篇文章構成了這個人(部分)的想法、經歷,這些都可以被更輕易的發送出去、被接觸到,而不必一再複誦。

  • 自己把思考貫穿一次:在把想法化為文字的同時,也幫助自己把想法再清楚地組織整理一次,確定自己真的瞭解,發現邏輯上的可能錯誤,也練習怎麼用文字的結構表達想法。

寫blog花時間這件事,其實也可能包含了因為怕被人覺得文章差所以花很多時間去修改,但如果能坦然接受這點,就可以減少花費的時間,另外也帶出另一個好處:

  • 被別人指正可以進一步反思:通常可以遇到有不同意見的人,討論、指正的過程就是發現自己的盲點的機會,也可以越來越深入問題的本質。

既然我不寫blog的兩大原因看起來不是問題,我就試著走走看,過一段時間後,再來檢視一下是否有達到目標吧!

SAP,Schedule, Action, Performance!

2008年12月1日

Array initialization (陣列初始化) in C

UPDATE: 2010-06-18

最近在PTT的C_and_CPP版上問了一些關於C的array initialization問題,討論之後的整理筆記如下(以下用 gcc 4.3.4 + gdb 7.0 測試)

(1) array沒初始:初始值是垃圾值

int num[10];

char array[10];

(2a) array部份初始版本1(不是用大括弧):除了有被初始的以外,都是垃圾值

int num[10];
num[0] = 999; //num[0]以外都是垃圾值

char array[10];
array[0]='a'; //array[0]以外都是垃圾值

(2b) array部份初始版本2(用大括弧):沒初始的部份會自動補成0

int num[10] = {1,2,3};

int num[10] ={};

ps. char array[10] = ""; //也會自動補0,我是因為這相當於char array[10] = {'\0'};

會自動補0的原因如下:

(節錄自tinlans大,英文是C99的一段)
[...If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.
array 和 struct 這類東西在程式語言裡都被歸類為 aggregate (聚合資料)...]

粗略的總結就是:

如果aggregate型別(如array/struct)初始不完全,而且又是用大括弧方式初始,compiler就會像對static變數一樣,自動把沒初始到的補0

所以,我們可以用以下初始方式把array初值都設為0:

int num[10] = {0};

但是要觀念上要清楚,不要誤解成所有元素都會設成同樣的值,以下就是可能的誤用:

int num[10] = {255}; //這樣其實只有第一個是255,其他元素是會自動補0,不是全部都設成255。

以上如果有錯,請留下您的意見一起討論!

2007年10月10日

魔獸教會我的幾件事,感謝war3,阿們!



斷斷續續玩了那麼多年的war3,有很多回憶和快樂...(後刪5000字),但是當爸媽問你這是殺小,似乎講不出什麼正經的東西…

我想,這是一些我從魔獸體會到的事情

1.玩太大會21
這還用我說嗎…

2.關注重點
war3讓我瞭解到,很多事要先做最重要的,效果才會出來,不然都是枉然
我常care一些事情,像是開場流程、控兵的小細節、編隊…

這些很重要,但是不夠重要

比方說,整體策略、種族特性、tier的時機點、經濟面的思考、和隊友的搭配,才是可能要先把握的,戰略沒去注意,談一堆戰術面的東西根本無濟於事

有些事不是不重要,只是還沒輪到要作,
所以要先搞清楚目標是什麼,什麼是小事,什麼是大事,現在在幹什麼,想要達成什麼效果,這才是必須先做好的。

3.一昧的追求理論沒用,多思考才是自己的,即使成長很慢
理論看多有個壞處,就是腦袋都變水泥了還不知道
每次和同學討論war3/SC,我都用看到的分析魔人理論,有人對理論有質疑時,我都義正言辭(卻帶著一點心虛)的說:

不對,BBS是這樣說的,aa一定剋bb,所以這個時候做cc就是了…
總是以別人的想法為自己的想法,看似雄厚的理論背後藏著深怕被戳破的薄弱自信

速成的我,有次我連續輸給原本都會贏的同學,臉綠了之外讓我瞭解到死板的理論無法應付多變的RTS,因為我並沒有成長,只看了一堆沒去思考過的理論,恰好,人生不就是RTS…
黃子嘉也說過,沒有終極方法

4.不要自大,因為你沒什麼好厲害的
AT常見的心理是
贏了,搶著說自己得意的地方、其實都沒人在聽別人說什麼
輸了,先罵最弱的那個
…超不健康的變態遊戲
不要再罵隊友了,尤其他是你朋友的話,玩的開心還是最重要的,我team work一定會記住這個教訓

2007年9月6日

竹子大學餐廳求生



如果我說7-11是交大最乾淨好吃的地方,你會不會覺得我在虎爛…
如果你是交大新生,說要轉去隔壁已經太晚了,繼續看文章吧…

我到新竹的時候,剛好二餐整修完畢,進駐了很多新店家
正好在味蕾還沒被完全殲滅前作點功德

聲明:味覺是非常主觀的事,文章僅是個人感受,僅供參考

好,聲明完了,我們開始往下看…
我並不是每一家都吃過
所以只對有印象的作些心得報告[補完ing]

※二餐一樓
小七
…交大救星…推薦冰箱裡的焗烤
各位都是小七達人應該不用多說

美而美
價格偏貴,堡還可以吃 我還蠻常買的
之前奶茶跟水一樣,綠茶是噴水,現在有進步,另外綠奶和咖啡可以喝看看
中午人太多可以吃這家

燒臘
二餐人氣王,說好吃嗎?也不會
主菜還可以,配菜很囧

八方雲集
出餐速度快,但口味似乎比外面的差一咪咪 可能是事先做好的關係
老闆人很好 有時後會算比較便宜…

100葷
似乎被NCTU_talk弄倒了 囧rz…現在變成拉麵店,有一說法是同一老闆?
不過現在生意很好,以50元來說可以接受

蔥抓餅
就蔥抓餅…

自助餐
感覺比其他自助餐還乾淨,菜色少,但是還不錯


料還蠻多的,但是老闆大概爐子太少,實在有夠慢…

老陳
主菜囧、配菜囧
雞腿還可以

※二餐二樓
多多咖啡很多都很好吃
咖哩豬排不錯吃,肉有點薄
海鮮義大利麵還不賴,味道蠻新鮮的,記得麵類都可以免費加麵
另外也推薦土耳其雞肉卷,雞肉風味很特別,肉也不少,雖然餅皮很普通,但整體味道不錯

其他家都soso

※二餐三樓
自助餐only
據博班學長說,這家在幾年前吃到小強是正常的,菜可能都放隔夜
因為這家主打便宜,一道10元夾很多也10元
現在似乎有比較好,但是味道我非常不習慣 噁~
只有甜湯還不錯

※一餐
麵攤的雞絲意麵不錯吃
自助餐soso
麵包店soso

※女二舍 一樓
摩斯漢堡是神賜給交大最美味的食物
感謝神

其他聽說都不好吃

※女二舍 二樓
初看感覺很高級,吃起來很不高級的簡餐路線
人有夠少 可以去看大電視自己轉台
反推焗烤

※結論:
心得不多 如果有什麼新的看法歡迎交流
造福大眾 不想再吃噴了,雖然說交大就是噴多…凎

有噴請大家告訴大家,給噴店倒,讓優質的店家進來!

2007年7月30日

我在台北的最後一個月

四年前,大包小包到台北唸書
四年後,我帶著光陽小銀正式騎出台北
小銀的離開,就像大陳島的撤守,劃下時代的邊界

離開了一片熟悉的土地,有種揪在一起的思愁

這意味著…
離開了唸了四年的三國大學
離開了一起哭笑過的好同學
離開了逐漸熟稔的永和

台北車站、MRT、夜市、上學路線、月票和悠遊卡… I'll be back,but...這些將會很不一樣。

最後一個月…
一樣天天坐火車通勤
修著最後三門課
走完離校手續 在空虛的過程中領了畢業證書
繼續留在台北打工

明天就要起身到Lab
今天是在shaklee的最後一天,想到和大家不會再見面,我眼神有些停留

靜靜搭著MRT到頂溪
騎上小銀在永和瞎繞兩圈…
思索著永和的食物 雲南涼麵沒開,去吃了香港成記粥麵
吸了兩口剛買的清心烏龍綠



便沿著中山路

一路向南

台北ByeBye…I'll be back,but...這些將會很不一樣。

2007年7月1日

Live CD (DSL 3.3) 小修改,加入中文字型來瀏覽中文網頁

,這篇是於東吳資科Unix課程中 關於LiveCD Remaster的簡易筆記及心得分享
這裡以補充一些比較基本的注意事項為主
##CONTINUE##
我們在製作過程中有很多不懂的地方,所以在流程中看到錯誤的話也請告知~感激不盡!



by IKARi & ChungYing
Instructor: Joe

目的:把原版DSL加入中文字型*可看中文網頁 (Damn Small Linux 3.3)

*字型是xfonts-intl-chinese,這是人稱最醜但是也是常用的基本字體,有其他很多更好的字型可以代替 ,此外字型種類若是 ttf(TrueType)佔的容量會比較大。

製作環境需求
-DSL 原始 iso檔,此次版本是3.3 (2007-June)(官網)
-可供DSL暫存檔案的Linux partition*,1~2G可
-網路

* 製作過程可用虛擬機器在Windows上做,就不必實際要有一個partition或硬碟,但要注意ram的大小,沒有512可能會在最後壓制 iso檔成品時錯誤,而且也很慢。

可能需要的背景知識
Linux基本指令
Debian基本常識(APT系統在幹麼的)
切割硬碟觀念
如何連上網路(若用虛擬機器就可以不用管)
文字編輯器(vi 或 nano)

大致步驟分為
1.切割硬碟,以產生修改LiveCD的環境
2.複製 DSL iso檔上的資料到硬碟上
3.chroot(change root)進去硬碟上的LiveCD環境
4.開始修改(此例是加入中文字型)
5.chroot出來
6.從剛修改過的內容壓制出新的LiveCD iso檔

製作過程中請注意
-有些過程是需要連續的,若有中斷要判斷影響到哪裡來決定哪些要重作,要有一直重頭做的心理準備(因為不知道會影響哪些所以只好重作,但越了解指令則重做部份就可以越少)

-錯誤訊息很重要,有些可以忽略,有些則是重要關鍵,文中沒提到的問題請善用google

開始:開啟terminal打sudo su,全程以root權限操作,也可在terminal圖示按右鍵以super user開啟,shift按住按+/-可以改變字型大小

#號開頭才是指令

1.切割硬碟,以產生修改LiveCD的環境
#fdisk /dev/hda [不是hda1,這裡不講fdisk用法,m是說明,最後記得w存檔]
#mkfs /dev/hda1 [不是hda]
#reboot [重開機剛才做的才會生效]

開機後...
#mount /mnt/hda1 [只要重開機就要記得重新mount,不然指令都是白打,此外可用DSL桌面右下角的mount 工具代替這一步,有時不能mount重開機看看,還是以錯誤訊息為主]

2.複製 DSL iso檔上的資料到硬碟上
#cd /mnt/hda1 [這一步沒做後面都錯,要先mount才能做這步]
#mkdir newcd [建立兩個資料夾]
#mkdir source
#cp -Rp /cdrom/* newcd/ [開始複製資料]
#cp -Rp /KNOPPIX/* source/
#cp -Rp /KNOPPIX/.bash_profile source/

複製概要:
cdrom --> newcd
Knoppix --> source

3.chroot(change root)進去硬碟上的LiveCD環境
#mount --bind /dev source/dev
#chroot source [做了這步提示符號會變,表示已經進入環境,根目錄已經改變成原先的source]
#mount -t proc /proc proc

4.開始修改(此例是加入中文字型)
[回復Debian的APT系統,用來增減程式]
#dpkg-restore
#vi /etc/apt/sources.list [加入下面一行文字]

deb http://ftp.us.debian.org/debian/ stable main non-free contrib

#apt-get update


[恢復GNU命令]
#wget http://distro.ibiblio.org/pub/linux/distributions/damnsmall/mydsl/system/gnu-utils.dsl
#tar xvfz gnu-utils.dsl


#vi /etc/locale.gen [修改此檔,以下兩行之外的都刪除,等等會依這兩行產生locale]

en_US ISO-8859-1
zh_TW Big5

#apt-get install locales [安裝 locales,安裝這個才能裝字型]

ps.這裡會提示說安裝有誤,要啟用某APT::Force-LoopBreak選項
所以請再執行一次(或一開始就打這個):
#apt-get -o APT::Force-LoopBreak=yes install locales

過程中詢問是否升級glibc選yes
選項回答:
Select locale to be generated ( 選擇 en_US ISO-8859-1 及 zh_TW BIG5,就是之前選的兩個 )
Which locale should be the default in the system environment ? ( zh_TW )
Please enter the number of geographic area in which you live : ( 5 )
Please enter the number of one of these cities or zones : Taipei


#locale -a [查詢一下locale安裝的如何]
這樣才對:
C
en_US
en_US.iso88591
POSIX
zh_TW
zh_TW.big5

[搜尋字型deb檔並下載]
請到debianpackages查詢網頁搜尋xfonts-intl-chinese並找出deb檔下載回本機,例如:
#wget http://debian.linux.org.tw/debian/pool/main/i/intlfonts/xfonts-intl-chinese_1.2.1-6_all.deb

[安裝字型deb檔]
#dpkg -i --force-depends xfonts-intl-chinese_1.2.1-6_all.deb

這裡捨棄以往做法apt-get install xfonts-intl-chinese,用apt會牽連下載過多套件,且安裝其中的xfonts-utils時會莫名的移除x-window(若有人知道原因可否告知我們,謝謝!),因此用dpkg並下--force-depends 來強制忽略相依關係直接安裝字型deb檔,安裝完可能有一個錯誤訊息(/var/...),可以忽略


#vi /etc/skel/.bash_profile [修改環境變數,加入下列一行]
export LC_ALL=zh_TW.Big5

#apt-get clean [刪除所有安裝過無用的deb檔,節省空間]

5.chroot出來
#umount /proc
Ctrl+D [離開chroot環境]
#umount /dev [不能umount 可下 -l 選項,即 umount -l /dev]

6.從剛修改過的內容壓制出新的LiveCD iso檔
#cd /mnt/hda1 [確定所在目錄正確]

[重製LiveCD主系統]
#mkisofs -R /mnt/hda1/source create_compressed_fs - 65536 > /mnt/hda1/newcd/KNOPPIX/KNOPPIX

[製作iso檔]
#mkisofs -no-pad -l -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -o mydsl.iso newcd

其他:
1.若用虛擬機器,製作完的iso檔可以用各種方式傳出到host,我是在host安裝hfs(http file server)然後在vm裡開firefox上傳iso檔

2.apt-get install [pro1] [pro2] [....] 可以一次同時安裝好幾個套件

3.若安裝xfonts-utils會移除數個x-window的套件,導致startx消失,原因我們目前仍未知..

4.DSL是一個相當精簡的系統,若要修改和Debian及Knoppix還是有不同的地方,要加入漂亮的字型(如TureType)及中文輸入法都有一些難度,希望有心得的朋友能夠給予一些意見,謝謝大家!

關於remaster/中文化的參考文章
http://knoppix.tnc.edu.tw/modules/newbb/viewtopic.php?viewmode=flat&topic_id=1847&forum=3
http://moto.debian.org.tw/viewtopic.php?p=498&sid=fc91529161652e54e897c5e44ade940d
http://moto.debian.org.tw/viewtopic.php?p=6553&sid=7972f980d97c9c320a6f48fbbd093798
http://knoppix.tnc.edu.tw/modules/newbb/viewtopic.php?viewmode=flat&topic_id=2077&forum=3
http://knoppix.tnc.edu.tw/modules/newbb/viewtopic.php?topic_id=2046&forum=3
http://tiger.tkms.ptc.edu.tw/knoppix/myknoppixdiy38.html
http://www.damnsmalllinux.org/f/topic-3-26-18399-0.html
http://knoppix.tnc.edu.tw/modules/newbb/viewtopic.php?topic_id=2291&forum=3