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-03-13[n年前へ]

今日の疑問 

 Linuxでg++でアプリケーションを作るときに、起動されたアプリケーションが「そのアプリケーションが置いてある場所」を知るにはどんな関数を使えば良いものなのでしょう?ファイル出力などが必要ない(system()+whichを使ってパスをファイルに吐いて、というようなものでない)方法はどんなものなのでしょう?

一般的な方法はないと思います。Unixのファイルシステムでは、バイナリはハードリンクで複数のパスを持てますし、ファイル実体からそのファイルのパスを参照する方法はありません。(極端な話、アプリケーション起動後にそのバイナリファイルをunlinkしてしまえば、「パスを持たないけれど走っているアプリケーション」になります---「このプログラムは実行終了後自動的に消滅する」ってわけです)。Unix上で、お望みの動作を得るのによく見る方法は、 * argv0を見て、それが絶対パスならそれを採用 * argv0を見て、それが相対パスならgetcwd()して絶対パスに直す * そうでなければ、PATH環境変数をひとつづつ探すというものです。上記の手順はよく使われるので、ライブラリもいくつか存在すると思います。例えばglib (www.gtk.org) の g_find_program_in_path()等は使えると思います。
 ありがとうございます。川合さん

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-13[n年前へ]

れっつ! 日本語(ひらがな)プログラミング(ATOKで…) 

 というわけで、ATOKでrubyでもawkでもperlでもなんでも使うことができるソフトウェアを作ってみたわけです。しかも、今度のバージョンはCONFIG.TXTに自分で定義した関数や置換ルールを決めておくことができるわけです(結局どちらもただの「辞書登録と同じ」置換ルールに過ぎませんが)。これで、ATOKの辞書登録は64文字までよルールに縛られずに済むわけです。「にちじ(日時)」でも「じこく(時刻)」でも何でもやり放題です。

 で、このバージョンでは、そのCONFIG.TXTの定義次第で一見ヘンに見える色んなことができます。例えばCONFIG.TXTの作り方次第では

「0」のこさいんをしゅつりょく
なんて入力して変換すると
perl -e "$param=0;$param=cos($param);print $param;"
が実行されて、"1"という計算結果が表示されたり、
「でんたく」をきどう
を入力・変換すると電卓が起動したり、
「かいぎょう」のかずをしゅつりょく
をAMET変換すると、クリップボードに保存されている内容中に改行コードが何回出てくるかを出力したり、なんてことも簡単にできるわけです。もちろん、大阪弁や津軽弁のルールを決めておいて、お国言葉でプログラミングをしてみるのももちろんアリに違いありません。

 というわけで、「レッツ!日本語(ひらがな)プログラミング」です。ATOKユーザーで何かのスクリプト言語や一般的なプログラミング言語を使う方なら、このソフトをインストールして、ぜひぜひCONFIG.TXTをテキトーに仕立ててみましょう。懐かしの「ぴゅう太日本語ベーシック」顔負けの、あなただけの「ひらがなプログラミング言語」を作ってみるのも面白いかも。えっ?全然面白くない…ですか?

2004-06-01[n年前へ]

色んな携帯計算機 

 先月発売の日経サイエンスに収容所で生まれた世界初のポケット計算機というクルタ計算機の記事が掲載されていた。グルグル回転錠(何ていう名前なんだっけ?)あるいはルービックキューブみたいな手回し計算機をシミュレータで使うことだってできる。これは思わず欲しくなる。

 思わず、理系の人であれば愛用していたハズのhp関数電卓とこんな機械式携帯計算機を眺めてみたり機械式計算機からPCまでのコンピュータの歴史を眺めてみたりするのも面白いかも。



■Powered by yagm.net