發表文章

目前顯示的是 3月, 2017的文章

Screen分頁工作

如果不嫌棄Screen版本太舊,可以直接安裝Ubuntu的套件 安裝Ubuntu的套件包 sudo apt-get install screen 自行編譯套件 官網下載程式碼 https://www.gnu.org/software/screen/ 編譯程式碼 ./configure --prefix=/home/yhchiu/screen --bindir=/usr/local/bin --enable-colors256 make && sudo make install Screen設定檔 沒有設定的Screnn你感覺不到差異,會覺得什麼事情都沒有發生 所以要參考別人的screen設定檔,放在~/.screenrc https://www.puritys.me/docs-blog/article-168-%E5%A6%82%E4%BD%95%E5%9C%A8-Win-,-Mac-,-Chrome-%E8%A8%AD%E5%AE%9A%E5%AF%A6%E7%94%A8%E7%9A%84-.screenrc.html http://napmas.blogspot.tw/2011/09/screenrc.html 加入切換Tab的功能鍵 bindkey ^[z prev # 往上個Tab Alt+z bindkey ^[x next # 往下個Tab Alt+x Screen快捷鍵 全部都要先按一次Ctrl+a,再按功能鍵, 大小寫有分 Ctrl+a, ? 快捷鍵的說明文件 Ctrl+a, v 看版本 Ctrl+a, c 開新tab, 在screen裏面輸入screen指令也是開新視窗 Ctrl+a, p 往上個tab Ctrl+a, n 往下個tab Ctrl+a, k 關閉當前tab,會詢問是否真的要離開 Ctrl+a, C 清除terminal內容 Ctrl+a, Z 清除terminal內容 Ctrl+a, \ 離開Screen,會詢問是否真的要離開 Ctrl+a, w 顯示tab, 並用星號顯示目前所在tab Ctrl+a, N 顯示目前所在tab的編號 Ctrl+a, S 上下分割視窗 Ctrl+a, Ctrl+i 上下分割視窗 Ctrl+a, [ 複製

背景執行程式

Linux上讓程式背景執行的方法 Linux上有些指令的運作時間比較長,我們會希望他在背景執行,好讓我們同時間可以處理其他事情,這種情況下,我們可以在指令最後加上 & 讓程式放在背景執行。 例如我用find指令從根目錄搜尋符合"the file"的檔案 find / -name "the file" & 系統就會顯示放入背景執行的程式PID,而你的Console可以繼續輸入指令。 恢復成前景執行 要把背景執行中的程式,到前景時則是輸入 fg 察看背景執行的程式清單與狀態 輸入jobs就能夠 jobs #顯示程式狀態與執行的指令 jobs -l #比jobs多顯示PID jobs -r #顯示Running狀態的程式 jobs -s #顯示Stopped狀態的程式 因為jobs是shell指令,要看jobs指令的用法要輸入 help jobs 針對已經正在執行的程式 如果已經在執行的可以先按Ctrl+z暫停程式執行,Console會顯示你的程式變成Stopped狀態,然後輸入bg讓程式變成背景執行。 bg 如果Ctrl+z之後沒有要放到背景執行的話,可以直接輸入fg,讓程式恢復Running狀態。 遠端狀況下的背景執行 使用ssh的時候會希望ssh session關閉後程式還能運作,這時候就要用nohup來避免中斷程式 因為nohup執行程式時的輸出會直接到nohup.out中,所以要跑多個程式最好自己指定螢幕輸出的檔案 nohup your_command &>myout.txt & 參考資料 http://dragonspring.pixnet.net/blog/post/33257496-%5Blinux%5Btips%5Dnohup:-%E8%AE%93command%E5%9C%A8%E9%81%A0%E7%AB%AF%E5%9F%B7%E8%A1%8C%EF%BC%8C%E4%B8%8D%E5%9B%A0%E7%99%BB%E5%87%BA

Android.mk解決JNI library不會被包進APK內的問題

要包裝JNI library到APP中,在不同版本的ANDROID環境中的設定不太相同 主要是build system中的預設行為被改變了,目前我使用過的4.4.2/5.x/6.0/7.0都可統一用下面方法把JNI Libray包進APP中 在APP的Android.mk修改下面兩項:  將原本的tag改成tests或是samples LOCAL_JNI_SHARED_LIBRARIES := {加入你的所需要的library名稱}

Ubuntu Terminal快捷鍵與設定

圖片
起動Terminal Ubuntu系統快捷鍵 Ctrl+Alt+T Command line指令 gnome-terminal 常用的快捷鍵 Ctrl+Alt+T  open a new terminal Ctrl+Shift+T open a new tab Ctrl+Shift+W close current tab Ctrl+Shift+Q close the whole terminal Ctrl+Shift+C  拷貝內容畫面上所選內容到系統剪貼簿 Ctrl+Shift+V  從系統剪貼簿貼上所選內容 由於我們編輯程式常常會開多個Vim並剪貼部份程式碼,為了跨Process剪貼,會需要使用系統剪貼簿來輔助。如果你的vim已經有support直接剪貼系統剪貼簿,或者你是用vim的分頁功能,則不太會需要使用到這個快捷鍵。 Shift+"Page up" 畫面向上捲 Shift+"Page down" 畫面向下捲 Tab 使用自動完成(auto-complete)功能 Terminal的無限buffer功能 上方Menu的Edit→Profile Preferences選分頁Scrolling,勾選裏面的unlimited功能 設定Terminal的快捷鍵 Terminal的快捷鍵設定在上方的Edit的Keyboard Shortcuts中可以找到,我自己會設定Terminal 的Rest and Clear快捷鍵為F9,方便我快速清除Terminal的buffer。 用bash的clear指令是不會清除Terminal的Buffer,只要用上下滑動滑鼠滾輪,或是捲動畫面得快捷鍵就會看到之前的指令訊息,對於查錯誤很不方便。 自動紀錄Terminal的指令與訊息 如果想要把每個Terminal的資訊都儲存下來,可以參考下面資料使用script指令,開始紀錄到指定檔案,再用Ctrl+D結束紀錄到檔案。 https://answers.launchpad.net/ubuntu/+source/gnome-terminal/+question/7131

Java與C++的函式參數傳遞比較

圖片
Java參數傳遞測試 Java的參數傳遞對於基本型態是複製,而物件型態則是類似C/C++的指標行為, 是複製物件的位址到函式中,所以在函式內assgin的新物件不影響外部變數所指的變數。 C++參數傳遞測試 而C++的參考則是會讓外部變數跟內部變數的狀態保持一致。 Java測試用程式碼 public class test {     static class MyObject {         public int iv = 0;         public String is = "initial field";         public MyObject io = this;         public MyObject() {         }         public MyObject(int primitive, String string, MyObject object) {             iv = primitive;             is = string;             io = object;         }     }     static public void setSomething(int primitive, String string, MyObject object) {         System.out.println("setSomething");         primitive = 200;         string = "do something";         object = new MyObject();     }     static public void setSomething2(int primitive, String string, MyObject object) {         System.out.println("setSomething2");         primitive = 300;         string = "do something 2&qu

顯示硬碟資訊的指令

察看目前系統硬碟裝置的使用量 df df -h -h是把原本顯示完整數值的部份改成人可讀的多少G,或是多少M 察看目前系統硬碟裝置的大小 lsblk 會用數狀顯示device的partition狀態 顯示硬碟裝置的sector, cylinders, io size等等資訊 sudo fdisk -l References http://www.tecmint.com/find-usb-device-name-in-linux/

git查兩個commit的距離

方法1 git log {old versioin}..{new version} --oneline | wc -l 方法2(較快) git rev-list {old versioin}..{new version} --count rev-list只印出sha1 code 例如: git log HEAD~10..HEAD --oneline | wc -l git rev-list HEAD~10..HEAD --count Reference: http://gal.steinitz.com/blog/2013/07/27/git-tips-count-number-of-commits-between-two-commits/

經典運算方法蒐集

The bit twiddler http://bits.stephan-brumme.com/