Feeds:
文章
留言

Archive for 2008 年 02 月

2008030101

調整一下 Attribute 的順序才可以過

<embed src="http://www.sonybmg.com.tw/pop/joanna/mp3player.swf&quot; type="application/x-shockwave-flash" wmode="opaque" flashvars="playlist=http://www.sonybmg.com.tw/pop/joanna/mp3player.xml" pluginspage="http://www.macromedia.com/go/getflashplayer&quot; allowscriptaccess="never" allownetworking="internal" height="532" width="239">

看來 Microsoft 的工程師是採用正規表示法判斷…. 用 DOM 應該就不會出現這種問題~

另外 Firefox 使用該功能則有問題…真是#@!#@!#!@

20080630102

Read Full Post »

王若琳的音樂真好聽~

果然很像小野麗莎的風格,很對我的味… 真是好聽 ^O^

http://www.sonymusic.com.tw/pop/joanna/musicplayer1.htm

http://www.sonybmg.com.tw/pop/joanna/mp3player.swf

Read Full Post »

介面外觀變得好有質感 & 專業(個人感覺),操作也變得更容易,不過倒是沒有新增什麼功能~

20080228

Read Full Post »

對英文不好的 Java 開發人員來說,一定非常感謝"郭朝益(ChaoYi, Kuo) "提供這麼好的文件,詳細下載點和說明參考下面作者張貼的文章

(製作並分享下載) Java SE 6 API 文檔-正體中文版

Read Full Post »

Google 提供 Gtalk Gadget 可直接內看在你的網站,功能類似 MSN[2]。可讓匿名使用者直接與你交談。

整合步驟也很簡單,首先必須有 Google 帳號,然後登入成功。接著連瀏覽一下連結

http://www.google.com/talk/service/badge/New

出現如下畫面:

001

只要將 HTML 程式碼貼到你的網站即可。如要關閉此功能(可能不想讓大家知道你的狀態或不明人士騷擾),必須回到這裡點選 "Disable old badges"。下圖是我的測試畫面

002

下圖是對話截圖

003

004

參考資料
[1] Google Operating System, "Chat With Your Site’s Visitors Using Google Talk"
[2] Chui-Wen Chiu, "把 MSN 放在你的 Blog"

Read Full Post »

C++ Builder 6.0 IDE 工具的 Tools | Editor Options | Code Insight | Code Templates 可修改預設的程式片段樣板,可是當你換到一台電腦時,還要重複設定才能符合你的習慣,此時,你只需要複製 C:Program FilesBorlandCBuilder6Binbcb.dci 檔案到新電腦即可。

當然你也可以透過記事本或其他工具直接編修內文或新增屬於自己的程式片段~

Read Full Post »

program_options 解析 winmain 和 main 參數的方式不同,主要是在 paser 前先用 split_winmain 分割字串,再進行 parser。以下是針對 winmain 改寫[1] 的範例:

#include <windows.h>
#include <boostprogram_options.hpp>
#include <string>
#include <sstream>
#include <vector>
#pragma hdrstop
//—————————————————————————
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int)
{
    using std::vector;
    using std::string;
    using std::stringstream;
    using std::endl;

    namespace po = boost::program_options;
    po::options_description desc("My Commnad Line");
    desc.add_options()
        ("help,h", "help message")
        ("author,a", "Author")
        ("string,s", po::value<string>(),"run as client and connect to the specified IP")
        ("int,i", po::value<int>(), "the number of concurrent connections")
    ;

    po::variables_map vm;
    vector<string> args = po::split_winmain(lpCmdLine);
    po::store(po::command_line_parser(args).options(desc).allow_unregistered().run(), vm);
    stringstream os;
    if (vm.count("author")) {

      os << "Author: Chui-Wen Chiu" << endl;
      os << "Blog: http://chuiwenchiu.spaces.live.com" << endl;
    }

       // -h or –help
    if (vm.count("help")) {
       os << desc << endl;
       ::MessageBox(0, os.str().c_str(),0, 0);
       return 1;
    }

    // -s "123 456 789" or –string="123 456 789"
    if(vm.count("string")) {
      string sip = vm["string"].as<string>();
      os << "string: " << sip << endl;
      // connect to server…
    }

    // -i 1 or –int=1
    if(vm.count("int")) {
      int t = vm["int"].as<int>();
      os << "int: " << t << endl;
      // connect to server…
    }

    ::MessageBox(0, os.str().c_str(),0, 0);
    return 0;

}

相關文章
[1] Chui-Wen Chiu, "C++ boost::program_option 解析命令列參數"

Read Full Post »

C++ Builder 6.0 專案樣板

你是否也和我一樣覺得,每次新增一個專案都要手動引入 boost 的 include/lib 路徑很麻煩,再找不到 IDE 的設定之下,我找好從檔案尋找,在

C:Program FilesBorlandCBuilder6Bin 目錄下有一個 default.bpr,這就是每次新增專案時的專案樣板,如果你要讓專案每次都自動引入 boost Library 可如下修改設定:

<INCLUDEPATH value="&quot;C:Program FilesBorlandCBuilder6Projects&quot;;$(BCB)include;$(BCB)includevcl;C:Program FilesBorlandCBuilder6;C:Boost_CB6includeboost-1_34_1"/>
<LIBPATH value="&quot;C:Program FilesBorlandCBuilder6Projects&quot;;$(BCB)libobj;$(BCB)lib;C:Boost_CB6lib"/>

以後新增專案就不用這麼麻煩了 ^O^

你當然也可以修改樣板其他設定符合你的開發需要,不過,C++ Builder 應該有對應工具或選項才對,請知道的人告訴我一下~

另外,該目錄除了剛剛談到的樣板之外還有

default.bmk — makefile 樣板

deflib.bmk — makefile 樣板, library 用

Read Full Post »

C++ 寫 Console 程式常常需要解析命令列參數,可是在 STL 並沒有提供好用的類別可供使用,之前一直很想整理一個負責此功能的類別,直到今天迫不得以抽空測試 boost 提供的 program_option 類別,以解我的 C++ 長期解析命令列參數的麻煩,以下是一個簡單的範例,針對常用的無參數、int 參數和字串參數作解析,對於不支援的參數則自動忽略,範例如下:

//—————————————————————————
#include <boostprogram_options.hpp>
#include <string>
#include <iostream>
#pragma hdrstop
//—————————————————————————

#pragma argsused
int main(int argc, char* argv[]){
    using std::string;
    using std::cout;
    using std::endl;

    namespace po = boost::program_options;
    po::options_description desc("My Commnad Line");
    desc.add_options()
        ("help,h", "help message")
        ("author,a", "Author")
        ("string,s", po::value<string>(),"run as client and connect to the specified IP")
        ("int,i", po::value<int>(), "the number of concurrent connections")
    ;

    po::variables_map vm;
    try{
        po::store( po::command_line_parser(argc, argv).options(desc).allow_unregistered().run(), vm);
        po::notify(vm);

        if (vm.count("author")) {
          cout << "Author: Chui-Wen Chiu" << endl;
          cout << "Blog: http://chuiwenchiu.spaces.live.com" << endl;
        }

        // -h or –help
        if (vm.count("help")) {
          cout << desc << endl;
          return 1;
        }

        // -s "123 456 789" or –string="123 456 789"
        if(vm.count("string")) {
          string sip = vm["string"].as<string>();
          cout << "string: " << sip << endl;
          // connect to server…
        }

        // -i 1 or –int=1
        if(vm.count("int")) {
          int t = vm["int"].as<int>();
          cout << "int: " << t << endl;
          // connect to server…
        }
    }catch(boost::program_options::invalid_command_line_syntax&){
        cout << "參數語法錯誤" << endl;
        cout << desc << endl;
    }catch(boost::bad_lexical_cast&){
        cout << "參數型別錯誤" << endl;
        cout << desc << endl;
    }catch(…){
        cout << "ERROR" << endl;
    }

    return 0;
}
//—————————————————————————

雖然 boost::program_option 有提供便利的參數型別轉換,不過,我覺得設計的並不好用,所以,我個人還是覺得全部設定為字串參數,然後自己透過 boost::lexical_cast 轉換型別(program_option 內部自動完成此步驟),可以比較容易掌握 boost::bad_lexical_cast Exception 的發生。

另外,網路上有人提到 getopt 也常被用來解析命令列參數,不過沒有時間測試,未來有需要再來看看~

Read Full Post »

Box.net 是一個相當不錯的網路硬碟服務,可允許你上傳圖片且提供瀏覽功能,但是瀏覽只在上方提供上下頁面切換,對於看漫畫時常需要翻頁來說相當不便,於是,我利用 Greasemonkey 這個 firefox 擴充套件寫了一下簡單的 script (box.user.js)來添加上下頁面切換的快速鍵,如下:

// ==UserScript==
// @name            Box.net add shortcut
// @namespace        http://chuiwenchiu.spaces.live.com/
// @author            Chui-Wen Chiu <cwchiu@hotmail.com>
// @include        http://www.box.net/shared/*
// @description        Alert Message
// ==/UserScript==
document.body.setAttribute(‘onkeydown’, ‘if (event.keyCode == 80) {box_gallery.slideshow("prev");document.getElementById("next_photo").scrollIntoView()}else if (event.keyCode == 78) { box_gallery.slideshow("next");document.getElementById("next_photo").scrollIntoView() }’ );

如果你也有同樣的需要也安裝了Greasemonkey ,將上述script copy&paste 到記事本,並存成 box.user.js,然後拖曳到 firefox 即可安裝,馬上享受利用 p 和 n 快速看漫畫的樂趣 ^O^

Read Full Post »

Older Posts »