Feeds:
文章
留言

Archive for 2007 年 12 月

Yahoo 新聞小 Bug

如下圖

20071228

Read Full Post »

便當附的 xx 多飲料小心喝

今天中午訂便當附了一罐"愛露多",同事很"好心"的把他那罐送給我,他說這種未知牌子少喝為妙

於是上網查了一下,有用的資料僅下面三筆

[1] http://tw.myblog.yahoo.com/xp-xp/article?mid=385&prev=454&l=f&fid=18
[2] http://blog.roodo.com/ataima/archives/4225323.html
[3] http://gcis.nat.gov.tw/pub/cmpy/cmpyInfoAction.do?method=detail&banNo=16069861

如下圖是摘錄自 [3] 愛露多公司登記資料

2007122703

已經解散的公司怎麼還會販售飲料呢~~~~~~~ 還是不喝為妙

Read Full Post »

VCL 元件不支援 Unicode 是長久以來的問題,今天我的元件因為有人將簡體文字輸入 TMemo 出現亂碼,再次引發 VCL Unicode 議題,原本我想使用 ActiveX 解決,可是因為進入 C++ Builder 會加上一層 VCL Wrapper,所以還是會產生亂碼。

後來我又想透過 VC 撰寫該 UI 介面,然後透過 DLL 方式納進我的元件,可是有點繁瑣。於是在網路上收集資料發現 Tnt Unicode Controls Project,這是一套針對 Unicode 重新設計的 VCL 元件,透過該元件可以正常顯示 Unicode 文字,不過處理上仍要小心,要使用 WideString 取代 AnsiString 處理 Unicode 文字,其他相關的 API 也要使用 Unicode 版本。 如此可稍微解決 VCL 不支援 Unicode 問題。

不過 Tnt Unicode Controls 在今年(2007) 被 Tntware 收購並改名為 TMS Unicode Controls,所以最新版本必須花錢購買。可是,如果你不介意使用舊版,可到 Delphi Inspiration 下載最後免費版本  TntUnicodeControls_2.3.0.zip

下圖是我的簡易測試畫面

2007122601

Read Full Post »

這個針對 Freegrab 1.2.3.4.1 build 071125 fix4 版本而寫的 ADrive 下載腳本
ADrive 空間單一檔案可使用 200MB 且目前無須驗證即可下載檔案,也無下載流量限制
目前使用這個空間進行分享的似乎還不多
未來如果有大量分享時,這個腳本就可發揮功用 ^^

MODULE_NAME = "adrive"
MODULE_VERSION = "0.0.1"
MODULE_REQUIRE_VERSION = "1.2.3.3"
MODULE_AUTHOR = "cwchiu@hotmail.com"
MODULE_LAST_UPDATE = "2007/12/15"

————————————————————————-
–main
————————————————————————-
function Download()  
    local url = GetUrl()
    GetHtml()
    if not Compile("fileID=([0-9a-z]*)&did=(\d+)") then
    UpdateLog("網址有誤")
    return false
    else
    local _, a, b = What()
    return GetFile(‘http://www.adrive.com/public/view?fileID=’..a..’&did=’..b)
    end

end

還有需要將腳本加入模組設定,讓 Freegrab 能夠抓到,在 Modulesconfig.lua 加入下面的敘述

freegrab.MODULE["adrive.com"]        = {    name="adrive", cat="webhost",
                        home="http://www.adrive.com",
                        charset="UTF-8",
                        fnformat="$url.$ext"}

如此即能讓 FreeGrab 支援 ADrive 檔案下載功能,如下圖:

Read Full Post »

其實和 "使用 FreeGrab 抓 ITPub 的電子書"一樣,只是 Main 改為 Download ,其餘不變如下:
MODULE_NAME = "ITPub"
MODULE_VERSION = "0.0.1"
MODULE_REQUIRE_VERSION = "1.2.3.3"
MODULE_AUTHOR = "cwchiu@hotmail.com"
MODULE_LAST_UPDATE = "2007/12/09"

————————————————————————-
–main
————————————————————————-
function Download()   

    local url = GetUrl()
    local username = ‘你的帳號
    local passwd = ‘你的密碼
    AddFormField("login_name", username)
    AddFormField("password", passwd)
    AddFormField("furmcookie", ’30’)
    AddFormField("ts", ‘1197393424’)
    SetReferer(url)
    PostForm(‘http://sso.itpub.net/Login’)

   
    if url:find( "itpub%.net/attachment%.php" ) then           
        GetHtml()
        if not Compile("www%.itpub%.net/authimg%.php") then return false end
        local ok = GetCaptcha(‘http://www.itpub.net/authimg.php’)
        local code = PromptCaptcha(20)
        AddFormField("checkcode",code)
        SetReferer(url)
        PostForm(url)
       
        local aid = url:sub(url:len()-5,url:len())
        return PostFile(‘http://www.itpub.net/attachment.php?aid=’..aid..’&checkcode=’..code..’&downnow=1′)       
    else
        UpdateLog("網址有誤")
        return false
    end   

end

記得將上面紅色文字改寫成你的帳號和密碼。接著將該檔案存放在 FreeGrab 下的 Moduleswebhost,
並將檔名命名為 itpub.lua

接著在 Modulesconfig.lua 加入下面的片段
freegrab.MODULE["itpub.net"]        = {    name="ITPUB", cat="webhost",
                        home="http://www.itpub.net",
                        charset="UTF-8",
                        fnformat="$url.$ext"}

Read Full Post »

"自訂 | 進階" 中可讓使用者自行微調外觀,如下圖

2007122101      2007122102

Read Full Post »

如果你用 VS2005 的 Setup 專案來佈署你的應程式,預設情況下當你製作新版的安裝程式,並在執行安裝程式應該會出現下面的畫面(VS2005環境中的安裝不會),

如要解決這個問題,將 Setup 專案屬性的 RemovePreviousVersions 設為 true,並將版本編號遞增比原來版本高,如下圖:

如此可解決上述新版安裝問題

Read Full Post »

很久以前用 HttpWebRequest 模擬檔案上傳時,當上傳檔案過大也會發生耗盡大量記憶體的問題,導致系統整體效能嚴重下降。可當時一直找不到解法就暫時先不管,直到今天又遇到同樣問題,決定探究一下問題原因,幾番折騰後發現問題出在  HttpWebRequest.GetRequestStream().Write() 資料,當我資料透過該方法寫入時,記憶體如同進入黑洞一般消失殆盡。

如果要避免此一問題,可將 HttpWebRequest.AllowWriteStreamBuffering 屬性設定為 false,這個屬性依據官方說明[1]摘錄如下:

AllowWriteStreamBufferingtrue 時,在記憶體中緩衝處理資料,使它們在重新導向或驗證 (Authentication) 要求的事件中準備好重新傳送。

實作者注意事項AllowWriteStreamBuffering 設定為 true 可能導致效能問題,因為上載大量資料集時,資料緩衝區可能會使用所有可用的記憶體。

Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 平台注意事項: 基於效能考量,這個屬性的預設值為 false;然而,重要的是要注意,如果動作必須有實體 (Entity) 資料 (例如 POST),則重新導向和驗證可能不會發生。若要實作 HTTP 要求的完整 .NET Framework 行為,請將 AllowWriteStreamBuffering 設為 true

從上述說明可知道,當 AllowWriteStreamBuffering = true 時,由於資料會 cache 在緩衝區處理,因此上傳大型檔案時會消耗大量的記憶體,而這個屬性預設情況下又設定為 true,所以就會發生我所遇到的問題。所以之要將該屬性設為 false 即可解決問題。不過設為 false 之後,必須自行處理 HttpWebRequest.ContentLength 屬性

參考資料
[1] MSDN, "HttpWebRequest.AllowWriteStreamBuffering 屬性(System.Net)"

Read Full Post »

Json.NET 屬於 .NET 版本的 Json 函數庫,最近需要轉換自訂的類別,可卻發生內建 Version 類別無法正常解析的錯誤。
於是自訂 Version 類別用的 JsonConverter 用於 JSON 轉換。類別定義如下:
    /// <summary>
    ///
    /// </summary>
    public class VersionJsonConverter : JsonConverter {
        public override object ReadJson(JsonReader reader, Type objectType) {
            if (objectType != typeof(Version))
                throw new JsonSerializationException("Fail");

            int Major = 0;
            int Minor = 0;
            int Revision = 0;
            int Build = 0;
            while (reader.Read()) {
                if (reader.TokenType == JsonToken.EndObject) {
                    break;
                }

                if (reader.TokenType == JsonToken.PropertyName) {
                    String vStr = reader.Value.ToString();
                    if (vStr == "Major") {
                        reader.Read();
                        Major = Int32.Parse(reader.Value.ToString());
                    } else if (vStr == "Minor") {
                        reader.Read();
                        Minor = Int32.Parse(reader.Value.ToString());
                    } else if (vStr == "Revision") {
                        reader.Read();
                        Revision = Int32.Parse(reader.Value.ToString());
                    } else if (vStr == "Build") {
                        reader.Read();
                        Build = Int32.Parse(reader.Value.ToString());
                    }                   
                }
            }           

            return new Version(Major, Minor, Build, Revision);           
        }

        public override bool CanConvert(Type objectType) {
            return objectType == typeof(Version);
        }
    }

測試程式
    class Program {

        [STAThread]
        static void Main(string[] args) {
            Version v = new Version("1.2.3.4");
            String s = JavaScriptConvert.SerializeObject(v);
            Version v1 = JavaScriptConvert.DeserializeObject<Version>(s); // 預設轉換
            Console.WriteLine("v == v1 ? {0}", (v1.Equals(v)) );

            Version v2 = JavaScriptConvert.DeserializeObject<Version>(s, new VersionJsonConverter()); // 加入自訂轉換
            Console.WriteLine("v == v2 ? {0}", (v2.Equals(v)));                                                  

        }
   }

執行結果:

變數狀態:

Read Full Post »

Read Full Post »

Older Posts »