2016年4月29日 星期五

Git On Windows

如何設定SSH KEY for Git bash:
1. 在 C:\user\username\ 下面建立 .ssh資料夾
2. 將產生的 private key 放在 .ssh 資料夾下
3. ssh 預設會先檢查 id_rsa key 是否存在,如果存在會嘗試使用 id_rsa 來做認證,
如果有其他的key可以透過 Config來指定範例如下: 
hostname gitserver.example.com
port 59418
Identityfile ~/.ssh/privatekey

2016年4月11日 星期一

讓 windows 10 的輸入法 跟 windows 7 一樣好用

升級windows 10 之後第一個最大的不適應,就是輸入法切換的問題,因為預設的英文輸入法被取消了,對很多人來說預設英文輸入還是比較習慣的方式,現在教大家怎麼把預設的英文輸入法加回來。

網路上很多文章教學可以將新注音的預設輸入模式更改為英數模式,實際使用過後的體驗非常不佳,因為在很多清況下他還是會跳回中文輸入模式



比較建議的方法是增加英文語系之後再將英文輸入法強制覆寫為預設輸入法

1. 在開始選單上按右鍵選擇並開啟控制台 > 控制台右上方的搜尋框框中輸入"語言",找到語言並開啟,如圖



2. 點擊新增語言 > 英文(美國)





3. 新增語系完成之後,會看到英語語系已經被加入在中文語系的下方了,請不要直接更改語系的順序,在此更改順序可能會導致部分程式顯示英文,請點擊左方進階選項



 5. 在進階選項裡面我們可以覆寫預設的輸入法,將預設顯示語言設成中文,預設輸入法設為英文輸入法,並點擊變更語言列快捷鍵


6. 各位可在此將切換語言的設定設為 ctrl+shift 這樣切換方式就如同 win7 一樣了,也可以將切換輸入法的熱建設成(無),因為win10內建熱鍵 win key+ space可以切換語言



7. 下面還有一個熱鍵 啟用/停用輸入法切換,強烈建議將此熱建設成(無)避免誤觸,導致無法透過shift切換中英文,不過在這邊 windows 有個bug導致熱鍵無法透過UI被關閉,如果想要關閉此熱鍵請參考下面說明。



如何關閉 ctrl + space 啟用/停用輸入法

 如果想要關閉啟用/停用輸入法切換的熱鍵的話可以參考以下步驟

1. 在搜尋中輸入regedit,找到之後按右鍵選擇透過管理員開啟


2. 找到 HKEY_CURRENT_USER/Control Panel/Input Method/Hot Keys
    其中 00000070 表示繁體中文輸入法,請將Key Modifiers 的值修改為 00 c0 00 00
Virtual Key 的值修改為 ff 00 00 00,如圖


到此設定全部完成,請重新啟動電腦即可套用設定了!!














2012年5月31日 星期四

如何在 Windows 7 下執行 CTS 4.0 測試

1.取得CTS4.0的class file

2.在命令提示字元下鍵入
java -Xmx512M -cp ;X:\CTS\android-cts\tools\* -DCTS_ROOT=X:\CTS com.android.cts.tradefed.command.CtsConsole
注意 -cp 後面接的分號(相關路徑請自行修改)

說明:
java -cp :指定classpath相當於執行檔的路徑
D :設定屬性值
Xmx512M :設定java執行環境記憶體配置

上面指令表示在 "X:\CTS\android-cts\tools\" 中尋找並執行 com.android.cts.tradefed.command.CtsConsol 並且將 "CTS_ROOT=X:\CTS" 指定給 com.android.cts.tradefed.command.CtsConsol

2012年5月29日 星期二

關於自訂debug_message的兩三事

在Linux driver開發的初期我們常會為了程式的開發方便,及除錯在裡面加了很多的debug message, 等到開發到了一定的階段才會拿掉,這邊分享一個比較方便的方法。
首先先來看一下程式碼
/* Debug macros*/
#if defined(DEBUG)  /* limited debug messages */
    #define GPSDRV_DBG(fmt, arg...)  \
        printk(KERN_INFO "[GPS] (gpsdrv):"fmt"\n" , ## arg)
    #define GPSDRV_VER(fmt, arg...)
#elif defined(VERBOSE)  /* very verbose */
    #define GPSDRV_DBG(fmt, arg...)  \
        printk(KERN_INFO "[GPS] (gpsdrv):"fmt"\n" , ## arg)
    #define GPSDRV_VER(fmt, arg...)  \
        printk(KERN_INFO "[GPS] (gpsdrv):"fmt"\n" , ## arg)
    #define GPSDRV_ERR(fmt, arg...)  \
        printk(KERN_ERR "[GPS] (gpsdrv):"fmt"\n" , ## arg)
#else /* Error msgs only */
    #define GPSDRV_ERR(fmt, arg...)  \
        printk(KERN_ERR "[GPS] (gpsdrv):"fmt"\n" , ## arg)
    #define GPSDRV_VER(fmt, arg...)
    #define GPSDRV_DBG(fmt, arg...)
#endif
說明:
在driver裡面我們自定義了3層級的debug msg (GPSDRV_DBG, GPSDRV_VER, GPSDRV_ERR)
然後可以依據我們的需求來指定debug msg 的 level,例如:
driver開發完成之後我們可以undef DEBUG 和 undef VERBOSE,
這樣的話只有在driver出現關鍵錯誤的時候,才會印出debug msg。
#else /* Error msgs only */
    #define GPSDRV_ERR(fmt, arg...)  \
        printk(KERN_ERR "[GPS] (gpsdrv):"fmt"\n" , ## arg)
    #define GPSDRV_VER(fmt, arg...)
        #define GPSDRV_DBG(fmt, arg...)
我想看到這邊大家已經看懂原理了,再來我們看一下很像火星文的這一行。
#define GPSDRV_ERR(fmt, arg...)  \
    printk(KERN_ERR "[GPS] (gpsdrv):"fmt"\n" , ## arg)
這個是gcc的特殊語法,我們可以利用下面例子讓各位更容易了解。
標準C只支持可變參數的函數,意味著函數的參數是不固定的,例如printf()函數的原型為:
int printf( const char *format [, argument]... );
而在GNU C中,巨集(macro)也可以接受可變數目的參數,例如:
#define GPSDRV_ERR(fmt, arg...)  \
    printk(KERN_ERR "[GPS] (gpsdrv):"fmt"\n" , ## arg)
其中"%s:%d"會被對應到fmt,而, filename, line會被對應到arg...,
如何把arg 對應到多個變數呢?就是靠... 和## 來達成,
arg... 表示arg的參數可以是零個或多個,這些參數以及參數之間的逗號構成,
## 表示 ##arg之前的字串要保留

我們可以利用gcc -E 來觀看程式碼被展開之後的樣子,例如:
GPSDRV_ERR("%s:%d",filename,line)
會被展開為:
printk(KERN_ERR "[GPS] (gpsdrv):%s:%d\n", filename, line)

2010年2月9日 星期二

Win7 無線網卡分享網路(AP) 教學

AP端設定(想要分享網路的電腦)
1.確定無線網卡驅動安裝正確
2.開啟網際網路共用中心>管理無線網路
3.新增>建立臨機操作網路
4.網路名稱隨便打,安全性類型選擇wep,安全性金鑰5個字元以上
最後請到>網際網路共用中心>變更介面卡設定

--如果是ADSL的話
請按右鍵開啟寬頻連線內容>共用>下拉選擇無線網路連線>勾選允許其他網路使用者
透過這台電腦的網際網路連線來連線

--如果是固定IP的話
請按右鍵開啟區域網路內容>共用>下拉選擇無線網路連線>勾選允許其他網路使用者
透過這台電腦的網際網路連線來連線

node端(想要使用共用網路的電腦)
開啟無線網路搜尋連線剛剛設定的連線因該會出現在裡面
點擊連線即完成設定!!

2010年2月5日 星期五

#pragma 是什麼意思呢?

C-lanugage的可攜性是公認的, 可以跨平台執行.

所以各平台之間的compiler應該儘可能的符合可攜性的要求.

但是為了提高執行效率, 符合各平台的機器特徵做一些特殊動作, 例如撰寫組合語言,
使用co-processor, 使用特殊記憶體配置, 使用特殊的compiler能力...等等。
會使用到#pragma 的語法以達到目的,而又不影響沒有這些能力的平台或compile的編譯。


或許你會認為用#ifdef也可以達到目的, 但是#ifdef的方式必須在command line指定一堆定義是很麻煩的, 而且一些特殊能力用#ifdef 也定義不出來. 況且使用你寫的source code的人不見得了解該如何定義以符合他的使用平台或compiler的需求.

compiler看到#pragma時如果後面的定義是它不認得的, 它不會理會; 相反的看得懂得compiler就會去執行它.

參考http://tw.knowledge.yahoo.com/question/?qid=1305100703882