yrm
端末情報ファイル Updated!!

2010 年 2 月 8 日

端末情報ファイルが更新されました。
  Version: 20100205
  

下記のUserAgentが追加されています。

  • DoCoMo/2.0 SH05B
  • KDDI-SN3N
  • SoftBank/1.0/840SH

最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。

購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。

よろしくお願いいたします。

yrm
端末情報ファイル Updated!!

2010 年 2 月 4 日

端末情報ファイルが更新されました。
  Version: 20100203
  

下記のUserAgentが追加されています。

  • KDDI-SH3F

最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。

購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。

よろしくお願いいたします。

yrm
端末情報ファイル Updated!!

2010 年 1 月 28 日

端末情報ファイルが更新されました。
  Version: 20100125
  

下記のUserAgentが追加されています。

  • DoCoMo/2.0 N03B

最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。

購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。

よろしくお願いいたします。

yrm
GlossmanZ リリース!!!

2010 年 1 月 26 日

GlossmanZ がリリースされました!
  

GlossmanZでは以下のことができます。

  • 負荷分散の目的などで物理的に分離されたWebアプリ間でのセッション情報共有。
  • 異なるプラットフォームで作成されたWebアプリ間でのセッション情報共有。
  • データベースからSelectされたレコードセットのキャッシュ。
  • その他一時的に記憶したいものは何でも記憶可能。

一時的にデータを保存したいシーンは多々あります。
分離されたWebアプリ間でのセッション情報の共有もその一つ。
プラットフォームの違うWebアプリ間での情報共有もその一つ。
重いDBアクセス結果のキャッシュもその一つ。

様々なシーンに役立つメモリーサーバー「GlossmanZ」。
満を持してのリリースです。

さぁGlossmanZで高速Webサイトの実現を。

# memcached によく似ていますが少し違います。
# GlossmanZ ではアクセスユーザーごとに記憶域が管理されます。
# ユーザーごとに管理された記憶域はGC(ガベージコレクタ)により定期的に削除されます。

###################################
# クライアントライブラリも随時リリース予定!
###################################

yrm
IIS が速い

2010 年 1 月 21 日

IIS のベンチマークを採ってみたところ、あまりの速さに驚いています。
HTTP.sys のなせる技でしょうか。

Apacheと比較してみたくなりました。
何か機会があったらApacheとの比較をしてみたいと思います。

mitsuwo
C++でメモリダンプ

2010 年 1 月 20 日

memcached の slab allocation みたいなことがやりたいです。
で、new とか malloc をいじってたら、
いい感じのダンプ関数が出来たので公開。

ふつうは、C/C++初心者のとき先輩に作らされたりするみたい
だけど、実際にやってみると結構むずかしいもんですね。

Cのprintfとか使わずにC++の標準関数だけで攻めてるとこが拘り。

#include <iostream>
#include <iomanip>

// int version
void memdumpi(void* vptr, size_t len)
{
    std::cout << ">>>> memdump(int) ---------------------------" << std::endl;

    unsigned int* cptr = reinterpret_cast<unsigned int*>( vptr );
    for (size_t i=0; i<(len/sizeof(int)); ++i )
    {
        if ( i%4 == 0 )
        {
            if ( i != 0 ) std::cout << std::endl;
            std::cout << std::hex << std::setw(8) << std::setfill('0');
            std::cout << reinterpret_cast<int>(&cptr[i]) << ": ";
        }
        std::cout << std::hex << std::setw(8) << std::setfill('0');
        std::cout << static_cast<int>(cptr[i]) << " " ;

    }
    std::cout << std::endl;

    std::cout << "--------------------------- memdump(int) <<<<" << std::endl;
}

// char version
void memdumpc(void* vptr, size_t len)
{
    std::cout << ">>>> memdump(char) --------------" << std::endl;

    unsigned char* cptr = reinterpret_cast<unsigned char*>( vptr );
    for (size_t i=0; i<len; ++i )
    {
        if ( i%8 == 0 )
        {
            if ( i != 0 ) std::cout << std::endl;
            std::cout << std::hex << std::setw(8) << std::setfill('0');
            std::cout << reinterpret_cast<int>(&cptr[i]) << ": ";
        }
        std::cout << std::hex << std::setw(2) << std::setfill('0');
        std::cout << static_cast<int>(cptr[i]) << " " ;

    }
    std::cout << std::endl;

    std::cout << "-------------- memdump(char) <<<<" << std::endl;
}

こんな風に使う。

struct struct1
{
    std::string name;
    int id;
};

int main()
{

    int* ptr1 = reinterpret_cast<int*>( malloc( sizeof(int)*10 ) );
    memdumpc( ptr1, sizeof(int)*10 );

    memset( ptr1, 0, sizeof(int)*10 );
    memdumpc( ptr1, sizeof(int)*10 );

    for( size_t i=0; i<10; ++i )
    {
        if( i < 5 )
            ptr1[i] = 1010101;
        else
            ptr1[i] = 2020202;
    }
    memdumpc( ptr1, sizeof(int)*10 );

    free(ptr1);

    char* ptr2 = reinterpret_cast<char*>( malloc( sizeof(char)*10 ) );
    memdumpc( ptr2, sizeof(char)*10 );

    memset( ptr2, 0, sizeof(char)*10 );
    memdumpc( ptr2, sizeof(char)*10 );

    for( size_t i=0; i<10; ++i )
    {
        if ( i < 5 )
            ptr2[i] = 'Y';
        else
            ptr2[i] = 'X';
    }
    memdumpc( ptr2, sizeof(char)*10 );

    free(ptr2);

    struct1* ptr3 = reinterpret_cast<struct1*>( malloc( sizeof(struct1)*3 ) );
    memdumpi( ptr3, sizeof(struct1)*3 );

    memset( ptr3, 0, sizeof(struct1)*3 );
    memdumpi( ptr3, sizeof(struct1)*3 );

    struct1* ptr3_1 = new(&ptr3[0]) struct1;
    struct1* ptr3_2 = new(&ptr3[1]) struct1;
    struct1* ptr3_3 = new(&ptr3[2]) struct1;
    memdumpi( ptr3, sizeof(struct1)*3 );

    ptr3_1->id = 10;
    ptr3_1->name = "あいうえお";
    ptr3_2->id = 200;
    ptr3_2->name = "かきくけこ";
    ptr3_3->id = 3000;
    ptr3_3->name = "さしすせそ";
    memdumpi( ptr3, sizeof(struct1)*3 );

    ptr3_1->~struct1();
    ptr3_2->~struct1();
    ptr3_3->~struct1();
    free(ptr3);

    return 0;
}

こんな風に表示される。

>>>> memdump(char) --------------
003849c8: cd cd cd cd cd cd cd cd
003849d0: cd cd cd cd cd cd cd cd
003849d8: cd cd cd cd cd cd cd cd
003849e0: cd cd cd cd cd cd cd cd
003849e8: cd cd cd cd cd cd cd cd
-------------- memdump(char) <<<<
>>>> memdump(char) --------------
003849c8: 00 00 00 00 00 00 00 00
003849d0: 00 00 00 00 00 00 00 00
003849d8: 00 00 00 00 00 00 00 00
003849e0: 00 00 00 00 00 00 00 00
003849e8: 00 00 00 00 00 00 00 00
-------------- memdump(char) <<<<
>>>> memdump(char) --------------
003849c8: b5 69 0f 00 b5 69 0f 00
003849d0: b5 69 0f 00 b5 69 0f 00
003849d8: b5 69 0f 00 6a d3 1e 00
003849e0: 6a d3 1e 00 6a d3 1e 00
003849e8: 6a d3 1e 00 6a d3 1e 00
-------------- memdump(char) <<<<
>>>> memdump(char) --------------
003849c8: cd cd cd cd cd cd cd cd
003849d0: cd cd
-------------- memdump(char) <<<<
>>>> memdump(char) --------------
003849c8: 00 00 00 00 00 00 00 00
003849d0: 00 00
-------------- memdump(char) <<<<
>>>> memdump(char) --------------
003849c8: 59 59 59 59 59 58 58 58
003849d0: 58 58
-------------- memdump(char) <<<<
>>>> memdump(int) ---------------------------
00384d38: cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd
00384d48: cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd
00384d58: cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd
00384d68: cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd
00384d78: cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd
00384d88: cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd
00384d98: cdcdcdcd cdcdcdcd cdcdcdcd
--------------------------- memdump(int) <<<<
>>>> memdump(int) ---------------------------
00384d38: 00000000 00000000 00000000 00000000
00384d48: 00000000 00000000 00000000 00000000
00384d58: 00000000 00000000 00000000 00000000
00384d68: 00000000 00000000 00000000 00000000
00384d78: 00000000 00000000 00000000 00000000
00384d88: 00000000 00000000 00000000 00000000
00384d98: 00000000 00000000 00000000
--------------------------- memdump(int) <<<<
>>>> memdump(int) ---------------------------
00384d38: 00000000 00000000 00000000 00000000
00384d48: 00000000 00000000 00000000 0000000f
00384d58: 00000000 00000000 00000000 00000000
00384d68: 00000000 00000000 00000000 00000000
00384d78: 0000000f 00000000 00000000 00000000
00384d88: 00000000 00000000 00000000 00000000
00384d98: 00000000 0000000f 00000000
--------------------------- memdump(int) <<<<
>>>> memdump(int) ---------------------------
00384d38: 00000000 00000000 a282a082 a682a482
00384d48: 0000a882 00000000 0000000a 0000000f
00384d58: 0000000a 00000000 00000000 ab82a982
00384d68: af82ad82 0000b182 00000000 0000000a
00384d78: 0000000f 000000c8 00000000 00000000
00384d88: b582b382 b982b782 0000bb82 00000000
00384d98: 0000000a 0000000f 00000bb8
--------------------------- memdump(int) <<<<

yrm
Web業界初!?

2010 年 1 月 4 日

明けましておめでとうございます。

さて、先日2010年1月1日に ZOZOTOWN が冬のセールを開始しました。
zozo_20100101
このセール、実はただものではありません。

暮れのゴールデンディ、ゴールデンタイムに地上波TV CMを打ち、
CM内で「元旦12時より!」と時間を告知する、Web史上初とも思える
大胆不敵なセールだったのです。

実際のところセール開始直後にはサイトが重くなり、
購入者の方には不便を与えてしまいましたが、
史上初の試みとしては成功であったと感じております。

が、今後このようなラッシュにどう対応するか、
来場者の方々に迷惑をかけずにうまく対応できないか、
もっとよい方法をさぐって行きたいと考えております。

ソフトウェアにできること。

皆様、本年もよろしくお願い致します。

yrm
今年もありがとうございました

2009 年 12 月 31 日

皆様、今年はたいへんお世話になりました。
おかげさまで Nmageman for Apache もリリースすることができました。

来年もぐいぐいとリリースして参ります。
今後ともよろしくお願いいたします。


yrm.2009/12/31

yrm
端末情報ファイル Updated!!

2009 年 12 月 21 日

端末情報ファイルが更新されました。
  Version: 20091218
  

下記のUserAgentが追加されています。

  • DoCoMo/2.0 L02B
  • DoCoMo/2.0 N01B
  • SoftBank/1.0/940N
  • SoftBank/1.0/940P

最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。

購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。

よろしくお願いいたします。

yrm
端末情報ファイル Updated!!

2009 年 12 月 14 日

端末情報ファイルが更新されました。
  Version: 20091211
  

下記のUserAgentが追加されています。

  • DoCoMo/2.0 N02B
  • SoftBank/1.0/840P

最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。

購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。

よろしくお願いいたします。