2015年4月7日 星期二

git ignore 寫法

每次都會忘記要怎麼寫...Orz
記性越來越爛.

參考的網址,
http://www.chengxusheji.com/archives/121.html

忽略目錄.
build/  , 忽略所有 build/ 目錄資料夾

如果有以下情況
build/test1/
build/test2/
build/test3/

build/
!build/test3/
則變成忽略所有build/目錄, 但是 build/test3/ 依然會被記錄


/build/
/foo/
表示gitignore不會遞迴紀錄,只會把目前的目錄下的 build/, foo/ 忽略

build/*.tmp
表示只會忽略 build/ 下的所有 *.tmp 檔案
但是 build/another_folder/*.tmp 子目錄下的 *.tmp 就不會被忽略,依然會被記錄

2015年4月1日 星期三

timer create 之value 搞錯

把timer structure 的member 意義搞反,真是蠢到不行
難怪我一直覺的polling的時間間隔好像怪怪的

struct itimerspec *it=itimerspec;
 memset(evp,0,sizeof(struct sigevent));
 evp->sigev_signo = SIGUSR1;
 evp->sigev_notify = SIGEV_SIGNAL;

timer_create(CLOCK_REALTIME, evp, tid)

interval :polling time的間隔
value: 第一次觸發signal function的時間
用下面的例子解釋,
1秒後觸發 signal function
之後, 每500ms就觸發一次polling function

it->it_interval.tv_sec = 0;
it->it_interval.tv_nsec = 500*1000*1000;
it->it_value.tv_sec = 0;
it->it_value.tv_nsec = 1;



2014年12月25日 星期四

在android shell下,no such file or directory 找不到檔案

沒在Android上寫程式過啊,還以為一樣都是linux作法應該都一樣
卻忘了最重要的事情啊,Android改寫過gnu library阿.
一般情況下用的cross compile編出的執行檔,完全不能在android上shell執行
用adb把檔案送到機器上卻發現,
/system/bin/sh: ./test: No such file or directory

如果要編出簡單的測試執行檔要加 -static,不能動態連結阿.
arm-linux-gcc -o test -Wall test.c -static
REF:
http://bbs.csdn.net/topics/390349057

真的是改天要找時間研究怎麼在build android用的執行檔,真是太蠢了..Orz

2014年12月9日 星期二

linux command time 的用法

看man page 還是有點模糊.

這邊試了一下發現time要用/usr/bin/time的才會有 --format 的參數可以吃。
要不然都是一直跳出 invalid argument

不過有一個參數還滿有用 %C
=>顯示這次計時用的命令跟參數

一般預設的時間結果,
real $e
user %U
sys  %S

eg:
time --format "%C  real: %e[sec] " du -h -d 1

2014年12月8日 星期一

linux下掛載android平板

在linux下本來以為跟一般USB storage依樣會出現在 /media下面,
不過看來完全不是這麼一回事阿.

看起來好像是因為MTP檔案格式的問題,最後在下面的link找到類似的答案.

路徑會是在/run/user/$USERID/gvfs/$PAD_MTP_URL/xxxxxxxxxx
找了一個早上

http://askubuntu.com/questions/342319/where-are-mtp-mounted-devices-located-in-the-filesystem

2014年6月26日 星期四

github 使用 -- CAfile fail 解法

出師不利,一開始就遇到問題
error: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none while accessing https://github.com/githankH/The_Swift_Programming_Language_zh-TW.git/info/refs?service=git-upload-packfatal: HTTP request failed

解法:
$ export GIT_SSL_NO_VERIFY=1
不過變成upload的時候會需要敲github的帳號密碼.

**
git remote -v
=> 看目前有哪些遠端分支
git remote rm $name
=> 砍掉目前的 $name 遠端分支

2013年4月15日 星期一

CTags 使用

Trace C Code 的Ctags,
沒辦法誰叫 source insight 這麼貴.(攤手)

要下載pacakge的可以參考這篇文章

CTags man page: 教你怎麼用指令
最常用的就是 ctags -R -f .tags. 在當前目錄以下的所有檔案建立tag

流程就分成兩步,
1. 把所有的想建立tag的 c,h 檔案都path都寫到 .tags, 這個tagfile可以自己命名. 重點是下一部產生的 .tags
2. 用ctags.exe讀取剛剛產生的tagfile,產出ctag format的檔案.
在 Sublime Text 選擇建立rebuild tags, 這樣就可以把source code跟tag建立起來了

1)建立source

# find ./ -path './drviers/iav2' -prune -o -path './drivers/gpu' -prune -o -name "*.[ch]"  -print > tag_source

2)產生 tags 檔, 

sublime text 2 只接受 .tags 的格式,
# ctags -L tag_source -f .tags
=> -L, 讀取含有檔案列表的文字檔
=> -f, 產出 tags 檔案

PS: .tags 檔案要存放在當前工作目錄下,要不然Sublime Text 會找不到

PS:
解釋這裡 find 的用法
-prune ,忽略不看的意思
-path, 跟 -name很類似,但是這個是用來指定目錄路徑
-o , -or 的意思,用來作邏輯表示
-name, 找檔名符合我們的表示
"*.[ch]", 任何是以  '.c' 或 '.h'結尾的檔案
整串組合起來的意思是
find .
=> 找尋當前目錄下所有的檔案,
-path './drivers/iav2 ' -prune -o
-path './drivers/gpu'  -prune -o
=>其中目錄路徑為./drivers/iav2或./drivers/gpu都省略不看
-name "*.[ch]
=>其它的剩餘目錄中如果有檔案結尾是.c或.h的
-print
=>全部列印出來

# find ./ -path './drviers/iav2' -prune -o -path './drivers/gpu' -prune -o -name "*.[ch]"  -print
=> 找尋當前目錄下所有的檔案,其中目錄路徑為./drivers/iav2或./drivers/gpu都省略不看,其它的剩餘目錄中如果有檔案結尾是.c或.h的全部列印出來