全く新しいアーカイブフォーマット

社長:ただいま°ー!

経理:酒臭いですね。

社長:12LSUを投じたメンタルヘルスケアプロジェクトを完遂して参りました。

経理:ストレススーパーフリーなのに。

社長:あそれで、マスターから仕入れた話なんですが、あの新庄君が現役復帰とかなんとか。

基盤:新庄 現役で検索… 確かにそういう話はあるようですね。

開発:まだ48歳みたいだし、野球という競技ならあり得ない話では無いですね。

社長:明るい話題ですねー。私はネット記事で栗山くんのしょぼくれ様を見かけるたびに気分が暗くなるのです。

基盤:ノムさんも亡くなっちゃいましたしね。

開発:それで、ソースを検索するのに何十万のファイルをNFSでfind grepしてたらとんでもないなとは思うわけです。それに以前から、全文検索ってgrepで良くね?と思ってたところでもあり。ならばいっそ、検索用テキスト兼用のアーカイブフォーマットを作ればどうかと思ったところです。

社長:コンセプトは?

開発:単にgrepできる単一べたファイルです。複数ファイルを単一ファイルにするので、おまけにアーカイブとしての機能も持たせる。しかも単にcatしただけで結合できる。手作業で編集しても壊れない。

基盤:shar とは違うんですか?

開発:shar だと、grep してもヒットした行がどのファイルだかはわからないわけです。

社長:それは以前言っていた、MIMEのマルチパートの話とは違うんですか?

開発:まーーったく違います。あれ?でもないかな?

基盤:さっきから思うんですが、アース渦巻って目に滲みますね…

開発:何にしても、改行コードで終わる「行」というのは、人間の認識と密接不可分にして、一種の可変長レコードとしてもリーズナブルなサイズである傾向があるわけです。

基盤:蚊取り線香は根っこの勾玉状のとこまでくると達成感を感じますね。あれまで全部キレイに燃えるのが技術の粋のような。

社長:時限爆弾甩にも優秀ですね。あれ?甩、用。なんでしょうねこのヒゲの生えた甩って。

開発:子供の頃は、導火線という単語に萌えましたね。

開発:ああ、それで、shar でもいいですよ別に。shellで実行すると分解される、要件はそれだけですよね。

開発:個別ファイル型的には、png のテキスト表現に萌えますけどね。

* * *

基盤:ふぁぁぁああ。よく寝ました。

社長:もうちょっと寝を3回くらいやりましたねw

開発:それで寝ている間に思ったんですが、HTMLをアーカイブファイルとして使うのもあるかなと。

社長:HTML archive だから har 型式ですかね。

基盤:はあw

開発:これは以前検討した、ウェブページの魚拓型式のベースとしても有用だと思うんです。

開発:ただ、バイナリデータを入れるとするとやはり data uri かなと思うんですが、表現できるサイズの制約があります。

社長:メガバイト程度のHTMLデータなら今のブラウザならへっちゃらですけどね。

開発:span かなにか適当なタグにbase64くらいで入れてidつけてdispaly noneにして、JavaScript で取り出すっていうのが妥当な線かも知れません。

基盤:ファイル名だけで探したいことも多いですよね。ただ、特定のファイル型というか、拡張子だけでフィルタしたことも多い。

開発:となると、自分の中に埋め込まれたデータを検索するJavaScriptが必要だということですね。検索結果をテーブル表示したりとか。グラフ表示なんかもできると良いかな。

社長:検索結果の中で検索語にヒットしたところをハイライトして、その前後の文脈を表示するという機能は絶対必要ですね。

基盤:定義・参照関係がわかる文書なら、関数名のような単語がハイパーリンクになっているとうれしいです。

* * *

社長:ああそれで、今週のあたまにやった片付けごとのたまが打ち返されてきてまして、要するにウェブサイトに配布ファイル群を置く場合に、HTTPサーバでディレクトリのインデックスを動的に作るのはまずいということらしいのです。サーバの運用上の問題かも知れません。

基盤:負荷の大きいサーバだと、性能面でも問題でしょうね。

開発:ああ、それなら find -ls の結果を HTML に変換するだけで済みますね。せっかくなので details タグを活用して。で、どのファイルですかね。

社長:月曜にやったこととか、もう完全に忘れてますからね… ああ、Download にあるこの tgz かな?

基盤:というか、Desktop に原型があるようですが。

開発:ああ、これですね。

* * *

社長:ところで、Parallels は結構使えそうなので、あれに Linux を入れてブラウザの開発環境として使ってみてはどうかと思うのですが。

基盤:お試し版がまだ生きてるはず… ああ、Ubuntu 18.04 がありますね。じゃこれをインストール。

基盤:ぐわー。なんですかこのお手軽高速インストール。ライトセールもびっくりしかもデスクトップ版。

開発:1分でダウンロード・インストールですね。確かに55MB/s 出てましたから、数GB程度のファイルなら出来る計算です。

基盤:なにかマウントされてるなと思ったら、ホストのiMacにマウントされてるドライブがデフォで見えるようになってるわけですね。デスクトップ画面が自在にリサイズするし。

社長:昔はVMwareでそうして使ってましたけどね。あと、ウィンドウ毎にホストの中に表示する、ユニなんとかいう機能とか。

基盤:うーん、このiMacにはSSDを2TB付けましたし、このまんまで Chromiumビルドできそうです。やっておきますか。Linux用のインストールの手引を再び開き…

基盤:その前にVMの接続をブリッジにして… sshログインできるようにして… 自分をsudoerに追加して… git を apt install して… では始めます。git で chromiumをクローン。速度の変動が大きいですが13MB/s程度ですね。

開発:一昨日のMac版では10分で終わった所、昨日のLinux版ではダウンロード後のdeltaの処理で2時間かかってしまった難所ですね。

社長:一昨日はLenovoがブーブー、昨日はQちゃんがゴロゴロいってましたが、今日のiMacは全く音なしですね。

基盤:やはりclone自体は20分ですね。さて、これからデルタ地帯がどうなりますか。

基盤:これは昨日と同じ、2時間半コースのペースですね。

開発:うーん、git もちびっとしかCPUを食ってないし、VMホスト直結のSSDを使っているので、ファイルアクセスもネックになってないと思うんですけどね… ひょっとしてネットワークアクセス?

基盤:このガラ空き状態で時間がかかるって、ネットのレイテンシーかなって気はしますけどね。

開発:strace してみますか… 働いているのはさきっぽのプロセスだけですね。でこいつは何をやっているのかな…

基盤:おおっと意外。IOしてないみたいですね

開発:いや、でも端末へ1秒おきに進捗報告出しているんで、これのwriteがトレースに出てこないというのも不思議です。

19275 pts/3    S+     0:00      \_ git clone https://github.com/otcshare/chromium-src.git
19276 pts/3    S+     0:54          \_ /usr/lib/git-core/git-remote-https origin https://github.com/otcshare/chromium-src.git
19287 pts/3    S+     0:22              \_ /usr/lib/git-core/git fetch-pack --stateless-rpc --stdin --lock-pack --thin --check-self-contained-and-connected --cloning https://github.com/otcshare/chromium-src.git/
19511 pts/3    Sl+   10:58                  \_ /usr/lib/git-core/git index-pack --stdin -v --fix-thin --keep=fetch-pack 19287 on parallels-Parallels-Virtual-Platform --check-self-contained-and-connected --pack_header=2,12999042

基盤: git index-pack slow で検索… Git はファイル数が多くなるとすごく遅いようですね。チェックサムに時間がかかっているとか?

開発:いや、こっちはある時点のものをどんと持って来たいだけなんですけどね。20GB程度の。これ、kill しちゃって続けたら不味いですかね?まだ10%しか進んでない…

社長:kill。

開発:では ^C。そして再び git clone… ゼロからダウンロード始まりましたw

社長:最新版のでなくて構わないんで、tarball になってるやつありますかね。

基盤:ありました。

基盤:ダウンロードします。

基盤:なんか勝手にdecompressはじめました。それがデフォの設定のようですね。1.3GB程度の模様。

開発:圧縮の効くソースだと1/10以下になりますからね。

基盤:では、unzip。

基盤:6分でした。

開発:git でやると3時間。zipでやると10分てことですね。

社長:巨大なZIPって、一連で圧縮してもそんなに圧縮率も変わらないでしょうし、100MBくらいずつで分割圧縮・並列解凍できると良いのにね。

基盤:このへんのディスクI/Oは、仮想ディスクにしたらもっと速いでしょうね。

基盤:やっぱり、直属の仮想ディスクでやりましょう。最近のLinuxでは超簡単なのはわかっています。parted で拡大して resize2fs で使用。

基盤:まず、外部のドライブを使った場合。

開発:CPUは40%程度、ほぼシステム時間。ユーザ時間は3〜5%程度ですね。

基盤:次に、内蔵の仮想ディスクでやった場合。

基盤:約10倍速と出ました。

開発:うーん、git clone が何時間もかかったのはこのせいですかね…

基盤:あ、あと今気がついたんですが、RAMの割当が1GBなので8GBにします。CPUもデフォが2なのを5に。

開発:これが例の買い切りとサブスクリプションの分水嶺なわけですね。

基盤:ということで、git clone に濡れ衣を着せてしまった感がありますので、正規の手順で再びやります。

社長:しかし、git って、うちみたいにちょっといじってみようかという人の敷居をすごく高くしてますよね。

開発:まああとはただ、たぶん3時間くらい待つだけですか。

経理:アース渦巻第3巻点火しました。

* * *

開発:それで shell に戻るんですが、printf があって scanf が無いのは片手落ちだと思うわけです。たとえば ls の結果を分解したい。

開発:それなら scanf “%s %d %s %s %d %t %s” M L U G Z T F とかで分解して、printf “%t %10d %s %s” $T $Z $F `md5 $F` なんてできると便利です。

基盤:ここで残念なお知らせです。作業用のディスクをローカルにうつしても git clone は早くはなりませんでした。ちゃんちゃん。ただ、進捗10%くらいまではCPUは数%で推移していたのですが、それ以降ガツンとCPUを使うことが多くなりました。

開発:何もファイルを作ったり書いたりしている形跡も無いし、ひたすらこの15GBの tmp_pack というのをなめてるんですかね?

基盤:tcpdumpしても、何か通信している気配がないです。

開発:スワップしまくってるようにも見えないですしねえ…

社長:ああそれで、shellのscanfコマンドですが、結果を変数というか、ファイルにも受け取れると良いですね。

開発:一般化すると、shellの変数は実は全てメモリマップされたファイルである、というのでも良いかなと思います。

社長:ソケットであっても良いかもですね。

開発:子孫のプロセスから返すデータも、メモリマップされたファイルで受け取れると良いですね。

社長:そのあたり、C言語とかのレベルで、このポインタの先はファイルにあるよというのをサポートしてくれると便利かも知れない。ある種のストレージクラスというか。external で permanent とか sync とか source とか。

基盤:git clone、イキナリ本気モードです。

開発:あたしだってやるときゃやるよみたいな。

基盤:また静かになりました。

開発:しかしこれ、ビルドの様子次第では、Parallels Desktop Pro の線もありですね。少なくとも Acrobat より利用価値が高い。

開発:いやーしかし、この zsh のコーディングスタイルは好きだなー。カッコの前後の空白を別にすれば、ひょっとして自分で書いたのかなーってくらい違和感がありません。

社長:make に awk 使っちゃってたりする所もまた (^-^)

基盤:おっと、git clone 終了しました。所用98分。

社長:それはそうと、ls こそ shell の組み込みコマンドであるべきかなと思うんですが。というか、ファイルのメタ情報をフォーマットして出力する機能が。基盤:それは ls というより stat コマンドみたいですね。

開発:え、このコマンドいつからあったんですかね。man stat、HISTORY … The stat utility appeared in NetBSD 1.6 and FreeBSD 4.10. … BSD May 8, 2003 BSD。へー。

開発:ls の出力を分解して使用するという利用例は、意味がなくなりましたw。こういう感じですかね…

開発:便利ですね。

* * *

開発:ディレクトリのインデックスHTML生成ツールの原型はできたのですが、Macの上で出来たんで Ubuntu に持ってったら動かないんです。stat というコマンド名なんですが、全然仕様も由来も違うんですね。Macのほうが正統なBSD流。Ubuntuのはおもちゃみたいの。

社長:やはり shell の組み込みにしちゃって、その shell だけ持ち歩けばどこでもOKっていうのが良いかもですね。

開発:出力の整数を引き算する必要があったのですが、これも  shell でできないから、久しぶりに dc なんて使っちゃいました。

社長:ポーランド記法!

開発:これもまた、shell に組み込みだったら良いのにと思いましたね。

社長:ツールを作る人は、それが最終の製品だと思って作ることが多いからUIとかファイルI/Oとかも含めて内部依存的にできちゃってて、さらにそれをライブラリとして使う時に難儀しますね。

開発:なので、そのあたりを切り出して、動的ライブラリ化するというのも面白いのでは無いかと思うんです。おそらくライセンス上も問題無い。MozillaやChromeだって、ライブラリにして簡単に使えたら、面白い応用があると思うんです。

社長:ツール・アプリとライブラリの境目は面白いですね。密接に結合するより Unix のパイプでつなぐ式から始まったデータだけで結合したほうが組み合わせてきには面白い。けれど性能的にはデメリットはある。標準化もされにくい。

開発:ライブラリのAPIとか通信プロトコルだと仕様がかっちり決められて互換性が維持されますけど、コマンドの出力データって人間が読めればいいやというか人間の読みやすさに合わせて設計されているから、標準化されにくいですね。

社長:そのあたりもひっくるめて、何をどうすると幸せかを考えていきましょう。

開発:書きなぐりですが、今日書いた部分をアーカイブして置きます。

dir2html.sh

* * *

基盤:結局ParallelsでのChromeのビルドは所要2時間56分(176分)でした。

基盤:同じ版のautoninja がHyper/VのLinuxで3時間40分(220分)でしたが、あれはディスクをQNAPにNFSマウントしていたことによる影響が大きいと思われます。

開発:コンパラブルな性能ということですかね。使い勝手的には、Windows 10 の上のHyper/V のLinux VMをMacからリモートデスクトップで覗くより、Mac自身の上のParallelsでLinux VMで直接いじれたほうが便利ですが。

基盤:実用という意味では、Linux VMの仮想デスクトップをMacの上で直接表示すれば、あまり使い勝手に違いが無いとは思いますけどね。ただ、LinuxのVNCサーバがちゃんと使えるのかということろに課題が。

開発:まああれも、ちゃんとRealVNCにお金を払えばよいのでしょうけどね。

経理:RealVNCは4月に検討しましたね。$4.59/月@1サーバ。1LSUです。

基盤:リーズナブルっちゃリーズナブルですかね。

社長:経費的には問題ないと思いますが、そもそも X Window のほうが良くね?と思うのですが、どうなんでしょう?

開発:本当に更新が必要な情報だけを転送しているわけですしね。情報の作り手が使い手にダイレクトに情報を送る。中間で推測し直したりしない。

基盤:Chromiumって X Window 対応してるんですかね?

— 2020-0731 SatoxITS

ブラウザユニオン

経理:今日は .jp が500円だとxsoからSPAMが来てました。

基盤:.jp は通常2800て表示してますから、これはマジでお得ですよね。

社長:うーん、何か思いついたら買いましょう。でも、.jp で取りたいという動機はあまりないんですよね。うちの社名関係はもう長期に押さえてあるし。

経理:一度 .inc の500円セールしたら xso の株も上がるのにね。

開発:一日で .inc 登録ドメイン数を1万件突破!とか。これは全世界に誇って良いでしょう。

基盤:xso株が暴落して経営破綻じゃね?

* * *

開発:さて、昨日は Chromium がデバッガにうんとも反応しなくて困ったわけですが、結局こういうことでした。

開発:それで、バックトレースに出てくる経路の各所にprintfをはさんで動作を観察したわけです。

開発:バックトレースを見ると、根っこからしばらくは環境設定の層で、途中でブラウザの層、その先にAppKitとかが挟まった先にさきっぽのカーネルに達しています。根っこのほうの層では設定をしてはその先のRunメソッドを呼ぶだけなので、そこに介入しやすい中心ループ的なものがありません。

開発:Firefox ではイベントをpollしては処理するし、実装上pollがラッパーになっているので簡単にフックできました。ですがMac版Chromiumでは mach_msgというシステムコールで待っている模様。これはタイムアウト付きのrecvみたいなもののようで、poll 的な処理と分離ができない。なので、一番さきっぽの所で捕まえるのはちょっと難儀です。まあ、自分でmach_msg にラップしちゃうという手もあるかも知れませんが。

開発:ですがまじめに取り組むとすると、一番下の層に手を突っ込むのは暴力的過ぎるとは思います。Firefox でもですが、普通に外部からのコマンドを受け付けるスレッドを作ってそれをプロセスに入れ込むのが、まっとうな解法なんだろうとは思いますね。そうなると、宿主のプログラムの構造を理解する必要がありますが、特に Chromiumの場合、コードが意味不明な C++ 的呪文で刻まれていて、ちょっとツール無しで追う気になれないという状況です。

社長:まあ、設計のドキュメントを読むという路線もあるかもですけどね。

開発:ただ、こういうエンドユーザに対峙する最前線に居るプログラムが、今日もC++で書かれていて、Cのプログラムを普通に突っ込めるという点には、ちょっと感動的なものがありますね。

開発:なんにしても、Chromiumの作りはとっつきにくいし、MacOSXのガードも固いので手をツッコミにくい感じはします。なので、Mac版のFirefoxか、Linux版のChromiumでやれたらなと思います。

基盤:Chromiumのビルドにはストレージが120GB必要ですから、現行の仮想マシンのように仮想ディスクに置くのは大変ですね。外部にディスクを置かないと。いずれやる必要があるとは思ってましたので、この際にやってみましょうか。

社長:それはそうと、でんこちゃんの家計簿が早く開通しないかとわくわくしています。

社長:それとこのスクリーンセーバー。初代液晶iMacのも印象的でしたが、時代はここまで来たか感があります。電気の無駄とは思いつつ。

開発:iTunesの、音楽を画像化するやつも面白かったですね。

基盤:iTunesって死んじゃったんですかね?

* * *

基盤:ひーはー。いつの頃からか、どうも レノボ君がサンバでマウントさせてくれないと思ったら、こういうことになってました。

開発:ちょっとリストラし過ぎたようですねw

社長:太古の脳の中のブレーカーが落ちていたみたな。

開発:Windowsデビューの時代から一度も全体的な整理統合がされてないんでしょうね。

基盤:色々ひっかかりましたが、Linux用の、というか何からでもNFSでアクセスできるストレージ1TBを用意しました。

開発:それではさっそく。

基盤:手引はGitHubにあるこれですかね?

基盤:では言われるがままに… おっと、そもそも git がまだ無かった。sudo apt install git。なにやら準備した後に、chromium のソースを git clone…

開発:これって昨日Macで10分くらいで終わったやつですかね。

基盤:13GBのかたまりを13MiB/sくらいで落としてますから、20分くらいかかるかもですね。

社長:結局ストレージはQちゃんにしたんですね。

基盤:最初Hyper/Vのホスト直結のHDDをSMBでやろうとしたのですが、しょうもないところで引っかかりました。で、1時間かけてようやくつながったと思ったらやたらファイルの作成が遅い。ならQNAPのNFSにしようとしたら、今度はボリュームの作り方とかNFSの設定の仕方をすっかり忘れてしまっていまして。思い出すと言うより探検し直すのに小一時間。

開発:Qちゃんのドライブがコロコロ言うのが面白いですね。懐かしい響き。

社長:HDDのコロコロ音は悪くないですよね。

基盤:もう少しで終了… 終了。?と思ったらすごいゴロゴロし始めましたね。

開発:Resolving deltas ってあるから、ファイルをなめて差分チェックとかするんでしょうか。これは苦手分野。

基盤:うーん、全体で1000万あるのに、秒1000程度な感じなので、3時間くらいかかりそうです。これは… サムスン512GB SSDが半分空いているので、こっちでやり直しますかね?今ようやく10%。

社長:これはこれで面白そうなので様子を見ましょう。食事に行ってきます。

* * *

社長:帰りましたはー

経理:酒臭いですね。

社長:うーん、中瓶の店だとつい2本飲んじゃうんですよね。よし悪し。ていうか、Qちゃんがおとなしくなってますね。

基盤:結局2時間弱で終わりました。

社長:飲みながら思ったんですが、結局仮想ディスクにするべきじゃないかなと。

基盤:そうですね。今の所20GBしかないので、オンメモリで数分で済んだ話かなと。

社長:それはともかく、Qちゃんの自動ログアウトの時間を長くしましょう。デフォルトでは1時間?。6時間にしましょう。そういう刻みは無い?では一日で。

社長:このダッシュボードせっかくよく出来てるのに、なんでディスクアクセス状況のメータとかグラフが無いんですかね?単独での表示にできないのも不思議です。

基盤:それはともかく、ビルドの手引に従って先に進めます。特に必要もないのにエディタにvimを使ってると書いてるのが面白いですね。依存性のチェック… aptでかなりいろんなパッケージをインストールしております。

開発:いまだに Chromiumの世界では Ubuntu 14.04 がふつーってすごすぎないですか?

社長

社長:まあ、うまく行ってたものをいじって壊したくないでしょうからね。これだけ複雑なソフトだと。

基盤:それより、RAMは16GB以上を強く推奨、ディスクは100GB食うからねってちゃんと書いてあるのが良いですね。

基盤:ツール類のアップデートは2分47秒で終わりました。では、ビルド… じゃなくてまだまだ準備があるんですね。5. Update your checkout and run the hooks… これってまさか、さっきのノリで2時間かかるとか…

社長:時間がかかるようならその間に他の方法も試しましょう。

基盤:では、gclient sync … ああ、これは数分で終わりそうな気配。

基盤:14分7秒でした。gclient runhooks。26秒。ビルドの設定。さて、ようやく autoninja の出番です。autoninja -C out/Default chrome unstable_deb…

開発:ディスクはちょっところころ言う程度ですね。

基盤:順調に進んでます。

開発:今気づいたんですが、右肩に現在時刻を表示してくれるのは macOSのtopのサービスだったんですね。一方この、ターミナルはやる事が無いもんだから妙な情報をウィンドウのバーに表示している… ここに時刻でも出せばよいのに。

社長:これがまた、その場で右クリックで設定もできないという悲しいmacOSの佐賀。あー、コンテクストメニューには一応あるんですね。なんでインスペクトという名前なのかわかりませんが。

開発:全てのアプリのウィンドウが「これと同じサイズの同じコンテンツのクローンを作る」ていうコンテクストメニューを持つべきですよね。Catalina にはぜひ、そういうサポートをして頂きたい。

基盤:バーへの表示文字列はエスケープシーケンスで指定できたりするかもですね。あるいは、出向元のzshと連絡を取って現状を報告してはバーに反映させるとか。

開発:要するに現在実行しているプロセスの引数を表示しているだけみたいですから、shell で自分の引数を変えるようにすればそうなりますね。

社長:昔はpstitleをいじるというのをよくやりましたね。例えば DeleGate ではこんな感じ。

基盤:つまり shell が pstitle というコマンドを持ってれば良いと…

開発:そういえば zsh はソースからビルドしましたから… find zsh -type f -exec grep -i pstitle ‘{}’ ‘;’ … ないですね。bash にはあるのかな。

基盤:あ、ただいま中間折り返し地点を通過。

基盤:時間的な中間点じゃないですけど。

開発:Mac版のビルドと同じようなペースですね。

社長:shell の pstitle を使うとすると、時刻を表示するには、shell 自体に cron的な機能が必要ですね。

開発:shell の外付けにしてシグナルで起動するとかもありですかね。というか、タイムスリッパ式に動的ライブラリを差し替えれば行けそうな。しかもまさに、gettimeofday で。

社長:となると、shell に限らないですね。なんでもOK。ちょっと休憩しましょう。

経理:アース渦巻第2巻に着火しました。ところでお待ちかねのでんこちゃんはなお1週間かかるそうです。

社長:マチカネタンホイザー…/(‘^’)

* * *

基盤:それはそうと、MacMini からの引っ越しが済まない間に、Vivaldiが大変なことになっちゃってて、時々応答がなくなります。

社長:いやわたしは、ブックマークとかせこいこと言ってないで、一度開いたら一生そのまま開いてれば良いと思うんですよ。ああ、これは3ヶ月前に開いたページだなとか。こういう順序で情報を探索して理解したなとか。克明に思い出せるのです。

社長:なんなら、過去に開いた順序どおりに再生して開き直してくれるとありがたいです。まあ、消えちゃう情報も多いですから、全ページ魚拓としても保存してくれると良い。

社長:だいたい、現在タブの一番表にあるやつだけじゃなくて、その下積みになってるやつだって一覧したいわけです。スマホのブラウザの履歴みたいにぱらぱらめくれるとよいですね。

開発:それで、システム全体がぱんぱんになっているかというとそんなでもなくて、Vivaldiだけふんづまり気味なわけです。このへんは、アプリの中での状態が複雑になって管理が重くなってるとか、

基盤:これってなんですかね?

開発:2016年のLightsail発表の時のプレゼン資料ですね… 切ってみましょう… うーん、気持ち、軽くなったような…

社長:まあ Opera のウィンドウはそれ以前からの塩漬け状態だし、Chromeも結構溜まってるので、最近ではSafariを起動することも多くなったのですが。Safariはやはり、印刷機能がイケてますね。サクッと来るしプレビューも良いし、画質が良い。

基盤:Previewってすごいですよね。あれでPDFのデジタル署名機能があったら、AcrobatなんてMove to Trashですよ。

経理:月額1,700円相当で年間契約済みなんですが。

* * *

基盤:3万ファイル通過しました。

基盤:通信がぴょこんと立っているのはさっきsshでログインしたからです。

社長:それにしてもこのQNAP、2万円でこれってすごすぎますね。

開発:ふつうにLinuxですしね。

開発:Cortex-A72積んで Linux機として3万円位で売り出したら衝撃じゃないですかね?

社長:これってWordPress動くんですかね?

基盤:できるようです。というか正式サポートしているようです。

社長:うーん… 内部・開発系と、外部公開系は分けたいから、もう一台買いましょうか…

開発:あと1時間くらいかかりますかね。ちょっくら zsh に pstitle コマンドを入れてみますか。内蔵コマンドはどこかな?

開発:vi Src/builtin.c … へー、printf コマンド内蔵なんですね。じゃお隣におじゃましますよっと。引数をargv[0]にstrcpy()。これだけで良いかな?makeして。えいっ。

基盤:おお!

社長:なんというか、古き良き時代が戻ってきた気分ですねぇ…

開発:ちょっとした改変をするのにシェルなら5分。ブラウザは3日掛かり…

基盤:しかし、ターミナルがこれを見に来てくれるのに、1秒はかからないですが、0.5秒くらいかかるような感じですね。

社長:シェルとブラウザをどう組み合わせるかですね。実装上。それとスクリプト言語として。

開発:shellから見ると、ブラウザの内部状態がファイルシステムとして見えるというのが自然かなとは思いますね。で、特殊ファイルに書き込むとdocumentとして表示されたり、ウィンドウを開いたりする感じ。

基盤:JavaScriptのインタプリタとしても使えますね。電卓とかw

社長:こっち側はシンプルに実装できるのにねえ…

開発:あと、やはり bash も検討はしておいたほうが良いかなとは思います。

基盤:Go言語はどうするんでしょう?

開発:shellに動的リンクしちゃうと良いかも。

社長:すごいリッチなshellになりそうですね (^-^)。名前は ezsh なんてのがいいな。extended zsh、イージーシェル。

* * *

基盤:おっと、40000を超えました。もうそろそろ着陸態勢に。

基盤:すごい勢いで進行しております… 大詰めのリンカーのフェイズに来ました。

開発:Qちゃんがゴロゴロ言ってますね。

基盤:そして終了。

基盤:3時間40分の長旅でした。

開発:てかもう9時じゃないですか。

社長:いっぷくしましょう。

* * *

社長:いっぷくしてて思いついたんですが、mozilla と zsh をくっつけて mozsh とかどうですかね。xso で mozsh.jp を検索… ほら、無いから今日なら500円ですよ。

経理:まあ xso はしょっちゅう500円セールしてますけどね。

基盤:まあ、せっかく出来たので起動してみましょうよ…

一同:起動速っ!

開発:驚速ですね。

基盤:コンマ何秒か。

社長:目が覚めました。

基盤:夢じゃないでしょうね。もう一度起動…

開発:これは使える。まったく使える。ふつうに使える。

社長:というか、macOS版がなんであんなに遅いのかよ、って事ですね。

開発:それではお約束のいたずらを。vi comp*/vers*p … で autoninja -C … うーん、やっぱりここをいじると再ビルドに10分くらいはかかりますね。

社長:うーん、我社はこれからは自家製 Chrome と自家製 zsh で生活ですかね。

開発:できました。では起動。About Chromium …

基盤:ぱちぱちぱち。

開発:「そのしゅん間、私は変わった」「私の心を大きく変化させた」「明るい未来が見えた気がした」ー Rika Kihira(2014

基盤:しかし、ビルドの手引にはストレージ100GB用意しろとあるんですが、最終的にも34GBで終わってるんですよね。全体通してRAMだけでできちゃうサイズです。

社長:なんにしても、Firefox と Chromium の開発環境が揃ったし、気分はバラ色の濡れ落ち葉ですね。飲みに行きますか。

— 2020-0730 SatoxITS

ブラウザシェル

社長:さあ2日目、始めましょうか。

基盤:その前に。せっかくなので Chromium でもやってみたら良いと思います。以前MacMiniでは、ストレージ不足でのやり直しもあって、ビルドに1日単位を要しましたが、iMacでやったらどうなるか見たいというのもあります。

社長:そうですね。

MyChromiumビルド

基盤:それで早速、以前のブログにしたがってやろうと思ったのですが、いきなりXcodeが無いと。で検索したら、Xcode 12 Betaはいかがですかと来ています。Chromiumの要件は11.2以上ということではあるのですが…

開発:どうもUI系の改良版みたいですね。とりあえず11にしましょうよ。11.6がJul 15, 2020 に出てますし。

基盤:了解。では Mac App Store よりダウンロード… え?何かiMac方面から怪音が… どうも全コア全開動作するとファンが唸り出すようです…

社長:大ショック… この人はモニタと一体型だから、分離して身体だけ左遷できないんですよね…

一同:(落胆)

基盤:まあもう少し様子をみましょう。Xcodeがインストールされました。10分以上かかりましたかね。

基盤:で depot_tools を git clone。一瞬でした。

基盤:でもって fetch chromium… しまった、これ –no-history をつけないと大変なんですかね。やり直し。30分くらいかかるよと言われてます。前回もそうだったような。おっと、ダウンロード74.7MB/s、かつて見たことのないスピードです(当社比)

開発:ああまた、iMacのファン音が大変なことに…

基盤:台所のファンとか咳き込みおばさんに比べれば音の質は辛くは無いですけどね。おっと、騒音の甲斐あってか、10分で終了しました。

基盤:ではオススメどおりにargs.gnを書いて。 autoninja 起動。おそらく数時間はかかるでしょうね…

開発:これから数時間もこのスコール状態が続くんですかね?

社長:岩に染み入る蝉の声的な。

基盤:それにしても、フル活動ですね。

基盤:CPUは全開。

基盤:メモリは楽勝。

基盤:ディスクI/Oもスカスカ。

基盤:もう45000のうちの16000行きました。このペースで行けば、2時間かからないですね。Firefoxのビルドと同程度かも知れません。

開発:以前やった時は、途中からすごく遅くなったような。あれはMacMiniのビルド環境のせいだったんですかね?

基盤:半分を通過しました。ここまで所要40分。

社長:食事しているうちに終わるかもですね。タバコも切れたし、メシに行きましょう。

社長:ところでこのシケモク、根っこの部分がコーヒーをかぶって湿ってるんですが、もしやそのせいか、シケモク臭さが感じられません。

開発:ITS more社が提案する新しいスモーキングスタイル。

* * *

社長:ただいま帰ったぞなもし。あれ?静かですね。iMacのモニタ真っ暗だし。ビルド終わりましたかね。

基盤:まだまだですね。1時間で1万ファイル進行。後半に入って1秒に1〜2ファイルというのが前回MacMiniと同じようです。あと1万2千ですから、1時半頃には上がるかと。

開発:でも、このくらいのファン音ならacceptableですね。空港のロビー以下的なw

社長:なんでさっきはしゃかりきに回ってたんですかね。冷却効果を学習してなくて過剰防衛?

基盤:ひょっとしたらバックライトのせいかもですね。思い切り暗くしましょう。どうせ画面共有で見てるから関係ないし。

社長:それで、当社の住環境完全の一環としてこれを購入して来ました。アース渦巻〜!

開発:日本の夏。アロマティック。

基盤:金鳥じゃないんですね。

社長:金鳥のは高かったのです。

経理:なんでこう線香の匂いなんですかね。いろんな香りの蚊取り線香を作れば良いと思うのに。

* * *

基盤:ふぁぁぁあ。あ。

開発:蚊取り線香を感じながらお昼寝から目覚める。日本の夏休みですねえ。

経理:うちって夏休みあるんですかね。

社長:休みたい人は休みたいだけとって下さい。

基盤:さて、iMacも淡々とビルドを消化、残り5000/45000となりました。

開発:ビルド始めてから一度もスワップイン・アウトしてないですね。

基盤:純正でバカ高でしたけど、8GBプラスしておいたのは正解だったと思います。

社長:7月12日の流血事故から17日、かさぶたが完全に取れました。一度もうんだりせず、極めて良好な経過でした。

経理:クルマやさんから電話で、代車が用意できたので車検に出しに来て下さいと。

社長:昔はなんとも思わなかったですが、車検代って高いですね。というか車の維持費。最近では週に2回くらいしか乗らないのに。

経理:もろもろ込みで、月1.5万円くらいかかりますよね。

社長:まあタクシーよりは安いかなというくらいな。

開発:濡れ落ち葉マークは70歳からだそうで。まだだいぶ先ですね。

基盤:あれ、70歳前につけたらいけないんですかね。なかなかの脅し効果があると思うんですが。

基盤:あ、コンパイル終了。着陸姿勢に入りました。

社長:ファンが止まりましたね。

開発:ライブラリのビルドって並列化しないんですかね?

基盤:できそうですけどね。あんまりかからないから気にしないのかな?

基盤:動的ライブラリに入りました。最終段ですね。

基盤:完了。Chromeビルド、所用3時間36分でした。ただ実はこれ、省エネルギーモードで、ディスプレイがオフになるとコンピュータもスリープするという設定になっていたので、食事に行っている間は寝てたのかも知れません。

開発:やらせといてる仕事があるのに、ユーザが目を離したら寝てしまうかも知れないって、よくわからない設定機能ですよね。

基盤:以前ならスリープ機能とか速攻で無効にしてたところですが、最近省エネに目覚めてしまいまして。

経理:そういえば、でんこちゃんの家計簿、パスワードリセットしてログインできました。

開発:2014/06/29 が最終ログイン…

社長:で、ここでもう一発ビルド開始するとどうなりますかね?

基盤:変更なしを認識するのに12.8秒ですね。

基盤:最終的なファイル数 69万9千、119GBとなりました。

社長:コンパイル中は全コア使い切りでCPUで律速のようですから、もっとコアの数に反比例した所要時間になりそうですね。

開発:まあ、ゼロからクリーンにビルドすることはあまり無いでしょうけどね。

基盤:全部のコードが参照しているヘッダとか変えたら、そういう事態になるんでしょうね…

* * *

基盤:では起動します。

開発:一回目って時間がかかるんですよね。

基盤:一分かかりましたね。では一旦終了、2回め。

基盤:4秒弱ですね。

開発:これなら使い物になるかな。

開発:どうして日付を明らかにしないんでしょうね…

基盤:それにしても、例えばこのページの印刷プレビュー状態にするのに15秒かかります。他のブラウザなら数秒以内なんですが…

社長:ともかく、準備完了ですね。一休みしましょう。

* * *

基盤:ところでこないだiMacを進水した時に試しにParallels Desktopを入れてみたのですが、なかなか使えそうに思いました。いくらなら買いですか?

開発:そう… 買い切りなら2万円、サブスクリプションなら月600円くらいですかね。

基盤:parallels desktop 価格で検索… アマゾンで¥7,918です。

開発:買いましょう。

社長:うちはWindows Home実機が無いので、試験用にVMで動かすのも良いかもですね。

基盤:ただし買い切り版(Standard Edition)は仮想RAM8GB、仮想CPU4という制約があります。上のグレードですと、1万円/年。

開発:やや高めですが、常識的な価格設定ですね。

基盤:実は、以前購入したICカードリーダ、ドライバがWindows版しか無いのです。あれが使えるようなら、確定したいと思います。

MyChromium改変

開発:さてさて、ちょっといじってみましょう。まずは、about から。

開発:なのでこれをちょっといじってビルドして起動。

基盤:OK。

社長:HTTPのUser-Agentに目印を入れたいですね。

開発:さて、どこに定義されているのでしょうね。流石に120GBの中からバカ検索するのは時間がかかります… うーん、grep て60MB/sくらいしか出なそうですね。これだと20分以上かかってしまいます。fgrep でやり直し… あまり変わらない… せめてファイル名の拡張子で当たりがつくと良いのですが…

開発:ついでに昨日のpoll()にフックをかける作戦なので poll も検索します。並列に検索するのにSSDだとありがたいですね。…

基盤:それもデバッガで止めて見たほうが早いのでは。

開発:あ… そういえば、MacOSX版 dbx の lldb というのがありましたね。ps | grep chromium …

開発:どれだろう?これあたりかな。sudo lldb -p … ^C … なんか応答が無いですね。単に遅いのかな。その点デバッグモードでもさくさくのARM の CoreSightはよく出来てました。lldb から直接起動してみましょう… runして。このへんで ^C。

開発:ContentMainRunnerってのがFirefoxのと似てますね。cont して。あ、ウィンドウが開いた。^Cしてbt。うーん、… bt が帰ってこない。

開発:あれ?lldbの出力に content_main_runner_imple.ccってありますね。content/app/content_main_runner_impl.ccのことのようです。ふーん…

社長:ちょっと休憩しましょう。クルマ屋さんに車検に出してきます。

* * *

社長:代車はGolfでございました。昔同じ型のに乗ってたことがあるのですが、あれとまったく同じ匂いがするのが面白いです。

開発:その間に find grepが暴走して、こんな面白いものが出来ていました。

開発:新品のSSDの寿命が縮んでしまいました。

社長:1.75TBの検索結果ってのはすごいですね(笑)

開発:要は検索の出力を検索し続けたということかと思います。120GBの検索とは言え、あまりに時間がかかるとは思いました。

ブラウザスクリプト

社長:ブラウザでやってる一連の定型的な作業を自動化したいです。

開発:いわゆるワークフロー的なものですね。

社長:一般的に言えば、ブラウザに限らず、ユーザとしてやってるコンピュータ・ツールとの一連のインタラクションを全部、アルゴリズムを書いて走らせといて。人間として選択とか情報入力が必要な時だけ答えるというのが良いですね。

開発:でもとっかかりはやはり、ブラウザですかね。一番応用範囲が広そうですし。

基盤:ブラウザの自動テストプログラムとかはあるはずですよね。Monzilloのビルドをするときにも、テスト用の何かがありました。extensionにあるか、そもそもデフォでそういう機能があるかもです。

社長:構築したウェブサイトの自動テストという需要もあると思います。

開発:ウェブサイトの投稿フォームにSPAMを書き込んでるのって、実はそういう感じに実装されたロボットかも知れないですね。

社長:ブラウザがワークフローのスクリプトを解釈実行するというのがわかりやすいですが、そもそもブラウザに対して外部から通信メッセージで動作を制御できるようにすると、使い勝手というか作り勝手が良いですね。

開発:そうなると、ブラウザが提供すべきプリミティブのセットとは何か、ということになりますね。

社長:一番原始的には、マウス操作とキー入力情報を食わせる。これはもう万能で、ブラウザ以外にも適用できますが、意味をマッピングするのが難しくなる。一方で高水準なのは「指定したURLを新しいタブで開く」みたいなもの。

基盤:それも、いわゆるショートカットキーを使えば、キー入力として実装できますよね。

開発:でも、コマンドメッセージとして実現したほうがかっこいいですね。ショートカットの場合、ユーザやブラウザごとのカスタマイズに依存してしまうのが問題と思います。

社長:複数のマシンで複数の種類のブラウザを動かしているので、それらの動作を一律な方法で統括して管理できると良いですね。

開発:となると、最初の糸口はブラウザにコマンド受付用の通信ポートを持たせて、そこにコマンドを送るということですね。

社長:まずは「このURLを開け」だけで良いと思います。

基盤:MyChromiumのほうは性能的にまともに動かないので、とりあえずUbuntuでビルド済みのMonzilloですかね。

開発:ChromiumはMacMiniでビルドしたので、そのままiMacに引き継げるとは思うのですが…

社長:その前に食事にいきましょう。

開発:いや、ここで食って飲んで午睡してしまうと時間が…

社長:以前買ったとうもろこしをチンして済ませますか…

* * *

経理:今日も xso から .com が500円というSPAMが来てますね。

社長:この作業関係で何か思いついたら登録しますか。

基盤:えーと。この Ubuntu、以前 Monzillo をビルドした時に root とはパーティションを分けたらしいのですが、それが無くなってしまいました。

開発:マウントすれば出てくるのでは。スクリプトにしてあるとか。

基盤:ls -lt … ああ、ありました。日付は6月11日。単に mount /dev/sda /work ってしてるだけですね。sudo … ディレクトリ出ました。で make … あいかわらず時間が掛かりますが…

基盤:これも仮想ディスクがきつくなってるんで、QNAPにNFSするのが良いかなとは思いますが。

開発:さっきからなんか騒音がすると思ったら、Ubuntuの VMを動かしている Lenovo機のファンですね。以前は音無しだったような気がするのですが。

基盤:室温が高いからですかね。

社長:これはやはり、別の部屋に移しましょう。これに実物のモニタとかキーボードをつなぐことはもう無いでしょう。

基盤:いちおうUPSは付けて上げたいところですが…

開発:そういえばこの1万円UPS、消費電力計として結構面白いのは無いかと思います。

社長:電力計自体が1万円くらいするのもあるし、UPSのおまけについてくるってすごいおトクですね。

基盤:うーん、電力計によると現在の消費電力60ワット前後なんで、ほとんど平常負荷なんですけどね。やはりLenovoのファンが回っているのは気温のせいですかね。

経理:ファンの消費電力が気になります。

開発:ビルドを始めてもう15分を超えましたが… まさか1時間半かかっちゃうパターン?

社長:このUPSの管理ソフトの有償版なら電力消費の統計情報も見られるみたいなんですが、いくらなのかわからないですね。

基盤:おっと、Lenovoが静かになったと思ったらmake終わってますね。所要39分。では、mach run!

開発:めでたし。

基盤:確認のためもう一度 make… これ速攻で終わるはずと思うのですが…

開発:Firefoxのバイナリ自体は8秒で出来てるみたいですが。

基盤:この gkrust というのの build が差分ではないのか、やたら時間がかかるんですね。

社長:ところでこれって最新版開発版?

基盤:うちが6月のあたまにビルドしたのはこれ、77.0b7です。

開発:なんでリリース日付を表示しないんですかね?

基盤:現時点の安定版は78.0.2 みたいですね。

基盤:Firefoxの次期バージョンのページによると、ベータ版だと79.0beta、June 30, 2020 になってます。

基盤:開発版(Nightly)は 80.0a1 ですね。June 29。

開発:日付を出しましょう。どこで出しているのかな…

u18$ find browser -type f -exec grep -H You.are.currently.on ‘{}’ ‘;’
browser/locales/en-US/browser/aboutDialog.ftl:channel-description = You are currently on the <label data-l10n-name=”current-channel”></label> update channel

開発:じゃこれをちょっといじって make …

基盤:さくっと変わりますね。

開発:でこの、.ftl とうファイル形式の中かなら、リリースの日付を取ってこれるかなのですが。

社長:というかさっきからずっと、手がとうもろこし臭いのが気になります。ちょっと休みましょう。

* * *

社長:そういえばこの3ヶ月以上、テレビはおろか、まともなスピーカーで音楽も聞いてないですね。これってどうやってiPhoneにつなぐんでしたっけ。USBに挿すだけでいいのかな…

基盤:てかこのONKYOのアンプ、やたら熱くなってますが… スタンバイとかしないんですかね?

経理:ずっと無駄に電気食って部屋を温めてたんですね。

経理:そういえば何年も見てなかったでんこレポートのサイトのパスワードを忘れてしまったので、てぷこさんに問い合わせ中です。こっちを特定する情報が確認できないと答えて来たので、お客様番号とか答えて再度回答待ちです。

開発:個人証明書で電子署名して送ってやりたいですね。

社長:あれー、音が出ないな… INPUTの選択ですかね… なんでこう沢山入力があるのかな。このしょぼいコントロールパネル… パソコンからリモートコントロールとかできないんですかね… ああ、USBのFってやつですね。あ、音が出た。

基盤:久しぶりに聴くまともな音。しみいりますね。

開発:そういえば昨日の朝、大谷くんはさんざんだったみたいですね。忘れてて見なくてよかった。

* * *

開発:FTLってなんですかねー。MDNで検索しても出てこないんですか。browser の下あたりに沢山あって、文字列定数を定義するような感じのものなんですが。簡単な HTML 的なマークアップもできるような。

開発:おや?そもそもこの、aboutDialog.ftl の中に例が書いてありますね。Nightlyなら日付が入っているはず…

社長:昔から思うんですが、ソースコードの先頭がお決まりのコピーライトの宣言で埋まってる割に、説明的なものがほとんど書かれてないのは悲しい風習ですね。

開発:どうやら変数が使えるようなので早速…

基盤:だめじゃんw

開発:どこに書いても代入してくれるわけではないようですね。ではその、aboutDialog-version というのに $isodate をねじ込みましょう。

基盤:そんな人はもうここには住んでません的なw

開発:別の名前になったとか?

u18$ find browser -type f -exec grep -H isodate ‘{}’ ‘;’
browser/base/content/aboutDialog.js: versionAttributes.isodate = ${year}-${month}-${day};

基盤:問題は、その aboutDialog.js ですね。

開発:これかな?

基盤:なるほどw

開発:なんにしてもビルドの日付を入れてくれるだけみたいね。やってみますけど…

基盤:おおっと、意外な展開。

開発:いずれにしても、リリースの日付を表す属性を加える必要があると思いますね。それをどこから持ってくるかは別として、$released とか追加してみる。

let versionId = “aboutDialog-version”;
let versionAttributes = {
version: AppConstants.MOZ_APP_VERSION_DISPLAY,
bits: Services.appinfo.is64Bit ? 64 : 32,
released: “2020-07-28” //@@2020-0728 ITS more
};

開発:で ftl で参照する。

aboutDialog-version = { $version } ({ $isodate }) ({ $bits }-bit) <b>(^-^)/ITS more 4</b> —- released @ { $released } —-

開発:でどうなるか。

基盤:そいういうことですね。

社長:その77.0b7てどこに書いてあるんですかね?

開発:検索。

u18$ find browser -type f -exec grep -H 77\\.0b7 ‘{}’ ‘;’
browser/config/version_display.txt:77.0b7
u18$ more browser/config/version_display.txt
77.0b7

開発:browser/config には、この 77.0b7 と命名した日時の情報が無いですね。ただファイルの日付が暗示している。

開発:grep 2020… おっと、トップディレクトリにあるこれかな?

u18$ cat sourcestamp.txt
20200518172851
https://hg.mozilla.org/releases/comm-beta/rev/68012bf3f92a15aa5f8e2019fd90faed491659e9
https://hg.mozilla.org/releases/mozilla-beta/rev/83a8484759305eb1c93029065c4566e007325649

u18$ ls -l sourcestamp.txt
-rw-r–r– 1 ysato ysato 192 May 19 04:25 sourcestamp.txt
u18$ TZ=’GMT’ ls -l sourcestamp.txt
-rw-r–r– 1 ysato ysato 192 May 18 19:25 sourcestamp.txt

基盤:2時間ずれてますが、そんな感じですね。

開発:sourcestamp.txt の日付を参考にすれば良いみたいですね。ただちょっとわからないのは、アップロードされているtarballのタイムスタンプがそれより古いことですが。

開発:なんにしても、.js で定義して、.ftl で参照して表示する、という流儀のようですね。

社長:少し前進しましたし、お昼もとうもろこしだけだったし、飲みに行きましょうか。といいますか、いくら洗っても手がもろこし臭くて… じっと手を見る。

* * *

社長:帰りました。

経理:あまり酒臭くないですね。

社長:中瓶1本で堪えましたからね。今日は休肝日だったと日記に書いても良心の呵責が無いくらいです。

社長:で郵便受けを見たら例のこれが入ってました。

経理:再発行の印がある以外は普通の請求書の内容ですね。これって、トータルで100円くらいコストかかってませんかね?

開発:例外処理のために作業をした人の人件費を計上すれば、とんでもないことになりそうです。

基盤:それはそうとこの「料金後納郵便」というのに興味があります。料金体系も違ったりするんでしょうか?

社長:それでこの「月刊協会けんぽいばらき」というのをちらっと見たんですが「限度額適用認定証をご存知ですか」というのが非常に重要な情報と思いました。

開発:限度額という仕組みがあるのは聞いてましたが、こういう申請をする必要があったんですね。

経理:このページですね。制度の説明はこれ「高額療養費・70歳以上の外来療養にかかる年間の高額療養費・高額介護合算療養費」。「70歳未満の方であっても、平成24年4月より…」とあります。

高額療養費の現物給付化(健康保険限度額適用認定証)
70歳未満の方であっても、平成24年4月より、従来の「入院される方」及び「外来で在宅時医学総合管理料、特定施設入居時等医学総合管理料及び在宅末期医療総合診療料を算定される方」に加え、「外来で療養を受ける方」の高額療養費を現物給付化し、一医療機関ごとの窓口での支払を自己負担限度額までにとどめることができるようになりました。この制度を利用するには、事前に全国健康保険協会の各都道府県支部に「健康保険限度額適用認定申請書」を提出、「健康保険限度額適用認定証」の交付を受け、医療機関の窓口に認定証と被保険者証を提出してください。

社長:ありがたい制度ですね。でもこの「所得区分」にちょっとカチンと来るものが。

経理:月給の3割程度以上は免除してくれるって感じでしょうかね。

開発:しかしこれ、有効期限が1年。申請から発行まで1週間ですから、突然の事故とかでなければ、必要になった時にオンデマンドでも良いと言えなくもないかもですね。

基盤:それよりもなによりも、この入力用のファイルがWordでもExcelでもなくPDFだというのが面白いですね。

社長:会社の設立から幾つもの入力用ファイルを見ましたが、PDFで入力をサポートしてるのは初めて見ました。WordとかExcelの素人が練習用に作りましたみたいな感じのものばかりでしたが。

開発:まあ、フォーム入力してPDFを生成するとか、そもそも電子申請できればいいんじゃないかとは思いますけどね。この保険証って実は電子証明書入りのICカードで、署名にも使えるとかだったりしないんですかね。

基盤:マイナンバーがどうとか書いてますが、要は保険証番号持ってればそれを書いて協会けんぽに送るだけでオッケーってことですね。

社長:じゃ印刷したのにサインしてと。

経理:明日投函しておきます。

開発:郵便配達したついでに収集もしてってくれると良いのにね。

* * *

社長:ああ、それで飲んでる時にこの「明るく高コントラストの「空中ディスプレイ」、マクセルが開発 感染症予防にという記事を見たのですが、冗句かと思いましたよ。

開発:感染症予防とか個別の話じゃなくて、世の中を変えるくらいのインパクトがありそうですけどね。

社長:でこの記事をiPhoneのメモというかAppleのNotesに入れたのですが、その時、あー、よろずブックマークって全部Notesでいいかなと思ったんです。

社長:どんなコンテクストでも、ワンタッチとかワンクリックでノートに追加できるようになっているといいかなって。

開発:NotesとMailの密接な連携というか基盤の共有が期待されますね。

* * *

開発:それで grep するとその、指定された URLをウィンドウで表示するというのは openLinkIn という関数のように見えます。なので、JavaScriptで定義してあるらしきそれを無効にして何が起こるか見たのですが、効果がありません。

開発:そもそもどこにmainループらしきものがあるのか… どうもこの、toolkit/xre/nsAppRunner.cppの先らしいですが… これって browser/app/nsBrowserApp.cpp より後にコンパイルされるんですね。それでビルド途中で打ち切ったら反映されなかったと。browser/base/contentの下のjsもそうなのかな…

開発:ところでこのnsAppRunner.cppの中にある command-lineというのがやたら気になりますね… あれ?

/*
* XRE_mainRun – Command line startup, profile migration, and
* the calling of appStartup->Run().
*/

開発:そうですか。toolkit/components/startup/nsAppStartup.cpp臭いですね。ああ、コンソールにメッセージ出したいんですが。printfできればいいのに。

社長:C++なんで、できるんじゃないですか?

開発:あ、できたw。でその mAppShellというのはどこから来ているのか… いいかげん追いかけるの飽きてきた。

基盤:gdbで止めてスタックを見ればよいのでは。

開発:でもこの mach run とかいうのが何をやっているのかわからないので… でもひょっとして直接 firefoxのバイナリを起動したら動いたりして obj*/dist/bin/firefox… なんだ、普通に立ち上がるんですか。では gdb obj*/dist/bin/firefox… なんかマルチタスクでマルチスレッドでよくわからないというか途中でとまるというか… ^C! あ、なんか動き出した。^C!。コマンドモードになしました。bt。

社長:大変おなじみの画面になりましたね(^-^)

開発:ということで、敵の本丸は widget/gtk/nsAppShell.cpp:PollWrapper() にありました。さっそく printf を突っ込んでコンパイル。

社長:ちょっと休みますか。なんか、さっきからストラビンスキーがかかってて妙にハマるんですがw

基盤:しかしこの、コンパイルに8分待つのはつらいというか、なんかおかしいですね。たぶん、ビルドのオプションが変。

* * *

開発:では起動…

開発:しまった、pid も出すべきだった。

社長:でも、 pollしているfdは4つ程度ですね。

開発:まあ、マウスとキーボードとtty?いや、Xからのメッセージ?てこれ、X Windowなんですかね?

基盤:psするとx11 というプロセスがありますし、DISPLAYという環境変数も。

社長:なんにしても、あとはうちのコマンド受信用のソケットなりttyなりをpollに入れてもらえば参入可能ですね。

開発:それって、pollをタイムスリッパ式に差し替える手で、既存のバイナリにも適用できますね。

基盤:キー入力のX11のパケットを作っちゃうとか?

開発:とりあえず標準入力をpollして入力があったらエコーするようにしてみます… ああ、できますね。ただ、これいじるごとに8分待ちでは話にならないので、コードはbrowser/app/nsBrowserApp.cppに追加することにしましょう。widget/gtk/nsAppShell.cppのpollにフックをかけてこっちにコールバックさせると。

社長:といいますか、うちの拡張部分はshared libraryにして、Firefoxのリビルド無しで済ませたいですね。

* * *

基盤:それにしてもあの台所の換気扇うるさいですね。すごく昔のだし、無駄に電気も食ってそう。

経理:大変です。我社初の誤発注発生。Thunderbolt – Ethernetアダプタを購入したのですが、Thunderbolt のコネクタの形状が…

開発:なにこれ?ミニディスプレイポートみたいな。

社長:Appleの妙ちくりんインターフェイスには昔から泣かされてきましたねw

* * *

開発:うーん、ツールキットとmainとの間でコールバック用の関数を渡す方法というかリンカーで解決してもらう方法がわかりません。ツールキット側でも参照が閉じている必要があるらしく… 面倒くさいから環境変数でアドレス渡しちゃいますかw

社長:なんでも良いです。とりあえず先導坑を開けましょう。あれ?先進導坑っていうのかな?

開発:まあ何で渡すにしても、仕様と作成者の署名をして突き合わせればいいっちゃいいんでしょうけどね。

開発:ではこんな感じで。

開発:コードの変更後、ブラウザのリビルドに9秒未満。起動すると変更が反映されています。

社長:生産性50倍向上ですね。

開発:でもってpollしてエコーさせたのがこれ。

基盤:複数のプロセスで取り合っちゃってますね。

開発:まあこれは、一文字毎にselectしてますからね。でも、もしFirefoxの各プロセスが同じファイルディスクリプタを継承していたら、起こらない話ではありません。ていうか、この3つのプロセスって何なんですかね。表示されているのは一つのタブだけなんですが。

基盤:-prefsLen という引数が違うだけみたいですね。

開発:X WIndow のインベントだとすると、現在アクティブなウィンドウに行きますよね。まあ、あれは同じファイルディスクリプタを共有してたりはしないんじゃないかなぁ… まあ、ファイルディスクリプタの挿してる先の素性を調べてみればわかることですが。

社長:全ウィンドウにブロードキャストというかマルチキャストしたい事もあるでしょうね。なんかもう、VIABUSを思い出しちゃいます。

開発:別種のブラウザ間を接続して仲良くさせるバスにもなると良いですね。

社長:今日はビルドの仕方も思い出したり、手の突っ込み方も結構見えて来ましたし、このくらいにしましょうか。

— 2020-0729 SatoxITS

血圧の上がる片付けごと

社長:へろへろへろ…

基盤:疲労困憊ですね。

社長:以前からの懸案にようやくかたが付きました。最近学習したHTML5とJavaScriptを活用して。

開発:しかしこの血圧、尋常では無いですね。

社長:がーっと考え事をしたりプログラム書きに熱中しているときって、こういう感じなんだと思います。短時間なら自然な作用と思いますが、これを半日とか一日とか徹夜して続けちゃうとまずいですね。一昨日の連続計測でわりとまともだったのは、単にのんびり過ごしてたからだったようです。

基盤:なんにしても、MacMiniがブラウザとターミナルでパンパンになってしまって、まともに動かないですね。明日は本格的に iMac への引っ越しをしましょう。

社長:あと、とても気になったのは、うちから xso やライトセールにアップロードするのが異常に遅くて、1MB/s出ない事でした。これでは使い物にならない。一方で xso から ライトセールへの送信は 20MB/s 出ていた。これは由々しき問題です。

開発:以前からそういう感じはしていましたが… サーバでの制限じゃなくて、つくばから東京へ上る線が混雑してるんですかね?

基盤:ですが、fast.com での測定では、下り300Mbps、上りも220Mbps出てるんですよね。

開発:TCPとかポート番号に依存したチョークなんでしょうかね。

基盤:ひょっとして単にSSHのconfigだったりして…

社長:そのあたり、実際の利用法で性能を測らないと意味がないですね。これの対策の優先度は特高です。

— 2020-0727 SatoxITS

毎日健康診断

社長:せっかく血圧計を購入したので測ってみました。

基盤:意味がわからないですね。

社長:これは、酒を飲んだ、風呂に入った、などのイベントと重ねると、変化のきっかけはわかるんですよ。たとえば入浴後は血圧がどんと下がって脈拍が上がる。

開発:しかし謎なのは、昼間に瓶ビールを飲んだ後は数時間も脈拍が上がったようなのに、夜にナマ+ハイボール+レモンサワーを飲んだ後はそうでも無い。つまみとの関係かも知れませんが。

基盤:血圧値は測りかたでいかようにも出そうですが、脈拍は正確でしょうからね。

社長:血圧の絶対値としての精度ではなくて、遷移がつかめれば良いとすれば、この手首で測る式のでも十分そうだし、簡便で良いかなとは思います。

開発:お医者さんにも、お家でも測って下さいってずーと言われてましたしね。

社長:昨日は128回測りました。

経理:仕様書によると耐用期間は10000回。一回あたり2円くらいですね。

社長:てことは昨日は250円分くらい測ったのですね…

開発:なにがへたるんですかね。ポンプ?それだけ交換可能になってればよいのに。

基盤:あと、電池は単4アルカリ電池2個で300回が目安だそうです。3V、3Wだそうですから、USBからちょっと細工して突っ込んでやれば動きそうですね。あるいはラズパイのピンヘッダからとか。

開発:ふつうに充電池でよくね?

社長:なんにしても今どき短期間で使い捨てる電池なんてあってはならない技術だと思います。

社長:そういえば昨日は歯医者さんで定期検診だったんですが、前回4月に行った時にはまだ会社の保険証が出来て無くて、10割負担でした。今日行ったらその分を精算してくれて、会計のときにこちらが払うのではなく、お金をもらえました。お医者さんにかかってお金をもらって帰ってくるって、いい気分ですね。

経理:そういえば6月分の社会保険料の請求書が今日届きましたね。年金事務所の人は20日に発送したと言ってたのに… まあ、今度は督促されないのように払っておきます。ペイジーにて… ああ、納付番号というのは12桁のうち最後の4桁だけが変わる。あとは確認番号6桁ということですね。

開発:バーコード読み取りでやるPayBと、18桁の数字を入れるPay-Easyだと、どっちが楽か微妙ですが、所要時間的にはこっちのほうが速いですかね。あー、でも、状況によりますね。

社長:これが32桁くらいだと、手入力は嫌になりますね。でも、桁数が多いなら、バーコードでなくても、ふつうに数字をOCRしてくれれば良いのではと思いますけど。

* * *

社長:ということで、10時から10時まで、24時間分の計測データがまとまりました。測定回数170回。

社長:高止まりしているとは言え、突沸したりはしてないようです。

基盤:この会社では突然ストレスのネタが降ってきたり積もったりしないですしね。まあ、面白くてしょっちゅう興奮している状態がストレスとは違う結果を循環器系にもたらすのかどうか知りませんが。

社長:慢性的なストレスからは全くフリーの生活ですから、バイアス分はそういうストレスが原因じゃないですね。

開発:そのへんは測定の精度とか応答性の問題もあるのでは。

基盤:仕様上は測定範囲 0〜299mmHgで±3mmHg以内ではあるんですが。

開発:家庭での高血圧の閾値は135 – 85以上、診察室では140 – 90 以上とあります。まあ加齢で劣化が避けられないとすると、人並みでOKと考えるかどうかかなと思いますが。

社長:1日やってみて思ったのですが、これはとても面白いデータです。一番知りたいのは、どういう原因で血圧が上がったり下がったりするのか。面白いドメインを思いつい時に血圧が上がるとか。

基盤:アポロ13を思い出しますね。

開発:ベースを10〜15mmHg下げたほうが良いとも思いますが。でも絶対値は手首の高さでがらっと変わったりしますけどね。

社長:なんにしてもこれは、連続して測るから面白い。となると、常時計測readyの状態でいたい。ただ、手首とか腕とかは活動の邪魔になるし、腕時計式も気持ち悪い。

開発:となると、カフ式じゃないのを足首に巻いて測るのが一番邪魔にならなそうですね。

社長:それで思うんですが、昔買った空気式のフットマッサージャー。あれに血圧測定機能があると一石二鳥じゃないかと。

基盤:椅子に座る生活洋式でないと難しそう。

社長:次の定期受診日にこのデータを持参して女医さんと語らうのが楽しみです(笑)

開発:Windowsを使っている時とMacを使っている時の血圧を比べてみると面白そうです。

基盤:私はブラウザを変えて血圧が5mmHg下がりましたみたいなw

社長:いや私は最近Vivaldiにイラッとすることが増えて、循環器系に負担がかかっているような気もするんです。

— 2020-0726 SatoxITS

孟母三遷

基盤:DeleGateのサーバを移転を実施しました。4月末にAzure A1からb1sに、6月末にライトセールBitnami/Ubuntu16に、7月末にAmazon Linuxに引っ越し、ということになりました。

開発:ついに安住の地ですかね。

基盤:当社の現在のライトセール機の構成はこうです。

基盤:DeleGate記念館だったaw1 は dg9 に、当社初代ネームーサバのns0f は ns1 に引っ越し済みなので、あとはインスタンスとして削除するだけです。

開発:完全に Amazon Linux に統一されると。

基盤:引退するaw1のCPU負荷は3%未満で推移して来ました。引っ越しのための転出吸い出し時にだけCPUを食っていますが、その後アクセスは急速になくなり、先程HTTP等のポートを閉鎖しました。

開発:サービス止めても0.5%程度は食うんですね。

基盤:でこれを引き継いだde9の負荷状況はこうなっています。

開発:転出処理のための負荷のほうが転入処理の負荷より重いのは意外ですね。

基盤:これはたしか、転出側のファイルをgzipで圧縮する側が重いからだったと思います。ディスクに対する負荷は転入側のほうが重いでしょうけどね。

開発:持続可能なゾーンとかバースト可能ゾーンとかって何ですか?

基盤:ライトセールで連続的に使い続けられるCPUは10%、ということだと思います。ただし、使い残したぶんは貯金できて、貯金があるうちはそれを取り崩して10%を超えても使える。ということかなと。

基盤:昨日 dg9 のインスタンスを作ってからの貯金量の遷移を見ると、起動時に20%くらいもらえています。貯金はいくらでもできるわけではなくて、おそらく1日分で満タンになる、それ以上は貯められないように見えます。

基盤: 転出側のaw1のメトリクスを見ると、30分ほどのバーストの間に貯金を切り崩したのがよくわかります。

基盤:あるいはns1には稀に30HTTP/s程度のバーストが続くことがありまして、その際には貯金が切り崩されている様子が見えます。

開発:CPU 10%で処理できるサービスってどのくらいですか?

基盤:非常にざっくりですが、当社のコンテンツですと、2〜3HTTPリクエスト/s程度かと思います。DNSサーバであればもっとずっと軽い。そういう意味ではEC2のDNSの課金は高いと思います。ライトセールで作ったほうが安いし定額。

開発:なるほど。なんともうちの身の丈にあったサービス能力ですね。というかこれ、$5プランだけでなく、$40とかでも同じなんですかね?

基盤:まだ調べてませんが… 月$40も払ってそれなら、EC2とかAzureのほうがお得と思います。どうもライトセールの料金プランの説明ははしょり過ぎていて不透明な部分が多いと言うか、まとまった説明というのをまだ見つけてません。デビュー当時のプレゼン資料くらいしか…

開発:あとは、CPUをフルに回し続けるプログラムを動かすとどういうメトリクスのグラフが描かれるのか、面白そうです。

— 2020-0725 SatoxITS

地球の大きさを5地点観測

社長:さっき1時間計測した世界5拠点間での相互pingのrttをグラフにしてみました。

Amazon Lightsail 5拠点間のping観測

基盤:日独間が250msで悲惨だと思っていましたが、独印間は275msでもっとひどいですね。

開発:同じ形状のグラフが対になってるゾーンに出ていますので、どちらからpingを打っても対称ということですね。

社長:一方同じ時間帯の、つくば本社からの観測結果はこうです。

基盤:つくばー東京間の分のバイアスがありますが、東京とほぼ同じ形状ですね。

開発:しかし、ドイツとの通信には、つくばから見た場合にだけ30分くらいの区間、遅延が上積みになっている部分があります。

社長:特定の遠隔との遅延が、特定の近郊にだけ発生するというのは面白い現象ですね。

開発:つくばードイツ間の高速バスへの乗り降りが混んでるっていうのならわかりますが、一般のネットの場合そういう専用バスが運行していると思えないので、不思議です。

基盤:印度方面の遅延が近郊的には早めに解消されているのも不思議です。

社長:うーん。ウィンドウはどちらも、20:22 – 21:16 なんですけどね…

開発:なんにしても、これだけで何杯もメシが食えるくらい面白いですね。

社長:それはそうと、iMacの画面の位置が今のフィリップス君より5cmくらい高くて、同じ姿勢で使用するのが難しいです。これまでの姿勢と画面位置が身体にマッチしていることは実証されているのでこれは維持したい。座禅用の座布団を購入して調整しようかと思うのですが。

開発:アームスタンドにiMacごと抱えさせる案もありましたが。

基盤:たまには洋風に椅子の生活をしてみるというのもありかと。

— 2020-0724 SatoxITS

世界との距離

開発:当社世界拠点間の時間的距離を連続測定したいと思います。

社長:面白いですね。

開発:本社ネットからライトセール5拠点のサーバを30分間ほど観察したデータがこれです。

社長:グラフにするとこうなりますね…

開発:ペーパクロマトグラフィーみたいな。

基盤:やはりヨーロッパ(黒)が遠いのが気になります。

開発:Azure東アジアマシンを生かせば50msあたりに線が現れるはずです。

経理:でもそれを見るためだけに月2500円というのも。

基盤:0.5GBの最小VMをHDDで動かすともう少し安くなるとは思います。コンパクトなLinuxなりBSDなら、実用的に動くのではないかと。

基盤:5拠点のレイテンシが同期して変化してるということは、地球が均等に伸び縮みしているんですかね。

開発:いや、光の速さが変化しているのかもです。

社長:時間の流速が変動している可能性もありますね。

開発:まあ、見た目に全世界が同時に影響を受けるということは、観測者側の足元が揺れているからと思います。

基盤:東京拠点から測ると良いでしょうね。あるいは大家さんの回線。

社長:それはそうと、昨日作った、変化があったらポップアップするファインダー、とても便利ですう (^-^)/

開発:あとは、例えば1MB程度のTCP転送を定期的にやってスループットの状況を残すと、ネットの輻輳状況も結構わかるかと。

社長:それにはかなりサーバの負荷状況も反映するでしょうね。

基盤:自社内のIP接続機器との間の距離も連続測定したいですね。

開発:USBとかSATAの応答時間も記録すると面白いかも。ディスクなら、ファイルを作って削除するのにかかる時間とかかな。

社長:それはそうと、今日のお昼はあの謎の定食屋?に行きたいと思います。

— 2020-0724 SatoxITS

* * *

基盤:ふぁ。ぁぁあ。よく寝ましたね。

社長:あれから5時間、どうなりましたかねっと。

基盤:おおお、印欧方面に面白い動きが!数分以上継続する事象。大変離散的。

開発:特にインドですね。ヨーロッパ方面は、ごく少数の突発的要因で生じた可能性が感じられますが、インドはもう少し複雑に見えます。

社長:ですがこれって、数人しか使ってないネットみたいな波形ですね。

開発:幹線道路で工事中っていう可能性も。

基盤:思うに、US – JPのライトセール拠点間には何らかの専用道的なものがあって安定している感じなんですが、印欧方面は一般道を走ってる感じがあるんですよね。まあ、traceroute すれば見えるんでしょうけど。

社長:てことは、一般道でアメリカ方面に行くより、Pinger5 の東京ランプから入ってオレゴンランプから出ると速い?

基盤:ping の RTT の単純合算だと、それはありえます。ただ劇的というほどではなく。ライトセールの他に、EC2でも試したのですが、有意差というほどのものでもなかった記憶が。

開発:応用プロトコルの知れたTCPの中継だとどうなりますかね。インテリジェントな圧縮とかキャッシュを噛ませて高速化できる可能性はあると思います。

社長:ところで私は昨日 MacOSXの open というコマンドを知ったのですが、これと ps の結果を合わせると、結構思ったようにGUIアプリが起動できるんですよね。Excel なら「open -n -a “Microsoft Excel” ファイル名」。

開発:各種アプリのランチャーを作ると良いかもですね。サイズや配置も決めて。

社長:それはそうと、さっきお昼の帰りにゥエルシァで血圧計を買ってきました。スマホで見たらアマゾンに出てるより安かったので。このIT化を拒否した感じが良い味を出してますねー。

— 2020-0724 SatoxITS

浮かび上がる最後に見かけたそれ

社長:スクリーンショットを撮ったり、PDFに保存した後に、それで出来たファイルにアクセスしたい事が多いのですが、保存する場所は一定では無いので面倒です。

基盤:Finderで「Recents」を開くと、最近アクセスしたものは見れるんですけどね。

社長:そもそも、それも結構面倒です。ワンクリックで開けると良いのですが。具体的には、スクリーンショットを撮ってウェブページに貼り付けるとか、ウェブページを印刷したものをAcrobatで開いて署名してまたそれをウェブページに貼り付けるとかなんですが。

社長:スクリーンショットについては、撮った後に数秒間画面右下にサムネール状にポップアップしていて、ドラッグできるんですが、タイムアウトが短くて辛いのです。タイムアウトの設定方法がわからない。

開発:メニューバーか、右クリックしてコンテクストメニューに「最後のそれ」というのができると良いですね。あるいは、最後にできたファイルの幾つかをそれがなにかによらずスクリーンショットのようにポップアップして置いてくれるとか。

社長:ファイルが作られる場所は数カ所程度なので、それをマージして時間順に表示してくれるというのでも良いです。

基盤:このFinderの「Smart Folder」って何ですかね。Mailのと同じようなものなら、まさにそういうものかなと思いますが。「This Mac」で検索文字列に「.」とか指定すると、それに近い振る舞いのような。

社長:なるほど。原理的にはこれですかね。でも、ファルダは普通名前に「.」を含まないし、検索の対象にしたいフォルダはそう多数では無いんですけどね。Mac全域のファイルの生成消滅を見せられてもなーって感じがします。それはそれで面白いけど。

開発:思うにコレ、特定のディレクトリのセットをfindしては最新のいくつかにシンボリックリンクを貼るようなディレクトリでも良さそうですが。

社長:それだと、画像とかドラッグできますかね。

開発:やってみましょう… ああ、だめですね。readlink してくれないみたいです。

開発:このSmart Folderの実体は、~/Library/Saved Searches の下に保存される xml のようですが… まあ条件式が書いてあるだけですね。たかが条件式を表現するのにこれほど見にくい記法というのもある意味すごいというか…

基盤:Finder で指定できるんじゃないですかね。検索モードに入って… +で条件を追加… あれ?ORってどうするんですかね? …(しばし検索)… なんだ、Altを押すと、+の表示が…に変わって、それをクリックするとAND / OR / NOT の条件ノードみたいのが挿入されるようです。

開発:どうしてはじめから「…」を表示してないのか、全く理解できないんですが…「?」とか「i」というお助けボタンも無い。

社長:シンプルにしようとしているのか、削る必要のないとこまで削っちゃう風潮って、最近のGoogleのUIでも感じますね。

開発:まあ、ということで、Finderでやりましょう。まず Finder で New Smart Folderを開く。

開発:やりたいことはただこれだけですね。探索するディレクトリを限定するところはとりあえず放置します。条件はPNGかPDFで1日以内に更新されたもの。

開発:でこれを「最近のそれ★」という名前でFinderのサイドバーに固定します。

基盤:しかしこれ、リストモード以外の表示では指定したようにファイルがソートされてないって、どういう思想なのでしょうね?

開発:それとか、これはバグと言うかSmart Folder未対応なのかなというのがコレ。メニューから直接、スマートフォルダーに飛べないんです。

基盤:日本語がきらいとか?

開発:いや、そういうことでは無く、ローマ字でも。すでに消したスマートフォルダ名がメニューに残ったりもします。

社長:まあ、この辺りも過渡期を目撃している面白さなのかも知れませんね。

基盤:おや?Add to Dock というのがありますね。

開発:ほんとだ。どれどれ。…

開発:うーむ。

基盤:なんというか気まずいものを見たような空気感ですね。

開発:Sort by Modified にしてるんですが、そのとおりになってないし…

社長:なんにしても大混雑のDockに行くのも嫌ですね。せめてメニューバー。できればデスクトップで右クリックが良いです。この New Folder の下あたりにぜひ。

開発:ああ、さっきの「最近のそれ」がまだメニューにあるのは、Smart Folder置き場にあるからですね。Finder のサイドバーの右クリックの Show in Enclosing Folderで出てきました。

開発:ではこれを削除して…

基盤:あれ?

開発:なんというか、メニューとの連携というか同期が不完全ですね。

* * *

開発:それにしても、今日から世間が4連休だというのは知りませんでしたね。

基盤:体育の日が7月だなんてびっくりです。

社長:そうとはしらず、昨日クロネコでモノを送ってしましました。まあナマ物ではないですし、来週月曜には再配達してくれると思いますが。

* * *

開発:さてそれでこの件で調べていてとても面白いと思ったのは、上で見た Smart Folder の実体です。これは .savedSearch という長たらしい拡張子のついたXMLファイルなんですが、これを MacOSX がウィンドウアプリで開こうとすると、Finder が選ばれて起動されて、その XML に記述された条件で検索・フィルタする、っていう仕組みになっているように見えます。

開発:でその、「ウィンドウアプリで開く」のが /usr/bin/open という小さなコマンドらしいんです。とても印象的なのが、man open の最後に「HISTORY: First appeared in NextStep」とあることです。

社長:歴史というか出自を感じますね。

開発:そういうわけで、上のような条件で検索した結果を表示するFinderを開くには、単に /usr/bin/open “最近のあれ★.savedSearch” とすれば良いことがわかりました。

基盤:あとはこれをどうメニューに表示するかですね。

* * *

開発:というわけで紆余曲折しましたが、思ったようにメニューに表示することは今の所できてません。キーボードのショートカットなら簡単。ですが、実は人間がクリックやらキーインせずとも、自動的に状況をみてポップアップするというのが一番良いかもという事になりました。

開発:仕組みとしては MacOSX のAutomatorアプリのワークフローを活用します。「Folder Action: A workflow attached to a folder in the Finder. When items are added to the folder, the workflow runs and the files are used as input to the workflow.」

社長:昨日 Apple のガイドをけなしたばかりですが、これは簡潔でわかりやすい文章ですね。Go のガイドみたいです。

開発:ただ複数のフォルダーのアクションを見張っていることは普通に必要なので、それが一つの条件式書けばOK的にサポートされてないのはちょっと残念かなとは思います。

社長:一方でフォルダアクションのアタッチという形で、変化のあったフォルダをポップしてくれるという機能を使えば、私の希望はほぼ叶えられていたとも言えます。

開発:「Smart Folderの内容に変化があったら発火する」という条件が書けると良いのだと思いますね。Smart Folderにしても、ソートして最初の20件だけ採るとか、時間の範囲も分秒単位で指定できるとかしたい。

社長:そのへんはOSで仕組みを作ってくれないと、性能的に無理ですからね。

開発:FinderのPreferenceにしても、起動時に自動的に開くフォルダとして、Smart Folder が指定できないようなんです。

開発:変化があってからアクションが起こるまでに5秒程度の遅延があるのも気になります。Finderで起こした変化なら1秒以内に反応するんですが。

社長:でも最近の Catalina のアップデートぶりを見ていると、どんどん良くなってくんじゃないかと期待してしまいますね。なんしても、今日は我社にとって、MacOSXで workflow というものと、なんちゃって app を最初に作った記念日になりました。one giant leap だったと思います。

開発:それにしても、コンテクストメニューに対応させる service が、システム環境設定のキーボードのショートカットにあるというのは、たまげましたねw

社長:右クリックとか、コンテクストメニューって昔のMacには無かったのかもね。

— 2020-0723 SatoxITS