2008/09/25


オリジナルはperl版でGTKを使ったUIになっています。
memcachedclient-perl
これを、python(pygtk)、ruby(ruby-gnome2)、lua(lua-gtk)、C(GTK)、java(Swing)に移植してみた。
オリジナルから小さいコードなので、簡単なものですが...
興味のある方は、この辺を覗いて下さい。
Posted at by



2008/09/19


手順だけ。
cd C:\temp\
wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/Memcached-libmemcached-0.2101.tar.gz
zcat Memcached-libmemcached-0.2101.tar.gz | tar xv
cd Memcached-libmemcached-0.2101
mkdir src_inst\include\libmemcached
mkdir src_inst\lib
svn co http://svn.coderepos.org/share/lang/c/libmemcached-win32/libmemcached-latest
cd libmemcached-latest\libmemcached
mingw32-make -f makefile.w32
cd ..\..
copy libmemcached-latest\libmemcached\*.h src_inst\include\libmemcached\.
copy libmemcached-latest\libmemcached\memcached.a src_inst\lib\.
copy src_inst\include\libmemcached\*.h src\libmemcached\libmemcached\.
perl Makefile.PL
set OPT="INC=-IC:\temp\Memcached-libmemcached-0.2101\src_inst\include" "LMCD_BUILT_LIB=C:\temp\Memcached-libmemcached-0.2101\src_inst\lib\memcached.a" "LDFROM=$(OBJECT) C:\temp\Memcached-libmemcached-0.2101\src_inst\lib\memcached.a"
nmake %OPT%
あとは libmemcached-latest\libmemcached\memcached.dll
をパスの通る場所に置いておけばWindowsで use strict;
use Perl6::Say;
use Memcached::libmemcached qw(
    memcached_create
    memcached_server_add
    memcached_set
    memcached_get
);

my $key = "foo";
my $value = "bar";
my $memc = memcached_create();
memcached_server_add($memc, '127.0.0.1');
memcached_set($memc, $key, $value);
say memcached_get($memc, $key);
こんなソースが通る様になります。Cache::Memcached::libmemcachedも動きます。
さらに言うなら、rubyのmemcachedも動きました。 require 'memcached'
$cache = Memcached.new('127.0.0.1:11211')
$cache.set('foo', 'bar')
print $cache.get('foo')
こちらはCOMPATIBILITYファイルを弄ったり、最新バージョンで無くなったWHEELな処理をカットしないといけませんが...
さらにさらにpython-libmemcachedも動きます。
import cmemcached

c = cmemcached.Client(['127.0.0.1:11211'])
c.set("foo", "bar")
print c.get("hoge")
こちらもcmemcached.pyxでWHEELな処理をカットしないといけませんが...
とりあえず、動くって事です。
ちなみにオフィシャルの反応はまだなし...
Posted at by



2008/09/18


色々やってたら、出来た。これで が動く様になるのではないか!
地味な作業だったけど、以外と効果は大きいかも。今日は時間無いので明日以降にソース綺麗にしてオフィシャルにパッチを送ってみようかと思ってます。
ちなみにUNIXドメインソケットなmemcachedは動きません。(win32ですからね...)

mingw32でコンパイルすると、こんなソースがコンパイル実行出来ました。
#include <winsock2.h>
#include <memcached.h>
#include <stdio.h>

int main(void) {
    memcached_return rc;
    memcached_st *memc;
    char* value;
    int value_length = 0;
    int flags = 0;

    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) {
        return -1;
    }
    memc = memcached_create(NULL);;
    rc = memcached_server_add(memc, "127.0.0.1", 11211);
    printf("server add: %s\n", memcached_strerror(memc, rc));

    rc = memcached_set(memc, "test", 4, "example", 8, 0, 0);
    printf("set: %s\n", memcached_strerror(memc, rc));

    value = memcached_get(memc, "hoge", 4, &value_length, &flags, &rc);
    printf("get: %s\n", memcached_strerror(memc, rc));
    printf("test = %s\n", value);

    memcached_free(memc);
    return 0;
}
汚いソースを見たいという方はこの辺を...
Posted at by