2009年9月28日

[雜記]2009的教師節

今天是傳說中孔子的誕辰 ... 也就是我的生日!(挺)
孔子應該也是天秤座的,所以才會處處論中庸之道!!(誤)

啊,離題了 ...

話說,古時候的人應該都是依照農民曆在記事的吧
那麼西曆九月二十八日是孔子生日這由來又是 ... ?

2009年9月23日

[分享]全家娘的相關動畫

先說明什麼是「全家娘」,就是全家便利商店擬人化的女性角色 XD

日本全家便利商店:ファミリーマート(FamilyMart)簡稱ファミマ(Famima)

在秋葉原開了間分店,也不知道發生了什麼事情(原因我還沒查到)

就有人用了入店的音樂,製作了這首 Remix ...



沒想到,單純的入店音,居然可以變成這種氣氛,日本真多鬼才!!

如果入店音都變成這樣,那買東西的人可能都靜不下來了(笑)

接下來,發現了不少衍生作品,像是有人把它唱成日文歌 ...

2009年9月21日

[筆記]程式碼最佳化 - C / C++ Code Optimizations

這邊整理了一些網路上找來的資料,對於最佳化程式有些許的幫助。
不過程式很多情況並不是通用的,這些資料僅供參考,並不是定律。

* 使用初始化列表(Initialization Lists)
儘量在建構式使用初始化列表。舉例:
使用
TMyClass::TMyClass(const TData &data) : m_Data(data)
{
}
取代
TMyClass::TMyClass(const TData &data)
{
  m_Data = data;
}

* 最佳化 For 迴圈
如果可能,倒數到零會比由零計算到 n 來得好。舉例:
使用
for (i = n-1; i >= 0; --i)
取代
for (i = 0; i < n; ++i)


把東西跟"零"比較,總是較快的。
另外在 For 的第三部份(每次迴圈會做的事情)使用
++i
會比使用這個
i++
要來得快

* 使用整數(int)
在可能的情況下儘量使用 int 的資料型態,而不是 char 或 short。

* 讓 Local Function 成為靜態(static)
如果可能,宣告區域函式為靜態。舉例:
static void foo()

(如果不適合靜態也不能勉強,還是要以物件導向與程式彈性為優先考量)

* 最佳化 If 判斷式
分析出跳脫點。舉例:
使用
bar();
if (condition)
{
  undoBar();
  foo();
}
取代
if (condition)
{
  foo();
}
else
{
  bar();
}

使用分析器與好的判斷依據去決定,恢復 bar() 的動作(undoBar)是否比跳脫來得快速。
(感覺上似乎是要避免 else)

* 最佳化 Switch 判斷式
把最常用到的 case 放在第一個。

* 避開昂貴的運算子
加法比乘法便宜,乘法比除法便宜。

* 宣告時初使化
可能的話,變數宣告時,同時初始化變數。舉例:
使用
TMyClass x = data;
取代
TMyClass x;
x = data;

宣告之後才初始化,會觸發物件的預設建構式以及其賦值運算子。
若在宣告時初始化,只觸發其複製運算子。

* 傳參考
總是嘗試傳遞類別的參考,而不是傳遞類別的值。舉例:
使用
void foo(TMyClass &x)
取代
void foo(TMyClass x)

(不過我比較習慣傳指標,不知道有沒有影響)

* 延遲變數的宣告
讓變數只被宣告在剛好要被需要之前。
記住當一個變數被宣告,它的建構式也同時被呼叫。
如果這變數並沒有在這範圍(scope)內被使用到,是相當浪費的一件事情。

* 使用運算子 'op='
如果可能,使用 'op=' 取代 'op'。舉例:
使用
x += value;
取代
x = x + value;

前者比較快是因為它省略了暫存物件。

* 將小型函式宣告為 inline
很小,卻又對效能影響很大的函式,應該宣告為 inline。舉例:
inline void foo()

這會使編譯器複製多個函式實體到所有被呼叫的地方,以加快速度。
假設 inline 了大型函式有可能會造成快取失誤而讓執行速度降低。

* 使用未命名(Nameless)物件
如果可能,使用未命名物件。舉例:
使用
foo(TMyClass("abc"));
取代
TMyClass x("abc");
foo(x);

因為前者的引數與物件本身共享記憶體。

參考資料:C++ Optimizations
延伸閱讀:Bitwise Operations

2009年9月18日

[分享]Facebook Flash Application 開發心得

剛好在網路上找到不錯的文章,貼在這邊備忘。

I Am Jason 的 Facebook Flash Application 開發心得

(1) Facebook Connect - 如何開始

(2) Facebook Connect - 接上 Flash

(3) 由 Flash Api 從 Facebook 取得資料

(4) Iframe 的架構下取得 Session

有興趣的人可以試試看 ^_^