台灣在 2007/11/02 調過一次油價, 這時候 92 無鉛每公升 30.0 元
然後一路凍到 2008/05/28 才調整, 這時候 92 無鉛每公升 33.9 元, 漲幅 13%
http://www.cpc.com.tw/big5_BD/tmtd/ListPrice/ShowHisToryPrice.asp?pno=53
2007/11/02 這天 OPEC 報價是 87.47 美金 /桶
2008/05/28 這天 OPEC 報價是 123.05 美金 /桶, 漲幅 40.7%
http://www.opec.org/home/basketDayArchives.aspx
2008年7月10日 星期四
2008年7月9日 星期三
Activision Blizzard
今天 (July 9) Activision 的股東投票結束。有 92% 股份說 yes,贊
成被 Vivendi 併購
新合併的 Activision Blizzard 公司,將由 Vivendi 持有 52% 的股份
成被 Vivendi 併購
新合併的 Activision Blizzard 公司,將由 Vivendi 持有 52% 的股份
2008年7月5日 星期六
政府護盤小常識......
政府基金 (又稱四大基金, 指的是郵儲、退撫、勞保、勞退) 跟國安基金是不一樣的東西
前者在尚未被提領使用前, 本來就應該做理財運用, 股市就是其中一個不錯的理財標的. 事實上四大基金本來就一直有一定比例在股市裡, 平常也常進進出出. 據說目前四大基金還有七千億左右的額度可以投入股市 (也許現在是作為提領的預備金, 或是暫時放在定存或其他投資標的)
四大基金的操作不需要對大眾公開, 證交所也不用揭露四大基金每日的買賣超狀況
國安基金, 顧名思義就是發生足以影響國家安全的時候, 才會動用來救股市的基金. 這不是一筆常備的資金, 需要用的時候是政府拿官股抵押向銀行借錢, 或是直接挪用四大基金準備支出的部份 (偷偷印鈔票也是一種方式). 目前估計能運用的額度大約是五千億元而已. 是否動用國安基金需經委員會討論決議, 結論會對社會大眾公開
從 520 到現在, 國安基金「沒有」進場過. 昨天 (7/4) 的委員會議, 決議目前還是不會進場
前者在尚未被提領使用前, 本來就應該做理財運用, 股市就是其中一個不錯的理財標的. 事實上四大基金本來就一直有一定比例在股市裡, 平常也常進進出出. 據說目前四大基金還有七千億左右的額度可以投入股市 (也許現在是作為提領的預備金, 或是暫時放在定存或其他投資標的)
四大基金的操作不需要對大眾公開, 證交所也不用揭露四大基金每日的買賣超狀況
國安基金, 顧名思義就是發生足以影響國家安全的時候, 才會動用來救股市的基金. 這不是一筆常備的資金, 需要用的時候是政府拿官股抵押向銀行借錢, 或是直接挪用四大基金準備支出的部份 (偷偷印鈔票也是一種方式). 目前估計能運用的額度大約是五千億元而已. 是否動用國安基金需經委員會討論決議, 結論會對社會大眾公開
從 520 到現在, 國安基金「沒有」進場過. 昨天 (7/4) 的委員會議, 決議目前還是不會進場
2008年7月4日 星期五
VC.net 的 security CRT
從 VC.net 2005 開始 (包括 2008, 不包括 2003), 微軟覺得 C 語言標準函式庫 (CRT, C RunTime Library) 裡面有些函數, 主要是處理字串的部份, 實在是太不安全了
所以微軟就用他們習慣的方式, 也就是無視標準, 直接另外作了一份安全的實作. 這份新的實作, 理所當然跟標準實作不相容
以最為大家熟悉的問題函式 strcpy() 來說, 微軟提供了安全版本的 strcpy_s(), 後面附加了 '_s' 表示這是安全版本. 其他的函式也是用同樣的方式處理命名
strcpy() 的標準宣告是
char *strcpy(
char *strDestination,
const char *strSource
);
將一個字串從一個地方拷貝到另一個地方. 這個函式的問題在於, 他沒有檢查目標空間是否容納得下來源字串. 因此不小心的程設師可能會寫出有問題的程式, 更嚴重的是有心的駭客可以利用這個函式攻擊
微軟提供的安全版本宣告是
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
多了一個參數用來輸入目標空間的大小, 因此可以檢查會不會出問題. 有問題的話會從修改過的傳回值傳回錯誤, 讓程設師處理. 此時複製動作當然就不會發生
也許有經驗的程設師知道標準裡面還有另一個函式叫 strncpy()
char *strncpy(
char *strDest,
const char *strSource,
size_t count
);
這個函式其實並不算完全安全, 首先 count 是讓你輸入最多想要拷貝幾個字符, 有可能一不小心輸入大於目標空間的數量. 其次在於輸入字串太長, 需要被截掉的時候, 這個函式並不會幫你補上 '\0', 所以會讓目標變成一個沒有結尾的字串. 再來就是他處理的方式不是 "中斷並回報錯誤", 而是 "自行採取第二方案而且不告訴你". 總而言之這並不能當做一個安全的替代方案
順便一提, 微軟也提供了 strncpy_s() 的安全版函式
最後要講的才是本篇重點, 從 VC.net 2005 開始 (包括 2008, 不包括 2003), 只要你的專案用到了這類 "不安全" 的函式, 編譯的時候微軟就會很雞婆的提醒你, 而且是一再提醒你煩到不行. 這時候有幾種對應方式
(1) 裝死當做沒看到. 這方式沒什麼不好, 我猜一直以來大部分人都是這麼做的. 反正頂多就是 warning 跳一堆, output 變很長. 偶爾要找 error 變很麻煩不好找而已. 沒什麼大不了的
(2) 把這個 warning 關掉. 比前者稍微好一點點, 至少眼不見為淨. 不是在編譯選項裡面多加一項, 就是在萬用 include 檔裡面多加一行. 也不算太麻煩
(3) 花時間精力, 把這些問題函式通通修改成微軟的安全版本. 關於這點, 其實我不太贊成 (爆). 固然程式的安全很重要 (你知道連 printf 都有安全版的 printf_s, 你能想像得出 printf 有什麼潛在的安全漏洞? 而事實上就是有, 微軟工程師幫你解決了這問題, 只要你換用 printf_s), 不過很遺憾的 '_s' 的版本並不是標準. 也就是說你的程式這樣一改完 (姑且不論到底花了多久), 就變成只能在 vc.net
上面執行. 拿去 linux/ mac 通通會出問題, 甚至拿去 vc6 都不行. 所以其實不好
(4) 借用 c++ 神奇的模版重載 (template overload) 來處理問題. 也是多開一個選項 (#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1). 讓模版來推算新增的參數需要填什麼, 也因此程式碼不需要作修改. 看起來這是非常完美的方案, 又安全又能優雅的解決問題. 不過可惜的是模版推導還是有其極限, 還是有部分情況無法套用, 此時還是只能 1,2,3 選一種來解決. 此外如果你是開發純 C 專案, 當然也沒辦法用這個
所以微軟就用他們習慣的方式, 也就是無視標準, 直接另外作了一份安全的實作. 這份新的實作, 理所當然跟標準實作不相容
以最為大家熟悉的問題函式 strcpy() 來說, 微軟提供了安全版本的 strcpy_s(), 後面附加了 '_s' 表示這是安全版本. 其他的函式也是用同樣的方式處理命名
strcpy() 的標準宣告是
char *strcpy(
char *strDestination,
const char *strSource
);
將一個字串從一個地方拷貝到另一個地方. 這個函式的問題在於, 他沒有檢查目標空間是否容納得下來源字串. 因此不小心的程設師可能會寫出有問題的程式, 更嚴重的是有心的駭客可以利用這個函式攻擊
微軟提供的安全版本宣告是
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
多了一個參數用來輸入目標空間的大小, 因此可以檢查會不會出問題. 有問題的話會從修改過的傳回值傳回錯誤, 讓程設師處理. 此時複製動作當然就不會發生
也許有經驗的程設師知道標準裡面還有另一個函式叫 strncpy()
char *strncpy(
char *strDest,
const char *strSource,
size_t count
);
這個函式其實並不算完全安全, 首先 count 是讓你輸入最多想要拷貝幾個字符, 有可能一不小心輸入大於目標空間的數量. 其次在於輸入字串太長, 需要被截掉的時候, 這個函式並不會幫你補上 '\0', 所以會讓目標變成一個沒有結尾的字串. 再來就是他處理的方式不是 "中斷並回報錯誤", 而是 "自行採取第二方案而且不告訴你". 總而言之這並不能當做一個安全的替代方案
順便一提, 微軟也提供了 strncpy_s() 的安全版函式
最後要講的才是本篇重點, 從 VC.net 2005 開始 (包括 2008, 不包括 2003), 只要你的專案用到了這類 "不安全" 的函式, 編譯的時候微軟就會很雞婆的提醒你, 而且是一再提醒你煩到不行. 這時候有幾種對應方式
(1) 裝死當做沒看到. 這方式沒什麼不好, 我猜一直以來大部分人都是這麼做的. 反正頂多就是 warning 跳一堆, output 變很長. 偶爾要找 error 變很麻煩不好找而已. 沒什麼大不了的
(2) 把這個 warning 關掉. 比前者稍微好一點點, 至少眼不見為淨. 不是在編譯選項裡面多加一項, 就是在萬用 include 檔裡面多加一行. 也不算太麻煩
(3) 花時間精力, 把這些問題函式通通修改成微軟的安全版本. 關於這點, 其實我不太贊成 (爆). 固然程式的安全很重要 (你知道連 printf 都有安全版的 printf_s, 你能想像得出 printf 有什麼潛在的安全漏洞? 而事實上就是有, 微軟工程師幫你解決了這問題, 只要你換用 printf_s), 不過很遺憾的 '_s' 的版本並不是標準. 也就是說你的程式這樣一改完 (姑且不論到底花了多久), 就變成只能在 vc.net
上面執行. 拿去 linux/ mac 通通會出問題, 甚至拿去 vc6 都不行. 所以其實不好
(4) 借用 c++ 神奇的模版重載 (template overload) 來處理問題. 也是多開一個選項 (#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1). 讓模版來推算新增的參數需要填什麼, 也因此程式碼不需要作修改. 看起來這是非常完美的方案, 又安全又能優雅的解決問題. 不過可惜的是模版推導還是有其極限, 還是有部分情況無法套用, 此時還是只能 1,2,3 選一種來解決. 此外如果你是開發純 C 專案, 當然也沒辦法用這個
2008年6月9日 星期一
台幣換美金費用整理
- Paypal 消費:信用卡刷台幣消費,由 Paypal 根據「當天」匯率 +2.5% 手續費轉成美金
- Paypal 洗錢給國外朋友:同上,收錢方還要多付一筆錢給 Paypal,要多少懶得查
- VISA Credit Card 消費:刷美金,由 VISA 中心在「月底」根據那天的匯率 +1% 手續費,再加上發卡銀行的手續費 (中國信託 +0.55%,總共 1.55% 是大多數銀行的行情價) 轉回台幣跟你收錢
- 銀行電匯:換匯的部份,剛查了一下富邦銀行大約是 +0.165% 手續費。當然換了匯就得要指定到國外的帳戶去,這部份銀行再收一筆錢,如果一次轉不過去還要經過中轉銀行,當然中轉銀行也要收錢 (四五百左右,詳細懶得查,這部份是固定費用,跟轉多少無關)
- 銀行換美金現鈔:富邦銀行 +0.66% 手續費 (注意現金要帶出國,海關有數量限制)
- 美國運通旅行支票:應該是用 +0.165% 即期匯率換成旅行支票,美國運通不多收手續費。在國外換回現金要收手續費 (費用變動很大,因銀行而異),有部分特約銀行免
- ATM 跨國提款:直接拿你台灣的提款卡插進國外的 ATM 提款機,費用懶得查,印象中頗貴
- 在機場換錢:請盡量避免,貴
- 在旅館換錢:更貴
- 在銀樓換錢:......
2008年5月30日 星期五
聖騎 macro 整理
==
攻擊最近目標 (tab 只會切換最近目標, t 只會攻擊目前目標, 而且再按一次就停止攻擊
#show Attack
#showtooltip Attack
/cleartarget
/targetenemy
/startattack [exists]
按一次就會選出離自己最近的目標開始攻擊, 連按也沒關係
==
使用第一格飾品 (這很單純)
#showtooltip 13
/use 13
第二格的同理, 換成 14
==
使用 BoF 後順便通知目標 (如果沒合法目標, casting hand 還是會出來讓你點目標, 當然這時候就無法通知了) (/tt 需要安裝 chatter 才有支援)
#showtooltip Blessing of Freedom
/cast Blessing of Freedom
/stopmacro [noexists][dead][nohelp]
/tt You got BoF!
BoP 同理, 改法術名稱就好了
==
如果有 focus, 對 focus 使用犧牲祝福. 如果沒有就對當前目標使用, 並順便將當前目標設為 focus (如果沒合法目標, casting hand 還是會出來讓你點目標, 當然這時候就無法順便設 focus) (犧牲祝福只能給隊友, 所以未組隊時整個 macro 關掉不反應) (macro 無法判斷目標是否為自己, 所以可能會將自己設為 focus, 這就沒辦法了)
#showtooltip Blessing of Sacrifice
/stopmacro [nogroup]
/cast [target=focus, help, nodead][] Blessing of Sacrifice
/stopmacro [target=focus, help, nodead]
/focus [help, nodead]
==
馬上開無敵 (中斷目前施法, 不過 GCD 還是無法中斷, 這點請注意) (end-game raid 搶這 0.5 秒常常就是生與死的差別, pvp 也是)
#showtooltip Divine Shield
/stopcasting
/cast Divine Shield
==
如果有 focus, 對 focus 使用懺悔. 如果沒有就對當前目標使用 (如果沒合法目標, casting hand 還是會出來讓你點目標)
#showtooltip Repentance
/cast [target=focus, harm, nodead][] Repentance
==
嘲諷 (已針對最近的 patch 修正過) (如果沒合法目標, casting hand 還是會出來讓你點目標)
#showtooltip Righteous Defense
/cast [noharm][target=targettarget, noharm][] Righteous Defense
==
Holy Joke 神聖笑話, 與 Divine Favor 同捆, 目標是敵人的時候順便開始 autoattack (如果沒合法目標, casting hand 還是會出來讓你點目標)
#showtooltip Holy Shock
/cast [combat] Divine Favor
/cast [help, nodead][harm, nodead][] Holy Shock
/startattack [harm, nodead]
==
FoL 小補, 順便換上小補專用書, 支援 spam 連發, 支援點 boss 補坦克. (如果沒合法目標, casting hand 還是會出來讓你點目標)
#showtooltip Flash of Light
/console Sound_EnableSFX 0
/cast [help][target=targettarget, help][] Flash of Light
/equip Blessed Book of Nagrand
/run UIErrorsFrame:Clear()
/console Sound_EnableSFX 1
字數不足了, 無法加上複雜的判斷式避開不該換書的情況 (無合法目標 -> casting hand 出來 -> 換書 -> 引發 GCD -> casting hand 被強制取消)
==
HL rank6 的小補, 按住 shift 施法會換上 +mp5 書, 平常是 -mana 書, 其餘同 FoL macro
#showtooltip Holy Light(Rank 6)
/console Sound_EnableSFX 0
/cast [help][target=targettarget, help][] Holy Light(Rank 6)
/equip [modifier:shift] Libram of Mending
/equip [nomodifier:shift] Libram of Absolute Truth
/console Sound_EnableSFX 1
字數不足把 /run UIErrorsFrame:Clear() 刪了. 其他 HL rank 寫法相同
==
HL 最大補, 與 Divine Illumination 同捆, 會換上 -mana 書, 其實同 FoL macro
#showtooltip Holy Light
/console Sound_EnableSFX 0
/cast [combat] Divine Illumination
/cast [help][target=targettarget, help][] Holy Light
/equip Libram of Absolute Truth
/run UIErrorsFrame:Clear()
/console Sound_EnableSFX 1
字數不足拿掉 shift 換 +mp5 書的部份, 反正我不會用大補開
攻擊最近目標 (tab 只會切換最近目標, t 只會攻擊目前目標, 而且再按一次就停止攻擊
#show Attack
#showtooltip Attack
/cleartarget
/targetenemy
/startattack [exists]
按一次就會選出離自己最近的目標開始攻擊, 連按也沒關係
==
使用第一格飾品 (這很單純)
#showtooltip 13
/use 13
第二格的同理, 換成 14
==
使用 BoF 後順便通知目標 (如果沒合法目標, casting hand 還是會出來讓你點目標, 當然這時候就無法通知了) (/tt 需要安裝 chatter 才有支援)
#showtooltip Blessing of Freedom
/cast Blessing of Freedom
/stopmacro [noexists][dead][nohelp]
/tt You got BoF!
BoP 同理, 改法術名稱就好了
==
如果有 focus, 對 focus 使用犧牲祝福. 如果沒有就對當前目標使用, 並順便將當前目標設為 focus (如果沒合法目標, casting hand 還是會出來讓你點目標, 當然這時候就無法順便設 focus) (犧牲祝福只能給隊友, 所以未組隊時整個 macro 關掉不反應) (macro 無法判斷目標是否為自己, 所以可能會將自己設為 focus, 這就沒辦法了)
#showtooltip Blessing of Sacrifice
/stopmacro [nogroup]
/cast [target=focus, help, nodead][] Blessing of Sacrifice
/stopmacro [target=focus, help, nodead]
/focus [help, nodead]
==
馬上開無敵 (中斷目前施法, 不過 GCD 還是無法中斷, 這點請注意) (end-game raid 搶這 0.5 秒常常就是生與死的差別, pvp 也是)
#showtooltip Divine Shield
/stopcasting
/cast Divine Shield
==
如果有 focus, 對 focus 使用懺悔. 如果沒有就對當前目標使用 (如果沒合法目標, casting hand 還是會出來讓你點目標)
#showtooltip Repentance
/cast [target=focus, harm, nodead][] Repentance
==
嘲諷 (已針對最近的 patch 修正過) (如果沒合法目標, casting hand 還是會出來讓你點目標)
#showtooltip Righteous Defense
/cast [noharm][target=targettarget, noharm][] Righteous Defense
==
Holy Joke 神聖笑話, 與 Divine Favor 同捆, 目標是敵人的時候順便開始 autoattack (如果沒合法目標, casting hand 還是會出來讓你點目標)
#showtooltip Holy Shock
/cast [combat] Divine Favor
/cast [help, nodead][harm, nodead][] Holy Shock
/startattack [harm, nodead]
==
FoL 小補, 順便換上小補專用書, 支援 spam 連發, 支援點 boss 補坦克. (如果沒合法目標, casting hand 還是會出來讓你點目標)
#showtooltip Flash of Light
/console Sound_EnableSFX 0
/cast [help][target=targettarget, help][] Flash of Light
/equip Blessed Book of Nagrand
/run UIErrorsFrame:Clear()
/console Sound_EnableSFX 1
字數不足了, 無法加上複雜的判斷式避開不該換書的情況 (無合法目標 -> casting hand 出來 -> 換書 -> 引發 GCD -> casting hand 被強制取消)
==
HL rank6 的小補, 按住 shift 施法會換上 +mp5 書, 平常是 -mana 書, 其餘同 FoL macro
#showtooltip Holy Light(Rank 6)
/console Sound_EnableSFX 0
/cast [help][target=targettarget, help][] Holy Light(Rank 6)
/equip [modifier:shift] Libram of Mending
/equip [nomodifier:shift] Libram of Absolute Truth
/console Sound_EnableSFX 1
字數不足把 /run UIErrorsFrame:Clear() 刪了. 其他 HL rank 寫法相同
==
HL 最大補, 與 Divine Illumination 同捆, 會換上 -mana 書, 其實同 FoL macro
#showtooltip Holy Light
/console Sound_EnableSFX 0
/cast [combat] Divine Illumination
/cast [help][target=targettarget, help][] Holy Light
/equip Libram of Absolute Truth
/run UIErrorsFrame:Clear()
/console Sound_EnableSFX 1
字數不足拿掉 shift 換 +mp5 書的部份, 反正我不會用大補開
2008年5月24日 星期六
C++0x Concept
C++ 引進了模版,比方說我要寫一個泛用的兩數取最大值函式
template<>
T Max( T a, T b ) { return (a > b) ? a : b; }
那麼不管是整數,浮點數還是什麼,都可以套用進這個模版。但是
不是所有類別都可以套用進去,至少要是個數字,寫個 Max<>( a, b )
一點意義都沒有,在編譯的時候 compiler 會吐一串複雜難懂的錯誤訊息
跟你抱怨這個
以這個例子來說,套用進來的類別必須要能做「大於」運算
所以 c++0x 引進新的 concept 觀念。我們可以寫一個 concept 規範
一個有「大於」運算的類別
concept HasLarger<>
{
bool operator>( T, T );
}
這樣就可以重寫上面的範例
template<> requires HasLarger<>
T Max( T a, T b ) { return (a > b) ? a : b; }
簡化的寫法
template<>
T Max( T a, T b ) { return (a > b) ? a : b; }
除了 concept,還有所謂的 concept_map
繼續用上面的例子說明,假設你真的很想用 Max<>( a, b )
這樣的函式。可以用 concept_map 告訴編譯器要怎麼處理這種特例
concept_map HasLarger<>
{
bool operator>( Camera& a, Camera& b) { return true; }
// 反正是範例, 假設永遠 a > b
}
這樣子使用
Camera a, b;
Camera& c = Max<>( a, b );
就不會有問題了
由於有 concept_map,有時候可以寫出怪怪的程式
concept HasAdd<>
{
T operator+( T, T );
}
concept_map HasAdd<>
{
int operator+( int a, int b ) { return a * b; }
}
template<>T Add( T a, T b ) { return a + b; }
這時候在程式中寫
int a = 3;
int b = 4;
int c = Add<>Add( a, b );
結果是 12
如果又突然不想要 concept_map,那麼可以這樣寫
int a = 3;
int b = 4;
late_check
{
int c = Add<>Add( a, b );
}
這樣結果是 7
template<>
T Max( T a, T b ) { return (a > b) ? a : b; }
那麼不管是整數,浮點數還是什麼,都可以套用進這個模版。但是
不是所有類別都可以套用進去,至少要是個數字,寫個 Max<>( a, b )
一點意義都沒有,在編譯的時候 compiler 會吐一串複雜難懂的錯誤訊息
跟你抱怨這個
以這個例子來說,套用進來的類別必須要能做「大於」運算
所以 c++0x 引進新的 concept 觀念。我們可以寫一個 concept 規範
一個有「大於」運算的類別
concept HasLarger<>
{
bool operator>( T, T );
}
這樣就可以重寫上面的範例
template<> requires HasLarger<>
T Max( T a, T b ) { return (a > b) ? a : b; }
簡化的寫法
template<>
T Max( T a, T b ) { return (a > b) ? a : b; }
除了 concept,還有所謂的 concept_map
繼續用上面的例子說明,假設你真的很想用 Max<>( a, b )
這樣的函式。可以用 concept_map 告訴編譯器要怎麼處理這種特例
concept_map HasLarger<>
{
bool operator>( Camera& a, Camera& b) { return true; }
// 反正是範例, 假設永遠 a > b
}
這樣子使用
Camera a, b;
Camera& c = Max<>( a, b );
就不會有問題了
由於有 concept_map,有時候可以寫出怪怪的程式
concept HasAdd<>
{
T operator+( T, T );
}
concept_map HasAdd<>
{
int operator+( int a, int b ) { return a * b; }
}
template<>T Add( T a, T b ) { return a + b; }
這時候在程式中寫
int a = 3;
int b = 4;
int c = Add<>Add( a, b );
結果是 12
如果又突然不想要 concept_map,那麼可以這樣寫
int a = 3;
int b = 4;
late_check
{
int c = Add<>Add( a, b );
}
這樣結果是 7
訂閱:
文章 (Atom)