« 2012年1月 | トップページ | 2013年2月 »

2012年2月16日 (木)

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

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


ポリシー


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

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

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

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

2012-02-16 12:03:53 (JST) in ウェブログ・ココログ関連 セキュリティ JavaScript | | コメント (15) | トラックバック (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 Perl JRF 作成ソフトウェア | | コメント (2) | トラックバック (0)