Monday, September 24, 2018

編程語言的洗禮

這個 blog 的一個內容,是想說一下寫程序的事。那既為第一篇,先寫少少回憶好了。

是中二,中三的時候,家裡有了個人電腦。當然還沒裝 Windows,只是跑 DOS,首先是 5.0 版。如果你足夠老,當知這第5版 dos 是很重要的版本。它附帶了一些調整記憶體的程式,非常適合擁有很多時間的中學生。關於這方面我另外講述。另外還帶了一個 QBASIC。這是著名的 BASIC 語言直譯器的一個改良簡化版。你當然可能知道 BASIC 和微軟的關係,那麼這個應該是他們想推廣 basic。所以,除了全屏editor,還附送了幾個帶源碼的basic程序,比如大猩猩丟香蕉,還有貪食蛇。其實我也是靠一本台灣出的dos 5的書,摸到了這裡。被程序碼吸引,就試著閱讀那些很像英文的程序。試著改動一些變數,看看發生了什麼。這當然很有趣。原來可以這樣命令電腦做事。

然後就買了幾本書,跟著範例,慢慢寫起來。順道一提當時黃金商場的書攤,是我們這些電腦痴的勝地。大部分的零用錢還有課餘時間,都花在這裡。

除了QBASIC,還有倚天中文。在DOS下,要處理中文字,當然是要繪圖。所以整個中文系統要在所謂的繪圖模式下運作。倚天提供給應用程式的繪圖API,是以 Assembly 語言或者另一個所謂 Escape sequence 的方式提供。那個 escape sequence 其實有點像 Unix 下顯示彩色文字的方法,但它加了顯示中文字能力和繪圖功能,比如畫圓,畫線。這也使我花掉了無數的時間。

明白什麼叫寫程序之後,也對電腦運作原理徹底了解。因為對電腦了解,自然是深深沉迷。這時候就升了中四,自然選擇讀電腦科。接觸到 Pascal 語言。

Pascal 其實沒有比 Quick Basic 更高級。但我也是樂此不疲,還了解到原來有 object oriented 的特性。這應該是 Borland Pascal 引入的吧。而且,它的 editor 有了語法彩色顯示。記得當時有了 Windows 95,因為很喜歡按扭的形狀,就自己寫了程序,把元素週期表用立體凸起的樣子畫出來。那可是把元素data存在array中,再用迴圈讀出繪畫的。

也會寫些小遊戲,大多是移動數字之類,放在電腦室的486電腦之中,給大家娛樂一下。不過,我們更喜歡在那裡玩DOOM。這是另一個topic了。

預科時,老師叫我玩下CGI。他那時想為學校網頁加入訪客留言功能。這個逼得我提前學習了網絡程序的運作。留言板也成了我熟習的練手程式,凡新學語言,必先實作一個。連後來大學班網裡的留言板,也是我寫了。因為大家但求方便易用,所以只用了 Perl就完成,還只是一個file,所謂單file程序。在學校的unix上,非常穩定,撐了三年多完全沒倒下。

到了大學,自然是選讀Computing了,沒有懸念。那是 Java的年代了。很新,連教授都在一邊學,一邊教我們。中間的功課,做 web apps,我們選用 PHP。貪它快靚正。沒有想到,後來的 Facebook,也是用 php寫成。為什麼我們當時沒想到要做一個?哈哈。

Year 1 識左個同學仔。他提前教我學了 database,去做 free lance。為一間模型店做了個收銀出單的app。非常成功。因為是先實作,year 2 才上課學習數據庫,這是完全不同的上課感受。如果你要掌握一樣技能,先實作,再學理論,有時候也很有效。

2000年,是實習的一年。當然係去做programmer。公司用的是 ASP,因為同事用 VB Script 來寫,與多年前的 BASIC很像。現在大概也沒人用這個來做 web app了吧!

畢業後首先也是用 Visual BASIC寫東西。那時候試用了 Active X,感覺它還不錯,可以在 Internet Explorer 中用。當然它現在已經過時了。但與COM interface的戰鬥中,深刻了解了何謂 interface。這個概念非常重要,日後再談。

日後在工作之中,還使用了 Java。大公司的 Architect 當然有他的理論。指示了我們用一堆 frameworks。比如 Spring。然而,framework成功,不等於你也成功。我個人認為,如果它不能簡化你的工作,就不要用。最後,我們並沒有用太多frameworks,卻做出一個個成功的apps。

業餘projects,也試過 Python,甚至 Ruby。這兩種在西方國家常見,但在香港較少見到。受限於打工搵食,我也沒有太多時間深究,希望日後有機會!

經歷了多種編程語言的洗禮,我發現,每一種都代表一種哲學觀。對機器和計算的不同理解,孕育出不同的語言。要精通多種語言,非常困難。好在,你並不需要精通全部。但是,精通一兩種是有必要的。觸類旁通,你可以在必要時,快速學好一門新的。比如,在 iPhone App Store 帶來的機會席捲編程界之時,你用了多少時間掌握 Objective C 這門看去怪異無倫的語言?

下次再談。

Wednesday, December 27, 2017

攝影之「前清後濛」

好多人入門之時,最想做到的效果就是前清後濛,看上去就有了專業感。我也經歷了幾個階段。由老爸的傻瓜相機,到DC仔,到高級一點的「一體DC」,然後是膠卷單反,再到入門級數碼單反,最後到全幅數碼單反。近年興起的無反,則在朋友手中試玩過。

親身經歷

輕易有前清後濛效果的,首先是膠卷單反。當時我玩的應該是 Canon EOS 300。只是配上一顆普通的變焦鏡頭,散景效果非常好,主體十分突出,幾乎跳出照片。

擁有過的入門級數碼單反是 Canon EOS 350D。拍攝人物時,背景是模糊了,但沒有達到「散」的程度。希望達到的效果是,光斑可以重疊。但是換了好幾款鏡頭,都沒有達到。我們試過的都是EF-S鏡頭,並未有將 EF 全幅鏡套上 350D 使用。

對入門級單反失望之下,狠下決心一步到位,入手了 EOS 5D Mark III。只是用了 Kit鏡,F/4之下給出的散景已經令我滿意。反觀 EF-S 非全幅的鏡頭,即使聲稱 F/2.8,也給不到如此效果。後來在這部機上用到 F/1.8,更是有夢幻一樣的散景:背景的光線和顏色已經完全抽象,成為色彩繽紛的襯底,烘托出前景主體。

說了這麼多,只為帶出當初一位朋友強調的:Photography,首要就是要有Photo(光)。

拍照離不開物理學。光線攜帶著景物資訊,被底片記錄。沒有光線,就什麼都沒有。散景,其實只是失焦的光線,但仍需要足夠的量。光量不夠,就不會有層次分明,又色彩濃厚的散景。

散景要素

大面積的底片/Sensor。至少也要全幅(35mm)的尺寸。小於此的感應器,在通常的曝光時間下,接收光線太少。感應器是機身的特性。當然了,越大的sensor,價格越貴。

大的光圈。最大的光圈,可以在給定時間內,允許最大的光線通過。這個也是越大越好的。光圈是鏡頭的特性。可惜,越大光圈鏡頭,對製作要求更高,價格也就越高。大光圈,也意味著鏡頭口徑較大。

有了大光圈給光,大面積sensor受光,光線量就確定了。然後,為了散景效果,我們還需要:

長焦距。長焦距,以及遠離主體拍攝,可以在受小光圈限制時,提供較好的散景效果。相對來說,獲得一支長焦鏡,比獲得一支大光圈鏡,要比較容易。

如果是拍微小景物,可以貼近主體,這樣也能營照出強散景效果。

為何無反機效果不好

無反機的好處在於比單反輕便,而比DC仔來說,又有可換鏡的靈活度。但是,為了輕便,Sensor尺寸就不能太大。因為,sensor尺寸一大,就需要更大口徑的鏡頭,而由於焦距也隨口徑增加,機身厚度就要增加了。那樣一來,就失去了原本賣點。

另外,為配合sensor尺寸,鏡頭的尺寸也較小,入光量就較少了。不要忘記,不管你用什麼相機,一般的操作時間(曝光時間)是相似的。不可能因為鏡頭口徑小了一半,拍人物就要用多一倍時間。這種物理限制,是無法逾越。

結論

最後感受,就是:要有好散景,必須有錢買大光圈鏡頭和大片幅機身,還要有力量去揹沉重的單反機!為了輕便,採用無反機,在散景方面,就要犧牲了!

Monday, August 4, 2014

最徹底的 iOS 省電方法 - 正解

這應該是最徹底的 iOS 省電方法

摘要如下。
  • 先檢查是否有漏電:於用量中記下待機和使用時間數字,使其sleep,過 5 分鐘回來。待機時間會多了 5 分鐘,使用使間如增加少於 1 分鐘,則沒有漏電情形,呢篇文可以skip;如多過 1 min 即為漏電。
  • 對 Facebook app,關掉 location 和背景刷新。
  • 對你不關心的 app 關掉背景刷新
  • 不要手動把背景的 app 關掉。不要!沒意義的動作,反而更費電。
  • 暫時停止 push email
  • 煩的app,把它的 push 通知關掉。
  • 不要顯示電池 %. 是的,不要煩自己。
  • 找間apple店,做個專業 test。
  • 信號差就用飛機 mode。