ブラウザユニオン

経理:今日は .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