2009年5月6日 星期三

窗外月

只要時間跨過了凌晨一點,抬頭一望就能看到一彎月兒,這是五月初才開始發現的。有時發個呆望著,總在想,到底在追求什麼,有時目標彷彿再跨一步就到了,但往往在那一步尚未踏穩時,又陷入迷惘?









聽聽老歌,一首 LUNA SEA - I for You ,彷彿將我帶回日劇”神啊,請給我多一點時間”。然而,我卻想不起來那齣日劇的劇情。因為,我從來都沒仔細看過,只知道裡頭有當年最紅的深田恭子和金城武。有時人生不也這樣,追逐著好像知道的目標,結果到頭來有幸得到後,卻發現自己根本沒享受過?只是當別人談論起時,彷彿又有莫名的感同深受?話說回來,看著這演唱會,才覺得主唱還真會唱,看他的表演真的很苦。


論文的進度我一直都很 ok ,並不是說已達到想要目標,過去付出的想拿來寫論文都沒什麼問題,只是,有一種一寫論文就莫名的罪惡感,好像要把還沒完善的程式丟給別人善後?回想起來,碩班好像又沒得到我真正想取得的東西?或許那東西本來就不存在吧!


儘管如此,這就是生活吧?還是播放著數首經典的日劇主題曲,每一首還是很容易敲動我心,那些劇情我都已忘得差不多了,但一聽到還是有種活力精神感,這該不會就像喝酒?好像醉,又似清醒乎?


或許這一切的心境,來自於生活些微的變動吧?心情?工作?生活?或許又是週期性的心情吧。


2009年5月2日 星期六

[Excel] 取得指定分頁的欄位資料( get a cell value )

很久沒用 Excel 了,我習慣在一個 Excel 檔開多個分頁(sheet),過去曾寫過簡單的 VB 程式去分析資料,這次我只是單純地想在分頁 B 取得分頁 A 的資料,逛了很久都只看到 VB 的用法,最後自己亂用才發現原來非常簡單。


環境敘述:Excel 檔案,內有 A,B,C 三個分頁(sheet),其中 A,B,C 各是他們的 sheet 名字,預設大概都是 sheet1, sheet2,sheet3,etc


解決方式:假設我想在 C 分頁的 C1 欄顯示 A 分頁 A1 欄位的數值,就只要在 C 分頁的 C1 欄位上,按一下,再切換到 A 分頁再點 A1 就搞定了!


公式化:在某欄位的數值設定為 "=分頁名字!欄位" ,例如:"=A!A1" ,即可取得 A 分頁裡的 A1 數值。


在 VB 上大概是用 Sheet 跟 Cell 這兩個函數囉


2009年5月1日 星期五

從 PHP + HTML 架構,擴展至 PHP + JSON + JQuery + JS Event + HTML 之筆記

兩個禮拜前,開始第二次的 Jquery 使用,第一次是去年,但我記不太得何時了!只記得我用 Jquery 只是為了使用 Ajax 的呼叫罷了。第一次連後端傳來的資料都用 JavaScript(JS) 去處理,接著又使用 document.createElement 將想要呈現的 HTML code,動態地慢慢慢慢地建了出來,成果只有一個字 -- 慢。


大概是之前 Patrick 學長開發 Ajax 的經驗,老板對於 Ajax 的開發稍稍地不允許,並不是不能用 Ajax ,而是不建議在開發服務的過程中,加入 Ajax 的實作。理由很簡單,光 Javascript 的開發就夠讓人折騰了,所幸的現在有 Firebug :: Firefox Add-ons 跟許多被廣泛使用的 JS framework ,如 Jquery !在兩個星期前,老板終於對我解除對 Ajax 開發封印,在這兩個禮拜中,除了處理老家電腦外,其實開發的速度不錯,很快,並且可以把原先 PHP + HTML 的呈現方式,一口氣抽開,感覺類似變成簡潔的 Model-view-controller


簡單地說,PHP 用來處理資料,JS 用來呈現 User Interface(UI) ,這當中的資料傳遞則使用 JSON 格式,省去 UI 層額外處理資料的動作,接著搭配 Jquery 功夫,輕鬆地完成任務。


上頭所提到的 PHP + HTML 的意思,就是傳統上用 PHP 來取資料建出 HTML 網頁呈現的過程,基本上是非常夠用的架構,只是若要在使用者介面上加上更多便利的操作,這時就會加入 Javascript 的應用。在 PHP + HTML 的開發過程中,若不使用 JS 的話,當想要提供多變化的應用時,就會開始出現很多越來越冗長的程式碼,例如為了某個效果就必須為此產生新的網頁結果,儘管那只是為了一個小小的片斷程式碼。大概是幾乎沒用 JS 實作,自己在開發 WebMail 上,十足吃了許多苦頭,明明功能都做出來,但因為功能太多搞得使用介面不好看,程式碼雜到讓人無法專心處理 UI 設計?然而這種厭惡感不斷地蔓延下去,不曉得這是不是浪費一年的藉口?anyway,下面就記錄一下這陣子用 php <-> json <-> jquery <-> html 的心得吧!當個筆記囉。


以下[舊式處理]是指我自己以前的寫法,[輕鬆用法]是現在的寫法。



  1. PHP 與 JS 溝通

    • 舊式處理:以前未使用 JSON 格式時,我曾寫過一些 PHP 跟 JS 溝通的方式,那時不外乎讓 PHP 產生 JS code 在網頁上執行,例如 <script> var hello = '<?php $world;?>'; </script> 。當大型資料要傳遞時,就顯得非常麻煩,甚至把資料格式抽取的部分擺在 JS 處理。

    • 輕鬆用法:當使用 Ajax 後,可以讓 PHP 把待輸出給 JS 的資料使用 JSON 格式封裝輸出,除了降低 PHP 的程式碼外,在 JS 這端接收後也省去處理資料了!類似在 PHP 是 array 了,那封裝過後丟給 JS 時也可以輕鬆地用 array 方式操作!



  2. 流程掌控

    • 舊式處理:原先在 PHP 產生 HTML 時,大概是使用某個參數來控制,例如 state=init 代表一開始,這樣的缺點是每當 state 改變時,就是要重新產生一個 HTML 資料,當 state 變化很大且有多個變數時,將導致 PHP 與 HTML 程式碼非常冗長且重覆。

    • 輕鬆用法:使用 JS 時,可以很輕易地用某個 global 變數紀錄 state ,並搭配 Ajax 來存取資料,這樣的特色可以讓 Server 專心在 PHP 處理資料的變動,然後用 JS 來處理使用者端的畫面呈現,在程式碼上可以減少非常多,幾乎不必 PHP 跟 HTML 夾雜再一起了,在寫 JS 時,便知道此刻正專心處理 UI 部分,寫 PHP 時就知道正在處理資料部分。



  3. 加速 JS 建 UI

    • 舊式處理:以前把所有 HTML 的程式碼的部分,例如一整個 table 等,完全用 JS 的 document.createElement('table') 來建立與搭造,這部分雖然比用 JS 切資料來得快了,但也會佔了不少 CPU 資源。使用 document.createElement 的主因之一是為了要設定事件,我記得以前若直接用 obj.innerHTML = '<span>...</span>'; 等方式,印象中將使得 innerHTML 裡頭的部分無法使用事件?!

    • 輕鬆用法:掌握 Ajax 的精神,把主體的 HTML code 用 PHP 產生,並且在一開始就設定好事件,接著當資料進來時,用 JS 去處理,把真的需要更換的部分更新就好,可以大量降低使用 document.createElement 的機會,因此就能提升速度囉!



  4. 善用 CSS 的 class

    • 舊式處理:以前真的只是把它當作顏色版面的使用,雖然知道先後使用的覆蓋問題,但也僅此如此。

    • 輕鬆用法:<span class="init_state next_state"></span>,這個用法,可以讓 span 擁有兩個 class ,並且讓 next_state 去覆蓋掉 init_state 的設定,如變換背景顏色等。假設要做一個選單,想要區分誰被選到,誰沒有被選到,此時就可以利用這個技巧,讓沒有被選到的維持 <span class="init_state"></span>,被選到的則會變成 <span class="init_state selected"></span>,這部分操作會透過 $('#item').addClass('selected') 或 $('#item').removeClass('selected')。一來可以在 selected 上做顏色的變化,二來搭配 jquery 的 $('#target_children').hasClass('selected') 也能區分出有沒被選到,甚至可以一下就用 $('#target').children( '.selected' ) 取得那些被選到的,或是用 $('.init_state:has(.selected)') 或 $('.init_state:not(.selected)')  等應用。這是一個十分方便的事!大大降低程式碼!



  5. 按鈕的事件設定

    • 舊式處理:傳統上使用<button onclick="doing('type');"></button>設定,當有一堆類似的 button 時,這種寫法會很冗長。

    • 輕鬆用法:搭配 CSS 的 class 和 jquery 的特色,可以讓一堆有類似事件動作的按鈕作成這樣 <button class="btn" value="type1">type1</button> ,接著一開始用 jquery 來初始化 $( '.btn' ).click( my_action ); ,最後function my_action(){ var type = $(this).val(); switch( type ){ .... } } 就行了!從頭到尾只需要去維護 my_action 的設定,而 button 新增也很快速,真是太方便了!附帶一提的,目前我是用 juqery-1.3.2 ,發現 Firefox 3 跟 IE7 的 $( '按鈕' ).val() 取到的資料不同:<button value="Firefox3取到這裡">IE7只能取到這裡</button>,使用上需留意囉!有時還得搭配 $(this).text() 處理喔!




上述是這近兩週的使用心得,扣除整理電腦的部分,或許只能稱得上一週吧?對我而言都是挺新鮮的!我甚至都不敢相信,竟然這樣就做掉以前純用 PHP + HTML 做的事了,至於效率上頭,目前感覺還 ok 囉。由於是在做 WebMail ,我會參考 Gmail 的狀況,我覺得差不多啦,感覺 Gmail 好像也是把 UI 的事丟給 JS ,在換頁時可以感受到 CPU 的吃重,相對上 Server 會輕鬆許多吧。


有機會一定要試試 jquery 啦!若有更多 UI 上的需求,也可以試試 The Yahoo! User Interface Library (YUI) !目前 jquery 對我已經非常夠用了!


2009年4月26日 星期日

邂逅過去

上週五,趕上某班車,到台中聽聽行政院勞工委員會主辦的創業鳳凰 2009 年創業諮詢輔導服務計畫。原先只是為了帶著兩條有點怪怪的記憶體,想說結束後順便去 NOVA 更換,但沒想到在這就耗了三小時。


我仔細回顧這個計劃,此計畫的原意是要給那些女性或婦女為主的創業機會,從 2007 年就開始辦了,政府給她們一生一次貸款創業的機會,用意真的不錯,只需要推薦人不是保證人,推薦人只是用在人脈上而不是金錢上的問題。這個活動只是序曲,接著想貸款的還需報名參加進階班,並上課數天,透過從中的全程參加學習,可以領到證書,以這個證書為基準,才可以申請創業貸款,當然,會不會過是另一回事,但最重要是有這麼個機會學習,這些課程最後是以創業規劃為主軸的,包括撰寫計畫書等等,整體上是以合夥的方式進行。


這次主講人是彭先生,我覺得從中獲得不少資訊,過去我也曾稍稍寫過一份計畫書,但直到今天聽講師更仔細地講解,才發現自己過去真的沒有考慮很周密,主要概念會以六個月來觀察,最重要的還有資金規劃與使用,講課中所分享的統計資料很有參考價值,只是講師真的講得很快,有種感覺就像當年大二去修蔡神的計概一樣,自己稍有底子都有點吃力。總之是個不錯的經驗,至於未來會不會報名參加進階班,我想,時間上可能不怎允許。論文還是很重要的。


隨後五點多就去 NOVA 啦,原本很期待可以直接換新的記憶體,沒想像對方也沒現貨,雖然可以免費送,但還是得到 NOVA 才能領,再加上對方跟我說,我的情況可能連送回的新品也一樣,導致我也不想再多跑一趟了。比較特別的,結束這些事後,我買了筆電了,還真多神奇快速的決定。


買筆電的事我考慮很久,因為覺得自己不會很常用到,甚至有人跟我說未來的工作單位還可能會發給員工一人一部。至於最後的決定是基於家人也可能需要使用,那就買吧!當然,目前我打算擺在家裡用的,並且挑一台舊主機回宿舍。選擇是 Acer 的品牌,原因不是王建民,而是 Acer 維修點很廣,舉凡嘉義、雲林斗六或台中都有,十分方便。至於殺價的過程中,其實我不是很在行,因為我真的對筆電不熟,若是買主機內的東西都還可以,但筆電就真的不行,只能說最後還算買的高興啦。


回家馬不停蹄地重整,把內附的一堆試用軟體或遊戲清乾淨,甚至店員好心的優化我也不要,理由是學習與習慣還是從頭開始吧!慶幸的,爸媽使用電腦的模式以逛網頁為主,我只需要教導如何開機關機跟上網就搞定了!面對新的系統,最難適應的反而是熟悉舊系統的人。


隔天又接著整理舊機器,卡了真多灰塵,慶幸有買 Y-500 散熱膏,因此就開始打掃主機的工作。這台要帶去學校的舊主機是 ASUS A7V8X-X,它有個怪問題就是一開機想進 BIOS 還得算時間按鍵盤,後來發現新版的 BIOS 有解決這問題,當下解決完真的覺得程式要好好寫,才不會誤人時間啊,在拿出軟碟機處理時,意外從磁片中發現老妹大一的作業,更回想起以前,我也是這般用軟碟機存資料的!只是大學網路很快且方便,最後根本不需要軟碟機,但直到老妹升大二還大三時,才買了一條 256MB 的隨身碟,當時記得是七百元吧。這些回憶有些心酸,但都過去了,我也深信未來越來越好。


細細回想,從以前至今共買了六台電腦,分別是國小六年級 P-100 的 586 大眾電腦,接著國一還國二 P2-200 的電腦,我記得當時我最常玩的是太空戰士七,接著好一陣子沒買電腦,直到我升大二轉系時才託高中同學,還在他家打擾一夜,請他教我組裝電腦,那台是 AMD 1800+ 囉!只是這台主機在我碩一上時再起不能。後來老妹升大學時,買了 AMD 2200+ 的電腦,這台也就是這個週末我在整理的主機,接著是大學專題買的 AMD Sempron 2600+ ,然後是碩一上 AMD2 4000+ ,最後是週末的筆電。我還滿喜歡用舊電腦的,畢竟自己算是家裡比較懂電腦的人,所以我很習慣帶走最舊的電腦。很巧地寫程式要拼效能,這種效能的感受在越舊的電腦越明顯。


除了上述外,大學同學也送我一台主機,我記得是 P2-450 的,只是沒多久就壞了,隨後我買了舊板子,組了一台 AMD 1200 的主機,這台就是我碩一上頂替 AMD 1800+ 的主機,只是一兩個禮拜前它已經有點殘喘了,這也是買新電腦的主因。似乎從 AMD 1800+ 之後的電腦,慶幸地都是用打工賺到的錢買的,每一次買了新電腦後,下一個意念就是要把這筆開銷賺回來,哈,隨著年紀的增減,這種想法沒有間斷,只是掙的錢已不能只考量在電腦上的花費了。


機器都重整好,心情自然而然就越來越好!昨天跟女友講了電話,彼此鼓勵,現在正要好好努力地為自己的足跡加油,儘管未來的成敗難定,至少要相信自己此刻的努力,不要辜負前一刻的自己。


2009年4月17日 星期五

尋找步調

20090124 - 撒嬌


週末,臨時要 meeting ,所以待在學校。有一陣子沒在學校渡過週末了。其實我還滿想回家的,不知是習慣呢,還是想看看家人呢?前陣子我在網誌上留上了家裡小狗的照片,說真的看了幾眼後,有種想回家摸摸牠的衝動。上圖是一月底在家亂拍的。


昨天 meeting 完跟實驗室的同學去吃了宵夜,然後有位朋友就請我喝啤酒。不多不少,300cc左右的可樂罐大小,我就有點兒醉了。彷彿喝了兩三年,甚至五年份的酒。其實,我不喝酒,更不戀酒。


今晚吃便宜的素食自助餐後,晚上就去跑操場運動,不曉得是不是太早跑,還是週五的關係?七點左右,操場上的人不到十位吧,在跑道上跑步的,加我可能不到三位。很巧地可以靜靜地用自己的步調跑步。


記得前幾天有填一份問卷,上頭提到了學習的方式,有個問題是在問有競爭的學習環境,我不太記得最後的結果是比較多人喜歡競爭還是反過來,只是很巧地此刻我回想了這題,我的答案是喜歡競爭的。


然而跑步方面,平時人潮多的時候,我卻跑的少,我想,這個原因是受到別人的影響,或許是說,彷彿追尋著別人的腳步就能進步似的,沒想到今天自己真的靜下心去跑的時候,可以多跑兩圈,甚至還可以繼續跑下去,但覺得一下多太多會傷身,便也作罷。


每個人的學習步調是不一樣的,往往在現實生活中常常被壓力趕著跑,我想,那不是不如別人,而是真的還沒找到合適的步調!這些感觸都讓我想到很多事,像自己唸碩班的心情或是尋找研發替代役等的。


其實,在操場上運動的,不只有跑步的人,還有快走、散步聊天的,我覺得那些人已好好選擇了自己合適的方式,不是跑步是最好,更不是快走就不如跑步的。


這陣子我常問自己,到底在追求什麼,到底什麼是幸福呢?或許這些答案正在未來的三年等著我探尋,現階段最重要的,持續地尋找合適的步調,儘管偶爾仍會追著潮流,但千萬要好好珍惜自己已擁有的,過去,一定有其存在的道理跟價值,不要看貶,更不要好高騖遠,將生活中的每一步好好地走下去,一定會找到屬於自己的那條路。