Acme::GodoWordなるモジュールを作りました

Posted at 2010-04-19T14:03:00+09:00 in Project

統一言語風の文字分解を行うモジュール、Acme::GodoWordを作りました

リンク

これは何?

前に作った統一言語メーカーのコアの部分というか、 統一言語風の文字分解と、統一言語っぽい文字列の生成を行うモジュールです。

使い方

#!perl
# このファイルはUTF-8で保存

use strict;
use warnings;
use utf8;

use Acme::GodoWord;
use Perl6::Say;

# 【あなた」「には」「見えない】と表示される
say Acme::GodoWord->babelize('あなたには見えない');

作った理由

なんとなく。というか統一言語メーカーは作ってみたものの鳴かず飛ばずだったので、 モジュールにすれば多少は注目されるだろうといいことで作ってみました。

ちなみにこのモジュール、統一言語メーカーを作ったときのコアの部分を流用したので、 作成時間は一時間もかかってないと思います。

ぶっちゃけた話コアの部分をコピペしてテスト書いてモジュールとしての体裁を整えただけなので、 たいした作業量ではなかったのですよししょー。

ところで統一言語って何?

前にも統一言語メーカーを作った時にも説明したんですが、 統一言語ってのは奈須きのこ氏の伝奇小説、空の境界 () の下巻の第六章、忘却録音に出てくる敵キャラ、黒霧皐月の使う魔術のことです。

まあ正確に言えば魔術ではなく、神に言葉を乱される前の言語、という設定なのですが、 まあそんな細かいところまで気にする人はいないだろうということで、 統一言語は魔術だと言っておきます。

で、結局Acme::GodoWordは何するモジュール?

で、統一言語は作中で、【あなた」「には」「見えない】という感じに表現されているのですが、 Acme::GodoWordではこの統一言語っぽい文字列を生成する、ということをするモジュールという事です。

まあもの自体はたいしたことないと思いますが、IRC botとかTwitter botとかと組み合わせて、 統一言語っぽい言葉をしゃべらせるさっちんもどきbot作れば面白いんじゃないかと思います。

技術的な話

前にも書いた気がするけど、Acme::GodoWordの仕組みとしては、

  1. Text::TinySegmenterでutf8 flag onの日本語文字列を分解
  2. 助詞同士を結合
  3. 助動詞を前の単語にくっつける

という感じです。

まあ言葉にしてみるとシンプルですが、この法則にいたるまでにはそれなりの道のりがあったような気がします。

それとAcme::GodoWordの文字列分解は思いっきりText::TinySegmenterに依存しているので、 Text::TinySegmneterが苦手とする文字列はAcme::GodoWordでもうまく処理できません。

まあ名前空間がAcme::使ってるように、Acme::GodoWordはホビーモジュールなんで、 多少分かち書きに難があっても問題ないと思います。

ちなみに

せっかくAcme::GodoWordを作ったので、あのしょぼさきわまる統一言語メーカーは、 いつの日か作り直したいと思います。まああまりにもしょぼいからウケ無かったというのも考えられるし。

まあモジュール化して誰でも使えるようになったんで、誰かさっちんbotとか作ってみてはどうでしょうか。 意外に受けるやもしれません。

それでは、enjoy !

Amazon.co.jp専用の短縮URIサービス、「a.nyrlb.com」を作ってみました

Posted at 2010-04-18T16:32:34+09:00 in Project

Amazon.co.jp専用のURI短縮サービスを作ってみた

空前のURI短縮サービスブーム(なわけない)に則って、 Amazon.co.jp専用のURI短縮サービスを作ってみました。

http://a.nyrlb.com/

使い方は簡単、リンクしたいASIN番号のprefixにhttp://a.nyrlb.com/をつけるだけ、 例えばASIN4061826816にリンクしたい場合にはhttp://a.nyrlb.com/4061826816にアクセスするだけです。 そうするともれなく僕のアソシエイトタグ付きのAmazonのページに飛びます。

またおまけ機能として、suffixにアソシエイトタグをつけると、 そのアソシエイトタグ付きのAmazonのページに飛ぶようになります。

例えばアソシエイトタグがnyarla-22だとすると、 さっきの例で言えばhttp://a.nyrlb.com/4061826816/nyarla-22にアクセスすればOKです。

まあこの辺りhttp://a.nyrlb.com/のドキュメントに書いてあるのでそっちを見てください。

あとそっちには書かなかった技術的な話や裏話を。

この短縮URIサービスなんですが、実際のところ、スクリプトは一切使ってません。 単純にmod_rewrite + 正規表現でリダイレクトしてるだけです。 なんで、このサービスはこれ以外の機能を持ちえません。

まあ最初はPSGIスクリプトでやろうかとも思ったんですが、 これだけのサービスにPerlインタプリタを起動して云々は負荷が高いだろうし、 mod_rewirteだけでできそうだからやっちゃえばいいんじゃね? ということで今の形になりました。

で、あと説明書きをHTMLで書くのが面倒だったんで、 Markdown形式のテキストファイルでささっと書いてしまいました。

あと、似たようなサービスとしてyusukebeさんが、 amz.ly (紹介記事)というのを作ってて、 正直二番煎じ!と思ってたんですが、なんか最近amz.lyはテンポってるみたいなので、 まあamz.lyの代わりになるかな(?)と思わなくもないです。

それとこのサービスなんですが、このBlogと無貌断片をホストしてる さくらインターネットのスタンダードプランで動かしてるため、 あんまりアクセスが多いと多分テンポって止まります。

んで、その状態が長く続き、このBlogや無貌断片やそのほかのサイトの運営に支障が生じるようであれば、 多分このサービスを削除するなりすると思います。 まあよっぽどのことが無い限り大丈夫だとは思いますが。

まあとりあえず作りたいから作った、反省はしない(キリッというサービスなんで、 良かったから使ってみてください。

それでは。enjoy !

Class::Hookableを消しました

Posted at 2010-04-05T11:20:45+09:00 in Project

Class::HookableというCPAN ModuleをCPANから抹消しました

むかーし作ったClass::Hookableというモジュールがあったのですが、 CPANからHelp us clean up CPAN!というメールが来たのをきっかけに、 Class::HookableのすべてのバージョンをCPANから削除しました。

削除した理由としては

  1. Plaggerのようなhookを実現するモジュールは多々ある
  2. 誰も使ってない (作った本人すら使ってない)
  3. 使えないモジュールなのに勢いあまって名前空間の登録をしてある

という感じです。

まあぶっちゃけ今にして思うと公開オナニーとしか言いようのないモジュールだったので消した次第。

まあインストールは120件ほどされてるんですが、Google検索やGoogle Code Searchで検索しても、 Class::Hookableを使ってるという情報は一件も引っかからなかったので、削除しても問題ないと判断しました。 まあBACKPANには残るみたいなので、どうしてもClass::Hookableが必要な場合はそっちから入手できるから問題はないでしょう。

ちなみに勢いあまって名前空間の登録をしたっていうのは、その当時僕がPAUSEの仕組みをわかっておらず、 ネットの情報を鵜呑みにして登録してしまった、というのが真相です。 登録は必要ないのがわからなかったわけですね。

あ、ちなみに名前空間の登録に関してもきちんと削除するように設定したはずなので、 多分次のスケジュールで名前空間の登録も削除されるはずです。

まあ、Class::Hookable関係は色々と反省することばっかりでしたが、 これで一つのけじめがつけられたような気がします。

統一言語メーカーなるものを作りました

Posted at 2010-02-19T17:11:09+09:00 in Project

【統一言語」「メーカー」「なる」「ものを」「作りました】

空の境界の第六章に出てくるらっきょのさっちんこと玄霧皐月が使う、 統一言語っぽい文章を生成する統一言語メーカーなるものを作りました。

これは何?

さっきも書きましたが、統一言語メーカーは、 空の境界という奈須きのこ氏の作品の第六章に出てくる、 全寮制の女子高でなぜか教師をやってる魔術師、 玄霧皐月の扱う統一言語らしき文章を生成するジェネレーターです。

統一言語って何?玄霧皐月って誰?そもそも空の境界って何よ?

まず空の境界っていうのは1998年ぐらいにWeb上で公開され、 2004年に講談社によって出版された、奈須きのこ氏の長編伝奇小説です。 で、現在劇場映画化もされていて、講談社から新書版上下巻と文庫版三巻が発売されてます。

で、玄霧皐月ってのは、この空の境界の第六章に出てくる敵キャラで、 全寮制の女子高の礼園女学院でなぜか教師をやってる魔術師です。

んで、統一言語ってのはその玄霧皐月が扱う言語で、 バベルの塔以前の言葉を乱される前の言語、ということになってます。

で、統一言語メーカーって何?

で、玄霧皐月が扱う統一言語は、作中で、

【あなた」「には」「見えない】

という感じで表現されているのですが、 統一言語メーカーはこれっぽい文章を生成するジェネレーターなのです!!!

使い方

  1. まず統一言語メーカーにアクセス
  2. テキスト入力欄に文章を入力。
  3. 統一言語る!をクリックして送信

という感じで、統一言語っぽいフレーズを生成して楽しめます。

技術的な話

このBlogを読んでいる読者の方は当然技術的なことが気になると思うと書いておくと、 統一言語メーカーは、普通のPerl CGIによって作られています。

動作の流れとしては、

  1. トップページから入力を受け取る
  2. 受け取った単語を統一言語っぽく分割
  3. 出力ページを生成
  4. 出力ページへリダイレクト

という感じです。

肝となるのは受け取った単語を統一言語っぽく分割ってところですが、 これはText::TinySegmenterをつかって実現しています。

Text::TinySegmentertinysegmenterというJavascriptで書かれた 分かち書きライブラリのPerl移植版で、現在CPANから0.01がインストールできます。

で、このText::TinySegmenterで分かち書きしたフレーズは、 完全にバラバラで、統一言語っぽくないので、これを今度は部分的に結合します。

このあたりを書くとネタバレになるのであんまり書きたくない、と言いつつ書きますが、 助詞同士を結合して、助動詞を前の単語とくっつけるという作業をしています。

このあたりの処理を作るのに、ちょっと苦労しましたが、まあそんなにややこしいわけでもなく、 助詞と助動詞の正規表現作ってトークンがマッチしたら処理するって感じになってます。

ちなみに、この統一言語っぽく分割するルーチンの精度ですが、まあ6~8割って感じです。 【あなた」「には」「見えない】は完璧なんですが、【ここ」「では」「見えない】【ここで」「は」「見えない】になってしまってます。あと他の文章もちょっと変だし。

特にText::TinySegmenterの元となったtinysegmenterがひらがなだけで構成される文章が弱いらしいので、 統一言語メーカーもそのあたりの特徴を引き継いじゃってます。

まあこれでMeCab使うとさすがにオーバースペックだし、他の形態素解析器使うのアレなので、 多分これはこのままです。

説明終了。感想とか

まあ当然のことながら、TYPE-MOONとか奈須きのこ氏本人とか講談社から怒られた場合は公開を中止すると思います。 まあ多分そんなことにはならないだろうと思いますが、仮になった場合にはgithubあたりでソースを公開しようかと考えてます。

まあはっきり言って、空の境界知らない人は何コレって感じな代物ですが、空の境界を知ってる人はニヤニヤできると思います。 あとまあなんか要望等あればメールなりTwitterのダイレクトメッセージなりでお知らせください。 ちなみにTwitterのアカウントは@nyarlaです。

あとまあCGIで動いてるのは出力ページ生成器(mayday.cgi)だけなんで、アクセスが集中してもそうは重くならないと思いますが、 統一言語メーカーはこのBlogと同じサーバで動いてるので、このBlogとか無貌断片の方に支障が出てくるような場合には、 もしかすると公開を一時中止するかもしれません。まあこのあたり鳴かず飛ばずになるのか、 それとも大ヒットとなるのかはわからないんですが。

まあとりあえずものは形になったんでよかったら遊んで見てください。

それでは。enjoy !

おまけ。現在発売されている空の境界の商品一覧

新書版

空の境界 上  (講談社ノベルス)

タイトル 空の境界 上 (講談社ノベルス)
ASIN 4061823612
価格 Amazon.co.jpで確認
発売元 講談社
発売日 2004-06-08

空の境界 下 (講談社ノベルス)

タイトル 空の境界 下 (講談社ノベルス)
ASIN 4061823620
価格 Amazon.co.jpで確認
発売元 講談社
発売日 2004-06-08

文庫版

空の境界(上) (講談社文庫)

タイトル 空の境界(上) (講談社文庫)
ASIN 406275892X
価格 Amazon.co.jpで確認
発売元 講談社
発売日 2007-11-15

空の境界(中) (講談社文庫)

タイトル 空の境界(中) (講談社文庫)
ASIN 4062759209
価格 Amazon.co.jpで確認
発売元 講談社
発売日 2007-12-14

空の境界(下) (講談社文庫)

タイトル 空の境界(下) (講談社文庫)
ASIN 4062759462
価格 Amazon.co.jpで確認
発売元 講談社
発売日 2008-01-16

劇場版

劇場版「空の境界」 俯瞰風景 【通常版】 [DVD]

タイトル 劇場版「空の境界」 俯瞰風景 【通常版】 [DVD]
ASIN B0015ONF2U
価格 Amazon.co.jpで確認
発売元 アニプレックス
発売日

劇場版「空の境界」 殺人考察(前) 【通常版】 [DVD]

タイトル 劇場版「空の境界」 殺人考察(前) 【通常版】 [DVD]
ASIN B0015ONF3E
価格 Amazon.co.jpで確認
発売元 アニプレックス
発売日

劇場版「空の境界」 痛覚残留 【通常版】 [DVD]

タイトル 劇場版「空の境界」 痛覚残留 【通常版】 [DVD]
ASIN B0015ONF3O
価格 Amazon.co.jpで確認
発売元 アニプレックス
発売日

劇場版 「空の境界」 伽藍の洞 【通常版】 [DVD]

タイトル 劇場版 「空の境界」 伽藍の洞 【通常版】 [DVD]
ASIN B001HUN1OE
価格 Amazon.co.jpで確認
発売元 アニプレックス
発売日

劇場版 「空の境界」 矛盾螺旋【通常版】 [DVD]

タイトル 劇場版 「空の境界」 矛盾螺旋【通常版】 [DVD]
ASIN B001HUN1OO
価格 Amazon.co.jpで確認
発売元 アニプレックス
発売日

劇場版「空の境界」 忘却録音 【通常版】 [DVD]

タイトル 劇場版「空の境界」 忘却録音 【通常版】 [DVD]
ASIN B0028UMC3S
価格 Amazon.co.jpで確認
発売元 アニプレックス
発売日

劇場版「空の境界」殺人考察(後) 【通常版】 [DVD]

タイトル 劇場版「空の境界」殺人考察(後) 【通常版】 [DVD]
ASIN B002QBAACE
価格 Amazon.co.jpで確認
発売元 Aniplex Inc.(SME)(D)
発売日

Plack::Loader::GatewayCGIなるものを試作してみた

Posted at 2010-01-29T17:53:17+09:00 in Project

Ruby on Railsのgateway.cgi相当のモジュールをPlack::Loaderのサブクラスとして実装してみた

前にPlack::Server::GatewayCGIなるものを試作してみたんですが、 その後Plackの開発を追っていたら、miyagawaさんがコミットメッセージで、 railsのgateway.cgiのようなものはPlack::Loaderのカテゴリがフィットするよ という趣旨のことを言ってたので、 前に書いたPlack::Server::GatewayCGIPlack::Loader::GatewayCGIとして実装しなおしてみました。

http://gist.github.com/289556

例によってコードはgithubへ見に行ってください。

今回の特徴としては、前はPlack::Server::AnyEventにベースのバックエンドサーバに依存してたのが、 今回はその依存がなくなり、Plack::Server::CoroとかPlack::Server::Standaloneとかが使えるようになりました。

今のところ、

  • Plack::Server::AnyEvent
  • Plack::Server::Coro
  • Plack::Server::POE
  • Plack::Server::ServerSimple
  • Plack::Server::Standalone

のサーバに対応しています。

一応Plack::Server::CGIでも動きますが、駐在プロセスとかできないので、 高速化は一切できません。

あとPlack::Server::FastCGIに関しては、サーバのホストとポートの取得の仕方がわからなかったので、 今のところ対応していません。誰かそのあたりのコードをプリーズ。

あ、それとPlack::Serverのネームスペースが非推奨になって、Plack::Handlerに変わったはずなので、 ここら辺これからPlackの開発がすすんでくると読み替える必要があるんで注意してください。

あとまた例によって今回書いたPlack::Loader::GatewayCGIはプロトタイプなので、 実際に実用しようと思うと、もうちょっとコードをリファクタリングする必要があると思います。

まあ実用するにはまだまだって感じなので、あんまり使い道はない感じですが、 ちょっと実験するぐらいなら使えるので、いろいろいじって見るのもいいかと思います。

以上Plack::Loader::GatewayCGIを試作してみたという話でした。

About Me

name
Naoki Okamura
nick
nyarla
contact
nyarla[ at ]thotep.net
Category
Log
Banners
Powered by
nim