2012年2月16日 (木)

ユーザーによるコメント「削除」をココログプロで実現する

Web 掲示板の中には、ユーザーがコメントを入力するとき「削除パスワード」を同時に入力させ、ユーザーが後から自分でコメントの削除をできるようにしている実装がある。MovableType, TypePad をもとにしているココログ(プロ)にはそのような機能はないが、JavaScript で書かれた暗号技術を用い、「削除」に相当する機能を実装してみた。


ポリシー


JavaScript を用いてサーバーの内容を変更するわけではない「削除」だから、当然、サーバーから送られるデータの削除になるわけではなく、JavaScript を使っているユーザーに「非表示」になるだけである。サーバー管理者などの立場からすれば、一見、無意味だがソーシャルな面を考えると必しもそうではない。すなわち…

ユーザーが削除の意思を実効を伴って表示できる。

…ことに価値があるのである。人と人とのコミュニケーションはあいまいなもので、消してくれと口ではいいつつ、本当は消して欲しくないの…といったクネクネした反応がありうる。これは削除申請の様式を決めたからと言って済む話ではなく、少し対応が遅れると、消えてない前例があるので、消えないと思った…などという「クネクネ」を許すことになる。消えている実例がすぐに発効しているとなることで、これをかなり封じることができる。

続きを読む "ユーザーによるコメント「削除」をココログプロで実現する"

2012-02-16 12:03:53 (JST) in JavaScript, ウェブログ・ココログ関連, セキュリティ | | コメント (10) | トラックバック (0)

2012年2月 9日 (木)

cp_with_prefix.pl: ディレクトリ平坦化機能付きコピー

ハードのメディアプレイヤーで画像をランダムに閲覧したい。私が持っているメディアプレイヤーに限らず専用ハードのものはたいていそうだが、PC などのソフトではあった、zip にまとめられたものを見るようなことはできず、また、ディレクトリの構造を奥へ奥へと "recursive" に辿って見るような機能もない。フォルダ内のランダム再生はある。

そこでディレクトリ構造を平坦化(flattening)してコピーするような Perl スクリプトを書いた。

はじめはソースと同じファイル名(ベース名)で一つのディレクトリにコピーしたとき重複を避けるため、手動で接頭辞(prefix)を付けられるようにすれば十分かと考えたが、使うと面倒くさいので、-F オプションによって、ファイル名にディレクトリが含まれているとき、そのディレクトリ名を prefix とする機能も作った。

例えば、

$ perl cp_with_prefix.pl --prefix=p_ a/b/c.jpg d


…としたときは、d/p_c.jpg というファイルができる。

$ perl cp_with_prefix.pl -F a/b/c.jpg d


…としたときは d/a_b_c.jpg というファイルができる。

Cygwin の mv や cp の実装を参考に、xargs といっしょに使いやすいよう -t (ターゲットディレクトリ)オプションを用意した。

例えば次のように使う。

$ find dir1 dir2 -name '*' -print0 | xargs -0 perl cp_with_prefix.pl -F -t dir3


こうすると、dir1 や dir2 の下にあるファイルがリカーシブに dir3 の下にファイル名の重複が(ほぼ)なくなるようにコピーされる。

なお、私の最初に書いた目的にそった上で高速化するため、同じファイル名があったときはコピーせずスキップする。ちゃんと上書き(overwrite)して欲しいときは -f (force)オプションを付ければよい。スキップしている表示がうっとうしいなら、-q (quiet)オプションを付ければよい。目的がただの rename に近いため、コピーしたあとの日付けはソースと変わらないようにしている。

ファイル名とコンソールの文字エンコーディングについては、ソースの以下の部分をいじって欲しい。本当は、ロケールとかを使ってコーディングできれば美しいのだが、これまでの私の経験から言うと、オプションで指定してもらうか、今回のようにスクリプトをいじってもらったほうが話が早い。現在、 Cygwin の 1.7 系列の場合、ファイルシステムのエンコーディングが cp932 (Windows 用の Shift JIS コード)であっても、utf8 で処理される。昔の Cygwin であれば、utf8 の部分を、ファイル名では cp932 にコンソールでは euc-jp にすると、うまくいくかもしれない。

our $FILENAME_ENCODER = Encode::find_encoding('utf8') or die;
our $CONSOLE_ENCODER = Encode::find_encoding('utf8') or die;



配布物


これは、とても簡単なプログラムなので、数式のようにパブリックドメインなものとして扱っていただいてよい。こんなプログラマなら誰でも作れそうなものをプログラムできる人しか使えないであろう Perl スクリプトで公開する意義はないかもしれないが、こんな簡単な機能がググっても見つからないのも変なので公開することにした。

関連


スクリプト自体はパッと見つからないが、シェルで同じような機能を求めてる人はいそうだった。Windows なら高機能なリネームソフトはいろいろある。 iTunes とかもそういう機能がありそうだが、このような機能だけが欲しくて使っているとかありうるんだろうか?

Flexible Renamer》。Windows 用のリネームソフトの例。
更新: 2012-02-09,2012-02-11
初公開: 2012年02月09日 22:26:18
最新版: 2012年02月11日 19:10:51

2012-02-09 22:26:15 (JST) in Cygwin, JRF 作成ソフトウェア, Perl | | コメント (2) | トラックバック (0)

2012年1月 7日 (土)

ブログのバックアップ&「ひとこと」のクロスリファレンス

私の《ひとこと》サイトで「クロスリファレンス」を張ろうと思い立った。少し試した段階でスパム制限等のため時間がかかることがわかったので、その前に《ひとこと》を「ダンプ」つまりフルバックアップすることにした。

ココログの機能として、他所に移転するのを支援するために、バックアップの機能がもとからあるが、これは、元の URL やトラックバック URL、記事 ID などを記録しないため、今回の目的には適さない。少し迷惑かなぁと思いつつ、 XMLRPC と普通のページ読み込みの両方を使って、「フルバックアップ」するスクリプトを書いた。それが dump_blog.pl である。

このフルバックアップにもとづいて、当初は、URL マップみたいなのを XMLに書いて、Ajax で読み込もうかとも考えたが、私以外の場所で使うことを想定すると、これが巨大になることもありえるかもしれず、するとただでさえ重い《ひとこと》サイトがさらに重くなるかもしれないので、その方法は採用しなかった。代わりに単純に後向きの参照としてトラックバックを張ることにした。スクリプトでリンクを張っているため、検索エンジンにその密結合ぶりをアピールできてないことを疑っていたので、それを補う意味でもこの方法が良いと思われた。それを実現するのが、xref_trackback.pl である。

続きを読む "ブログのバックアップ&「ひとこと」のクロスリファレンス"

2012-01-07 14:28:08 (JST) in JRF 作成ソフトウェア, Perl, ウェブログ・ココログ関連 | | コメント (0) | トラックバック (0)

2011年11月18日 (金)

タロットの偶奇で易の卦を出す

トランプやタロットといったカードで易の卦を出すとき、一度出たカードは次には出なくなることから、カードの数のパリティー(奇数か偶数か)で卦を診ようとすると微妙に結果が偏ることになる。

本稿では、易の卦を出す簡単な方法がすでにいろいろある中、あえて複雑な操作を用い、この結果の偏りを減らす方法を考案する。

続きを読む "タロットの偶奇で易の卦を出す"

2011-11-18 22:57:26 (JST) in シミュレーション | | コメント (1) | トラックバック (0)

2011年7月 1日 (金)

Exhaustive Lock Dependency Emulator その2 wait_and_lock

その1で、このフレームワークにおいて「入力待ち…は…特殊な枝刈りの仕方」ではないかというアイデアを書いた。本稿では、それを実装してみる。

理屈


入力待ちは、最も単純にはループして、他のプロセスが $context を変更するのを待てば良い。しかし、それは普通、非効率的で、このエミュレータだと、探索すべき lock 仕様の木の深さを無限に大きくすることになる。

もう少しマシな方法ということであれば、unlock したあと、次に他のプロセスが lock/unlock するのを待ってから lock する「wait_and_lock」と呼ぶべき機構を考えることができる。この方法を先のフレームワークで実現するには、 lock 仕様を見て、間に他の lock がなければ、それを枝刈りするだけで良い。とても簡易で、枝を伸ばすのではなく枝を刈るのだから効率的ですらある。

続きを読む "Exhaustive Lock Dependency Emulator その2 wait_and_lock"

2011-07-01 22:37:18 (JST) in Perl, シミュレーション, 関数型言語・定理証明器 | | コメント (1) | トラックバック (0)

2011年6月20日 (月)

Exhaustive Lock Dependency Emulator その1 並列処理の総当り

マルチスレッドまたはマルチプロセスの最も簡易な lock/unlock 機構において、その依存を総当たり的に調べるプログラムを(Perlで)書いた。

総当たり的なので、特に工夫があるといえるわけではなく、おそらく他の方が特に言及することなく為していることについて、たまたま私もプログラムする順番が回ってきたぐらいのことになると思う。「車輪の再発明」だが、調べるよりは自分で作ったほうが早い部類の話で、記号論理をやった人間にとって示唆に富む部分があるという印象を受けたので、ブログに書いておくことにした…といったところ。

これはマルチプロセス環境を Perl 上でエミュレートするという話ではまったくない。プログラム自体は、シングルプロセスで終了する形をとる。

アイデアのキモは、シングルプロセス環境ではあるがプロセスを順に何度も起動し、unlock があったときに環境をすべて保存し、lock があったときに以前 unlock された環境に切り換わると考えることにより、lock/unlock のシミュレーションができたと考える点にある。

続きを読む "Exhaustive Lock Dependency Emulator その1 並列処理の総当り"

2011-06-20 02:54:31 (JST) in Perl, シミュレーション, 関数型言語・定理証明器 | | コメント (2) | トラックバック (3)

2011年6月 3日 (金)

Statuses_Editor_Proxy.CGI - XMLRPC と OAuth を組み合わせた「ひとことサイト」ソリューション

このアプリケーションは何?


ユーザーとして MovableTyle の機能を XMLRPC から使い、Twitter.com やはてな社が実装する OAuth をユーザー認証に用いることで、CGI のサーバーにリソース・セキュリティが乏しい場合でも、ユーザー追加型の「ひとこと」サイトを一般ユーザーが比較的安心して運用できる Web アプリケーションです。

MovableType のテンプレート、そのサーバーに置く Javascript、ユーザー側で起動する Greasemonkey JavaScript(Google Chrome の UserScript にも対応)、(ローカルで起動する) httpd で使う CGI Perl スクリプトから構成されます。

当初は、アバウトミーの「ひとこと」をココログプロへ移転するツールとして作られたため、その変換のための Perl スクリプトも添付されています。

配布される MovableType のテンプレートは「ココログプロ」用に調整されていますが、SSI が使える MovableType 環境に対応させるのは困難ではないでしょう。

続きを読む "Statuses_Editor_Proxy.CGI - XMLRPC と OAuth を組み合わせた「ひとことサイト」ソリューション"

2011-06-03 05:28:30 (JST) in JavaScript, JRF 作成ソフトウェア, Perl, ウェブログ・ココログ関連 | | コメント (4) | トラックバック (2)

2011年5月 7日 (土)

電子署名の替わりに Loaded Magic

今、私は「ひとこと」を書くためのウェブ上のエディタを MovableType、SSI、 Javascript を使って作っている。追加的な機能として「ひとこと」に電子署名のようなものを付けて、その偽造がないことを証明できたらカッコイイだろうなぁと考えた。

しかし、ウェブの標準的で本格的な電子署名技術を、上記の枠組みだけから使うことは不可能だろうし、例えば、コメントのハッシュを付すにしても、そのハッシュの偽造もコメントの偽造とほぼ同程度の容易さと考えるべきだから、逆に変な信用を与えて、話をややこしくしてもいけない。

続きを読む "電子署名の替わりに Loaded Magic"

2011-05-07 22:32:13 (JST) in JavaScript, セキュリティ | | コメント (8) | トラックバック (0)

2011年4月23日 (土)

aboutme2cocolog: アバウトミーの「ひとこと」をココログプロへ移転するツール

2011年6月30日終了したアバウトミー(aboutme.jp)から、「ひとこと」のデータをココログプロに移転するために作ったツールです。このドキュメントは、移行の手順を示すものです。

あくまで私個人用に作ったもので、あまり多くの人が使うことを想定していません。よってツール類も個人的嗜好と私の労力削減に重きを置いたものになっています。移行まで時間もなく人数が少ないことが想定されるのでそうしていますが、逆に少ないからこそ、要望等にはかなり融通を[]かせることができると思います。要望・質問等はお気軽にお知らせください。

私の「ひとこと」はこのツールを使って↓に移行しました。「正式なオープン」は 2011年6月1日に決めてましたが、それまでに順次、移行は終っており、すでに Google で検索できるような公開の仕方をしていました。

なお、更新情報は現在ご覧の↓のページでご確認ください。

配布ツールをダウンロードするためのリンクは一番下のほうにあります。

続きを読む "aboutme2cocolog: アバウトミーの「ひとこと」をココログプロへ移転するツール"

2011-04-23 08:56:02 (JST) in HTML/XML/CSS, JavaScript, JRF 作成ソフトウェア, Perl, ウェブログ・ココログ関連 | | コメント (27) | トラックバック (4)

2011年1月20日 (木)

Haskell の callCC で goto を作る

本稿では、callCC を使ってループを作り、まるで goto のように見えるような動作を構成してみる。Haskell は、強く型付けされた関数型言語だが、十分実用的であって、無限ループも普通に書ける。goto が作れたからと言ってうれしいことはないかもしれないが、その動作がおよそ非直観的で興味深く、これはぜひ紹介したいと考えたのが、本稿を書いた動機である。

続きを読む "Haskell の callCC で goto を作る"

2011-01-20 19:37:45 (JST) in 関数型言語・定理証明器 | | コメント (2) | トラックバック (1)