2013年8月17日 星期六

[C++] 印 endl而非 '\n'


  • 問題: 
    • C++中, 平常印訊息用 cout << endl 好, 還是 cout "\n" 好?
  • 解法: 
    • 傾向使用 cout << endl, 原因是, IO的 buffer不會在程式 crash時自動清空 (flush), 也就是有可能一直在錯誤的地方 debug(在程式根本沒執行到的地方 debug, 因為誤以為印出的訊息是正確的), 但 endl中隱含了 flush buffer的動作, 因此可避免此一情形

2013年8月11日 星期日

[Qt] Qt Quick error in re-writing


  • 問題:
    • Qt 利用 Qt Design 設計 UI時, 有時在存檔時會遇到無法更新存檔, 甚至 Qt當掉的問題
    • Qt Quick application在 Build時出現 module QtQuick 1.1 not installed
  • 解法
    • 基本上就是沒有安裝 QtQuick 1.1, 在 main.qml裡頭又 import多個 QtQuick modules造成的, 請檢查 .qml檔的 import設定即可

2013年8月10日 星期六

[CMake] Install command line fail


  • 問題
    • 在安裝 CMake command line tools可能會發生 "Failed create symlink installation may be incomplete" 的錯誤
  • 原因
    • 主要原因是之前安裝過其他版本的 CMake而造成的衝突
  • 解法
    • 自行 link吧!
    • 在 /usr/bin中找到以下相關 binary
      • ccmake
      • cmake
      • cmake-gui
      • cmakexbuild
      • cpack
      • ctest
    • 刪除其 link, 並建立新的link
      • e.g.  sudo ln -s /Applications/CMake\ 2.8-11.app/Contents/bin/cmake /usr/bin/cmake

[Development] Memory leak check -Valgrind


  • 簡介
    • 相信寫 C, C++的人應該不陌生, 該 new空間沒 new, 或是使用完沒 delete, 都會造成 memory的問題, 而 Valgrind便是一套 tool可以幫忙做 memory check
  • 安裝
    • 目前一般 linux已內建, Mac可藉由 MacPort安裝 (sudo port install valgrind)
  • 使用

2013年8月9日 星期五

[Development] qmake


  • 簡介:
    • qmake為 qt提供的 make tool, 可產生不同平台所需的 Makefile
    • .pro 為其特殊的專案檔格式
    • 重要: Qt 專案 build的過程
  • 常用變數:
    • TEMPLATE
      • 可等於 app、lib、subdirs, e.g. TEMPLATE=app, 可用來產生不同的專案類型, 產生的是應用程式、函式庫或子目錄(遞迴式搜尋子資料夾), 預設值為 app
    • HEADERS
      • 設定相關 header files
    • SOURCES
      • 指定所要 build的 c++檔
    • FORMS
      • 指定 Qt Designer產生的 .ui檔, 會呼叫 Qt的工具程式 uic來處理
    • RESOURCES
      • 由程式 rcc來處理 .qrc檔
    • DEFINES
      • 可定義預處理器符號
    • INCLUDEPATH
      • 可指定 C++搜尋目錄, 以設定全域的標頭檔案
    • LIBS
      • 指定連結至專案的函式庫, 可使用絕對路徑或 Unix的 -L, -l flags
    • CONFIG
      • 可設定多種專案與編譯器組態
        • debug
        • release
        • warn_off: default是開啓
        • qt: 預設開啓
        • dll
        • staticlib
        • plugins: 相當於 dll
        • console: 這比較重要, 表示 output需要被寫到 console window, e.g. 使用 cout、cerr等, 對於拿來寫 console application來說, 需設定此項
        • app_bundle、lib_bundle: Mac OS X專用
    • QT
      • 設定所使用的 QT modules, 預設為 core gui (QtCore與 QtGui)
    • VERSION
    • TARGET
      • app 或 lib的名稱, 不包含 prefix, version等
    • DESTDIR
      • build後的目錄
    • DLLdESTDIR
  • 產生特定平台專案檔(假設 Qt專案檔為 hello.pro)
    • General
      • qmke hello.pro, 接著可以用 make or nmake去 build
    • MicroSoft Visual Studio專案檔
      • qmake -tp vc hello.pro
    • Mac OS X 
      • Xcode project
        • qmake -spec macx-xcode hello.pro
      • makefile
        • qmake -spec macx-g++ hello.pro
      • spec選項可以指定"平台-編譯器"的組合, 如上述 macx(平台)-xcode(編譯器)
  • 自動產生 .pro檔
    • qmake -project
      • 會搜尋當前目錄中的 .cpp, .h, .ui檔以產生 .pro
  • 註解: #
  • 相關運算子
    • +=, -=
      • CONFIG = qt
      • CONFIG += release
      • CONFIG -= warn_off
    • *=
      • 當該變數為空, 則 assign, 否則不做任何動作
      • SOURCES *= main.cpp
      • 上式等同於, 若 SOURCES沒指定任何檔案, 則指定為 main.cpp
    • ~=
      • 可替換任何值, 支援 sed語法
      • SOURCES ~= s/\.cpp\b/.cxx/
      • 上式代表將所有 .cpp的附檔名改為 .cxx
  • 存取變數
    • $$variable or $${variable}  -- 在 .pro檔中的值
    • $$(variable) -- 在 qmake執行環境中的環境變數值
    • $(variable) -- makefile 執行環境中的環境變數值
    • $$[variable] -- Qt組態選項值
  • 判斷式
    • 語法
      • condition{
        • then-case
      • }else{
        • else-case
      • }
    • 其中的 condiction可為平台名稱, e.g. win32, unix, or macx, 例如:
      • win32{
        • SOURCES += serial_win.cpp
      • }else{
        • SOURCES += serial_unix.cpp
      • }
    • 單行式
      • macx: SOURCES += serial_mac.cpp
  • project include
    • include(../common.pri)
  • 利用 CMake 產生 Qt應用程式

2013年8月3日 星期六

[C++] 慣用簡潔的 pointer算式

int *p, *q分別指向 source array與 destination array, 若要 copy, 可用 *q++=*p++;

如此直接完成了三個動作:
*q=*p;
q++;
p++;

2013年7月31日 星期三

[Latex] embed fonts into PDF file


  • 若欲在 texmaker中產生內嵌字型的 pdf檔
    • 在快速編譯中, 選擇 latex+dvips+ps2pdf+瀏覽PDF
    • 在 ps2pdf中, 加入如下所示的 options
      • "/usr/local/bin/ps2pdf" -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -dPDFSETTINGS=/printer -dCompatibilityLevel=1.4 %.ps

2013年7月4日 星期四

[Programming] 保持乾淨的標頭檔


  • 不該無謂的 include 一堆東西, 容易造成名稱衝突
  • 不要在 header file中使用 using namespace

2013年6月25日 星期二

[Software] 文件轉檔工具

好用的文件轉檔工具: Pandoc

常用指令: pandoc -s input.format -o output.format

這邊 format可以是 .tex, .html, .pdf, .doc, ...等等, 相當多, 注意: 這邊的 -s指的是 standalone而非 source

option 選項:

  • 可下 -m做數學轉換, 還有 --webtex或 --mathjax等可轉換, 但注意, 主要以 $...$排版, \begin{equation} 等環境並無法使用
  • --toc: table of content, 產生目錄 
  • -A: 加入內容於後, e.g. pandoc -s input.txt -A sample.html -o output.html, 則程式會將 input.txt轉成 html格式, 並在檔案後頭加入 sample.html的內容
  • -B: 加入內容於前
  • -c ./sample.css: 可加入 css的排版樣式

2013年6月5日 星期三

[Vim] Mac中 Vim 設定


  • 預設路徑
    • binary: /usr/bin
      support file: /usr/share/vim/vim73
      rc: ~/.vim/vimrc (若沒有, 請自己建)
  • 細節

    • 單一檔案的 plugin 應放在 ~/.vim/plugin下, e.g. a.vim
    • 其他 plugin一句底下的資料夾放置(例如: ctrlp)
      • ~/.vim/autoload/ctrlp/
      • ~/.vim/autoload/ctrlp/ctrlp.vim
      • ~/.vim/doc/ctrlp.txt
      • ~/.vim/plugin/ctrlp.vim
    • plugins/colorschemes/scripts 放在 ~/.vim下, not /usr/share/vim/vim73
  • 推薦 plugins:
    • a.vim: 在 header與 source file間切換
      • :A =>切換
      • :AT =>切換至新開的 tag page
      • :AS => split? 垂直分割
      • :AV => horizontal 分割
      • 不知為啥, 我覺得 :AS與 :AV 沒作用
  • Ref:

[Vim] vim 快攻


  • 重要參數
    • 可單獨操作
      • b  before
      • e  end
      • w  word
      • $  行末
      • 0  行頭
    • g global
    • c confirm
    • ! 強制
  • 移動
    • hjkl  分別是左下上右, 應該主要是右手食指上中指下
    • gg  檔案起始處
    • #shift-G  #代表行號, 沒輸入則是到檔案最後一行  
  • 檔案操作
    • :q     quit
    • :wq  write & quit
  • 文件編輯
    • i  insert
    • x  ...這不知道是啥
    • a  append, A  可在行末 append
    • d  delete, 可搭配參數, e.g: dw, d$, d0
    • p  paste
    • u  undo, U: 還原整行, ctrl-R為還原先前操作
    • o  open new line
    • %  找到配對的括號
    • dd 刪除行
  • 搜尋與取代類
    • /   向下搜尋, 找到後用 n跳至下一個, shift-N至上一個
    • ?  向上搜尋
    • 環境可設定 :set hls  highlight search, 便會有如 source Insight中 F8的功能啦, 要讓它消失則下 :noh   noHightLight
    • r   replace 單一字元
    • R  是同進入取代模式
    • c  change, 搭配參數用, e.g. cw: change word, 會取代掉 cursor所在的 word
    • :s  strike, 應該會是最常用的功能
      • s/old/new/g  將 old用 new取代, 若後面加 /g則為 global
      • s/old/new/gc  c是 confirm用
      • #,#s/old/new/gc  #是行號, 代表在這兩行之間的取代動作
  • 執行外部指令
    • :!script, script為 shell script, e.g. :!ls, 但有些動作還是不能操作, 剛試驗了一下, :!cd ~/Desktop, 再執行 :!pwd, 似乎並沒改變
    • :r fileName, 可將檔案 fileName的內容貼到目前 cursor處
  • 外掛類
    • a.vim
      • :a  switch between header/source code
    • ctag
    • auto complete
      • Ctrl-N

2013年6月1日 星期六

[Linux] GRUB2 開機順序

  • cd /etc/grub.d/ (開機順序存放在此資料夾, 以 prefix數字小到大的順序開機, 預設 linux為 10_linux, 優於 30_os-proper的 windows作業系統, 因此, 執行以下兩步驟, done!)
    • 30_os-proper 更名為 08_os-proper (mv ./30_os-proper ./08_os-proper)
    • sudo update-grub

2013年4月29日 星期一

[Drama] Walking Dead

相當好看的一部影集, 看了三集後我只想說, "如果我們不能為了更美好的世界努力, 活著又為了什麼? 不過是個貪婪想吃東西的行屍走肉"

在這忙碌的社會, 往往只有突如其來的失去, 能讓人好好思考活著的意義. 也許這不是劇本的本意或導演的安排, 但是帶給我的衝擊還是滿大的. 一個簡單的事件, 就有很大的後作力. 例如: 如果已經知道活著不容易, 不好好努力就會被活死人(walking dead, 我不知道中文叫啥, 暫且就叫活死人吧!) 吃掉, 你會跟活著的人吵架嗎? e.g. 槍支是有限的, 而槍可以保護你不被 walking dead吃掉.

為啥說後作力很強咧? 因為...上面的問題, 我會想成, 經濟不景氣, 大家都是為了養家活口而努力. 那麼, 你會不會為了升官而留一手技能不與同事教學相長? 或是, 你願不願意分享你擁有的東西(有形或無形都算) 讓大家都進步? 就理性的角度來看, 你可以說, 看影集的時候我當然會說, 把槍留給槍法準的, 請他照顧我們, 我們分工做其他事. 但...事實如此嗎?

你會不會覺得, 拿了槍就跟掌了權一樣, 我必須從此聽他發號施令, "那他會不會叫我做我會吃虧的事?", "當了隊長會囂張了, 我憑啥聽他的? 有加我薪水嗎?", "我今天幫他洗衣服, 他有看到嗎? 如果有食物回來, 我會分得跟大家一樣多嗎?", "一定要有隊長嗎?", "我一定要聽他的嗎? 如果他沒有槍, 我會聽他的嗎?"

當然, 我個人的部分是覺得還有更遠更具殺傷力的想法, "沒有人拿槍指著我, 我還是會為了讓社會更進步而努力嗎?", "美國可以拿著核武跟大家說, '你們把槍丟掉, 萬一走火打到大家怎麼辦' 嗎?"....太多太多了, 好多想法就這麼冒出來, 回想到最初的最初. 希望我以後能教會我的孩子在班上就能與大家一起分享, 競賽只是一種簡單的分配分工的方式. 另外, 一個純真的靈魂, 自然會受到擁戴, 不要為了追求名而弄得遍體鱗傷. 當你開始相信某個人, 那麼, 這個人未來也許就是某個地方的領導, 這類的電影倒是不勝枚舉, e.g. Gladiator, Thor. 名永遠都是別人封的. 別再追求這華而不實的東西. 為更重要的事活著吧~

希望每個人的每一天, 都是美好的一天~

P.S. Michael Jackson 'This is it' 演唱會中, 不斷的祝福每一位朋友, 以及專注地奉獻自己. 這是人生中讓我徹底改觀的一個分水嶺之一(因為之前都是媒體一直報啥性官司), 以前對他沒啥好感, 但現在覺得, 媒體影響每個人非常多, 如果沒有職業道德, 那麼, 我還是選擇排斥它. 而我也希望自己永遠能相信別人, 給人機會. God bless you


2013年2月2日 星期六

[Mac] Audio Format Utility

在 Mac上若想要查看或編輯音樂檔案, 可使用音樂相關工具程式 (prefix af: Audio Format)
  • afinfo: Audio Format Information, 查看音樂檔案相關內容, 包含 sampling rate, data rate, estimation duration
  • afconvert: Audio Format Convert, 音樂轉檔功能, 常用選項(option), -b: 指定輸出 bit rate, -f: format
  • afplay: 利用 command line來播放音樂

2013年1月29日 星期二

[iOS] 一些 iOS 6過時的 API

dismissModalViewControllerAnimated
presentModalViewController
等皆將 Modal 字眼移除, 並在其後加 completion:nil

Ref: A lot of functions are deprecated in iOS 6

2013年1月28日 星期一

[iOS] NSInvalidUnarchiveOperationException Could not instantiate class named MKMapView

忘了把 MapKit framework加進來的後果....蠢到爆...

Project-> Build Phases-> Link Binary With Libraies-> + -> search "MapKit"

[iOS] autoreleasepool in iOS6 automated reference count


[iOS] Update Locations


  • iOS 6建議使用 didUpdateLocations, 而非 didUpdateToLocation
  • iOS6之前
    • Controller 繼承 protocol <CLLocationManagerDelegate>
      • e.g. FirstViewController : UIViewController <CCLocationManagerDelegate>
    • 宣告一個 CLLocationManger 的 property並在 .m中 synthesize
      • e.g. @property (nonatomic, retain) CLLocationManager *locationManager; 
    • 實作 didUpdateToLocation: (CLLocation *) newLocation fromLocation: (CLLocation *)
      • e.g. 通常會將 outlet的 View其內容作設定
      • e.g. locationTextView.text = [NSString stringWithFormat: @"lat %+6.f", newLocation.coordination.latitude];
  • 改為覆寫 didUpdateLocations: (NSArray *) locations
    • 並用 [locations lastObject]來取用最新位置
  • Ref:

2013年1月9日 星期三

[Books] Adam Smith 國富論觀後感


  • 書本資訊:
  • 綜合評語:
    • 現居當代資本社會,每個人必須閱讀的一本書
    • 全書深入淺出,從分工開始談起,談到貨幣的起源,經濟活動的需求,一步步解釋現今社會的經濟行為。
  • 筆記:
    • "價值" 有兩個不同的意思,有時他表示某一特別物品的效用,有時則表示該物品給予佔有者購買其他物品的能力。前者也許可稱之為"使用價值",而後者或許可稱之為"交換價值"。那些具有最大使用價值的物品,往往幾乎或完全沒有交換價值 ; 相反的,那些具有最大交換價值的物品,卻往往幾乎或完全沒有使用價值。沒有什麼東西比水更有用,可是水卻幾乎買不到任何東西。相反的,鑽石幾乎沒有使用價值; 但拿鑽石去交換,卻往往可以得到大量的其他物品。

2013年1月4日 星期五

[Research] IMRAD 格式

目前分享科技論文的標準格式: IMRAD-Introduction, Methods, Results, and Discussion