Google Photos が発狂して、Google Picker 経由でつけたリンクに認証がかかるようになったり、利用制限がかかるようになった。おかげで過去に貼りつけた画像がいっさい見れなくなったりしており、かなりやる気が削がれている。

YouTube は無事なため、動画は見えるのに静止画が見れないみたいな意味わからない状態になっている。

あまりに糞すぎて数ヶ月ほったらかしにしていたが、画像を貼れないのは困るのでなんらかの対策をしないといけない

  • Google Photos の新APIで動的に静止画URLを生成してリダイレクトするようにする
    • API 制限がある。パフォーマンスが落ちる
  • 全部自分でホストするようにする
    • ストレージ見積が必要
    • さくらのVPS の 100GB プランだが、実容量的には 50GB ほどの空き

さくらのVPS ディスク拡張手順(標準OS Ubuntu18.04) を実行しようと思ってごにょごにょしていたら MBR を壊してしまった。具体的には

sudo sgdisk -s /dev/vda

が成功せず、GPT 形式に変換しろ、と言われたので何も考えず GPT に変換したら Booting from hard disk で止まるようになってしまった。まぁそりゃそうだろ考えろよという感じだが……

シングルユーザーモードの起動

さくらのVPSコンソールから「各種設定」→「OSインストール」とすすみ、「カスタムOS」→「Ubuntu 18.04 amd64」と選択して起動 (仮想 CD 経由でインストーラーが起動する)

ただVNCコンソールを開けるタイミングでは既にブートローダーを通過しているので、レスキューモードに入れなかった。

このため、インストーラー起動後のユーザー名を入力する画面で、何もせず「Back」を選択する。するとインストーラーメニューが出てくるので、一度 Detect disks を選んですぐに Back してから、シェルを起動するメニューを選ぶ (Detect disks することで /dev/vda が見えるようになる)。

この状態で、以下のように本来のディスクをマウントして chroot する。さくらの VPS の VNC コンソールは英語キーボードだと = が入力できないため、grub-install の引数を指定することができない。デフォルトでいけるようにするために chroot する。

mount /dev/vda1 /mnt
mount --rbind /dev /mnt/dev
mount -t proc none /mnt/proc
mount --rbind /sys /mnt/sys
chroot /mnt /bin/bash

これでほぼ本来の環境で作業できる。grub を再インストールする、念のため /boot をバックアップしてからやる。ここでは /dev/vda なので

cp -r /boot /boot.orig
grub-install --force /dev/vda

とした。GPT だからか何なのか --force しないと書けなかった。この手順は自信がない

grub 設定を作りなおす

update-grub

ここで reboot で起動するようになった

  1. トップ
  2. tech
  3. さくらのVPSが起動しなくなって grub 再インストール

Google Photos が発狂してからと書いてから、いろいろ見積って画像をセルフホストすることに決めた。とにかくアップロード機能はあとで作るとして、現状の画像が表示されていない状態を是正しなければならない。つまり Google Photos に上がっている画像のうち、日記で使われている画像をこのホスト上にコピーして配信する必要がある。

事前知識

まず Google Picker API 経由で取得した media の id や URL と、Google Photos API は一切互換性がない。もともと念のために Picker 経由で取得した ID っぽいものは保存していたのだけれど、これはまったく使えない。よって、Google Photos 上の全写真のメタデータをすべて取得し、ファイル名マッチによって画像を特定 (つまりファイル名→Google Photos mediaId のマッピング) していくことにした。

手順

  • Google Photos 側のメタデータをすべて保存する
  • 日記内の画像のファイル名をすべて抜き出す
  • Google Photos 側のファイル名と日記内の画像のファイル名を一致させて対応づけ、Google Photos 側の mediaId を確定する
  • 利用している画像を、対応づけた mediaId に基いてダウンロードする
  • 日記内の画像パスをすべて書きかえる

Photos library API は 10000req/day が quota。0.1req/sec 程度でしかアクセスできない。そのうえ、item リスト API は 100items/req しか取得できない。つまり、1日で取得可能な item 数は100万件にすぎない。が、個人日記程度なら十分なので、一気に全メタデータを取得するスクリプトを書いて、1行に1つの mediaItem 形式のJSONとなるようなファイルをつくった。

実際にメディアを取得するリクエストは 75000req/day できるが、library API で取得できる、メディア実体を取得するための URL である baseUrl は60分で期限切れになる。全メタデータを取得したときの baseUrl は基本的に使えないため、ダウンロードするスクリプトではあらためて batchGet API を呼び、baseUrl を取得するようにした。

ハマったところ

日本語文字列のファイル名が Google Photos 上では分解されて正規化された状態だったり、API 経由ではそうでなかったりで困った。結局 NFC して常に正規化状態で扱うようにした。

ハマったということではないが、Google Photos の library API 類はレスポンスが結構遅く、オンデマンドにこれにアクセスして実体ファイルへリダイレクトするのは結構厳しいと思った。

今後

画像まわりを好きにできるようになったので、できれば webp メインにしたい。ただ、ファイル管理やバックアップまわりでやることが増えるので、面倒くさい。

それにしてもウェブサービスのAPIを組合せて Web 2.0 の時代はどこへやらで、かつてAPIを提供して好きにしてくれとしていたサービスもどんどん渋くなり、サービス存続が信用できないケースが多くなって全部自分でホストするみたいな原点回帰をしつつある。

ASP のブログサービスを使えばそのへんの面倒くさい実装は自分でやらなくてすむが、じゃあそのASPのサービスはいつまで続くのか?という話になるし、貧乏はとにかくつらい。

  1. トップ
  2. tech
  3. Google Photos 依存からの脱却

ひたすらプラモデルを作ってる。

ここ数ヶ月、特に在宅保育してた期間にだいぶ参ってしまい、そしてまぁ Google Photos は本格的に壊れるし、そして壊れてもなんとかする気も起きず、他のプログラミング的なことをする気も全然起きずで

  • 非常に短かい期間で
  • あまり創作的なエネルギーを使わず
  • 何らかの成しとげた感が得られる

ということをしたいなと思った。プラモデルある程度ちゃんと作るというのをしたことがなかったし、子どものころはやりたくてもあまりできなかったことの一つなので、結構楽しい。

エアブラシ

エアブラシの敷居がとにかく高くて、子どものころももちろん使ったことはなかったけど、最近は入門用というか、充電式コンプレッサつきの安いエアブラシなんかもあって案外敷居が低い。

RAYWOOD エアブラシ セット USB 充電式 コンプレッサー ダブルアクション カップ(20cc,40cc) クリーナー 5本 付き 口径0.3mm 小型 プラモ 模型 塗装 アート クラフト - Raywood

Raywood

3.0 / 5.0

最初は ↑これを買って使ってみてた。ちゃんと薄めれば吹けるし、全然悪いとは思わなかったけど、やっぱりちゃんとしたエアブラシを使ってみたいなと思った。

ということで、後述するコンプレッサーを買う動機の1つになるなとも思って、クレオスの定番エアブラシを買ってみた。

GSIクレオス プロコンBOY WA ダブルアクション 0.3mm エアブラシ ホビー用塗装用具 PS274 - GSI クレオス(GSI Creos)

GSI クレオス(GSI Creos)

5.0 / 5.0

エアブラシ本体の違いが素人にわかるか?というとハッキリとわかる。

  • 手入れがしやすい (磨いてあるおかげか汚れが落ちやすい??)
  • レバーが軽いので指が疲れにくく、微調整しやすい
  • 先端ネジの精度が良くスムーズ (安いのはパッキンが溶剤に弱いみたい)

あとはコンプレッサの違いで、安いのはどうしても圧力が低いのでサフを一気に奥まで吹いたりするのはきつい。

コンプレッサー

元々エアダスター用途や、あるいは単にコンプレッサーという代物が欲しいと思っていたけど、さすがに動機が弱すぎたので、エアブラシに使うという1つの用途が産まれたことで買うことができた。

ASTRO PRODUCTS 04-09238 サイレントエアコンプレッサー 6L 04-09238 - アストロプロダクツ

アストロプロダクツ

5.0 / 5.0

買ったのは ASTRO PRODUCTS サイレントエアコンプレッサー 6L というもの。最高圧力 0.8MP、エアフロー 45/49L/min。エアツールを使えるコンプレッサーとしては 6L はかなり少ない容量だが、置き場的にこれ以上には厳しい。

エアブラシ用途では 6L は完全に十分。充填速度のほうが遥かに早いのでまずオーバーヒートすることはない。ダスター使うと数秒で 0.6MP まで圧力が落ちて再充填になるが、間欠で使えないことはない。

スペック的に騒音値は 60dB で、これはコンプレッサーとしては静かなほうだが (会話はできるレベル)、そうはいってもうるさいので防音箱も作った。

ちなみにエアブラシ用のコンプレッサーの定番は「Mr.リニアコンプレッサーL5」というもので、これは騒音値 50dB、最高圧力 0.12MP で、小型で24時間通電できるものだけど、値段的にはサイレントエアコンプレッサーとあまり変わらない。

エアブラシとコンプレッサーの接続

まず内径サイズが3種類ある

  • 1/4 または L サイズ
  • 1/8 または S サイズ
  • PS(細)

(R はオスで外ねじ、Rc はメスで内ねじ。Rc 1/4 のように表記する。PT 1/4 は古い表記だが一緒の意味で、PT1/4内ねじ == Rc 1/4)

一般用のコンプレッサーの接続は 1/4 サイズのワンタッチカプラ(ハイカプラ) や 1/4 サイズの管用ねじが使われる。

エアブラシ本体 1/8 サイズが使われている。

PS(細) はクレオスだけで使われている。同梱のホースは PS(細) で、エアブラシ本体は 1/8、そして変換コネクタが付属する。

自分は PS(細) を混在させるとややこしいと考えたので

  • コンプレッサ (カプラメス)
  • (カプラオス) 1/4 ホース (カプラメス)
  • (カプラオス・1/4 ネジ) レギュレータ・ドレンキャッチャ (1/4 ネジ・カプラメス)
  • (1/4 1/8 変換) (1/8 ネジ) エアブラシ用 1/8 ホース (1/8 ネジ)
  • (1/8ネジ) エアブラシ

という感じで繋いだ。レギュレータはコンプレッサ本体にもついているが、そっちは 0.4MP 固定にして、作業環境に近いほうにもう1つレギュレータ件ドレンキャッチャをつけて微調整できるようにした。

塗装ブース

安い塗装ブース、フル回転させるとうるさすぎるので、ステップダウンコンバーターをつけて電圧可変できるようにした。プラダンで排気用のダクトを保持するようにして、使うときだけ窓枠に挟んでる。

AFV (戦車とか) プラモデルの良さ

  • 工程の出戻りが発生しにくい (塗装と組立がいったりきたりすることが少ない)
  • 雑に作ってもどうせウェザリングやウォッシングするので気が楽
  • 失敗が存在しない。何か欠けても味になる

基本的に、あらかた組立てたら、オキサイドレッドのサーフェイサを吹いたら楽しい感じになる。あとは足まわりとか奥まったところとかに黒をしっかり吹いてから、ベース色を軽めに吹いていくとそれっぽくなる。

サーフェイサ以外はラッカー塗料は使っておらず、タミヤの水性アクリル塗料を使っている。なのでサーフェイサ以外は塗膜が弱いのだけど、オキサイドレッドを吹いておくと、うっかり塗膜を擦って剥してしまっても錆っぽくなってごまかせる。

戦車はかっこいいし良いです。