2004年12月15日 星期三

電腦遇難記....我的硬碟..

今天早上天氣很好,
邊吃早餐邊看UDN News,奇怪螢幕不動了..只聽到桌下的電腦硬碟嘎之嘎之的響
心裡一陣莫名恐懼..這下大條了,立刻關掉電源,等了一下,再啟動,還嘎之嘎之的響,我看是真的完了,
趕緊去借了螺絲起子,拆硬碟下來拿到別的機器上做測試,打開機殼一看,硬碟根本就拔不出來
IBM 6824-P8V主機,光CPU風扇就把硬碟抽取的空間卡死了,怎麼把硬碟拿出來?難道要先把CPU的風扇都卸下嗎?
看樣子也不是,拆了CPU兩根大螺絲,就是一點都不為所動,折騰了半天,投降了,找人問吧...
原來答案就是,先將CD-ROM卸下,再把前方面板掀開,就可直接由前方抽出硬碟了..太久沒組裝電腦..不知道現在都長成這個樣子
把硬碟掛到別的電腦上,BIOS還是抓不到,再試著進BIOS自己把磁軌資料寫入,還是不行,看樣子真的沒救了...我5年的資料.....
只好乖乖的找一顆空的硬碟裝到電腦上,開始重裝系統,直到現在算是把該用軟體與server都搞定,
還在想如何救原來硬碟的資料,打電話問同學,說把硬碟拆開(這樣ibm就不保固了,自己要認賠一顆)..裡面的皮帶與線路調一下
bios可能可以抓到..再趕快copy出來,聽起來難度頗高,那給人送修呢?MIS給我一個資訊,救1Mb200塊...天哪 ,我裡面資料至少20G
真的還假的......趁IBM維修人員來換硬碟前,再想想吧
第一次硬碟掛的這麼慘,以前Seagate硬碟掛掉都還有些徵兆...唉...哀....

2004年11月29日 星期一

The Innocence Mission 等3張CD入手

暨上週六在合友買了Bossa nova Dream Pop 2005選集後,就想著要去把裡面的幾張專輯敗回來,
聽Loou說本週進的六張在大眾玫瑰就有進,也就不用再跑到敦南誠品找,騎著摩扥車到最近的公館玫瑰。
二樓前衛花園的試聽架上,果然全部都已經發行了,雖然出門前已經想好買哪幾張,還是戴起耳機,對架上
的CD逐一試聽,代理的幾張來自西班牙CD,讓自己會忍不住下手採購,最後還是先買了計劃中的3張

圖片引用自AllMusicGuide
Hope Sandoval & the Warm InventionsBavarian Fruit Bread專輯
在收齊了Mazzy Star的各張專輯,卻因為只有3張而覺得有些遺憾,早期的opal作品在網路上亦是難找,
只有這張Hope Sandoval個人專輯與EP,算是在網路上可以很容易的購買,買這張是真的很划算,與直接
向Amazon訂進來,至少也省了200塊,且這次的發行版本還附贈一張Bonus CD包括了"At The Doorway Again"與"Suzanne"兩張EP的內容,實在是太值得了!!


圖片引用自AllMusicGuide
Camera ObscuraUnderachievers Please Try Harder專輯
是在選集中除了the innocence mission外,另一個非常喜愛的聲音,現在這張CD這躺在我的Player內撥放著


圖片引用自AllMusicGuide
the innocence mission Now the Day Is Over專輯
在聽過the innocence mission的500 miles後,我想這個月,他的音樂都會一直在我身邊出現

>>歌曲播放-<<


>>歌曲播放-<<

2004年11月28日 星期日

8月的兩場音樂手記

今年8月一連兩天聽了兩場音樂的隨手紀錄

星期六晚上去聽巴奈和葉樹茵
認識葉樹茵的歌是在大二的時候,很喜歡他的子夜歌,當時還抓下譜來彈
第一次看到他本人,覺得好像跟在學校時的感覺一樣,一點都沒有歲月的痕跡
唱起歌來,那聲音似乎並沒有因為社會的變化而改變
他唱歌的時候,台下還是很多人在聊天說話,沒有注意到他已經開始唱歌,
唱了幾首歌,都是他自己的創作曲,中間唱到一手"非常屬於我",他說,這是他自己寫的
第一首歌,以前一直唱別人幫他寫的歌,後來他強迫自己寫歌,就這樣把這首歌逼出來
後半場,他所唱的是他嘗試去寫電音方面的音樂,這時候所有的樂手就都收工了
只由PA播放電子音樂搭配演唱,最後,清唱一首"傷心無話"台語歌,是在抓狂歌專輯裡的,
他也是因為唱這首歌踏入音樂界,對他是很重要的歌,整體來說,表現普普,喜歡他的聲音
但整個現場與樂隊的協調度默契沒那麼好,且用了一些電子音樂,PA做的不是很好
接下來巴奈上場了,就看他一個人上台,開始調音,吊嗓子,台下一遍寧靜,顯然今天大家是來聽巴奈唱歌的
他輕輕的唱著"ㄏ-嗨-ㄟ-呀 依呀ㄏ-嗨呀 依呀ㄏ嗨呀" 一遍又一遍,慢慢把key升高,也漸漸大聲
這時台下大家已經輕輕的跟著合起來,這時巴奈說了一句"今天都沒有認識的朋友來喔"
這時大家就放大聲跟個合了起來...很棒的感覺,光是一個試音已經把全場的情緒帶了起來,
接下來他說,有人點第一張專輯的歌,他說要選兩首比較悶的歌來唱,自己一個人在台上接近清唱般唱完,
接下來唱一首老歌"但是又何奈"唱完第一段,就叫bass手與keyboard趕快上台,接下來加入了BASS與手鼓
音樂也變豐富了,唱完後,巴奈說今天很想站起來唱,然後呢,3個人就都站起來了,接下來整晚到ENDING
都是唱著原住民的歌(還有唱..台灣好..),顯然今天巴奈的心情相當好,唱的開心也講了許多原住民歌的歌詞內容

星期天晚上到國際會議中心聽STEVE VAI,場地,比國父紀念館大的多,算算應該有2500個座位吧,
今天滿場,可以看到許多國內的樂團樂手都到了,今天這場確實是比較不一樣
樂團成員包括地表面最強貝斯手Billy Sheehan與吉他英雄Tony MacAlpine等人,
進入會場,看到舞台上的裝置相當簡單,音箱,鼓,麥克風,完全沒有其他多餘的裝飾品,
只見燈光一暗,熟悉的吉他聲響起,表演就這樣開始了,開場歌曲,竟然是由Billy Sheehan所演唱
第二首歌Tony MacAlpine才加進來,這場表演,鼓手+貝斯+3個吉他手,其中Tony MacAlpine還負責KEYBOARD
這是一場嘆為觀止的表演,我想接下來的幾年內,能有這麼多超高水準樂手一起演出的機會應該很少吧!!
表演中當然STEVE VAI是最受矚目的,不過Billy Sheehan與Tony MacAlpine也是超強人氣,
看到Tony MacAlpine的超速彈外,還看到做KEYBOARD SOLO,原來他是KEYBOARD手出身的,
Billy Sheehan的BASS SOLO,鼓手 SOLO,都讓全場驚叫連連,
中間STEVE VAI還唱了JIMI HENDRIEX的歌,大家都從椅子上跳了起來,
重頭戲FOR THE LOVE OF GOD,由KEYBOARD將旋律前奏帶出來,完全不同於唱片裡的編曲..超感動呀...
整體來說,這是場超水準的演出,因為所有的樂手都太強了,STEVE VAI對聲音的處理已經到了出神入化
的境界,很難想像他會有什麼聲音做不出來...啊...現在想起來都很HIGH

10月有一場Geoge Lynch(DOKKEN吉他手)在THE WALL要開吉他講習,不知道會不會帶著當年那把
ESP 神風吉他來呀.....

發現一張好聽的唱片

上星期六跟朋友到光華商場,本來是跟他要去買"阿甘正傳"電影DVD,找了幾家都不便宜,
到合友看看,記得有些特價片,注意到正在撥放的音樂感覺很熟悉,主唱與背景吉他
都有Mazzy Star的味道,刻意的刻意的停在裡面聽,越聽越像Mazzy Star那般夢幻飄渺的音樂,
接著聽到的下一首音樂立刻讓我衝去櫃檯詢問,...居然有人可以把離家500哩做成這樣的味道,太棒了,
而且這張居然只要65元,還以為只是單曲,一看,滿滿16首歌,二話不說當然直接帶回家,
拿回家聽了一個晚上,聽說這張選集內的幾張專輯,下禮拜就會發了,準備去敗個幾張回來
自己在聽的時候感受到的就是一份幸福的感覺吧!!
整張的Bassa Nova與Dream Pop,適合自己一人閱讀與聆聽,...舒服的讓人覺得世界是如此美好..

Bossa Nova 2005 Dream Pop-the Music from Beautiful Angels--前衛花園發行

Flash遊戲程式設計

許多程式技巧,其實只要有人點你一下,可能就讓自己立刻有很大的改變,
以下這篇也許可以讓即將跨進Action Script中級班的同學,有些小小的幫助吧!!

本文於2004/8/28發表於神魂顛倒論壇
一.變數管理
製作遊戲時所要用到的變數相當的多,好的變數管理與命名,通常會讓你對
整體有較好的掌握,特別是在執行大型遊戲時特別有用
舉例來說當要寫一個馬力喔兄弟的橫向捲軸遊戲,遊戲中可能會有幾種物件
主角:character
敵人:enemy
背景:bg
對於主角你可能需要設定座標(x,y),移動速度(speed),目前生命值(life)
對於敵人你可能需要設定座標(x,y),移動速度(speed),型態(type),運動模式(motion)
整個遊戲做下來會有相當多的變數,如何讓這些變數的關係清楚,且讓自己很容易了解自己的
變數設定?使用object來管理是個很好的方法
game=new Object();
game.character={x:10,y:10,speed:5,life:5};
game.enemy={x:100,y:100,speed,type:2,motion:2};
這樣就可以很清楚的把遊戲內容結構做出來
更方便的是,當你在遊戲結束要把所有變數初始化時
只要再
game=new Object();一次
就把所有變數清乾淨了,完全不需擔心那些散落的變數值沒被初始化

二.表現層與程式運作分離
在執行一個遊戲的設計專案,通常在進度壓力下,是需要程式設計與動畫設計師
分開進行的,要如何讓兩者的工作切分清楚,同時並行,畫面與程式分離是相當重要的工作,
1.首先在進行coding,將程式寫在as檔內,利用include方式來進行
這樣做法對於程式設計師與動畫設計師分隔兩地作業,是相當方便的做法,
通常完成fla檔若含有聲音檔,檔案就是幾Mb的大小,當有一小部份要修改
就要幾mb傳來傳去,是非常沒有效率的,若寫在as檔內,更新程式,只要將更動的as檔(只有幾k)
寄給動畫設計師,重新compile就可以了,至於as檔的編輯,個人建議可以使用UltraEdit,
可以上ultraedit網站下載WORDFILE,有支援到as2.0,我是覺得相當好用
2.儘可能將用來呈現畫面用的程式碼,與與程式中核心運算演算分離開來
好處是寫好的程式以後的再利用性高,只要修改表現層的東西即可,
當然,如果能用as2.0的class來寫更佳

三.避免使用_root
使用_root是很方便的寫法,但當有一天你所有的遊戲需被其他程式載入,做特別控制時
_root很可能就會出現問題,當然在2004已經有rootlock指令可用,但良好的寫作風格
還是可以幫自己避免很多問題,那如何避免_root呢?使用_global是很好的方法
_global.gameRoot=this;
多加這一行,只要在需要用到_root的地方就用gameRoot取代,這樣是不是就很簡單

四.範例
以下是一個計數器的示範
1.一般寫法:
呼叫counter_start()即啟動計數器,呼叫counter_stop()即停止
數字內容呈現在
Stage的Dynamic txt(變數txt)上
//-------------------------------------------
function counter_start(){
counter_start_id=setInterval(sub_counter_start,1000);
}
function sub_counter_start(){
_root.txt+=1;
}
function counter_stop(){
clearInterval(counter_start_id);
}

2.表現層與執行程式分離
呼叫counter_start()即啟動計數器,呼叫counter_stop()即停止,數字內容呈現在
Stage的Dynamic txt(變數txt)上
//-------------------------------------------
function counter_start(){
counter_start_id=setInterval(sub_counter_start,1000);
}
function sub_counter_start(){
game.now_time+=1;
counter_show();
}
function counter_stop(){
clearInterval(counter_start_id);
}
function counter_show(){
gameRoot.txt=game.now_time;
}
_global.gameRoot=this;
game=new Object();
game.now_time=0;

以上兩段程式碼做的是相同的事情,但是似乎第二種寫法看起來反而較複雜,
通常在遊戲裡寫出來的程式碼是多很多,
當要將這計數器移殖當別的程式時,所要改的東西只有在counter_show()內
其他都可以不用再去看(有時寫了很多程式碼,自己要回想都有困難)

2004年11月27日 星期六

Flash遊戲程式規劃

玩Flash大概5年的時間,遊戲程式設計,也是現在最常做的事,
一樣的工作,每做個專案,就要想一次實在很累,怎麼讓自己的流程制式化?
先把現在的想法寫下來,也許明天又會有更好的想法也不一定

以下原文於2004/10/1張貼於神魂顛倒論壇
Flash遊戲程式規劃

在拿到一個遊戲的企劃案時,先分析遊戲中需要的程序與物件有哪些
什麼要開發成物件class?只要是再利用性高,且可獨立寫成"獨立物件'的就可把他寫成class,
1.物件的部分
如果可以完整獨立出來,就寫成class,譬如說,計時器,人物血計量表,亂數產生
器...,你可以考慮是否把判斷,或運動引擎也包含在class內,
舉個例子說,你的計時器可以是很單純的計時器,有啟動與停止功能,想知道現在計時器狀況
就判斷他的status變數,至於時間到要做什麼處理,則不管,這些處理程序,由遊戲中的程序
自己依計時器的status變數判斷自時處理,計時器自己只負責計時功能,另外你也可以把
callback功能定義在class內當class的method..當timeout,他會自己啟動

2.程序部分
就依遊戲不同,內容設計,以結構來說簡單你可以定義幾個function
init()初始化所有變數與物件
game_start()遊戲開始所要執行的事,譬如讓運動引擎開始跑,listener開始運作
stage_check()用來判斷目前關卡狀況
stage_finish()完成該關卡所要執行的工作,像成功過場動畫..,呼叫game_check判斷整個遊戲是否已經完成
stage_over()關卡失敗所要執行的工作,像失敗過場動畫..
game_check()判斷整個遊戲是否已經完成
game_finish()整個遊戲完成,成功所要做的工作
game_over()整個遊戲完成,失敗所要做的工作

3.詳細需求清單
在完成以上規劃,接下來就需要一份清楚的遊戲內容清單,包括

1.所有變數列表
可以讓你很清楚紀錄遊戲結構,譬如
game.counter.total_time:設定計時總時間長度..

2.實體instance列表
這是給設計人員看,才不會漏掉動畫沒做到,譬如
開場動畫
過場回饋
xx人物

3.聲音物件列表
聲音物件的控制,全部使用new Sound方式產生,這樣才方便做控制,這清單也是便於把所有
聲音資源整理清楚

4.Depth列表
把物件設定depth做一列表,以避免在設計時,設定錯誤讓一些物件跑不出來

在完成以上,基本上分工就已完成,程式人員即可分工各自寫所負責的class與程序
設計人員也可開始進行設計與聲音處理,在大家的工作完成後,其實整合的時間就不需要
很多即可完成