蘭嶼紀行 – 3

第四天 9/30 星期日

今天睡過頭了…

早晨的天氣依舊陰晴不定,我擦擦手中被露水沾濕的 30D ,在野銀部落附近散步,順便尋找小吃店。

從亞比亞民宿旁邊的小路往山上去,可以看到整個部落僅有的給間商店和小吃,島上的小孩子們在路上跑叫嬉鬧,睜大眼睛好奇的打量著我。

「是什麼人在這個時候會來蘭嶼呢?暑假不是早就過了嗎?」我猜他們心中一定是這麼想的吧 😉

今天是很悠閒的一天,我沒有安排行程,蘭嶼的景緻大多座落在環島公路周圍,從蘭嶼機場下飛機之後,順時針走,可以經過椰油部落,看到椰油國小,饅頭岩、蘭嶼中學,在椰油國小附近,有間四季小吃店,口味很接近台灣的路邊攤小吃,這是我這幾天最愛光顧的店。沿著海岸,緩緩前行幾公里後,便是鄉公所、開元港和加油站,這是島上唯一的港口和加油站。

Continue reading “蘭嶼紀行 – 3”

蘭嶼紀行 – 2

第三天 9/29 星期六

清晨四點半,起了個大早,很意外的,眼皮沈重,身體卻沒有疲累的感覺。一邊刷著牙,一邊望著窗外,我心想:「在蘭嶼,應該可以比在日昇之鄉 – 太麻里,還要早看到台灣的日出吧…」,看著鏡子中的自己,想著這個奇怪的念頭,我忍不住笑了出來。

早晨的空氣,夾雜著泥土的芬芳和小動物的氣味。我騎著老舊的迪爵 125 ,馳騁在野銀部落通往東清部落之間的路上,天空慢慢變亮,太陽光穿過厚重的雲層,金黃色斑斑光點在海面上閃耀。我聽到了嘈雜的叫聲,或許是海鷗,也或許是只是我的幻覺。

太陽出來得很快,不一會兒,天空全都亮了起來,我看看手錶,時間是早上六點,拿起手機,對著這個我形容不出來的天空拍了張照片,然後把照片夾在 MMS 簡訊中發送出去。

「這樣就可以和她分享我的太陽了…」我又笑了。

Continue reading “蘭嶼紀行 – 2”

蘭嶼紀行 – 1

第一天 9/27 星期四

這天傍晚,等她下班,一起去吃了我們最愛的快炒。五更腸旺、酸菜肚絲湯、油雞、炒高麗菜、炒海瓜子。我品嚐著一道道的美味,讚不絕口。

「唷,那麼好吃,那就和老闆娘說呀~」她笑道,她笑的時候,總是那麼迷人。

雖然才吃過兩次,但是我已經愛上了快炒,和喜歡的人在一起,熱鬧的氣氛,什麼都變得好吃。

她回家,我前往台北車站,晚上十點半左右,花了四十元領出寄存在置物箱內的行李,背著沈重的行李,我在想是不是衣服帶太多了,既然要去蘭嶼,反正也沒人認識我,那我應該只要帶條內褲就可以了吧..

Continue reading “蘭嶼紀行 – 1”

[電影] 練習曲

練習曲是一部我一直很想看的電影,但是之前因為忙著畢業,忙著暑修,一直苦無機會觀賞。儘管已經唸過導讀,看了一堆影評和簡介,在網路上看大家的心得,踩了無數次的地雷…

九月初的時候,終於,網路上開始了練習曲雙碟珍藏版的 DVD 預購。我沒有考慮就下了訂單,終於前幾天拿到了雙碟版的 DVD 。

看完這部電影之後,果然讓我很感動,雖然有些橋段可能不容易被一般觀眾看懂,但是這部片的用心,我覺得很值得肯定!第一個讓我印象深刻的畫面,是明相(主角)在漆黑的夜裡騎著車,往北部前進。因為晚上沒有路燈,所以他把手電筒反綁在單車的車架上,讓後方來車可以注意到他,避免意外發生。

雖然這只是片刻畫面,但是卻讓我激動不已。我真的很愛這麼細膩刻劃的手法,儘管我相信這個片段沒什麼人會注意到,但是有長時間騎單車的人,就一定會注意到。

片中也點明了很多社會問題,塗鴉與自我表達和環境維護、海岸消波塊的議題、工廠惡性倒閉、核能電廠、少子化、農村人口外移、中高齡社會、城鄉差距、親子關係(留學、雙親離異、物質與精神上的滿足)、教師退休制度與師生情誼聯繫、異國文化與台灣接觸、社會關注少數藝術創作…等等。

具體來說,很多片中想討論的議題上,真的有很濃厚的說教意味,不過我認為這無傷大雅,而且最值得讚許的是,這麼多的元素結合在一起,卻不會覺得太多餘。這真的很難得,在片中許多的客串演員,也讓我會心一笑(像是許效舜、鄧安寧…等等),用環島的手法,始終環繞著主角,環繞著他單純的想法,卻帶出了這麼多的東西!

在很多橋段,我都忍不住鼻酸,當然,就不一一列舉了。

雖然台灣只是個蕞爾小島,但它孕育了我們,和我們一起走過。在這塊土地上,除了政治紛爭、除了生活壓力,其實,還是有這麼多美麗的事情發生,如果窮盡一生卻不去看看,不去了解,那麼,會是多可惜的一件事情…

其實美麗的事情,一直在發生著,只是我們沒有注意。

片尾,當明相遇到施老師的朋友時候,我眼眶中的淚水始終在打轉著,因為,那麼多的畫面,是那麼的熟悉(施老師也是單車車友,在幾年前因為就落海溺水的學生..因故身亡)。

最後,胡德夫老師在海邊獨自演唱了他的創作「太平洋的風」,伴隨著那充滿情感的嗓音,字幕上打出:

「僅以本片紀念車友施舜晟」

我終究是忍不住了感傷,淚水奪眶而出。

Continue reading “[電影] 練習曲”

SiteStates – v0.2 beta

前幾天我寫好了一隻程式叫做 SiteStates ,現在新增了一些功能(粗體字表示新增功能),主要簡述如下:

* 支援 PageRank 資訊,並可自訂是否顯示。
* 線上即時人數、當日瀏覽人數、累計總瀏覽人數
* 支援自訂邊框、背景、文字顏色
* 支援隱藏模式
* 支援近 30 日訪客人數紀錄 (大折線圖 580×180 ,小折線圖 110×30)
* 支援以 JavsScript 語法列出在貴站的即時線上使用者的 IP
* 支援簡易密碼重置和自訂訪客人數
* 紀錄最近的到訪者紀錄(IP & 時間 & DNS 反解)

自訂訪客人數的想法是來自於 PTT的 ritandy 和 mewmi 兩位板友,因為他們說:

ritandy:「請問可以新增一個讓計數歸零的的功能嗎?」

mewmi:「另外, 我希望可以自己填”開始人數”…因為也許有人本來就有個total, 轉移到你的計數器使用…」

我覺得很有道理,所以就花了半個晚上寫好自訂人數以及密碼重設的功能。

另外,這篇文章的重點在下面,主要是討論實做遭遇到的問題和解決方法,如果覺得無聊可以跳過 🙂

1. Google PageRank 的 Cache 問題

眾所皆知,取得 PR 最快的方法就是用第三方 API 套在程式裡面直接去問 Google ,但是這個方法很糟糕,我實際測試過後,發現問一次大概要一秒左右,如果每更新一頁面都真的去問一次,那 Google 大概會第一個封鎖我吧。所以必須有 Cache 機制,還好 popstats 一併解決了這個問題,但不支倒是不是作者故意的,這隻程式另外也留下其他的問題,所以我只好手動 Hacking 一下。第一個問題是問不到 PR 回傳 FLASE 的時候,他不會把結果 Cache 起來,更要命的是他會把這件事情記錄下來,所以可想而知, log 檔肥大的速度相當之快。因為毎遇到一個 PR=0 的網站,馬上 log 比數 = 瀏覽次數 = 我的程式去打擾 Google 的次數。自然這樣效率就不會高,所以我把 Cache 的預設時間延長,並且改寫了一下,讓 PR=0 的時候一併寫入 Cache ,更新週期為 7 天(預設是 1 天, 86400秒) 。如此這個問題算是暫告一段落。

2. 儲存日期資料的問題

我之前有考慮過一陣子,要用 explode/implode 還是 serialize/unserialize ,最後決定聽從 whapup 兄的建議,用 serialize/unserialize ,因為這算是真正正規的作法,雖然轉成 String 的時候長度會更長一些,但這影響僅限於儲存和後端操作,對於使用者來說是沒有感覺的(因為看不到)。原本我想多加幾個欄位,或是把陣列設大一點,儲存多一些天數的訪客人次,但後來考慮到這個資訊似乎不是那麼必要 (畢竟用 Analytics 更完整不是嗎?),所以就僅儲存近 30 日的紀錄,增加方式同 MRTG 的 Grow Right ,因為我覺得這樣流動的圖表,很漂亮。

3. 重設密碼的問題

由於我想把系統註冊儘量簡化 (其實最理想是用 OpenID ,之前有提過了) ,可是我遭遇到一些問題,最大的困難在於字串的取得和判斷,後來我想出一個方法,就是讓使用者修改網頁標題,在其中加入我雜湊(HASH)出來的一串數值,這樣我在用程式去讀取他的頁面,以利判斷是否為網站所有人修改密碼。但這衍生出了兩個問題,第一個是正規表示法(Regex)來頗析字串的問題,第二個是利用 file_get_contents() 函數的問題。

第一個問題我就不說了,書上寫很多,資源很豐富,我自己也找很久 XD
第二個是因為 file_get_contents() 必須透過 php.ini 開啟選項(儘管預設似乎是開的),但我覺得不太喜歡這樣,可是又在想用 fopen() 和 file_get_contents() 哪個會比較好,雖然兩者的速度可能僅在伯仲之間。

我在 PHP 問了個問題:

$encode_string = '<title>' . $encode_string;
                  ^^^^^^^ 加上這個是為了防止被插其他地方
$long_string = file_get_contents(urldecode($url));
if(eregi($match_string ,$long_string)) { 開始做事 }

這似乎有危險,如果有人留下含有 $encode_string 的 comment
這樣或許可能會出現問題,儘管機率不高。

結果以前中正的 dinos 學長幫我回答了,他採用 fopen 的解法,比較漂亮的解法是不用 retrive 整個 content 回來,只要讀到了第一次 match 到正規表示法的地方迴圈就會 break ,然後進行更進一步的處理:

function getRemoteTitle($url){
  $fr=@fopen($url,"r");
  if(!$fr)return false;
  $content='';
  while(($line=fgets($fr))!=false){
    content.=trim($line);
    if(preg_match('/<title\s*>[^<]*<\/title>/i',$line) ||
      strstr(strtolower($line),'</title>')){
      break;
    }
  }
  fclose($fr);
  preg_match('/<title\s*>[^<]*<\/title>/i',$content,$matches);
  if(isset($matches[0][1]))return $matches[0][1];
  else return false;
}

這樣可以減少傳輸的位元數,更快的取得結果,而且第一次 Match 到的一定是標題(當然,用 file_get_contents() retrive 回來的整份文件中,可能包含不只一次 HASH 的字串(在其他地方被惡意插入)。所以在 preg_match() 的時候,只要判斷第一個結果就好(array[0][1]) ,但這樣始終回傳太多資料了,我覺得不需要比對這麼多資料。

4. 自訂人數的問題:

在自訂人數上倒是還好,就是把資料表的欄位重新 UPDATE 即可,我另外寫了一個小函數專於做 Error Handler ,並且 echo 出錯誤訊息,登入錯誤、 Session 錯誤、認證碼錯誤..等等。

5. 折線圖的問題:

在用程式繪製折線圖上,其實我之前就做過類似的嘗試,也畫出來了,但是困難的地方在於分配欄位以及配置,這也是花我最多時間的地方,最後我決定畫兩張折線圖,大張的可以看出詳細資訊,小張的則是像 Site Meter 的小圖那樣,可以看個大概(不過即時產生小張圖片程式的我還沒寫好)。

6. 系統效率與記憶體的問題:

我用 free 看了系統的記憶體使用量,發現 Debian Linux 並不會把所有的記憶體都 Buffer 起來,在系統總共 2GB 的記憶體中,實際使用約 100MB ,然後 Buffer 大概 1GB 左右,還有 1GB 左右的記憶體閒置。至於 SWAP 使用率一直都在 0% 。

7. 流量的問題:

經過觀察,發現流量大約平均在 10KB 左右,這算是意料中的事情,因為動態生成一張圖片大概也才 1KB 多而已,所以在人少的時候流量還不至於太高影響到我平時的網路速度。

8. Apache2 效能的問題:

之前我搞不太清楚 MaxKeepAliveRequests 和 MaxClients 的關係,以及 MinSpareServers 和 MaxSpareServers 的關係,所以在效能的調校上一直無法動手,另外我也想知道有沒有拒絕 DDoS 的 module 。這方面 dinos 學長也一併解決了我的問題。

MaxClients 是伺服器啟動時要啟動多少個 httpd 來等待連接,在 apache2 預設值裡,每多一個大約會多使用 20~40MB ,對於同時連線人數越多的站是開越多越好。

MaxKeepAliveRequests 只有在 KeepAlive On 時才有效, KeepAlive 是說在一個 httpd 每處理完一個 MaxRequestsPerChild 後要不要繼續等待下一個子請求,所以 MaxKeepAliveRequests 就是指定每個 httpd 在等待期間可以處理多少個子請求。

MinSpareServers 和 MaxSpareServers 這兩個是指備用的 httpd 數量,也就是除了被用掉的以外還要開啟多少個。當然一定會影響效能囉,對於載入多個 mod 的 Apache httpd 而言,每要啟動一個 httpd 是要花上很多時間(約莫 3~8 seconds),所以設置一些備用的減少當使用者連結上時需要等待 httpd 啟動的時間

另外對於 DDoS 的阻斷服務攻擊,則是可以用 mod_evasive 來嘗試保護系統。

這次的問題檢討大致是以上幾點。

refer:
1. SiteStates 網站

弟弟的新電腦

之前老弟存了一陣子的錢,直到最近終於決定買一台新電腦來用,除了螢幕用我給他的 ViewSonic VP-191B 以外,其他東西都要重新添購。(因為我之前用三個螢幕,主力顯示卡是用 nVIDIA Geforce 6800 Ultra 搭配雙 DVI 輸出,副顯示卡用 GeForce4 MX 440 搭配單一 DVI 輸出。不過前陣子 PCI 插槽上的 GeFOrce4 MX 440 燒壞了,所以第三顆螢幕就這麼閒置著。剛好老弟要買新電腦,這個螢幕就送給他用吧。)

由於我們都很在意也很挑剔螢幕、鍵盤、滑鼠、機殼、電源…等等零件,所以光是要收集齊全這些東西,就花了不少時間。

這次的機殼我們買了 CoolerMaster 的 CM Stacker 830 nVIDIA Edition ,這款機殼在台灣售價是 8900 ,我們殺價半天,最後 8300 入手。由於是特別版,所以所費不貲也是很正常的。在美國,價格也是水漲船高,含稅要價 299.00 美金(比在台灣還貴),介紹可以見 Cooler Master Stacker 830 NVIDIA Edition – BRnR,在國內則可以看硬派精璽公司的網站

決定機殼之後,我花了一天的時間做功課加上考慮硬體規格,之後我們便到 NOVA 購入新硬體。

Continue reading “弟弟的新電腦”

[影片] 宅男衝衝衝

這個影片是我弟他們同學大三下的時候拍攝的作業(現在他們昇大四了),我的弟弟飾演影片中男主角 宅男-春捲。另外我要幫我弟弟澄清一下,他在現實生活中,其實是很帥的,哈哈哈! :mrgreen:

故事大綱:
 故事主角是一名熱愛線上電玩遊戲的宅男-春捲(林建融 飾)某日突然想要一位女朋友,在朋友(方聰尉 飾)的協助下努力擺脫宅男的氣息,在這過程中宅男有了不一樣的體悟…

Continue reading “[影片] 宅男衝衝衝”

簡述 SiteStates 開發規劃

我最近寫了一隻小程式,原本是今年學期末就要寫好的,因為早就答應人家了,不過我暑假(暑修)實在太忙加上想說既然要寫,就寫的完整一點,所以拖到現在才完成這隻程式。

SiteStates 是個 多功能 簡單的計數器, 也可以稱為探測器 或是 間諜,程式部份大概幾百行而已,所以只能算是小玩具,它主要是可以統計 訪客人數線上人數 以及顯示 到訪紀錄

其實要寫一個會動的訪客記錄器,對一般會寫的人來說,大概是一小時或是幾十分鐘的事情。因為寫出這類的東西並不困難,但是週邊一堆困擾的事情,倒是很麻煩,從介面的修改,資料庫的規劃(和以後的可擴充性)..等等。

Continue reading “簡述 SiteStates 開發規劃”

[電影] 沉睡的青春

電影從頭到尾一直在重複的一個論點,就是「失去了愛。」,換言之,劇中的每個人都不自由,都失去了愛。

徐建豪的妻子離家出走,所以整天借酒澆愁,他失去了愛,他失去了妻子的愛。

徐青青沒有校園生活,獨來獨往,被同學稱作沒有靈魂的娃娃。每天做著一樣的事情,卻不知道有個暗戀她的男生,她錯過了愛,整整錯過了國中三年的愛。接著和蔡子涵重逢,可是剛滋長的愛情還來不及萌芽,卻又再度嘎然而止。

陳柏宇親眼見到蔡子涵在面前死去,所以人格分裂,他失去了最珍貴的友情,他逃避著,逃避了這一切。把自己藏起來,當他不要自己的時候,子涵這時候就會出現。但,子涵只能孤寂地瑟縮在未知的角落,默默的守候著青青,用他被動地、獨特的方式守候著…還有那和折起來的一百元。

子涵的父母也失去了愛,他們失去了自己心愛的兒子,接著又面對了長達十年的折磨。看著柏宇,心痛,卻又只能配合著他的另一個人格。

依稀記得一些對白。故事開始,青青的爸爸醉倒路旁,導演安排的對白,別具深意。

青青:「爸,為甚麼不把家裏的鐘錶店收一收,離開這邊呢?」
爸爸:「這樣妳媽媽回來,會找不到地方…」
青青:「媽媽是和別人跑了..是跑了!」。

後來,子涵帶青青到家裡面,蔡爸爸和蔡媽媽說,眷村改建,他們即將搬離,

青青:「那子涵想回來找你們怎麼辦?」

這是多麼巧妙而鮮明的對比

當然,整部戲也不是只說「失去了愛」這件事情。

劇末安排青青想帶著子涵走,去一個不會離開彼此的地方,約了早上 7:00 , Do Re Mi 見 (我看到這幕,我笑了)。晚上,青青決定上火車,離開爸爸,離開她的家,這是一種對觀眾的催眠,我覺得導演(同時也是編劇)始終還是希望觀眾不要耽溺於劇情的悲傷中,而是要在悲傷中尋求解脫,就好樣青青下定決心離開爸爸,搭上媽媽離去的火車…

雖然我不喜歡這樣的安排..(因為這樣的改變並沒有挽回什麼,只是證明了青青為愛付出的勇氣)

直至劇末,子涵對青青的愛始終沒有改變,子涵死了兩次,為了青青,他無所畏懼、毫不猶豫。

「子涵就是這樣,落到水裡面也不懂得掙扎…」

但是,他還是願意。

儘管那麼虛幻、那麼不真實…能讓她這麼做的,是愛情,青青的愛情,愛得令人心疼。在療養院裡面要和子涵私奔時被發現了,她哭著對蘇醫師說:「至少,每天下午三點一到,會有人愛著我。」

青青哭著,輕輕地,一句話道盡了她渴望的一切。

霎時間,被這句對白震撼了,心頭一震,或許,這就是青青的渴望吧,渴望被關心,渴望被愛,雖然她愛上的僅僅是陳柏宇的分裂人格…

多惆悵…

有人說:「本片終極的出口,與其說是徐青青離家的行動,不如說是在於片尾,陳柏宇的蔡子涵人格為了向徐青青示愛,而冒著生命危險跳下瀑布的那一瞬間。」

但我認為,本片沒有出口,在子涵決定跳下去的那瞬間,再次又註定了青青失落的愛。而面對殘酷事實的,是還活著的人。青青雖然放棄了一切,但終究得不到片刻的子涵。

這是鄭芬芬導演的第一部電影,我個人認為評價很高,而且也不盡然是哀傷,導演的幽默感也是別具深意。

Richard Stallman 和 Linus Torvalds 的決裂…

剛剛收 Slashdot 的 RSS 時,看到一則相當「有趣的事情」,

大意如下:

有個對 Richard Stallman 的訪談,內容是 GPLv3 相關的事情和發表對微軟專利的評論,Stallman 說如果人們想要保有自由,就不要追隨 Torvalds 的腳步。(if people want to keep their freedom they better not follow Torvalds) 。

Stall 寫 GPLv3 是為了繼續保有自由軟體的純潔以及對抗邪惡的勢力(do that job better and protect against new threats),當然 Torvalds 不太支持這個 issue (這個之前就有耳聞,不過我懶得找新聞了) ..

Stallman 的結論是:even though I think they are foolish. However, if you don’t want to lose your freedom, you had better not follow him.

這個話感覺真重。

Richard Stallman Proclaims Don’t follow Linus Torvalds ..來自 Slashdot.