[C++溫故知新]關於Macro, Inline 與 Define

繼續不斷地學習,不斷的回復自己的記憶 #define 在compiler階段就會展開,所以要確認清楚他的展開方式,比如           #define M1(x)  X5+3           M1(5)5 ==>  55+35 =>   (55)+(35) = 40 他可以不止一行~對於只有一行的if 判斷要小心  if(a)  staement Macro(b) ,  Macro(b) b++; b—; 在此~ b–將會跑不到. 怕失誤要加上 {} 或是改成 inline function 參數有 # 會加上  escape character,也就是  “  —>  ” #define值並不會有值~也就是          #define FOO1        #ifdef FOO1       .. statement1       #endif        跟  if (FOO1 == 0) 是不同 (其實這樣會compiler error) 如果要#define 一個數字~要換成常數 (constant)     exam: #define FOO 5.3 如果只有一個檔案要用,改成 static const  FOO = 5.3; 多個檔案  extern const FOO= 5.3; CPP裡面  const FOO=5.3; 當專案大的時候,由於 .h 會被很多的檔案載入~所以define macro  不建議放在 .h 容易被其他人用到(或是override) http://qualitycoding.org/precompiled-headers/ 建議寫在.c 或是 .cpp 並且在用完之後馬上  #undef 避免被蓋掉(override) 詳細code整理我放這裡: https://gist.github.com/kkdai/9014911 參考資料: http://bbs.nsysu.edu.tw/txtVersion/treasure/program/M.855729774.C/M.948127113.E.html http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Preprocessor_Macros#Preprocessor_Macros http://openhome.cc/Gossip/CppGossip/inlineFunction.html http://web2.fg.tp.edu.tw/~cc/blog/wp-content/uploads/2010/06/20100715advanceC.pdf http://anna-zr.iteye.com/blog/510368 Include guard about define http://en.wikipedia.org/wiki/Include_guard http://qualitycoding.org/precompiled-headers/ 9 Code Smells of Preprocessor Use http://qualitycoding.org/preprocessor/  
繼續閱讀

[Survey] 一些關於Docker.io的筆記

主要注意到這個是因為meetup上面的活動 開始去查一下關於Docker的內容,但是由於它能做的事情太多了.我也只貼出一些我所了解的部分 Docker可以將PAAS裡面的OS或是App拆解成container並且快速讀取或是執行 整個速度大概是一秒就載入完成 Docker 也可以run某一種單一app的結果~比如ping或是 bash Docker的 image在寫回去前都會保持原樣~所以可以快速地使用並且安全得保存 如同下面影片,你可以載入bash大膽的把 /etc /bin 都刪除~然後離開~馬上再載入.. 甚至可以把整個PAAS載入後加上你的修改來看結果. 這裡可以去官方網站玩demo 相關資料: 官方網站: https://www.docker.io Present 影片  http://www.youtube.com/watch?v=Q5POuMHxW-0 中文介紹: http://tiewei.github.io/cloud/Docker-Getting-Start/
繼續閱讀

[Android]一些關於android apk部署小筆記

記錄一下,最近的一些小筆記 關於Android App安裝到device上面:(在Win8上面) 如果要註冊非官方授權的device(比如說大陸貼牌device) 需要去[裝置管理員]把裝置例項路徑中把VID抄起來(ex:1D06) 把資料抄到 ADT裡面的 SDKExtragoogleusb_driverandroid_winusb.inf 滑鼠移到右下角,選擇[變更電腦設定] [更新與復原]->[復原]->[進階啟動] 來重開機 將裝置管理員裡面無法認識的裝置驅動程式選到 剛剛那個檔案android_winusb.inf 如此一來可以把裝置識別出來為 [Android通用裝置] 到 user_data/.android/adb_usb.ini 注意:  如果因為android SDK 更新這個動作需要重新做一次 把裝置新增上去起來 比如 0x1D06 重啟Eclipse~就能正常讀取 用Eclipse 把App裝到android裝置上面(手機/平板) 使用Adb command line [File]->[Export] 成 api 這時候會設定你的私密金鑰 輸出後使用 adb來安裝 adb install helloworld.apk 可以先用 adb devices 確認裝置有讀取到 或是使用 adb kill-server 來強迫重新讀取裝置 開啟Android 專案出現 [invalid project description] 這時候不能使用 Add Android using exist code using  [import]->[general]->[Existing Project into workspace]來載入 相關資料: How to install android app into android device: http://readandplay.pixnet.net/blog/post/139916128 About project loading error: http://www.itkee.com/developer/detail-725.html Camera sample code: http://simonxanderandroid.blogspot.tw/2011/02/android-camera.html Using full size camera surface http://stackoverflow.com/questions/11278253/stretching-camera-preview-to-full-screen-in-android
繼續閱讀

[RaspberryPi] Raspbmc加上iPhone client成了超好用的家庭網路電視

圖片: 使用iPhone Client當遙控器或是遠端選取影片來播放,目前播放的是LETV上面的電視劇 之前去上課回來後一直沒有弄,趁開工的空擋前把它弄好了. 這裡備註一下一些note: 網路設定中,Wifi 的密碼屬於 WEP或是WPA要確定好~這個弄不好就一定連不到. 由於我當初安裝的時候選擇英文當主要語系,所以PPS/LETV中文都無法顯示~不過使用iPhone Client 就好了 不得不誇獎,iPhone XBMC Client “Constellation”寫的真好,我都想付錢買完整功能: 可以自動配對,對於你忘記電腦網路IP超好用.. 可以用 手指頭當選當選擇 可以直接選擇所有功能,電影,音樂甚至是Plugin 中文顯示看起來不錯(有些人說有亂碼) Android Client 我也看了一下~不過還沒有看到很好用的,如果有好用的請推薦 關於中文影片播放部分,不知道是不是種花電信的問題,我這裡比較順暢的事 Youku, LETV跟PPS都不算順   參考資料: http://blog.changyy.org/2013/07/raspberry-pi-raspbmc-ppstream.html http://gsyan888.blogspot.tw/2013/05/raspberry-pi-raspbmc.html http://raspberrypi.stackexchange.com/questions/2169/how-do-i-force-the-raspberry-pi-to-turn-on-hdmi http://elinux.org/RPiconfig http://elinux.org/R-Pi_ConfigurationFile http://www.raspberrypi.org/phpBB3/viewtopic.php?f=5&t=5851 http://www.element14.com/community/thread/18205/l/how-to-get-sound-over-hdmi-working-when-using-a-tv?tstart=0 http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&t=23624
繼續閱讀

[C++溫故知新] 關於多重繼承 Multiple Inheritance 經常發生的問題

Virtual Base Class 多重繼承如下圖的時候   如果要使用        D *dptr = new D();      D->L::para1  會有compiler error :: Ambiguous conversion 因為實際的的compiler 會把 B1與B2 個編譯出一個L 為實體(class table) 所以要取用D 中的 L會有兩個目標出現 ==> 解法: 使用virtual base class 在 B1 與 B2 class L { /* ... */ }; // indirect base class class B1 : virtual public L { /* ... */ }; class B2 : virtual public L { /* ... */ }; class D : public B1, public B2 { /* … */ }; // valid     Ambiguous Base Class:  一樣的Case但是在 B1 與 B2裡面都有命名 變數 nB 若是要使用      D *dptr = new D();      D->nB  則會出現 compiler error ==>解法: 必須將要使用的 nB 定義清楚, 比如說 D->B1::nB 或是 D->B2::nB   詳細程式如下: 參考資料: https://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr135.htm https://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr135.htm       
繼續閱讀

[學習心得] Ruby 跟 Rail 研究心得 (2) - 利用Ruby 把一些基礎問題的改寫

為了達到練習與熟悉Ruby的目的,我找了幾個常用到(也比較簡單的)問題來練習   Quicksort (快速排序法)   這裡沒有什麼特別語法~主要也確認了~Ruby的參數傳遞的方式,參考http://stackoverflow.com/questions/1872110/is-ruby-pass-by-reference-or-by-value    Fibonacci (費式數列)   似乎C++也可以一行搞定~主要是確認ruby也是可以跑遞迴(recursive)   中序表示式轉後序或是前序 (Infix -> Prefix, infix -> Postfix)   有幾個要注意的,主要是有用到ruby在字串裡面比較強大的應用  “+-/“.include? (op) 這代表著檢查 字元 op 是不是 +-/ 在前面有宣告型別 [] 或是 “” 可以避免operator « 錯誤 宣告型別也可以避免 method<=>’ for nil:NilClass (NoMethodError) 的發生    
繼續閱讀