2016年12月31日 星期六

結構比對後計算RMSD

通常對齊結構後,計算差異的RMSD會根據對到的原子,若想要對齊所有的C-alpha原子,可以用rms_cur這個指令搭配matchmaker這個參數
  • fetch 2lyz
  • fetch 135l
  • split_chains *
  • rms_cur 2lyzA, 135lA
  • rms_cur 2lyzA and n. ca, 135lA and n. ca
  • rms_cur 2lyzA and n. ca, 135lA and n. ca, matchmaker=-1
  • cealign 2lyzA, 135lA
  • rms_cur 2lyzA and n. ca, 135lA and n. ca
  • rms_cur 2lyzA and n. ca, 135lA and n. ca, matchmaker=-1
這邊要注意,rms_cur並不會處理alternate location的問題,所以必須要先刪除alternate locations,刪除方式參考《處理PDB裡面的alternate location》

_EOF_

2016年12月29日 星期四

終端機提示符號外掛Powerline

終端機的命令提示總是醜醜的,現在可以安裝powerline這個外掛,讓命令提示字元更加漂亮。下面介紹的修改Bash的命令提示字元


2016年12月26日 星期一

安裝php5本體與所有的套件

在Ubuntu與Debian這種用deb package安裝系統上面,用下面一個指令就能夠安裝所有php5與相關的套件:
  • sudo apt-get install php5-*
但如果想要除了mysql以外其他的所有套件,可以用下面的指令:
  • sudo apt-get install `apt-cache search php5 | grep ^php5 | cut -f1 -d ' ' | grep -v mysql | tr '\n' ' '`
apt-cache search將所有php5相關的套件列出,用cut -f1 -d ' ' 將套件名稱留下來,再用grep -v mysql將mysql套件給刪掉,最後用tr '\n' ' '`將所有的套件串成一行

_EOF_

2016年12月23日 星期五

GROMACS計算所有C-alpha的距離

參考《模擬Tryptophan cage的分子動態》,做這個蛋白質分子模擬1 ns,最後會得到configuration file "md.tpr"與trajectory file "md.xtc"這兩個檔案。使用pairdist這個指令來計算此蛋白質中任意兩兩C-alpha原子之間的距離,存放在pairdist.xvg這個檔案中:
  • gmx pairdist -s md.tpr -f md.xtc -o pairdist.xvg -ref "group \"C-alpha\"" -refgrouping none -sel "group \"C-alpha\"" -selgrouping none
上面指令的參數意思分別是:
  • md.tp:configuration file
  • md.xtc:trajectory file
  • pairdist.xvg :任意兩兩C-alpha原子之間的距離存放在這邊。參考pairdist的說明,如果reference有N群 (r1, r2 ... rN)、selection有M群 (s1, s2 ... sN),那總共就會有1 + N*M個欄位。第一個欄位是時間,後面接的就是距離r1-s1, r2-s1 ... rN-s1 再來是 r1-s2, r2-s2 ... rN-s2、...、r1-sM, r2-sM ... rN-sM
  • -ref "group \"C-alpha\"":reference points是C-alpha原子
  • -sel "group \"C-alpha\"":比較的對象是C-alpha原子
  • -refgrouping none:把reference group拆成一個一個比較
  • -selgrouping none:把selection group拆成一個一個比較

2016年12月21日 星期三

改xfs檔案系統的標籤(LABEL)

目前一般Linux的檔案系統是ext4,如果要修改某檔案系統的標籤可以用tune2fs。但如果是xfs檔案系統,則必須要用xfs_admin這個指令:
  • 安裝xfsprogs
  • mkfs.xfs /dev/sde2
  • xfs_admin -L TEMP /dev/sde2
  • mount /dev/sde2 /temp
上述指令的意思是:安裝完xfsprogs之後,會有mkfs.xfs可以將sde2這個磁區格式化成xfs filesystem,再用xfs_admin將此磁區的標籤(LABEL)改成TEMP,最後掛載到/temp

_EOF_

2016年12月20日 星期二

Mac的RAID-1開啟自動重建

Mac OS X內建software RAID-1的功能,當用磁碟工具程式(Disk Utility)將兩個硬碟做成RAID-1後,如果忘記從選項裡面增加"Automatically rebuild RAID mirror sets"這個設定,可以用下面的指令將此設定打開:
  • diskutil appleRAID list
  • sudo diskutil appleRAID update AutoRebuild 1 diskN
用第一個指令,找Device Node那一行,可以知道此RAID-1編號N是多少。第二個指令才是將自動重建(Automatically rebuild)的功能給打開。相關設定參考《Q: Changing "Automatically rebuild RAID mirror sets" setting》《OS X將資料碟變成RAID-1(mirror)》

_EOF_

2016年12月19日 星期一

Mac將RAID-1變回JBOD

之前的文章《OS X將資料碟變成RAID-1(mirror)》是將JBOD的硬碟轉成RAID-1,這邊則是反過來操作,將RAID-1變回JBOD:
  • diskutil appleRAID list
  • sudo diskutil appleRAID delete diskN
下完第一個指令,找Device Node那一行可知道RAID-1編號N是什麼,套用到第二個指令,將這個RAID-1變成兩個JBOD的磁碟。因為是RAID-1,所以變回JBOD之後硬碟裡面的資料都還會存在。英文可以參考《How to manage RAID volumes in El Capitan》

_EOF_

2016年12月16日 星期五

用mdadm做RAID-1(mirror)

兩個一樣的硬碟,用mdadm做成RAID-1,用root登入指令如下:
  1. fdisk /dev/sdc
  2. sfdisk -d /dev/sdc | sfdisk /dev/sdd
  3. mdadm -C /dev/md1 -l 1 -n 2 /dev/sd{c,d}1
  4. mdadm --detail --scan >> /etc/mdadm.conf
  5. mkfs.ext4 /dev/md1
  6. tune2fs -L "MD1" /dev/md1
  7. cat "LABEL=MD1 /md1    ext4    defaults    1 2" >> /etc/fstab
  8. mkdir /md1 && mount /md1

2016年12月9日 星期五

Fedora螢幕截圖組合鍵

Fedora可以用下面組合鍵截圖,存到家目錄的圖片裡面:
  • Printscreen:擷取整個螢幕
  • Alt-Printscreen:擷取當下指定的視窗
  • Shift-Preintscren:擷取選取的範圍
如果加上Ctrl,那就是存到剪貼簿(可以在其他程式裡面直接貼上):
  • Ctrl-Printscreen:擷取整個螢幕,存到剪貼簿上
  • Ctrl-Alt-Printscreen:擷取指定的視窗,存到剪貼簿上
  • Ctrl-Shift-Preintscren:擷取選取的範圍,存到剪貼簿上

_EOF_

2016年12月8日 星期四

啟動Apache2的rewrite模組

Apache的rewrite模組可讓網址看起來比較簡潔(參考《【FreeBSD】在 Apache 利用 mod_rewrite 做到網址轉換》)。以下是安裝在Debian下面的Apache2打開rewrite模組的指令:
  • a2enmod rewrite
  • service apache2 restart
第一行指令打開了rewrite模組,其實也就只是在/etc/apache2/mod-enabled/下面用symbolic link連到/etc/apache2/mods-availabe/rewrite.load而已。第二行則是重新啟動apache2。打開以後,還是要另外修改configuration file,像是.htaccess或是httpd.conf這種檔案,參考《啟動 Ubuntu 下的 Apache mod rewrite 與相關設定 》

_EOF_

2016年12月7日 星期三

讓Apache2支援php

架設網頁伺服器,讓使用者可以在自己家目錄的public_html裡面的php程式正確顯示在網頁上,依序執行:
  1. sudo apt-get install apache2 php5 libapache2-mod-php5
  2. 修改 /etc/apache2/mods-enabled/php5.conf,下面的設定要加上#,改成這樣
    #<IfModule mod_userdir.c>
    #    <Directory /home/*/public_html>
    #        php_admin_flag engine Off
    #    </Directory>
    #</IfModule>
  3. sudo a2enmod php5 
  4. sudo a2enmod userdir
  5. service apache2 restart

2016年12月2日 星期五

計算核酸的濃度

現有一管single strand RNA (ssRNA)溶液1 mL,裡面的ssRNA重量是10 μg (microgram),序列不知道但長度是41 nucleotides,計算此管ssRNA溶液的濃度:
  • 重量濃度:10 μg / 1 mL = 10 * 10-6 / 10-3 g/L = 10 * 10-3 g/L = 10 mg/L
要計算體積莫耳濃度(molarity, M),需要知道序列的分子量。如果序列已知又會寫Python程式可以參考這篇,不會寫程式的參考《DNA and RNA Molecular Weights and Conversions》,找到"Approximate M.W.'s of Nucleic Acids"這個段落:
  • M.W. of ssRNA = (# nucleotides * 320.5) + 159.0 = (41 * 320.5) + 159.0 = 13299.5 g/mol = 13299.5 Daltons
上面公式是計算ssRNA分子量,如果是single-strand DNA或是double-strand DNA用:
  • M.W. of ssDNA = (# nucleotides * 303.7) + 79.0
  • M.W. of dsDNA = (# nucleotides * 607.4) + 157.9
有了分子量,可以用GraphPad的Molarity Calculator來計算體積莫耳濃度,或用下列公式手動作換算:
  • 體積莫耳濃度:10 μg/mL = 10 mg/L = (10 mg/L) / (13299.5 g/mol)
    ≒ 0.0007519 mmol/L = 0.7519 μmol/L = 751.9 nmol/L = 751.9 nM  ≒ 0.75 μM
_EOF_

2016年12月1日 星期四

根據不同條件排序/etc/passwd

根據UID, GID, username來排序/etc/passwd
  • sort -n -t ':' -k3 /etc/passwd
  • sort -n -t ':' -k4 /etc/passwd
  • sort -t ':' -k1 /etc/passwd
-n 代表用string numeric value排序
-t 代表分隔符號,在passwd檔案裡面分隔符號是:
-k 代表排序根據的欄位,1代表第一欄

_EOF_ 

2016年11月30日 星期三

用USB安裝Debian 8.6

用USB隨身碟來安裝Debian 8.6 (Jessie),依序執行:
  1. wget http://debian.nctu.edu.tw/debian-cd/8.6.0/amd64/iso-cd/debian-8.6.0-amd64-netinst.iso
  2. sudo cp debian-8.6.0-amd64-netinst.iso /dev/sde
說明文件是《Preparing Files for USB Memory Stick Booting》
  1. 從交大的mirror site下載iso映像檔
  2. 把此iso寫到隨身碟上
要安裝系統的機器選定從USB開機,之後依照指示安裝
現在裝Debian已有圖形界面,很簡單方便~

_EOF_

2016年11月29日 星期二

Ubuntu16.04調整MBPR上的螢幕亮度

在MacBookPro Retina上面跑Ubuntu 16.04,遇到螢幕亮度無法調整的問題。參考《Can't adjust screen brightness on Macbook Pro 10,1 Ubuntu 13.10》,用root輸入:
  • setpci -v -H1 -s 00:01.00 BRIDGE_CONTROL=0
上面那行放在 /etc/rc.local 裡面,開機後就會直接執行

_EOF_

2016年11月27日 星期日

重新掛載NFS檔案系統

某些時候像是跳電後,原本透過網路掛載的NFS檔案系統會卡住,這時候要強迫所有的NFS檔案系統重新掛載可以執行下面指令:
  • sudo mount -a -t nfs -o remount
_EOF_

2016年11月26日 星期六

Ubuntu16.04裝在MBPR上的無線網路

在MacBookPro上面裝完Ubuntu 16.04後,無線網路不會動。用iwconfig也看不到有無線網路的樣子,除了之前寫過的《舊MacBook Pro安裝Ubuntu Gnome後,修正無線網路不會動的問題 》解法以,另外又找到另外一個更簡單的解法《Wireless driver not working for Broadcom BCM43224 after latest update》,只要依序做下面三個指令:
  • sudo apt-get install linux-headers-generic
  • sudo apt-get install --reinstall bcmwl-kernel-source
  • sudo modprobe wl

_EOF_

2016年11月25日 星期五

從Fedora24升級到fc25

這次系統升級的部分參考《What’s new in Fedora 25 Workstation》,這邊介紹建議的更新方式。打開終端機之後,依找下面步驟一步一步來做:
  1. sudo dnf upgrade --refresh
  2. sudo dnf install dnf-plugin-system-upgrade
  3. sudo dnf system-upgrade download --releasever=25
  4. sudo dnf system-upgrade reboot

2016年11月19日 星期六

Linux調整螢幕顯示設定

Linux的X視窗下,可用xrandr(x resize and rotation)指令直接調整螢幕相關設定,像是亮度、旋轉等等而不需要重新啟動X視窗,指令如下:
  1. xrandr
  2. xrandr | grep connected
  3. xrandr --output HDMI-1 --brightness 0.87
  4. xrandr --output VGA1 --mode 1440x900_60.00

2016年11月18日 星期五

Python一行文:if-else變形

Python中的列表可以用一行文來寫出來,依序執行:
  • a = [x for x in range(1,10)]
  • b = [ 'Even' if x%2==0 else 'Odd' for x in a ]

2016年11月17日 星期四

用tar打包很多個檔案的技巧

用tar打包某些檔案通常只要輸入
  • tar cf x.tar *
但若是檔案很多的時候,會出現arguments too long之類的錯誤訊息。最簡單的解法是打包這些檔案所在的資料夾。不過也可以用下面這個方式來處理:
  1. find . -name "*" > ../folder.list
  2. tar -I ../folder.list -cf > ../folder.tar
  3. tar -I ../folder.list -cf - | pigz -p 4 > ../folder.tgz

2016年11月16日 星期三

掛載目錄的方法

一般來說,使用mount都是將磁區掛載到某個目錄上面,但某些時候會遇到需要掛載某些目錄到另一個目錄的狀況。這時候可以用--bind的參數達成這個目的:
  • mount --bind /md1/user /home/user

2016年11月15日 星期二

Linux上將硬碟弄成GPT分割區

現在硬碟容量越做越大,超過2TB的硬碟以前的常用的MBR分割方式無法用,必須要用到GPT分割方式。在Linux上,用來切割MBR分區的程式叫做fdisk,對應到GPT的程式則是gdisk:

  1. gdisk -l /dev/sdc
  2. gdisk /dev/sdc
  3. sgdisk -R /dev/sdd /dev/sdc

2016年11月14日 星期一

Fedora上安裝Skype

在Fedora24上面安裝Skype,原本以爲去官方網頁《Skype for Linux》下載程式(版本是4.3),然後按着《Install Skype 4.3 on Fedora 25/24, CentOS/RHEL/SL 7.2/6.8》上面的指示作就可以了,但這樣安裝好以後的上線所有的聯絡人都是離線狀態。網路上面有些人認為Skype賣給微軟以後就很常出現這樣的問題。後來下面的解法,簡單說就是安裝Skype for Linux Alpha

首先去《Skype for Linux Alpha and calling on Chrome & Chromebooks》下載deb或是rpm檔案。由於此系統是Fedora,搭配的是rpm的套件。載完後在指令列輸入
  • sudo rpm -ivh skypeforlinux-64-alpha.rpm
如此安裝完畢後,去找到Skype的icon,右上角有個紅色的alpha,執行即可

_EOF_

2016年11月13日 星期日

GRUB命令列的使用方法

在更新系統,或是轉移系統的時候,因為核心修改或是硬體更改的緣故,有時候會造成系統開機時卡在開機管理程式GRUB上面。這時候螢幕會出現GRUB的版本,後面接著提示符號長得像是  grub>
下面就來介紹此GRUB命令列要輸入什麼才能讓系統正常開機:
  1. ls
  2. set root=(hd0,msdos2)
  3. linux /vmlinuz.xxx root=/dev/sda3 
  4. initrd /initramfs.xxx.img
  5. boot

2016年11月11日 星期五

統計蛋白質資料庫

蛋白質資料庫(Protein Data Bank,簡稱PDB)上面存放著以蛋白質為主的生物巨分子立體結構資料。首頁顯示 "An Information Portal to 124286 Biological Macromolecular Structures",更多的統計資料可參考《PDB Statistics》。這邊用幾個簡單的指令來分析PDB這個資料庫
  1. wget ftp://ftp.wwpdb.org/pub/pdb/derived_data/pdb_entry_type.txt
  2. TOTAL=`cat pdb_entry_type.txt | wc -l`; echo $TOTAL
  3. head -n 5 pdb_entry_type.txt 
  4. for TYPE in `cat pdb_entry_type.txt | cut -f 2 -d$'\t' | sort | uniq`; do printf "$TYPE "; NUM=`cat pdb_entry_type.txt | cut -f 2 -d$'\t' | grep $TYPE | wc -l`; printf "$NUM "; FRAC=`echo "scale=4; $NUM/$TOTAL" | bc -l`; echo $FRAC; done
  5. for METHOD in `cat pdb_entry_type.txt | cut -f 3 -d$'\t' | sort | uniq`; do printf "$METHOD "; NUM=`cat pdb_entry_type.txt | cut -f 3 -d$'\t' | grep $METHOD | wc -l`; printf "$NUM "; FRAC=`echo "scale=4; $NUM/$TOTAL" | bc -l`; echo $FRAC; done

2016年11月10日 星期四

直接從命令列執行R script

寫好的Rscript叫做run.R,只要執行並不要儲存執行過程的變數:
  • /opt/local/bin/R --no-restore --no-save < run.R > run.out

在此本機的R安裝在/opt/local/bin/下面,標準輸出的結果存到run.out裡面

_EOF_

2016年11月9日 星期三

Ubuntu 16.04無法用Super-d 顯示桌面

以前裝好Ubuntu以後,桌面管理程式Unity可以直接用 super-d 直接顯示桌面,但裝了Ubuntu 16.04 LTS以後,這個快速組合鍵被取消掉了。網路上《Super+D key shortcut does not show desktop》找到的解法,依序執行:
  1. 用Ubuntu軟體中心 > 安裝 CompizConfig
  2. 打開 CompizConfig
  3. 點選 Ubuntu Unity Plugin
  4. 點選 General、設定 Show Desktop  

_EOF_

2016年11月6日 星期日

讓指令輸出的內容直接用vim打開

Vim可以直接編輯文字檔案,若文字內容是由指令產生(例如說列出根目錄下所有的資料夾 ls -al /)卻想要用Vim來看可以這樣做:
  • ls -al / | vim -
若已經開啟Vim,希望把指令的文字內容導入,只要這樣做:
  • :r !ls -al /

_EOF_

2016年11月5日 星期六

在Mac上安裝BLAST

在自己的Mac主機上跑BLAST,用下面的指令來安裝在/pkg資料夾下:
  1. cd /pkg
  2. wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.5.0/ncbi-blast-2.5.0+-x64-macosx.tar.gz
  3. tar zxf ~/Sources/ncbi-blast-2.5.0+-x64-macosx.tar.gz
  4. tree ncbi-blast-2.5.0+/

2016年11月4日 星期五

Bash讀檔案一次讀一行

如果一行裡面沒有空格,可以用for;要不然就用while。比較下面指令的差別:
  • for WORD in `cat /etc/passwd`; do echo $WORD; done
  • cat /etc/passwd | while read -r LINE; do echo $LINE; done
     
  • for WORD in `cat /etc/hosts`; do echo $WORD; done
  • cat /etc/hosts | while read -r LINE; do echo $LINE; done

_EOF_

2016年11月3日 星期四

R語言比較兩個vectors的差異

假設有兩個向量(vectors),分別叫做q與t,想要知道這兩個向量是不是一樣,進一步想要知道哪邊不一樣可以用下面的指令:
  1. identical(q, t)
  2. unique(q)
  3. unique(t)
  4. unique(q) %in% unique(t)
  5. unique(t) %in% unique(q)

2016年11月1日 星期二

根據某欄來篩選R的資料框架

R的資料框架(data frame)像是Excel裡面的資料表,參考《操作R的資料框架(Data frame)》。假設現在要根據某欄位來篩選出新的資料表,可以用subset來達成

  • df <- read.csv(file="YOUR_DATA.csv")
  • df_sub <- subset(df, df$columnName %in% aVector)

第一行指令是從CSV格式的檔案讀取工作表到df裡面
第二行指令是說,根據df工作表裡面的columnName這個欄位去查aVector,如果有的話就留下來,沒有的話就刪除。

_EOF_

2016年10月31日 星期一

Fedora上安裝Nvidia的驅動程式

舊的MacBookPro5,5,放棄了Ubuntu改裝Fedora(因為比較喜歡Gnome桌面環境,Ubuntu Gnome後來出了一些問題...)。之前要《舊MacBook Pro安裝Ubuntu Gnome後,更新顯示卡驅動 》的動作要重來一次。因為Ubuntu與Fedora兩者差異很大,安裝的方式也相差很多。網路上這篇《Fedora 24/23/22 nVidia Drivers Install Guide》寫的很詳盡,以下是成功的安裝紀錄,指令都用root執行

2016年10月30日 星期日

用遠端桌面連到Fedora的機器

用遠端桌面(Remote Desktop)連Fedora 24。此系統直接進去的桌面環境是Gnome,但遠端連線進去不想要太花俏吃太多資源,所以選擇遠端連線的桌面環境是XFCE。參考bcambl的說明文件《Setup Fedora23 Gnome3 with xRDP via XFCE4》依序執行:


2016年10月29日 星期六

用CE做結構比對

要對齊兩個蛋白質結構,Combinatorial Extension (CE)是其中一種方法。如果只是數個比較,那可以使用網頁版的RCSB PDB Protein Comparison Tool,或是PyMOL裡面內建的cealign指令。但若是要跑很多結構比對,那這樣就必須要下載程式回來自行使用。這個程式到CE其中一位作者Bourne的網頁下面,找到CE Software後下載編譯使用

2016年10月28日 星期五

Windows安裝Python與NumPy

由於Windows並沒有像Mac有MacPorts這樣開源的套件管理工具,所以在安裝Python上面要另外從python.org找軟體來安裝。這篇是2016年的安裝方式,下面的連結則是2017年11月的安裝方式:
建議看上面兩篇的安裝方式即可,後面的方法比較不直覺

Mac安裝Python的NumPy套件

以下介紹如何在Mac上面安裝Python與NumPy套件,使用到的套件管理程式是MacPorts。下面有用到指令的部分請開啟終端機(Terminal)來跑~


Shell一行文:刪除最近產生的檔案

不小心產生一堆檔案,懶得一個一個殺掉,可以用find搭配rm來達成:
  • find /tmp/ -type f -user USERNAME -atime -5m -exec rm {} \; 
參數的意思分別是:
  • /tmp/ :存放檔案放置的資料夾
  • -type f:想要刪除的只有檔案
  • -user USERNAME:檔案擁有者叫做USERNAME
  • -atime -5m:五分鐘內產生的檔案
  • -exec rm {}:五分刪除前面產生的檔案
  • \;:find後面有執行指令都要加入這個

參考資料

_EOF_

2016年10月27日 星期四

關閉Fedora的交換空間(swap)

不像舊版的Linux,只要把/etc/fstab裡面的swap空間給註記起來就好,新的Fedora(這邊的版本是Fedora 24)想關卻關不掉。《cant diable swap》裡面提到原因:為新的systemd會自動去辨識GPT分割的硬碟上有沒有swap區,有的話就會自動掛上去。裡面也提到解法(假設在/dev/sda4分割區是個交換空間):
  • systemctl mask dev-sda4.swap 

2016年10月26日 星期三

讓Fedora的筆電闔上後不休眠

在舊的蘋果筆記型電腦MacBookPro5,5安裝了Fedora24當作桌機用,希望螢幕蓋上之後不要進入休眠,設定則是參考《How to disable auto suspend when I close laptop lid?》上EightBitTony的回應:
  • 修改 /etc/systemd/logind.conf,加入 HandleLidSwitch=ignore
  • 執行 systemctl restart systemd-logind 重新載入設定

2016年10月25日 星期二

使用舊的磁碟管理程式

Mac OS X升級到10.11(El Capitan)之後的磁碟管理程式(Disk Utility)實在爆難用...,想做什麼都不能夠做。所以去挖出10.10(Yosemite)的磁碟管理工具回來用,整個資料夾給複製回來就可以了,然後輸入指令:
  • sudo chown -R 0:0 /Applications/Disk\ Utility\ 10.10.app

在El Capitan上面只能夠用到Yosemite版的磁碟管理程式,如果要換成Mavericks(10.9)的,用上述方式改權限依舊無法使用

_EOF_

2016年10月24日 星期一

把光碟的ISO燒到USB隨身碟上

平常要安裝系統的時候皆需要燒一片光碟片出來,可是通常安裝完以後這片光碟片就沒有用了。這邊介紹將安裝的光碟的ISO燒到USB隨身碟上。安裝之後隨身碟還可以做其他用途~

在這邊介紹用Mac來做這件事:
  1. diskutil list
  2. diskutil unmountDisk diskNs1
  3. diskutil unmountDisk diskNs2 ...
  4. sudo dd if=ubuntu-16.04.1-desktop-amd64.iso of=/dev/rdiskN bs=4m
  5. 注意!! 第4個指令of後面接的是rdisk,不是disk

2016年10月22日 星期六

R語言中安裝與載入套件(Package)

想要安裝或是更新名叫做 oasis 的套件:
  • install.packages("oasis")

載入套件則會有兩種方式:
  • library("oasis")
  • require("oasis")
這兩種方式都可以載入套件,如果是寫在一個R script最前面的話,會使用library;若是在函式裡面要載入會使用require。這是因為library對於載入沒有安裝的套件的反應是出現error,然後停止執行這個R script;若是require的話,對於有沒有載入套件的反應是回傳TRUE與FALSE,之後會繼續執行script。更多關於兩者差別的範例可以參考《What is the difference between require() and library()?》《R中library和require的区别》

若套件已經載入,library與require就會直接跳過而不重新載入。所以想要重新載入,就必須要先卸載這個套件,然後再重新載入:
  • detach(package:oasis)
  • require("oasis")

套件oasis,是用來應用在multipel sclerosis(MS, 多發性硬症)的工具,根據MRI的結果來預測MS對於身體造成損傷的機率。

_EOF_

2016年10月21日 星期五

清除R語言的控制台、變數、繪圖區域

在用R寫程式做計算的時候,控制台(Console)上面會累積許多指令與結果
多了會很煩,可以使用下列組合鍵清除控制台:
  • RStudio:Ctrl-L
  • Macintosh:Command-Option-L
  • Windows:Ctrl-L

2016年10月20日 星期四

Windows備份的0x807800C5問題

在用Windows10內建的備份軟體建立系統映像時,一直出現0x807800C5錯誤訊息、另外還說沒有辦法存取磁碟機,但是已經確定硬碟已經分割並格式化成為NTFS格式

原來是因為此備份硬碟是從Mac上取出,前端會有200MB的EFI磁區。參考這篇《Windows刪除硬碟裡面的EFI磁區》重新分割並格式化後,就可以順利備份了

除了使用系統內建的圖形化備份介面,其實也可以用wbAdmin指令來做
  • Win鍵-R,輸入 cmd,選擇為管理員模式
  • wbAdmin start backup -backupTarget:D: -include:C: -allCritical 

上述指令會把C槽的所有東西都備份到硬碟D裡面,此指令是備份成映象檔而不是硬碟對拷。參考了《Use Windows 10 WBadmin to Create System Image Backup》這篇文章

_EOF_

2016年10月19日 星期三

Windows Subsystem for Linux (WSL)

要在微軟視窗系統(Windows)下面跑Linux程式,除了用虛擬機器、cygwin、wine以外,現在可以用Windows Subsystem for Linux (WSL) 或稱為Bash on Ubuntu on Windows。安裝步驟如下:
  1. 開啟開發人員模式:
    1. 點螢幕左下角視窗鍵 > 點"Windows設定"  
    2. 點"更新與安全性" 
    3. 點"開發人員專用" 
    4. 確認開啟開發人員模式
  2. 安裝Windows Subsystem for Linux (WSL):
    1. 開啟"命令提示字元"  
    2. 輸入 OptionalFeatures 後按Enter 
    3. 勾選表單內"適用於Linux的Windows子系統(搶鮮版(Beta))" 
    4. 重新啟動電腦
    5. 再次開啟"命令提示字元"
    6. 輸入 bash 後按Enter
    7. 確認閱讀條款輸入 Y 後按Enter
    8. 設定自己的帳號與密碼 (這邊的帳號密碼與Windows的可以不同)
  3. 執行 Windows Subsystem for Linux:
    1. 開啟"命令提示字元" 或是 "PowerShell"
    2. 輸入 bash 後按Enter
    3. 開始在Windows內跑Linux
    4. 用apt-get相關指令安裝各種軟體
    5. 用Xming來接Linux的圖形化視窗
    6. 可以直接存取 Windows 裡面的檔案

2016年10月18日 星期二

讓Vim用光棒顯示游標所在的那一行

用vim編輯文件的時候,有時候會不知道游標所在的那一行。這時候可以使用光棒,反白所在的那一行。設定只要修改 ~/.vimrc 這個檔案,加入下面三行即可

set background=dark
set cursorline
highlight CursorLine cterm=none ctermbg=LightGray

_EOF_

2016年10月17日 星期一

設定gvim的預設字型與視窗大小


Vim的圖形化視窗介面程式叫gvim。若要設定一開始啟動的時視窗的大小與預設字型,只要修改 ~/.gvimrc 這個檔案,加入下面三行:
  • set guifont=monospace\ 16
  • set columns=80
  • set lines=36
  • colorscheme torte

2016年10月16日 星期日

設定XClock的顏色

XClock是X Window上面標準配備的圖形化視窗,一般的配色會是白底黑指針
若想要自行配色,如下圖




2016年10月15日 星期六

Windows刪除硬碟裡面的EFI磁區

從Mac換下來的硬碟給Windows使用,會發現硬碟分割前端有著200MB的EFI磁區,使用磁碟管理程式無法刪除。除了另外安裝磁碟管理軟體來刪除以外,也可以用內建於命令列的DiskPart來刪除。
  1. Win鍵-R,輸入cmd
  2. 輸入 diskpart
  3. DISKPART> list disk
  4. DISKPART> select disk N
  5. DISKPART> list partition
  6. DISKPART> clean
  7. Win鍵-R,輸入diskmgmt.msc

2016年10月14日 星期五

R語言中的資料結構

把一堆資料存在一個變數中,根據不同的存放方式,資料結構可以分成下面幾種:

  • 向量(Vector):
    一堆資料排成一串每筆資料的資料型態都必須一樣
    一般會用到的就是浮點數向量、字串向量......
     
  • 矩陣(Matrix):
    向量的二維版本,資料型態必須要一樣
     
  • 陣列(Array):
    向量的多維版本,資料型態必須要一樣
     
  • 因子(Factor):
    跟向量一樣是一堆資料排成一串,但每筆資料會是分類變數(categorical variable),另加入分類名稱彙整資訊
     
  • 串列(List):
    跟向量一樣是一堆資料排成一串,但可以是不同資料型態的變數混搭在一起。而且每筆資料可以是向量、矩陣、陣列、甚至是串列。簡單說就像一串列車,每節車廂要塞什麼東西都可以,是最具彈性的資料存放方式。許多統計分析函數回傳值都會是串列
     
  • 資料框架(Data frame):
    類似Excel的資料表,每個欄位存放的資料型態必須要一樣、但不同欄位就可以不一樣。一般來說資料從外部存入都會存成資料框架
     
  • 時間序列(Time series):
    可以是向量、矩陣、或是陣列,多加入時間的資訊在這個資料結構裡面

簡單的使用範例可參考《Vector, Array, List and Data Frame in R》
變數的基本資料型態參考《R語言的基本資料型態》

_EOF_

2016年10月13日 星期四

R可以計算的距離

計算距離(Distance,或稱相異度Divergence)與相似度(Similarity)有許多方法。在R裡面可以用proxy套件《Registry of proximities》看支援的計算方式。指令如下:

> summary(pr_DB)
* Similarity measures:
Braun-Blanquet, Chi-squared, correlation, cosine, Cramer, Dice, eDice, eJaccard, Fager, Faith, Gower, Hamman,
Jaccard, Kulczynski1, Kulczynski2, Michael, Mountford, Mozley, Ochiai, Pearson, Phi, Phi-squared, Russel, simple
matching, Simpson, Stiles, Tanimoto, Tschuprow, Yule, Yule2

* Distance measures:
Bhjattacharyya, Bray, Canberra, Chord, divergence, DTW, Euclidean, fJaccard, Geodesic, Hellinger, Kullback, Levenshtein, Mahalanobis, Manhattan, Minkowski, Podani, Soergel, supremum, Wave, Whittaker

一般最常用來計算距離的是歐幾里德距離(Euclidean distance),但如果把距離這個概念推廣成兩件事物的差距,就會根據不同的狀況出現各種距離的計算方式。距離與相似度其實是一體兩面的概念,距離近的比較相似、距離遠的比較不相似,因此這個套件會把距離與相似度放在一起。

_EOF_

2016年10月11日 星期二

蛋白質序列包含PROTEIN本身嗎?

蛋白質是由20種氨基酸所構成的長鏈大分子,每種氨基酸都可以用一個英文字母(1-letter code,參閱此表)所代表。所以,每一條蛋白質序列都可以寫成一串英文字母。那麼,所有的蛋白質序列有包含蛋白質(PROTEIN)本身嗎?

2016年10月10日 星期一

讓R語言的迴圈跑平行處理

R語言中,可以用foreach搭配doMC這兩個套件來完成迴圈的平行化,程式碼如下:
rm(list = ls())
install.packages("foreach")
install.packages("doMC")
library(foreach)
library(doMC)
registerDoMC(4)     # Number of CPU cores used in parallel computing

### for loop, using single CPU core ###
df <- data.frame()
for(i in 1:10) {
    Sys.sleep(1)
    df <- rbind(df, data.frame("value"=i, "quadratic"=i*i, "cubic"=i*i*i))
}

### foreach loop, using single CPU core ###
dfs <- foreach(i=1:10, .combine=rbind) %do% {
    Sys.sleep(1)
    data.frame("value"=i, "quadratic"=i*i, "cubic"=i*i*i)
}
identical(df, dfs)

### foreach loop, using multiple CPU cores ###
dfp <- foreach(i=1:10, .combine=rbind) %dopar% {
    Sys.sleep(1)
    data.frame("value"=i, "quadratic"=i*i, "cubic"=i*i*i)
}
identical(df, dfp)

2016年10月9日 星期日

在R中初始化一個空的data frame

一般來說,在R裡面用到data frame常常會是用read.table從csv檔案抓進來指定給某個型態是data frame的變數。不過有時候我們會希望創造一個空的data frame,而且指定好某些欄位的名稱。參考《Create an empty data.frame》裡面digEmAll的回應,直接輸入:

> df <- data.frame(Doubles=double(),
                 Ints=integer(),
                 Factors=factor(),
                 Logicals=logical(),
                 Characters=character(),
                 stringsAsFactors=FALSE)
> str(df)
'data.frame':   0 obs. of  5 variables:
 $ Doubles   : num 
 $ Ints      : int 
 $ Factors   : Factor w/ 0 levels: 
 $ Logicals  : logi 
 $ Characters: chr 

這邊可以看到這個“空的”變數data frame,有五個欄位,分別叫做Double、Ints、Factors、Logicals與Characters,其資料型態分別是浮點數、整數、factor、邏輯值與字串。

_EOF_

2016年10月8日 星期六

R語言的顏色列表


使用R語言的繪圖,常常會遇到要著色卻不知道顏色的名稱為何。其實只要直接輸入下面的指令,就可以找到顏色列表:
  1. colors()
  2. colors()[grep("dark",colors())]
  3. col2rgb("yellow")
  4. rgb(255, 255, 0, maxColorValue = 255) 
上述指令的意思是:
  1. 列出所有顏色的名稱
  2. 列出含有dark的顏色名稱
  3. 看黃色的RGB的十進位編碼
  4. 把RGB編碼轉換色成16進位

或是參考Earl F. Glynn寫的顏色列表(Color Chart),或是點他的PDF檔案(他也有提供程式碼可以自己直接輸出色碼錶)。在此說明幾個常用到的顏色名稱:

2016年10月7日 星期五

找到最接近的數值

有一群從1911到2016的質數,想知道最靠近1975的質數是哪一個
用R語言可以這樣做(粗體是指令,Courier是R回傳的值):

> library("numbers")
> v <- Primes(1911, 2016)
> print(v)
 [1] 1913 1931 1933 1949 1951 1973 1979 1987 1993 1997 1999 2003 2011

> your.number <- 2000
> which(abs(v-your.number)==min(abs(v-your.number)))
[1] 11

> print(v[11])
[1] "1999"

在1911到2016這個區間總共有13個質數,最接近2000的是1999
以上程式碼參考Daniel Malter寫的《Find the closest value in a list or matrix》

_EOF_

2016年10月5日 星期三

模擬Tryptophan cage的分子動態

Tryptophan cage是個人造的蛋白質,長度只有20個氨基酸,序列如下:
NLYIQ WLKDG GPSSG RPPPS

Tryptophan cage在一般的環境下會摺疊成固定的立體結構、稱之為Trp-cage motif。立體結構可以從蛋白質結構資料庫的 1L2Y 下載。由於此結構是用NMR解出來的,會有許多相似的結構。下面的Tryptophan cage的分子動態模擬(molecular dynamics simulation)用NMR的第一個結構當作是初始結構(檔案名稱叫做1L2Ym1.pdb),參數設定參考Justin A. Lemkul寫的《GROMACS Tutorial:Lysozyme in Water》,在Mac上面跑模擬。指令如下:
  1. sudo port install gromacs
  2. port info gromacs
  3. gmx pdb2gmx -f 1L2Ym1.pdb -o processed.gro -ff oplsaa -water tip4p
  4. gmx editconf -f processed.gro -o newbox.gro -c -d 1.0 -bt cubic
  5. gmx solvate -cp newbox.gro -cs tip4p.gro -o solv.gro -p topol.top
  6. gmx grompp -f ions.mdp -c solv.gro -p topol.top -o ions.tpr
  7. gmx genion -s ions.tpr -o solv_ions.gro -p topol.top -nname CL -nn 1    
    選13 SOL
  8. gmx grompp -f minim.mdp -c solv_ions.gro -p topol.top -o em.tpr
  9. gmx mdrun -nt 4 -v -deffnm em
  10. gmx grompp -f nvt.mdp -c em.gro -p topol.top -o nvt.tpr
  11. gmx mdrun -nt 4 -v -deffnm nvt
  12. gmx grompp -f npt.mdp -c nvt.gro -t nvt.cpt -p topol.top -o npt.tpr
  13. gmx mdrun -nt 4 -v -deffnm npt
  14. gmx grompp -f md.mdp -c npt.gro -t npt.cpt -p topol.top -o md.tpr
  15. gmx mdrun -nt 4 -v -deffnm md
  16. gmx trjconv -s md.tpr -f md.xtc -o md_0-1ns_noPBC.xtc -pbc mol -ur compact
    選1 Protein
  17. gmx rms -s em.tpr -f md_0-1ns_noPBC.xtc -tu ns -o rmsd.xvg
    選4 Backbone、再選4 Backbone
  18. gmx gyrate -s md.tpr -f md_0-1ns_noPBC.xtc -o gyrate.xvg
    選1 Protein
  19. gmx trjconv -s md.tpr -f md_0-1ns_noPBC.xtc -o md_0-1ns.pdb
    選1 Proteins

2016年9月30日 星期五

Python的匿名函式lambda

在Python中,一般的函式在使用前必須要先用def定義這個函式的內容,參考《簡單的Python函式》。但平常在用的時候,有時只是在程式碼內臨時需要一個函式而已,並不想要另外在外面多定義一個函式,這個時候就可以使用匿名函式,在Python裡面用lambda expression來完成此功能。

這邊用計算single strand DNA (ssDNA)序列 atgcatgcatgcatgcatgcatgcatgc 的分子量為例子,粗體是輸入的指令、Courier字型則是電腦給的回應

Step 1:啟動Python
$ python3.4
Python 3.4.4 (default, Mar  2 2016, 03:31:27) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

Step 2:輸入序列,這邊輸入小寫,讓python用字串功能upper轉成大寫(使用方法參考《Python內建的字串處理功能》
>>> str='atgcatgcatgcatgcatgcatgcatgc'
>>> str=str.upper()
>>> str
'ATGCATGCATGCATGCATGCATGCATGC'

Step 3:用lambda expression來給一個函式,計算ssDNA的分子量,計算公式參考ThermoFisher的《DNA and RNA Molecular Weights and Conversions》
>>> mw = lambda An, Tn, Cn, Gn: (An * 313.2) + (Tn * 304.2) + (Cn * 289.2) + (Gn * 329.2) + 79.0
>>> mw(str.count('A'), str.count('T'), str.count('C'), str.count('G'))
8729.6

上面的str.count... 是計算字串裡面某個字元出現的個數,這邊可以知道這條ssDNA atgcatgcatgcatgcatgcatgcatgc 的分子量約莫是 8729 g/mol、約莫是8.7 kDa

_EOF_

2016年9月22日 星期四

用Ginger檢查文法

英文寫作對於母語並非英美語的人來說,要找出文法錯誤有時候很困難。Ginger這個網頁可以輸入一句英文,線上檢查是否有文法錯誤,並且能錯誤修正。可以挑出來的錯誤有
  • 主詞動詞一致性
  • 單複數
  • 名詞連名詞
  • 錯字修正
  • 語境拼字修正
  • 不規則動詞變化也能修正
除了網頁以外,還有Windows軟體瀏覽器extensionAndroid appiOS app。但似乎是要收費,而且Mac沒有專用軟體只能夠用瀏覽器extension

剛剛才知道原來文法(grammar)指的是關於語言要如何書寫與口說,至於文字符號形體的規範與使用叫做正寫法orthography)。所以說,寫錯別字拼錯字應該不能算是文法錯誤,而是後面那種不知道應該要如何稱呼的錯誤~

_EOF_

2016年9月12日 星期一

SPEC CPU® 2006簡介

SPEC CPU® 2006是個用來測試CPU效能的標準,裡面包含了兩種基準:

2016年9月9日 星期五

檢查磁碟陣列卡上硬碟的狀態

當硬碟是直接接到主機板的SATA插槽時,可以用 hdparm 與 smartctl 直接檢查其狀態,參考《檢查硬碟的狀態》。但若是硬碟是接在磁碟陣列卡(RAID card)上面的時候,就沒辦法直接這樣檢查。下面介紹以3ware 9650SE 這張RAID card為例子來介紹如何使用smartctl來檢查每個硬碟的狀態
  • smartctl -i -d 3ware,10 /dev/twa0
  • smartctl -H -d 3ware,10 /dev/twa0
  • smartctl -a -d 3ware,10 /dev/twa0
在這邊 twa0 代表的是3ware這張卡的controller number,若有兩張卡,那就會是twa0twa1 而前面的10代表的是這張卡上面的port number。

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

2016年7月29日 星期五

修改screen任務程序的名稱

參考《用screen操控終端機》用 screen -e^Ta 來開啟新的任務程序(session)。假設上面有三個sessions,用 screen -ls 看到分別叫做:
There are screens on:
    5422.pts-0.srv (Detached)
    5448.pts-1.srv (Detached)
2 Sockets in /var/run/screen/S-sb.

最前面顯示的數字代表process ID,中間粗體則是任務程序的名稱(session name),最後則是在跑 screen 這支程式的伺服器名稱。想要把第一個 screen 從 pts-0 改名叫做 runProgram,在上述detached模式下只要輸入:
  • screen -S pts-0 -X sessionname runProgram

若是已經在attached的模式下,也就是說已經在 screen 裡面,那就用下面的方法改名:
  • screen -r pts-1
  • Ctrl-t + : sessionname monitor
第一行指令是從detached模式變成attached模式,進入名叫pts-1的任務程序裡面
第二行輸入順序是同時按住Ctrl與t後放開,按冒號後鍵入sessionname monitor。意思是把 pts-1 這個任務程序改名叫做 monitor

如果一開始就要一個叫做 window 的screen任務程序,直接用 screen -e^Ta -S window 
以上作法參考《Set screen names with GNU screen [closed]》《Rename screen session》這兩篇文章

_EOF_

2016年7月28日 星期四

曾經出現的智人總數

現存的人類都屬於現代人、或叫智人(Homo Sapiens)這一種,也是人屬Homo)下面唯一倖存的物種,其他像是尼安德塔人海德堡人直立人等等人屬的物種都已經滅絕。根據Carl Haub 2011年發表在Population Reference Bureau(PRB)的文章《How Many People Have Ever Lived on Earth?》的估計:
  • 曾經出現在地球上智人的數目約莫是 1076 億
  • 1 A.D.的人口數約 3 億
  • 1800年的人口數超過 10 億
  • 2011年中的人口總數近 70 億
  • 2011年中的人口數約佔所有出現過的人數的6.5%

2016年7月27日 星期三

DRBL讓用戶端開機選擇特定系統核心

DRBL伺服器與用戶端可以分別使用不同的系統核心(kernel)。例如說用戶端有特殊硬體,需要將驅動程式給放到系統核心,這時候就必須要指定特別的系統核心給用戶端。參考DRBL官網FAQ《用戶端電腦如何使用DRBL server上的某個版本核心?使用下面指令:
  • /usr/sbin/mknic-nbi -a -k 2.4.22-1.2199.nptl 

用戶端重開機後用的核心就會是kernel-2.4.22-1.2199.npti了。至於說要怎樣設定不同的用戶端指定不同的系統核心還需要研究看看

_EOF_

2016年7月26日 星期二

DRBL用戶端開機啟動rc.local的服務

參考DRBL企鵝龍官網的文章《如何開啟client端的rsh服務?》,執行:
  • drbl-client-service rc.local on
等它跑完之後,所有的client端下次重新啟動就會執行rc.local了。

若是覺得設定每一台client的rc.local很麻煩,可以先到/tftpboot/nodes下面設定第一台192.168.9.1/etc/rc.local,以這個檔案作為模板拷貝到其他的機器上面
  • for i in {2..234}; do cp 192.168.9.1/etc/rc.local 192.168.9.$i/etc/rc.local; done
  • for i in {2..234}; do diff 192.168.9.1/etc/rc.local 192.168.9.$i/etc/rc.local; done
第一行指令是拷貝,第二行是確認是否檔案都一樣

_EOF_

2016年7月25日 星期一

執行級別(Run Level)

Linux或是類UNIX系統開機時,系統會去判定開機時的執行級別 runlevel。在不同的級別下,會啟動不一樣的服務。一般來說有7個級別0, 1, 2-5, 6, S,欲啟動的服務放在/etc下面的這些目錄(以下的說明參考bizpro寫的《Linux Pi的奇幻旅程(16)-大改造(續)》):
  • rc0.d:負責關機的運作
  • rc1.d:維修模式
  • rc2.d:多人文字模式, 沒有圖形界面
  • rc3.d:多人文字模式, 沒有圖形界面, 具有網路
  • rc4.d:保留未使用
  • rc5.d:圖形界面
  • rc6.d:負責重開機的運作
  • rcS.d:單人模式(single user mode)
要查詢系統當前的執行級別,任選下面兩個指令
  • runlevel
  • who -r
而預設的run level則是存放在/etc/inittab裡面。在檔案最前面幾行看到
  • id:2:initdefault
意思就是預設啟動的run level是2,會去執行/etc/rc2.d裡面的服務。在這個資料夾中的服務都是用symbolic link連結到/etc/init.d/下面的服務,分成下面兩類:
  • S開頭:啟動服務,根據S後面接的數字由小而大依序啟動
  • K開頭:關閉服務,根據K後面接的數字由大而小依序關閉

2016年7月22日 星期五

介電質(Dieletrics)

介電質,用來形容可以減弱電力場的絕緣物。例如說,二氧化鈦(Titanium Dioxide、防曬化妝品、修正液與修正帶裡面的那個白白的成分)就是一種介電質。如果把點電荷放在二氧化鈦的兩邊,套用下面的公式設定介電常數$\varepsilon=110$,則兩個點電荷之間靜電力會比在真空中$\varepsilon=1$小上百倍。
$$ \left |F  \right |=\frac{1}{4 \pi \varepsilon} \frac{\left | q_1q_2 \right |}{r^2} $$
想像介電質像是一個盾牌一樣,會把射出來的電力場給減弱。減弱的原理是,當介電物質感應到電場的時候,會在內部自動生成反抗電場,所以會將減弱穿過去的電場強度。不同物質有不同的方式來產生反抗電場,參考維基上寫的《各種介電質的電極化機制》。反抗的強度可用介電常數(dieletric constant)來量化。參閱CLIPPER CONTROLS上面的《Dieletric Constant Values》,二氧化鈦的介電係數是 110.00。更多關於介電物質如何影響庫倫靜電力可以參照下面由AK LECTURES發布的影片《Dieletrics and Dieletric Constant》


2016年7月21日 星期四

在MacDown輸入公式

使用MacDown編寫Markdown格式的文件,去偏好設定(Preferences)裡面找到Rendering頁面,打開TeX-like math syntax(見下圖)就可以用LaTeX格式輸入公式
更多細節直接參考MacDown的文件
引用的方式有下面兩種方式:
  • 行內使用:$...$ 或 \\(...\\)
  • 自行一行:\\[...\\[ 或兩個錢字號包起來
公式輸入方式參考《在Blogspot輸入公式》


_EOF_