2009年10月20日 星期二

FOCMEC on Linux安裝筆記

A. What's FOCMEC?
FOCMEC is the program of FOCal MEChanism Determinations,相信許多做double-couple地震震源機制解的研究人員都會接觸到的一套軟體。很久之前作者Snoke開放給大家下載的是編譯過後的版本,因此設定好PATH之後就可以直接使用;不過最近上他的網站想更新FOCMEC,卻發現需要自己進行編譯。

B. Where to get FOCMEC?
首先,請以管理員身份執行:

wget -c http://equake.geos.vt.edu/focmec/focmec.tgz
tar zxvf focmec.tgz -C /opt
我們的FOCMEC程式放在/opt/focmec裡,緊接著來編譯他。

C. Compile and install FOCMEC

  1. Pre-requirements
    雖然網頁上說他的fortran code是由fortran 77寫成的,但是實際上編譯時卻需要gfortran。
    For Debian users:
    aptitude install gfortran -y
    For Fedora users:
    yum install gcc-gfortran -y
  2. 開始編譯
    根據手冊上的說明,我們只要到/opt/focmec/src底下執行build_package這個script就可以了;
    cd /opt/focmec/src
    sh build_package
    不過,這個script是用csh語法寫的,即使我安裝了csh還是出現許多錯誤訊息。如果你跟我一樣遇到這個問題,請照我的方法修改這個檔案:
    echo " " > /opt/focmec/src/build_package
    然後把我下面的script存進build_package裡:

    我是把Snoke的csh用bash改寫並且加了一個使否安裝gfortran的判斷式進去,我想應該能讓絕大部分的linux系統管理員順利編譯成功。

  3. 環境變數設定:
    在/etc/skel/.profile裡多設定兩行,像是這樣:
    export FOCMEC=/opt/focmec
    export PATH=$PATH:$FOCMEC/bin
    使用者需要自行更新設定:
    cp /etc/skel/.profile ~/
    source ~/.profile
    注意PATH的地方不要照抄--如果你有設定其他軟體的PATH的話,利用":"附加在後面就可以了。

Share

RayGUI 2.3 on Linux安裝筆記

A. Something about RayGUI

RayGUI 2.1是USGS(美國地質調查所,相當於台灣的中央地質調查所)所開發的一套用來foward and inverse ray-tracing的一套圖形介面程式。目前的版本為2.1,自2.0以降的版本就支援Linux以及MacOS,由Jian-Li Song以及Uri ten Brink所開發。

RayGUI 2.1主要由兩大部份構成:GUI圖形介面,以及rayinvr這隻程式。 RayGUI提供圖形介面讓使用者可以自由的修改速度模型以及ray-tracing的參數;而rayinvr便是執行ray-tracing的主要程式。當tracing完成後,RayGUI可以秀出觀察到的以及模型的走時。也許兩位作者各有所長,RayGUI是由JAVA寫成的,作者並未開放原始碼;rayinvr則是用fortran 77寫成的;因為需要編譯,所以是看得到原始碼的。另外還有些部份還需要C語言以及X11的lib,我後面會提到。

在開始之前,我希望各位能先將RayGUI的手冊先準備好,雖然在安裝的部份內容有些謬誤,但我會在後面告訴各位如何修正這些錯誤。

B. Where to get RayGUI?

各位可以在這個頁面下載較新版的RayGUI。這篇文章裡,我分別用Debian Lenny以及Fedora 11測試均正常無誤;如果您是別的linux發行套件而遇到安裝上的問題,歡迎留言給我。

首先我們先安裝RayGUI所需要的小工具:fortran 77。
For Debian users:

aptitude install fort77 -y
For Fedora users:
yum install compat-gcc-34-g77
到這裡,我們擁有fortran 77的compiler了。Debian的使用者請再加上:
ln -s /usr/bin/f77 /usr/bin/g77

第二,我們需要JRE的環境:
For Debian users:

aptitude install sun-java6-jre -y
For Fedora users:
yum install java-1.6.0-openjdk
事實上,任何一間廠商的JRE都可以跑;java已經變成一種規範,規範於良性的競爭內,這就是java壯大的原因。如果各位眼尖的話,可以看出Debian的JRE是sun的,而Fedora的JRE是OpenJDK,亦即社群所維護的JAVA。

接著,下載RayGUI 2.1:

wget -c http://woodshole.er.usgs.gov/ftp/RayGUI/RayGUI2.1.5_for_Linux.tar.gz .
tar zxvf RayGUI2.1.5_for_Linux.tar.gz -C /opt
rm -rf RayGUI2.1.5_for_Linux.tar.gz
我們把RayGUI解壓縮放到/opt裡。事實上解壓縮到任何位置都可以,只是在多人的工作站上,放在/usr/local或是/opt通常是為了便於管理。

C. How to install RayGUI on Linux?

  1. 修改Makefile:
    vi /opt/rayguidir/rayinvrpk/rayinvr/Makefile
    把上面兩段修改成:
    EXEDIR=/opt/rayguidir/bin
    PLTLIB=/opt/rayguidir/rayinvrpk/pltlib
  2. 刪除object code:
    真是奇怪,為什麼讓使用者下載的檔案要保留這些.o檔呢?真是給人不專業感覺!
    rm -f /opt/rayguidir/rayinvrpk/rayinvr/*.o
    rm -f /opt/rayguidir/rayinvrpk/pltlib/*.o
  3. 開始編譯:
    cd /opt/rayguidir/rayinvrpk/rayinvr/
    make
    通常,這個階段一定會造成編譯失敗,原因出在系統缺少xbuplot.c這個檔案所宣告的Xlib.h,而這點手冊上並沒有詳載。解決的方法必須要安裝Xorg的headers:
    For Debian users:
    aptitude install libx11-dev -y
    For Fedora users:
    yum install libX11-devel -y
    然後重作一次刪除object code的步驟(作者沒有寫clean的script,所以無法用make clean...),再make一次,假設不是停在因錯誤而exit的狀態,就表示編譯成功。
  4. 編譯dmplstsqr
    cd /opt/rayguidir/rayinvrpk/misc
    g77 -o /opt/rayguidir/bin/dmplstsqr dmplstsqr.f
    假設到目前為止都順利的話,編譯的部份已經完成囉!

D. Setting up RayGUI for users

倘若你根據手冊照本宣科的設定,在設定多人使用的時候必定會發生錯誤,因為手冊的撰寫人可能是很不熟悉linux跟java;

  1. 請勿將PATH設定包含當前目錄:
    手冊的第10頁要求使用者把PATH設定成包含當前的工作目錄,這是危險的!無論任何情況、任何理由,都不應該做這件事! 正確作法:
    作者是因為後面要設定alias而要求此步,這是不必要且要不得的,請略過他。
  2. 把RayGUI的執行目錄加到PATH變數裡:
    手冊的第10頁要求使用者把/opt/rayguidir/bin/xrayinvr加到~/.bashrc裡,是不對也恰當的;首先,PATH設定的就是path阿,因此指定的是目錄而非檔案;其次,PATH設定依照linux的規範應該設定在.profile(Redhat系的會是.bash_profile),.bashrc通常是設定alias以及PS1等終端機輸出模式等參數設定。 正確作法:
    vi /etc/profile (or ~/.profile)
    修改PATH那行,變成像是:
    export RAYGUI=/opt/rayguidir/bin
    export PATH="$PATH:$RAYGUI"
    使用者需重新登入。(或source ~/.profile即刻生效)
    Fedora的使用者則是.bash_profile,這裡就不重覆寫了。
  3. 設定alias
    手冊第11頁的alias設定需要把當前環境加到PATH裡,且一個alias需要兩道指令,實在不是一個好作法。("cd ..." 究竟是什麼東西阿?manual的品質有待加強...) 正確作法:
    vi /etc/bashrc (or ~/.bashrc)
    新增一行alias,像是這樣:
    alias raygui="java -cp /opt/rayguidir/raygui/ RayGui"
    使用者須重新登入(或source ~/.bashrc即刻生效)。
  4. For Multiusers:
    手冊上這段設定不但多餘,而且還是錯的。首先,GNU/Linux本來就是多人多工的系統,每個人的工作目錄絕不可能重複(除非有一個愚蠢的系統管理員); 第二,"-d"是javac才有的參數,透過javac -d來設定要將編譯過後的.class檔放位置,java是沒有-d參數的! 正確作法: 什麼也不用做,大笑三聲就好。

E. 測試看看:

記得你需要重新登入,(或source ~/.bashrc即刻生效)。 如果你可以跑出像這樣的畫面,恭喜你,只剩一點了!如果跑不出來並出現一堆NoClassDefFoundError的Exception,沒關係,請再繼續往下走。

(不過真是奇怪,我們一開始下載的版本是2.1.5,但是為何跑起來還是顯示2.0呢?)

F. 升級至RayGUI 2.3
下載RayGUI 2.3:

wget -c http://woodshole.er.usgs.gov/ftp/RayGUI/raygui23.tar
tar xvf raygui23.tar
rsync -av --delete rayguiv23Class/ /opt/rayguidir/raygui/
rm -rf rayguiv23Class/
您可以順利執行raygui了嗎?恐怕不行。我們看看rayguidir下究竟什麼東西在搞鬼:
[root@localhost rayguidir]# ls -l
total 16
drwxrwxr-x  2 501 501 4096 Apr 15 00:44 bin
drwxrwxr-x  2 501 501 4096 Jul 14  2005 example
drwx-----T  6 500 500 4096 Feb  3  2006 raygui
drwxrwxr-x 11 501 501 4096 Jul 14  2005 rayinvrpk
我不知道為什麼RayGUI的作者要把raygui目錄設定stick bit(後面的T),這不具有任何意義;加上群組以及其他這兩類屬性完全沒有任何讀取的權限,導致使用者執行raygui會顯示找不到class這類窘境,並且怪罪java不好用。事實上,這是作者對於linux權限不甚了解所導致的結果,請多執行下列步驟便可以解決這個問題。
find /opt/rayguidir -type d -exec chmod 0755 {} \;
find /opt/rayguidir -type f -exec chmod 0644 {} \;
chmod +x /opt/rayguidir/bin/*
之後,你可以退回一般使用者並且直接執行raygui,會發現可以順利跑出你期待已久的RayGUI圖形介面! 這回他們總算記得修改GUI介面了!

延伸資源:假如你編譯過程還是失敗,缺少適合你平台的rayinvr可能會不能正常使用RayGUI,你可以到這裡下載原始碼,至於編譯與安裝請參考Rayinvr installation on Linux
你也可以從這裡閱讀RayGUI的一些documents。不過安裝的部份您還是略過別看,因為照他的步驟做一定不會成功的。

關於升級成2.3,你可能需要知道一些注意事項:raygui23readme

Share

PQL II on linux安裝筆記

A. What is PQL II?
PQL II是一套開放原始碼的軟體,用來看各種不同格式的時間序列,支援四大類型的格式:MSEED, SEGY, SAC以及AH。PQL II是第二代的PQL軟體,由IRIS(1)PASSCAL(2)計畫儀器中心與USArray Array Operations Facility (AOF) 共同開發出的軟體。基本上我比較常用他來讀SAC檔。

B. 下載PQL II並安裝
請參考PQL II的資訊頁面,或是到PQL II download page下載適合自己的版本。或許你也需要的Passoft工具。PASSCAL很專業的提供了MacOS, Linux rpms以及Solaris的版本,而且這套優秀的軟體還是開放原始碼的!

  • 以RHEL/Fedora在32bits架構為例:
  • wget -c http://www.passcal.nmt.edu/ftp/software/pql/linux/i686/PQL-2010-246.i686.rpm
    wget -c http://www.passcal.nmt.edu/ftp/software/passoft/linux/i386/PASSOFT-LATEST.i386.rpm

    sudo yum localinstall --nogpgcheck PQL-2010-246.i686.rpm PASSOFT-LATEST.i386.rpm -y
  • 以Debian/Ubuntu在32bits架構為例:
  • wget -c http://www.passcal.nmt.edu/ftp/software/pql/linux/i686/PQL-2010-246.i686.rpm
    sudo alien PQL-2010-246.i686.rpm || sudo apt-get install alien
    sudo dpkg -i pql_2010-247_i386.deb || apt-get install -f

    wget -c http://www.passcal.nmt.edu/ftp/software/passoft/linux/i386/PASSOFT-2010-264.i386.rpm
    sudo alien -i PASSOFT-2010-264.i386.rpm
    sudo dpkg -i --force-overwrite passoft_2010-265_i386.deb

C. 環境設定
把以下的設定加到/etc/profile

export PASSCAL=/opt/passcal
export PASSOFT=$PASSCAL
export PATH=$PATH:$PASSCAL/bin:$PASSCAL/other/bin
export MANPATH=$PASSCAL/man:$MANPATH
重新登入使之生效,應該可以利用pql& 叫出PQL II的介面了! 手邊沒有sac檔(實在太不專業了@@),只能借用人家的圖∼

註(1): IRIS: The Incorporated Research Institutions for Seismology.
註(2): PASSCAL: Program for Array Seismic Studies of the Continental Lithosphere.

Share

TauP-- the travel time calculator

TauP是美國南加州大學(USC)的Lithospheric Seismology Program所開發出來的程式之一,這套程式是用來計算地震波的走時(Travel Time)。除了travel time之外,她還可以計算ray path以及地震波的穿入(pierce)及轉折點(turning)。相較於傳統的ttimes程式,她可以處理更多的速度構造(iasp91, PREM以及QDT);並且可以分析許多虛擬波相的走時。更難能可貴的是,他是用Java所寫成的,因此不需再編譯,只要安裝JRE即可快樂使用。更詳盡的說明,可以看他的手冊,或是解壓縮後就附有使用手冊了。

TauP也採用GPL授權,他的授權聲明在這裡,如果你有趣的話,原始碼解壓縮後在src裡就有了。

目前最新版本的TauP是1.2,您可以點這裡下載,或是直接到這裡查看是否有最新的版本。我猜測作者們應該是在sparc架構上開發TauP,因為她提供了for little-endian類的處理器的版本,而little-endian恰好是x86架構處理器的排序處理方式;如果您在處理資料的時候出現NaN(Not a Number)的錯誤訊息,很可能是因為headers對不上的關係,建議拿這個版本來用;不過這裡僅提供原始碼,您如果有興趣,需要自己編譯;筆者初次嘗試的結果,Makefile並沒有寫好,自己嘗試編譯的結果也沒有成功;等有空再仔細看看好了。

安裝TauP on Linux/MacOS/Unix

假設我們想把TauP安裝在/opt(當然你也可以依照linux的習慣放在/usr/local底下):

wget -c http://www.seis.sc.edu/downloads/TauP/TauP-2.0.tgz
sudo tar zxvf TauP-2.0.tgz -C /opt
接下來設定環境變數:新增兩行到/etc/profile
export TAUP_HOME=/opt/TauP-1.2
export PATH=$PATH:$TAUP_HOME/bin
完成之後重新登入,輸入taup看看有沒有結果。

如果看不到圖形跑出來,表示你沒有安裝Java runtime environment。通知偉大的系統管理員安裝他吧!

地科系學生常遇到的 Q&A

  1. 為什麼系統檔案裡有許多地方有.profile這個檔案?該修改哪個才好呢?
  2. 系統裡一共會有三個地方會有profile這個名稱:/etc/profile, /etc/skel/.profile以及~/.profile(如果你不知道~是什麼意思,麻煩自己google)
    /etc/profile
    系統啟動時所需要的所有環境變數,所有使用者登入時第一個讀取的檔案,包含root也是。
    /etc/skel/.profile
    系統新增使用者時,會複製一份這個檔案到使用者的家目錄。這個檔案與系統管理員比較有關。
    ~/.profile
    個人登入時讀取的第二個檔案。如果變數名稱與/etc/profile相同,以後讀的檔案為主。
    所以如果是系統管理員,而所有的使用者都是需要用到這個程式,請寫在/etc/profile;如果你的能力勝過你的系統管理員,是自己安裝來自己用的只是沒root權限,請修改~/.profile。
  3. 為什麼我的系統裡沒有~/.profile也沒有/etc/profile這個檔案?
  4. 因為你的linux是Redhat系列(包含CentOS, ScientificLinux, Fedora, OracleLinux),請改用/etc/bash_profile以及~/.bash_profile
  5. 為什麼我修改完之後,一定需要重新登出?有沒有不重新登出的辦法?
  6. 修改完檔案之後,系統並不會自己去讀取環境變數,因此重新登入會強迫使用者重新讀取/etc/profile以及~/.profile這兩個檔案,也就是取得我們新賦予的環境變數。
    然而,手動讀取這些環境變數檔也是可以的:
    source /etc/profile
    或是
    source ~/.profile
    你會發現這樣一樣有效。這是個『有限』的有效,因為你的桌面環境是前一次登入所讀取的,你桌面的終端機的變數是後來再source而來的,因此你在桌面再開啟的終端機仍然是繼承先前桌面的環境變數,仍然是舊的變數設定。因此強烈建議不熟悉的使用者,重新登入。
  7. 我懷疑我的電腦沒安裝java,該怎麼確定?
  8. 1. 問你的系統管理員。
    2. 假設你的系統管理員不知道,可以自救:
    java -version
    如果出現command not found,表示沒有安裝。如果出現類似
    java version "1.6.0_24"
    Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
    Java HotSpot(TM) Server VM (build 19.1-b02, mixed mode)
    表示你的系統有安裝Java Runtime Environment。
    如果出現command not found的話,
    aptitude install sun-java6-jre
    在Debian/Ubuntu下安裝,或
    yum install java-1.6.0-openjdk
    在CentOS/Fedora下安裝,或
    zypper install java-1_6_0-openjdk
    在OpenSuSE下安裝。
  9. TauP有沒有文字介面能快速計算地震學的一些參數呢?
  10. 當然有,詳細指令請參考TauP指令筆記。TauP在1.2之後新增一個taup_console的指令,這是在taup裡新增一個shell來撰寫Jython語言的一個環境,與計算較無關連。你應該閱讀TauP說明檔來彌補本文的不足。

Share

GMT簡易安裝筆記

GMT(Generic Mapping Tools)是一套open source的軟體,用來繪製精細的、各式各樣的地理圖形或是xy,xyz軸的分佈圖;我想地球科學領域的同好幾乎都用過他。兩位主要的作者Paul WesselWalter H. F. Smith是超強的unix/C/地震學家,在筆者的心目中,那簡直就是神的境界!!!

儘管不是用java寫成的,但是作者還是非常貼心的提供各種平台的版本(Unix, Linux, Mac, OS/2以及Windows)供大家安裝。安裝的方法大致上有兩種:到GMT網頁上去下載安裝,或是利用Linux內建的套件管理程式安裝。本文主要針對Linux以及MacOS上安裝GMT所做的筆記。

一、至GMT首頁下載安裝

點選頁面上GMT的圖示連到首頁,並且點左側DOWNLOAD連結。我們用Automated install的安裝方式,首先請確定是否可以解bzip2:

which bzip2
如果有顯示,就表示可以繼續下一步;沒顯示的話,運氣不好,自己想想辦法吧@_@|||
其次,請確定你能夠正常的使用bash。不過bash是linux的default shell,debian的dash也是可以的。
第三,假設你要把GMT安裝到/opt/gmt裡,請確定你有/opt/gmt的讀寫權限。如果沒有也沒關係,用root去安裝他即可。
第四,請確定你的系統裡有gcc跟make:
For Debian users:
aptitude install gcc make
For OpenSuSE users:
zypper in gcc make
For Fedora/CentOS users:
yum install gcc make
For MacOSX users:
請放入Application的光碟片,把xcodes安裝起來,這樣就會有gcc跟make了。
最後,下載安裝的script檔,並且把他變成可執行:
wget -c ftp://ftp.soest.hawaii.edu/gmt/install_gmt chmod +x install_gmt
接著,請連結到INSTALL_FORM填寫一些表格。

A. Basic requirement:

  1. Select default units in GMT:
    我們習慣公制單位,因此選擇SI units (cm)。
  2. Select default PostScript output format for GMT:
    PS比EPS具有更多的頁面列印的彈性設定,因此我們放心的選擇PS。
  3. Select POSIX Advisory File Locking:
    選擇"YES. Use file locking"。
    我們如果想要把gmt的指令當成管線再傳給下一個gmt指令,最好將.gmtcommands這個檔案鎖定寫入。在舊的solaris(< 5.7)或是linux核心<2.4的機器上,存取NFS檔案時會有問題。不過我們的機器都遠比這來得新,所以不必考慮這個問題。

B. NetCDF Setup

  1. Select the appropriate netCDF library option:
    如果你不知道或不確定你有沒有netcdf的話,點選"Please get and install the latest netCDF 3.6.x"即可。

C. GMT Setup

  1. Select the FTP site nearest you:
    選擇Japan或是Australia都可以。(真希望以後有台灣的mirror,而且是在地球所裡面!)
  2. Select passive [Default] or active ftp transmission:
    你可能要了一下你的網路架構。通常主機架在防火牆內部,你必須要選擇passive的方式。如果不是,選擇active。
  3. Select the components you want (bzip2 sizes indicated):
    反正硬碟都夠大,全勾選吧!
  4. Select which triangulation algorithm to use:
    選擇Watson's algorithm。原因是Watson的演算法是GNU的,但是Shewchuk's algorithm卻不是GNU的。雖然不能如此自由的使用,但他還是免費的,如果你有需要,是需要自己編譯的。
  5. Select library build type:
    static跟shared的差別是,gmt要不要跟其他應用程式共用函式庫。如果共用的話,可以節省空間,不過可能會被愚蠢的系統管理員搞砸而無法正常使用;static是自己擁有自己的函式庫;缺點是佔用更多的硬碟空間,優點是不會被愚蠢的管理員惡搞而無法使用。
    要選擇哪一個都無所謂,自己決定吧!
  6. Select the C compiler you want to use:
    選擇gcc吧!除非你還有裝其他的C compiler!
  7. Select the make program you want to use:
    選擇make吧!除非你還有其他make工具。
  8. Select GMT final destination directories:
    除非你想要自訂每個目錄的位置,否則放置subdir的地方預設就會是你執行install_gmt的目錄。假設你想要在/opt/gmt裡執行install_gmt,那麼第一行就填入"/opt/gmt"吧!sundir就可以不用管他了。
  9. Select alternative GMT_SHAREDIR directory:
    shared directory會放置一些比較大型的檔案,除非你有硬碟空間上的考量,否則可以略過他!
  10. Alternative coastline directories:
    同樣的,如果你有硬碟空間上的考量,否則可以略過他!
  11. Select supplemental packages to install:
    您可以全部勾選!!
  12. Additional information for MEX (Matlab or Octave):
    octave是一套linux下的matlab的替代方案,他比起matlab僅稍稍遜色一些,不過由於沒有圖形介面且參考資料較少,其實懂得使用octave的人少之又少;
    假設您沒有在GMT下呼叫matlab或是octave的函數的需求,此處留空白或是填入位置都是沒有效果的。
  13. Complete the operation:
    恭喜你,填完表格了!你可以選擇裝完成後刪除所有下載下來的檔案,也可以執行測試的script看看gmt有沒有安裝成功!
點選"GET PARAMETERS",就可以得到我們剛剛所有選項的設定檔的頁面;請把他另存成一個檔案,假設叫做param.list;也假設你要安裝gmt的位置在/opt/GMT:
cd /opt/GMT
./install_gmt param.list
就讓這個script幫我把netcdf以及gmt自動安裝完成!結束之後,您應該會看到有一個類似這樣提示設定:
這樣,就輕鬆完成自訂安裝囉!

二、使用linux的套件管理程式安裝

使用各家linux所提供的套件管理程式來安裝GMT是最快樂不過的事情了!因為他又快又簡單!
For Debian/Ubuntu users:

aptitude install gmt gmt-examples gmt-tutorial-pdf gmt-tutorial gmt-doc-pdf gmt-doc-ps
不過,debian裡竟然沒有自動幫我們把GMT的環境變數給設定上去!我們只好手動設定!
GMTHOME="/usr/lib/gmt"
export PATH=$PATH:$GMTHOME/bin
往後,我們可以到/usr/share/doc/gmt/html/index.html來翻閱手冊以及文件。
For Fedora/CentOS users:
yum install gmt gmt-examples
For OpenSuSE users:
請加入science repos:
zypper install gmt gmt-examples
For MaxOS users:
如果你沒有fink或是沒有聽過fink,請到這裡選擇你的cpu架構並安裝他(假設你已經知道如何安裝fink了!)。安裝完畢後請更新fink套件管理的cache:
fink scanpackages && fink index
apt-get install gmt gmt-shlibs gmt-docs
你沒看錯,fink就是看上linux裡最強的套件管理系統:apt-get,所以他的操作模式就跟debian使用的經驗幾乎相同;透過他你也可以在mac輕易的安裝許多gnu的程式!

三、下載高解析度海岸線檔

如果你用的是第一個方法,也就是到GMT官方網站去安裝GMT的話,你應該就有高解析度的海岸線檔案了。請檢查/usr/share/gmt/coast(放置海岸線檔案的資料料夾),看看這些cdf檔是否有binned_border_h.cdf、binned_GSHHS_h.cdf、binned_river_h.cdf這幾個高解析度的檔案。如果沒有的話,我們就只好手動來新增:

wget -c ftp://ftp.iris.washington.edu/pub/gmt/GSHHS2.0.1_full.tar.bz2
wget -c ftp://ftp.iris.washington.edu/pub/gmt/GSHHS2.0.1_high.tar.bz2
tar jxvf GSHHS2.0.1_full.tar.bz2 -C /tmp
rsync -av /tmp/share/coast/ $GMTHOME/share/coast/
rm -r /tmp/share
tar jxvf GSHHS2.0.1_high.tar.bz2 -C /tmp
rsync -av /tmp/share/coast/ $GMTHOME/share/coast/
rm -r /tmp/share
這樣無論是用哪一種方法安裝GMT,都可以畫出美麗的圖啦!剩下就憑自己的功力囉!

Share

2009年9月16日 星期三

[轉載]零分還是一百分

核子物理學之父歐尼斯特‧拉瑟福當他在擔任皇家學院校長時,有一天接到一位教授打來的電話:
「校長大人,我有個不情之請,要拜託你幫忙。」
「大家都是老同事,幹嘛這麼客氣?」
「是這樣的,我出了一道物理學的考題,給了一個學生零分,但這個學生堅持他應該得到滿分。我和學生同意找一個公平的仲裁人,想來想去就閣下你最合適 …」
「你出的是什麼題目?」
「題目是:如何利用氣壓計測量一座大樓的高度?校長大人如果是你怎麼回答?」
「還不簡單,用氣壓計測出地面的氣壓,再到頂樓測出樓頂的氣壓,兩壓相差換算回來,答案就出來了。當然也可以先上樓頂量氣壓,再下到地面量氣壓。只要是本校的學生都應該答得出來。」
「對,你猜這個學生怎麼答?他答說:先把氣壓計拿到頂樓,然後綁上一根繩子,再把氣壓計垂到一樓,在繩子上做好記號,把氣壓計拉上來,測量繩子的長度,繩子有多長,大樓就有多高。」
「哈,這傢伙挺滑頭的。不過,他確實是用氣壓計測出大樓的高度,不應該得到零分吧?」
「他是答出一個答案,但是這個答案不是物理學上的答案,沒辦法表示他可以合格升等到下 一個進階的課程啊!」

拉瑟福第二天把學生找到辦公室,給學生六分鐘的時間,請他就同樣的問題,再作答一次。

拉瑟福特別提醒答案要能顯示物理學的程度。

一分,兩分,三分,四分,五分鐘過去了,拉瑟福看學生的紙上仍然一片空白,便問: 「你是想放棄嗎?」

「噢!不,拉瑟福校長,我沒有要放棄。這個題目的答案很多,我在想用哪一個來作答比較好,你跟我講話的同時,我正好想到一個挺合適的答案呢!」

「對不起,打擾你作答,我會把問話的時間扣除,請繼續。」

學生聽完,迅速在白紙上寫下答案:把氣壓計拿到頂樓,丟下去,用碼錶計算氣壓計 落下的時間,用 x =0.5 x a x t^2 的公式,就可以算出大樓的高度。

拉瑟福轉頭問他的同事,說:
「你看怎樣?」
「我同意給他九十九分。」

「同學,我看事情就等你同意,便可以圓滿解決。」

「校長,教授,我接受這個分數。」
「同學,我很好奇,你說有很多答案,可不可以說幾個來聽聽?」

「答案太多了,」
學生說:

「你可以在晴天時,把氣壓計放在地上,看它的影子有多長,再量出氣壓計有多高,然後去量大樓的影子長度,同比例就算出大樓的高度。」

「還有一種非常基本的方法,你帶著氣壓計爬樓梯,一邊爬一邊用氣壓計做標記,最後走到頂樓,你做了幾個標記,大樓就是幾個氣壓計的高度。」

「還有複雜的辦法,你可以把氣壓計綁在一根繩子的末端,把它像鐘擺一樣擺動透過重力在樓頂和樓底的差別,來計算大樓的高度。
或者把氣壓計垂到即將落地的位置,一樣像鐘擺來擺動它,再根據『徑動』的時間長短來計算大樓的高度。」

「好孩子,這才像上過皇家學院物理課的學生。」

「當然,方法是很多,或許最好的方法就是把氣壓計帶到地下室找管理員,跟他說:先生,這是一根很棒的氣壓計,價錢不便宜,如果你告訴我大樓有多高, 我就把這個氣壓計送給你。」
「我問你,你真的不知道這個問題傳統的標準答案嗎?」

「我當然知道,校長。」

學生說,

「我不是沒事愛搗蛋,我是對老師限定我的『思考』感到厭煩!」

拉瑟福遇到的學生名叫尼爾斯 ‧ 波爾﹝Niels Bohr ﹞,是丹麥人,他後來成為著名的物理學家,在一九二二年得到諾貝爾獎。

在我們的小學學校考試,考試題目是:下列哪一個答案不是植物?
A 桃子,B 竹子, C麥子,D桌子,E 獅子。
小朋友只選了獅子,
老師說:「錯,桌子也不是植物。」

小朋友不服氣,說:「桌子是木頭做的,木頭是樹砍下來的,樹是植物吧,那桌子怎麼不是植物呢?」
老師說:「不是就不是,你想太多了!」
小朋友回家問媽媽,他媽告訴他:「不要想那麼多!」

老師錯了嗎?也未必,因為桌子不一定都是木頭做的,也有鐵的、塑膠的,但 問題不在答案是什麼?而在思考能不能展開四方?
像釋迦牟尼說的,有八萬四千個法門,每一個法門都是方便法。
從哪個門進去,都可以到羅馬。

如果我們不給孩子思考的空間,
不給他詢問解惑的機會,
那他得到的不是「教育」只是「教訓」!

從小到大,我最討厭老師說我想太多,我討厭不動腦筋思考的人;
不過,我們台灣的教育從小就是被訓練成有「標準答案」,死背國文的註釋還必須一字不漏,而不讓學生用自己的文法跟理解去解釋跟表達!
扼殺我思想的正是我的「老師」們,我實在是很討厭傳統教育的老師,不是沒有原因的!

Share