2014年6月22日 星期日

用 C++ 的 STL 作為參數須注意 Release 版 和 Debug 版 之間會出錯

假設某一 lib 檔是 Release 版,提供以下兩個函數:

void f1(std::string s);
std::string f2();

若呼叫端是 Release 版,呼叫這兩個函數都沒問題,但若是編譯成 Debug 版就會出錯。
不過這似乎是 vc 的問題,我在 gcc 試過不會這樣。




2014年6月18日 星期三

永動裝置

這種東西接上發電機 不就有用不完的電
若可行 好像違反能量守恆定律 若要不違反 只好假設會消耗地球重力 重力由物質多寡決定 這麼簡單就做到質能轉換?



這個更簡單了 永久磁鐵發電 核4可以停建了
馬上就可以做 不用電全年無休的風扇 會不會再次工業革命



就是這個光


2014年6月11日 星期三

測試 MipmapCreate()

這次寫個程式來測試 Mipmap 建立函數 一文中的 MipmapCreate(),看看效果如何,而圖檔的讀取和儲存,採用 DevIL 這個知名的程式庫。

先看看 MipmapCreate() 建立的效果怎樣,此圖是將 Mipmap 各層的圖片疊加在一起:



看起來效果還不錯,這測試程式使用 vs2008 編寫,源碼下載:
https://www.dropbox.com/s/q3nlvb7qwkr4wg8/MipmapCreateTest.rar
http://pan.baidu.com/s/1i3BUiJ7

要編譯請先看一下內附的 ReadMe.txt 有關 DevIL 的說明。

以下列出程式碼:

2014年6月9日 星期一

Mipmap 建立函數

可以用不限長寬的圖片來產生 Mipmap 所須各圖層的圖片。

MipmapCreate() 的第一個參數 Mipmap 用於回傳 Mipmap 所有圖層的陣列,格式為
{第 0 層圖片的指標, 第 1 層圖片的指標, ... 第 LevelNum-1 層圖片的指標}

第二個參數 WidthHeight 用於回傳各層圖片的長寬,格式為
{
第 0 層圖片的 Width, 第 0 層圖片的 Height,
...
第 LevelNum-1 層圖片的 Width, 第 LevelNum-1 層圖片的 Height
}

第三個參數 LevelNum 用於回傳建立的層數


2014年5月22日 星期四

JavaScript 網上自學課程


http://www.takka.com.hk/jstutor/jsindex.htm



delegate 2.2 元件

相較於先前的版本,改用 operator=()/operator+=() 取代 Bind() 的功能,operator-=() 取代 Unbind 的功能;成員函數不再能直接設定,而是先用 class bind 包裝之後再設定給 delegate。簡介如下:

  • 須搭配 CxxlMan 程式庫
  • 可代理一般函數指標或成員函數指標(須先用 bind 包裝),參數最多 10 個
  • 對於有回傳值的的格式,只能設定一筆函數指標資料,多次設定後 者會取代前者,若未設定函數指標資料,執行叫用將會 throw DelegateErr_NoBind
  • 對於無回傳值的的格式,可以設定多筆函數指標資料,且會傳回一個 DelegateID,此  ID 可刪除用
  • 設定的方式採用運算元 operator=()(用於取代,即原有的全刪除),或  operator+=()(用於增加)
  • 刪除的方式採用運算元 operator-=(ID)(只刪一個),或用 Clear() 全刪除

下載點:
https://www.dropbox.com/s/b1zht5aid8hrakc/delegate%202.2.7z
http://pan.baidu.com/s/1jG1bqCm

2014年5月19日 星期一

cxxl3d.tk 轉址失效

由於 cxxl3d.tk 轉址失效了,以下做臨時因應:




2014年4月30日 星期三

MOGO 史上最強的電腦圍棋


號稱史上最強的電腦圍棋,曾打敗多位職業棋士,懶人包下載點:

http://pan.baidu.com/s/1hqiNxQW

解壓後執行 Drago.exe ,先到 選單 [對弈] -> [對弈引擎設定],按 <添加> ,從列表中選 MoGo,在選項中選 <已安裝>,按 <確定> 退回後在路徑選擇 MoGo_release3\mogo.exe,就設定完成了。

現在可以從選單 [對弈] -> 開始人機對弈,開始下棋。

這裡有 MoGo 的參數說明:
http://web.archive.org/web/20080831091349/http://www.lri.fr/~gelly/MoGo_Download.htm


雖然號稱打敗多位職業棋士史上最強的電腦圍棋,但我和他下的第一盤就把他 KO 掉了 :)
棋譜如下:





2014年4月18日 星期五

delegate 元件

相當於 c# 的 delegate、boost 的 function,下載點:

https://www.dropbox.com/s/2qwqb516v7fi47s/delegate%202.1.7z
http://pan.baidu.com/s/1kT0rOLx

- 須搭配 CxxlMan 程式庫
- 可代理一般函數指標或成員函數指標,參數最多 10 個
- 對於有回傳值的的格式,只能 bind 一筆函數指標,若多次呼叫
  Bind(), 後者會取代前者,若無 bind,執行函數物件叫用(operator())將
  會 throw DelegateErr_NoBind
- 對於無回傳值的的格式,可以 bind 多筆函數指標資料,用 Bind() 會
  傳回一個 DelegateID,此 ID 可給 Unbind() 刪除用

以下是示範程式,

設計邊境

設計課程

https://www.youtube.com/playlist?list=PL8209C3B494AFF49C

我們有跟著宇宙一起膨脹嗎











2014年4月17日 星期四

簡單實作 boost::function 的主要功能

trace goost::function 真的像在走迷宮,它使用大量的 macro 層層相扣,但也只提供最多 10 個參數可以使用,若參數個數能無限制還情有可原,只為 10 個參數搞得這麼誇張,不如使用暴力法還來得簡單明瞭。

goost::function 其實也沒什麼,主要的關鍵在要怎麼把函數的 type 分離出來,比如 goost::function<char(float,int)> 中的 char(float,int) 是一個 type,要怎麼分離出 char、float 和 int 這三個 type?goost::function 是借用特製化 class 自動匹配 type 的技巧,以下用例子說明:

2014年4月6日 星期日

成員函數指標的奇異現象

這方法蠻特殊的,不知是否有實用的價值,很像為 Base 附加功能,不過的我寧願採用延伸介面的方法

 1 #include <iostream>
 2  
 3  using namespace std;
 4  
 5  class Base1
 6  {
 7  public:
 8    // Constructor
 9    Base1(){}
10    // Destructor
11    ~Base1(){}
12  };
13  
14  class Derived1:public Base1
15  {
16    int m_data;
17  public:
18    // Constructor
19    Derived1()
20    {
21      m_data = 0;
22    }

2014年4月3日 星期四

CxxlMan 程式庫源碼

先要有一套 svn 使用端的工具,比如 TortoiseSVN,Checkout URL 填入 http://cxxlman.googlecode.com/svn,即可取得源碼。其內不包含 Make,僅是作為參考、瞭解之用。

程式庫的取得和用法在 http://cxxlman.cxxl3d.tk/




2014年3月11日 星期二

走不出的樓梯

只有三種可能,1. 影片作假,配合一流的演員和一流的剪接。2. 他們在玩雙胞胎的把戲。 3. 那是一個奇幻空間,偉大的發現。

其他一些錯覺什麼的解釋都不可信







2014年2月19日 星期三

C++ 延伸介面也延伸實作

在 C++ 中若要增加一個介面類別的功能,就得從這個介面類別再延伸出一個新介面類別,在其中增加新功能,但這要實作可麻煩了,還得把舊介面所宣告的功能再寫一次,以下這範例的做法可省去這層麻煩,不過得有舊實作的原始碼才行。

注意對介面的繼承須加一個 virtual


 1 #include <iostream>
 2  
 3  using namespace std;
 4  
 5  // 介面
 6  class IBase
 7  {
 8  public:
 9    IBase(){}
10    virtual ~IBase(){}

2014年2月12日 星期三

WD WD10EZEX-08M2NA0 和 NVIDIA IDE SW 相衝

剛買了一顆 WD WD10EZEX-08M2NA0 硬碟,在 WinXP 下看不到,但用 WinXP 安裝光碟是看得到的,索性就把 WinXP 安裝到這顆硬碟,一開始一切正常,但安裝完一堆驅動程式後就開不了機了。

想說一個個找原因很麻煩,只好假設是儲存方面的驅動程式,重裝一次 WinXP,但沒裝 NVIDIA IDE SW,果然被我猜中。

為了進一步確認,一切裝好後,設好系統還原,再裝上 NVIDIA IDE SW,重開機後就進不了 WinXP 了,證明無誤。

只有 WinXP 的 NVIDIA IDE SW 有影響,在 Win7 無影響。





2014年2月4日 星期二

讓 KGS 落子有聲的 java 版本

在 KGS 下圍棋落子沒聲,經不斷嘗試,找到可讓 KGS 落子有聲的最新版本為

 Java SE Runtime Environment 6u31


先點 Accept License Agreement 再抓,註冊完就能抓取