続々々々々続々GShell − find

社長:いやー、今日も夏のやつは本気モードですね。

基盤:7:25現在ちょうど30.0度です。

開発:あーそれで、昨日の版のGShellのプラグインの性能についてちょっと補足します。100マイクロ秒ほどかかっていたのはコーディングのミスで、実際には50マイクロ秒未満でした。これはもう、内蔵のechoと同等な時間なので、プラグイン呼び出しのオーバヘッドは無いと考えて良いと思います。

開発:ただ、プラグインとのデータのやりとりがナマのやり取りなのか、シリアライズ的な事をされているのかは不明です。ナマで無いとすると、大きなデータのやり取りが重くなると思います。

社長:うーん、50usで上げ下げすると100us、10KHzなんですよね。これって、人間の可聴域上限に達しています。プロセススイッチとかあって時間精度の問題はありますが、動力の上げ下げでけっこうきれいなメロディが作れると思います。何か出力装置は無いですかね。

基盤:こないだiMacの増設メモリのついでにアマゾンで買った電子工作キットに圧電スピーカ入ってますね。

社長:おおっと!1,980円でてんこ盛りじゃないですか。圧電スピーカとか、RSから単品で買ったら200円位しますよね。

経理:99%以上は流通経費ということでしょうかね。

基盤:この福袋みたいのの中身、それぞれ単品で買って揃えたらすごい金額になりそうですw

開発:しかも返品とかできるんですかー。

基盤:ラズパイの出番ですね。

社長:いやー、これをMacから鳴らせたら面白いですけどね。組み込み系にmacOS Goで参入する!

開発:ユーザプロセスに直接デバイスを触らせてはくれないでしょうからね… そもそもGPIOみたいのは無いし。

基盤:シリアルに出せばいいんじゃないですかね。こういうの。

基盤:安いのは200円以下のもあります。

開発:で、Tx信号を圧電スピーカーに突っ込むw

社長:どういうテキストとかバイナリを流し込んだらどんな音になるか、面白そうですねw

開発:まじめにやるなら特定の符号でOn/Offを決めてホールドできると良いですけどね。

社長:そういう製品はあるんじゃないですか。たぶんコマンドで。脳みそが必要なので高そうですが。でも、けっこうな脳みそのあるARMチップでも100円もしないんですよね。

基盤:かなり脳みそが貧しいですが130円の評価基板もあります。

開発:8bit マイコン!超面白そう。

基板:STM8S103、16MHz CPU、8Kbyte Flash、1Kbyte RAM、UARTx1です。

社長:十分ですね。でもARMじゃないマイコンていじったことが無く。ああ、アトメルはありましたね。Arduinoで開発できればそれでOKですかね。

基板:IARでイケるようです。

開発:ボーレート的には9600か4800くらいにしないと音にならないでしょうね。

社長:そもそも安物の圧電スピーカって4KHzくらいがせいぜいだと思います。

基盤:これって要するに、モデムの通信を耳で聴くのと同じ話ですよね。ぴーひょろろーっプギャーッてやつ。

社長:当社はデータの見える化、聞こえる化にも取り組んで参りましょう。

* * *

開発:さて今日は、GShellの中核中の中核、find に取り組みたいと思います。

社長:いわゆるところの find コマンドですね。

開発:そうですが、ファイルというかリソースを見つけて何かの処理を適用するというのを、全部これでやりたいと思います。典型的には whichとかlsとかdu。あるいはshell自身におけるファイル名のワイルドカードの展開。

社長:まあ機能的に見たらlsはfindの出来損ないがprとくっついたみたいなもんですね。

開発:処理を適用した結果をまたfindで取りまとめられることが必要だと思うんです。たとえば、duはfindで結果を取りまとめることで実現できるはず。あるいは、wc にだってduと同様に再帰的にディレクトリ階層をなぞってほしい。

開発:適用する処理の指定については、find の -ls オプションに強く影響を受けています。オリジナル find の -ls は -exec ls -ld "{}" ";" に相当するオプションだと思いますが、--ls とだけ書けることの使い勝手へのインパクトは大きいと思います。なのでGShellではこれまで、which、pwd、chdir、history、plugin、find の各コマンドに -ls オプションを付けました。

開発:あるいはtar。これもディレクトリ階層をなぞるプログラムですが、findしたファイルのメタ情報とコンテンツを次々に吐き出す形で実現できるはずです。

開発:オリジナルのfindでduを実現できないわけではなく、-ls の出力を集計すればよいわけなのですが、要は面倒くさい。結果を集計する機能が無いのが問題だと思います。

開発:あるいは、findした結果、新しいファイルの順に表示する。ls -t ではできることです。これもオリジナルfind -ls と sort でできないわけではないですが、面倒くさい。

社長:sort とかは結局全てが終わらないと実行できないから、find との並列処理がいまいち美味しくない気はしますね。

開発:それも、部分的にソートしておいてあとはマージソートすれば良いのかなと思います。まあ、これもオリジナルfindで出来ないわけではありませんが、要は面倒くさい。

基板:数分以上かかるfindとかtarの途中経過というか、選挙速報的なものは欲しい思いますね。

-- 2020-0814 SatoxITS