グローバルに共有して使うメモのウェブアプリです。
誰でも書け、誰でも消せます。街中の黒板のようなものです。
ただし、18時間以内は書いた人しか消せません。
メモは 200 個を越えたところで 200個より前のものは消去されます。
「梅Pゴシック」というフリーなフォントをインストールしておくと、文字がいくぶんキレイになります。
「グローバル共有メモ: ログ」ページについて。
日時は世界標準時で、日時の右の灰色の不思議な文字列は偽造防止のための「ハッシュ」です。
日時の左の先頭の丸は、自分が書いたか・削除したか否かを表します。●は自分が書いたもの、○は他人が書いたもの、赤は他人が削除したもので、青緑は自分が削除したものです。赤の●は、自分が書いて他人が削除したもので、注意を要します。
自分かどうかの識別子は 10 日前後で、いっせいに更新されます。その日以降の「自分」は別人とみなされます。
ログページでは URL はリンクされ、[google: 検索文字列] や [wikipedia:項目名] といった表記も適当にリンクされます。漢字[かんじ] または [ruby:漢字:かんじ] といった表記で、ルビを付すことができます。ローカルな参照は、>>2020-01-01T01:00:00Z などとして行います。
グローバル共有メモのウィジェットをブログ等で使う場合、ウィジェットを挿入したい位置に次のようなコードを書きます。
<script type="text/javascript">SHARED_MEMO_WIDGET_WIDTH="auto"; SHARED_MEMO_WIDGET_ROWS=8;</script>
<script type="text/javascript" src="http://jrockford.s1010.xrea.com/demo/shared_memo_widget.js"></script>
もし、ウィジェットの width を固定したい場合は、次のように書きます。 (200px で固定します。)
<script type="text/javascript">SHARED_MEMO_WIDGET_WIDTH=200; SHARED_MEMO_WIDGET_ROWS=8;</script>
<script type="text/javascript" src="http://jrockford.s1010.xrea.com/demo/shared_memo_widget.js"></script>
TEXTAREA の rows を変更したい場合は、上の SHARED_MEMO_WIDGET_ROWS に代入する値を変えましょう。
もし IE にも対応したいのならば、IE では height の自動調整が効きませんので、IE 用に height を設定することになります。しかし、height を設定するとそのままでは自動調整は OFF になるので、IE 以外のブラウザで自動調整を残したい場合は、さらに auto_height を 1 に設定する必要があります。 rows を変更するには結局、次のように設定することになります。
<script type="text/javascript">
SHARED_MEMO_WIDGET_ROWS=20;
SHARED_MEMO_WIDGET_WIDTH=200;
SHARED_MEMO_WIDGET_AUTO_WIDTH=1;
SHARED_MEMO_WIDGET_HEIGHT=420;
SHARED_MEMO_WIDGET_AUTO_HEIGHT=1;
</script>
<script type="text/javascript" src="http://jrockford.s1010.xrea.com/demo/shared_memo_widget.js"></script>
XREA の共有 SSL を使いたい場合は、script タグのところを次のように変えましょう。
<script type="text/javascript" src="https://ss1.xrea.com/jrockford.s1010.xrea.com/demo/shared_memo_widget.js"></script>
2020-05-18 12:30:39 (JST) in Perl | 固定リンク
|
略して ELDE。マルチプロセスの最も簡単な lock/unlock 機構において、そのロックの依存を総当たり的に調べるプログラムを書いた。
その1で「虚実行」も数え上げていたのを修正し、「実実行」のみを対象とするようにした。
前回は、意図しない「虚実行」を含めていたため、他の人がやらないような実装になり、その意味では個性があったかもしれないが、今回こそ、特に工夫のない「車輪の再発明」になっていると思う。ただ、前回の怪我の功名で、違う考え方で作った二つの実装が同じ結果を出すのを確かめることで、エミュレータの正しさを多少ともチェックしているのは優位点かもしれない。「証明」がないのは相変わらずではあるが、いくつかの例で、チェックはできた。
前回も書いたとおり、これはマルチプロセス環境を Perl 上でエミュレートするという話ではまったくない。プログラム自体は、シングルプロセスで終了する形をとる。
今回のアイデアのキモは、グローバルな単一ロックのみを扱うため、ロックは重ならず、プロセスをまたいでそれぞれのロックをシーケンシャルに整列して捉えることができるという点にある。その列をロック仕様として総当りで数え上げ、それに基づくよう実行していく。処理の重なりのうち、簡単なものは省いて効率化する。
なお、「プログラム」をコンテクストに関し「関数的(functional)」でなければならない…という条件を課すのは今回も同様である。すなわち、コンテクストが同じように(同じ lock/unlock 順序で)与えられれば、常に同じ「出力」をしなければならない。
2018-04-13 21:00:17 (JST) in Perl シミュレーション 関数型言語・定理証明器 | 固定リンク
|
| トラックバック (0)
Perl で組み合わせの数え上げが欲しかったのだが、CPAN からのインストールには C が必要なようなので、できれば避けたい。これぐらいなら、Perl 自体で書けるだろうと、参考となるサイトを探すと…意外にない。
そして見つけたいくつかの日本語のサイトでは、nCr = nCr=(n-1)Cr + (n-1)C(r-1) の式を使って示していた。いや、もっと効率の良い方法があったはず…と海外のサイトを調べると、最近、私が勉強している Python でアルゴリズムを示しているサイトがあったので、それを Perl に書き換えてみた。
なお、「数え上げ」という言葉を使ったが、数を求めるのと区別するために、組み合わせや順列の「生成」と言ったり「列挙」と言ったりもするようだ。
2018-04-11 21:48:01 (JST) in Perl | 固定リンク
|
| トラックバック (0)
「過剰診断論」にいくつか疑問を持ち、シミュレーションを書いてその疑問を明らかにしたいと考えた。その過程で、がん患者には、基礎寿命とがん寿命があって、どちらかが尽きたとき死ぬというモデルを考えることになった。
まだシミュレーション開発の途中だが、「基礎寿命論」についてある程度開発したところで、行き詰まりを感じたため、とりあえず現在の進捗を報告することにした。
2017-04-20 16:22:40 (JST) in Perl シミュレーション | 固定リンク
|
| トラックバック (0)
「眠り姫問題」は意志決定問題と人間原理という二つの分野で共通のテーマセッターとなっている有名な難問なのだそうだ。三浦俊彦『
多宇宙と輪廻転生』によると、次のような問題である。
|
> |
日曜日に、ある実験が始められる。まず、あなたは眠らされる。そのあとフェアなコインが投げられ、表か裏かによって、次の二つの措置が選ばれる。
場合A■表が出た場合 - あなたは月曜日に一度起こされ、インタビューされ、また眠らされ、ずっと眠り続ける。
場合B■裏が出た場合 - あなたは月曜日に一度起こされ、インタビューされ、また眠らされ、火曜日に一度起こされ、インタビューされ、また眠らされ、ずっと眠り続ける。眠りは記憶を消すほど深いので、目覚めたとき月曜か火曜かはわからない。
いずれの場合もあなたは、実験の手続きについてはすべてわかっているものとする。目覚めたときに自分が月曜にいるか火曜にいるか、そしてコインは表だったのか裏だったのかがわからないだけである。
ちなみにコイン投げがなされるタイミングについては融通が利く。コイン投げは、あなたが最初に起こされる前でも、月曜にあなたが目覚めた後でも、問題の論理構造は変化しない。
さて、あなたへのインタビューは次のようなものである。
問1■「いまは日曜日、実験開始直前である。場合 A である確率は?」
問2■「さあ、あなたは目覚めた。場合 A である確率は?」
問3■「さあ、あなたは目覚めた。今は月曜日である。場合 A である確率は?」
(p.235-236)
|
|
このうち問2と問3が「眠り姫問題」であるという。この答えには、二つの流派がある。問2 の答えに 1/2 と答える派と、1/3 と答える派である。
問2に 1/2 と答える派はたいてい、問3に 2/3 と答える。問2 に 1/3 と答える派はたいてい、問3 に 1/2 と答える。
それぞれの派について、その考えに基づくシミュレーションをして数え上げるプログラムを Perl で記述してみよう……というのが本稿である。
2017-02-11 19:24:07 (JST) in Perl シミュレーション | 固定リンク
|
| トラックバック (0)
最初に断わるが、これは失敗した実験の記録である。
実験のアイデアは単純なもの。株価等のコール・オプションを求める 2項モデルの近似式としてブラック=ショールズ式が使えるが、2項モデルの話は当然、モンテカルロ法でやってもよいはず。そのとき、2項モデルでは、上か下かのランダム二択を使うが、その替わりに正規分布の乱数を使ったり、コーシー分布 (Cauchy distribution)の乱数を使ってみたら、どうなるかやってみよう……というのが今回のアイデアである。
ブラック=ショールズ式が正規分布のブラウン運動なのだから、正規分布の乱数を使ってみるのは、元の2項モデルと同じ値になりそうだ……とまず考えた。次に、それができるなら、株価の変動は、べき分布(冪分布)だとよく言われるが、べき分布の一つであるコーシー分布の乱数を使ってみたら、ブラック=ショールズ・モデルにコーシー分布を適用したものになるのではないか……と考えた。
結論を述べれば、正規分布の乱数を使うのは確かに2項モデルと変わらないように見える。モンテカルロ法はかなり粗い結果しか出ないので、そう見えるだけかもしれないが、そう言えそうに見える。一方、コーシー分布を使うのは、分割したときの「ボラティリティ」にあたる値をどうすれば良いかがわからず、うまく適用できなかった。その点から、この実験は失敗だと言える。ただ、コーシー分布を使うと、外れ値が多くなるため、元のブラック=ショールズ式で求めるオプション価格よりかなり高い価格が必要になることは、なんとなくわかった。
2017-02-05 23:27:08 (JST) in Perl シミュレーション | 固定リンク
|
| トラックバック (0)
近年、J. ローゼンハウスの『モンティ・ホール問題テレビ番組から生まれた史上最も議論を呼んだ確率問題の紹介と解説』という本が出た。この本は、モンティ・ホール問題について詳しく、この本が出る前に私が考えていた問題の拡張についても書かれてしまっていた。この本を読んで、一旦は、私がこれ以上、この問題について何か書く必要はないかと思った。が、それからしばらくして、私がやったことも少しは意味があるかと思い直し、私の思考の跡を備忘的に記録するため、ちょっとした確率モデルのシミュレーションに関する論考を足して、レポートにしておくことにした。
2016-08-27 21:17:40 (JST) in Perl シミュレーション | 固定リンク
|
| トラックバック (1)
このシリーズの方法では、メンバ変数へのアクセスは直接、オブジェクト本体であるハッシュ(のリファレンス)をいじって行う。そのため、メンバ名のミススペルがあると、参照時は undefined なので警告があることもあるが、代入時には何の警告も起きない。しかも、こういうときのミススペルに限ってとても見つけにくい。代入したはずのものが、undefined で参照されて警告があっても、そこから、どの代入にミスがあったか、その推理が簡単にできるとは限らない。
これを避けるには、メンバ変数へのアクセスに、setter や getter の関数をいちいち定義していくという方法もありえるのだが、setter が関数になるのはカッコ悪く、かといって lvalue を取るようにするのは、
Perl 5.18.1 の perlsub ですら未だに「実験的」という記述が抜けてなくて怖い。caller でメンバ変数名を判断する実装だと、関数渡しにミスが出る可能性も出てくる。
そこで、思い付いたのが Perl の tie の仕組みを使う今回の方法。ハッシュの代入や参照をいちいちチェックするから速度面で不利になる(はずではある)のだが、$DEBUG 変数で、new のときに使わないよう設定できるようにすることで軽くした(つもり)。
2014-03-17 18:20:35 (JST) in Perl | 固定リンク
|
| トラックバック (0)
私は『
Monty Python』(日本版)の VHS ビデオを持っている。そのコントの中に大小さまざまな手旗で、会話というかストーリー(『嵐ヶ丘』)を紡ぐというものがあった。
大学時代、ブラウザは xmosaic か最新の netscape かというころ、ウェブのウィジェットを作るネタを考えていて、ふとそのコントを思い出した。そのころの知り合いが、入力された文字列を元に 3D で文字を表示できるようにしたりしたと聞いていた。私は、そういう技術面でのすごさを出せなくても、ネタ的にクスッと笑えるようなものとして、「手旗フォント」みたいなものを作りたいと思った。
2014-03-11 08:00:00 (JST) in Perl ハード JRF 作成ソフトウェア JavaScript | 固定リンク
|
| トラックバック (0)
Perl の unpack では、ビット表現つまり 2 進数にするための B や b が使える。が、…使えてねぇ!
例えば、
my ($mapper, $four_screen, $trainer, $sram, $vertical_mirror)
= unpack("B4BBBB", $ines_flags);
で、$ines_flags には 0x43 でも入ってるとしよう。すると、欲しい値は (4, 0, 0, 1, 1) だ。が、返ってくる値は ("0011", "0", undef, undef, undef) になる。
2014-03-05 06:24:44 (JST) in Perl | 固定リンク
|
| トラックバック (0)
プチコン(mkII)の SMILE BASIC には、いわゆる関数定義の方法はないが、 GOSUB & RETURN はある。GOSUB は、変数に入ったラベル名でも OK な優れものだが、引数を取れないので、引数や戻り値をどうやって返すかは、(自分で) 決めておく必要がある。
普通には、A1="A":A2="B":GOSUB @F1:PRINT R といった感じで、 A1,A2,A3... に引数を入れ、R に返すとでも決めればいいのだが、この方法だと呼び出されたときの引数の値が、デバッグ時に残らない。
そこで、コンパイラが吐くアセンブラでよく使うテクニックとして、スタックを使って、そこに変数を push して引数を渡す方法があるのだが、私はそれを採用することにした。
このテクニックの自然な拡張として、push pop で「ローカル変数」みたいなものも確保できる。実際、それをローカル変数と見なして「文法」チェックする(そしてQRコードを吐く) Perl スクリプトも書いた。
今回は、そのライブラリと Perl スクリプトを紹介する。
2013-02-21 04:44:53 (JST) in Perl JRF 作成ソフトウェア プチコン | 固定リンク
|
| トラックバック (3)
ハードのメディアプレイヤーで画像をランダムに閲覧したい。私が持っているメディアプレイヤーに限らず専用ハードのものはたいていそうだが、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 とかもそういう機能がありそうだが、このような機能だけが欲しくて使っているとかありうるんだろうか?
更新: |
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 作成ソフトウェア | 固定リンク
|
| トラックバック (0)
私の《
ひとこと》サイトで「クロスリファレンス」を張ろうと思い立った。少し試した段階でスパム制限等のため時間がかかることがわかったので、その前に《
ひとこと》を「ダンプ」つまりフルバックアップすることにした。
ココログの機能として、他所に移転するのを支援するために、バックアップの機能がもとからあるが、これは、元の URL やトラックバック URL、記事 ID などを記録しないため、今回の目的には適さない。少し迷惑かなぁと思いつつ、 XMLRPC と普通のページ読み込みの両方を使って、「フルバックアップ」するスクリプトを書いた。それが dump_blog.pl である。
このフルバックアップにもとづいて、当初は、URL マップみたいなのを XMLに書いて、Ajax で読み込もうかとも考えたが、私以外の場所で使うことを想定すると、これが巨大になることもありえるかもしれず、するとただでさえ重い《
ひとこと》サイトがさらに重くなるかもしれないので、その方法は採用しなかった。代わりに単純に後向きの参照としてトラックバックを張ることにした。スクリプトでリンクを張っているため、検索エンジンにその密結合ぶりをアピールできてないことを疑っていたので、それを補う意味でもこの方法が良いと思われた。それを実現するのが、xref_trackback.pl である。
2012-01-07 14:28:08 (JST) in ウェブログ・ココログ関連 Perl JRF 作成ソフトウェア | 固定リンク
|
| トラックバック (0)
※
その1の最後に「「虚実行」またはこの仕組みの大きなミスについて」として追記したようにこのフレームワークには大きなミスが見つかっている。以下は参考のために残しておく議論である。※
その1で、このフレームワークにおいて「入力待ち…は…特殊な枝刈りの仕方」ではないかというアイデアを書いた。本稿では、それを実装してみる。
入力待ちは、最も単純にはループして、他のプロセスが $context を変更するのを待てば良い。しかし、それは普通、非効率的で、このエミュレータだと、探索すべき lock 仕様の木の深さを無限に大きくすることになる。
もう少しマシな方法ということであれば、unlock したあと、次に他のプロセスが lock/unlock するのを待ってから lock する「wait_and_lock」と呼ぶべき機構を考えることができる。この方法を先のフレームワークで実現するには、 lock 仕様を見て、間に他の lock がなければ、それを枝刈りするだけで良い。とても簡易で、枝を伸ばすのではなく枝を刈るのだから効率的ですらある。
2011-07-01 22:37:18 (JST) in Perl シミュレーション 関数型言語・定理証明器 | 固定リンク
|
| トラックバック (0)
※最後に追記するようにこの記事には大きなミスが見つかった。以下は参考のために残しておく議論である。※
マルチスレッドまたはマルチプロセスの最も簡易な lock/unlock 機構において、その依存を総当たり的に調べるプログラムを(Perlで)書いた。
総当たり的なので、特に工夫があるといえるわけではなく、おそらく他の方が特に言及することなく為していることについて、たまたま私もプログラムする順番が回ってきたぐらいのことになると思う。「車輪の再発明」だが、調べるよりは自分で作ったほうが早い部類の話で、記号論理をやった人間にとって示唆に富む部分があるという印象を受けたので、ブログに書いておくことにした…といったところ。
これはマルチプロセス環境を Perl 上でエミュレートするという話ではまったくない。プログラム自体は、シングルプロセスで終了する形をとる。
アイデアのキモは、シングルプロセス環境ではあるがプロセスを順に何度も起動し、unlock があったときに環境をすべて保存し、lock があったときに以前 unlock された環境に切り換わると考えることにより、lock/unlock のシミュレーションができたと考える点にある。
2011-06-20 02:54:31 (JST) in Perl シミュレーション 関数型言語・定理証明器 | 固定リンク
|
| トラックバック (4)
ユーザーとして MovableTyle の機能を XMLRPC から使い、Twitter.com やはてな社が実装する OAuth をユーザー認証に用いることで、CGI のサーバーにリソース・セキュリティが乏しい場合でも、ユーザー追加型の「ひとこと」サイトを一般ユーザーが比較的安心して運用できる Web アプリケーションです。
MovableType のテンプレート、そのサーバーに置く Javascript、ユーザー側で起動する Greasemonkey JavaScript(Google Chrome の UserScript にも対応)、(ローカルで起動する) httpd で使う CGI Perl スクリプトから構成されます。
配布される MovableType のテンプレートは「ココログプロ」用に調整されていますが、SSI が使える MovableType 環境に対応させるのは困難ではないでしょう。
2011-06-03 05:28:30 (JST) in ウェブログ・ココログ関連 Perl JRF 作成ソフトウェア JavaScript | 固定リンク
|
| トラックバック (2)
2011年6月30日終了したアバウトミー(aboutme.jp)から、「ひとこと」のデータをココログプロに移転するために作ったツールです。このドキュメントは、移行の手順を示すものです。
あくまで私個人用に作ったもので、あまり多くの人が使うことを想定していません。よってツール類も個人的嗜好と私の労力削減に重きを置いたものになっています。移行まで時間もなく人数が少ないことが想定されるのでそうしていますが、逆に少ないからこそ、要望等にはかなり融通を利かせることができると思います。要望・質問等はお気軽にお知らせください。
私の「ひとこと」はこのツールを使って↓に移行しました。「正式なオープン」は 2011年6月1日に決めてましたが、それまでに順次、移行は終っており、すでに Google で検索できるような公開の仕方をしていました。
なお、更新情報は現在ご覧の↓のページでご確認ください。
配布ツールをダウンロードするためのリンクは一番下のほうにあります。
2011-04-23 08:56:02 (JST) in ウェブログ・ココログ関連 Perl JRF 作成ソフトウェア HTML/XML/CSS JavaScript | 固定リンク
|
| トラックバック (4)
先の記事で「パッケージ」でインポートした関数などを、「クラス」で使う方法を書いたが、インポートした関数の他に、Main パッケージで定義した「ローカル関数」も「クラス」で使いたくなるのが当然である。(というより、それができないことにさっき気付いた。)本稿ではほぼソースだけだがその方法を示す。
2011-01-07 22:40:08 (JST) in Perl | 固定リンク
|
| トラックバック (0)
先の記事で「パッケージ」でインポートした関数などを、「クラス」で使う方法を書いた。本稿では同方法で、「クラス変数」をどのように実現するか例示する。
2011-01-06 13:13:55 (JST) in Perl | 固定リンク
|
| トラックバック (1)
Perl でオブジェクト指向っぽいコードを書こうとすると、一つの「パッケージ」の中に複数の「クラス」が存在するとき、「パッケージ」でインポートしたはずの関数などが、「クラス」内で使えないことが不満だった。かといってすべて「パッケージ」にするのはちょっとしたシミュレーションを作るときなどに不便である。BEGIN や import、eval、Exporter などを組み合わせてなんとかできないかと試したところ、そこそこ満足できる解を見つけた。
最初に断っておくが、私は「プロ」プログラマではないため、Perl も C++ もオブジェクト指向も、知識が不十分の半可通である。また、タイトルではわかりやすさを重視して「C++風」と書いたが、単に最初に書いたように「クラス」内でいちいち use せずに「パッケージ」で一活して use したいというだけの話である。
2010-12-31 09:42:55 (JST) in Perl | 固定リンク
|
| トラックバック (4)
本作は、ずっと以前からアイデアがあり、2005 年ぐらいに sendmail 等のメーラー用プログラムとして一端書き上げたが、組織で運用するようなチャンスもなく、そのままオクラ入りになっていた。死蔵していても無意味だし、せっかく sendmail 等がなくても Perl の標準ライブラリがあれば動くようにしているので、Net::SMTP を直に利用するサンプルとして、私の個人サイトにコソッと置いておくことにした。
random_mail_redirect は、たまにメールをリダイレクトする。
balance_mail_redirect は、最低何人、最高何人にランダムにメールをリダイレクトしたいときに使う。balance_mail_redirect は random_mail_redirect と違い、必ずメールを送ることが保証されている。
中小組織が、メーラーの /etc/aliases などにこのプログラムをフィルタとして使うことを想定している。
そのような組織において、balance_mail_redirect は秘書に仕事を振り分けるのに便利であり、random_mail_redirect は上司が直訴をたまに許すなど、部下のチェックをするのに便利であろうと想像した。苦情処理を分散させたい場合、メールの配送処理を分散複線化させたいときにも使えるかもしれない。
本作はαバーションである。
今では珍しいかもしれないが、shar でまとめてある。このファイルをシェル上でスクリプトとして実行するなり、unshar すれば展開できる。ファイルとしては以下のものが入っている。
|
● |
balance_mail_redirect.pl
|
● |
random_mail_redirect.pl
|
● |
README.alpha.txt
|
|
README.alpha.txt |
は、この記事のもとになったもので、ほぼ同じものである。
|
2010-05-22 21:46:54 (JST) in Perl JRF 作成ソフトウェア | 固定リンク
|
| トラックバック (1)
知人のかなり旧いホームページは、HTTP ヘッダの Content-Type に text/x-server-parsed-html が帰ってくるが、これは .htaccess 等の間違いとされるものらしく、Firefox も IE6 も HTML として処理してくれない。最初、Firefox のユーザー設定ファイルである mimeTypes.rdf をいじって個人的な解決を図ったが、調べるうちにどうも不可能であることがわかった。そこで、次善の策として、外部プログラムに URL を渡し、そこで適当な処理をほどこしてから、Firefox に戻して表示させることにした。
2010-04-08 23:19:50 (JST) in Cygwin Perl Firefox | 固定リンク
|
| トラックバック (0)
それで次のようなことをしようとしたんだけど、pipe のコマンドの引数をリストでは渡せないっていわれる。
|
open(GPG, '-|', $GPG, '--list-keys') or die;
|
しょうがないので、コマンドラインを連結しましょうということになったのだが、Windows の cmd.exe の構文がわからない。
ググってみると《
CMD.EXE TIPs》という Wiki に構文が書いてあった。そこの文章を参考にいろいろ試してみたけど、次みたいのでいいのかな?
|
sub quote_for_command {
my $r = "";
while (@_) {
my $arg = shift;
$arg =~ s/\%/^\%/gs;
$arg =~ s/"/"""/gs;
$r .= " " if $r ne "";
$r .= "\"$arg\"";
}
return $r;
}
|
でもこういうのは需要あるはずだから探せば見つかりそうなものなのに、 Perl でやってるのを、ちょっと見つけられなかった。
更新: |
06/02/26 |
初公開: |
2006年02月26日 05:47:05 |
最新版: |
2006年03月11日 03:58:07 |
2006-02-26 05:47:03 (JST) in Perl Windows アプリ | 固定リンク
|
| トラックバック (0)
Firefox の .xpi をいじろうとすると、locale の部分で .properties の拡張子を持ったファイルを JAVA で使える形式にしないとダメなんだそうだ。そのためのコマンドとして
native2ascii というものが
JDK に入っているらしい。
ものすごいテキトー。フィルタらしく一行づつ処理せず、ファイル全部をいったん読んで、一気に処理してる。--encoding=japanese と指定すると自動判別するんだけど、guess_encoding も最初の n バイトとかじゃなくて、全部わたして guess させてる。
まぁ、自分が使えりゃそれでいいし、ダメだったら JDK をすなおにインストールすればいいし。
■ |
更新
2006-02-28 |
|
2006-02-26 |
公開。
|
|
更新: |
06/02/26,06/02/28 |
初公開: |
2006年02月26日 05:31:34 |
最新版: |
2006年02月28日 03:47:16 |
2006-02-26 05:31:33 (JST) in Perl Windows アプリ JRF 作成ソフトウェア | 固定リンク
|
| トラックバック (1)
さっき気付いた。ここに載っていた 'lwp-request GET' をそのまま使うと、何か変な HTML データが先に表示される。よく見ると、'lwp-request -m GET' じゃないとダメだった。
参考に次のような感じになる。
|
$ /usr/bin/lwp-request GET | head
<html>
<head>
<title>Great Eastern Technology - Sun, Silicon Graphics, SGI, Sales, Repair, Maintenance and Alias/Wavefront 3D Animation and Graphics</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<META name="keywords" value="Sun, Sun Microsystems, Sun Microsystems, SGI, Silicon Graphics, SGI
Maintenance, Silicon Graphics Maintenance, Sell,
Buy, Repair, Support, Maintenance Contract,
Refurbished SGI, Rapid Prototyping, Rapid Prototype, ZCorp Printer, Alias, Alias/Wavefront, Maya, 3D
Software, Network Services, System Integration,
SGI Maintenance Training, Animation Software,
|
lwp-request 内で URI::Heuristic::uf_uri を使って GET を http://www.GET.com に展開しているため、このようなことが起きている。
さすがに GET を展開するのは、いくらなんでも要らんだろう。
更新: |
06/02/21 |
初公開: |
2006年02月21日 04:29:27 |
2006-02-21 04:31:05 (JST) in Perl HTML/XML/CSS | 固定リンク
|
| トラックバック (0)
現在、Cygwin の setup でインストールされる openssl-0.9.8a を使うと、 Crypt::SSLeay が make test で失敗します。openssl-0.9.8-2 などにすれば大丈夫なはずです。
'lwp-request -m GET https://...'が失敗するのも同じ理由と思われます。 Crypt::SSLeay が対応するまで openssl-0.9.8a を使わないようにするのが今のところの対処法のようです。
更新: |
06/02/16,06/02/21 |
初公開: |
2006年02月17日 13:18:10 |
2006-02-21 04:15:15 (JST) in Cygwin Perl | 固定リンク
|
| トラックバック (2)