タイムマシンの開発(大成功)

社長:できたみたいですね。

開発:整理します。やりたいことはアプリが参照するOS機能に変更を加えること。手段は動的ライブラリのすり替え。アプリの実例は date コマンド。変更するのは現在時刻の取得関数。

開発:strace date により、date コマンドが現在時刻を取得するのに使用している関数は clock_gettime と見られます。

開発:そこで、これを以下のように置き換えてみることとします。つまり、1970年1月1日0時22分33秒に固定します。

開発:これをshared libraryにします。

開発:で、これを date コマンドが使うように仕向けます。

開発:そして実行。

基盤:やった!

社長:感動しました。

開発:ブレークスルーはこの「LD_PRELOAD」という指定で、実行開始後最初にユーザの指定した動的ライブラリをロードするというものです。「ユーザやアプリごとに固有の動的ライブラリを設定できると良いのに」と思っていたのですが、まさにそれに相当するものでした。

社長:うーむ、これを使えば、どんな関数でもラッピングできちゃうわけですね… しかも想定外にお手軽。

基盤:自分のOSにごっそり入れ替えてしまったりとか、ネットワークOSにしちゃうとか。

開発:4月に作った ITSTPプロトコルに載せて飛ばすことも出来ます。

開発:あとは、これがLinux上のどこまでのプログラムに通用するか、さらにLinux以外では同じことができるか、です。

社長:プログラム起動時に、その時々に最適な動的ライブラリを生成して使うとかもできそうですね。

開発:まさに動的ですね。

基盤:コンテツのキャッシュとかではカバーできない部分の最適化ができそうです。

社長:いやめでたい。one giant leap for us です。めでたいので飲みに行きましょう。

-- 2020-0711 SatoxITS

動的か共有か

開発:そういえば、昔よく使っていた ldd というコマンドを思い出しました。動的ライブラリの依存性を検査するツールです。ldd プログラム名、のように使います。

開発:で vdso って記憶に無いので、なんだろうと思って man vdso すると、「The "vDSO" (virtual dynamic shared object) is a small shared library that the kernel automatically maps into the address space of all user-space applications.」でした。つまり、全てのプログラムはこれを共通のオブジェクトとして含む、というものです。

開発:その利用方法の一例として挙げられてたのが、くしくも gettimeofday(2) でした。gettimeofday() は現在時刻を知るために非常に多用されるため重い、なのでその値をユーザプロセスのメモリ空間上にマップしてしまって、メモリの読み出しで済ませてしまおうという話です。

開発:たとえば AWSのUbuntu 18.04 パッケージではこんなふうになっています。

開発:AzureのUbuntu18.04でも同じような様子。

開発:一方、Amazon Linux では、strip されていてシンボルテーブルを見ることはできません。strip されているということは、動的リンクの対象となるシンボルはそこには無いというように思われますが、バイナリをダンプしてみると __vdso_gettimeofday というのがあります。

開発:なんにしても、これはなにかに使えそうです。

開発:それで、やりたいことは、標準ライブラリの中の gettimeofdaysだけを入れ替えることです。それで、libc.so に自前の gettimeofdaysを追加してやったらどうかなと、思うと、no version information available が出たので… 調べると、昔ながらの nm じゃなく、readelf というコマンドがあることがわかりました。これで、Amazon Linux の vdsoのシンボルテーブルが読めました。

開発:nm は動的リンク用のテーブルを見ないのだろうかとおもったら、-D というオプションがあって、これで見ることができました。

レイヤー間に打つ楔(くさび)

開発:なにか真面目なことがやりたいですね。

基盤:一方そのころ遊びに飽きた浦島は…

社長:おもしろまじめが当社のモットーです。

開発:フロントエンド側はエンドユーザの一人として面白いわけですが、やはりOS側に手を突っ込む面白さは別です。おれの指先一本で大怪獣もでんぐり返るぞ的な事が出来てしまう。

社長:フロントエンド側ではコンテクストメニューとIMEあたりに開拓の余地があるように見えます。それでユーザから見た景色が変わる。バックエンド側は、少くとも当社が入り込む余地があまり無いような。

開発:これは逆に、全く同じ景色に見えるのに、全く別のものを見ているという事が実現できる面白さかなと思います。

社長:まあインタフェースとインプリメンテーションてやつですね。プロトコルであり、アーキテクチャであり。

開発:私らの学生の時はPDPからVAXへくらいの頃で、いろんな計算機の方式が研究されてた時代。バローズみたいな面白い計算機も生き残っていた。CISCどころではなくオブジェクト指向の計算機のようなものもあり。そんな時に目にした「コンピュータアーキテクチャとはインタフェースである」というフレーズが非常に印象に残っています。ソフトウェアから見たら実際命令セットというインタフェースなわけですが。ですが、そのインタフェースを実用のものにできる実現方式というものが重要なんでは無いかと。

社長:ともあれ、インタフェースさえ同じであればその先の実体は何でも良いというのが根本的な考え方ですね。通信プロトコルであり、APIであり、システムコールであり。いかに良い切り口で切るかが重要。

開発:そこで、あまり切り口が生々しいというか枯れていないところに突っ込んでしまうと、互換性ガーという非生産的な戦いに人生を奪われてしまう。

社長:ですが、10年前はまだ生々しさが残っていましたが、今現在はかなり安定したように思われます。

開発:それで、どこの切り口に切り込むかと考えると、ネットワーク的には垂直斬りでゲートウェイ。典型的にはプロキシ。一方でコンピュータ内では水平斬りだと思うわけです。

社長:水平断面に楔を打って遊びを噛ませて面白いことを注入したい。

基盤:グルコサミンですか。

開発:使える道具はやはり、動的ライブラリです。強く記憶に残っているのが、SOCKSにおけるSOCKSifyです。あれは socket ライブラリを差し替えるものだった思いますが、再コンパイルを必要としていたことを考えると、あの当時はまだ動的ライブラリは一般化してなかった。

社長:いえ、shared library は SunOSの頃から。 でも私は、標準的なライブラリも静的にリンクして実行形式にしてた事が多かった。そうしないと、OSがアップグレードする毎に使えなくなってしまうとか、ポータビリティを損なう副作用が強かったですね。いわゆるワークステーションの時代。

基盤:おっと、whois.com からトランスファー完了 Congratulations! のメールが来てますね。18:02。このドメインを昨日AWSオレゴンに作ったライトセール機に向けましょう。

開発:そう言えばあそこから xso の its-more.jp に ping したらRTT 100ms以上かかりましたね。すごくファーイースト。

社長:我社も世界展開のためには北米に拠点を置くのは必須です。特にpointillismみたなアプリでは。

基盤:さらに500円奮発してヨーロッパにも拠点とか。

開発:ですが今や、OS側もアプリケーション側も、システムコールや標準ライブラリのインタフェースというか仕様においては、かなり落ち着いた状態にあるんだと思います。もはや枯れたというか。

開発:4月に新しい基盤方式を考えて試作した時には、この水平斬りをやって外に引っ張り出して遠くに投げたわけですが、やはりアプリをコンパイルし直さないといけないのではないか、すると適用性が損なわれる。特にメインのターゲットとして考えたWindowsではそうなのでは無いかと思い、立ち止まってしまいました。ですが、原理的にはWindowsだって標準のDLLを差し替えればよいはず。ただデフォルトのを差し替えるのは危険すぎるから、ユーザごと、アプリごと、オンデマンドに差し替えたい。

開発:それで検索したら、Windowsでも、UNIX的なお手軽さでは無いですが、アプリが使用する動的ライブラリを選択する手段があることがわかりました。

基盤:セキュリティ上やばくないですかね。

開発:そのへんは、動的リンクをする際に認証なりする道具はあるんだろうと思いますし、なければ作れば良い。それで、これは動的ライブラリ差し替え作戦を少し進めてみようと思ったわけです。

社長:差し替えもしくはラッピングですね。

開発:実装上の問題は、たとえば libc.so みたいな巨大なライブラリの塊全体を入れ替えたいわけでは無く、ライブラリの一部分だけ差し替えたりラッピングしたい、それを簡便に実装できるだろうか?ということです。

社長:そのへんはあんまり簡便さを求めなくても良いのでは。

開発:性能上も、実際に全ての機能が噛ませたインタフェースを通るとすると、損なわれる危険性があります。関係ないものは直結したい。

開発:ひとつの理想は、localize.so とか personalize.so 的な、もしあれば見るよみたいなオプショナルなライブラリを全部のアプリが見てくれることでは無いかと思います。.ほにゃららrcみたいな。

社長:もし差し替え作戦がうまくいくなら、各アプリにそういう細工をちょっと入れてもらうという手もあるかと思いますが。

開発:あと、組み込み系のCではよく、 WEAK という属性を使って関数単位での差し替えをやるのですが、ひょっとしてそれがうまく使えるないだろうかとか。

社長:なにかひとつやってみますか。

開発:それで、一昨日ロボット追跡をやった時に、10進整数表記の時刻を date +format コマンド的にやりたいと思ったんですが、やり方がわからなかったので単に strftime() を呼ぶプログラムを作りました。こういうのは、自分で作れば数分なのに、探すと数十分かかった上に、無かった。という話になる。どこでも同じようにやりたいことを、郷に従うと良くないという話です。

開発:で、もし date コマンドをそのまま使って、time() とか  gettimeofday() を差し替えればよいのではないかと思ったわけです。例えば定数値を返すgettimeofday()を定義して date コマンドに食わせる。現時刻以外のフォーマット出力ができる。その手を使って、システムの実際の時間とは違う時間でアプリを動かしたら面白いとか、けっこう用途が広いかもしれないと。

社長:システムコールをRPCで実装するとかはありがちだと思いますが。Unix のシステムコールをWindowsのWin32にマッピングしちゃったりとかも。でも、環境変数で関数を定義したりCGIで実装できたりしたら面白いですね。

基盤:性能的にはすごいことになりそうですが。

開発:最近のネットワークドライブとか、そういう感じですよ。それにうんざりしたところが、うちの原点の一つになっているとも言えます。

* * *

社長:うーん、思いついた。gasketっていう名前はどうかな。隙間を適当に埋めるやつ。etだし。Google の GAS を連想させてしまうのは良くないかもですが…

基盤:ちょっとガス欠みたいな。

開発:えーと語源… ロングマン現代英英辞典から…語源「gasket (1600-1700) Probably from French garcette, from Old French, “little girl”」。たぶんということですが。

基盤:へー。

社長:へー。どういう紆余曲折ですかね。意味深な感じも。

社長:そもそもガジェットとかウィジェットとかほにゃられっととか、et てプチ系だとは思いますが、明確に理解したことはありませんでした。

開発:えーと ette 語源…

フランス語を語源から覚える!接頭辞と接尾辞【-ette編】
接尾辞-etteの意味はズバリ、小型化女性化です。… 接尾辞-etteを単語の後ろに付けると、その単語が元々持っている意味を小さくすることができます。…(例)シガレット、ピンセット、アントワネット、タブレット、オムレツ、…

社長:思い出しました。第2外国語で教わりました(笑)

社長:えーと、whois.com では gasket.live が $3.88、.space が 0.88。xso では .live が380円、.space が50円。xso 強いですね。10年だと1年あたり2500円程度。whois.comでは$23程度。接戦です。

経理:まちがって10年でポチらないで下さい。

開発:gasket.live て生体シートみたいな感じですかね。

基盤:whois.com は webgasket.com $9.88でどうですかとか勝手に提案してきてますねw 確か nso でもそう。

社長:うーん、名前の件はちょっとペンディング。

開発:sket / 助っ人でどうですかね。

社長:閑話休題。

* * *

開発:ではまず原型 。

#include <stdio.h>
#include <sys/time.h>
//int gettimeofday(struct timeval *tv, struct timezone *tz);
#include <time.h>
//size_t strftime(char *s, size_t max, const char *format,
//  const struct tm *tm);
//struct tm *localtime(const time_t *timep);

int main(int ac, char *av[]){
    char atime[128];
    struct timeval tv;
    struct timezone tz;
    time_t utime;
    struct tm tm;
    char *fmt = "%Y%m%d-%H%M%S";

    gettimeofday(&tv,&tz);
    utime = tv.tv_sec;
    tm = *localtime(&utime);
    strftime(atime,sizeof(atime), fmt,&tm);
    printf("%s\n",atime);
}

基盤:これは Go では無いようですが。

開発:こういう時は原点に戻るのです。実行するとこうなる。

開発:次に自前の gettimeofday()をでっち上げて上書きする。

int gettimeofday(struct timeval *tv, struct timezone *tz){
    tv->tv_sec = 12*60 + 34;
    tv->tv_usec = 0;
    return 0;
}

開発:わたしは unixtime の 1970年1月1日を見るたびに、ベル研Unixとケン・トンプソンのことを思い出して目頭が熱くなるのです。Linux?なにそれというか。

社長:ビル・ジョイがフェラーリ買って喜んでた写真も思い出しますね。

開発:あとはこの、なんちゃって gettimeofday を動的ライブラリで差し替えるだけです。が、やりかたを全く忘れてしまいました。DeleGateって、自分はshared library になるんでしたっけ?

社長:記憶にございません。

開発:シンプルなところで、昔使ってた zlib に学びますか。…

基盤:zlib …

開発:うっ。懐かしさで涙が…

社長:20年前からあなたの容貌は全く変わっていなかった。

基盤:残念ながらこのロゴのpngは動的に生成されるようで、Last-Modified はわからないですね。

開発:MacOS Catalina では 1.2.11、Amazon Linux には 1.2.8 が入っております。では、ソースをダウンロードして make。ああ、./configure を最初にやれと。で make。

社長:思い出しました。-fPIC -DPIC でコンパイルして、-shared でライブラリにする。みたいな。

開発:では意味はわかりませんが真似して…

linux% gcc -shared -fPIC gettimeofday.o -o libgasket.so

linux% file libgasket.so
libgasket.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f9e2d127a6bdaf34193c0d313673785694aac575, not stripped

基盤:shared library ができましたね。

開発:でこれをリンクして実行してみる。

linux% cc main.c libgasket.so
linux% a.out
a.out: error while loading shared libraries: libgasket.so: cannot open shared object file: No such file or directory

開発:なるほど。ではこれで。

linux% export LD_LIBRARY_PATH=.
linux% a.out
19700101-091234

基盤:大成功。

社長:one giant leap for our company !!

開発:しかし持つべきはよき先達ですね。zlib ありがとう。

社長:DeleGateでは動的ライブラリとして、Zlib と OpenSSL、あとlibPAMににお世話になりました。良い巡り合いだったと思います。

開発:一応 strace で確認…

基盤:ええーっ、なんか不思議なところを探しまわてってますね。

開発:基本的に、参照側のファイルと同じディレクトリを探してほしいものですが。でも、Unix的にはそのパス名を逆探知する方法はないかも知れないですね。

基盤:ld.so のマニュアルによると、LD_LIBRARY_PATH は使えない場合が多そうです。

   o  Using the environment variable LD_LIBRARY_PATH, unless the executable is being run in secure-execution mode (see below), in which case this variable is ignored.

社長:まあでも、原理的にはこれで良いでしょう。

基盤:date コマンドにこれを食わせられないですかね。

開発:strace date ... まあ libc.so しか使ってないですね。cp -p libgasket.so libc.so.6。strace date ...

開発:そして全てのコマンドが動かなくなったとw。LD_LIBRARY_PATH をアンセット。

社長:よしよし。何か見えてきましたね。今日は念願のドメイン名移管も成功したし、お祝いに行きましょう。

-- 2020-0709 SatoxITS

ドメイン移管再チャレンジ(成功)

社長:移管拒否について xso からは何も来ないですね。

開発:whois の登録情報が一致しないと移管が却下されるという話もあります。

基盤:xso で確認します… おっと、登録者の連絡先メールアドレスが、既に存在しないメールアドレスになっておりますが!

社長:うーん、登録者と現在の所有者は独立だってことですか…

開発:それが拒否理由ですかね?何にしても、xsoから連絡メールが一つも来ないというのが変。いくらなんでもそんな会社じゃないでしょう。

基盤:では、ドメイン>ドメイン設定>Whois情報設定ドメインの選択>登録者名義変更申請ー情報入力にて、対象ドメインの連絡先メールアドレスを変更します。確認。確定。メールで確認が来たのでクリックして承認。

基盤:再び xso にて、ドメイン詳細に入り、変更の続きを… おっと。

開発:うまくいかない時の理由を一切説明しないという姿勢が一貫してますね。

社長:メールにはこのようにも。

開発:現在の登録者(もしくは管理者)のメールアドレスは既にないです。

基盤:そのアドレスは既に死んでいる。

社長:なるほど、メールアドレスが消える前に手続きをしておかないといけなかったわけですね。実際思いつくところは全部やったんですが、まさかこんなところに…

基盤:スマホの電話番号は生きてるので、こっちで認証してくれるといいんですけどね。

基盤:とりあえず現在の登録情報を全部調べましょう。情報ダウンロード… いかん、whois 情報が含まれてません。一つずつドメイン詳細をひらいて見ないといけないんですかね?で目下問題のドメインは…

基盤:キャンセルして再チャレンジ。

開発:この青い箱には癒やされますね。

基盤:で、登録者情報の変更。

基盤:「登録者名義変更申請前に管理担当者情報を変更」が必要だった模様。では管理担当者情報を変更…

開発:めでたし。

基盤:再び登録者名義変更申請。ていうか、なんでいちいちドメインの選択状態まで戻るんですかね?変更して確認、確定。登録者と管理者にメールが来ました。まあ同じアドレスですけど。クリックして承認。

開発:客のアクションに対してございましたらっていうか?

社長:丁寧語のかかりうけは難しいですね。

基盤:メールが来ました。11:00。

開発:いましばらくってどのくらいですかね。

基盤:10分経過。スパコンを回しているか、カードパンチャー打ち込み中か。

社長:まあでも、他社への移管をガン無視してるというようは話ではなくて、良かったです。昼食に行きますか。

基盤:あ、メールアドレスの確認来ました。11:15。

社長:では whois にて再度 Transfer 始動。11:28。きょうはそば屋で。

* * *

基盤:xso から拒否理由メールが来てましたね。12:00。

開発:そういえば、プライバシープロテクションがかかってると移管出来ないという話が。

社長:では、設定を解除。ぽちっと。

基盤:おっと、一瞬で whois に全開になりましたw

開発:これには処理時間がかからないようですね。スパコンで処理したとか?

社長:あとは、whois が移管の申請をリトライしてくれるのか、どのくらいの間隔なのか、ということですかね。

* * *

開発:トランスファーの発注が 11:28、xso での移管拒否完了ログが 11:56、xso からの不承認通知が 12:00、whois からの断念通知が 13:38。

基盤:リトライはしてくれないみたいですね。トランスファーがキャンセルされて終了。で、その分は返金されるというか、whois にプールされる模様。

社長:ああ、これですね。

基盤:他のキャンセルの分も積まれてます。

経理:これって、円が高い時に積んでおくとよいかもですね。あ、この My Billing の Add Funds です。

開発:うーむ、こういうシステムは初めて見ました。こういうのって普通の業態では難しいように思うんですが。

社長:我々は、試してみて良かったら買う、気に入らなかったらキャンセルして返金というシステムがしっくりくるので、これは正しいあり方だと思いますね。アマゾン AWS もフリーでお試しとかでなくて、こういうふうにやればよいのに…

社長:さてそれではこれをぷちっと。

基盤: このノリ、xso のページのパクリですかね(笑)

開発:上のタイムラインによれば、30分後には移管の可否が xso から来ると思われます。

社長:それにしても、こうやって複数のメールボックスを並行して監視するのに、もし Mac の Mail が無かったら大変面倒なことでした。

基盤:おっと xso からメールが… と思ったらいつものSPAMでした。

経理:.work が無料ってキャンペーンですが、いつも1円じゃなかったでしたっけ?

開発:20年契約で20円ならすごいのにね。

基盤:おっと、xso から移管の承認要求メールが来ました。

社長:一も二もなく「承認する」。ぷち、ぷち。

開発:めでたし。

基盤:おっと、whois の情報が切り替わりました。と思ったら xso からトランスファー完了のお知らせが。

開発:whois.com (まぎらわしいw)の方ではまだトランスファー処理中になってますが。

基盤:結果としては、ドメイン名のトランスファーは、約45分で終わりましたね。以下、時系列。

  1. --:-- xso で「whois情報公開代行」を外す(一瞬でwhois DBに反映)
  2. 14:44 xso で発行したAuthCodeを使い whois.com にて移管を発注
    • (30分)
  3. 15:14 xso から承認要求メールが来て速攻クリック承認
    • (10分)
  4. 15:27 whois DBに反映された
  5. 15:28 xso から完了通知が来た
  6. --:-- whois.com 側ではまだ管理可能になっていない

基盤:xso の移管状況ログの時間はどうも前倒しみたいでよくわかりませんが。

開発:こちらの移管請求に対する反応に30分かかっているのは、拒否の場合の時間が同じだったことを考えると、意図的に挿入されている遅延である可能性が高いですかね。あと、30秒間隔でのwhois DBの観測はこのようになりました。

経理:なるほど、もともとこちらが抑えている期限が、1年延長されたという形ですね(ほっ)

開発:そういう意味では、延長する予定のあるドメイン名についてはいつ移管しても構わないと。

基盤:管理のインターフェイスは圧倒的に whois.com が楽なので、長期的に保有するものはあちらで管理したいですね。購入については xso のほうが安いことも多い。というか、1円だったり(笑)。ドメイン購入所としての意義はあるかと思います。ただ、ともかくあの管理UIが重くて、しかもキメラ。さらにSPAM。

社長:まあもう一社くらい体験調査しても良いかなとは思いますけどね。

開発:xso のシステムがあんまりなので、いっそうちでもレジストラとか考えましたが、whois.com のシステムは十分に納得できるもので、あれでいいかなと感じています。

経理:そういえば昨日 whois.com で作って速攻削除した WordPress サーバですが、お金は返って来ないようですね。Pay Back可能と書いてないようです。

社長:がっくり。やはりサーバはアマゾンに限る。

開発:やっぱりメールでの認証というのが現状の世の中の大勢だというのも感じましたね。旧態とは言えIT業界の中枢でこれですから、電子証明書での認証ですっきりするのは、まだまだ先の話かなと。

-- 2020-0709 SatoxITS

Whois Wits More

基盤:それでは、whois.com のサービスを評価するために何かサーバを作ってみたいと思います。

開発:どのドメイン名にしますかね。

社長:せっかくだから新調しましょう。当社全体的には its-more ですが、ここは wits-more.net かな。

経理:$12.48。かなり値がはりますね。

社長:まあ、記念だし。

基盤:xso なら 599円ですが。

社長:ぐ。例えば10年なら?

基盤:$124.80 vs 13,919円。

開発:xso は初年度だけ安くして呼び込む作戦ですね。

社長:そりゃあ、.work が毎年1円で更新てわけじゃないでしょう(笑)

基盤:ちなみに nso では… ここチェックアウトするまで値段がわからないんでしょうか?w しかも呼び込みの障害物が多くてどこが会計への出口かわからないという… ああ、たどり着きました。

全員:(爆笑)

社長:まあ私はここ(だけ)と20数年来の付き合いで、海外の業者さんっていうのはこういうものだと思ってしまっていたわけです。

基盤:さてそれで、Whois 掲載情報をどうするかですが。

社長:会社名を隠すつもりは無いといういうか公表したいですが、電話とか住所がちょっとね。支社のにしたいところですが…

開発:うっかり間違って書いて登録しても誰も気づかないでしょうけどw

基盤:まあじゃこれはONをぷちっと。

社長:この費用は登録時だけですよってちゃんと書いてあるのもわかりやすくてグッドです。

基盤:あと、ネームサーバをこの時点で選べますね。

開発:そうあるべきですよね。うんうん。

基盤:じゃうちにのサーバにしてと… うーん、わかりやすいUIですね。しかもサックサクですよ。

経理:クーポンて何ですかね。Twitter 見ろと。特にないですね。ぐぐる。うーん、詰め合わせると20%引きといったものはあるようですが…

社長:今回はパス。

基盤:それでは PAY NOWをぷちっと。むむ。これってPayPal 一択ってことですかね?

開発:外貨換算レート 0.00890703ドル/円 ... って112.27円/ドル ... ですよね。今普通107.5近辺だと思うんですが。4%ほどぼられる?

基盤:PayPal はレートが高いというような話を聞いたことはあります。

経理:あのドル払いダメ銀行で試してみたいですね。PayPalにちゃんと対応するのか。

社長:PayPalには円で払うんですかね。ああそうみたい。なら流石に通るでしょう。では、カードを登録っと。

経理:速攻でPEIPARUKETUSAI 向けに JPY 20.00 引き落とされたとメールが。あ、でもすぐに取り消し。

基盤:ペイパルケツサイですか。

経理:どうもそういう形の確認手順がよくあるようなんですが、ちょっと野蛮な感じがします。

開発:請求の名目も取り消しの名目も知らされてないのが気持ちわるいですよね。

社長:まあ、では、whois.com のお会計にて同意して払うをポチッと。

経理:速攻でドメイン代金が引き落とされたとメールが。

社長:どれどれ、さっそく開いてみましょう。

開発:素晴らしい!

社長:登録者情報は…

基盤:完璧ですね。

開発:登録した瞬間から使える。不思議な待ち時間も、完了通知なる嵐も来ない。当たり前といえば当たり前ですが。

経理:レートに疑義があるものの、PayPal の請求書はわかりやすくて良いです。

社長:ですが、怪しげな業者に PayPal で支払ってしまって嫌な思いをした事も2度3度。

* * *

社長:管理コンソールの使い勝手を試してみましょう。

基盤:ん?自分の持ってるドメイン名はどうやったらわからるのかな?

基盤:ああ、Jump to Renewal Management で条件指定無しで検索すると出てくるようです。なんしてもこのサクサク感が素晴らしい… whois.com 提供のネームサーバを追加するとどうなるんですかね…

基盤:で、DNSレコードをを追加するには… これですかね?クリック。

基盤:おお、なぜかHTTPSじゃないのがポップアップ?なぜだ?

基盤:デフォルトが TTL 28800ですか。堅いですね。300にしたら怒られるかな…

基盤:まあこのへんが、節度というものなのでしょね。では 7200にて追加。

基盤:素晴らしい!レコードごとにIDと作成日付が付いております。

基盤:でもって、DNS サービスが inactiveだよというメッセージが消えました。

基盤:さてこれで、このホスト名を解決しようとすると何が起こるでしょう?

開発:まあプライマリに当たればあっちの言うアドレス、これに当たればこっちのアドレスということですね。でこっちに当たると2時間生き続けると。

基盤:whois.com のns何番を指定するのが良いのですかね?

開発:そこは謎ですね。まあ何番でも同じなんでしょうけど。何という名前のDNS サーバがあるのか明言してるのか… まあ推して知るべしなんでしょうけど。

基盤:dig すると ns1 から ns4 までですね。それぞれ4つのAレコードあり。おもしろいのは、うちからpingするとどこもRTT 5.8ms 程度。ですが、アマゾン東京からやると ns1 が 3.8ms、それ以外は 2.8ms。

開発:やはり ns1 が人気なんですかねw

社長:うーん、うちも西海岸にアマゾンの支所を作りましょう。

基盤:それで、この登録したホストを各所でリゾルブしてみてるんですが、まあ順不同といいますか。プライマリだセカンダリだっていいますが、リゾルバ側はそれに従ってるんですかね?

開発:さあ。私がリゾルバを作ったときには意識しなかったような…

社長:なんにしても、管理コンソールは使いやすくてキビキビしている、目障りな勧誘もない。素晴らしいです。

* * *

社長:さて、それでレンタルサーバも試したいですが、それより、以前からやってみたかったドメインの移管というものを、やってみたいですね。

経理:移管費用がかかるんですかね?

基盤:どのドメイン名にしますか?

社長:そう… ロボットさんたちに人気の無いところで、nitch-more にしますか。あるいは、更新期限が迫っているとうるさいから、これ。

基盤:こういうのは、個別のドメイン詳細画面に入ると良いというのを学習済みです。ドメインの移管っと… 見つかりませんね。「へ」の移管はありますが、「から」の移管は無い。… 先人の知恵をぐぐります。ふむ。そうか、アクションは移管先からやるんですね。

基盤:とりあえず whois.com から何かしてみます。

開発:TLDがワイルドカードになってるw

基盤:こんなにあるんですね…

基盤:Transfer Auth Code とは…

基盤:ああ、これを移管元で取得する必要があると。それでは…

開発:いつもより余計に回っております。

基盤:なるほど、ドメイン詳細の中で AuthCode を表示。コピペ。…というか、Vivaldi が固まりました。

開発:コピーで固まることは前にもありましたね。

経理:iMac 到着からもうすぐ2週間…

基盤:で AuthKey をペーストして、TRANSFER !

開発:なるほどw

社長:てことは、期限切れ間近でないのに移管するってことは、まず無いということですね。

基盤:期限切れの近いので試します。えーと、xsoの1年更新で`1,628円。これを whois.com に移管すると… $12.48と出ました。やってみますか?

社長:やってみましょう。

基盤:PAY NOW!。PayPal は ¥1,401と言ってきました。レートは 0.00891 USD/JPY。

社長:同意して払う。

基盤:移管手続き開始されました。

開発:5日以内に処理?今のレジストラからメールを受け取るかもね?そのメールに書かれてるいる手続きに従って…

社長:そのへんの手続きは標準化されてないんでしょうね。でも、消費者ファーストであればそのへんだって全部システム化して1分で終わるように作れるんでしょう。

開発:まあ作って自分の損になるものにコストはかけないですね。

社長:ただ、間違いをキャンセルできる手順があるのなら、遅延にも意味があると思いますが、この遅延は一体なんなんでしょうね?実際的に何かに時間がかかるのか。人の手を介するとしたらそれは何なのか?

基盤:24時間営業ではないでしょうから、週末にやったら週明けまで待たされるってことですかね。まあ寝ずに移管を見張ってる人員が居ないとも限りませんが。おっと、xso に動きが・・・

基盤:完了の場合には「完了!」てするのが慣行なのに。

開発:にしても xso からは何もメールが来てないですけど。

経理:というか、さっきの支払いどうなっちゃうの?

社長:・・・ 今日は飲みに行くのを自粛します。

基盤:whois.com のほうではこうなってますね。

開発:日夜無償でプロテクションしてくれてるのかな…

社長:なんにしても xso からのメール待ちですね。

* * *

社長:それで、レンタルサーバの件です。

基盤:当社対外的サーバとしては、アマゾンセールの500円機で十分であることがわかっております。一方で、開発用のマシン特に大量にメモリを食うブラウザのビルドには、8GB程度のメモリを積んだマシンが必要ですが、これをクラウドに定常的に飼うのも、スポットにするのも、いかがなものか。自社内のリソースでやるのが妥当では無いかと思われます。

開発:そうですね… まあ当社では基本クラウドは対外サーバ用途に限るということですね。それにしても、whois.com の「無制限」というサーバがどういうスペックのなのか知りたいです。

社長:まあ月500円くらいってことですよね。

基盤:それで、これはWordPressサーバなんですが、8コアで6GB RAMで40GBストレージとあり… 3年契約なら月$6.98…

開発:得体が知れないので Starter の一ヶ月契約でやってみましょう。

基盤:いやー、テスト用にも5GBストレージは厳しいですかね。20GBのPerformanceプランかな。

開発:しかしこれ、sshで入って好きなことできるんですかね?cPanelは無い?cPanelとは。デモサイトがありますね。うーん、これがあればSSHはできるみたいですが… ああ、こっちのShared Hosting を使えとありますね。FAQに、もろにsshができますと。がしかし、年単位契約でございます。

基盤:気に入らなかったら30日以内なら解約OKで返金とありますけどね。

社長:汎用途にはアマゾンライトセール。whois はWordPress専用機と割り切って、いっそ最上位のProfessionalで!ただし一ヶ月。Buy Now。

経理:PayPal から¥1,311と。

基盤:インストール進行中…

基盤:10分経過…

基盤:20分経過…

開発:これ、おかしいですね。ひょっとして、whois の管理下に無いドメイン名でサイトを作ると、移管されるまでその先に進まないとか。

社長:まじ?生ビール2.5杯ぶんが…

開発:プロビジョニング完了のメールが来ました。所要35分。

社長:a few minutes じゃないんじゃん。嘘つき。

基盤:ソースからコンパイルでもしてんですかねw

-- 2020-0709 SatoxITS

example.comは実在した

開発:なにかとドメイン名の例として使われる example.com ですが。

基盤:プライベートアドレスみたいなやつですね。

開発:この whois の簡潔さがかっこいいです。

社長:92年というと、CERNでWWWが作られた頃ですね。

開発:試してみると、HTTPサーバが実在することがわかりました。

社長:昔からあったんですかね?

開発:少くとも HTTPS はあり得なかったですね。

基盤:これにカウンターを付けたら面白そう。

営業:広告スペース付けたら凄そうですね。

開発:SSL証明書はこういう感じ。

開発:反応もなかなか良いです。

開発:ちなみに間違って打ってしまった whois.com。

開発:ついでに http://www.whois.com に言ったら xso の同業者さんでした。それで、価格を見てびっくり。ドメイン名も安いし、月600円で容量無制限のレンタルサーバとか。

社長:まじ?私は nso がバカ高だったんで日本の xso にしたんですが…

基盤:とりあえずサインアップしてサーバ立ててみませんか?良さげなら xso も引き払うとか。

開発:この計画を xso のレンタルサーバで書くのは危険かも(笑)

-- 2020-0708 SatoxITS

さたぽん(中国人説)

社長:ただーいま。

経理:酒臭いですね。

基盤:2020年7月7日に何かが起こるという予言でしたが何事も無く終わりそうですね。

社長:いわゆる七夕の日。天上界で何かおきていたのかも。

開発:天上界は日本時間ではないのでは。

社長:それで今日は、satapon で夕食して来ました。

開発:あそこの外装のコンセプトは七夕もしくはお化け屋敷ですね。

社長:それで店に入ったらいきなり、ショートカットの優香が居たんですよ。

基盤:出たな妖怪!

開発:成仏して下さいナンマンダナンマンダ…

社長:いや、ごく普通に居たんですよ。座敷の席にあぐらかいて飯食いながら鼻かんだり大声で独り言してました。

開発:羽衣伝説の後日談のようです。

基盤:メンタルにやばい方だったんですかね。すげー咳き込んでたりして。

社長:いや、時々携帯を操作しているように見えたので、誰かと会話してるのかなとは思いました。

社長:それで、かなりの音量なので耳に入ってくるわけですが、これはたぶんタイ語では無いなと。タイ語に特徴的に感じる発声法では無い。巻き舌っぽいのが中国系かな?という感じで。

社長:それで、途中でおばちゃんと会話するのが聞こえたのですが、日本語なんですよ。タイの人同士で日本語で会話は無いでしょう。なので、タイの人では無いと結論。

社長:そうするうちに、テレビで流れてるコロナのニュースに反応してたので、やはり中国系の方だろうと。

開発:それはかなり見方が偏ってますね。

基盤:どうなる三峡ダム!て今日のNewsweek、おまえはどこの三文週刊誌だよって。でもおかげで、ブラックスワンという言葉を覚えました。

社長:ですがやはり中国語とも違う。テレビのニュースとかで中国語をよく耳にするので、意味はわからなくても発生法とか抑揚はわかるわけです。留学生の知り合いもいましたし。そういう、中国語的な圧迫感とか高揚感では無い。

基盤:それってたとえばハングルを、ニュースのおばさんが感情込めて読む時と、恋愛ドラマでの発声方法は全然違いますよね。

開発:Opera とかにすると何語でも違いが無いかもね。

社長:それで私がレッドカレーと2本目の大瓶の終わりにかかるころに、彼女は会計をしてマスクをして出ていきました。

社長:わたしもじきに満タンになって5LSUくらいで、お得だなーと思いながら会計をしたんですが、おばちゃんに今そこに座ってた女性って?と日本語で問いかけたわけです。

基盤:おばちゃん、日本語の疑問文がわかるんですか?

開発:尻上がりなら疑問・質問だってのは世界共通では。

社長:そしたらおばちゃんが、みゃんまー、みゃんまー留学生、って。

開発:ミャンマーの方だったんですね。

開発:ミャンマーの留学生っていうと、スー・チーさんくらいしか知らないですよね。

基盤:知ってるんですか?

社長:学生のころにビルマの竪琴って、中井さんと坂本さんが出てた映画があったのは知ってます。ミズシマー、いっしょに帰ろう!?ってやつ。貧乏学生だったので、テレビの広告しか見なかったですが。

基盤:坂本龍一は出演してないようですが。

開発:そういや2年くらい前のラオスのダムの決壊が記憶に残っていますが、ビルマもメコンの流域なんでしょうね。

社長:私は三峡ダムの発電能力が2,250万KWと聞いて、感動しました。

経理:我社クラスだと1億社分くらいを軽くまかなえますね。

基盤:ミャンマーといえば、あの牛久大仏よりはるかにでかい、政治家の像が立ったっていうのが話題になりましたね。

開発:あ、いやあれは、インドのようです。

-- 2020-0707 SatoxITS

私は人間ではありませんでした

基盤:いつからなのか、当社サイトの reCAPTCHA が居なくなっていましたので、先程新調して再招致しました。もっとも、設定しようとしたらもともとのキーが空欄だったので、何かの手違いで私が削除してしまったのか知れません。

開発:一方でGooglebot追跡計画ですが、7/4の投稿に仕掛けた「I am a robot」フックに対する、bot発進基地 66.249 からのアクセスを見ますとこのようになっています。

開発:p=9820は当該投稿記事、m=20200704はその日の記事一覧です。このログからfeed=rss2という存在に気づきました。RSSというのはまだ健在の模様です。これはレスポンスのヘッダの中にこのように案内されています。

<link rel="alternate" type="application/rss+xml" title="株式会社 ITS more &raquo; フィード" href="https://its-more.jp/ja_jp/?feed=rss2" />

開発:注目点の一つは、bot がどのドメインからこの記事を見たかです。①bot はまずどこかのドメインでこれを見て、場合によりリバースプロキシされてこのページをフェッチします。追跡用フックにはそのフェッチの際の時間(time)とクライアントアドレス(clnt)を埋め込んでいます。リバースプロキシされた場合には、そのプロキシサーバのアドレスになります。②botはその後、このフェッチしたページのリンクをたぐります。このフックは、その際のアクセスをログに残すCGIを呼ぶようになっています。

開発:まず興味があるのは、①において bot がどのサイトのページとしてこれを見たのかです。②のアクセス時にログに残されたclntの値を見ると、最初は54.238。これは delegate.org からのリバースプロキシ。次に 18.181。これは新NSからのリバースプロキシです。そして 66.249から。これは bot が直接このターゲットサイトを参照しているということです。

開発:そういうこの記事を書き始めてすぐにまた、Googolebot からのヒットが記録されました。10分前ですね。

20200707-091655 66.249.64.170 type=ImRobot&time=1593878281&clnt=106.73.xxx.xxx&quri=https://its-more.jp/ja_jp/?p=9820

基盤:clnt=106.73 てうちのアドレスですね。うちがフェッチしたページから bot がたどった?

開発:どういう意味でしょうね。…私がそういうフックを埋め込んでしまったのか... あるいはうちがアクセスした時の内容がnginxにキャッシュされて、それが bot に返されたとか…

社長:特定時刻の特定のクライアント用に生成したページが別のクライアントに渡ってしまうのは色んな意味でよろしくないですね。

開発:WordPressのページは生成にそこそこ処理がかかっていると思いますので、キャッシュしたいという動機は理解できるのですが…

開発:時系列を推測すると、このページ(p=10343)に bot が気づいてフェッチした、その中にあった p=9820 のリンクをたぐった、さらにその中にあったImRobotフックにかかったという事かと思うので、昔のキャッシュというのはちょっと無いように思われます。このtimeって… ftime '%Y%m%d-%H%M%S' 1593878281 ... 20200705-005801 ですね。

基盤:その時刻のアクセスログ…

xso% grep 00:58:01 *0705 | grep 9820
106.73.xxx.xxx - - [05/Jul/2020:00:58:01 +0900] "GET /ja_jp/?p=9820 HTTP/2.0" 200 45233 "https://its-more.jp/ja_jp/?p=9975" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.98 Safari/537.36" "-"

基盤:実際うちのMacからのアクセスですね。ていうか、いま現在もそのキャッシュが残っているとか… ns1 からアクセスしてみます。

基盤:さすがにそういう事は無いですね。ほかからもアクセスしてみる… やはり毎回自分用のページが返ってきます。curl の代わりに DeleGate でやっても同じ。HTTPリクエスト時にキャッシュを最大限尊重するようなオプションてあるんですかね?

社長:あったような。というか、昔のキャッシュを bot が持ってて、その if-modified に対する応答に 304 で返しているとか?

基盤:304 は無いですね。botがフックをヒットした今日の 09:16までに、5回もとのページをフェッチしてます。毎回サイズが違うので、どうも同定が難しいような。。

開発:うーん。最終的に返したHTTPレスポンスのハッシュ値でも残してくれれば。というか、全体は違っても、インクルードされている記事の部分は同じだったかもという話ですか…

基盤:うーん。timeの値とclntのアドレスはセットなので、その時間にそのクライアントがアクセスした時に生成されたデータである、とうことは同定できてると思うんですよね。だから、うちがその時にアクセスした時に出来たページ(ImRobotフック)をbotが見ている。なぜなのか。

社長:nginx のキャッシュ説なら簡単なんですが、curl や DeleGateでやった限りでは、アクセス毎に生成されているように見える。

基盤:User-Agent を見て、生成の振る舞いが変わるとか、キャッシュが違うとか。

開発:そうか、User-Agent ごとにキャッシュが違うとか?

基盤:直接キャッシュファイルを見れればいいんですけどね。サーバ系は xso の手中にあり…

開発:おっとまた Googlebot さん来ました。

20200707-104016 66.249.64.172 type=ImRobot&time=20200707-103813&clnt=18.181.38.61&quri=https://its-more.jp/ja_jp/?m=20200704

基盤:ns1 経由で07/04のページをフェッチして、その中のImRobotフックを2分後に手繰ったと。

開発:うーん。わからん。これは一丁、p=9820 を更新してもう一度振る舞いを追跡してみますか。更新して、たとえばAzureからアクセスしてページを生成して、その後 bot が何を手繰ってくるか見る。あるいは新しい記事に新しいフックをかける。

基盤:そうですね。とにかく bot にもう一度、ページ本体をロードしてもらって。

開発:速攻でおいでなすったけど、これは自分でns1経由でロードしたページの中のを叩いてますね。なかなか直にはxsoまで来てくれない。

基盤:ていうか、フックのURLの中の query 部分を適当に変えて乱打してくるロボットが居ますけど、なんですかねこれ?

開発:そもそも WordPress自体が、何のためなのかページ変更後に3発打ってくるんですが、これも意味がわからない。2つ目の&以降を削除している。これはページ内のリンクが正常か確認しに来てるのかな?

基盤:queryじゃないパスの形にしたらいいんじゃないですかね。

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

基盤:おや?今回はWordPress側からの速攻pingが来ないですね。

開発:なんですかね?まさかquery付のアンカーだけ探ってるとか。ちょっと嫌な感じですね・・・ もいっかいクリック。

基盤:おっと来ました。query がという話では無いですね。最初にだれかがそれを踏んだ時に来る?

開発:しかも今度は最初の / の後を切断して来ました。じゃあもう & も / もやめて。, ではどうでしょう。Googlebot、3分くらいで来ますね。WordPress なんでも最初で切るのか?

<a href=http://ns1.its-more.jp/glogre/ImRobot2.0[htreqInfo]>

開発:ああ、単にHTMLの中に書いてある部分だけ使っているということですね。しかしこの3回のアクセスは何のつもりなのか?

基盤:HTTPサーバ側のログを見ると、同じ URL に対して、HEAD, GET, HEAD してます。

基盤:おや、今度は6回アクセスして来るようになりましたね。

開発:PHPで生成した時にだけ来るんですかね。これではどうかな?

開発:そうきましたか。ではもう一丁追加。

開発:ということで現象をまとめると、WordPress では投稿ページを更新するたびに、そのページ内にある参照URLのリクエストを3回発生します。HEAD、GET、HEAD というメソッドの順序です。

社長:ピンバックが何とかいうのと関係しているんですかね?

基盤:せきこみおばさん、今日はさらにひどいですね。あ、くしゃみした。

開発:うーん、メソッドが POSTでないですし、Referer フィールドも適切に設定されていないし。なにか適切に情報を伝えてる感じが無いですね。

社長:どのWordPressからですということだけは伝えていると。

広報:ご発注の「私は人間ではありませんボタン」を3案作ってみました。

開発:うーむ、真ん中のは人間様の目に触れるとすごく不快感を与えてしまいますね。

基盤:3番目はやや不安感を与えます。

開発:ではとりあえず、1番目のやつを使いましょう。

基盤:やはりHREFよりFORMにするとロボットの気をひきますかね。

開発:そうしましょう。それを人様の目には触れないようにdetailsで隠すと。

開発:details を開くとこうなります。

基盤:これをクリックする人は確かに人間では無さそうですね。

開発:今後も折を見てこの ImRobot2 を改訂しましょう。

社長:今日はどちらかというと WordPress が自動でリンク先の調査?に行くというところが興味深かったですね。

開発:そうですね。どういうことなのか調査したいと思います。

-- 2020-0707 SatoxITS

新々入力方式

社長:それではただのモールスだという指摘も受けましたのでもう少しひねってみました。せっかくなので O を使います。

社長:ただ、既存のモールスと違う体系で最適に符号化し直すと、ロボットでは無い人間が付いていけないところがあります。それで、互換性を考慮して、-. を O で置き換える、つまり「うい」を「お」に置き換えるのに留めることにしました。こういう感じです。

社長:ということで全て4ストロークに収まりました。

開発:「お」を入れるのに「いおいい」で、「お」と入れると「た」になるというのは若干の違和感ですね。

社長:ういおに関しては、変換をしないという選択をすることはできます。

社長:それでは実演します。

< うううう いおお おお いいお おう いううお いおい いう

> こんにちわせかい

開発:祈祷師のうなりのようですw

基盤:のおあある とおあある やわあ を思い出しますねw

< おう お うおお おいい おお おい いい いうお いいおい いおうう いい おいい うおうう うお おいう いううお いおお

> わたしはろほ゛つとて゛はありません

社長:ところでこれをやっていてちょっと残念だったのが、Google IME では辞書のコピーを、一旦外に出して取り込むという形でしかできないらしいことです。あるいは、既存の辞書の中を検索することができない。コピーしてg/うい/s//お/g みたいに一発書き換え出来るでと良かったのですが。

基盤:フォーラムがあるようですから、希望を出してみてはどうでしょう?

開発:木の芽時に来がちなやつが今頃来たって思われるかもね(笑)というか、エクスポート型式はただのべたテキストですから、そこでやればよいのでは。

社長:実際そうしてみたら、一箇所間違えてました(^-^;

社長:あとは、変換前の最後にPとか入れるとそのまま通るので、そういう風に辞書に使うと良いかなとか。

社長:ま、今日は大変知的な活動をしたので(笑)疲れました。飲みに行きますか。

-- 2020-0706 SatoxITS

新入力方式

社長:Google社に対抗して当社でも新しい入力方式を開発しました。これがそれです。

開発:要するにモールスですか。

社長:うい。原理的に良いものは良いのです。

基盤:vi 派は JKLじゃなかったんですか。

社長:やってみてすぐ気づくわけですが、子音文字を続けると促音になってしまうわけです。それは日本語の表記として確立したものでもあります。で、右手だけで打てる近接した母音文字、それは UIO なわけです。

基盤:短点が I 、長点が U という割当ての根拠は。

社長:なんとなく。では実演します。

 < うううう いういうい ういうい いいうい ういいい いうううい いういい いう

 > こんにちはせかい

開発:悪くないですね。

基盤:漢字に変換は出来ないのですか?

社長:まあ、辞書でやっている原理的な限界です。オートマトンをいじるか、変換したものをグループ化するなりしてさらに変換するか、そういった機能が必要ですね。直近の入力文字列を変換するという固定概念から脱することです。

開発:母音文字の連続は日本語的にあまりないですから、他と干渉しなさそうですね。

基盤:Oをうまく何かの機能に使えると良いかもですね。

開発:まあ実際には無尽蔵に近いキーが周辺にあるわけですが。

社長:いずれGoogle IMEもこの方式に対応せざるを得なくなるでしょう。

開発:3本指モールス入力はスマホを変えるかも知れませんね。

社長:やがて到来するトレモロ入力時代。スマホにこれ専用のキーが3つ付くと良いかもです。

基盤:やはり業務用にアンドロイド購入してアプリを作りましょう。

社長:iOSで作ってくれるとうれしいな、個人的には。

-- 2020-0706 SatoxITS