
據陸媒報導(然後他們又說「據國外報導」,也不知道消息怎麼來的),西班牙薩拉曼卡市(Salamanca)有一棟建於1102年的伊諾尼馬斯大教堂(Ieronimus Cathedral),上面竟然有現代太空人的石雕。
想當然耳,後面又會接幾句神秘古文明、穿越時空之類的廢話充版面。
我想有點常識的人都會和我想的一樣,九百年的石雕會這麼清楚嗎?許多歐洲建築採用大理石,偏偏歐洲不但潮溼而且酸雨很嚴重,石雕在風吹雨淋下只要幾百年就糊掉了,所以要定期整修。
這麼清晰的太空人是怎麼回事?
由於該死的陸媒從來不提供外文拼寫方式,擺明就是不想讓人查證,所以我花了一點時間才找到這個教堂的相關資訊。
教堂真的有九百年嗎?沒錯,教堂的「歷史」確實九百年,但教堂的「建築物」不是,現在所見的建築物是在十六到十八世紀之間建造的。
那麼十六到十八世紀的人就看過太空人嗎?當然是沒有。因為教堂外牆的石雕老舊,所以在1992年進行整修,太空人就是在那個時候故意加進去的,作為當代的象徵符號,也增加遊客觀賞的趣味。簡單的說就是教堂官方和遊客玩的找碴遊戲,和電腦軟體公司在產品中故意加的小玩意一樣。據說除了太空人之外,還有一個冰淇淋甜筒的石雕,但是我沒找到圖片,歡迎網友提供。
這點在相關旅遊資訊上都找得到
http://www.aboutsalamanca.com/salamanca/itinerary1.asp
novus 發表在 痞客邦 留言(0) 人氣(5,108)
Ehsan Shafiq 是阿富汗人,從小在阿富汗一間少林武術學校習武(阿富汗怎麼會有少林武館呢.....我也不知道。
)由於沒有功夫方面的比賽,所以他開始參加阿富汗以及巴基斯坦的跆拳道、空手道競賽,而打出名堂。
之後他移居到英國,同樣也靠比賽成名,在跆拳道、空手道、Kickboxing方面得過幾次英國冠軍以及全歐冠軍。
他最出名的是大膽又奇特的腿法,還有華麗的飛踢。有一些動作我以為只有在電影裡才看得到。
novus 發表在 痞客邦 留言(3) 人氣(907)
D台的格鬥全天下好像又要推新的單元了。
忽然有個想法,如果把格鬥全天下和流言終結者兩個節目合體,生出一個Martial
Art Buster會怎麼樣呢?這個節目可以由一個戴貝雷帽和一個戴牛仔帽的人主持,到全世界知名的武術勝地去踢館。
novus 發表在 痞客邦 留言(2) 人氣(278)
前幾天又聽到這首歌,之前一直不知道曲名及演唱者,忽然突發奇想決定找出來。
問題是我不知道歌名及演唱者,非英語的歌詞一句也聽不懂.....
唯一的線索是我知道這是極光音樂出品的
多虧了YouTube,現在我可以做到幾年前辦不到的事,我從極光音樂的網站選幾首可能的歌名丟進去搜尋之後,果然找到了。這是瑞典 Garmarna 樂團演唱的民謠Vänner och Fränder。雖然YouTube的版本和我聽到的不一樣,不過女主唱的唱腔非常好認
這裡還有另一個版本
novus 發表在 痞客邦 留言(0) 人氣(160)

比月老還靈的
novus 發表在 痞客邦 留言(3) 人氣(389)
標準C++中只有明文的throw才是唯一發出例外的管道,像存取違規、除以零之類的錯誤並不會丟出任何例外,如果沒有在操作前偵知,則會導致程式直接發生錯誤而關閉。
在Visual C++當中,除了標準的C++語言層級例外處理,還提供了SEH(Structured Exception Handling)。SEH的功能在於,將系統層級發生的錯誤塞回給應用程式,使得程式可以直接catch這些系統層級的錯誤,加以處理。這一類的例外又稱為「非同步例外」。
這篇文章並不打算介紹SEH的功能和用法,這些在網路上已經汗牛充棟了。這裡要說的是,在VC++ 8.0(即VS 2005)之前,用catch捕捉SEH都有可能會造成stack無法正確釋放。
#include <iostream>
#include <cstdlib>
using namespace std;
struct Trace {
Trace() {cout << "ctor. \n";}
~Trace() {cout << "dtor. \n" }
};
int main() {
try {
Trace trace;
char* ptr = 0;
*ptr = 0;
} catch (...) {
cout << "caught. \n";
}
// system("pause");
}
novus 發表在 痞客邦 留言(0) 人氣(721)
這是最近播的流言終結者-阿拉斯加特輯片段,Adam 的反應超好笑。
http://www.youtube.com/watch?v=thg9xqou95I
我不記得在電視上看過這一幕,不知道是台版剪了還是我轉台漏掉。
novus 發表在 痞客邦 留言(0) 人氣(216)
我必須說這個網誌的主人真是太厲害了,完全知道我對佛洛伊德的感想。
基本上佛洛伊德的精神分析就是什麼都可以分析,不僅可以分析精神,股市分析也很有一套。不過什麼有用的解釋都得不到,或者也可以反過來說,任何鳥解釋都可以從精神分析中推出來。
novus 發表在 痞客邦 留言(1) 人氣(430)
有些時候,我們會希望在某個全域物件的建構式當中使用另一個全域物件,但這樣做在C++當中是很危險的。
例如我們希望有個log物件,這個物件在整個專案是獨一無二的,而且保證在第一次使用之前就已經建構好、在最後一次使用之後才釋放。假如有個全域物件建構到一半需要將遭遇的狀況記錄下來,可以直接使用此log物件,而不必擔心log尚未建構;同樣的,我們也可能希望在全域物件解構的時候紀錄一些事情。
困難之處在於,C++對於全域物件的建構順序並沒有一定的規律。C++只保證同一個編譯單元的順序是由上而下,而解構一定遵守和建構相反的順序,但是跨檔案的建構順序完全無法掌握。
這個問題在很久以前就已經有解決之道,並且運用到標準程式庫的cin、cout、cerr、clog等。
novus 發表在 痞客邦 留言(1) 人氣(247)
雖然一直有想要寫一些boost有關的東西,不過始終沒有足夠的時間和動力。出現這篇的原因,是因為前幾天晚上我打算將安裝快兩年的boost更新到最新版,結果我之前寫的編譯batch竟然都失敗。
然後我不停在網路上搜尋其他的「快速」編譯,一再確認自己寫的batch無誤,就是沒有去讀那份該死的官方說明,於是又給「欲速則不達」這句古老格言添了一筆活生生、血淋淋的例子。我的重點是,如果有人打算從1.33版換到1.37版,記得看一下官方的說明,要不然至少看一下以下的內容。
這裡以MinGW為主,VC基本上方法相同。若是沒有奇奇怪怪的需求,建議VC使用者直接安裝別人編譯好的現成檔案。
http://www.boostpro.com/products/free
MinGW簡明編譯步驟:
(1)下載boost原始碼,最新版為1.37(November 2008),抓完之後解壓縮,建議不要放到C:\Boost\,另外找地方放。
(2)下載bjam,這是一個類似make的東西。時間太多的話可以下載原始檔自己編譯(沒錯,我就是那個笨蛋),不然直接抓現成的可執行檔會比較省事,差別只在於自己編譯的會輸出本地化的中文訊息。將bjam.exe解壓縮到剛剛解出來的boost目錄裡。
(3)建立一個批次檔,內容是
path = %path%c:\mingw\bin\;
bjam --toolset=gcc install
上面的 c:\mingw\bin\ 是 MinGW 可執行檔所在的資料夾,隨個人安裝位置有所不同,如果用Dev-C++可能就是C:\Dev-Cpp\bin\。另外新的bjam參數格式和以往版本有些不同,我不確定相容的程度到底有多少,只知上面這樣確實是可以成功的。
(4)執行批次檔,然後就是漫長的等待。完成後會出現C:\Boost\資料夾,裡面有include和lib兩個資料夾。
(5)將這兩個資料夾的內容物複製到編譯器相對應的位置上。或者也可以留在原地,只是以後用到Boost時記得將要include和lib加到編譯器的查找路徑中。另外VC支援用#pragma自動抓lib,所以只要引用標頭檔即可;而的MinGW就必須在編譯時手工加入用到的lib檔。
由於Boost大多數的程式庫和STL一樣都是source level,所以即使不編譯也可以使用大多數的東西。但一些很重要的功能像thread和regexp都還是需要編譯。
其他選項說明
(1) --toolset=XXX
XXX是欲使用的編譯器代碼,常用的有
gcc : gcc相容編譯器,MinGW、Cygwin等。
msvc-7.1:Visual C++ 7.1版,也就是搭配Visual 2003的版本。
msvc-8.0:Visual C++ 8.0版,也就是搭配Visual 2005的版本。
borland:就borland啊
(2) --build-type=complete
編譯所有組態,舊版的Boost預設值,也就是debug/release、multi/single threading、static/shared linking。如果還記得一丁點數學概念的話,應該不難看出總共有2 ^ 3 = 8 種組合,我沒記錯的話中途產生之目的檔加暫存檔逼近2GB,編譯時間接近一小時。
新版預設只產生 release multi-thread 的 static/shared linking兩種組態,如果需要全部建置的話才用--build-type=complete。
(3) variant
release和debug兩選項,對於有debug into lib需求的人可以修改此項
(4) threading
multi和single兩選項。理論上若程式無thread safety顧慮,可以寫出較高效率的單緒程式碼。不過實際上需要編譯的東西中,單緒和多緒多採用相同設計,因此用多緒build就好了。
(5) link
shared和static兩選項。前者會產生DLL和相對應的輔助lib,後者會直接生成靜態連結程式庫。(有些lib只能靜態連結,有些只能動態連結,詳見官方說明)
(6) --with-XXX和 --without-XXX
--with-XXX表示只編譯XXX,--without-XXX表示編譯XXX以外的其他程式庫
(7) --prefix=path
指定install生成的路徑,例如預設是--prefix=C:\Boost\
(8) install和stage
install會將結果匯出到--prefix指定的地方,stage只會在原地產生檔案。
(9)bjam是case sensitive,以上所有參數都是小寫
example:
bjam --toolset=msvc-7.1 variant=debug threading=multi link=shared install
bjam --toolset=gcc variant=release threading=single link=static install
novus 發表在 痞客邦 留言(0) 人氣(923)