12/28 (金)
[Food] Eataly @東京駅 丸の内地下
東京駅の地下にEataly(公式、食べログ)というイタリヤ食材店がある。 ここにはシチリア菓子として有名なカンノーリを食べられる場所がある。
映画やドラマによく出るカンノーリだけど、皮はカリカリだったのね。
12/26 (木)
[Food] 3 STARS PANCAKE@武蔵中原
武蔵中原にあるパンケーキの専門店 3 STARS PANCAKE (食べログ)。 パンケーキは厚みがあるが柔らか、というか密度が低い。 ナイフで思ったように切れない。
12/21 (土)
[Movie] スター・ウォーズ9: スカイウォーカーの夜明け
チネチッタで『スター・ウォーズ9: スカイウォーカーの夜明け』(原題: Star Wars: The Rise of Skywalker)を観る。
ルーカスが宣言した「スターウォーズは9部作だ」がこれで本当になった。 ルーク、ハン・ソロ、レイアがみんな死んでレジェンドは終了か。 私が生きているうちに完結するとは感慨深い。
12/20 (金)
systemctl edit
Docker デーモンは通常 UNIX ドメインソケットでクライアントと通信するが、TCP ソケットで接続することも可能である。 その場合、docker デーモンの起動オプションを追加する必要があるので /lib/systemd/system/docker.service を変更する必要がある。
- ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
+ ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock
ただ /lib/systemd/system/docker.service を直接書き換えると、docker の RPM パッケージをアップデートしたタイミングで設定が更新されてしまう。 これを防ぐには systemctl edit を使えばよいらしい。
sudo systemctl edit docker.service
systemctl edit はドロップインファイルというユニット設定を差分更新するファイルを記述する。 今回は /etc/systemd/system/docker.service.d/override.conf というドロップインファイルができる。 2行目の空の ExecStart= は既存の設定を削除するので書かない場合は、元の ExecStart と追加した ExecStart の 2 行が出来て正しいユニット設定にならないらしい。
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock
ドロップインファイルを適用後の状態は以下のコマンドで確認できる。
sudo systemctl cat docker.service
12/19 (木)
Box API
Box.com を API 操作するための API リファレンス を見ているが、この API は GET https://api.box.com/2.0/files/:file_id
、GET https://api.box.com/2.0/folders/:folder_id
と ID でパラメータを指定することになっている。
/path/to/my/file のようなファイルのパスでファイルやフォルダーを検索する API は提供されていないようだ。
やり方としては GET https://api.box.com/2.0/folders/0
でルートフォルダーから順番にトラバースして、必要なパスの各段階を取ってゆくしかないようだ。
他にはコンテンツを検索する GET https://api.box.com/2.0/search
があり、ancestor_folder_id を指定するとフォルダー直下にあるファイルの名前を使って検索ができる。
ただしこれも ancestor_folder_id をフォルダーIDを使うので、API の発行回数は GET https://api.box.com/2.0/folders/:folder_id
と同じになる。
ただフォルダー内の大量にエントリーがあった場合でもピンポイントでフォルダーを参照できる点が有利か?
4年前の Stack Overflow の Can you lookup files by path using the box API? の記事でも、この点が議論されているがうまい解決方法はないようだ。
12/14 (土)
[Movie] 屍人荘の殺人
109 シネマズ川崎で『屍人荘の殺人』を観る。 小説のほうは読んでいたが、ゾンビ・パンデミックスの最中に殺人事件の推理劇が行われるというのはシュールだ。
[Movie] ジュマンジ/ネクスト・レベル
チネチッタで『ジュマンジ/ネクスト・レベル』(原題: Jumanji: The Next Level)を観る。 ウェルカム・トゥ・ジャングルの直接の続編になっている。
続編があることをにおわせて終わるが、次回作はジュマンジが現実世界に進行してくると予想する。 前作のボスのヴァン・ペルトと今作のボスのユルゲンは復活するんだろうなぁ。
12/7 (土)
Amazo S3 様オブジェクトストレージのモデル
Amazo S3 に似たオブジェクトストレージ、つまり S3 や Azure Blob Storage と GCP Google Cloud Storage などをファイルシステムとしてマッピングすることをずっと考えている。
各オブジェクトストレージを横断的に調べていると、共通点も見えてくる。
- どのオブジェクトストレージも Web サーバーをモデル化している。 つまり https://bucket.objectstorage.example.com/objectpath のような URL とのマッピングを行い objectpath の部分が識別子となる。
- どのオブジェクトストレージもオブジェクトを移動する機能を提供しない。
- どのオブジェクトストレージもバケットやコンテナと呼ばれる単位の下にオブジェクトが何十万個も並べるようになっているが、それでは管理上扱い辛いこともあるので objectpath に "/" を含んだ場合に、それをディレクトリのように階層化してオブジェクトをリスティングする機能を持っている。 ただしこれは実際にディレクトリが存在する訳ではなく、オブジェクト名のパターンマッチングである。
- 3. の理由により、「ディレクトリを作成する」という操作が存在しない。 Azure Storage Explorer などのクライアントツールは、オブジェクトストレージをファイルシステムのように見せているが、これらのツールは「仮想ディレクトリを作成する」ことはできるが、その後に作成した仮想ディレクトリにファイルをアップロードしてオブジェクトを登録する必要がある。 仮想ディレクトリはクライアントツール内のみの揮発する情報で、オブジェクトを登録しない仮想ディレクトリはしばらくすると消えてしまう。
- 半面、"/" で終わる名前のオブジェクトを作成することができる。これは仮想ディレクトリではなく、実体のあるオブジェクトだ。
3. と 4. の制限が邪魔になって、オブジェクトストレージのファイルシステムマッピングが面倒になっている。 せめて名前の最後が "/" で作成できるオブジェクトを禁止してくれればよかったのに…
12/2 (月)
Kong の宣言的定義
Kong は API アグリゲーターで、複数の API を統合することができるが、その管理も API になっている。 だがバージョン 1.1 から declarative config file が導入され、YAML 形式で定義ファイルを書くことができるようになった。
Declarative config file は
- DB-less 運用のための設定ファイル。Kong は動的に API を管理する時はバックエンドに PostgreSQL や Cassandra を使うが、運用中に設定を変更しない場合に起動時に設定ファイルを渡す。
- DB 運用の場合、DB の中の設定を設定ファイルとして取り出したり、逆に DB に設定したりする。
1. の場合は kong.conf の中で、DB-less 運用の指定と declarative config file ファイルのパス(下の例だと kong.yml)を設定する。
database = off declarative_config = ./kong.yml
一方、2. の場合は kong config のコマンドを使うことになる。 その際に DB から設定をセーブする db_export はいつでも使えるのだが、DB に設定をロードする db_import は Kong の起動前(kong start)にやらないと効果がないということが分かった。
これに気づかずに3時間ぐらいを浪費した。 kong start 後に kong db_import をした後にアクセスしても {"message":"no Route matched with those values"} が出るので、何が悪いのか分からずにすったもんだしたよ。 せめてドキュメントに書いておいてくれればよいのに…