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

下記のUserAgentが追加されています。
- DoCoMo/2.0 SH05B
- KDDI-SN3N
- SoftBank/1.0/840SH
最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。
購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。
よろしくお願いいたします。
端末情報ファイルが更新されました。
Version: 20100205

下記のUserAgentが追加されています。
最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。
購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。
よろしくお願いいたします。
端末情報ファイルが更新されました。
Version: 20100203

下記のUserAgentが追加されています。
最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。
購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。
よろしくお願いいたします。
端末情報ファイルが更新されました。
Version: 20100125

下記のUserAgentが追加されています。
最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。
購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。
よろしくお願いいたします。
GlossmanZでは以下のことができます。
一時的にデータを保存したいシーンは多々あります。
分離されたWebアプリ間でのセッション情報の共有もその一つ。
プラットフォームの違うWebアプリ間での情報共有もその一つ。
重いDBアクセス結果のキャッシュもその一つ。
様々なシーンに役立つメモリーサーバー「GlossmanZ」。
満を持してのリリースです。
さぁGlossmanZで高速Webサイトの実現を。
# memcached によく似ていますが少し違います。
# GlossmanZ ではアクセスユーザーごとに記憶域が管理されます。
# ユーザーごとに管理された記憶域はGC(ガベージコレクタ)により定期的に削除されます。
###################################
# クライアントライブラリも随時リリース予定!
###################################
IIS のベンチマークを採ってみたところ、あまりの速さに驚いています。
HTTP.sys のなせる技でしょうか。
Apacheと比較してみたくなりました。
何か機会があったらApacheとの比較をしてみたいと思います。
memcached の slab allocation みたいなことがやりたいです。
で、new とか malloc をいじってたら、
いい感じのダンプ関数が出来たので公開。
ふつうは、C/C++初心者のとき先輩に作らされたりするみたい
だけど、実際にやってみると結構むずかしいもんですね。
Cのprintfとか使わずにC++の標準関数だけで攻めてるとこが拘り。
// 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) <<<<
明けましておめでとうございます。
さて、先日2010年1月1日に ZOZOTOWN が冬のセールを開始しました。

このセール、実はただものではありません。
暮れのゴールデンディ、ゴールデンタイムに地上波TV CMを打ち、
CM内で「元旦12時より!」と時間を告知する、Web史上初とも思える
大胆不敵なセールだったのです。
実際のところセール開始直後にはサイトが重くなり、
購入者の方には不便を与えてしまいましたが、
史上初の試みとしては成功であったと感じております。
が、今後このようなラッシュにどう対応するか、
来場者の方々に迷惑をかけずにうまく対応できないか、
もっとよい方法をさぐって行きたいと考えております。
ソフトウェアにできること。
皆様、本年もよろしくお願い致します。
皆様、今年はたいへんお世話になりました。
おかげさまで Nmageman for Apache もリリースすることができました。
来年もぐいぐいとリリースして参ります。
今後ともよろしくお願いいたします。
—
yrm.2009/12/31
端末情報ファイルが更新されました。
Version: 20091218

下記のUserAgentが追加されています。
最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。
購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。
よろしくお願いいたします。
端末情報ファイルが更新されました。
Version: 20091211

下記のUserAgentが追加されています。
最新の端末情報ファイルはぜひサポートにご加入いただいて
ご利用いただきますようお願いいたします。
購読専用サポートコース「Subscription」も新しくご用意。
どうぞご利用ください。
よろしくお願いいたします。