2013年9月24日 星期二

[GitHub相關] 使用git push 出現 "you can't push to git use https...." 的解決方式

Git hub 前面基本設定之後,最後要git push xxxxxxxx  master 時,

出現以下:
fatal: remote error: 
You can't push to git://github.com/my_user_name/my_repo.git
Use git@github.com:my_user_name/my_repo.git

原因是因為 git 是 Read-Only , 叫你使用https的方式存取,

故你若要使用 git 來做存取 , 你必須要打通SSH key 來加入到你的GitHub帳號,

照著以下簡單步驟做就可以使用git push 嚕
https://help.github.com/articles/generating-ssh-keys








當然若你要使用https也是可以(就不用SSH key了),但是可能還是會有問題,會出現

"error: The requested URL returned error: 403 while accessing https://github.com/JackABK/rtenv.git/info/refs"

請參照這裡解決:
http://askubuntu.com/questions/186847/error-gnutls-handshake-falied

不過還是介意自己產生ㄧ組SSH key 加入到自己Git Hub帳號吧!!













2013年9月15日 星期日

char 與 unsigned char 需要注意的地方

其實大家應該都知道差在哪裡,

ㄧ般來說 , 你如果宣告ㄧ個變數

char a ;

那就會依照你的編譯器來決定 變數 a 是signed char 還是 unsigned char ,

比如說以下:


gcc編譯器 會將 char  定義為  --> signed char 

arm-linux-gcc 編譯器會將 char 定義為 --> unsigned char 


所以在使用上要非常小心,留意到負值的問題。

當然你如果是使用short 或者是 int 則不會有這方面的問題,很清楚就是帶符號。

以上是我移植上出現過的小問題,提供給大家當作經驗。


Refer to :
http://blog.csdn.net/archielau/article/details/7424210 

2013年9月10日 星期二

gcc/g++ 常用參數

因為常用到gcc/g++ 所以將常用到的參數列出:



gcc [option] filename

※ 選項

-c : 只做編譯(不做連結)
-S : 輸出組譯碼
-E : 將預處理結果顯示
-o filename : 指定輸出檔名
-ansi : 程式要求依據ansi c標準
-Dmacro : 使定義巨集(marco)為有效
-Dmarco=defn : 使定義巨集(marco)為defn
-Wa,option : 將選項(option)傳給組譯器
-wl,option : 將選項(option)傳給連結器
-I : 追加include檔案的搜尋路徑
-L : 追加library檔案的搜尋路徑
-l : 指定連結的函式庫
-Wall : 顯示所有的警告訊息
-g : 編入除錯資訊(要使用GDB除錯一定要加)
-O2 : 做最佳化

-M : 生成文件所關聯的信息,包含目標文件所依賴的所有源代碼, ex: gcc -M hello.c
-MM: 與-Mㄧ樣,只是他將忽略由#include<file>所造成的依賴關係
-MD: 與-Mㄧ樣,但是輸出將導入到.d的文件裡面


Synology DS1511+ 使用筆記



Synology DS1511+ 使用教學:

首先可以參考這篇:
http://whoisray.pixnet.net/blog/post/57214970-synology-ds1511%2B%E4%BA%82%E4%B8%83%E5%85%AB%E7%B3%9F%E9%96%8B%E7%AE%B1%E6%96%87



使用步驟


  • 首先必須要先到官網上下載Synology Assistant 和 DSM
Synology Assistant是用來幫我們連線到 Nas上設定的軟體
DSM 則是安裝到Nas上的作業系統


http://www.synology.com.tw/support/download.php?lang=cht&b=5%20bays&m=DS1511%2B

接下來 我們要將DS1511+接上電源與網路

接上之後打開我們安裝在電腦上的
Synology Assistant 連線到DS1511+上




























<注意>我在使用的時候遇到連不上的問題

最後解決的方式是把裡面的硬碟都拔出來
讓裡面是空的狀態下按開機 並重新連線就會成功連線 

成功之後再把硬碟一一地接回去

  • 接著點兩下上圖中被塗掉的部分,開始設定
    • 過程中會詢問先前下載DSM的位置
    • 接著會做一些設定
  • 內建密碼為空白(不要輸入)  
    • 如果發生密碼錯誤請將電腦重新開機並不要封鎖網路連線
  • 當成功進入之後就會出現以下畫面

<Note>

我剛打開時會發生硬碟錯誤所以需要先把原本有的儲存空間給刪掉
之後在另外新增新的儲存空間

  • 接著就可以對裡面的檔案做管理
  • 開啓控制台如下圖:




  • 舉例來說 點擊ftp選項 啓動ftp服務
























  • 也可以啓用web的服務


  • 另外也可使安裝phpmyadmin套件來管理nas上面的資料庫
    • 預設的使用id:root  密碼:空白


現階段應該只會拿來做ftp其他的功能再慢慢研究摟

2013年9月3日 星期二

Git入門筆記(一)

學習Git方面起步有點跌跌撞撞

主要是一開始對於版本控制還沒有建立清楚的概念

首先可以先參考下面幾個網頁
1.http://git-scm.com/blog
對於每個操作他都也列入完整的圖片說明

2.http://gitreal.codeschool.com/levels/1
另外code school的這個教學level 1 講解的也很清楚 對於剛入門的我來說非常有幫助
裡面有很生動的動畫告訴你每一個指令發生了什麼事 也有練習可以做

3.http://try.github.io/levels/1/challenges/1
我建議先看過第二個連結再來利用這個網站練習
看過之後再來做會比較能想像這些指令在做些什麼
可以多練習幾次會越來越有感覺


接下來我要對第一個連結的內容與圖片做簡單的整理:



  • 先記住“stage”“commit”“checkout”
先來看看git最主要的操作流程如下圖























假設我們今天開始了一個專案,這個專案今天有兩個檔案被修改了
當修改完後我們必須將這些修改給提交上去

從上圖的最右邊開始看  當我們完成了檔案的修改之後
必須先做一個stage的動作“讓檔案到stage的狀態
而這個動作是透過add的指令來做

可以來思考一下 你加入了這些檔案之後 你是不是該對這個檔案做一些說明
告訴大家你對這些檔案作了怎樣的修改

因此當你對幾個修改過的檔案作stage之後,你就可“commit”出去


Q1:所以我每次改完一個檔案就要做commit?
不一定,每次的commit就像是我們遊戲的存檔,
你不會希望你在玩遊戲每玩一步就存檔一次
只有當你玩到覺得到一段落才會做存檔

Q2:所以可以一次stage 多個檔案之後 再做commit?
沒錯,就像是你把很多個要寄出去先放到一個大箱子一次寄出去

  • “push”“pull”
到上面為止我們的工作都只在local端進行修改我們的repository
當完成多個commit後 也許要上傳到remote端了 就會需要用到push
而要從remote端取得資料則是使用pull


  • “等等,所以指令呢?所以要怎麼做呢?” 
  • “下面就開始實際操作

1.先到專案的資料夾裡面

git int

這時候就會產生git repository 如下圖:

而今天我們在這個資料夾中新增了一個file.txt檔



















2.將檔案做stage

git add file.txt

他就會變成stage的狀態如下圖:

我們可以看到file.txt被放到index中,當然你可以多放幾個進去




















3.當我們完成stage的動作後 就要做commit的動作

git commit -m "你這次commit所作的修改說明"

我們可以看到我們的檔案在repository中產生了一個新的版本




















4.之後當你對檔案作了修改 我們可以用

git status

來查詢我們的檔案有哪裡做修改卻還沒update

下圖是我們對file.txt作了修改





















5.再對這些檔案作staging 並commit

git add file.txt









git commit -m "你對這個檔案修改的說明"





















這樣就能順利提交檔案到local端的repository摟!

<注意>
1.目前我們所做的這些動作都只限在本地端 所以還沒有做push的動作
2.在使用前一定要先裝git

另外更多的觀念與操做等我整理完再更新摟



2013年8月31日 星期六

C語言當中的 extern 實例


在C語言當中,變數使用前要先宣告(declaration),而C 的 extern 關鍵字,用來表示此變數已經在別處定義(definition),然後告知Compiler要到別的地方找尋此變數的定義(可能在同一個檔案或其他檔案)。

但使用時要小心一點,在別的檔案定義變數只能夠定義一次,不然compiler會錯亂。

所以只要在程式裡面看到有使用 " extern " ,代表他是在別的程式有宣告到,而拿來用。

以下直接舉例子比較快,
這裡寫了三個程式,    a1.c 、 a2.c 、extern_test.c 。
分別如下:

2013年8月29日 星期四

find 、grep 、 xargs 搭配應用:



在Linux中,常常在Debug時要找字串,但是他可能又分在好多子目錄當中,而你也不知道到底在哪裡,這時候該怎辦??

------------------------------------------------------------------------------

假設我要在根目錄的所有子目錄下搜尋所有.c檔裡含有字串

” YinChenWang“ 的需求,下面有兩種方法:



1. $ sudo find / –name “*.c” -exec grep “YinChenWang” {} \;

2. $ sudo find / –name “*.c” | xargs grep “YinChenWamg”



說明:


  • 法1:
         他會根據 “/ “ 這個根目錄(包括所有子目錄)去尋找所有附檔名為.c

         的檔案,接著後面的 –exec 與 最後面的 \; 是一體的,裡面包的就是

         grep “YinChenWang” {} ,而{}裡面就是存放前面find所找到的所有.c檔,

         這樣大概懂意思了嗎? 也就是說-exec \; 這中間包的東西可以很多

         變化,例如你也可以使用rm或cp等等的搭配前面的find做不同應用,

         想看更詳細請參考

         鳥哥的Liunx 私房菜: http://linux.vbird.org/linux_basic/0220filemanager.php#find

  • 法2:
        其實效果與法1類似,其中用到了”xargs” ,他可以將前面find後的輸出結果,

        來當做你xargs後面所接的參數,以此例子來看,

        find後輸出的結果將會透過xargs來提供給grep “YinChenWang”使用。

        xargs的詳細說明請參考:

        xargs 應用介紹:   http://blog.yam.com/ddy1280/article/13941218

2013年8月28日 星期三

VIM常用指令

由於VIM網路上有相當多的資源,當然直接去鳥哥找是最快,但是這裡紀錄幾個我最常使用的功能,日後會持續的增加:


影像二值化小修正

1.原圖
做完邊緣偵測的情形之下,使用的是sobel演算法來做

做出來的第一個結果如下
2.毛邊很多
在有一些毛邊的形況之下,對程式碼做了一點小修正

把做完 Sobel 之後的每一 Pixel 的資料除以一個參數,以我自己為例,我取參數值為6

做出來如下圖,很明顯的比較漂亮一點了!!!
3.皮膚光滑?
接下來要做的是二值化(Thresholding)的動作,而threshold的值怎麼設定呢?

我們原本的一個pixel的值是0(黑)~255(白)

然而剛剛我們已經將每個參數都除以一個參數了

假設我們Threshold設成144(0~255時大概切一半,大於144的為黑色[0],小於144是白色[255])

其實就是將上面那一張圖黑變白白變黑拉XD

Threshold就應該要除以六(144/6=24),做出來的圖才是比較OK的

以下為Threshold=24
4.這張初步設定的threshold讓手臂被切掉惹
繼續調整Threshold=15試試看,一些線條又更明顯了
5.調整了一下比較OK了
如果在一開始邊緣偵測沒有將一些對我們來說是雜訊的毛邊削掉的話

也就是沒有除以一個參數做修正而直接做二值化

就會變成以下的圖,會比較不漂亮一點
6.這張......7月了別嚇人ㄏㄏ
這是最近的小心得和筆記~請各位不吝指教哈哈







2013年8月26日 星期一

Git學習

首先辦GitHub帳號:https://github.com/
參考建立Git詳細網站(有windows、Linux):http://note.tc.edu.tw/818.html

Demo Figure


Git基本指令:
     Git初始設定
     #Git config --global user.name “xx”
     #Git config --global user.email “bbjh5@hotmail.com

     #Git config --list 列出目前設定值

     建立一個新的Repository
     #Git init
     出現Initialized empty Git repository in /home/xxx/.git

     Clone(複製)別人的Repository
     Ex:git clone git://github.com/beckus/stm32_p103_demo.git

     改變最後一次的commit
     #Git commit --amend

     Stage的檔案給Unstage
     #Git reset HEAD file

     把修改過的檔案回到未修改狀態
     #Git check out -- file
     檢查狀態
     #Git status

     Git Branch
     建立一個新的Branch
     Ex: git branch experimental
     進入新的Brach
     #Git checkout experimental
     查詢有哪些Branch
     #Git branch
     切換Master branch
     #Git checkout master
     如有衝突,使用diff觀看並修改
     #git merge experimental
     Gitk 顯示resulting history圖表
     branch會做確認
     #git branch –d experimental
     branch(強制)
     #git branch –D experimental

     預設Branchmaster;預設Remoteorigin
     Ex: git pull origin = git fetch origin + git merge origin/master
     拉下來後的merge

     Git push origin master  :master pushorigin


25個線上練習Git的連結:http://try.github.io//levels/1/challenges/1


參考連結:
[1]寫給大家的Git教學(線上PPT)http://www.slideshare.net/littlebtc/git-5528339
[2]Git初學筆記-指令操作教學http://blog.longwin.com.tw/2009/05/git-learn-initial-command-2009/
[3]初次設定Githttp://git-scm.com/book/zh-tw/%E9%96%8B%E5%A7%8B-%E5%88%9D%E6%AC%A1%E8%A8%AD%E5%AE%9AGit
[4]Git的基本使用http://gogojimmy.net/2012/01/17/how-to-use-git-1-git-basic/

彩色轉灰階原理(RGB To Grey)

彩色轉灰階原理(RGB To Grey) :

l   基礎
對於彩色轉灰度,有一個很著名的心理學公式:
Gray = R*0.299 + G*0.587 + B*0.114

l   整數算法

而實際應用時,希望避免低速的浮點運算,所以需要整數算法。
注意到係數都是3位精度的沒有,我們可以將它們縮放1000倍來實現整數運算算法:
Gray = (R*299 + G*587 + B*114 + 500) / 1000

RGB一般是8位精度,現在縮放1000倍,所以上面的運算是32位整型的運算。注意後面那個除法是整數除法,所以需要加上500來實現四捨五入。
就是由於該算法需要32位運算,所以該公式的另一個變種很流行:
Gray = (R*30 + G*59 + B*11 + 50) / 100

但是,雖說上一個公式是32位整數運算,但是根據80x86體系的整數乘除指令的特點,是可以用16位整數乘除指令來運算的。而且現在32位早普及了(AMD64都出來了),所以推薦使用上一個公式。

l   整數移位算法

上面的整數算法已經很快了,但是有一點仍制約速度,就是最後的那個除法。移位比除法快多了,所以可以將係數縮放成2的整數冪。
習慣上使用16位精度,216次冪是65536,所以這樣計算係數:
0.299 * 65536 = 19595.264 ≈ 19595
0.587 * 65536 + (0.264) = 38469.632 + 0.264 = 38469.896 ≈ 38469
0.114 * 65536 + (0.896) = 7471.104 + 0.896 = 7472

可能很多人看見了,我所使用的捨入方式不是四捨五入。四捨五入會有較大的誤差,應該將以前的計算結果的誤差一起計算進去,舍入方式是去尾法:

  寫成表達式是:
Gray = (R*19595 + G*38469 + B*7472) >> 16

  220位精度的係數:
Gray = (R*1 + G*2 + B*1) >> 2
Gray = (R*2 + G*5 + B*1) >> 3
Gray = (R*4 + G*10 + B*2) >> 4
Gray = (R*9 + G*19 + B*4) >> 5
Gray = (R*19 + G*37 + B*8) >> 6
Gray = (R*38 + G*75 + B*15) >> 7
Gray = (R*76 + G*150 + B*30) >> 8
Gray = (R*153 + G*300 + B*59) >> 9
Gray = (R*306 + G*601 + B*117) >> 10
Gray = (R*612 + G*1202 + B*234) >> 11
Gray = (R*1224 + G*2405 + B*467) >> 12
Gray = (R*2449 + G*4809 + B*934) >> 13
Gray = (R*4898 + G*9618 + B*1868) >> 14
Gray = (R*9797 + G*19235 + B*3736) >> 15
Gray = (R*19595 + G*38469 + B*7472) >> 16
Gray = (R*39190 + G*76939 + B*14943) >> 17
Gray = (R*78381 + G*153878 + B*29885) >> 18
Gray = (R*156762 + G*307757 + B*59769) >> 19
Gray = (R*313524 + G*615514 + B*119538) >> 20

仔細觀察上面的表格,這些精度實際上是一樣的:3478101113141920
所以16位運算下最好的計算公式是使用7位精度,比先前那個係數縮放100倍的精度高,而且速度快:
Gray = (R*38 + G*75 + B*15) >> 7

其實最有意思的還是那個2位精度的,完全可以移位優化:
Gray = (R + (WORD)G<<1 + B) >> 2

由於誤差很大,所以做圖像處理絕不用該公式(最常用的是16位精度)。但對於遊戲編程,場景經常變化,用戶一般不可能觀察到顏色的細微差別,所以最常用的是2位精度。





2013年8月20日 星期二

GDB 入門筆記 - 近端偵錯(一)

<什麼是GDB?>

GDB 是一個Debug工具,只要是使用GNU之編譯器之程式都可以利用它來debug

使用的是文字介面,目前也開始發展圖形界面

<GDB有什麼特色?>

1.可以針對程式的執行做追蹤,同時也能在追蹤時對程式內之變數做修改


2.GDB不只能對在電腦上之程式做偵錯,也可以對嵌入式系統作遠端偵錯(Remote)

                              File:Cc25-GDB-Remote-Debugging.png


<GDB學習筆記>

近端偵錯:

1.安裝gdb

  • 先確定電腦上是否已經有安裝gdb:$whereis gdb
  • 如果沒有安裝:$sudo apt-get install gdb
2.開始使用gdb
  • 因此先寫一之測試程式testGDB.c
  • 使用gcc將它作編譯  $gcc -g -o testGDB.c testGDB
  • 對編譯好的執行檔做debug  $gdb ./testGDB

3.gdb常用指令

  • 輸入run (或是簡寫r) 可以在gdb上執行該支程式


  • 如果要在程式裡面加入中斷點,輸入break(或簡寫b)例如要進入main之前就讓程式停下來
    • (gdb)b main






  • 或是指定某一行停下來,例如在第五行停下來
    • (gdb)b 5
  • 設定完中斷點輸入run(或簡寫r)可開始執行,執行到中斷點停止。
    • (gdb)r
  • 如果要繼續執行下一行可輸入next(或簡寫n)
    • (gdb)n
  • 輸入info b 可查詢現在有的中斷點
    • (gdb)info b
  • 輸入c則執行到下一個中斷點為止
    • (gdb)c
  • 另外,如果要看執行到的當前那一行時,某個變數值可利用p的指令
    • (gdb)p num

<GDB基本指令>
command
about
run [args]
開始執行
start [args]
開始執行(並自動在main() break)
list [LINENUM]
    [FUNCTION]
    [FILE:LINENUM]
列出程式碼(重複list指令可接著列出下面十行)
print [EXP]
顯示expression的值
break[LINENUM]
     [FUCTION]
設一個break point
next [TIMES]
執行到下一個statement(不會進入function)
step [TIMES]
執行到下一個statement(會進入function)
until [LINENUM]
執行到某行
continue[TIMES]
執行到被中斷為止
finish
執行到結束此function(還可用return直接回傳並結束)
info [SUBCOMMAND]
顯示一些資訊(ex:breakpoints: info break)
help [SUBCOMMAND]
說明(ex: help list)



入門教學影片:



reference:
1.http://opencsl.openfoundry.org/Lab05_debugger.rst.html
2.http://blog.yslin.tw/2012/08/gdb.html