設備投資

社長:いま我が社に一番足りないリソースは何でしょうね?

開発:時間です。

基盤:RAMです。

社長:とりあえずRAMから。具体的に。

基盤:HDDの増設で仮想マシンのディスクは余裕しゃくしゃくになりました。しかし、ホストの実メモリが足りないと、実行の性能が1/10以下に落ちます。ホストの実メモリにキャッシュ・バッファされてないと実ディスクとのI/Oが発生するわけです。ディスクとのI/O量は1MB/秒程度なので、ページフォルトに伴うものと思われます。量的には大したことがないですが頻度が高いため、特にHDDでは悲惨なことになります。待ち行列が伸びてます。

SSDとHDDの上でそれぞれ動作するクローンVM

基盤:一つ技術的にわかっていないのは、Hyper/Vが仮想マシンの立ち上げの際に「メモリが足りないので立ち上がれません」と言ってくるくることで、この立ち上がりさえ乗り切れればあとは、実行中にいい感じに調整される可能性はあります。ただいずれにしても、mozillaのビルド時のように仮想マシンの実使用メモリが8GB以上ある状況で、ホストの実装メモリが8GBしかないというのはいかにもアンバランスです。

開発:増設しましょう。

基盤:このレノボ機にはメモリの空きスロットが3つあります。メモリの仕様はPC4-21300 (DDR4-2666) SDRAM UDIMM。

経理:8GBで4,000円くらいが相場みたいですね。2枚セット8,000円前後で売ってる場合が多いようです。16GBで1枚もありと思いますが。メーカーは?

基盤:この、サムスンのちょっと安いけどちゃんと洗えてるかなあ(笑)。でもどこのでもいいんでは。どうせ永久保証ですよね。

経理:ではこっちの8GBを2枚。5%還元です。注文を確定する、プチッ。明日 08:00 - 12:00 にお届け指定しました。

基盤:いきなりメモリ3倍かー。幸せの値段って結構安いな。というか、PCメーカのオプションRAM容量って、なんであんなに高いのかな。4倍ぼったくりですよね。

開発:しかしこのレノボ Think Centre 君もキャンペーンを終えて手の届かない人になっちゃったね。一方このTinyシリーズ。MacMiniほどではないにしろコンパクト。4万円台から。会社設立時にも検討しましたが、やはり魅かれるものがあります。少なくともエンドユーザ環境でのテスト用にはぴったりですよね Home だし。

社長:最近はエンドユーザっていっても業務系は Pro なんでしょうけどね。

基盤:Pro にするなら Hyper/V 使わなきゃ絶対損です。

営業:何かアドオン的なちっちゃい仮想マシン作って売れないですかねえ。アプリのノリで。MyWordPressVMとか。

開発:クラウドのドライブをSMBにゲートウェイするVMとか。

基盤:何を独自の付加価値にするかですね。

--
2020-0609 SatoxITS

さたぽん(satapon)

社長:帰りました。

経理:酒臭いですね。

基盤:その間にVMのバックアップ、無事終わりました。所要52分13秒。SDD to SDD での圧縮保存と変わりません。お値打ちHDD作戦、完全勝利ですね。

ついにバックアップ完了!

開発:今日はどこへ。

社長:あの不思議でanonymousな和食の店に行ったのですが閉まってたので、40mばかり隣のタイ料理の店へ流れました。あそこのおばちゃん、鉄人ですかね。いつ行っても開いてる。

開発:さすがにトムヤムもグリーンカレーも飽きたと言ってましたが。

社長:今日はランチメニューでいってみました。あそこって、内外装はあれですが、メニューはすごく綺麗なんですよね。メニュー①ほにゃららライスにビール++。

社長:それで、飲みながらゴルフ系の掲示板を眺めてポストしようとしたら「規制」。私のような善良な投稿者が悪い人の巻き添えで投稿を規制されるなんて、納得できない!。いっそ我が社でも互換の掲示板立ち上げましょうかね?そもそも匿名とか。昔は anonymous coward と呼ばれたものです。

基盤:まあそういう時はお店のWiFiで回避。

経理:というかデフォでWiFi Onにしませんか。通信費を数千円削減できる可能性があります。

基盤:いっそAndroidの格安スマホで良いのでは。

経理:公用携帯ですね。

社長:ですから、WiFiをOnにしたら、トップに出てくる元気のいい APがあったんでこの店のかなと思うわけですが、STATION RESTAULANT とか書いてあるのでTXつくば駅ですか??って。あたり前ですがカギマークがかかっているわけです。で、おばちゃんにスマホ見せて、これここの店の?パスワードは?って聞いたんです。

基盤:おばちゃん、定形外の日本語通じるんですか?

社長:それなんですが、日本語以前にテクニカルに?だったんですが、隣から助け舟が入ったんです。うら若い女性、そう外見的には優香を可愛くして85%くらいに縮小して聡明にしたような。

広報:優香の時点で可愛くないですか?

基盤:優香のリアルサイズって実感的にはわからないですが。

営業:うら若いとか、妙齢のとか、使ってみたい形容詞だったんですね。

社長:それでその女性が、うしろの壁面にパスワード書かれてますよって。そもそもSSIDはSTATIONではなくてSATAPONでした。

基盤:だいぶ違いますね。

開発:ところでタイ系の名前にみられる「ぽん」ってなんなんでしょうね?どうも、ぺこぽんみたいでユーモラスに感じちゃいますね。ゆずぽんとかポンジュースとか。あれ?ぺこぽんじゃなくてぽこぺんだったっけ。

社長:敬愛されてた元国王がそうでしたね。それでその後ですが、その妙齢の女性が携帯で話をしているのが耳に入ったのですが、あれはたぶん、タイ語だと思われます。彼女が店に入ってきた時に、ほー、こういうエスニックな店にこの時間帯にこのへんの女子大生が一人で来るんだなとは思ったんですが。実は微笑みの国から来た人だったのかなって。

基盤:その店、タイ料理って断定してますが、判断する根拠はあるんでしょうか?

社長:理由?トムヤムクン出してるからかな。でも私はあまり細かい出自は気にしないです。タイ方面から来たのかなくらいな。なんとなくマヤデビ的でも、うまければ良いのです。

社長:あれ?そういえば店内でタイ語の文字っぽいの見かけた記憶が無いですね・・・

開発:民話的には、厨房でタヌキが頭に葉っぱ載せてでんぐり返してたって流れですね。

社長:うーむたしかに、梅雨時にカタツムリが這ってる草みたいな匂いの散らしてあった。

基盤:それはたぶん、パクチーのことですね。

--
2020-0608 SatoxITS

VMイメージの高速アーカイブ

基盤:VMのバックアップ、遅いですねー。128GBのzipに3時間半とかいってるわけですが。

開発:zip の時間見積もりはいつもいい加減ですからね。多分実際には数十分でしょうけど。

基盤:不思議なのは、CPUもディスクのI/Oも、全然空きがあるってことなんですが。何がネックなんでしょうね?

開発:まあ、何かの待ち合わせですかねぇ。SSDの書き込み待ちとか。キャッシュとかは簡易パフォーマンスモニタでは見られないんでしたっけ?

基盤:あー。ディスクが足りなって、zipがへこたれました。40GBの作業スペースでは足りなかったみたいですね。なんで途中こうなるだろうと予測しないんですかねぇ?エラーで終わらずに、開けてくれるのを待つとか。どこかにワークディスクを追加してもらうとか。

開発:そのへんはUnix、特に最近のLinuxはよくできてますね。Hyper/Vもそういう感じがしますね。

基盤:gzip でやってみますかね。

基盤:gzipの場合の波形もzipと似たようなものですね。時々全く圧縮が効いてなそうな区間があるのが面白い。

開発:乱数データでも入ってるんですかね?暗号化されているとか。何にしても、凡庸な区間を見てると、いかにも圧縮率1/4なんだろうなって感じがしますね。

基盤:この凡庸な区間には何がつまってるんでしょね?

開発:やっぱ凡庸なファイルですかねえ(笑)

基盤:おおっと、gzipも最終版になってディスクフルで終了しそうですね。まあ圧縮率は似たようなもんでしょうから。

開発:なんにしても論理的につながってない脈絡の無いブロックの連鎖でしょうから、ハードディ数の生圧縮というのは通常の圧縮プログラムが期待する入力データじゃないですね。特化した圧縮方法というかオプションがあるべきだと思います。

基盤:おっと、gzip もディスク無しで終了です。

開発:スペースの問題は簡単に解消できますが、128GBの圧縮保管に1時間。このやり方は実用的ではないですね。

社長:チェックポイント、スナップショット、バックアップ、アーカイブ。用途によっていろいろ工夫のしどころがありそうですね。おっと、携帯が。

経理:アマゾンから、HDD置配完了のメールです。

開発:噂をすればというかなんとタイムリー。

基盤:ドアを開けたらそこにありました。さっそく開封してUSBをぐさっと。おー、よい景色ですね。

開発:救世主来たる。というか、一瞬なんのことかわからない空間ですね。NTFSですかね。

社長:バックアップ走らせといてお昼にいきましょう。

--
2020-0608 SatoxITS

これからのブラウザはVivaldiかも

社長:Chromeよりはずっと良かったのですが、Operaにもそろそろ不満が鬱積してまいりました。それでちょっと探したらVivaldiというのが面白そうだなって。

基盤:これからは一生Operaだって、ほんの一月前に。

社長:そうですね。Operaが最高だと思ったのはまずあのリカバリー能力。それとサイドバーブックマークの使いやすさと編集し易さです。ですが、最近リカバリーのお世話になることがあまりなくなりまして。一番嫌気がさしているのは、プライベートウィンドウのあの色使いです。あれはすごく嫌。もう耐えられない。

別れの決定打

ブックマークはサイドバーで

社長:それで検索したのですが、Vivaldiというのもサイドバーのブックマークだっていうから、ダウンロードして使ってみたのです。こんな感じ。

良い色は気分を良くする

社長:くーっ、なんていい色でしょうねえ。その上、枠の色をコンテンツに合わせて適当に選んでくれるんですよ(!)。しかもそれが極めて適切な色なんです。

社長:機能的には、わたしがOperaの長所だと思っていたほとんどの美点をVivaldiも備えていることがわかりました。

社長:そのうえ表示方法が良い。たとえば右下に時刻表示がされてて、そこをクリックするとさくっと時計が出るというのがデフォルトというこのセンス。ただの時計じゃなくてアラーム機能付きです。

気の利いたネーミング

社長:機能へのアクセスにしてもそう。コンテクストメニューでタブの「Duplicate」じゃなくて「Clone」ですって。このセンスにも共感します。私があと欲しいのはウィンドウのクローンですが、それもあるのかも知れません。

アクセシビリティ

社長:操作性にしてもそう。拡大縮小がスライドバーでできるって、目からウロコでした。拡大率も常に表示されてる。この点は、マウスホイールで拡大縮小ができなくなってる私の環境の問題ではあいますが、まったくもって素晴らしい。

拡大率表示

社長:あ、あれ?Command+ホイールで拡大縮小できますね・・・なんだ、OperaではAllt+ホイールだったんですか。これはまた失礼。なんにしても、たとえばWordとかパワポでできる表示の制御は、ブラウザにもできて欲しいわけです。そういう意味でこれはなるほどと思いました。

遊び心

社長:その上遊び心。この3D変換。実用的な意味があるのかわかりませんが、面白すぎます。潤沢になったコンピュータの能力を楽しく生かしてますね。

タブそしてウィンドウの回復

社長:あれ?でもクローズしたタブを復活する機能が見つからない。Operadではウィンドウの枠部分で右クリックなんだけど… でも、あそこが狭いとやりにくいんだよね・・・

開発:その代わりに右端にゴミ箱がありますね・・・

社長:とりあえず右クリック・・・

社長:そうか、そういうことか。私の考えが浅かった。この考え方が正しい。・・・というか左クリックでも出てくる。背景色だけの違い?

開発:なんかの遊びかも?でその Windows with 3 Tabs ってひょっとして・・・

社長:Restore All でウィンドウごと回復しました。降参です。あ、でも、タブのセットに名前をつけて保管したいんだけど、さてできるかな?Vivaldi君。

遅い時もイライラさせない

社長:これ、リロードすると、進行状況というか、ロードしたリソース数とサイズが表示されるんです。これもいいなー。

開発:初期のブラウザーはそうなってた気はしますけどね。

社長:プログレス情報ってイライラを緩和するのにすごく良いと思うんですよね。終わるのを待つのが楽しくなったり。ネットワーク状況もコンテンツの素性もなんとなくわかるから一石N鳥です。

複雑なものを簡単に見せる

社長:うおー、なんだコリア!

開発:カスタマイズ能力もすごいですが、設定のし易さが素晴らしい。

基盤:画面のソコに歯車がいつもあるって、理念を体現してますね。

社長:設定の「Display ALL」。こういうのが欲しかった。

開発:ブックマークをその

結論

開発:豊富な機能がありつつ、機能へのアクセスが簡単である。考え方が斬新で、なんだか楽しい。昔良かったものもちゃんと残っている。そういう感じですね。

社長:そう、これは実にまったくクリエイティブです。Vivaldiは我が社認定CC金賞候補、社長推薦枠で。

社長:思うのですが、会社設立前から、この使いにくいブラウザ達は何とかならないのか、そのために自社で何かやろうかと考えていたのですが、Operaで80%くらい満足、そしてついにVivaldiで90%以上満足してしまいました。私が欲しかったもの、やりたいと思っていたことは、ほぼVivadoで実現されています。これって、お金払いたいですね。

経理:会社の経費ではちょっと・・・

開発:コードで貢ぐとか。

--
2020-0608 SatoxITS

Monzilloの第一歩

開発:さーてそれではなんかやってみましょうか。

社長:宿願のfile URLの表示を。特にパンくず。

基盤:ソースはどこでしょうね。find . -type f -exec grep "Up to higher "{}" "";" ・・・重い。帰ってこないですね。Eclipseとか使いたいなー。

開発:Windows Explorer は「File Explorer」と名前を変えました。ですって。2018年5月。というか、コマンドキーを押しながらEを押すと開くんだそうです。知らなかった。アイコンまでマウスを動かす必要なかったのかー。

基盤:あ、ぽろっと出た。

u18$ find . -type f -exec grep "Up to higher" "{}" ";"
DirGoUp=Up to higher level directory

基盤:しまった、どのファイルかわからない(笑)。なんにしても、Cで書いてあるわけじゃないですね。ちょっと嫌な予感。でファイル名を表示したいんですが。man grep。あ、-H オプションというのがあるのか。再実行。

開発:それって、あるとは思ってたんですが、30年以上man もせず、不便してました (^-^;

社長:そう言えば、Mercurial とか何も使って無いですね。検索機能とかあるのでは?

基盤:あ、出ました。

u18$ find . -type f -exec grep -H "Up to higher" "{}" ";"
./thunderbird-77.0/netwerk/locales/en-US/necko.properties:DirGoUp=Up to higher level directory

開発:なんだ、プロパティというか定数集めたファイルみたいなやつか。

基盤:開いたら、あちこちに非ASCIIというかバイナリみたいのが入ってるげなんですが。生成したファイルですかね?で当該の定義がこれ。

# Directory listing strings
DirTitle=Index of %1$S
DirGoUp=Up to higher level directory
ShowHidden=Show hidden objects
DirColName=Name
DirColSize=Size
DirColMTime=Last Modified
DirFileLabel=File:

開発:まー locale てあるから、言語ごとにあるんでしょうね。

基盤:いえ、en-US しかないですね。打ち捨てられ感。まあちょこっといじってみましょう。全部大文字にしちゃえ UP TO HIGHER LEVEL DIRECTORY。バイナリだといじっちゃいけないかも。でもちょっとおまけして、make。make run。おー、大文字に変わった。

最初のいたずら

開発:それでこの necko っていうパーツというか何か、何ですかね。firefox necko でぐぐる。あー、ネットワークモジュールのことですか。https://developer.mozilla.org/ja/docs/Necko

ネットワークライブラリ (Necko) は、トランスポートからプレゼンテーションレイヤーに至るネットワーキングにおける、複数のレイヤーに対応したプラットフォームに依存しない API を提供します。この API は Mozilla クライアントで利用されますが、他のネットワーククライアントを書く際にも使用することができます。
・・・
最新のソースコードは netwerk/ で見ることができます。

基盤:ああ、netwerk/の下ですか。検索が速くなります。でもそのハイパーリング、Service Unavailable ですね (^-^;

u18$ find netwerk -type f -exec grep -H "DirGoUp" "{}" ";"
netwerk/streamconv/converters/nsIndexedToHTML.cpp:    rv = mBundle->GetStringFromName("DirGoUp", parentText);
netwerk/locales/en-US/necko.properties:DirGoUp=UP TO HIGHER LEVEL DIRECTORY (^-^)/

基盤:cpp でした。ホッ。vi nsIndexedToHTML.cpp。けっこうでかいですね861行。ファイルにもファイル内にも更新日付が無いというというのが悲しいですが。/DirGroup。ああ、ここです。

  if (!parentStr.IsEmpty()) {
    nsAutoString parentText;
    rv = mBundle->GetStringFromName("DirGoUp", parentText);
    if (NS_FAILED(rv)) return rv;

    buffer.AppendLiteral(R"(<p id="UI_goUp"><a class="up" href=")");
    nsAppendEscapedHTML(parentStr, buffer);
    buffer.AppendLiteral("\">");
    AppendNonAsciiToNCR(parentText, buffer);
    buffer.AppendLiteral("</a></p>\n");
  }

基盤:でその直下に、こう続きます。てことは、これ、file だけなくて、FTP とかにも共通なんですかね。

  if (uri->SchemeIs("file")) {
    nsAutoString showHiddenText;
    rv = mBundle->GetStringFromName("ShowHidden", showHiddenText);
    if (NS_FAILED(rv)) return rv;

    buffer.AppendLiteral(
        "<p id=\"UI_showHidden\" style=\"display:none\"><label><input "
        "type=\"checkbox\" checked onchange=\"updateHidden()\">");
    AppendNonAsciiToNCR(showHiddenText, buffer);
    buffer.AppendLiteral("</label></p>\n");
  }

  buffer.AppendLiteral(
      "<table>\n"
      " <thead>\n"
      "  <tr>\n"
      "   <th>");

開発:HTMLべた打ちがうれしいような悲しいような。まあこれで全然問題ないと思うけど。つまりその、AppendLiteral してる buffer あたりをいじればいいのかな。

基盤:そうですねぇ・・・どんなHTMLソースになってるのかと見てみると、こんなのが出て来ちゃて。

基盤:いったんHTMLを生成してそれを普通に解釈するという作りにはなってない感じですね。ちなみにOperaはこんなふうに、ごく普通です。

開発:すこし雲行きが怪しいですね・・・まあでも、そのAppendLiteral というのを試してみましょう。

基盤:ではとりあえずこんな感じで。

buffer.AppendLiteral("<pre>\n");
buffer.AppendLiteral(" @ @ <br>\n");
buffer.AppendLiteral("( - ) {DirGoAncestors} <br></pre>\n");

開発:あれ?

基盤:あはは、途中まで書きかけてコンパイルしちゃいまたね。というかここで生産性上の深刻な問題が。main()とかさっきのlocaleとかは firefox 本体にあってmakeでサクッとできますが、Neckoとかはshared libraryになるわけです。で、それを作るのに例のクソ重いrastccとldが走る。これ10分がかりです。おそらく、リリース用の入念チェックか何かをしているんで、開発用のmakeにすればいいんだとは思いますが。あできた。mach run。あれー、鼻の下が長くなっちゃいました(笑)

社長:ところでこれ、Goで書いた部品を組み込んだりしちゃいけないんですかね?

開発:Mozilla Public License ってすごく緩いんじゃ無いですかね。そもそも社内でいじってるうちは何の問題も無いかと。

基盤:あー、さっきからUbuntuが反応しないなと思ってたら、こんなことに。またディスクフルです。「ディスクでの重大なIOエラー」で一時停止してます。

基盤:VM用に139GBに達してますね。あー、まずはAvast削りますかねっと。さようならー。1GB空きました。あと大口だとAcrobat DCが2.5GB。当面もうWindowsでAcrobat使うことないですね。アンインストール。しかしAcrobatのくせになんで2.5GBもガメてるんですかねえ?しかもいつまで削除の準備中なのやら…。Windows Softoware Development Kit, 18/04/2020。なんすかこれ?2.35GB。

開発:いや、ちょっとWindows のドライバーでも書いてみようかなと・・・

基盤:削除で。しかし、Acrobatは何やってるんでしょうね?最後の抵抗?

開発:どっかに何か隠れて無いですか?

基盤:・・・このようなものが。なんで派手派手しくポップアップしなかったんですかね。RemoteDesktopのせいかな?でも、前から時々あるんですね。タスクバーでこっそりチカチカしてるとか。

基盤:あれ、どこからともなく8GBの空きが。またHyper/Vの仕業でしょうか?おー、HV復活してますね。

基盤:Development Kit の削除も忘れずにっと。

開発:ただ、思うにホストのディスクが256GBしかないのに、半分以上VM用ってのは、何かアンバランスですね。

社長:うーん。レノボ君にはSSDを増設しますかね。内蔵か外付けか。それが問題。

基礎:さて、10GB空きができたのでUbuntu再開。おや、今回はちょっと時間がかかりましたね。fsck的な回復してたのかな・・・あれ、またおかたまりですか。作業用のディスクが足りないのかなー。

開発:あれー、Windows版のDeleGateのmakeができなくなっちゃってます。Visual Studio の include がない。シクシク。アンインストールした Development Kit というのに含まれてたんじゃないですか・・・

基礎:この際 Office もアンインストールしましょう。

開発:マジ?

基礎:だってもう1ヶ月以上、Winodwsでは使って無いですからね。今後も使うことはないでしょう。アンインストール。ぽちっと。iTunesもTeamsもぽいぽいぽいっと。エンドユーザ様が使うツールはWindowsにはいらん。このVisualStudio系の山のようなのも一旦削ります。かたっぱしからぽいぽいぽいっと。あーっ快感!

開発:社長・・・

社長:構いません。続けて下さい。

基礎:全てはHyper/Vのために!わーいHyper/Vが再開しました。おー、40GB空きましたね。もう Hyper/V無しで生きていけない。

社長:ところで私は、以前から赤系が苦手なんですが、好きな赤もあります。茜とか柿右衛門とか。Ubuntu18デスクトップの右上のほうは、かなり好きです。

開発:でも、圧縮すると、パレットのせいなんでしょうけどずいぶんひどい色になっちゃいますね。l好ましいといっているのはこの部分ですが。

基盤:そのへんは、WordPressで使ってる圧縮ツールの問題じゃないですかね。あんまり色あいの保持を考えてないとか。MacのPreviewで小さくすればこんな感じ。

開発:かなりまともです。

社長:Apple製品はすべてまともです。ただし iClould を除く。

開発:うちで構築するWordPressサーバにはこういうのを使いたいですね。

基盤:そういえばコンパイル終わってました。こんな感じ。

社長:おお、良いですね。あとはパスにアンカーつければ。

開発:しかし、リブートしちゃうと、複数ログインしていたヒストリーの一つしか残らないのが悲しいです。さっき何やってたんだろうと。

社長:そもそもSSHとかじゃなくて、ふつうにブラウザからHTTPサーバに入って、ブラウザをターミナルエミュレータとして使えればいいんじゃないですかね。mod_terminal とかあるんでは?接続後にプロトコルを変更(UPGRADE?)するメソッドってありましたよね。

開発:Upgradeヘッダですね。

基盤:どのブラウザも ssh://hostname とか telnet://hostname というスキームは受け付けますが、いずれも端末アプリに投げるだけですね。まー、ブックマークとして管理できれば多少便利かも。

開発:それはそうと file URLのアンカーを片付けましょう。要は、file:///p1/p2/ という文字列を、こんなふうに変換するだけで良いはずです。

file:///p1/p2/...

 ↓ 生成

<a href=file:///>file:///</a>
<a href=file:///p1/>p1/</a>
<a href=file:///p1/p2/>p2/</a>

社長:split と join ですかね。scanf と printf というか。

開発:C++でどうやるのかというと・・・ぐあー、なんかやたら std:: というのがうざいんだけど。

* * *

社長:それでどうなりました?

開発:C++流のやり方でやろうかと5分くらい調べたのですが、嫌気が差してCで書くことにしました。

社長:(笑)

開発:それで問題だったのは、mozilla が使っている文字列のクラスと名前のCの文字列とのやりとりです。その文字列は nsCString というやつなんですが、どういう定義なのかソースコードを探してもよくわからず、結局ようやくMDNにドキュメントがあることがわかりました。

開発:それで思ったのですが、ちょっとかじっただけですがGo言語なら、ライブラリを検索するのも簡単だし、その仕様もとてもわかりやすく、かつ見やすく説明されていることがほとんどです。一方、mozillaのは、どこの廃屋?感がヒシヒシ感じられます。まあ、わかってみれば何の事は無いのですが。とにかく、とっつきにくいというか、最初の一歩の敷居が高いです。

開発:そもそも私は文書、特にウェブのページとかでその作成・更新日が記載されてないのって、アンビリーバブルなんです。それがいつ記述されたものなのか、文書を読む上で、どのくらい真剣に読むか、あるいは読まずにスキップか判断する上で、最も重要な情報のはずなのに。プログラムにしたってそうです。

基盤:とまー、ぶーたれていたわけですが、実は先ほど、mozilla のソースやドキュメントについて、まともな記載がされているサイトを見つけました。その名も firefox-source-docs.mozilla.org です。Firefoxのビルドについてもとてもわかりやすくまとめてあります。で、いまその指示書どおりにやり直しているところです。基本的には同じ事のようではあるのですが。まあ、MDNは実際、廃屋だったんですね。

基盤:で、こっちのやり方でやったら、流石に最初のダウンロードだけは数十分かかりましたが、ビルドは1分15分で終了でした。

 1:15.13 Packaging quitter@mozilla.org.xpi...
 1:15.26 Packaging mozscreenshots@mozilla.org.xpi...
 1:15.40 0 compiler warnings present.
 1:15.43 Overall system resources - Wall time: 75s; CPU: 0%; Read bytes: 0; Write bytes: 0; Read time: 0; Write time: 0
To view resource usage of the build, run |mach resource-usage|.
 1:15.44 Your build was successful!
To take your build for a test drive, run: |mach run|
For more information on what to do now, see https://developer.mozilla.org/docs/Developer_Guide/So_You_Just_Built_Firefox

基盤:高速化のミソは、コンパイル済みのオブジェクトを自動的に落としてくれることです。そうさせるには、mozconfig ファイルに以下の一行を書く、これだけです。

ac_add_options --enable-artifact-builds

開発:ただ、少しでもいじるとその影響範囲はどうなるんでしょうね。特に、全体におよぶオプションを変えた時には、結局全体の再コンパイルになるのではないかと思います。

開発:それはともかく、最初の第一歩の要件だった、「上のディレクトリ」でなく「上位の各ディレクトリへの直接移動」ができる機能はできました。

開発:mozilla の流儀に慣れるのに少し手間取りましたが、やることは簡単なので、実際簡単に実現できました。この機能は少なくとも私にとってはとっても必要なものでした。このような機能がこれまで Mozillaで、あるいはApache等のサーバ側でも、実現されてこなかったのが不思議でなりません。

基盤:できましたねー。ただ、もうちょっと何か見栄えのする見せ方が必要かもしれませんけど。カーソルあてるとポップアップするとか 。details活用するとか。既存の表示の中に差し込むのもあれなので、完全にオリジナルのページにしたほうが良いと思います。あとやっぱり、Windows版もMacOS版も欲しいなあ。

社長:素晴らしい。地味だけど、one giant leap for our company です。

--
2020-0607 SatoxITS

記念写真

開発:それではさっそく、なんかいじってみますか!

社長:ちょっとその前に記念写真を撮っておきましょう。我が社のMonzillo計画最初の一歩の手前です。ビルドは通ってますね?

基盤:一応、browser/app/nsBrowserAPp.cpp のmainの先頭に当市のシンボルキャラクタAAを入れました。

広報:ロゴはまだ考え中で・・・

社長:よいですよいです。こういう時はためらわずに。

基盤:ではいきます。rustc さんもOKかな。ではハイ、ヒール。パシャ。

Mac > RemoteDesktop > Windows > Hyper/V > Ubuntu > Monzillo

基盤:ところでこれは本当にMonzilloていう名前にするんですか?

社長:社内開発コードですからノリで。私の辞書にも登録っと。あ、でも一応ドメイン名とっとこうかな。monzillo.work 1円也と。プチ。

経理:社長、.inc にチェック入ってますよ。

社長:ギョ。なぜだ・・・プツ。 指差し確認、Go!

経理:当社70〜72番目のドメイン名となりました。自動更新お断りも忘れずにしときます。ペチっと。

基盤:これ全部他社に移管するんですか?XSOの嫌がらせ半端ないですが。

社長:来年も継続する分は移管して、移管先で更新します。でも生き残るのは10件くらいかなぁ・・・

--
2020-0607 SatoxITS

Monzilloブラウザの開発

社長:あっしニャー関わり合いのねえこって。の木枯し紋次郎って上州生まれって設定なんですよね。

基盤:3分間待つのだぞ、ってやつですね。じっと我慢の子であった、ってコマーシャル覚えてます。

開発:さーて、なんかいじってみましょうかー!

基盤:それが今、復活したVMを圧縮してアーカイブ中でして。30MB/s くらいでしか進まないので、100GBのバックアップに数十分かかってしまうという。まあ、月曜にディスクが来たら、まずコピーだけして、圧縮・アーカイブは後ほどゆっくりで出来るんですが。

社長:思うに、ファイルの複製なんていちいちアプリ層まで上げないでOS内でやってくれれば、かなり高速化すると思うんですけどね。それとか、片方で読んでて片方で書き換えて使うなら、copy on write 的なカーネル機能を活かすとか。

社長:この波形、故郷の上州で見る山並みに似てます。三山的な。

開発:まあ、zipの処理に律速されてるんでしょうけど、CPUを使い切ってないのは、うまく読み書きとインターリーブされてないんですかね?

基盤:この場合ZIPは全6コアを並列に使ってやってるみたいですね。並列化してるってことは、結構でかい単位でブロック化してるってことですかね。書き込みの波形がキートップの並びのようで面白いです。もしや、マルチフェーズの圧縮でパイプラインとか?

開発:そうですか。確かに圧縮でサイズが1/4になるのは魅力なんだけど、圧縮って重いよね。ただの転送より10倍以上遅い。特に高速化したネットワーク上の転送なら、圧縮しないで送ったほうが速かったり。回線が100MB/sの能力があるのに、PCで必死に25MB/秒に圧縮するのって意味ないよね。

社長:それはちょうど今のプロッサ能力と広域ネットの幅とが鬩ぎ合ってる感じで、どっちにも転びますよね。ネットの性能をモニターして、臨機に最適な圧縮方法・圧縮率を選択できると良いのでしょうけど。可逆圧縮の場合、そういう事ってやられているんでしょうかね?

基盤:まあディスクにしても、4倍というのは同価格のSSDとHDDの容量差に近いですから。HDDには圧縮しないでアーカイブしても良い。すると回復も高速にできる。どうするかは他の条件次第ですね。

開発:まあHyper/Vのチェックポイントを使う場合の賢いアーカイブの方法というのもあるのでしょうね、きっと。

基盤:OneDriveで何かしないですかね。同じ会社の製品なんだし。全般的に、インテリジェントなドライブを目指している感じだし。

社長:まああそこは、横の連携無さそうですしねえ。ネットワークさえつながってなかったりして。

基盤:あ、アーカイブ終わりました。

開発:では、いよいよ。

--
2020-0607 SatoxITS

Hyper/V最高!

開発:それではさっそく、なんかいじってみますかね。

社長:当社で独自変更したのには、なんかFirefoxじゃないモジリを入れたいんだけど。Monzillo とか。ダメなのかな?

基盤:・・・悲しいお知らせです。さっき仮想マシンを一旦落としてチェックポイントを潰そうとした時に、なにかガチャガチャやったせいか、壊れました。

開発:あら。

基盤:残念ながら、HVはフールプルーフには出来てないようです。

開発:何が起きたんですか?

基盤:それがこの、チェックポイントをマージする時のディスクアクセスが面白くてですね。さっき潰した時にピークではSSDに300MB/秒を超えてアクセスしてました。なので、HDDにした時にこれを律速されないかというところに興味。

開発:なるほど。その時が一番高速アクセスしそうですね。普通の使い方では頻繁にやらないとは思うけど。差分ディスクというのはとても面白いと思う。今気になってるのは仮想ディスクのバックアップにかかる時間だけど、それも差分だけなら高速化できそうだし。rsyncと組ませたら完璧かな。まあお金持ちなら全部RAMでやっちゃたりするんでしょうけど。FeRAMのディスクとか無いのかな?

基盤:おっと今気づいたんですが、ホストのSSDが満杯になってます。このせいですかね?

基盤:で、さらに今みると、C:ドライブが完全に満杯になってました。

基盤:つまり、バックグラウンドで何かやってます。HVのメッセージに「ディスク結合が保留中です」とありますから、ひょっとしてディスクを空ければ再開してくれるの?と期待しました。それでいらないファイルを見つけてなんとか11GB空けまして(まだゴミがあったのでした)、Hyper/Vをつついてみたところ、なーんと、復活してしまったんです!

基盤:偶然ですが、その感動の一部始終が録画されてました↓

蘇るHyper/V仮想マシンの一部始終

基盤:結論。Hyper/Vはフールプルーフでもありました。

開発:うーむ。それはよかった。でも、ちょっと寡黙過ぎるよね。もうちょっと、何やっているのか主張してくれたほうが良いのではあるまいか?

社長:すばらしい。Hyper/V最高ですね。当社認定CC候補確定。

基盤:それはそうと、Macでラクラクスクリーンショット撮りまくってるとすぐにデスクトップがいっぱいになっちゃいますよね。

基盤:確かにスタックにすれば片付くんですが。

基盤:スタックをやめるとぶちまけるのって、バグでしょうか?

開発:まあデスクトップじゃないとこに撮ったのを入れてもらればいいっていう話ですけどね。

社長:昔から不思議なんですが、なぜ全てのフォルダがデスクトップと同じように表示するモードを持たないんでしょうね?逆についてもですけど。

--
2020-0607 SatoxITS

開発用仮想マシンはオンプレミスで

開発:クラウドの世紀だなんて思ってました。開発用の環境もクラウドのVMにしちゃおうかって。でもこのHyper/VでUbuntuやってみて、今思えば、あれは何の世迷いごとだったろうとつくづく思いますね。

社長:まあ、五年後どうかはわからないですけど。時期尚早でした。

基盤:それで、FirefoxとThunderbirdの77をサラからビルドしてるんですが、面白いので並列にやってます。コアは6つのうちの5つをあげました。ホストの負荷のCPU100%ベタが気持ちいいですね。能力を余す事なく使い切っている。なのに、ホストもゲストも操作にサクサク反応するし、RemoteDesktopも何の問題も無いです。スケジューリング技術のたまものですかね。

開発:「オンプレミス」とかふざけんなって感じですよ。当たり前だろうって。あと、リソースをクラウドとローカルに置いて強調させるっていう解も考えて来ましたが、まあ用途は狭いですね。ローカルなリソース間でマイクロ秒で完璧セキュアに交信出来るのに比べて、お話にならない。何のままごとだったろうって。やはりローカリティ命です。神様が決めた光の速度は30万km/s、30 * 10000 * 1000 m/s、300Mm/s、つまり1マイクロ秒に300m、1ミリ秒に300kmしか進まないのです。計算間違ってませんよね。これは双方向の通信にとっては致命的です。

基盤:クラウドの仮想マシンのコスト削減にはずいぶん労力を投入してしまいましたが。ディスクをつけたり外したりするのにずいぶん苦労しました。

社長:実際、クラウドで運用するのが良いサービスはありますから。あの苦労は無駄ではなかったです。何をどこにどう配置するのが良いか、実体験に基づく判断基準ができたと思います。

開発:そもそもクラウドも仮想マシン技術の勝利ですよね。以前長くVMwareを使ってましたが、少なくとも当時のVMwareに比べてこのHyper/Vはもう全くハイパーです。まあ最近のVMwareがどう進化しているのかは知らないですけど。

基盤:Hyper/Vの場合OSと統合されてるので、VMware的なお手軽感は無いですが、一回設定するだけの手間です。そしてその分、OSの能力をフルに活用できてますね。macOS用Hyper/Vとか出さないんですかね?箱入りなのかな。

社長:ちょっとこれ、気になる記事なんですが。2020年1月3日付け。なんですかねこれ。「How to Use Hyper-V Virtualization on Mac Computers」ttps://www.parallels.com/blogs/hyper-v-mac/

開発:Parallels!超ナツカシス!私最初に使ったVMがそれでした。Macで動くバカチョンVM。あれ、結構好きでした。その後VMwareに乗り換えましたが。まだあったんですね。自社サイトで言いたい事吹いてるパターンですか?

基盤:¥9,818/年、と出てますね。Free Trialあり。「Use Mac to Run Any Windows Program for Your Business」。あ、日本語ページあり。「Mac を使用して業務向けのあらゆる Windows プログラムを実行できます」。

社長:気になる気になる。すごーく気になる。

経理:10%引きのクーポンがあるみたいですよ。でも先月までかな?

開発:Hyper/V+RemoteDesktopが動くんで、当社では今週、Win10Pro入りレノボ君の人気が沸騰したわけですが、実は全部Macでやれるという話ですかね。まあコストの問題ですが。でも、全部Macにできるなら多少余計に費用がかかっても許容ですかね。

社長:気分の良さが最重要です。

基盤:そういえばレノボ君、ただいま黙々とビルドしております。

開発:だいぶ進みましたね。ビルド完了まであと30分くらいかな?

基盤:今月下旬には8コアで16GBのiMacが来ます。ちょうど良いタイミングかもですね。

社長:そういえばパックンの相方のマックンて、私とおなじ出身県なんです。てか今Wikiでみたら同じ市ですね(!)。今はどうしてるんでしょう。思えばパックンのピンしかみた記憶ないけど。県の観光特使だそうですが。

開発:夢でキッスキッスキッスってやつですか。

基盤:いや、それはかなり違いますね。むしろパペマペのほうが近い。おっと、ハイパークンの動きに変化が。並列性が落ちてきたということは、終段に向かってますね。

開発:あれ、これ並列にやっていると、最終段の巨大rustcとldがぶつかって死んだりしないかな?

基盤:あ。。。まあでも開始時刻が数分ずれてますから、助かるかも。それにしてもldとかが何で4GBもメモリ食うんですかね。まあmmapしてるんでしょうけど。複数のオブジェクトに並列にランダムアクセスなんて、しないんじゃないかと思うんですが。あ、両者単一rustプロセスフェーズに入りました。ドキドキ。

開発:スワップを8GBに増やしといたので助かってますね。4GBのママだったら既に死んでます。

基盤:やばい、このまま同時に成長すると1GBくらい足りなくなります!control-Z!

基盤:だめだ足りなそう。止める決断が遅かた。。systemctl stop mysqlなんとかって何だっけ。。ああー 。 。 。

開発:死にましたね。

基盤:スワップ10GBにしときましょうかね。しゃーない。fg。make。

開発:またぶつかるんでは?

基盤:いや、こっちはCPU時間7分過ぎまで来てるんでもうすぐ終わるはずですから。。。 8分。。9分。。終わらない。そういやこれってシステム時間も含んでるのかな。そりゃパラでやれば長くなる。再びメモリ枯渇不可避かな。止めときゃよかった。

開発:あ、でもRESが縮み始めましたね。助かりそう。

基盤:助かった!

開発:と思ったら今度はldとrustcの鬩ぎ合いですね。

基盤:だから何でldのくせにそんなにメモリを食うんだよお前は!ファイルcloseし忘れてんのか?

開発:残り260MB。

基盤:通過しました。

開発:というわけで後から始めたThunderbird号が先にゴールインしましたね。

基盤:Firefox号も無事ゴールインです。

開発:スワップをあと2メガ増やせばパラでも行けそうですね。

基盤:そうですね。まあ実際は、逐次にやっても構わないですが。

開発:それでは、実行してみましょうか。わくわく。

基盤:まずは Thunderbird号より発進。mach run !

開発:あら?Firefoxが立ち上がりましたね。

基盤:ありゃ、mozconfigをコピーした時に、Thunderbird作成指示の行を変更するのを忘れてました。

開発:Firefoxを2つ並列にビルドしたという実験でした(笑)

基盤:終了時のメッセージが違うのが不思議なんですが・・・

社長:良いです良いです。それもまた貴重な経験。当社の資産です。

--
2020-0606 SatoxITS

公式Facebookはじめました

社長:我が社もいわゆる公式Facebookを持ちたいと思います。

開発:VMをzipするのに時間かかりそうですから、やっておきますか。

社長:特に認証用にFacebookのアカウントがあると便利ですよね。インスタに入る時とか。

基盤:facebook.comを開くといきなりSign Upと来ました。これ、社長の実名で良いですか?

社長:ええ、公式ですから。私≒会社です。

基盤:どうもこの、2回電子メールアドレスを入れさせられる流儀がしっくり来ないですね。。。Birthdayの選択肢、ずいぶん下のほうです(笑)GenderのCustomってなかなか良いですね。Sign Upぽちっと。

社長:あー、メール来ました。結構かかりますね。GmailをMac Mailで読んでるせいですかね?30秒くらい?Confirm Your Accountをポチッと。

社長:でもやっぱり、Mac Mail気持ち良いですね。さてそれでは問題のインスタに入って、検索して開く。そうそう、表示すると数秒でログイン求められちゃって、まともに読めないんですよ。では、Facebook でログイン。あれ?Sign upしろって、また。

基盤:Facebookでログインした状態からインスタにいったらどうですかね?

社長:いや、ブラウザ的にはFacebookにログイン状態なんですが・・・一旦ログアウトしてみますか。で再度ログイン・・・あれ?「Sorry, something went wrong.」だって。はて。あー、Facebookから来たメールのGet Startedリンクからは入れますね。このサイドバーのアイコンがクラシカルで味がありますね。友達を検索。ああファンクラブがあるんですね。本人のは無いのか。月末のモンダミンが今年の初戦なんだよね。

基盤:zip終わりました。

社長:そうですか、ではこっちははまたあとで。

--
2020-0606 SatoxITS