hirax.net::Keywords::「数式処理」のブログ



2004-02-06[n年前へ]

PDLSバージョンアップ 

 PhotoshopのプラグインをC言語などで簡単に作成することのできる環境のPDLSをバージョンアップしてみました。今回の変更点は、
(1) 「作業過程を記録したマクロ」内で変数(定数)宣言を使うことができるようにし、マクロを関数(DLL作成関数と同様にパラメータを外部から指定することができる)として使うことができるようにした
(2) マクロからマクロ(関数化されたものも、あるいは、されていないものも)を呼び出せるようにした
(3) 関数化されたマクロをGUIから実行時する際にはパラメータ選択ダイアログを出して、マクロ内で定義された変数の値を実行時に自由に変えられるようにした。すなわち、DLLとして作成した機能拡張と同様にマクロで作成した機能拡張関数においてもユーザーインタフェースが使えるようになった
というところです。

 Photoshopを使いつつ、画像処理のプログラミングを簡単にやってみたい方は使ってみるのも面白いかもしれません。また、比較的大きなサイズの二次元データ(画像)を扱う機会が多い方でしたら、とりあえず鳥瞰図プラグインやセル表示プラグインを使うためだけに使ってみても、意外に便利で重宝するんじゃないかと思います。

 また、FilterFactoryなどとは違って、16bitのCMYKモードやLabモードでも使うことができるので、そういったモードで数式処理プラグインでも使って、FilterFactoryっぽく使ってみるのも意外に面白いかもしれません。

 ちなみに、動作環境はPhotoshop6.0以降で、CS(8.0)でも動作確認済みです。

2004-04-09[n年前へ]

ATOK用perl機能追加プラグイン 

 ATOKの変換機能を使ってperlのコマンドを使うことができる「ATOK用perl機能追加プラグイン」を作ってみました。これは、以前作ったATOK用コマンドライン機能追加プラグインを機能縮小・変更したものです。動作するためには、ATOKとperlがWindowsにインストールされている必要があります。

 このソフトウェアを使うと、ATOK上で半角英数で入力中に、例えば

print sin(3)/5
と入力して、「AMET変換」をすると、
0.0282240016119734
と出力されますし、
system(calc)
なんて入力・変換すると計算機が起動します。ちなみに、クリップボードにテキスト形式のデータが入っていれば、その内容に対して処理をすることができます。つまり、テキストデータの羅列がクリップボードにコピーされている状態で、
while(<>){print $_;}
なんて入力・変換すると、クリップボードの中身がそのまま出力されるわけです。もちろん、その内容に何かの処理をするのも当然アリでしょう。例えば、エディタで作業中に「全選択」「コピー」して、perlのコマンドで全体に処理をかける、なんていうことも朝飯前です。

 ちなみに、出力結果が長く(200文字程度以上に)なるときには末尾に"&"を付けて下さい。また、ATOK数式処理プラグインと同じように、末尾に"="をつけると入力内容も表示されます。その場合、
print sin(3)/5=
と入力すると、
print sin(3)/5 = 0.0282240016119734
と変換・出力されます。

 というわけで、これからATOKとperlとこのプラグインさえあれば、どんなソフトもperlの機能が利用できるわけです。正規表現を利用した処理でも数値計算でもなんでもござれ、というわけです。AMETを使ったことがない人は、AMET変換をワンアクションでできるようにしておくようにした方が良いでしょう。

 ちなみに、これは、一言で言ってしまうとperlのワンライナーが使えるようにする機能拡張ということになりますが、もしかしたら今後、履歴保存もできるようにするかもしれません。詳しくは、日曜日にでも書くと思います。とりあえず、ATOKユーザーでperl好きな人には便利かも。周りの人をちょっとビックリさせ自慢してみるためダケにでも、いかがでしょうか?

2004-04-12[n年前へ]

ようこそ「辞書単語登録プログラミング」の世界へ 

ATOKではじめるperlスクリプト


 日本語を使う日本人として、PCを使っていて不便を感じることは多い。例えば、URLを入力するときには半角英文字入力モードに切り替えてキーをタイプしなければならないのに、その一方メールを書くときにはATOKの全角ひらがな入力モードに切り替えてキーをタイプし日本語を入力しなければならない。そして、そのメールを書いている途中にアルファベットのフレーズが出てくるようであれば、また文字入力のモードを切り替えなければならない。基本的にアルファベットだけを使うラテン語系の言語と違い、日本語のような多くの文字を入力するためにIMEなどのプログラムを使わなければならないとなると、どうにも不便を感じることが多い。そんな時、アルファベット文化圏に生まれなかったことを少し残念に思ったりする。
 

 しかし、短所と長所は紙一重の表裏一体のものである。短所と長所が表裏一体というからには、どんな視点から眺めるかで、その表と裏は短所にもなれば長所にもなるハズである。IMEなどの日本語入力システムを使わなければならない不便さも、少し考え方を変えてみればきっと何かの便利さにも姿を変えるハズである。例えば、「グーグル」なんていう言葉を"
www.google.com"と辞書に単語登録してさえおけば、入力の手間を少し省くことができる。つまりは、日本語入力システムがブックマーク代わりになったりもする。つまり、日本語入力システムを単なる「よみ→漢字」という変換を行うデータベースにしておくのではなくて、「名前→URL」という変換を行うデータベース代わりに使うと便利であったりする。
 

 そんな考えをさらに進めて、少し前にATOK数式処理プラグインなんていうものを作ってみた。JUSTSYSTEMの日本語入力システムATOKに数式処理機能を追加することで、数式計算を日本語入力と同じような感覚でできるようにしてしまうというツールを作ってみたのである。つまり、日本語入力システムを使えば「ひらがなの読みを入力すれば漢字が表示される」のと同じように、「数式を入力すればその計算結果が表示される」というものを作ってみたわけだ。日本語入力システムを使わなければならない不便さを、それを使えば、「どんなに算数が苦手な人であっても、誰もが天才算数少年になることができてしまう」という短所・長所変換システムを作ってみたのであった。

 もう少し言い換えると、「有限の『よみ』を有限の『漢字』に対応させる」といったような「有限のデータベース」だけではなくて、「(色んな無限のパターンがある)数式→(色んな無限のパターンがある)計算結果」という無限のデータベースに日本語入力システムを変えてみたわけである。今回はそんな考えをさらにさらに押し進めて、ATOKの機能を必要以上にムダに機能拡張してみたい。
 

 というわけで、今回は「数式」ではなく「perlスクリプト」プラグインを仕立ててみた(最新バージョンはperlだけでなく、ruby,awk,何でもござれバージョンになっています)。「数式」も「perlスクリプト」も結局は「プログラム言語」であって何ら違いはない(ATOK数式処理プラグインではクリップボードを変数として使うこともできる関数でもあった)わけだが、色々なことを実現しようとするならばperlの方が高機能であるに違いない。そこで、Windowsにインストールされたperlの機能をATOKから使うことができるプラグインを作ってみた。「そんなもの何の役に立つ?」「無意味にムダじゃないの?」と思う人が多いだろうし、その疑いは必ずしも外れてはいないのだが、とりあえず少し使い方の説明をしてみることにする。

 例えば、まずは「perlスクリプト・プラグイン(最新バージョンはperlだけでなく、ruby,awk,何でもござれバージョンになっています)」を使って、これまでの「数式処理プラグイン」と同じようなことをしてみることにしよう。ソフトウェアをインストールした後でATOK上で半角英数で入力中に、まずは
 

print sin(3)/5

と入力して「AMET変換」すると、
 

0.0282240016119734

という風に計算を行った結果が出力される。もちろん、これまと同じように入力語句の末尾に"="を付けて
 

print sin(3)/5=

と入力して「AMET変換」すると、
 

print sin(3)/5 = 0.0282240016119734

というように、入力スクリプトとその実行結果(計算結果)が共に出力される。なんと、これでATOKユーザーならばperlの数式処理機能を全て文字入力中に使うことができるわけである(perlがインストールされていれば)。
 
 

 また、クリップボードにテキスト形式のデータが入っていれば、その内容が入力されたファイルがperlスクリプトに引数として渡される。だから、例えばクリップボードに
 

いろはにほへと
ちりぬるをわか
よたれそつねな
らむうゐのおく
やまけふこえて
あさきゆめみし
ゑひもせす

なんていうデータが入っている時に、ATOKの文字入力で
 

$i=1;while(<>){print qq/$i: $_/;$i++}&

と入力(末尾の&は出力結果が長くなるときのおまじない)して変換すると、クリップボードにコピーされていたデータを
 

1: いろはにほへと
2: ちりぬるをわか
3: よたれそつねな
4: らむうゐのおく
5: やまけふこえて
6: あさきゆめみし
7: ゑひもせす

と行番号付きで出力することができる。

 つまり、ATOKを使う限りにおいては、どんなアプリケーションであってもperlの機能を使うことができるわけだ。上の行番号を出力した例のように、メモ帳からでもあるいはノートパッドからでもperlの機能を使った機能拡張をすることができるわけだ。メモ帳ですら、perlの正規表現を駆使した整形処理をすることができるようになるのである。
 

 えっ?こんな「perlスクリプト」を入力するのはメンドくさい?こんな"$i=1;while(<>){printqq/$i: $_/;$i++}&"なんていうプログラムを毎回毎回入力できるハズがない? うーん…何のためのATOK何のための辞書変換、何のための日本語入力システムだろうか? …そう、こんな「perlスクリプト」はただ辞書に単語登録しておけば良い。「ぎょうばんごう」なんていう「読み」で"$i=1;while(<>){printqq/$i: $_/;$i++}&"という文字を登録しておけば済むのである。すると、最近のATOKであれば予測入力すらできてしまうから、二回目からは「ぎょう」という辺りまで入力したときにはすでに「perlスクリプト」が表示されているハズなのである。これがATOKではじめる「辞書単語登録プログラミング」なのである。これからの時代は「入力予測システム」「プログラム・データベース」「クリップボードを用いたファイル不要のプログラミング」という実にお気楽環境なのである。
 

 そのお気楽プログラミングでどんな便利が手にはいるかというと、例えば「じこく」という「読み」に
 

($s,$m,$h,$d,$o,$y,$w,$i)=localtime;print qq/$h:$m:$s/;

というような、文字を登録しておけば、「じこく」でAMET変換すると
 

0:18:16

という風に時刻を表示させることもできるし、例えば
 

ねん = "($s,$m,$h,$d,$o,$y,$w,$i)=localtime;$y+=1900;print qq/$y\//;"
がっぴ = "$s,$m,$h,$d,$o,$y,$w,$i)=localtime;$o++;print qq/$o\/$d/;"
じかん = "$now=localtime;print qq/ $now /;"

なんていう風に登録しておけば「ねん+がっぴ」を変換すれば
 

2004/4/12

になるし、「じかん」であれば
 

 Mon Apr 12 00:22:27 2004 

というように自動入力することだってできるのである。
 

 もちろん、system関数だって使えるわけだから、他のプログラムの機能を使うことだってできる。もちろん、他のプログラムの機能を使うまで行かなくても、他のプログラムを起動だけさせるなんてことだって簡単にできる。例えば、「でんたく」なんていう読みには"system(calc)"というような文字を辞書登録しておけば、「でんたく」と入力しperlスクリプトを表示させた後に変換を行うと、電卓が起動するようになる。
 

 上に挙げたものは、とても簡単なサンプルに過ぎない。おそらく、perlを使いこなす人たちであれば、色んなperlスクリプトで色んな機能をATOKに追加していくことができるに違いない。
 

 というわけで、今回はこんな「ATOKperlスクリプト・プラグイン」のご紹介をすることで、ATOKではじめる「辞書単語登録プログラミング」の世界へようこそと宣言をしてみたい、と思う。Windows上でATOKを使っていて、perl使い、という人がどれだけいるかは判らないが、一行プログラミングならぬ「辞書単語登録プログラミング」も面白いかも、と小さく呟いてみたいと思うのである(ちょっと弱気)

2004-04-21[n年前へ]

「ATOK Perlプラグイン(dos,ruby,awk,その他大勢)」のオマケが豪華に。 

竹内均 ATOKからテキスト・画像の操作が自由自在のATOK Perlプラグイン(dos,ruby,awk,その他大勢)をアップデートしました。サンプル・プログラムも「画像読み込み」「漢字アート」「アスキーアート」「美人フィルタ」「ブサイクフィルタ」等豊富に揃っています。各コマンドプログラムもオプション等を増やしました。また、デフォルトの設定ファイルをperl用でなく、DOSプロンプト用にしておきましたので、perl等を使わない方も楽チンです(ちょっともったいない使い方だとは思いますが)。

 これを使えば、Windows標準添付のノートパッドが数式処理のMathematicaになったり、画像処理のPhotoshopになったり、エクセルになったり、…可能性は無限大(ちょっとウソ)です。ソフトをわざわざ切り替える世界なんて、不便ですよねぇ?漢字もプログラムの別名として使えるというのも結構面白いですよ。

2004-04-25[n年前へ]

「辞書単語登録プログラミング」 面白一発芸 編 

「文字」も「画像」も自由自在だぁー

 Windows上で日本語を入力するためには、(Windowsに標準添付されているMS-IMEのような)IMEと呼ばれるソフトウェアを使わなければならない。前回、そんなIMEの一つであるジャストシステムのATOKから、さまざまなプログラムを呼び出すことのできるツール(AmetMulti)を作ってみた。ATOKから、(AMETと呼ばれる機能を使って)perlやawkといったコマンドライン上で動くプログラムを呼び出すことができるようにしてみたのである。
 しかし、そんなツールの使用例として前回紹介したのは数式処理だったり、日時処理だったり、文章整形だったり、と少しばかり一般受けしない内容だったように思う。便利ではあるのだが、何だか内容が少しばかり地味であったように思う。だから、実際「ホラホラ、このツール便利でしょう?」と周囲の人に自慢してみても、デモをして見せた相手の人達の反応がどうにも良くなかったのである。

 いや、面白がる人達もいるにはいるのだが、そんな人達は間違いなくATOKを使っていなかったり、そもそもWindowsを使っていないのである。マニアックなEmacs使いの変人であったりしたのである。
 だから、Windowsを使っていて、Windows上でATOKを使っている人は数式処理や文章整形にはこれぽっちも興味を示さないし、そんな内容に興味を示す人はWindowsもATOKも使っていないし、というなんともイマイチの状態だったのである。そのため、私の「他人に自慢したいココロ」はちっとも満たされず、欲求不満の毎日だったわけである。
 

AmetMultiの使用例
数式処理例時間処理例文章整形例
入力print sin(3)/5ねんがっぴ じこくぎょうばんごう
変換結果0.0282240016112004/4/12 0:18:16 0001: いろはにほへと 
0002: ちりぬるをわか 

 そこで、Windows上でATOKを使っているライト・ユーザー(偏見たっぷり)の興味を惹くために、そして私の「他人に自慢したいココロ」を満たすために、私はAmetMultiの機能を少しばかり(だけど見た目は大幅に)変えてみたのである。ATOK等の「IMEは文字入力をするためのもの」という先入観を捨てて、ATOKから画像を入出力することができるようにしたのである。つまり、文字を入力するとその文字に応じたプログラムが起動して、文字変換結果が画像となって出力されたりするようにしてみたのである。地味な数式処理や文章整形ではなくて、ド派手な画像でデモをすることにしたわけである。AmetMultiで画像入出力をしている様子 
 
 

 例えば、それはこんな感じだ。ワードパッド上で、私の辞書設定で「仲間由紀恵」と入力(AMET)変換すると仲間由紀恵の画像が出力されるのである。理由は簡単、私の「(ATOKではなく、AmetMultiの)辞書」には「仲間由紀恵」という単語に対して、「仲間由紀恵」の画像を出力するプログラムが登録されているからである。「仲間由紀恵」という文字が示す内容が、(機能アップされた)ATOKによってそのまま画像となって出現するわけである。


 そして、もちろんそれだけではなく、その後に「美人」なんて入力して(AMET)変換すると、アララビックリ美人化された仲間由紀恵の画像が出力されるのである。「仲間由紀恵」「美人化」という文字入力結果がこれまたそのまま、ワードパッドの文章上に「画像となって出現するのである。「辞書単語登録プログラミング」の思想の凄いところは、入力した文字を表すプログラムが呼ばれ、その結果単なる辞書変換では実現できない「単語を表す適切なもの」が出現するところにあるわけだ。今回の場合は、入力したユーザーの求めに応じて「美人化された仲間由紀恵」が何の苦労もなく出現するところなのである。
 もちろん、今回のモデルは仲間由紀恵なので、「美人化」するまでもなく十分美人であるわけだが、もしも「美人化」をしてもまだまだ「改良の余地有り」のお顔であるような場合は、すかさずさらに「美人化」「美人化」と連打・変換すれば良いだけなのである。画像処理プログラムを意識して使うこともなく、普通のワープロ上でそんな作業がデキルのである。(また、使う用途はほとんど無いとは思うが、「不細工」と入力し変換すれば画像の「不細工化」もできる)

 この右の例ではワードパッドを使ったが、もちろんATOKを使ってさえいれば良いのである。だから、それは別にMSWORDでもExcel上でも良いわけだ。単に画像を貼り付けることができるソフトウェアでありさえすれば、何でも良いのである。

 しかも、だ。もしも、画像を貼り付けることができないソフトウェア上であれば、ただこう入力すれば良いのである。「漢字アート」と。すると、アラアラ不思議、すると画像が漢字のアスキーアートとなって変換されるのだ。もちろん、アルファベットで画像を出力したければ、「アスキーアート」と入力変換すれば良いだけである。そうすれば、純粋なアルファベットからなるアスキーアートとして仲間由紀恵が出力されるわけだ。そう、文字で入力した結果が「ある時は画像」で、「またある時は文字」で、文字と画像を自由自在・縦横無尽に変換しまくることができるのである。こんな機能があれば、例えばメールに自分の顔を文字で描いた署名を付けるなんていうのも簡単に行うことができたりするのである。もちろん、その際にはその顔文字を出力するルーチンを「署名」という単語としてでも登録しておけば楽になるだろう。
 

 ところで、ここまではAmetMultiに標準添付されている機能(仲間由紀恵画像出力機能は標準添付ではないが)でできることを眺めてみた。しかし、便利に使うことができる色んなソフトを使えば、さらにAmetMultiの使い勝手はアップする。例えば、GnuPlotの機能を使えば、数式のグラフ出力がATOKを使って行うことができるようになったり、表をコピーしてその内容を自動でグラフに描画して変換出力することができたりする。

 あるいは、WinGraphVizでも使えば、これまた面白いことができる。例えば、マンガ・アニメの「名探偵コナン」の登場人物達の関係を説明する

コナンは蘭を好き
蘭は新一を好き
コナンは新一に戻れない
なんて文章を入力した上で、その内容をクリップ・ボードにコピーしてみよう。そして、例えば「関係」だなんて入力・変換すると、その三人(コナン・蘭・新一)の関係が図になって変換出力されるわけである。これは、マンガの登場人物の例だが、例えば入力する内容を職場の人間関係や恋の悩みに置き換えてみると、色んな面白いことができるわけである。曖昧模糊とした人間関係を豹変する言葉を入力・変換すると、その曖昧模糊とした関係が見事なまでに表現された図を手に入れたりすることができるわけである。
 
 
 
GnuPlotを使った例WinGraphVizを使った例
入力語句「sin(x)*sin(y/2)」のグラフコナンは蘭を好き
蘭は新一を好き
コナンは新一に戻れない
(上の文字を入力コピー後)関係
変換結果

 AmetMutiやその他のツールによりパワーアップされたATOKを使えば、適当に入力した文字(数式)の内容が表現された様々な形の結果を得ることができる。「辞書単語プログラミング」により、文章の内容を「それを表現する適切な文字」のみならず「それを表現する適切な画像」に変換したりすることもできるようになったのである。「辞書単語登録プログラミング」の新たな世界を勝手に作ってみたわけなのである。
 

 で、当然私は「他人に自慢したいココロ」を満たすために、周りの人に上のようなデモを色々としてみた。この面白一発芸風のデモを見せれば、必ずや「辞書単語登録プログラミングの面白さ」が伝わるに違いない、と信じてデモをしてみたわけである。前回の数式処理・時間処理・文章整形なんかのデモと違って、派手で面白さも伝わるに違いない、と考えて必死にデモをしてみたわけである。
 しかし、結果は散々なものだった。「へぇ~、面白いね~、その漢字アートってぇ」 とか、「そー、そー、こんな人間関係とか、恋の悩みってあるよねー」「これって使えるかもー」という風に今度はそのサンプル・アプリケーションにばかり聴衆の興味は集中して、誰も「辞書単語登録プログラミング」に興味はこれっぽっちも持ってはくれなかったのである。誰も「辞書単語登録プログラミング」なんて言葉を口にすることもなく、私の「他人に自慢したいココロ」はやはり満たされぬままに終わってしまったのである。「辞書単語登録プログラミング」の新たな世界を開くハズが、単なる面白一発芸で終わってしまったのである。Windows上でATOKを使っているライト・ユーザー(偏見たっぷり)のココロを掴むのは実に難しいのである。

 しかし、である。私はあきらめない。「辞書単語登録プログラミング」動画表示編(アスキーアートでパラパラ動画)や、「辞書単語登録プログラミング」エミュレータ編(ATOKからMS-IMEを使ってみよう編)など、できる限りの力を尽くし世間の役に立ちまくりのアプリケーションを作ることで、「辞書単語登録プログラミング」の可能性を広めていきたいと誓うのである(大ウソ)。一回作ったからには、放置プレイにしたりはしないと誓うのである(100%の確率で大ウソ)。



■Powered by yagm.net