2016年8月31日 星期三

讓GROMACS支援新的residue

GROMACS裡面想要增加carbamylated lysine這個residue(在這邊叫做KCX),參考Adding a Residue to a Force Field,總共需要下面幾個步驟:
  1. 新增 /opt/local/share/gromacs/top/FORCEFIELD/kcx.rtp 這個檔案
  2. 新增 /opt/local/share/gromacs/top/FORCEFIELD/kcx.hdb 這個檔案
  3. 修改 /opt/local/share/gromacs/top/residuetypes.dat,加入KCX
這邊不需要像文件上面說明的那麼多步驟是因為沒有多增加什麼特別的原子。上面三個檔案的意思分別是:
  1. 新的residue其原子的電荷分佈、還有連結的共價鍵等
  2. 新的residue上面如何加入氫原子
  3. 讓GROMACS支援新的residue

若要增加Ligand,請參考Justin Lemkul的《Protein-Ligand Complex》的說明

_EOF_

2016年8月30日 星期二

看執行程式的預設路徑(PATH)

在類UNIX系統裡面,想要看預設哪些資料夾下的指令可以直接跑,輸入
  • echo $PATH
  • echo $PATH | tr ':' '\n'
兩者出來的結果是一樣的,只是下面行指令比較好讀。若要知道某個指令現在是哪個路徑來的,則是使用which或是type這個指令:
  • which python
  • ls -l `which python`
  • type python
_EOF_

2016年8月29日 星期一

Macports所安裝程式的預設版本

用Macports安裝程式時有時候會出現相同的程式但是不同的版本。以Python為例子,可能會安裝了python26、python27、python34、python35等等。可以用下面的指令來看預設的版本是哪一個:
  • port select --summary
  • port select --show python
  • port select --list python
  • sudo port select --set python python34

2016年8月26日 星期五

Mac上安裝AmberTools16

在蘋果電腦上面安裝AmberTools16,首先要到AMBER的網頁上面填寫資料,下載程式AmberTools16.tar.bz2後,用下面的步驟將AmberTools16安裝到/pkg/amber16/下面:
  1. sudo port install gcc49 mpich-gcc49
  2. sudo port install netcdf-fortran +gcc49
  3. sudo port install mpich-gcc49
  4. sudo port select --set gcc mp-gcc49
  5. sudo port select --set mpi mpich-gcc49-fortran
  6. sudo port install python35 py35-numpy py35-scipy py35-matplotlib py35-tkinter
  7. sudo port select --set python python35
  8. cd /pkg && tar jxf AmberTools16.tar.bz2 
  9. cd /pkg/amber16 && export AMBERHOME=/pkg/amber16
  10. ./configure -macAccelerate gnu
  11. test -f /pkg/amber16/amber.sh && source /pkg/amber16/amber.sh
  12. make -j 4
  13. make test
  14. make install

2016年8月25日 星期四

最早解出立體結構的蛋白質

多數蛋白質的外觀有著固定的形狀,也就是所謂的立體結構(3D structure)。研究這些結構的學門叫做結構生物學(Structural Biology)。這個學門從1950年代末期開始發展,到1970年代初有一打的蛋白質結構,簡單介紹如下:
  • Myoglobin (1mbn):肌紅素、John Kendrew's structure,1958年得到
  • Hemoglobin (2dhb):血紅素、Max Perutz's structure
  • Hemoglobin from lamprey (2lhb):八目鰻的血紅素,結構介於肌紅素與血紅素之間
  • Lysozyme (1lyz):溶菌酶、DC Philips' structure,1965年解得
  • Carboxypeptidase (3cap):從蛋白質的C端切斷肽鍵(peptide bond)
  • Subtilisin (1sbt):切斷絲氨酸(serine)的肽鍵
  • Chymotrypsin (2cha):切斷含有芳香環的氨基酸,像是酪氨酸(tyrosine)、色氨酸(tryptophan)與苯丙氨酸(phenylalanine)的肽鍵
  • Papain (9pap):木瓜蛋白酶
  • Pancreatic trypsin inhibitor (4pti):胰蛋白酶抑制物,很短的蛋白質
  • Oligomeric lactate dehydrogenase (6ldh):單體型態的乳酸脫氫酶(LDH),當時解出來最大的蛋白質結構。一個單體由334個氨基酸組成,整個LDH則是由四個單體組成的四聚體(tetramer)
  • Rubredoxin (4rxn):含鐵離子的蛋白質,使用四個硫原子來抓住鐵離子
  • Cytochrome b5 (1cyo):還鐵離子的蛋白質,但是用heme group來抓

2016年8月24日 星期三

設定htaccess直接下載檔案

在自己的網頁下,希望某些檔案可以直接下載而不是由瀏覽器開啟,可以藉由修改htaccess來完成。例如說,figure.tiff 這個圖檔放在/home/username/public_html/xxx/ 下面,那麼就只要在這個xxx資料夾下新增一個 .htaccess 檔案,其內容如下:

<FilesMatch "\.(tiff|tif)$">
   Allow from all
   Header set Content-Disposition attachment
</FilesMatch>

2016年8月16日 星期二

簡單的Bash四則運算

在寫Shell script的時候,有時候只需要很簡單的加減乘等運算,這時候只要用到雙小括號就可。不過要注意這些計算都是整數運算,例如說:
  1. A=3
  2. B=$(($A+1)) 
  3. echo "$A $B"
  4. echo $(($A + $B))
  5. echo $(($A - $B))
  6. echo $(($A * $B))
  7. echo $(($A / $B))
  8. echo $(($A % $B))
  9. echo $(($A ** $B))
注意,麻煩點開“閱讀更多”,因為blogspot在沒有點開之前會有顯示錯誤...

2016年8月15日 星期一

所有甲型流感病毒的亞型

常聽到的H1N1, H5N1... 等等,是用來分別甲型流感病毒(Influenza A virus)的方式。
  • H:Hemagglutinin (HA),血球凝集素;目前共18種,命名成H1~H18
  • N:Neuraminidase (NA)、神經氨酸酶;目前共11種 ,命名成N1~N11
所以總共會有18*11=198種可能的甲型流感病毒,用一行Bash指令通通列出來:
  • for subtype in H{1..18}N{1..11}; do echo $subtype; done

在這些裡面,真正廣泛流傳在人類裡面只有三種H1N1H1N2H3N2(參考維基百科Human influenza virus一節),但並不是只有這三種才會感染人類,像是H2N2、H5N1、H7N7等等都會感染。

2016年8月12日 星期五

R的ggplot2基本概念

要將資料畫到螢幕上,首先要有資料;再來是指定資料要怎樣繪圖;最後才是調整圖片。

R的ggplot2這個繪圖套件根據下列幾個概念,將資料描繪到圖上:
  • 資料來源(Data):指定資料來源
  • 美學對應(Aesthetics):選定要繪圖的資料點。例如說xy散佈圖,就要指定哪些資料點是x軸、哪些點是要放y軸
  • 幾何圖案(Geometries):要畫成哪種圖,像是直方圖、散佈圖、箱型圖、柱狀圖、折線圖等等。更多種繪圖方式可以參考ggplot2的Geoms列表
  • 數值範圍(Scales):根據數值範圍可以上不同的顏色,例如說數值由小而大從藍到紅描繪在圖上。參考ggplot2的Scales列表
  • 繪圖面(Facets):將很多張圖放在一起比較,參考ggplot2的Faceting列表
  • 統計轉換(Statistics):將指定的資料轉換成各種統計量,像將連續轉成離散
  • 座標系統(Coordinates):一般是直角座標系統,也可以對調座標,或用極座標系統、甚至是地圖的座標系統。參考ggplot2的Coordinate systems
  • 繪圖主題(Theme):資料以外的繪圖物件,像是說明文字的調整等等

簡單的圖只要前面三個Data + Aesthetics + Geometries就可以畫出來了。更多內容參考GTW寫的《R ggplot2教學:基本概念與qplot函數》裡面ggplot繪圖架構那張圖,Science Craft上的文章《Introducing the Grammar of Graphics Plotting Concept》與Thomas Hopper寫的《A simple Introduction to the Graphing Philosophy of ggplot2》

2016年8月11日 星期四

用R畫常態分佈

用R的ggplot2畫出三個常態分佈,平均分別是-3、0、3,標準差都是1
Three normal distributions plotted by R language
Three normal distributions plotted by R language with ggplot2 package

2016年8月10日 星期三

在screen的終端機內捲動畫面

使用 screen 的時候,想要像一般終端機一樣捲動回去看之前的指令,這時候必須要進入複製模式(copy mode)才行。參考《用screen操控終端機》用 screen -e^Ta 來開啟新的任務程序,在 screen 裡面輸入:
  • Ctrl-t + Esc
  • Esc q
第一步的意思是進入複製模式,在這個模式下可以捲動畫面,要捲動幾行則是看開啟screen的時候的buffter設定是多少(預設是1000行,可以用 -h 2000 設定成兩千行)。要跳出的話就是再按一次Esc。

2016年8月9日 星期二

Pokémon出現的機率

假設每平方公里會有4隻Pokémons,不同區域出現機率都是相互獨立的,那麼任選一平方公里的範圍內,出現某個數量的Pokémons其機率為何?
  • 0隻:$ P\left ( 0, 4  \right )=\frac{e^{-4} 4^{0}}{0!}  \approx 1.83\% $
  • 1隻:$ P\left ( 1, 4 \right )=\frac{e^{-4} 4^{1}}{1!}  \approx 7.33\% $
  • 2隻:$ P\left ( 2, 4  \right )=\frac{e^{-4} 4^{2}}{2!}  \approx 14.65\% $
  • 3隻:$ P\left ( 3, 4  \right )=\frac{e^{-4} 4^{3}}{3!}  \approx 19.54\% $
  • 4隻:$ P\left ( 4, 4  \right )=\frac{e^{-4} 4^{4}}{4!}  \approx 19.54\% $
  • 5隻:$ P\left ( 0, 4  \right )=\frac{e^{-4} 4^{5}}{5!}  \approx 15.63\% $
  • 6隻:$ P\left ( 1, 4 \right )=\frac{e^{-4} 4^{6}}{6!}  \approx 10.42\% $
  • 7隻:$ P\left ( 2, 4  \right )=\frac{e^{-4} 4^{7}}{7!}  \approx 5.95\% $
  • 8隻:$ P\left ( 3, 4  \right )=\frac{e^{-4} 4^{8}}{8!}  \approx 2.98\% $
  • 9隻:$ P\left ( 4, 4  \right )=\frac{e^{-4} 4^{9}}{9!}  \approx 1.32\% $
  • 10隻:$ P\left ( 4, 4  \right )=\frac{e^{-4} 4^{10}}{10!}  \approx 0.53\% $
換句話說,任選一平方公里能夠抓到鬼的機率會是 $1-P\left ( 0, 4  \right ) \approx 98.17\%$

2016年8月8日 星期一

泊松分佈(Poisson Distribution)

假設某研究員平均每三年可以發表5篇期刊論文,那麼此研究員三年發表不到5篇的可能性為何?首先,我們列出剛好發表0, 1, 2, 3, 4篇論文的可能性:
  • 0篇:$ P\left ( 0, 5  \right )=\frac{e^{-5} 5^{0}}{0!} \approx  0.006737947 \approx 0.67\% $
  • 1篇:$ P\left ( 1, 5  \right )=\frac{e^{-5} 5^{1}}{1!} \approx  0.03368973 \approx 3.37\% $
  • 2篇:$ P\left ( 2, 5  \right )=\frac{e^{-5} 5^{2}}{2!} \approx  0.08422434 \approx 8.42\% $
  • 3篇:$ P\left ( 3, 5  \right )=\frac{e^{-5} 5^{3}}{3!} \approx 0.1403739 \approx 14.04\% $
  • 4篇:$ P\left ( 4, 5  \right )=\frac{e^{-5} 5^{4}}{4!} \approx 0.1754674 \approx 17.55\% $
也就是說即使有平均三年出5篇的實力,但實際上三年出不到5篇論文的可能性會是 (0.67+3.37+8.42+14.04+17.55) ≈ 44.05%,將近一半的機率達不到唷~

2016年8月5日 星期五

用TCP wrapper管理網路

前面有提到《用iptables做防火牆》,可以在IP層級把不受歡迎的來源給擋掉,但若是想要擋的是對於某些服務的連線、而不是全部的連線,那就必須要用到TCP wrapper,從TCP層級擋掉不受歡迎的來源。
參考《TCP Wrappers and xinetd》裡面Figure 2.4. Access Control to Network Services,其中Firewall指的就是IP層級的防護,而TCP Wrappers則是TCP層級的防護。可以用TCP Wrapper防護的像是:
  • popd
  • imapd
  • sendmail
  • sshd
  • ldd /path/to/service_name | grep libwrap

2016年8月4日 星期四

開機時自動載入防火牆規則

在Linux上面管理網路封包的進出通常是用iptables,但是令人苦惱的是預設有iptables可以用,但重開機以後之前設定過的規則會跑掉。為了讓開機可以自動載入iptables的規則,可以安裝iptables-persistent這個套件,以下是設定方式:
  1. apt-get install iptables-persistent
  2. iptables-nL 
  3. iptables -A INPUT -s 1.8.1.13 -j DROP
  4. iptables -A INPUT -s 220.227.34.117 -j DROP
  5. iptables-save > /etc/iptables/rules.v4
  6. iptables-restore < /etc/iptables/rules.v4

2016年8月3日 星期三

對所有screen終端機送出一樣的指令

使用screen的時候,有時候想要對每個終端機都下相同的指令,可以這樣做。以下先執行《用screen操控終端機》提到的 screen -e^Ta 來開啟新的任務程序後,開啟多個終端機:
  • Ctrl-t + :at "#" stuff "top^M" + Enter
  • Ctrl-t + :at "#" stuff "q" + Enter
上述指令的執行順序是 Ctrl-t 後,輸入冒號後面再加入at ...,最後按Enter鍵。top^M的意思是在終端機內輸入top後再按Enter,有顏色的指令部分則會顯示在終端機上。上面第一行就是叫所有終端機都執行top,第二行則是送出q,結束top這個指令。以上參考《in Screen, how do I send a command to all virtual terminal windows within a single screen session?》Corey Henderson的回應

_EOF_

2016年8月2日 星期二

用grub讓硬碟可開機

把整個系統的內容都複製到某個硬碟(/dev/sdb)上面,只差要讓這個硬碟可以開機。根據Graeme回應《How to make a bootable HDD with GRUB2》可分成下面幾步:
  1. mount /dev/sdb1 /mnt
  2. grub-install --boot-directory=/mnt/boot /dev/sdb
  3. mount --bind /proc /mnt/proc
  4. mount --bind /sys /mnt/sys
  5. mount --bind /dev /mnt/dev
  6. chroot /mnt update-grub
  7. umount /mnt/proc /mnt/sys /mnt/dev

2016年8月1日 星期一

計算網頁被某個IP瀏覽過的次數

最近某個寫的網頁似乎被用程式不斷的query,造成系統資源吃太多。去/var/log/apache2裡面檢查 error.log 與 access.log 與 other_vhosts_access.log,看究竟是從哪些IP來連的。下面以 other_vhosts_access.log 為例子:
  • cat other_vhosts_access.log | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | sort | uniq -c | sort -n
  • zcat other_vhosts_access.log.*.gz | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | sort | uniq -c | sort -n