標籤

C++ (12) Linux (6) MacOSX (4) Makefile (3) Matlab (3) Ubuntu (3) Android (2) C (1) Refactoring (1)

2012年11月17日 星期六

[Not Original] Apache with virtual hosts, PHP and SSI on Mac OS X 10.6

[From http://www.456bereastreet.com/archive/201104/apache_with_virtual_hosts_php_and_ssi_on_mac_os_x_106/ ]

I found this website when I was working on enabling SSI on Mac OS and found it extremely quick and useful.

I paste the whole paragraph here in case I might need it when the site is down. Thanks for the author and this awesome article.

2012年5月1日 星期二

[重構] Premature Optimization is The Root of All Evil

最近讀了一些重構(refactoring)和專案建置的書
感覺C++的功力又更上一層

不過我這邊要講的跟是不是用C++沒有太大的關係
只要你是用物件導向(object oriented)的程式語言來撰寫程式就夠了

你可以直接在Google輸入
"Premature Optimization is The Root of All Evil"
就會找到一堆相關的文章
Google甚至會在你打入premature optimization後就會提示你 is the root of all evil

翻成中文後大致上的意思是
"過早的最佳化是所有罪惡的根源"

大概有90%的最佳化的動作
都會在完整的專案完成後發現一點屁用都沒有

2012年4月23日 星期一

[C++] const 篇


在之前的文章中有提到
我們如果要為類別(class)撰寫介面函式如get的話
可以寫成:

vector& getNameList() {
   return _nameList;
}


const vector& getNameList() const {
   return _nameList;
}

不過其實const的學問是很博大精深的

2012年4月19日 星期四

[Ubuntu]

每次重灌ubuntu時都會發現缺東缺西的
趕緊記下來以免又忘了

[Git]
sudo apt-get install git-core git-doc  gitweb git-gut gitk git-email git-svn
git config --global color.ui true
git config --global user.name "Boton Chou"
git config --global user.email "xxx@gmail.com"

2012年4月7日 星期六

[Makefile] wildcard addprefix addsuffix

今天要講的是wildcard、添加前綴後綴的addprefix和addsuffix

可以參考:跟我一起寫Makefile:概述

[C++] 各式各樣的CAST

如果你對static_cast, dynamic_cast 等等還不甚熟悉
那你一定不常使用多型 (polymorphism)
更別說你懂物件導向語言

今天要講的主題是cast運算子 (operator)
包括了static_cast, const_cast, dynamic_cast, reinterpret_cast這四個運算子

這裡我就擷取一些精華翻譯一下:

2012年4月3日 星期二

[C++] 公用函式 - GET篇

這篇是寫給習慣在code時
加上const qualifie的人看的教學

如果你還沒有加const的習慣
那請現在趕快開始

ps. 雖然我知道加const很痛苦
而且每次加了const之後compliler就一直該
乾脆把全部const都砍了算了...

加const的好處在此就不贅述
隨便google都找的到

===========以上是前言============
首先你要有一個自己寫的class
然後你要熟悉什麼是const method

一般來說
我們都會為每個private成員寫set/get函式
比如說:

int getName() const {
    return _name;
}
(加const原因在於getName這種取用函式不應該更動data member值)

這則我們要討論的是當data member不是基本資料型態時
比如說:

vector getNameList() const {
    return _nameList;
}

這樣寫有個壞處
程式中的 _nameList 會在回傳時被copy一次
造成多餘的運算拖累執行時間
尤其是當使用者只是想要"讀" _nameList 時
這樣的寫法就顯得更笨拙了

所以我們通常會回傳reference,寫成以下形式:

vector& getNameList() const {
    return  _nameList;
}

不過這時compiler馬上就會跟你該說
invalid initialization of reference of type "vector&" from "const vector"
(看吧看吧 就說加了const會機機歪歪的 刪掉不就得了...不行!!)

會出現這樣的error原因在於
我們要求getNameList()這個函式為const method
亦即不可以更動任何data member
但又走後門把 _nameList 用reference傳出去

解決的方法如下,宣告兩種get函式:

vector& getNameList() {
    return  _nameList;
}

const vector& getNameList() const {
    return  _nameList;
}

大致上這樣
但要講到const的話
又是另一門博大精深的學問了

2012年4月2日 星期一

[C++] 你可能會遇到的怪BUG

如果你遇到以下情況:

1) 明明我把完完全全無關僅要的某一行註解掉,可是程式就掛了(媽的莫名其妙)
    ex:
        // Code part1
        ...

        // Variable a is an unused variable
        int a = 10;

        // Code part2
        ...

2) 槓掉後再加些別的程式碼又沒事了(幹)

這時候有很大的可能你用到了garbage value
小心檢查那些會crash的程式碼中
你所用過的所有pointer
確保他們沒有做一些蠢事
比如說拿了garbage還以為有initialize
或是用fread但是destination變數的大小和你要copy的大小根本不一樣之類的

如果還是無法的話
還有一個可能就是

你太衰了XDDD

2012年3月28日 星期三

[Matlab] 函式大全

最近因為通訊實驗要跑模擬
只好再度喚起那塵封已久的Matlab

Matlab的說明文件寫的非常詳細
只要知道要呼叫哪個函式、使用哪個指令

2012年2月3日 星期五

[Linux] pushd, popd, Makefile

剛好逛到一篇文章在講makefile
才知道除了cd還有pushd popd這種指令
只能說自己太弱了

資料來源:

How to change directory in makefile

2012年1月24日 星期二

[Ubuntu] openoffice 選單無法顯示中文

原因是灌了Macbuntu後
"應用程式字型"被設為Lucida Grande了

解決辦法:
在桌面按下右鍵
選擇更改桌面背景
接著在上方的頁籤中選擇字型
把應用程式字型改成"文泉驛微米黑"
就OK囉~~

[Linux] rpm/yum/dpkg 指令集

[轉自] http://www.xspace.idv.tw/bo_blog/read.php?16


列出系統中已安裝的所有套件
dkpg -l
rpm -qa
yum list installed

查詢套件的狀況(已安裝)
dpkg -l [套件名稱]

移除套件dpkg -r [套件名稱] (刪除套件但不刪除設定檔)dpkg -P [套件名稱] (刪除套件也刪除設定檔)
rpm -e [套件名稱]
apt-get remove [套件名稱] (刪除套件但不刪除設定檔)apt-get remove --purge [套件名稱] (刪除套件也刪除設定檔)
yum remove [套件名稱]


列出套件所安裝的路徑
dpkg -L [套件名稱] (已經安裝的套件)dpkg -c [套件名稱].deb (未安裝的套件)
rpm -qpl [套件名稱].rpm (未安裝的套件)

查詢檔案是由哪一個套件的
dpkg -S 檔案完整路徑
rpm -qf 檔案完整路徑


查詢已安裝套件的詳細資訊
dpkg -s [套件名稱]
rpm -qi [套件名稱]


查詢套件檔的詳細資訊(還未安裝的套件檔)
dpkg -I [檔案名稱].deb
rpm -qpi [檔案名稱].rpm


安裝套件
dpkg -i [套件名稱].debrpm -ivh [套件名稱].rpm (全新安裝)
rpm -Uvh [套件名稱].rpm (升級)apt-get install [套件名稱]
yum install [套件名稱]


查詢可用的套件
apt-cache search [套件名稱]
yum search [套件名稱]


列出套件詳細的資訊與介紹
apt-cache show [套件名稱]
yum info (列出所有套件的資訊)yum info [套件名稱] (列出所指定的套件資訊)


顯示套件相依產等相關資訊
apt-cache showpkg [套件名稱]
apt-cache depends [套件名稱]


顯示套件反向相依性等相關資訊
apt-cache rdepends [套件名稱]
套件庫中有多少可以使用的套件apt-cache stats

更新套件庫
apt-get update
yum update


升級已經安裝的套件apt-get upgrade
apt-get dist-upfrade
yum upgrade ( yum 3.X 版 以上才支援)


清除已經下載的套件檔
apt-get clean (移除所有的套件暫存檔)apt-get autoclean (移除舊版的所有套件暫存檔)yum clean all (移除所有的套件暫存檔)

RPM 特殊參數使用--nodeps
一般用於相依性時無法移除或安裝套件時,但安裝的話建議不要使用

--force
同--replacepkgs,--replacefiles,--oldpackage一樣,當安裝的軟件版本已經安裝在系統上,
或者是系統 上現有的版本比要安裝的版本高,系統就會發出警告。這時,用戶如果堅持安裝的話,
可以用此參數


--allmatches 
刪除所指定套件名稱的所有版本,如果有多個版本存在的話,會出現
error: "xxx" specifies multip 錯碼訊息時使用

2012年1月14日 星期六

[MacOSX] readline lib -dynamic -dynamiclib

在macbook air上灌cgdb遇到的問題
因為cgdb需要gnu 的 readline lib
載了readline-6.2.tar.gz解完壓縮開始灌後
馬上遇到Error
i686-apple-darwin11-llvm-gcc-4.2: -compatibility_version only allowed with -dynamiclib

請到shlib下的Makefile
把-dynamic改成-dynamiclib
(應該只有一個)

然後重新make就搞定了
(如果先前失敗過要先make clean)

資料來源自:http://bhou.wordpress.com/2011/09/13/how-to-install-gnuplot-in-mac-os-x-lion/