インデックス
- tkudo (http://blogs.sun.com/tkudo/)
- =nat/(+blog) (http://www.sakimura.org/)
- たけまる (http://teahut.sakura.ne.jp)
- ZIGOROu (http://d.hatena.ne.jp/ZIGOROu/)
- shinichitomita (http://d.hatena.ne.jp/shinichitomita/)
- blog.s14u (http://www.s14u.info/mt/)
- Rakuto (http://rakuto.blogspot.com/)
最新記事一覧
| 発行日時 | パイプ名 | 見出し |
|---|---|---|
| 2008-7-1 11:33 |
Rakuto
|
Manipulate Erlang binary term format in C/C++ with ei library
Erlang includes ei library for handling Erlang binary term format. This entry introduces how to use this library.1. Pass the one string to C driver from Erlang.It's pretty simple case, and pass one string argument to C driver from Erlang. It should be passed port_control/3 or erlang:port_control/3 after all arguments should be encoded as binary. The "index" variable are used for pointing position in the buffer.% echo.erl-define(DRV_ECHO, 1).echo(Str) -> control(?DRV_ECHO, Str).control(Cmd, Data) -> [{port, Port}| _] = ets:lookup(echo_table, port), Bin = term_to_binary(Data), % XXX: All arguments will be encoded as binary term format. Res = port_control(Port, Cmd, Bin), binary_to_term(Res).% echo_drv.c#define DRV_ECHO 1static int control(ErlDrvData drv_data, unsigned int command, char *buf, int len, char **buf, int rlen) { int index, type, size, arity ,ver; char *arg1; switch(command) { case DRV_ECHO: // It must call ei_decode_version at the beginning when argument is Erlang binary term format. // All ei_xxx functions return 0 if it will be success, else return -1 ei_decode_version(buf, &index, &ver); // Value of 'index' will become 1. // Get size of string in order to allocate buffer for argument ei_get_type(buf, &index, &type, &size); // value of 'type' equal ERL_STRING_EXT // Allocate memory for buffer arg1 = new char[size + 1]; // Extra bite is required for NULL string. /* do something */ }}Type of Erlang termIt can obtain type of Erlang term with result of ei_get_type function. All value of types are defined in ei.h.#define ERL_SMALL_INTEGER_EXT 'a'#define ERL_INTEGER_EXT 'b'#define ERL_FLOAT_EXT 'c'#define ERL_ATOM_EXT 'd'#define ERL_REFERENCE_EXT 'e'#define ERL_NEW_REFERENCE_EXT 'r'#define ERL_PORT_EXT 'f'#define ERL_PID_EXT 'g'#define ERL_SMALL_TUPLE_EXT 'h'#define ERL_LARGE_TUPLE_EXT 'i'#define ERL_NIL_EXT 'j'#define ERL_STRING_EXT 'k'#define ERL_LIST_EXT 'l'#define ERL_BINARY_EXT 'm'#define ERL_SMALL_BIG_EXT 'n'#define ERL_LARGE_BIG_EXT 'o'#define ERL_NEW_FUN_EXT 'p'#define ERL_FUN_EXT 'u'#define ERL_NEW_CACHE 'N' /* c nodes don't know these two */#define ERL_CACHED_ATOM 'C'2. Pass the ListIt should call ei_decode_list_header function when parse the list term. It must be called when parse the list term.% echo_list.erl-define(DRV_ECHO_LIST, 1).echo(List) when is_list(List) -> control(?DRV_ECHO_LIST, List).control(Cmd, Data) -> [{port, Port}| _] = ets:lookup(echo_list_table, port), Bin = term_to_binary(Data), % XXX: All arguments will be encoded as binary term format. Res = port_control(Port, Cmd, Str), binary_to_term(Res).% echo_drv.c#define DRV_ECHO 1static int control(ErlDrvData drv_data, unsigned int command, char *buf, int len, char **buf, int rlen) { int index, type, size, arity ,ver; char *arg1; switch(command) { case DRV_ECHO_LIST: // It must call ei_decode_version at the beginning when argument is Erlang binary term format. // All ei_xxx functions return 0 if it will be success, else return -1 ei_decode_version(buf, &index, &ver); // Value of 'index' will become 1. // Get size of string in order to allocate buffer for argument ei_get_type(buf, &index, &type, &size); // Check the type if(type == ERL_LIST_EXT) { // It must be called at the begginning when hanle the list term. ei_decode_list_header(buf, &index, &arity); printf("number of elements: %d\n", arity); // Check the type of first element in the list ei_get_type(buf, &index, &type, &size); swithc(type) { case ERL_SMALL_INTEGER_EXT: case ERL_INTEGER_EXT: // do something break; case ERL_STRING_EXT: // do something break; } } }}
|
| 2008-6-30 2:08 |
Rakuto
|
Tutorial for how to create Erlang linked-in driver.
Erlang provides mechanism to communicate between Erlang and other programs written by C/C++ or other. This entry introduce how to create simple linked-in driver. Create shared library and Erlang interface to use Erlang's linked-in driver.Goal: To create HAVAL bindings for Erlang.HAVAL is fast cryptographic hash algorithm is invented by Yuliang Zheng, Josef Pieprzyk, and Jennifer Seberry in 1992. This library is pretty simple, so this is good choice for this tutorial.Step 0: Filesconfig.h (Generated by configure script in HAVAL package)haval.hhaval.chaval.erlhaval_drv.ccMakefilehaval.c and haval.h are included haval-1.1.tar.gz (C source code).You can checkout these sample sources with Git. see haval_erlang.% git://github.com/rakuto/erlang_haval.git erlang_havalStep 1: Create Erlang's interfaceErlang provides port mechanism in order to communicate between Erlang and other loaded shared object. See also Writing an Erlang Port using OTP Principles-module(haval).-author('Rakuto Furutani <xri://=rakuto>').-define(DRV_INFO, 1).-define(DRV_HAVAL_STRING, 2).-define(DRV_HAVAL_FILE, 3).-export([start/0, stop/0]).-export([info/0, haval_string/1, haval_file/1]).-ifdef(debug).-export([test/0, test/1]).-endif.%%%% Public interface%%start() -> start("haval_drv"), ok.start(SharedLib) -> case erl_ddll:load_driver(".", SharedLib) of ok -> ok; {error, already_loaded} -> ok; _ -> exit({error, could_not_load_driver}) end, register_lib(SharedLib).stop() -> [{port, Port}| _] = ets:lookup(haval_table, port), Port ! {close, self()}, ok.%% TODO: Implement this function return the information for moduleinfo() -> ok.%% Caluculate a value of HAVAL from stringhaval_string(Str) ->binary_to_term(control(?DRV_HAVAL_STRING, Str)).%% Caluculate a value of HAVAL from filehaval_file(FileName) -> binary_to_term(control(?DRV_HAVAL_FILE, FileName)).-ifdef(debug).test() -> haval:start(), Str = "I love Erlang.", FileName = "haval.erl", Hash1 = haval:haval_string(Str), Hash2 = haval:haval_file(FileName), io:format("HAVAL(~p) = ~p ~n", [Str, Hash1]), io:format("HAVAL(~p) = ~p ~n", [FileName, Hash2]), haval:stop(), halt().test([Str|_]) -> haval:start(), Hash = haval:haval_string(Str), io:format("HAVAL(~p) = ~p ~n", [Str, Hash]), haval:stop(), halt().-endif.%%%% Internal functions%%register_lib(SharedLib) -> Port = open_port({spawn, SharedLib}, []), Tab = ets:new(haval_table, [set, protected, named_table]), ets:insert(Tab, {port, Port}).control(Cmd, Data) -> [{port, Port}| _] = ets:lookup(haval_table, port), erlang:port_control(Port, Cmd, Data).Step 2: Create C/C++ shared libraryShared library writted by C++ is loaded by Erlang interface when call erl_ddll::load_driver/2./** * HAVAL (cryptographic hash function) bindings for Erlang * * @author Rakuto Furutani <xri://=rakuto> * @date 2008/06/28 */#include <stdio.h>#include <string.h>#include <stdarg.h>#include <new>#include "ei.h"#include "erl_driver.h"#include "erl_interface.h"extern "C" {// Define constant for haval.h#define PASS 3#define NUMBER_OF_BLOCKS 5000#define FPTLEN 256#ifndef LITTLE_ENDIAN#define LITTLE_ENDIAN 1#endif#include "haval.h"}// Functions are provided by this driver#define DRV_INFO 1#define DRV_HAVAL_STRING 2 #define DRV_HAVAL_FILE 3 /* Driver Interface Declarations */static ErlDrvData start_haval_driver(ErlDrvPort port, char *command);static void stop_haval_driver(ErlDrvData drv_data);static int control(ErlDrvData drv_data, unsigned int command, char *buf, int len, char **rbuf, int rlen);static void haval_to_hex(unsigned char*, char*);static ErlDrvBinary* ei_x_to_new_binary(const ei_x_buff*);/* Driver Entry */static ErlDrvEntry haval_driver_entry = { NULL, start_haval_driver, stop_haval_driver, NULL, NULL, NULL, "haval_drv", NULL, NULL, control, NULL, NULL};typedef struct _drv_data { ErlDrvPort port;} drv_data_t;/* DRIVER INTERFACE */static ErlDrvData start_haval_driver(ErlDrvPort port, char *command){ drv_data_t *data; data = (drv_data_t*) driver_alloc(sizeof(drv_data_t)); data->port = port; set_port_control_flags(port, PORT_CONTROL_FLAG_BINARY); return (ErlDrvData) data;}static void stop_haval_driver(ErlDrvData drv_data){ driver_free((char*) drv_data);}static int control(ErlDrvData drv_data, unsigned int command, char *buf, int len, char **rbuf, int rlen){ int ret = -1; char hex[(FPTLEN >> 3) << 1]; unsigned char fingerprint[FPTLEN >> 3]; char *arg1; ei_x_buff x_buff; try { // argument arg1 = new char[len + 1]; strncpy(arg1, buf, len); strcat(arg1, "ï¿0"); ei_x_new_with_version(&x_buff); switch(command) { case DRV_INFO: ei_x_encode_string(&x_buff, "info"); ret = sizeof("info") * sizeof(char); break; case DRV_HAVAL_STRING: haval_string(arg1, fingerprint); haval_to_hex(&fingerprint[0], &hex[0]); ret = sizeof(hex); ei_x_encode_string(&x_buff, hex); break; case DRV_HAVAL_FILE: if(!haval_file(arg1, fingerprint)) { haval_to_hex(&fingerprint[0], &hex[0]); ret = sizeof(hex); ei_x_encode_string(&x_buff, hex); } else { erl_err_sys("haval_file"); } break; } if(ret > 0) *rbuf = reinterpret_cast<char*>(ei_x_to_new_binary(&x_buff)); ei_x_free(&x_buff); } catch(std::bad_alloc) { erl_err_sys("can not allocate memory"); } return ret;}static void haval_to_hex(unsigned char *fingerprint, char *hex){ for(int i=0; i < FPTLEN >> 3; ++i) { sprintf(&hex[i << 1], "%02X", fingerprint[i]); }}// Init the driverextern "C" DRIVER_INIT(haval_drv){ return &haval_driver_entry;}// Utilitiesstatic ErlDrvBinary* ei_x_to_new_binary(const ei_x_buff *x_buff){ ErlDrvBinary *bin = driver_alloc_binary(x_buff->index); if(bin != NULL) { memcpy(bin->orig_bytes, x_buff->buff, x_buff->index); } return bin;}Step 3: Compile all sourcesCreate Makefile for build.FYI: If you want to build linked-in driveron Mac OS, see Compile Erlang linked-in driver on Mac OSX (Darwin).PHONY: clean.SUFFIXES: .o .c .cc .erl .beamOS= ${shell uname}CC=gccCXX=g++CXXFLAGS=-Wall -g# ErlangERL_INCLUDE = -I/usr/local/lib/erlang/usr/includeERL_LIBS = -L/usr/local/lib/erlang/usr/lib \ -lertsEI_INCLUDE = -I/usr/local/lib/erlang/lib/erl_interface-3.5.6/includeEI_LIBS = -L/usr/local/lib/erlang/lib/erl_interface-3.5.6/lib \ -lei \ -lerl_interfaceTARGET_LIB = haval_drv.soifeq ($(OS), Darwin) EXTRA_OPTIONS = -fno-common -bundle -undefined suppress -flat_namespaceendifALL: $(TARGET_LIB) haval.beam.erl.beam: erlc -W -Ddebug $<.c.o: $(CC) $(CFLAGS) -c $<.cc.o: $(CXX) $(CXXFLAGS) $(ERL_INCLUDE) $(EI_INCLUDE) -c $<haval_drv.so: haval.o haval_drv.o $(CXX) -o $@ $^ $(ERL_LIBS) $(EI_LIBS) $(EXTRA_OPTIONS) -fpic -O2clean: rm -f *.beam *.o *.soStep 4: Run and test% erl -noshell -run haval testHAVAL("I love Erlang.") = "3AECEDF5133ED147C704A25C2CCA9A994FBB984FBCB22C1A523F31963E418498"HAVAL("haval.erl") = "E006098555DFF788E73C7A263615DF60CC82396B1BCE7AEB5FB7050C376F2B03"
|
| 2008-6-28 17:31 |
Rakuto
|
Compile Erlang linked-in driver on Mac OSX (Darwin)
In order to compile the Erlang linked-in driver on Darwin, we must specify some options when it will be linked. If you don't specify these options, you might see errors is as follows:
% gcc -o my_drv.dymlib my_drv.c -dynamiclib -fpic /usr/bin/ld: Undefined symbols: _driver_alloc _driver_free _driver_output That's invalid, so it must specify some options below in order to create the shared object. % gcc -o my_drv.so my_drv.c -bundle -flat_namespace -udefined suppress see README in source code of Erlang/OTP for more details. |
| 2008-6-28 17:31 |
Rakuto
|
Compile Erlang linked-in driver on Mac OSX (Darwin)
In order to compile the Erlang linked-in driver on Darwin, we must specify some options when it will be linked. If you don't specify these options, you might see errors is as follows:
% gcc -o my_drv.dymlib my_drv.c -dynamiclib -fpic /usr/bin/ld: Undefined symbols: _driver_alloc _driver_free _driver_output That's invalid, so it must specify some options below in order to create the shared object. % gcc -o my_drv.so my_drv.c -bundle -flat_namespace -udefined suppress see README in source code of Erlang/OTP for more details. |
| 2008-6-27 14:51 |
Rakuto
|
Asynchronous driver in Erlang using driver_async
Erlang provides some mechanism is to communicate other language, this can be used for to reuse module, speed things up (Erlang is ten times as slow as slow than C), to access OS resource and so on. The below mechanism are provided.
Pipe Drivers The "pipe drivers" enables bi-directional communication. The external process can be implemented in C or any language, and it can use erl_interface and ei library in order to manipulate data of Erlang as ETERM. Benefit * Frexible, it can use some types data. * Any language Demerit * Communication overhead Linked-in Drivers A driver in Erlang is a library written in C/C++, that is linked to the Erlang emulator and called from erlang. A driver can be dynamically loaded, as a shared library (known as a DLL on windows), or statically loaded, linked with the emulator when it is compiled and linked. Benefit: * Faster than "Pipe Drivers" Demerit: * Not frexible, to pass the complex data between C/C++ and Erlang is difficult. Asynchonous Linked-in Driver The "Linked-in Drivers" is faster than "Pipe Drivers", but it can not scale with a lot of process, since it run synchronously. So If you'd like to take advantage of platforms with multiple CPUs, then you must run some Erlang virtual machine since it run on single thread. It sounds like great!, but we should care the some problems, multi-thread problem and so on. Resources: 6.5 Sample asynchronous driver 6.6 An asynchronous driver using driver_async Next, I'll write an entry about how to create asynchronous driver. |
| 2008-6-26 23:59 |
たけまる
|
OpenSocial の XRDS-Simple が AtomPub に与える影響
二週間ほど前に えーじさん から AtomPub のことで相談を受けて,あとで
ブログに書きますと言ったきりほったらかしてしまいました.Erlang 関係 でバタバタしてたもんですみません >< そういえば,数ヶ月前に "AtomPub のマニアックな話題について書いてい きます" と言ったあと,ほとんど書いてない気もする…. 3月〜4月に書いたエントリに関連した標準化動向もあったことなので, AtomPub についていくつか書いていこうと思います.Rails2 についても ちょっとかくつもりです. というわけで,久々に AtomPub の話題です.お題は OpenSocial の XRDS-Simple です. ■ サービス文書の記述力不足を解決する XRDS-Simple 以前に,「AtomPub のサービス文書は記述力に乏しいので,仕様変更があ るかも」ということを書きました. たけまる / AtomPub - サービス文書の記述力 サービス文書の問題は,静的な URI のコレクションしか記述できないこと です.OpenSocial では,これを解決するために XRDS-Simple + URI Template を使うことで落ち着いたそうです. サービス文書にURI Template を埋め込むとか,OpenSearch を拡張すると いうような手もあったと思います.しかし,XRDS は OpenID に使われるよ うになったりして,サービスディスカバリのデファクトになるかもしれな いので,その動きに同調したのでしょう.OpenSocial に限らず,AtomPub で XRDS が使われる使われる例は増えるのではないでしょうか. XRDS-Simple の内容については,えーじさんの翻訳が素晴らしいです. Tender Surrender OpenSocial/RESTful API Specification ■ XRDS-Simple を使うと AtomPub 標準に違反するのか? えーじさんから受けた相談というのは,「これって AtomPub 標準に違反 してるんじゃないの?」というものでした. 結論からいうと,「典型的な AtomPub サービスではないけど,違反という わけでもなさそう」というところです. AtomPub 仕様では,コレクションを見つけるための方法としてサービス文 書が導入されました.しかし,かならずサービス文書から処理を開始しな ければならないかというと,そういうわけではありません.何らかの方法 でコレクションの URI を知ることができれば,サービス文書をスキップし てもかまわないです.たとえば,オフラインでコレクションの URI を受け 取って,そのコレクションに直接アクセスしてもいいわけです. そう考えると,XRDS-Simple を使ってダメな理由はありません.というわ けで,「RFC に書かれているような典型的な方法ではないけど,違反でも ない」ということになります. ■ 関連する標準化動向 Google でこのへんの仕事をしている Joe Gregorio は,multipart という 拡張仕様の標準化作業を始めるときに,「他の拡張仕様も時間があれば標 準化するよ」と言っています. Official Google Data APIs Blog: AtomPub Multipart Media Creation Internet-Draft ひょっとしたら XRDS-Simple も AtomPub 拡張として正式に認められる日 がくるかもしれません.とはいえ,新仕様というより Best Practice の範 疇になるので,なさそうな気がしますが. なお,えーじさんのエントリにも紹介されている features 拡張 (サービ ス文書そのものの拡張仕様) ですが,さんざん揉めたあげく,起案者の James Snell が「疲れたからもうやめる」というようなことを言い出した ので,日の目を見ることはないでしょう. ■ クライアントへの影響 最後に,クライアントへの影響について簡単に書いておきます.世の中に は,サービス文書ありきで実装されているクライアントがいくつかありま す.たとえば,Windows Live Writer はサービス文書の URI を設定する 必要があります.それ以外にも,少なからず影響がありそうです. ちなみに,Perl の Atompub::Client モジュールは,サービス文書を取得 するプロセスをスキップできるので,OpenSocial でも使えると思います (認証方式次第ってとこはあるけど). |
| 2008-6-26 17:09 |
=nat/(+blog)
|
怖すぎる...
<a href=\"http://japan.cnet.com/blog/email/2008/06/25/entry_27003107/\">驚いた!こんな機能がJoomla CMSにあった!</a>という記事。なんでも、gmail のアドレスと、パスワードをJoomlaのサイトに入力すると、それでログインできるという話し。(下図参照)
<img src=\"http://japan.cnet.com/u/014/125/3b3a2fcd486233b3.jpg\" /> <font size=\"7\" color=\"red\">怖すぎる!</font> これって、<font size=\"5\">フィッシングそのもの</font>でしょうが...。これをOpenIDと言われてしまうと...。 ちなみに:OpenIDでは、利用サイト側でIDとパスワードを一緒に入れることはありません。よい子のみんなは気をつけましょう! http://japan.cnet.com/blog/email/2008/06/25/entry_27003107/ http://www.goyat.jp/goyat-news/1-latest-news/82-openid-gmail-address.html |
| 2008-6-26 17:09 |
=nat/(+blog)
|
怖すぎる...
<a href=\"http://japan.cnet.com/blog/email/2008/06/25/entry_27003107/\">驚いた!こんな機能がJoomla CMSにあった!</a>という記事。なんでも、gmail のアドレスと、パスワードをJoomlaのサイトに入力すると、それでログインできるという話し。(下図参照)
<img src=\"http://japan.cnet.com/u/014/125/3b3a2fcd486233b3.jpg\" /> <font size=\"7\" color=\"red\">怖すぎる!</font> これって、<font size=\"5\">フィッシングそのもの</a>でしょうが...。これをOpenIDと言われてしまうと...。 ちなみに:OpenIDでは、利用サイト側でIDとパスワードを一緒に入れることはありません。よい子のみんなは気をつけましょう! http://japan.cnet.com/blog/email/2008/06/25/entry_27003107/ http://www.goyat.jp/goyat-news/1-latest-news/82-openid-gmail-address.html |
| 2008-6-24 12:33 |
shinichitomita
|
[identity]idcon#2
日曜にあった、identity conference #2 について。ブログ書くの遅い。 =nat さんXRIの話と、それにまつわるOASIS、W3Cのやりとりなど。 JALのOpenID、および属性交換のデモ。いや、デモって訳じゃなく実はもう本サービスなんだが、ここまでくるとそのまんまLibertyだ、とおもったのは、僕だけではないはず。ただ=natさん曰く「Libertyの出てくる前にもおれは同じデモしてたよ」だそう。 danjo (id:lopnor) さんApache のmodでOpenID使えるようにする、Basic認証の.htaccess的に簡単に。日曜プログラマがさくっとOpenID対応できる。 実際のOpenID実装はmod_perl経由でperlプログラムにわたってたわけですが。 openid login画面は通常のhtml、あるいは後ろのアプリケーションサーバ側に任せる仕様にしたらいいとおもった。日曜プログラマでも僕はperlかきたくない、という人はきっと多いと思う。 はてなポイント認可(ただしエイプリルフールネタ)も可能!? 認証=あんただれ、認可=あんただめ という韻を踏んで覚えましょう。 id:ZIGOROu さんAttribute Exchangeネタ。使える実装がねーよ、という話。スキーマもまとまらない。 こんなAX、いったい誰が唱えているの?というと、sxipのDick Hardtが推している、らしい。Sxipperの場合はFirefox拡張なのでプロファイルのデータストアはユーザ側です。CardSpace的。 NTT伊藤さんLiberty ID-WSF。LibertyとSAMLはごっちゃになるけど、ID-WSFはLibertyの中のひとつで、SAML(≒ID-FF)より上位の話。 IdP(アイデンティティプロバイダ)とか、WSP(Webサービスプロバイダ)とか、DS(ディスカバリサービス)とか、いろいろロールを分けて説明している。やってることは多分そんなにわかりにくいはなしではないが、フローにすると何かしら煩雑に見える。 正直、実際に使われるパターンはIdPもDSもWSPもみんなひとつのサービスから提供されるに違いないと思うのです。そうしたらほぼOpenIDのAX、あるいはOAuthにも相当する。 個人的に、ディスカバリを挟むとそれは確かに粗結合度が増すけど、そもそも同一のインターフェースでサービスが複数あるという前提にたってる訳で、もしサービス自体がユニークでもともと密結合にならざるを得ないならディスカバリのフェーズは逆に冗長ととらえられてしまう。おれはFlickrの写真が欲しいんだよ、というときに、Flickrじゃない写真サービスでもできますよ、という提案は、そもそも写真ウェブサービスのインターフェースが固定されていない現状ではあまり説得力も無い。 あとは、ID-WSFのいい事例があるとおもしろい。SAMLレベルならばGoogleもSalesforceもやっているし事例もあって最近おもしろくなってるけど、どちらともID-WSFまではやっていないし、正直彼らもそこに行こうとしてるようには到底思えない。欧州圏で事例の多いモバイルも日本では事情が違う。 飲み会印象に残ったのは、=natさんがいっていた、「Dick Hardtもだけど、うちらの年代の人は公開鍵暗号好きなんだよね」という言葉(ただし=PKIではない)。今は本当にそれに依らずにやっているサービスっておおいわけだけど、やっぱり諸問題を考えるとその力を利用したほうがいいんじゃない?という意味かな。 あと、だれかがプチRESTful Web Services 本 DISな話をしていた。大変参考になりました(タレコミ)。 次回現役じゃないのにやることになった。正直ネタが無い。しんどい。OpenID conferenceじゃなくってidentity conferenceということは、エンタープライズ色をばりばりに出して内部統制とか言い出してもいいのですか?(言わないけど)。まあdigital identityってなると結構広いですよね。それこそ machine identity & DRMも周辺に入ってくるし、前々職ではむしろそういう話の方が多かった時期もあった。FeliCaでの入退室管理とあわせた話とかね。まあそれなりにおもしろいですよ。tkudoさんのこのシナリオが実現される世界を望みます。でも現場でもない人間が知ったかでしゃべるのはむずかしいなあ。 というか、2次会でいきなり遭遇した僕の知人の参加表明は、たぶん飲み会のノリor主旨をあまり理解してない故だと思うのですが。。。まあ今度飲むので聞いてみます。 |
| 2008-6-24 0:54 |
tkudo
|
第 2 回アイデンティティ・カンファレンス + 第 3 回アイデンティティ飲み会
昨日は表記の集まりに参加してきた. 幹事の水野さん, そして発表者のみなさん, どうもありがとうございました.
そして飲み会は二次会まで楽しすぎた! ワインうまかった! |


