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

2010 年 3 月 8 日

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

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

  • SoftBank/1.0/943SH

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

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

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

yrm
GlossmanZCOM リリース!!!

2010 年 3 月 2 日

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

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

  • GlossmanZサーバーのクライアントに。
  • Recordset を手軽にキャッシュ。
  • GlossmanZサーバーへの接続を冗長化。
  • 複数のGlossmanZサーバーへの分散記憶。
  • GlossmanZサーバーへの接続をプーリング。

様々なシーンに役立つメモリーサーバー「GlossmanZ」。
それに手軽にかつ高速にアクセスできる「GlossmanZCOM」。

最高のペアで高速Webサイトの実現を。

yrm
GlossmanZ VersionUP to 1.4.1.0 !!!

2010 年 3 月 2 日

GlossmanZがバージョンアップしました。
  

[更新履歴]

  • メモリー使用量設定の追加
  • STAT機能追加
  • 値の個別タイムアウト機能追加
  • nopコマンド追加
  • <Cookie Distribute/>のデフォルトを true から false に変更

今後ともNSWareをよろしくお願い致します。

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

2010 年 3 月 1 日

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

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

  • DoCoMo/2.0 P02B
  • SoftBank/1.0/840Pe
  • SoftBank/1.0/841P

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

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

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

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

2010 年 2 月 25 日

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

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

  • KDDI-KC3V
  • KDDI-TS3T

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

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

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

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

2010 年 2 月 22 日

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

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

  • DoCoMo/2.0 P03B
  • DoCoMo/2.0 SH03B

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

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

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

mitsuwo
Win32 で簡易暗号化

2010 年 2 月 15 日

今流行りの twitter のクライアントが作りたい。

ユーザーのIDとパスワードをどこに置くか?
OAuthていうのを使うといいらしいけど、なんかややこしそうだし
セキュリティホールがあるってのも気になります。

やっぱレジストリに置こうかな。
ってことで、とりあえず可逆暗号書いてみました。

いろいろ調べたけど、結構簡単に使えそうなAPIがあったので
助かりました。

Windowsが関数の中で LocalAlloc する変数があるので忘れずに
LocalFree。恐ろしや。

#pragma comment(lib, "crypt32.lib")

#include <cstddef>
#include <string>
#include <windows.h>
#include <Wincrypt.h>

bool encrypt(const std::string& key, const std::string& plain, void* crypt, size_t* crypt_len )
{
    DATA_BLOB key_bolb;
    key_bolb.pbData = (BYTE*)key.c_str();
    key_bolb.cbData = key.length()+1;

    DATA_BLOB plain_bolb;
    plain_bolb.pbData = (BYTE*)plain.c_str();
    plain_bolb.cbData = plain.length()+1;

    DATA_BLOB crypt_bolb; // must LocalFree

    BOOL result
     = CryptProtectData(
        &plain_bolb,
        L"",
        &key_bolb,
        NULL,
        NULL,
        0,
        &crypt_bolb);

    if(result)
    {
        *crypt_len = (size_t)crypt_bolb.cbData;
        if(crypt != NULL )
            ::memcpy(crypt, crypt_bolb.pbData, *crypt_len);
    }
    LocalFree( crypt_bolb.pbData );

    if(result)
        return true;
    else
        return false;
}

bool decrypt(const std::string& key, const void* crypt, const size_t crypt_len, std::string& plain )
{
    DATA_BLOB key_bolb;
    key_bolb.pbData = (BYTE*)key.c_str();
    key_bolb.cbData = key.length()+1;

    DATA_BLOB crypt_bolb;
    crypt_bolb.pbData = reinterpret_cast<BYTE*>(const_cast<void*>(crypt));
    crypt_bolb.cbData = crypt_len;

    DATA_BLOB plain_bolb; // must LocalFree
    LPWSTR* desc = NULL;  // must LocalFree

    BOOL result
    = CryptUnprotectData(
        &crypt_bolb,
        desc,
        &key_bolb,
        NULL,
        NULL,
        0,
        &plain_bolb);

    if(result)
    {
        plain = (char*)plain_bolb.pbData;
    }
    LocalFree( plain_bolb.pbData );
    LocalFree( desc );

    if(result)
        return true;
    else
        return false;
}

使い方。

void main()
{
    std::string plain = "あいうえおかきくけこさしすせそ";
    std::string key   = "1234"; //鍵。暗号化と復号で同じものを使う

    size_t out_len; //まずは暗号化後の長さを得る
    if(::encrypt(key, plain, NULL, &out_len))
        std::cout << "encrypt len ok" << std::endl;
    else
        std::cout << "encrypt len ng" << std::endl;

    char* out = new char[out_len]; //暗号化
    if(::encrypt(key, plain, out, &out_len))
        std::cout << "encrypt ok" << std::endl;
    else
        std::cout << "encrypt ng" << std::endl;

    //outに暗号化後のデータが入ってるので、どっかに保存したりする
    memdumpc(out, out_len);

    std::string check; //復号
    if(::decrypt(key, out, out_len, check))
        std::cout << "decrypt ok" << std::endl;
    else
        std::cout << "decrypt ng" << std::endl;

    delete [] out;

    std::cout << check << std::endl;

    return;

}

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

2010 年 2 月 15 日

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

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

  • SoftBank/1.0/941P
  • SoftBank/1.0/942SH

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

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

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

mitsuwo
C++ で Slab Allocation

2010 年 2 月 13 日

C++でメモリダンプでやりたいといってた slab allocation。

書いたどー。
http://na-s.jp/download.ashx?dl=/nslab_pp/nslab_pp_016.zip

一般に、malloc や free を繰り返していると、ヒープで管理される
メモリブロックの単位が次第に小さくなっていき、断片化してきます。
とくに、確保される領域の大きさがバラバラだったり、
確保から解放までの時間がバラバラだったりすると、
断片化が顕著になるといわれています。

ある程度断片化したヒープからは、空き領域があっても
まとまった領域を確保することができなくなってしまうので、
プロセスの再起動が必要になってしまいます。

slab allocation は上記のような問題に対する解決策です。

プロセス起動時にまとめて malloc した巨大な領域(slab)を、
あらかじめ決めておいた単位に分けて貸し出し、返却された
領域を再利用していくというもの。

ここに詳しい説明があります。
http://gihyo.jp/dev/feature/01/memcached/0002

【使い方】

malloc と free を置き換える場合。

#include <iostream>
#include "nslab_pp/slab_manager.hpp"

using namespace nslab_pp;

size_t SLAB_UNITS[] = {4, 8, 100, 200 }; //貸し出し単位
const size_t SLAB_SIZE = 100 * 1024 * 1024; //mallocサイズ

int main()
{
    ::sconf(
      SLAB_SIZE, SLAB_UNITS, sizeof(SLAB_UNITS)/sizeof(size_t) );

    char* cptr = (char*)::salloc(100); //動的メモリ確保

    // 何かする。

    ::sfree(cptr)

    return 0;
}

オブジェクトとして使いたい場合。

#include <iostream>
#include "nslab_pp/slab_manager.hpp"

using namespace nslab_pp;

size_t SLAB_UNITS[] = {4, 8, 100, 200 }; //貸し出し単位
const size_t SLAB_SIZE = 100 * 1024 * 1024; //mallocサイズ

slab_manager g_slab_man(
  SLAB_SIZE, SLAB_UNITS, sizeof(SLAB_UNITS)/sizeof(size_t) );

int main()
{
    char* cptr = (char*)g_slab_man.allocate(100); //動的メモリ確保

    // 何かする。

    g_slab_man.release(cptr)

    return 0;
}

【コンパイル方法】

■A. Windowsの場合

0. Windows SDK と boost(thread関係) をインストール・構築しておく

1. src\Makefile.win の先頭2行を自分の環境に合わせる

2. Visual Studio Command Prompt を起動

3. src に cd

4. 自分の環境に適したコマンドを発行

>nmake -f Makefile.win BUILD=release ARCH=x86
>nmake -f Makefile.win BUILD=release ARCH=x64

dist に .lib ファイルなどが生成されます。

■B. Linuxの場合

0. g++ と boost(thread関係) をインストール・構築しておく

>sudo yum install gcc-c++
>sudo apt-get install g++

1. src に cd

2. make コマンドを発行

>make BUILD=release

dist に .a ファイルなどが生成されます。

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

2010 年 2 月 9 日

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

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

  • KDDI-KC3U

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

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

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