2014年3月27日 星期四

如何移除迅雷遊戲盒子

        今天嘗試移迅雷遊戲盒子時,當執行內建的移除程式一直跳出 "Error launching installer" 而無法順利地移除它,上網查詢了一下資料在巴哈姆特討論區發現有人提問相關問題,結果原因真的是路徑名稱的問題,解決方式你可到 Program 資料夾中發現 "游戏盒子",接著你把它改成英文或者數字名稱資料夾,然後在執行該資料夾內的反安裝程式,便可以順利移除了。:) 

[參考資料]
請問有人知道訊雷的遊戲盒子怎麼刪除嗎?

2014年3月4日 星期二

Field `x' has incomplete type?

       當你有兩個Class,CLASS_A與CLASS_B時,如果再主程式中並沒有用include將其header file include進來時,而使用forward reference 時會出現下列的錯誤訊息:

aggregate `CLASS_B bb' has incomplete type and cannot be defined
aggregate `CLASS_A aa' has incomplete type and cannot be defined

範例:
main.cpp
class CLASS_A;
class CLASS_B;

int main()
{
     CLASS_A a;
     CLASS_B b;
     return 0;
}

CLASS_A.h
class CLASS_A{
     public:
            CLASS_A(){}
};

CLASS_B.h
class CLASS_B{
     public:
            CLASS_B(){}
};

         另外,你也許用CLASS_B的物件當做 CLASS_A建構的參數,你也許會看到下面的錯誤訊息:
aggregate `CLASS_B bb' has incomplete type and cannot be defined 
variable `CLASS_A aa' has initializer but incomplete type

範例:
main.cpp
class CLASS_A;
class CLASS_B;

int main()
{
     CLASS_B b;
     CLASS_A a(&b);
     return 0;
}

CLASS_A.h
class CLASS_B; // Forward reference declare

class CLASS_A{
     public:
            CLASS_A( CLASS_B *pB){}
};

      這些是典型的忘記將 header file inlude進來的問題,只要將該檔案的header file include到 main.cpp中即可。會發生 incomplete type 是因為編譯器在編譯時需要知道物件的大小,但是我們 在還不知道class定義在何處,就將其拿來宣告物件使用。 其詳細的 incomplete type 的解釋請參考 下面相關鏈結。

[Keyword]
    incomplete type ; incomplete type + C++ + Class

[相關鏈結]
Incomplete class declarations (C++ only)
Incomplete Type
Forward declarations in C++
C++ Tip: Forward Declaration
forward declaration 唯一的好处只是可以让编译快一点

2014年3月1日 星期六

FileZilla Server 設定筆記

      網路上已經有很多文章教你如何利用 FileZilla Server 架設一般 FTP 或者 FTPS (FTP over SSL/TLS) 網站,請參考下面的鏈結:

    依照上面的設定應該就可以輕鬆架設好你的 FTP Server。但當我在新增兩個不同的目錄 Shared folders 時,使用者連線都只會看到設定為 Home directory,另外新增的 Folder 並不會出現在 FTP Client 的畫面上;如果要讓另外新增的 Folder 出現在FTP Client 的畫面上,你必須設定 Aliases 將它掛到 User 的 Home directory 中,這樣就可以看到你另外新增的 Folder。設定如下:

<1> 點選你新增的資料夾右鍵,選擇 Edit aliases 

<2> 將它設到 Home directory下,這邊名稱也是設定為跟新加入的 Folder 一樣名稱,你可以將它設定為其他名稱,不一定要跟你的實際加入的資料夾名稱一樣。EX: C:\CFTP\DDD ,這樣當使用者登入時看到的就會是 DDD 資料夾了。

<3> 下面是設定的結果,可以發現我們在 User 的 Home directory 多了一個 DFTP 的資料夾。
    

         另外,如果你忘記了 Admin  Interface 的密碼時,你可以到 FileZilla Server 安裝的目錄下,開啟 "FileZilla Server.xml" 檔案 查詢 "Admin Password" ,就可以找回你的密碼了,密碼是用明文顯示。
         基本上 Admin  Interface Settings 不需要設定密碼,因為 Admin  Interface Settings 預設只能透過本機設定 (127.0.0.1),無法透過遠端設定,除非你有設定 "Bind the admin interface to the following ip-adresses:" 與 "IP address which are allowed to connect to the admin interface:"。

        根據 FTPS using Explicit SSL/TLS howto (Server) 文章,如果你有勾選 allow Explicit SSL/TLS on normal connections,建議將下面兩項也勾選:
  1. Disallow plain unencrypted FTP
  2. Force PROT P to encrypt file transfers in SSL/TLS mode
      至於 Explicit 與 Implicit SSL/TLS 的不同你可以參考 FileZilla Wiki SSL/TLS 該篇文章,基本上 Explicit 預設使用 port 21 做連線然後切換到 secure (SSL/TLS) mode,而 Implicit 則預設使用 990。
如果你沒勾選 allow Explicit SSL/TLS on normal connections,則 Client 連線就不能選擇使用此方式做連線。

     此外,你可以在 User Account Setting 中勾選 Force SSL for user login,這樣 FTP Server 就會強制Client 一定要使用 SSL 連線,但是如果 Server 把 FTPS 取消掉時,當 Client 透過一般的 FTP 連線時會出現下列錯誤訊息:

回應: 530 SSL required
錯誤: 無法連線到伺服器

     如果 Client 選擇 Explicit SSL/TLS 方式連線,則顯示下面訊息:

指令: AUTH SSL
回應: 502 SSL/TLS authentication not allowed

    選擇  Implicit SSL/TLS 方式連,則出現下面的錯誤訊息:

狀態: 正在連線到 AAA.BBB.CCC.DDD:990 ...
狀態: 以 "ECONNREFUSED - Connection refused by server" 嘗試連線失敗. 

     如果你有勾選此選項,當 Server 取消 FTPS 設定時,記得把 User Account 中相對應的設定也一併移除,或者一開始就不要把 "Force SSL for user login" 選項給勾選 :P

    最後,架設 FTP Server 最好網路頻寬大一點,不然 Client 下載速度太慢不如直接拿硬碟來 Copy 哈!!!