Home

日記
Auth-TypeKey (15:47)Edit

ひらたさんがPHP版TypeKeyクライアントクラスAuth-TypeKeyを公開してくださったので、早速テスト。いろいろ適当だけど、細かいことは気にするな。

$result = verify();
if ($result) {
echo 'Name: '.$_GET['name']."\n";
echo 'Nickname: '.$_GET['nick']."\n";
echo 'Email: '.$_GET['email']."\n";
}
function verify() {
require_once("Auth/TypeKey.php");
$tk = new Auth_TypeKey(array('version' => '1.1', 'token' => [TypeKey TOKEN文字列]));
$result = $tk->verifyTypeKey($_GET);
if (PEAR::isError($result)) {
die($result->getMessage());
} else {
return TRUE;
}
}

PHPでの大規模整数演算はGMP関数を使うのか。BCMath関数とどっちが一般的なんだろうなー。計算内容からはどちらを使ってもいけそうだけど。この辺の関数って全然使ったことない(インストールオプションとして指定したこともない。今回初めてwith-gmpなんてつけてみた)からさっぱりわからない。GMP関数はWindows環境で使えないっぽいことがマニュアルに書かれているから、BCMathで書けるならばそっちを使うバージョンも作っておいた方がいいのかな。without PEARでBCMathなバージョンもそのうち書いてみよう。

ひとまず適当な掲示板かWikiあたりに組み込んだバージョンを作ってみたいんだけど、今そんなことをやっているばやいじゃないかもしれないかもしれない。あと、Rubyに移植してtDiaryでTypeKeyを使うバージョンもつけてみたいかもしれないかもしれない。

Published At2004-10-04 00:00Updated At2004-10-04 00:00

日記
編集にTypeKeyログインが必要なPukiWiki (01:41)Edit

まじめに改造するのがつらいんで必要最低限のみ。まずlib/typekey.incというファイル名で、

function check_typekey() {
define('TYPEKEY_SESSION_NAME', 'TYPEKEY_SESSION_NAME');
define('TYPEKEY_TOKEN', 'TYPEKEY_TOKEN');
define('TYPEKEY_URL', 'https://www.typekey.com/t/typekey/login');
session_start();
if (!isset($_SESSION[TYPEKEY_SESSION_NAME])) {
if (isset($_GET['name'])) {
require_once("Auth/TypeKey.php");
$tk = new Auth_TypeKey(array('version' => '1.1', 'token' => TYPEKEY_TOKEN));
$tk_result = $tk->verifyTypeKey($_GET);
if (PEAR::isError($tk_result)) {
die($tk_result->getMessage());
} else {
$_SESSION[TYPEKEY_SESSION_NAME] = array(
'name' => $_GET['name'],
'nick' => $_GET['nick'],
'mail' => $_GET['email']
);
return TRUE;
}
}
} else {
return TRUE;
}
$tk_url = TYPEKEY_URL.'?&v=1.1&need_email=1&t='.TYPEKEY_TOKEN.
'&_return='.urlencode('http://'.$_SERVER['HTTP_HOST'].
$_SERVER['REQUEST_URI'].'&');
header('Location: '.$tk_url);
die;
}

 もちろんTokenの設定は自分のものに。あと、自サイトのURLもちゃんとTypeKeyサーバーで登録しておく必要がある。そしてplugin/edit.inc.phpの関数の頭に、

function plugin_edit_action()
{
require_once LIB_DIR.'typekey.inc';
check_typekey();
global $vars, $_title_edit;

 なんて感じのコードを追加。リダイレクトURLを生成しているところの、$_SERVER['HTTP_HOST']は嘘かも。要は元のURLに戻りたいんだけど、どうやるんだっけ? $_SERVER['SERVER_NAME']は取れなかったんだよな。

 ともかく上記のようにすると、編集リンクをクリックしたらTypeKeyのログイン画面に飛ぶ。ログインに成功すると元のページに戻ってきて、DSAのverifyをして、問題なければセッションにユーザー情報を保存する。以降セッションにユーザー情報が入っていればいちいちリダイレクトしない。

 ユーザー情報はその後全然使っていないけど、本当は編集した人の情報として記録した方がいいんだろう。でもPukiWikiのコードを追う気力がないんでパス。

Published At2004-10-05 00:00Updated At2004-10-05 00:00

日記
TypeKey SNS (18:22)Edit

今日は隙間を見てTypeKeyを使ったSNS風味のシステムを設計してみたりしているんだけど、これ結構楽しそうだな。SNSというよりは、各人がそれぞれ公開できる情報を持ち寄って、それらの情報を人間をキーにフィルタリングして表示するイメージ。

最初の登録は誰でも(TypeKeyアカウントを作れば)できて、さらに友達登録も誰に対してでも行える。友達登録は公開・非公開の2種類あり、非公開な友達は他人からは見えない。友達というよりは、「私はこの人(の動向)に興味があります」的なイメージ。友達の友達的な関係は、両思いだった場合のみたどっていくようにするといいのかな。その辺はまだノーアイディア。

日記のRSSを登録して、アイテムを時系列でソートして、友達のものだけ選択して表示するってのは、単なるRSSアンテナだな。昔wikistmaniaでやっていたものをまた作るのか。OPMLを出力してbloglinesあたりに突っ込んでくれというのもありかも。

コミュニティ相当のものは、WikiLikeみたいに編集可能なドキュメント+スレッド掲示板で構成。ドキュメントも掲示板もコミュニティ単位で何個でも作れる。スレッドで議論 or だべって、何らかの成果物的なものができたらドキュメントにまとめるイメージ。それぞれのread/write権限はpublic、user、member、adminで設定可能。コミュニティのadminは作成者がまずadminになって、以降admin権限を持つ者が他のadminを追加する。

ついでにMM/本のメモのDBを使ってレビュー機能も作るか。あのDBにわかりやすいUIをかぶせるだけですみそうだ。というか、MMで本(Amazon)以外のものを扱えるように拡張しちゃえば、そのデータを人間をキーにフィルタリングするだけで、結構いろいろ使えるものができると思うんだけど。

というかもともとMMはそういう目的で作っているんだけど、本読み管理DBとして使えるようになった段階で満足しちゃって、そこから先に進む気力がなくなった。SNSと絡めればちょっとはやる気が出るかな。現在でも人をキーにした集計とかできるけど、あれを友人の範囲までをキーにした集計にすれば、SNSっぽいデータがでてくるよね。ちなみに本以外のデータってのは、たとえばニュースクリッピングとかテレビ番組やイベントの情報とか、そういうのね。

あと、できればほかのサーバーで情報を利用するためのAPIも用意しておきたいな。あるコミュニティ参加者一覧を取得するAPIとか、あるユーザーの友達情報を取得するAPIとか。それがあれば、外部のWikiとかに情報が派生したときに、権限DBだけをAPI経由で取得して使うことができる。

3日くらい暇があって、サーバーに余力があればだいたい動くものはできそうだけど、そんな余裕はないだろうな。

Published At2004-10-05 00:00Updated At2004-10-05 00:00

日記
鈴鹿GP金曜フリー走行 (15:09)Edit

なんか雨(台風)でろくに走れてないらしいな。今日のセッションは一応タイムを出しただけ程度で終わったみたいだ。しかも明日にかけてさらに雨が強くなるんで、下手したら予選は中止で、今日のタイムでグリッドが決まるかも。予報によれば日曜には晴れるらしいけど、なんかぐだぐだな展開になりそうだな。そのぐだぐだな展開がBARに有利に働くといいなー。

日本GPグリッドは前戦の結果で?

という説もあるんだとか。こっちの方がBARにはいいな。

Japanese GP in doubt?

こっちの説だと、明日予選できない場合は日曜午前に予選になるとか。ところで台風22号って「Tropical Storm Number 22」なの?

Published At2004-10-08 00:00Updated At2004-10-08 00:00

日記
似た話題の日プラグイン (17:18)Edit

Estraierを使った似た話題の日プラグインをrubyにポーティングしたら公開するとか言っておきつつも、いろいろ後回しにしすぎてやる機会がないんで、PHP版(estrelate.php)をそのまま公開しておきます。ライセンスはGPLってことで。やっていることは単純なんで、rubyがわかる人ならば一呼吸で移植できることでしょう。ただ、tDiary側の設定に依存してキャッシュファイルのパスとかが変わってくるんで、その辺りの整合性をきちんと作るのは結構面倒かも。ほかのプラグインの@confとかを参照して動く必要が出てくるし。というか、tDiaryとestraierの連携に関しても、まだ正式なやり方ってのは存在していないっけ?

#!/usr/bin/php
<?php
//estxviewのパス。maxを変えると検索個数が変わる
define('ESTXVIEW', '/usr/local/bin/estxview -nk -nt -max 5');
//転置インデックスのパス
define('INDEX', '/home/tdiary/html/casket');
//転置インデックスに含まれるHTMLのパス
define('DOCROOTPATH', '/home/tdiary/var/data/cache/html');
//tDiaryのURL
define('TDIARY_URL', 'http://tdiary.ishinao.net/');
main();
function main() {
global $argv;
$targetdate = $argv[1]; //'YYYYMMDD'形式で対象の日付を指定
$docId = getDocId($targetdate);
if (!isset($docId)) {return;}
$dates = getRelatedDates($docId);
array_shift($dates);    //最初の1個は$targetdate自体が返るので除去
$result = '似た話題の日: '."\n";
foreach ($dates as $date) {
$result .= '<a href="'.TDIARY_URL.date('Ymd', $date).'.html">'.date('Y/m/d', $date).'</a>'."\n";
}
echo $result;
}
//document idに似た文書(日付)を取得
function getRelatedDates($docId) {
$cmd = ESTXVIEW.' -rel '.INDEX.' '.$docId;
$result = shell_exec($cmd);
if (preg_match_all('/<uri>.*\/([0-9]{4}\/[0-9]{4})\.html<\/uri>/', $result, $matches)) {
$files = $matches[1];
$dates = array();
foreach ($files as $file) {
list($year, $md) = split('/', $file);
$dates[] = strtotime($year.'/'.substr($md, 0, 2).'/'.substr($md, 2));
}
return $dates;
}
return NULL;
}
//HTMLファイル名からdocument idを取得
function getDocId($date) {
$datestr = date('Y/md', strtotime($date));
$cmd = ESTXVIEW.' -uri '.INDEX.' '.DOCROOTPATH.'/'.$datestr.'.html';
$result = shell_exec($cmd);
if (preg_match('/<document id="([0-9]+)">/', $result, $matches)) {
$docId = $matches[1];
return $docId;
}
return NULL;
}
?>

ちなみにこのスクリプトを呼び出すestrelate.rbの方では、

add_body_enter_proc do |date|
`/home/tdiary/bin/estrelate.php #{date.strftime('%Y%m%d')}`
end

ってしてるだけね。

Published At2004-10-08 00:00Updated At2004-10-08 00:00

日記
鈴鹿GP予選 (11:05)Edit

いやー、今回の予選は面白かったなー。BARはスタートさえ失敗しなければいいところに行きそう。今回はマクラーレン、ルノー、モントーヤ、バリチェロあたりが下位に沈んでくれたんで、敵が少ない。できればスタートでウェバーはかわしておきたいところ。ウェバーの後ろについちゃうとシューマッハーズに逃げられて、その後ろが数珠繋ぎになるかも。それにしてもミハエルはなぜあんなに速いんですか? ブリヂストンはまだ最終セクターで滑ると思っていたのに、ミハエルのアタックだけは最終セクターもロスがないんだもんなー。

Published At2004-10-10 00:00Updated At2004-10-10 00:00

日記
鈴鹿GP決勝 (16:05)Edit

Published At2004-10-10 00:00Updated At2004-10-10 00:00

日記
ベスト・オブ・常習者サイト 2004 (15:15)Edit

ジャンルの金賞をもらったらしい。どういう賞なのかよくわかってないけど、ひとまずありがとうございます。新サーバーに移行して以来、週に1、2回気がつくと死んでいるんで、ほどほどにご利用ください。時間と根性があったら、そのうちバグ修正を兼ねたリニューアルをしますよ。MM、TypeKeySNSあたりとくっつけちゃうかも。

Published At2004-10-12 00:00Updated At2004-10-12 00:00

日記
空いてる空港 (05:23)Edit

image 早くつきすぎたよ。5:40にならないと何もできないのね。

Published At2004-10-16 00:00Updated At2004-10-16 00:00

日記
携帯電話初のフルブラウザ搭載端末「W21CA」 (14:56)Edit

まあこんなに待てなかっただろうから、W21Sを買ったことを後悔してはいないけど、USBクレードル、AF付き200万画素カメラ、画面がさらに広くなった、miniSDカード、メディアプレイヤーとしての能力が増した、ってあたりはすごくウラマヤシイ。フルブラウザは定額外ならほとんど使わないだろうけど、緊急回避用にあって困る機能じゃないし。

W21Sを買って7ヶ月経ったあたりが一つの山になるな。でもW21Sにもかなり満足しているから、できればさらにもう1世代先のCASIO端末まで待ちたいところ。

Published At2004-10-16 00:00Updated At2004-10-16 00:00