■2005-03-03
* [雑感] 計算尺
計算尺復刻へ 滋賀県職員がネットで呼びかけ
中学の頃、祖母の持っている計算尺を見せてもらったことがありました。足し算で掛け算ができる(log(x)+log(y)=log(xy))のに感動した覚えがあります。対数方眼紙使って自作したりとか。
関連リンク:片面型デジタル計算尺 スライドS 会社のPCに入れて仕事に使いましょう。
* [CGI] FSWiki、日本語に馴染む書式など
FOAF認証Wikiですが、FOAF Support Wikiと名づけると略しても相変わらずFSWikiなのでよい感じです。
日本語Wiki 確かに「・」で箇条書きになるのは全く理にかなっているなあ(でもMS Wordの勝手に箇条書きにする機能は大嫌いなので真っ先にoffにしますが)。以前勤め先でFreeStyleWikiを導入したとき、結局最後まで使ってくれなかった人は、書式を覚えるのが面倒くさいからというのが理由でした。果たして日本語だと少しは楽になるだろうかとFreeStyleWikiのformatプラグインを使ってこさえてみました。FSWikiのサイドメニュー下のプルダウンで書式を選択できます(その後でヘルプをみればその書式のヘルプが出ます)。でも書くことがないのでまだ使っていません(泣)
「日本語として自然に見えるブロック指定」……ブロック前後を空行にして文章の最後に(引用:xxx)とかならどうかしら。
* [メモ][雑感] ハンセン
WORLD PEACE NOW 3.19。でも行くかどうか微妙。三年連続で雪(1 | 2)だったらやだなあ。そこで時宜にかなった(?)関連メモ。
流行語
「『反戦』と言うこと自体が『考えていないこと』だ」という前提が紛れ込んでいるような気がするのです。(中略)さらに難しいのは一方で(中略)反戦派に異様に敵愾心を燃やす人のなかには、考えることへのコンプレックスが、考えることへの憎悪に転化したものがあるのではないか」
流行語2
「反・反戦の方にこそ、「すべての『反戦』をひっくるめて語っている」のではないか、という違和感」
「反対することに反対する」人への疑問、というお話。まあ、なんですね、とりえあず理由があって反対するなら(当然「反対することに反対」することも含めて)耳を傾ければ良いのにねぇ。
「『あいつらは何も考えてない。デモに行って騒いでるだけのバカだ』というわけです」(流行語)……すいません、「デモに行く」ということに関していえば私は物見遊山で(もちろん、表現活動の場であり、連帯感高揚の場であり、そして年輩の方の同窓会の場でもあると思っています)。
■2005-03-06
* [メモ] Ajax習作
Ajax(えいじゃっくす)なるものが巷で流行っているらしいので、私も試みてみようと郵便番号を入れると住所が出るテストを(XMLHttpRequestしか使ってないのでAjaxじゃないですが)。 submitボタンを押さなくてもパっと表示されるところが愉快痛快。
* [Perl] Math::Pari::PP4Crypt
ソースだけでほったらかしていたPurePerlなMath::Pariについての簡単な説明ページをつくりました。ちゃんとCrypt::DSAのtest suiteが通りますが、isprimeが大変遅いので、イライラすることうけあい(たぶんオリジナルより20倍ぐらい遅いです)。Authen::TypeKeyなどから使う分には耐えられるスピードかも。
素数判定に使っているのは実際のpariと同じくミラー・ラビンテストで、どこかのコードをPerlに移植したのですが、何処を参照したか失念しました。ごめんなさい。
■2005-03-10
* [CGI] WikiRPC for FSWiki
FreeStyleWikiの世代バックアップを利用して、getPageVersionやgetPageHTMLVersionなどの実装をすることにしました(FOAF Support Wikiにて稼動中)。ついでに各ページの編集者の履歴を記録するauthorプラグインも制作中。
* [今月のAcme] Bundle::Everything
今年に入って一度もやってないけど、そしてやる気もないと書いたけどなんとなく突発的に再開(でもやっぱりなんか無駄だよねぇ……)。Bundle::Everything 。Bundleカテゴリは通常のモジュールではなく、モジュール群を自動でインストールするためのリストです。そしてBundle::Everythingは、その名の通り、CPANモジュールを全部インストールする素敵な代物。その無謀っぷりが良いですね。Acmeじゃないけど、Acme扱いということで。
"Should this be Bundle::Acme::Everything?"ってドキュメントにも書いてあるので次回はAcme::Everythingをご紹介(これで二月分にするの)。
■2005-03-12
* [メモ][Perl] Sajax
Ajaxのツールキットにて、Sajaxなるものがあるとのことなので早速試してみました。 サーバ側で行ないたい処理を呼び出すためのjavascriptの雛型を吐いてくれるのですが、いまいち使いどころがわからないというか、ありがたみがないというか。
で、Perl版のSajax.pmは、オリジナルのPHPのコードをPerlにズズズっともってきているので、いささか耐えがたい使用感です(全部rs_hogehoge()
という関数名で書きづらいやら、いちいちモジュール内のファイルレキシカル変数を初期化して使わなければならないとか)。なので、OOPとして使うように若干改造。この改造Sajax.pmを継承したクラス内部で必要な処理を登録して、Template toolkitと一緒に使えば、”いやーん”なCGIスクリプトを書かなくてすむかな?
うーん、SajaxというツールはもともとPHPで書かれているわけで、HTMLに処理用のPHPコードを埋め込んで、それに合わせたjavascriptをお手軽に生成する、というのが肝なのでしょう。ですから、Perlで使うにはあまり意味がないっぽいです。mod_perl + Template toolkitなら、一応使いどころがあるかもしれません。でも他のurlに出張るような処理をやることになったら、結局使えないよねえ。
追記:げっ、BSDライセンスじゃなかったの? まずいかしら→大丈夫だったようで。
Perl の実装をのぞいてみた。なんつーかアレなんで、いろいろとアレだなぁと思った…。んで、わかりやすく作りかえようにも、ライセンスがオープンじゃないというか不明? というか、とにかくなんだかわからないので、手を出さないことに…。(SAJAX や JSON-RPC あるいは JavaScript ライブラリ)
_ けんたろ [FAQ ページをみたら、"It is open source and licensed under the BSD ..]
■2005-03-13
* [Perl] JSON
SAJAX や JSON-RPC あるいは JavaScript ライブラリでJSON-RPCというのを知りました。色々あるんですね。JSON関連のモジュールがCPANにないようなのでとりあえずてきとうに自作。
use JSON; use strict; my $obj = { id => ["foo", "bar", { aa => 'bb'}], hoge => 'boge' }; my $js = objToJson($obj); # {"id":["foo","bar",{"aa":"bb"}],"hoge":"boge"} $obj = jsonToObj($js); # 復元 # あるいは $json = new JSON; $json->jsonToObj({num => JSON::Number(1.23)}); # ↑通常、数値やundefなどは自動変換ですが、 # 明示的に指定可能(他にtrue,false,null)
てな感じで。あとは誰かがJSON-RPC用のモジュールをつくってくれれば。パース部分はParse::RecDescentで実装してるので大層遅いです。プリコンパイルすればちょっとは速くなるかも(jsolaitのを移植すれば良いかな)。
結局実験用にJSONRPCモジュールをこさえてしまいました(誰かちゃんとしたのつくって!)。ソースぐだぐだな上にCGIとしてしか使えませんけど。
# アプリケーション package MyApp; sub echo{ # 第1引数を返すだけ my $server = shift; my ($arg) = @_; return $arg; } # メインのCGI use JSONRPC::Transport::HTTP; use MyApp; # XMLRPC::Liteチックで粋でしょ? JSONRPC::Transport::HTTP::CGI ->disptch('MyApp')->handle();
実際稼働中の与えられたテキストを返すechoメソッドを実装したJSON-RPCサーバが http://www.donzoko.net/cgi-bin/jsonrpc/jsonrpc.cgi にあります。
* [雑感] 思いでのマガジン
タイムスリップグリコ 思いでのマガジンの「花とゆめ」(1985年)を目当てにここ暫く買っていたのですが、やっと出ました。POPEYEとOliveと鉄道ファンだらけになりましたが。巻頭が「Intolerance(以下略)」ってのがすごい。あの作品はある意味川原節全開。星野架名とか本橋馨子とかが滅茶苦茶懐かしい。私が読んでいたのは90年代でしたが、結構絵柄が違ってるものなんだなあ。
* [メモ] ネットでTRPG
ネットでのTRPGを考えてみたのですが、チャットでTRPGってのはまぁ良くあるので、折角だからもう少し大規模にやってみたい。共通の都市なり国家を設け、その中に存在するNPCや冒険の舞台、ハウスルールを共有して、GMがシナリオに必要なものをレンタルして適当にアレンジし、冒険が終わったらその影響を経歴やマップに書き込み、次のGMがそれをレンタルしてシナリオを考える(昔のRPG本を読むその2:サロン・ド・よしだ分館)
うまくまとまったら非常に面白そう。課題としては、共通のフォーマットが必要だとか、管理者がえらく大変そうとか。でも何かできそうな気がしますね。先だってのNPCのFOAFとか使ったり。共通に使うフォーマットとして何かないかな? 例えばXML for RPGとか。 と思ったらありました。探せばあるものですね(って探してませんが)。RPG in XML ……ちょっとやるせない気持ちになりました。
話は変わりますが、『クロちゃんの千夜一夜』は続いて欲しかったなあ。
■2005-03-16
* [メモ] JSON-RPCとjsolait
さて、とりあえずJSON.pmとJSONRPC.pmをこさえたので、PerlでJSON-RPCのCGIサーバがつくれるようになりました。しかしせっかくサーバがあっても動作を確かめるためにクライアントが必要です。ここでJSON-RPCのクライアントをお手軽に構築するのにjsolaitが便利なようです。っていうか、このjsolait というのは大変多機能。でもjsolaitについて解説している日本語のページがあまりないので、ちょっとメモ。
"JavaScript O Lait"は、再利用可能なモジュールおよびコンポーネントのライブラリと、より単純なクラスおよびモジュール管理機能を提供することで、JavaScriptの開発を楽にする代物で、ライセンスはLGPL。特徴は:
- 他の言語でお馴染みのOOP機能をJavascriptで行うためのフレームワークを提供
- Stringオブジェクトにsprintfみたいな機能を追加 "you got %d mail(s)".format(10);
- 各種モジュール
- codecs - base64、urlなど
- crypto - rc4ぽいやつ
- jsonrpc - JSON-RPC!
- lang - JSON <=> Javascriptオブジェクト変換
- stringformat - 上のsprintfみたいなメソッド
- urllib - http post, get等の諸機能
- xml - xml関連
- xmlrpc - XML-RPC
- 多ブラウザとの互換性
IEでもArray.shiftとかArray.pushが使えるようになったり、Fuctionオブジェクトにapplyやcallメソッドが追加されたりとか。
例えば
<script src="init.js"></script> <script src="lib/urllib.js"></script> // init.jsは必須 // lib/urllib.jsでhttp接続関連 <input type="text" id="textForm"> <script> <!-- var text = 'Hello World.'; var jsonrpc = importModule("jsonrpc"); var server = new jsonrpc.ServiceProxy("xxx", ["echo"]); var callback = function(result,err){ if(result) textForm.value = result; if(err) alert(err); }; // 結果の処理 // 引数はサーバの戻り値、エラー try{ server.echo(text, callback); // async } catch(e){ reportException(e); } /--> </script>
echoメソッドを呼び出すときに最後の引数にFunctionオブジェクトを渡すと非同期に。これだけでできちゃうから楽でございます。
* [メモ] jsolaitの使い方
主にtutorialから。
■基本
とにかくまず最初に<script type="text/javascript" href="./jsolait/init.js"></script>する。パスは各自の環境に合わせて。
■モジュールを使う
モジュールの利用にはimportModule( name )
。返値はモジュールオブジェクト。ブラウザによっては(例えばIE)ソースファイルが自動的に読みこまれる。一度importModuleで呼び出したモジュールを再度importModuleで呼び出してもファイルは読み込まれない。自動読み出し機能の使えないブラウザでは<script href="xxxxx"></script>で対応。
■モジュールの作成
Module
を使う。引数は3つ:モジュール名、バージョン、関数オブジェクトModuleScope(mod)
。関数オブジェクトはモジュール生成時に呼び出され、一度生成されると、jolaitに登録され、import可能となる。引数mod
はこのモジュール自身のオブジェクト。コンストラクタ内でvar宣言した変数はpivateとなり、modにセットしたプロパティはpublicとなる。そしてvarせずに宣言した変数はglobalなオブジェクトとなる。jsolaitライブラリは、globalオブジェクトとしてjsolait、Class、 Module、importModule、ReportExceptionなどを定義。
■クラスの作成と継承
Class
を使う。引数として関数オブジェクトClassScope(publ)
を受け取る。この関数オブジェクトはクラスのpublicメンバを設定するオブジェクトpublを受け取る。継承するクラスをつくるには、第一引数に親クラスオブジェクト、二番目に関数オブジェクト(ClassScope)を渡す。この場合の関数オブジェクトはpublの次に親クラスオブジェクトsuprをうけとる。クラスオブジェクトのインスタンスを生成するときに初期化処理としてinitメソッドが呼ばれる。
* [メモ] jsolaitの使い方2
てな具合で文章を書いても訳分からないので如何にありがちな例。
// creature.js内 // モジュール生成 // modはモジュール自身 // mod.propはpublic // var宣言したものはprivate // クラスの作成 // publはクラス自身 // publ.propはpublic // var宣言したものはprivate // initは初期化メソッド // (インスタンス生成時に呼び出される) Module("creature", '1.0', function(mod){ mod.Animal = Class(function(publ){ publ.init = function(name,sex){ this.name = name; this.sex = sex; } }); // 継承 Classの第一に親クラスを渡す // suprは親クラスオブジェクト // supr(this).methodで // 親クラスのメソッドを呼び出す mod.Dog = Class(mod.Animal, function(publ, supr){ var num = 1; // unique id. publ.init = function(name,sex){ this.id = num++; supr(this).init(name,sex); } publ.bark = function(){ return "bow wow"; } }); }); // 別ファイルやブラウザ var crt = importModule('creature'); var dog = new crt.Dog('Poti','male'); alert("%s barks ".format(dog.name) + dog.bark());
■2005-03-20
* [Perl][メモ] PPIの活用
gonzui Perl 対応(hori-uchi.com経由)。PPIを使えばできるなあ、とは思っていたのですが、本当にPPI使ってつくられてる! 凄い。
あー、そういえばPPIの和訳、途中でとまっちゃてる……
* [Perl] JSONRPC
JSONRPCをちょこっと修正。ついでにmod_perl(Apache::Registry)でも動くことを確認。これ、よく考えたら使い方をXMLRPC::Lite風(CGI server)にしているので、XMLRPC-Lite用につくったサービス用モジュールにほとんど手を入れずにJSONRPCに移行できるんだ(その逆も)。でも現状ではdispatch_toに与えられる値はモジュール名だけなので、なんとかしないと。
* [メモ][雑感] 人権擁護法案とか
・人権擁護法案関連:人権関連法案に関するまとめの手助け(臨時)
人権擁護法案について良くまとまっていると思われるサイト。で、そこの中の既存の人権擁護法案反対まとめサイトを紹介するべきではない5つの理由。
・ふと目に付いたもの:沖縄の辺野古基地闘争の現場にてコメント欄
「> 民主主義社会において、公権力が手続きを踏みにじるのは最大の不正義(中略)民主的手続きによって決定された移転に反対・妨害活動を行う運動家は民主主義の敵と言って良いかもしれません」。
公権力と私人がごっちゃになってるわけで、でも往々にしてこういう混乱をしている人見かけるような気が。
■2005-03-24
* [Perl] mixiとpop3
POPアカウント&パスワードの代わりにMixiアカウント&パスワードで。「誰かやりません?」をみて、アンタヤランカという声が聞こえてきた(幻聴)ので、お昼休みにちょっと試してみました。→mixi_pop3.pl
が、結構手間どるもので、結局あるだけのメッセージを取り出すところで時間切れ。既読メールの削除機能とかつけるところまでいきませんでした。まあ、簡単にできることはわかったので、あとは誰かが、もっとちゃんとしたものをこさえてくれると思うのです。
Net::Server(とNet::Server::POP3)を継承したforkサーバです。rootになって起動してください。やっつけコードなのでオプションは渡せません。ファイルの中身を書き換えてください。WWW::Mixiの動作をよくわかっていないので、多人数で使うとどうなるのかとか、わかりません。とりあえず自分で試す分には動いていました。時間が有ればいろいろ対応したりSMTPの方もつくったりとか…… 誰かつくってください。
とえあえずメール内に返信用urlを挿入したりとか、細かい部分をちょっとだけ修正(DELEの実装もだいたい終わってるんですが、削除実験用のメッセージがないので、実験できてません)。
■2005-03-27
* [今月のAcme] Acme::EverythingとAcme::RemoteINC
前回取り上げると書いたので、Acme::Everything。「究極のランタイムローダーで、1行このモジュールをuseするだけで、CPANにある7億5000万行におよぶコードを効率よくロードできます」。例えばあるメソッドを呼び出したとして、そのメソッドの属するクラスが見つからなければエラーになります。このときこのモジュールを導入しておくと、即座にCPANPLUSがその場でCPANモジュールをインストールしてしまうという仕組み。
似たようなものにAcme::RemoteINCがありますが、こちらは@INCにftpを操作するオブジェクトを入れて、リモートにあるモジュールをダウンロードする代物。Perlがモジュールをロードする際に、配列@INCにあるパスを順に探すのはよく知られていることです。それよりも若干知られていないことに(今ではもうよく知られている?)、@INCにコードリファレンスやblessされたオブジェクトが入っていると、そのコードを実行(あるいはINCメソッドを呼び出す)というのがあります。Acme::RemoteINCはこれを利用しているわけです(詳細はperlfuncのrequireを参照)。
* [今月のAcme] Time::Traveller
(上のが2月で、これが3月。)変数の評価を遅らせるという機能から名付けられたTime::Traveller。Timeカテゴリだけど時間操作に全く関係ないという、どちらかというとAcmeカテゴリに相応しいモジュール。評価が星1つになっていたのでみてみると「酷い名前だ! Acme::Time::Travellerにしてちょーだい」というコメントが。でもこのモジュール、標準付属のBモジュールを使っていてなかなか興味深かったのです。
ちなみに星1つをつけた方は上のエントリにあるAcme::Everythingの作者さん(PPIなどもこの方)。
* [Perl] mixi_pop3
mixi_pop3.plは結局、とってきたメッセージをサーバにキャッシュするようにしました。再度取り出すときはキャッシュを利用します。DELEマークがつけられたものは、取り出しません。mixi側で削除されたものはキャッシュから取り除きます。
てな具合でとりあえず一段落(コマンドラインから使いやすくとかは全然してません)。次はSMTPのゲートウェイ……なのですが、POP3GWというのをつくられた方がなされるかな? CPANのNET::Server::Mailというモジュールが拡張性の高いSMTPサーバをつくる雛形になりそうですが、NET::Serverを継承していないのがちょっと残念。Net::Serverは以前日本語訳をしましたが、非常に高機能で便利なモジュールです。
* [雑感][メモ] さくらとAcmeとmod_rewrite
懸案(?)だった今月のAcmeカテゴリの完全独立化を敢行。改めて見返すと不毛なことこの上なし。 war--n $!
さくらのレンタルサーバ mod_rewrite の導入。 とうとう。
_ ねね [ようやく今日、mixi_pop3試せましたー。 問題なく動きましたー。 ありがとうございますー。]
■2005-03-30
* [Perl] JSONのひどいバグ修正
JSON::ConverterのobjToJson()
に循環リファレンスを渡すと無限ループするという大変まずい問題が。修正しましたので万一お使いになっている方はぜひ更新をお願いします(JSONモジュール最新はJSON 0.8, JSON::Parser 0.5, JSON::Converter 0.9)。
* [メモ] 宴会芸
帰宅途中に大変よいことを思いついたので忘れないうちにメモを! まずKFCの前にあるカーネルサンダース人形を6体集めます。 次にこれらの人形をうまく並べます。 「カーネル半ダース」。
あるいは、36体集めれば真にカーネル3ダースになるわけですが、これは些かコストパフォーマンスが悪いように思えます。同ネタを検索てしてみましたが意外と少なかったので、次代の宴会芸になるのではないかと。「半ダースの犬」ってのはありましたが。
* [メモ] 桜の咲く頃に
都教委不起立で50人処分へ。 石原将軍様のお膝元で今年も例年の如く。 とりあえずメモ。 都教委・教育長の発言 NHKクローズアップ現代における都教育長のコメント。 「君が代」問題について 歌詞が主権在民の理念と相反する観点。 日の丸君が代百年戦争 強制される愛国心について。他の日付にも愛国心関連についての質の高い議論が。
_ ねね [あいかわらずあらゆる意味で何も進んでませんが、これからもよろしこ。 というか、なんか2ちゃんねるでは吊りベルト目撃の..]
_ まかまか [こちらこそよろしくです。っていうかすいません、お返事してなくて。 Dan氏のブログをみると、大層取材攻勢が激しいよう..]