Google+ Followers

2009年3月28日 星期六

HitFM 年度百首單曲榜

台北之音 Hitradio & HitFM 年度百首單曲榜


幾天前發現 HitFM 年度百首單曲,從 2002 年開始聽到 2008 年。六年,說長不長,卻也足夠讓一位學生唸完大學加碩班了。


很巧地,我發現每年的前三名離不開周傑倫或蔡依林,偶爾該年第一名不是他倆的,就一定會舉足輕重的人,例如楊宗緯。另外,看著這幾年的來去冷熱,有些歌手轉型類,有些單飛,沒想到加上時間去看待這些歌單,有淡淡陳年味。


聽著這些歌曲,回想起大學休閒的時光,像日劇、韓劇、甚至電影的主題曲,我幾乎都是因戲才會細細品味歌詞,影劇真的影響情緒很大。


最後,前幾天和老板 meeting ,當時有個話題,從搜尋引擎的查詢記錄也能輕探景氣,甚至 Spam Mail 的量也行!像是專門做 B2B Search Service ,在經濟波動時可以從查詢關鍵字的資訊得到回應,在垃圾信方面,當景氣不佳,聘請傭兵發垃圾信的量也就降低不少!回歸主題,看著每一年百大的歌單,就像是起起伏伏的縮影,沒什麼好與壞,只剩回憶了得。


 


2009年3月27日 星期五

富裕與貧窮

上週返家等車時,在便利超商翻了幾本雜誌,其中有個篇幅,大意是提到關於從富裕生活出身的小孩與貧困家境成長的小孩,兩者在外頭工作能力與心態處理。簡單地提到對於富裕小孩,可能相對抗壓力較差,以及過於樂觀;相對地,貧困小孩相較之下,抗壓強,但在心態方面,反而容易悲觀處理,使得壓力不斷地累積。


我覺得這段話挺有意思的,我恰好處於這兩者的中間,更可以說剛好體驗過兩邊的生活。


記得我在大學以前的生活,生活較充裕,面對未來的生活十分隨性,連指考也都非常隨性。記得國三至高三的生活,還花不少時間在網路上閒晃,或許是當時養成的生活態度,造就自己不嚴謹的求學心態,影響的層面還不小,簡單地舉例,像我的英文就非常偷懶沒學好。除此之外,在大學修課的態度也相較懶散,不少次只要能過就偷懶。


回過頭探討心態部分,我覺得富裕的生活真比較容易帶來樂觀心態,沒有生活上所謂的重擔,相對於事情的處理,有時容易過早放棄或是不負責,這些事會讓我想起為什麼外界總對七年級生標上草莓的字樣,只能說大部分的七年級生活相較於五、六年級刺比較不用擔憂的。


對於貧困的人,錙銖必較,帶來著不能失敗的壓力,往往成效不錯,卻也容易過於悲觀或保守。雜誌後面的建議恰好跟我自己的體會很像,將這類思維轉換成謹慎的規劃,只是,相較於少了霸氣,有時真的會花費比較多的時間。


另外,曾在某位學長的簽名檔瞧見:「有錢的小孩,什麼都比較會。」我覺得也挺對的,就拿資訊科系,不少人是因為家境關係提早接觸電腦,因此比別人早學,但也不用過於擔心,也存在不少強者是高中或大學後才掘起的。整體上因為資源較多,所以接觸與學習的機會廣,是不變的真理。


最後,反觀這個主題,其實富有和貧窮,並沒有什麼真正的贏家,反倒是好好地訓練自己,富裕時廣泛接觸,貧困時擅用有限的資源,也都將存在漂亮的成果!真正影響的還是個人思維,適時地給自己規劃、努力和不放棄的勇氣吧!


2009年3月20日 星期五

瞎忙的 External Sorting 經驗

什麼是 External Sorting 呢?一般寫程式會用到的 Sorting 不免是 Quick Sort、Merge Sort、Heap Sort 等,除了自己使用外,連同各大學出的作業,多是 Internal Sorting


簡單地說,就是把資料都紀錄在記憶體中,然後進行 sorting 的方式,都叫作 Internal Sorting 。至於什麼是 External Sorting 呢?就是當所有資料量大到全部無法同時擺在記憶體中,這時又想 sorting 時,就會用到的處理,便是 External Sorting 。


至於怎樣實作,很簡單,三個概念:



  1. 取部分資料進記憶體中

  2. 將記憶體中的資料進行排序,把結果輸出至檔案

  3. 不斷地進行 1~ 2 直到資料全部弄完。最後,將上述產生的多筆排序好的資料,進行合併的處理


假設現在有 1000 萬筆資料,且記憶體容量一次僅能處理 100 萬筆的排序工作,那就會分 10 次做排序,每次從原始資料拿出 100 萬筆出來,將之排序好後,輸出至檔案。經過上述的部分,最後會產生 10 個檔案,其各個檔案就是子部分已排序好的資料,最後,將這 10 個檔案內的資料進行合併。合併的方式,最簡單的是每次取兩個檔案,依序把資料排序與輸出。經由上述的步驟,直到檔案只剩一個。最後的檔案,就會是 1000 萬筆已排序好的資料。


這邊會用到的技巧就是使用 heap tree 。當然,效率上的追求,更可以 10 個檔案一起合併囉。這邊就是常說的 k-way merge 的技巧,也不難。


原先預定用 C 語言,三天解決它。結果前三天都在偷懶,每天大概寫 2~3 小時,結果最後開始要 merge 時,犯了一個錯!最後多花了三天進行 debug 。我犯的錯就是忘了簡單化以及過急著最佳化。這三天寫了三個版本,因為寫得過程中發現速度很慢,然後處於存在 bug 的情況下進行架構的調整,使得各個單元皆可能存在 bug ,導致 debug 時間成指數成長。彷彿從大學至今,還沒有 debug 這麼久的!最後直到最後一天,我才完成了一個沒有錯誤的版本,真的很累。


至於效能上,依週遭同學的實作經驗,基本上 sort 部分跟 merge 時間差不多才是好的結果,當然,可不行都很慢!當初,我的 merge 時間已經是 sort 時間得幾十倍,然而,我開始質疑自己的架構不夠快,因此重構,儘管重構兩次,結果仍一樣。直到最後一天所有的 bug 都解決後,洗澡時我才想到,原來我真正慢的地方是切資料的動作。後來,同學以 VS2008 的工具觀察,的確有百分之六十以上的時間會花在切資料,完全跟我想的 match 到!更加確認自己犯的最大的錯。


這次實作經驗,反而沒有替自己掙些自信,倒是重重地在自己的腳上砸了個大石頭,真痛!經過此次經驗,順道消消自己銳氣。過去還滿自信自己工作的實作效率以及成果效率的,但這一步退後又看得更遠,收穫也挺不少的。未來啊,又得回歸個人工作囉,時間得擺放在最重要的事物上了!


2009年3月13日 星期五

[寵物] 博美狗 氣喘


我家的小狗,大概養了兩年多了,博美狗。有時候跟牠玩得很高興時,牠總會發出一種似不連續的嘶吼聲,以我小時候在外頭跟那麼多野狗對抗的經驗,那種感覺像似野狗聲氣裝聲作勢的聲音,但情境並非如此,為何會有這樣的現象呢?


除此之外,今晚我家小狗又氣喘了,其現象就像這篇文章中的影片:[子] 有氣喘。雖然我們家人下意識都稱這個現象為氣喘,但我並不希望這真的是氣喘。其實這個現象已經有好一陣子了,只是我一直真的沒很嚴謹地看待,這次安撫過後,花點時間查資料吧!


透過一些關鍵字的查詢



有以列類似可參考的文章



另外,我看到一些需要非常謹慎看待的文章



由於我對這仍非專家,僅呈列找到的相關資訊,對於這些狀況,最好還是帶取給獸醫看看囉!(我家小狗比較像吃東西吃太快了,每次總覺得有人會搶牠食物似的)


[電影] 女孩請給我啪嘶

官方部落格:http://www.wretch.cc/blog/thelibrarian
預告片:http://www.wretch.cc/blog/thelibrarian/20754692


03/12 原本是實驗室固定的 Meeting 時間,晚間五點半,正當我們訂完便當,想說這次懶得出門,在實驗室吃一吃就能安心上路?呃,可以接著晚上的 Meeting ,約莫六點,老板走進來,第一時刻我正拿著錢以為是送便當的來了,最後,老板說今天不必 Meeting ,要大家去看看這部電影!因為,電影的成員恰恰好有幾位大學專題生!老板在實驗室跟大伙閒聊近期的規劃,我也把握時間嗑掉便當,趕在 18:30 前到了活動中心,只是,我還沒回過神,已看到長長一排的人潮,是的,大家趕著參加"女孩請給我啪嘶"的首映!


這部戲對我有很多共鳴,無論是劇情或是劇外那些努力拍片的志工,在此不討論劇情細節,留給其他人賞味的機會。


以劇情的延伸來說,大學不是在中正唸書的,剛到中正時,存在極不適應的環境,那就是女生太多了!我從國中起就待在男女分班的世界,上大學以為會好一點,可惜的,大學的應該也接近男女分班吧 XD 因此,第一次到中正時,還不太能適應男女比例較平均的環境,當時我就想了個問題,如果對於異性,扣除掉外貌後,到底還會有什麼令人想去認識的動力呢?很可惜,我還沒找到。在中正的時光,除了實驗室及修課會認識的外,我沒有認識其他異性了,算起來應該有大學多一點人,但加一加仍用不到十隻手指。


除了上述的體驗外,我碰到了一位高中學弟,他恰恰好這次劇組人員之一。


這位學弟是實力很堅強的,大二就修大三的課,所有的課程對他來說幾乎是用輕鬆兩個字,瞧見他的出色,我非常想介紹給我老板認識!因為這類人更需開導,不然容易走偏?透過一些極簡的生活分享,希望他能看到更遠的地方,所幸,幾個月前,我終於介紹他給老板認識,並且加入專題活動。


每次瞧見他為青春拼血汗時,讓我常常省思自己,發現過去的自己雖然本錢較少,但真正缺乏的是霸氣。這次拍片後,他發現自己想致力於藝術,也體悟出現況所學的,僅是工具,我覺得自己比他晚兩年體悟,當我有這樣的感觸時,我已經大四了,當時正遲疑著唸研究所或當兵,後續輾轉到了中正,讓我受益良多!當初我的大學室友只說了句話,在不同環境認識的人就會不同,正驗證著目前的經歷,學歷看似足跡,真正的寶藏是週遭的人脈。透過與學弟的分享,我也發現周遭有更多需要我拉拔的,讓我回過頭想好好照顧家人。


最後,這部片的起頭是由一群中正大學的學生,有的即將畢業,正想為自己留下些什麼,於是產生了這部趣味的故事,然而我自己呢?其實在這一年多來,也努力地想留下什麼,用自己能做的事灌溉。在民雄生活的步調、等車,甚至那星夜下的操場,都為過去的自己做了一次最佳的心靈調適。這部片,只是開始,真正的體悟是曲終人散後,靜靜地與自己對話。


2009年3月10日 星期二

[QT] 使用 VS2005 編譯 MimeParser

最近準備在 Windows 上去分析 Email 的資料,花了近兩天的功夫,找了幾套 C++ 的開發,但都沒有很如願地編好,直到今天,正式地對 QT 去編譯!


共找到兩套用 C++ 開發:



前者是 BSD License ,後者是 GPL License ,倒都還不錯!只是我比較偏好前者已完成的程式架構。然而,前者有用到 QT 上的函式庫;後者則是我丟到 FreeBSD 7.0 的機器上,並沒有順利編好,雖然內附 WIN32 的設定,但似乎有點老舊。


先把 mimetic 講完好了,細節請透過上頭連結至作者網站上觀看介紹,我只講在 Windows XP with SP2 & VS2005 編的過程:



  • 解壓縮後,裡頭有 win32 的目錄,內附 buildvc.cmd。

  • 我下載到的版本 mimetic-0.9.5 ,與內附 buildvc.cmd 所敘顯然有出入。請修改 buildvc.cmd 中 "\mime\mimetic-0.8.6p" 取代成 ".." ,這個動作是以相對路徑去取資料。修正完它,就可以執行 buildvc.cmd

  • 在執行 buildvc.cmd 前,請先設定好環境變數,例如 cl 的來源位置,若覺得很無助,那就從[程式集]->[Microsoft Visual Studio 2005]->[Visual Studio Tools]->[Visual Studio 2005 命令提示字元] 進入 cmd mode 吧!再接換到 buildvc.cmd 的目錄位置,接著執行 buildvc.cmd 吧!

  • 很可惜的,過程中就出錯了!懶得改 code ,直接去抓 mimetic-0.8.7 版!並重複上述過程,至少 0.8.7 版就編出來啦!

  • 以上是不負責編法,版本 0.8.7 大約是 2004 的,而版本 0.9.5 看壓縮日期好像 2008 年 10 月左右,理論上用新版比較好,有需要的請自行修好它,修好麻煩分享一下 XD 我太懶了


接著,當然就是跟主題比較相關的,我要編的主角是 Mime Format/Email Parser !很慘的是,又是一段路要走,我甚至在編其環境時,還偷玩超任遊戲被老板看到,哈。



  1. 安裝 QT 相關環境,這步佔了 95% 的時間!

    • 至於 QT 部分,有分商業版跟免費版,我是抓免費版,但新版的我搞不定,最後我使用舊版 4.4.3 版原始碼。

    • QT 官網


    • QT 4.4.3 版


    • 編譯它!一樣從 [Visual Studio 2005 命令提示字元] 進入,然後切換到 C:\qt-win-opensource-src-4.4.3 ,接著打 configure 後再按 y 等它設定好環境,接著再打 nmake 讓他跑!好像跑了兩個小時?雖然我也邊弄其他事啦

    • 最後,他其實沒有正常結束,但至少我知道它有編好 qmake 了。另外再設定一下環境變數,[我的電腦]->[內容]->[進階]->[環境變數] 新增 QTDIR 其值為 "C:\qt-win-opensource-src-4.4.3" 而 PATH 部分也增加 "C:\qt-win-opensource-src-4.4.3\bin"



  2. 編譯 MimeParser-1.1

    • 解壓縮擺至 C:\

    • 用 cmd 切換至 C:\MimeParser-1.1 ,接著打入 qmake !終於沒任何錯誤訊息,並且產生 VS2005 專案了!接著,你以為這樣就搞定了嗎?還沒

    • 由於裡頭用了 JBufferString.h 和 JInputStream.h 等類似的東西,需再下載 IOStreams 的開發套件!既然上兩部都無誤發現,相信這步也會很順利,一樣解壓縮完(C:\iostreams) + qmake + VS2005 編譯它,就會產生出 lib 啦

    • 切回 MimeParser 的部分,稍微設定一下 include path 後(C:\iostreams\src),就能順利進行了!




以上就差不多收工!


有了 header file 和 lib 後,接著就是抽空完成 Mail to Handle 啦。今天的工作就是玩 cmake 還有編出 MimeParser 。


2009年3月9日 星期一

[CMake] Import/link a static library

還是習慣偷懶不看 document ,害我花了半天時間!看了許多教學文件,似乎對使用額外的 static lib 並沒有著墨太多?感覺 cmake 因為太方便了,以至於整個專案都可以全部從 source code 慢慢地編出來嗎?


在此做個簡單的筆記!關於想將自己私下開發的 static lib 引進 cmake 使用。假設目前有一個開發好的 static lib ,其名為 libtest_lib.a 並擺在 /path/mylib/libtest_lib.a 。


在 cmake 使用,需用兩行敘述:


ADD_LIBRARY ( test_lib STATIC IMPORTED )


SET_PROPERTY ( TARGET test_lib PROPERTY IMPORTED_LOCATION /path/mylib/libtest.a )


最後,在使用上才可以:


TARGET_LINK_LIBRARIES ( demo_test test_lib )


原先是打算想擺在相對路徑的,目前尚未試出來。


另外,若有 error: xxx.h: No such file or directory  請記得用 INCLUDE_DIRECTORIES 加好 static lib 的 header file ,而出現 /usr/bin/ld: cannot find -lxxx_staitc_lib 則是用上頭的解法。


對於想使用相對路徑的方式:


目錄結構:


MyProject
- lib/  (擺放相關 lib 的位置)
- src/
- CMakeLists.txt


CMakeLists.txt:


PROJECT ( "MyProject" )
SET ( EXECUTABLE_OUTPUT_PATH ${MyProject_BINARY_DIR}/bin )
SET ( LIBRARY_OUTPUT_PATH ${MyProject_BINARY_DIR}/lib )
INCLUDE_DIRECTORIES ( include )
ADD_LIBRARY ( myprojectlib src/myproject.c )
ADD_LIBRARY ( otherlib STATIC IMPORTED )
SET_PROPERTY ( TARGET otherlib PROPERTY IMPORTED_LOCATION ${MyProject_SOURCE_DIR}/lib/libotherlib.a )
ADD_EXECUTABLE ( myproject_tool src/myproject_tool.c )
TARGET_LINK_LIBRARIES ( myproject_tool myprojectlib otherlib )


解法可以用善用 ${MyProject_SOURCE_DIR} 資訊來指定。


參考資料:CMake 2.6 Documentation - add_library & CMake 2.6 Notes - Importing_Targets


2009年3月5日 星期四

[SQL] MySQL 一行指令 複製 A Table 的值對應至 B Table 中

一切動作運行之前,請先備份資料庫!


假設有兩個 table ,依序為 a 跟 b。目的想透過一行 SQL 指令將 a table 中的 value 數值取出並存至 b table 中對應的 value。

















a
IDValue

















b
IDValue


如果 B 裡頭的 ID 皆出現在 A 裡頭,可用:


UPDATE `b` as B SET B.Value = (
   SELECT A.Value
   FROM `a` as A
   WHERE A.ID = B.ID
);


假設 B 裡出現某個 ID 是 A 沒有的,那上述的動作將會清掉 B 該 ID 在 Table 中原先的數值!要小心處理,若要避免這個現象,需改成:


UPDATE `b` as B , `a` as A SET B.Value = (
   SELECT AA.Value
   FROM `a` as AA
   WHERE AA.ID = B.ID
) where A.ID = B.ID ;


 


2009年3月3日 星期二

MySQL的重要語法

From http://www.hmes.kh.edu.tw/~jona/redhat/mysqlphp/mysqlsyntax.htm


 


MySQL的重要語法


[帳號與權限] [資料庫/資料表/欄位的操作] [
錄的操作
] [資料的
輸出
]


一、帳號與權限


設定 root 和其他 user 的密碼



  • mysqladmin -u root password '新密碼'

  • mysqladmin -u root -p

  • Enter password:    此時再輸入密碼(建議採用)

  • use mysql;

    mysql> UPDATE user SET password=password('新密碼') where user='root'; 

      只改 root 的密碼,如果沒有用 where ,則表示改全部 user 的密碼

  • mysql> FLUSH PRIVILEGES; 在 mysql
    資料庫內,一定要用 flush 更新記憶體上的資料


刪除空帳號



  • mysql> DELETE FROM user WHERE User = '';

  • mysql> FLUSH PRIVILEGES;
     


建立新帳號



  • mysql> GRANT 權限 ON 資料庫或資料表 TO 使用者
    IDENTIFIED BY '密碼';


      權限

       

      資料庫或資料表

       *.* 所有資料庫裡的所有資料表

       * 預設資料庫裡的所有資料表

       資料庫.* 某一資料庫裡的所有資料表   

       資料庫.資料表 某一資料庫裡的特定資料表

       資料表  預設資料庫裡的某一資料表


設定/修改權限  



  • 用 root 登入 MySQL

     
    mysqladmin -u root -p

     Enter password:   

  • mysql> GRANT all ON db35.* TO
    s35@'localhost' IDENTIFIED BY 's35';


       把 db35 這個資料庫(含其下的所有資料表),授權給 s35,從 localhost 上來,密碼為s35
     

  • mysql> GRANT all ON *.* 
    把所有資料庫及資料表授權給別人,太危險了!

     

  • mysql> GRANT all??? ON www.* TO
    '*'@'*' IDENTIFIED BY '';

       
    把 www 這個資料庫(含其下的所有資料表),授權給 任何機器任何人,無密碼(通常給不特定人士使用)
     

  • mysql> FLUSH PRIVILEGES;  
    (最後一定要強迫更新權限)


 


二、資料庫/資料表/欄位的操作


建立資料庫 CREATE DATABASE 資料庫名;

語法:CREATE
DATABASE db_name


使用資料庫 USE
資料庫名;

語法:USE
db_name


刪除資料庫 DROP DATABASE 資料庫名;

語法:DROP
DATABASE [IF EXISTS] db_name


 

建立資料表

 CREATE TABLE 資料表名 (欄位1 資料型態, 欄位2 資料型態,
......);


語法:

CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...)
[table_options] [select_statement]


例:

craete database basic;

use basic;

create table basic(

  no char(4)

  name char(10)

  id char(10));


create_definition:

  col_name type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT]

           
[PRIMARY KEY] [reference_definition]

  or    PRIMARY KEY (index_col_name,...)

  or    KEY [index_name] KEY(index_col_name,...)

  or    INDEX [index_name] (index_col_name,...)

  or    UNIQUE [INDEX] [index_name]
(index_col_name,...)

  or    [CONSTRAINT symbol] FOREIGN KEY index_name
(index_col_name,...)

           
[reference_definition]

  or    CHECK (expr)


資料結構(type):





















































































































資料型態說明
TINYINT有符號的範圍是-128127
無符號的範圍是0255
SMALLINT有符號的範圍是-3276832767
無符號的範圍是065535
MEDIUMINT有符號的範圍是-83886088388607
無符號的範圍是016777215
INT有符號的範圍是-21474836482147483647
無符號的範圍是04294967295
INTEGERINT的同義詞。
BIGINT有符號的範圍是-9223372036854775808到
9223372036854775807,無符號的範圍是0到18446744073709551615。
FLOAT單精密浮點數字。不能無符號。允許的值是-3.402823466E+38到-
1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。
DOUBLE雙精密)浮點數字。不能無符號。允許的值是-
1.7976931348623157E+308到-2.2250738585072014E-308、
0和2.2250738585072014E-308到1.7976931348623157E+308。
DOUBLE PRECISIONDOUBLE的同義詞。
REALDOUBLE的同義詞。
DECIMALDECIMAL值的最大範圍與DOUBLE
同。
NUMERICDECIMAL的同義詞。
DATE日期。支援的範圍是'1000-01-01'到'9999-12-31'。
DATETIME日期和時間組合。支援的範圍是'1000-01-01
00:00:00'
'9999-12-31 23:59:59'
TIMESTAMP時間戳記。範圍是'1970-01-01
00:00:00'到2037年的某時。
TIME一個時間。範圍是'-838:59:59''838:59:59'
YEAR2或4位數字格式的年(內定是4位)。允許的值是1901到2155。
CHAR固定長度,1 ~ 255個字元。
VARCHAR可變長度,1 ~ 255個字元。

TINYBLOB



TINYTEXT最大長度為255(2^8-1)個字符。

MEDIUMBLOB



MEDIUMTEXT最大長度為16777215(2^24-1)個字符。

LONGBLOB



LONGTEXT最大長度為4294967295(2^32-1)個字符。
ENUM一個ENUM最多能有65535不同的值。
 
SET一個SET最多能有64個成員。



index_col_name:

        col_name [(length)]


reference_definition:

        REFERENCES tbl_name
[(index_col_name,...)]

                  
[MATCH FULL | MATCH PARTIAL]

                  
[ON DELETE reference_option]

                  
[ON UPDATE reference_option]


reference_option:

        RESTRICT | CASCADE | SET
NULL | NO ACTION | SET DEFAULT


table_options:

        type = [ISAM | MYISAM |
HEAP]

or      max_rows = #

or      min_rows = #

or      avg_row_length = #

or      comment = "string"

or      auto_increment = #

select_statement:

        [ | IGNORE | REPLACE] SELECT
...  (Some legal select statement)


刪除資料表 DROP TABLE 資料表名;

語法:DROP
TABLE [IF EXISTS] tbl_name [, tbl_name,...]


改變資料表結構(新增/刪除欄位、建立/取消索引、改變欄位資料型態、欄位重新命
名)


語法:

ALTER [IGNORE] TABLE tbl_name alter_spec
[, alter_spec ...]


alter_specification:

       
ADD [COLUMN] create_definition [FIRST | AFTER column_name ]


  or    ADD INDEX
[index_name] (index_col_name,...)


  or    ADD PRIMARY
KEY (index_col_name,...)


  or    ADD UNIQUE
[index_name] (index_col_name,...)


  or    ALTER
[COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}


  or    CHANGE
[COLUMN] old_col_name create_definition


  or    MODIFY
[COLUMN] create_definition


  or    DROP
[COLUMN] col_name


  or    DROP PRIMARY
KEY


  or    DROP INDEX
key_name


  or    RENAME [AS]
new_tbl_name


  or    table_option


範例:

 欄位重新命名

 mysql> ALTER TABLE t1 CHANGE a b INTEGER;


  將資料表 t1 欄位 a 改名為 b (其資料型態是 integer)

 改變欄位資料型態

 mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT
NULL;


 mysql> ALTER TABLE t1 MODIFY b BIGINT NOT
NULL;


  將資料表 t1 欄位 b 的資料型態改為 bigint not null 


 mysql> CREATE TABLE t1 (a
INTEGER,b CHAR(10)); 


 mysql> ALTER TABLE t1 RENAME t2;


  將資料表 t1 改名為 t2

 mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c
CHAR(20);

  將資料表 t2 欄位 a 資料型態由 integer 改為 tinyint not null
,欄位 b 改名為 c 資料型態改為 char(20)


 mysql>
ALTER TABLE t2 ADD d TIMESTAMP;


  在資料表 t2 增加新欄位 d 資料型態是 timestamp

 mysql> ALTER TABLE t2 ADD INDEX (d), ADD
PRIMARY KEY (a);


  在資料表 t2 ,對 d 欄位做索引,並以欄位 a 作為主索引鍵

 mysql> ALTER TABLE t2 DROP COLUMN c;

  刪除欄位 c

  mysql> ALTER TABLE t2 ADD c INT
UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);


  新增欄位 c,並做索引(做索引的欄位必須為 not null )


資料表最佳化 OPTIMIZE
TABLE 資料表名


語法:OPTIMIZE TABLE
tbl_name


 欄位長度有變動、刪除大量資料,都應進行資料表最佳化


三、紀錄的操作


插入一筆或多筆紀錄 INSERT
INTO 資料表(欄位1,欄位2,......)
VALUES(值1,值2,......), (值1,值2,......), ........


  (MySQL 3.22.5
以後可插入多筆記錄)


語法:

    INSERT [LOW_PRIORITY |
DELAYED] [IGNORE]


        [INTO] tbl_name
[(col_name,...)]

        VALUES
(expression,...),(...),...

or  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

        [INTO] tbl_name
[(col_name,...)]

        SELECT ...

or  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

        [INTO] tbl_name

        SET col_name=expression,
col_name=expression, ...

範例:

 mysql> INSERT INTO tbl_name (col1,col2)
VALUES(15,col1*2);


  不可寫成

 mysql> INSERT INTO tbl_name (col1,col2)
VALUES(col2*2,15);


  因為:欄位 col1 的值先填入後,才可以計算欄位 col2


從檔案讀入資料

語法:

 LOAD DATA [LOCAL] INFILE
'file_name.txt' [REPLACE | IGNORE]


    INTO TABLE tbl_name


    [FIELDS

       
[TERMINATED BY '\t']
   每一欄位以某字元分開(內定是 tab)

       
[OPTIONALLY] ENCLOSED BY "]
  每一欄位以某字元括住(內定是不使用括號)

       
[ESCAPED BY '\\' ]]
    

    [LINES
TERMINATED BY '\n']  
設定換行的字元(內
定是 \n)

    [IGNORE number LINES]
   忽略最前面幾行(最前面幾筆記錄不抄進來)


    [(col_name,...)]


範例:

 mysql> USE db1;

 mysql> LOAD DATA INFILE "./data.txt" INTO TABLE db2.my_table;

  從目前 MySQL 目錄讀入 data.txt

 mysql> LOAD DATA INFILE "./88.txt" INTO TABLE TEACHER FIELDS
TERMINATED BY ' ' ;

  從目前 MySQL 目錄(我的在 /var/lib/mysql )讀入 data.txt ,每一欄位以 空白 分開

 mysql> LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata
(col1,col2,...);

  只將 persondata.txt 裡某些欄位的資料抓過來 


刪除紀錄 DELETE [LOW-PRIORITY]
FROM 資料表名 WHERE 條件 [LIMIT rows]

語法:

 DELETE [LOW_PRIORITY] FROM tbl_name

    [WHERE where_definition] [LIMIT rows]

  LOW-PRIORITY 是等到沒有用戶端使用時再刪

  LIMIT rows 限制刪除紀錄的筆數

範例:

 mysql> DELETE FROM 資料表名;

  刪除所有紀錄

 mysql> DELETE FROM 資料表名 WHERE 1>0;

  刪除所有紀錄,但速度較慢,方便在螢幕上看


更新一筆紀錄 (語法與 INSERT 相同)

 REPLACE INTO 資料表(欄位1,欄位2,......)
VALUES(值1,值2,......)


語法:

REPLACE [LOW_PRIORITY | DELAYED]

        [INTO]
tbl_name [(col_name,...)]


        VALUES
(expression,...)


or  REPLACE [LOW_PRIORITY | DELAYED]

        [INTO]
tbl_name [(col_name,...)]


        SELECT
...


or  REPLACE [LOW_PRIORITY | DELAYED]

        [INTO]
tbl_name


        SET
col_name=expression, col_name=expression,...


更新多筆紀錄

語法:

UPDATE [LOW_PRIORITY] tbl_name SET
col_name1=expr1,col_name2=expr2,...     [WHERE
where_definition]

  如果沒有設定 WHERE 條件,則整個資料表相關的欄位都更新

範例:

 mysql> UPDATE persondata SET age=age+1;

  將資料表 persondata 中,所有 age 欄位都加 1

 mysql> UPDATE persondata SET age=age*2, age=age+1;

  將資料表 persondata 中,所有 age 欄位都*2,再加 1


四、資料的輸出


SELECT


語法:

 SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [DISTINCT | ALL]

    select_expression,...

    [INTO OUTFILE 'file_name' export_options]

    [FROM table_references

        [WHERE where_definition]

        [GROUP BY col_name,...]

        [HAVING where_definition]

        [ORDER BY {unsigned_integer
| col_name} [ASC | DESC] ,...]

        [LIMIT [offset,] rows]

        [PROCEDURE procedure_name] ]


範例:



排序輸出


select * from 資料表名 order by
欄位名1,欄位名2,欄位名3...... 


反向排序輸出


select * from 資料表名 order by 欄位名1,欄位名2,欄位名3...... desc


 


mysql> select concat(last_name,',
',first_name) AS full_name 



      from mytable ORDER BY full_name;







 mysql> select t1.name, t2.salary from employee AS t1, info AS t2



           where
t1.name = t2.name;



  顯示資料庫 employee(別名 t1) 裡,資料表 t1 的欄位 name 和 資料表 t2 的欄位 salary 當.....



 mysql> select t1.name, t2.salary from employee t1, info
t2           where
t1.name = t2.name;







 mysql> select college, region, seed from tournament



           ORDER BY
region, seed;



 mysql> select college, region AS r, seed AS s from tournament



           ORDER BY
r, s;



 mysql> select college, region, seed from tournament



           ORDER BY
2, 3;







 mysql> select col_name from tbl_name HAVING col_name > 0;







 mysql> select col_name from tbl_name WHERE col_name > 0;







 mysql> select user,max(salary) from users



           group by
user HAVING max(salary)>10;







 mysql> select user,max(salary) AS sum from users



           group by
user HAVING sum>10;







 mysql> select * from table LIMIT 5,10;  # Retrieve rows 6-15







 mysql> select * from table LIMIT 5;     #
Retrieve first 5 rows



  •  


在命令列下進行批次處理:

shell> mysql -h host -u user -p < batch-file

Enter password: ********









































Type Bytes From To
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807

 





























Column type ``Zero'' value
DATETIME '0000-00-00 00:00:00'
DATE '0000-00-00'
TIMESTAMP 00000000000000 (length depends on display size)
TIME '00:00:00'
YEAR 0000

 





































Column type Display format
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY

 






























Type Max.size Bytes
TINYTEXT or TINYBLOB 2^8-1 255
TEXT or BLOB 2^16-1 (64K-1) 65535
MEDIUMTEXT or MEDIUMBLOB 2^24-1 (16M-1) 16777215
LONGBLOB 2^32-1 (4G-1) 4294967295

 








































Value CHAR(4) Storage required VARCHAR(4) Storage required
'' ' ' 4 bytes '' 1 byte
'ab' 'ab ' 4 bytes 'ab' 3 bytes
'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes

 





























Value Index
NULL NULL
"" 0
"one" 1
"two" 2
"three" 3

 





























































Other vendor type MySQL type
BINARY(NUM) CHAR(NUM) BINARY
CHAR VARYING(NUM) VARCHAR(NUM)
FLOAT4 FLOAT
FLOAT8 DOUBLE
INT1 TINYINT
INT2 SMALLINT
INT3 MEDIUMINT
INT4 INT
INT8 BIGINT
LONG VARBINARY MEDIUMBLOB
LONG VARCHAR MEDIUMTEXT
MIDDLEINT MEDIUMINT
VARBINARY(NUM) VARCHAR(NUM) BINARY

 





























































Column type Storage required
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT 3 bytes
INT 4 bytes
INTEGER 4 bytes
BIGINT 8 bytes
FLOAT(X) 4 if X <= 24 or 8 if 25 <= X <= 53
FLOAT 4 bytes
DOUBLE 8 bytes
DOUBLE PRECISION 8 bytes
REAL 8 bytes
DECIMAL(M,D) M+2 bytes if D > 0, M+1 bytes
if D = 0 (D+2, if M < D)
NUMERIC(M,D) M+2 bytes if D > 0, M+1 bytes
if D = 0 (D+2, if M < D)

 





























Column type Storage required
DATE 3 bytes
DATETIME 8 bytes
TIMESTAMP 4 bytes
TIME 3 bytes
YEAR 1 byte

 









































Column type Storage required
CHAR(M) M bytes, 1 <= M <= 255
VARCHAR(M) L+1 bytes, where L <= M and 1
<= M <= 255
TINYBLOB, TINYTEXT L+1 bytes, where L < 2^8
BLOB, TEXT L+2 bytes, where L < 2^16
MEDIUMBLOB, MEDIUMTEXT L+3 bytes, where L < 2^24
LONGBLOB, LONGTEXT L+4 bytes, where L < 2^32
ENUM('value1','value2',...) 1 or 2 bytes, depending on the number of enumeration values
(65535 values maximum)
SET('value1','value2',...) 1, 2, 3, 4 or 8 bytes, depending on the number of set members
(64 members maximum)






 


SQLite 簡介 (1)

From http://support.oss.org.tw/?q=node/157


 


介紹

   
資料庫在處理大量的資料上是很必要的,但如果資料固定且量不多,或是資料庫只會在單機上使用,且沒有讓多人使用的需求的話,就不一定需要特別架一個資料庫
系統;因此,可以使用類似 SQLite 這樣的嵌入式資料庫(embedded SQL database)。


    SQLite 與其他一般資料庫差異不大,一般的 SQL-92
語法都能夠使用,而且不需要建立一個資料庫系統,要使用的時候,只要在編譯程式的時候將 SQLite 程式庫一起編入就可以使用。另外,SQLite
的資料庫(database)都是以單一檔案的形式存於磁碟中,不需要再安裝資料庫伺服器軟體,所以要把資料庫複製或建立在你的電腦上是相單簡單快速。

SQLite 是一個很小的 C 語言程式庫,且本身就完全包含資料庫引擎的功能,而且可以嵌入至其他程式中,完全不用額外的設定。其特性如下:



  • 支援ACID (Atomic, Consistent, Isolated, Durable) transaction。

  • Zero-configuration:無須管理者的設定及管理。

  • 支援大部分SQL92的語法。

  • 資料庫存在於一個單一的檔案中。

  • 資料庫系統所在機器的位元組順序(Byte order)無關。

  • 支援大小至2 terabytes (2^41 bytes)。

  • 記憶體需求小:小於3萬行的C語言程式碼。小於250KB的程式空間。

  • 大部分的資料庫操作皆快於一般資料庫系統。

  • 簡單易用的API。

  • 支援TCL。也有其他語言的支援可用。

  • 註解詳細的程式碼,以及超過90%的測試。

  • 程式庫自己包含完整的功能,無須其他額外的程式或程式庫。

  • 為public domain,可免費使用。

  • serverless

  • cross-platform - 使用unicode

  • 不會進行data type檢查


 


安裝


for Linux(rpm)


I、下載 SQLite

# wget http://www.sqlite.org/sqlite-3.5.4.tar.gz

2、解壓縮與編譯

# tar zxvf sqlite-3.5.4.tar.gz

# cd sqlite-3.5.4

# ./configure

# make

# make install

ps.若make的時候有發生找不到tcl相關的library時,可以利用下列指令:

# ./configure --disable-tcl --prefix=/usr/local/sqlite-3.3.5

亦或者下載 sqlite 與 tcl 相關的 library 即可:

# apt-get install libsqlite3-tcl


for linux(套件管理程式安裝)


可以利用 apt-get(Ubuntu/Debian)或 yum(Fedora)來直接下載,

# apt-get install sqlite

 

若 SQLite 要與 PHP 搭配使用,則需要為 PHP 特別安裝套件,可利用各個 distros 的套件管理軟體來安裝(以Ubuntu為例):



  • for PHP4:


            # apt-get install php4-sqlite



  • for PHP5:


            # apt-get install php5-sqlite


for Windows


若要下載命令列模式的 SQLite 程式來存取與修改 SQLite 資料庫,可以至(http://www.sqlite.org/download.html)下載預先編譯過的程式。


 for PHP 4:


1、到這裡(http://pecl4win.php.net/ext.php/php_sqlite.dll)下載 php_sqlite.dll

2、php.ini 加上 extension=php_sqlite.dll

3、重新啟動 Web Server 即可。


forPHP 5:


PHP 5 已經包含 SQLite 模組了,所以只需要載入模組即可。

修改 php.ini,將 ;extension=php_sqlite.dll 將前面的分號去掉。

最後一樣重新啟動 Web Server 即可。


如何使用sqlite(command-line)


    以下我們就對建立資料庫、建立資料表、新增資料、查詢資料、更改資料、移除資料、sqlite 命令列選項等幾個項目做簡單的介紹。

1、建立資料庫檔案

用 sqlite 建立資料庫的方法很簡單,只要在 shell 下鍵入:

# sqlite db_name

 

如果目錄下沒有 db_name,sqlite 就會建立這個資料庫。

進入了sqlite之後,會看到以下文字:

SQLite version 2.8.17

Enter ".help" for instructions

sqlite>

 

這時如果使用.help可以取得求助,.quit則是離開

所有的SQL指令都是以分號(;)結尾的。如果遇到兩個減號(--)則代表註解,sqlite 會略過去。


2、建立資料表(table)


假設我們要建一個名叫 tbl 的資料表,只要鍵入以下指令就可以了:

sqlite > create table tbl(one, two);

 

這樣我們就建立了一個名叫 tbl 的資料表,裡面有 one、two 兩個欄位。

 

create table指令的語法為:

create table table_name(field1, field2, field3, ...);

 

table_name 是資料表的名稱,fieldx 則是欄位的名字。sqlite 的欄位不會檢查是屬於哪一種資料型態:sqlite的欄位可以儲存任何東西:文字、數字、大量文字(blob),它會在適時自動轉換。

 

3、加入一筆資料

接下來我們要加入資料了,語法為:

insert into table_name values(data1, data2, data3, ...);

例如

insert into tbl values ('hello!', 10);

insert into tbl values ('goodbye’, 20);

 

如果該欄位沒有資料,我們可以填NULL。


4、查詢資料


利用 SQL 語法裡的 select :


select columns from table_name where expression;

 

最常見的用法,當然是倒出所有資料庫的內容:

select * from tbl;

 

如果資料太多了,我們或許會想限制筆數:

select * from tbl limit 10;

 

有時候我們只想知道資料庫一共有多少筆資料:

select count(*) from film;


5、如何更改或刪除資料


瞭解 select 的用法非常重要,因為要在 sqlite 更改或刪除一筆資料,也是靠同樣的語法。

 

例如有一筆資料打錯了,可利用這樣的指令來修改:

update tbl set one = 'hello!' where one='hollo!';

 

就會把one欄位裡,被打成 hollo! 的那筆(或多筆)資料,改回成hello!。

 

其他 sqlite 的特別用法


1、sqlite 可以在 shell 底下直接執行命令:


sqlite3 foo.db "select * from tbl;"


 


2、資料庫備份:


sqlite3 ur_db.db ".dump" > output.sql




$ echo '.dump' | sqlite ur_db.db | gzip -c > ur_db.dump.gz


利用輸出的資料,可以建立一個相同的資料庫(其實就是標準的SQL資料庫備份):


sqlite3 film.db < output.sql



$ zcat ex1.dump.gz | sqlite3 ex2

 

3、查詢資料庫的 schema

資料庫的 schema 是特別存於名為 sqlite_master 的資料表,可利用 "SELECT" 指令來查詢,如下所示:

 

$ sqlite3 db_name

SQlite vresion 2.817

Enter ".help" for instructions

sqlite> select * from sqlite_master;

type = table

name = tbl

tbl_name = tbl

rootpage = 3

sql = create table tbl(title, length)

sqlite>

 

4、更改輸出的格式

sqlite 能夠將查詢的結果以8種不同的格式輸出(csv、column、html、insert、line、tabs、tcl),你可以利用指令
"mode" 來改變輸出格式,預設的格式為 list   ,在這個模式下,查詢的結果都是一行一行列出,而預設的分隔符號為 "|" ,如下所示:

 

sqlite> .mode list

sqlite> select * from tbl;

aaa|232

bbb|454

 

你也可以利用指令 ".separator" 來改變分隔符號,例如:

 

sqlite> .separator ", "

sqlite> select * from tbl;

aaa, 232

bbb, 454

sqlite>

 

在 "line" 模式中,每一個欄位都會獨自與一行顯示出來,而每一筆資料會以一個空行來分隔,如下所示:

 

sqlite> .mode line

sqlite> select * from tbl;

title = aaa

length = 232



title = bbb

length = 454

sqlite>

 

在 column 模式中,每一筆資料都會顯示於獨立的一列,並且以欄位來分隔,如下所示:

 

sqlite> .mode column

sqlite> select * from tbl;

title length

---------- ----------

aaa 232

bbb 454

sqlite>

 

另外一個有用的模式為 "insert",此模式的輸出格式類似於 SQL 語法中的 INSERT 格式,可用於日後要輸入資料於其他資料庫中:

 

sqlite> .mode insert

sqlite> select * from tbl;

INSERT INTO table VALUES('aaa',232);

INSERT INTO table VALUES('bbb',454);

sqlite>

 

最後一個輸出模式為 "html",此模式下 sqlite 會將查詢結果輸出為類似 XHTML 表格,如下所示:

 

sqlite> .mode html

sqlite> select * from tbl;

<TR><TH>title</TH><TH>length</TH></TR>

<TR><TD>aaa</TD>

<TD>232</TD>

</TR>

<TR><TD>bbb</TD>

<TD>454</TD>

</TR>

sqlite>

 

查詢資料庫的 schema

sqlite   提供很多方便且有用的指令來查詢資料庫的 schema:

列出資料庫中的資料表,利用 ".tables":

 

sqlite> .tables

tbl

sqlite>

 

".schema" 指令顯示出原來建立資料表與索引的指令,可以用於重建目前的資料庫用:

 

sqlite> .schema

create table tbl(title, length);

sqlite>

 

這邊就先介紹 SQLite 到這邊,我將會在下一篇說明如何在 PHP 上使用 SQLite。


2009年3月1日 星期日

[懷舊] 超級任天堂 / 超任 / SFC 遊戲 就是最好的記憶

超級任天堂


幾週前,由於買了電視盒後,老妹突然想嘗試玩玩塵封已久的電機遊戲器 - 超級任天堂!可惜的,經嘗試後,仍然無法正常使用,開機後沒有任何畫面。算起來應該有 17 年了吧?那台遊戲機在我國小二年級吵著老爸買的,印象中當時光遊戲主機一台可要價 3800 ~ 4200 元!可真是小時不懂事啊。



當時吸引的、流行的,就屬快打炫風2這款遊戲了!當時卡帶的價也不便宜,一片可也是動輒上千元的!因此,還有個風氣,那就是跟店家交換卡代。我記得第一片卡帶是快打炫風2沒錯,但手頭上的卡帶似乎已經不是最初的那幾片了。這股潮流也隨著磁碟機的出現而沒落。目前家中僅五片卡帶,分別為快打炫風2加強版、餓狼傳說、幽遊白書魔界傳、雙截龍、忍者龜,其中雙截龍我確定是在萬客隆買的(又是個兒時的名詞),忍者龜可能是在台中的玩具反斗城吧!回想起來,當時跟店家換片時,依卡帶價貼錢換。但我不記得若是將貴的卡帶換成便宜的時,店家是否會誠心地退額?呵呵,或許店家還會騙你,每次都至少酌收手序費哩!怎樣算還是店家賺啊。


PICT0458


然而,不懂事的年代並沒有那麼快地過去,大概兩年左右,又敗了一台攔截者磁碟機,我印象中當時一台可貴到 6000 元!隨著磁片的盛行,遊戲的費用就慢慢變成一個遊戲 50 ~ 100 元不等,看要用幾片 1.44 MB 的磁片裝,我記得當時一片是要 50 元,而遊戲有時需要兩片以上,那就代表要花 100 元買一款遊戲。當時磁碟機可還有容量的限制!我記得我家這台應該只有 16MB 而已,最多只能玩 2 片磁片囉,若要玩到三片磁片的遊戲,還得擴充記憶體至 24MB !我印象中好像是這樣,所以沒有玩三國志4吧?



除了上述的裝備外,還買過一個無線的,還有連打的按鍵,只是我還是喜歡超任原廠的按鍵手把,薄薄的比較佳,就連現在常用的 PS 手把,我也不是很喜歡,不曉得現在還會不會存在將超任手把轉接成 USB 的呢?在這之後,除了磁片外應該就沒在花錢買東西了,只是遊戲機也隨著電腦的普及而慢慢地退出啦,我記得我好像是小六開始玩 PC Game 的,當時最熱的遊戲正是仙劍奇俠傳,只是我並沒玩過,倒是印象較深的是國一玩叫炎龍騎士團2的遊戲,直到國二時,我印象中我都還有在玩超任遊戲機,只是次數越來越少了,並且隨著升學壓力而慢慢退場。粗算所花的錢,可能有破兩萬!


這兩天,心血來潮想把過去玩的遊戲都找出來,昨天花了近三小時找得差不多了!只剩兩款遊戲沒找到,分別叫超真實麻將和鐵拳戰士,這種名字可能也都只是當時店家取的吧。不過算起我也已經找到九成遊戲囉!算了一算,還真的花了不少錢。至於找遊戲的方式,請參考這個關鍵字來 Google :超任 遊戲 下載,結果的第一項就是教你怎樣下載遊戲了 XD 目前嘗試的結果,遊戲應該是沒問題都找得到,唯一的缺點是遊戲名稱以及上頭附的英文中文對照表可能不一定正確,我大概有2~3款遊戲跟上頭敘述的不一樣,所幸的,我都找到了,沒找到的只是沒有衝勁再挖吧,哈。在此列一下找到的英中對照表


對打遊戲


快打炫風2-加強版 Street Fighter II Turbo - Hyper Fighting


幽遊白書2 Yuu Yuu Hakusho 2 - Kakutou no Shou (該網站的圖似乎擺成 1 的)


幽遊白書-魔界最強列傳 Yuu Yuu Hakusho Final - Makai Saikyou Retsuden


七龍珠-超武鬥傳2 Dragon Ball Z - Super Butouden 2


七龍珠-超武鬥傳3 Dragon Ball Z - Super Butouden 3


餓狼傳說 Garou Densetsu - Shukumei no Tatakai


龍虎拳 Art of Fighting


單人遊戲


2020 Super Baseball


三國誌三-中文版 Sangokushi III


小叮噹-大雄與妖精王國 Doraemon 2 - Nobita no Toys Land Daibouken


天使彈平/火焰鬥球兒-彈平 Honoo no Doukyuuji - Dodge Danpei


超悟空傳-突激篇 Dragon Ball Z - Super Gokuuden Kakusei Hen


侏儸紀公園 Jurassic Park


超真實麻將 Super
Real Mahjong PIV


雙人遊戲


大盜伍佑衛門2 Ganbare Goemon 2 - Kiteretsu Shougun Magginesu


初代熱血硬派 Shodai Nekketsu Kouha Kunio-kun


熱血硬派-國雄之輓歌 Shin Nekketsu Kouha - Kunio-tachi no Banka


超級魂斗羅 Super Probotector - The Alien Rebels


鐵血指揮官/鋼鐵戰士 Iron Commando


龍王 King of Dragons


NBA Jam


戰鬥原始人3 Joe & Mac 3 - Lost in the Tropics


美少女戰士R Bishoujo Senshi Sailor Moon R


超級雙截龍 Super Double Dragon


音速俠2/音速快擊手2 Sonic Blast Man II


忍者龜 Teenage Mutant Ninja Turtles - Turtles in Time


其他是透過模擬器才玩過的遊戲


閃電霹靂車 Shinseiki GPX - Cyber Formula


三國志英傑傳 Sangokushi Eiketsuden


太空戰士6 Final Fantasy III (這款還有簡體版喔)


灌籃高手 From TV Animation Slam Dunk - SD Heat Up!!


原先的空白是拿來貼圖的,但因為版權關係,後來決定拿掉了,但只要有上頭遊戲的英文名稱,應該就是非常夠用的資訊囉!以上就是我所接觸過的遊戲!大部分都有破關,只有幾款故事很長或是不太會玩的遊戲才沒破,如太空戰士六、侏儸紀公園、餓狼傳說、閃電霹靂車、三國志英傑傳(PC破過)等,至於買過攻略的,僅有超悟空傳-突激篇。


超級任天堂是我家的第二台電視遊樂器,同時也是最後一台,第一台當然就是紅白機囉!這些回憶,相對於別人正風行著時下的救國團活動,看起來可真的是電視兒童,整體上卡通跟電玩幾乎佔據了五成國小的回憶。特別是寒暑假的長假時間。至於會不會有什麼後悔?只能說慶幸自己的家庭,在國小時期我還玩過泥巴、與街狗互動、烤蕃薯、抓田間水溝的魚、蛙等,說起來還是很豐富的。


如果需要查詢其他遊戲中文英文名稱的對照,可以再看看這篇:超任 超級任天堂 SFC 中英對照,算是暫存網路上找到的對照表。