メッセージ。 - プログラミングしていてモヤモヤーッとたまに感じること
# プログラミングしていてモヤモヤーッとたまに感じること
最近は、辞書作りに凝っていたりするふじさわです。
たとえば、日々増えていくファイルの一覧を作って、後で検索しやすくしたり、スパムメールを受け取ったら、そこに含まれるURLをブラックリストに追加したりということをしたいなぁと思いまして。
それでまぁ、辞書だ辞書、自分オリジナルの辞書を作って、ぬか床みたいに大事に育てていくのがこれからのビジネスなのだこれはSBSのタグと等価であり、より抽象化されたメソッドだなどと頑張っているわけです。で、何はともあれ辞書を作るべくデータをファイルに保存するのですが。
簡単なツールを作ってそういう作業をラクにしようとして、いろいろ作ったりしています。で、ここからが本題。辞書のフォーマットは、エディタで編集しやすいよう、1行に1項目ということにしようと思っとります。で、辞書なので、重複する行はないようにしたいわけですね。そこをツールでなんとかすると。
具体的には、add-dict.scmみたいなスクリプトを書いて、「あ、この単語は辞書に登録しよう」と思ったときに「$HOME/tools/gauche/add-dict.scm なにか適当な単語」と実行すると、
(1)エディタが起動して辞書ファイルを開き
(2)ユーザーがファイルのどこかに「なにか適当な単語」を追記する
(3)エディタが終了したことをスクリプトガ検知して、編集されたファイルを重複行がないよう適当にソートして保存しなおしてくれる
というエディタのラッパーを作ろうとしています。まぁこのへんは技術的に何も難しいことではないのですが、めんどくさいなぁと思うところもあります。(3)のところなんですが、「1行1項目の辞書としてファイルを開いて、ソートして重複行を取り除いて保存」という操作ぐらいは、プログラミング言語の標準ライブラリとして提供されていてほしいな、と。
あ、これってCPANみたいな仕組みが欲しいって言っているのかな。
たとえばGaucheを使っていると、マニュアルの質がとても高くて、使える関数の一覧をながめて欲しい機能を見付けてくるのがすごくラクなんですよね。なんというか、安心感がある。それはマニュアルの質が高いだけではなくて、Gaucheで提供している関数が、十分に洗練されていて、ちゃんとメンテされていて、長く使えるものだと分かっているという側面が大きいのだろうなと感じます。
逆に、自分で作るライブラリ関数、たとえば前述したような辞書をゴニョゴニョする関数なんかは、どうにも寿命が短い。何か月か使っていると飽きて「もっといいやり方があるはずだ」と思ってしまうし、しばらく使わないと使い方を忘れてしまう。そうやって、使いもしない中途半端なライブラリが、死屍累々と$HOME/tools/gaucheの下にたまっていってしまうのです。
この原因の1つには、ドキュメントを書かないのがいけないのかなと思うんですよね。自分で作ったライブラリ関数のAPIを、それこそGaucheのマニュアルに似せてちゃんと管理するというのはすごく重要な気がします。ドキュメントがあれば、後でまた「こんな機能が欲しい」と思ったときに探せますし、一覧になっているからこそ、そういうことができるわけで。逆にそうでないと、せっかく作るスクリプトの寿命が、とても短かくなってしまいます。また、「辞書をゴニョゴニョする」というような、ちょっと高いレイヤのライブラリというのも、いつまでたっても生まれない気がするんですよね。
ということで、
(1)もうちょっと高いレイヤのライブラリ関数がほしいなぁ〜。Perlのように何も考えずに使えるような、人間を堕落させるようなやつ
(2)ドキュメント重要。簡単にドキュメントを一元管理できるようなフレームワークとかあったらいいかなぁ
(3)やっぱりGaucheForgeみたいなのがあるとうれしいのかなぁ……
(4)さぁてとりあえず辞書スクリプトの続きを書くかなぁ
などと思ったのでした。
たとえば、日々増えていくファイルの一覧を作って、後で検索しやすくしたり、スパムメールを受け取ったら、そこに含まれるURLをブラックリストに追加したりということをしたいなぁと思いまして。
それでまぁ、辞書だ辞書、自分オリジナルの辞書を作って、ぬか床みたいに大事に育てていくのがこれからのビジネスなのだこれはSBSのタグと等価であり、より抽象化されたメソッドだなどと頑張っているわけです。で、何はともあれ辞書を作るべくデータをファイルに保存するのですが。
簡単なツールを作ってそういう作業をラクにしようとして、いろいろ作ったりしています。で、ここからが本題。辞書のフォーマットは、エディタで編集しやすいよう、1行に1項目ということにしようと思っとります。で、辞書なので、重複する行はないようにしたいわけですね。そこをツールでなんとかすると。
具体的には、add-dict.scmみたいなスクリプトを書いて、「あ、この単語は辞書に登録しよう」と思ったときに「$HOME/tools/gauche/add-dict.scm なにか適当な単語」と実行すると、
(1)エディタが起動して辞書ファイルを開き
(2)ユーザーがファイルのどこかに「なにか適当な単語」を追記する
(3)エディタが終了したことをスクリプトガ検知して、編集されたファイルを重複行がないよう適当にソートして保存しなおしてくれる
というエディタのラッパーを作ろうとしています。まぁこのへんは技術的に何も難しいことではないのですが、めんどくさいなぁと思うところもあります。(3)のところなんですが、「1行1項目の辞書としてファイルを開いて、ソートして重複行を取り除いて保存」という操作ぐらいは、プログラミング言語の標準ライブラリとして提供されていてほしいな、と。
あ、これってCPANみたいな仕組みが欲しいって言っているのかな。
たとえばGaucheを使っていると、マニュアルの質がとても高くて、使える関数の一覧をながめて欲しい機能を見付けてくるのがすごくラクなんですよね。なんというか、安心感がある。それはマニュアルの質が高いだけではなくて、Gaucheで提供している関数が、十分に洗練されていて、ちゃんとメンテされていて、長く使えるものだと分かっているという側面が大きいのだろうなと感じます。
逆に、自分で作るライブラリ関数、たとえば前述したような辞書をゴニョゴニョする関数なんかは、どうにも寿命が短い。何か月か使っていると飽きて「もっといいやり方があるはずだ」と思ってしまうし、しばらく使わないと使い方を忘れてしまう。そうやって、使いもしない中途半端なライブラリが、死屍累々と$HOME/tools/gaucheの下にたまっていってしまうのです。
この原因の1つには、ドキュメントを書かないのがいけないのかなと思うんですよね。自分で作ったライブラリ関数のAPIを、それこそGaucheのマニュアルに似せてちゃんと管理するというのはすごく重要な気がします。ドキュメントがあれば、後でまた「こんな機能が欲しい」と思ったときに探せますし、一覧になっているからこそ、そういうことができるわけで。逆にそうでないと、せっかく作るスクリプトの寿命が、とても短かくなってしまいます。また、「辞書をゴニョゴニョする」というような、ちょっと高いレイヤのライブラリというのも、いつまでたっても生まれない気がするんですよね。
ということで、
(1)もうちょっと高いレイヤのライブラリ関数がほしいなぁ〜。Perlのように何も考えずに使えるような、人間を堕落させるようなやつ
(2)ドキュメント重要。簡単にドキュメントを一元管理できるようなフレームワークとかあったらいいかなぁ
(3)やっぱりGaucheForgeみたいなのがあるとうれしいのかなぁ……
(4)さぁてとりあえず辞書スクリプトの続きを書くかなぁ
などと思ったのでした。
Comment
Trackback