2016年3月30日 星期三

用 eclipse 開啟專案時 big5 亂碼

右鍵點選專案

Properties > Resource > Text file encoding
選擇 UTF-8

eclipse build ant project

已經存在的 ant project 想要用 eclipse 開發的時候
首先在 eclipse import ant project

1. 選擇 File > New > Project
2. 選擇 "Java Project from Existing Ant Build File"

然後在 build.xml 點選右鍵 run as > ant build
就可以 build project 了


2016年3月29日 星期二

git 使用 svn repository

Git 是非常好用的程式碼管理工具, 但是 Subversion 應該才是使用率最高的 VCS
Git 提供了非常好用的功能讓使用者可以在已經用 Subversion 管理的專案中使用 Git
也就是 git svn command

git svn 就是在 local 端使用 git 作為 client 並將 change 提交到 svn repo
可以在 local 享有 git 的功能
但是因為 remote 是 svn, 所以一些跟 remote git 相關的功能無法使用


從 svn 建立 git repository

必須先建立一個可以用 git 提交的 local repo
可以用 git svn clone 從 svn 上抓取檔案下來

git svn clone svn-repo-url -T trunk -b branches -t tag

如果沒有現存的 svn repo 的話, 可以先建立一個空的 svn repo 再做clone
不過建立空的 svn repo 時最好先在裡面放一個檔案
否則用 git clone 下來之後可能會發生無法 push commit 到 svn 的情況

假如是要 clone svn 下面一個 subdirectory 的話
可能會發現檔案沒抓下來, clone 完的 repo 是空的
這時不要加上 -T trunk... 參數
就可以成功 clone


加入多個 svn remote repository

要從多個 svn repo sync code 的話
可以用 git svn 新增 remote svn repo

git config --add svn-remote.newbranch.url https://svn/path_to_newbranch/
git config --add svn-remote.newbranch.fetch :refs/remotes/newbranch


然後可以從新的 svn repo 抓取

git svn fetch newbranch [-r<rev>]

抓取完建立 local branch

git checkout -b local-newbranch newbranch


其他

有時候用 git merge conflict 的時候會發現檔案一樣只是 new line 字元不一樣
一個用 \r\n 一個用 \n
可以在 merge 的時候讓 git 忽略換行字元

git merge master  -s recursive -Xignore-space-at-eol

如果是 binary file conflict 的時候
可以選擇是要使用哪個版本的 binary file

git checkout --ours file-path
git checkout --theirs file-path

Rerefence
Git 與其他系統 - Git 與 Subversion

2016年3月27日 星期日

The alt+tab hotkey not work in the virtual desktop on Windows 7

之前自己寫的虛擬桌面程式最近發現在 Windows 7 上
轉到虛擬桌面時熱鍵 windows 熱鍵例如 alt+tab 會失效
但是微軟自己出的 Desktops.exe 都正常

後來發現網路上有人說 Desktops.exe 監控 keyboard 輸入並且 post message 給 explorer
原本以為要 hook keyboard 需要做 inject dll
但是 Desktops.exe 只有一個執行檔並沒有dll
實在搞不懂他是怎麼做到這件事的?


網路上找不到答案
只好做苦工自己 debug desktops.exe
發現他有 call SetWindowsHookEx



threadID 用 0
應該就是要 inject dll 才對阿
dll 在哪裡勒?

原來...  WH_KEYBOARD_LL 是 SetWindowsHookEx 的一個例外
這邊有說到 不需要 inject dll

所以 desktops.exe 的行為的確跟網路上說的一樣
就是 monitor keyboard input 並且 post 給 explorer.exe

2016年3月22日 星期二

貴貴的 m2r f-5

之前從來沒戴過超過五百塊的安全帽
沒想到現在會買一頂要價四張小朋友的m2r f-5







雖然很貴 不過戴過之後感覺錢花的有值得
當初在買的時候有在店裡試戴過同價位的 sol
但是就沒有這一頂 m2r 舒服
帽子是天天要戴 舒適感是第一考量

而且現在騎車時眼睛不會再被風灌的乾澀
下雨天寒流全罩安全帽比較可以擋雨和保暖

不過這一頂唯一美中不足的是下巴罩太小
冬天時還是會覺得下巴灌風很冷
不過終歸來說還是一頂很好的帽子

2016年3月13日 星期日

用 github app push local repo to bitbucket

假設你安裝好 github on windows 但是今天想要 push 一個 local repo 到 bitbucket
需要幾個步驟

1. 在 bitbucket 建立一個新的 repo

2. 將 local repo remote url 設定為 bitbucket repo
    例如 git remote add origin http://<user>@bitbucket.org/<user>/<project>.git

3.加好 cert 檔案
   先找到 local 上面 ca-bundle.crt 檔案在哪裡
    git config --system http.sslcainfo <cert path>
   例如我的電腦上在 C:\Users\<user>\AppData\Local\GitHub\PortableGit_cf76fc1621ac41ad4fe86c420ab5ff403f1808b9\usr\ssl\certs\ca-bundle.crt

完成後就可以 push 到 bitbucket 了

  

從一個 Android studio new project build 出 apk

新版的 Android studio 要 build 出 apk 的方法
單從 Build -> Make Project 還不夠
要接著執行 Run -> app
才會產生出 apk 檔

為了這個問題搞了頗久
只不過想從一個 new project build 出 apk 檔而已
一個步驟就夠了
Android studio 為什麼要多此一舉...

2016年3月2日 星期三