友達の結婚式の二次会に行った。滋賀県で開催されていて、披露宴は船上でやると聞いたので、浜大津に帰ってくるに違いないと予想して待ち構えて湖畔で日本酒飲んでいたところ、船は浜大津には帰ってこず、ただ異常な場所で飲酒しただけの結果になってしまった。1カップの日本酒とじゃがりこというメニューで、日本酒とじゃがりこが全然合わない。
TRANS BOOKSでVR夢日記と豆本夢日記を出店します
来週東京で行われるTRANS BOOKSで、VR空間で僕の夢日記をチマチマ読める「VR夢日記」の展示と、スマホより小さい豆本で僕の夢日記をチマチマ読める「豆本夢日記」の販売をおこないます。
VR夢日記はきのう会社でデモ展示したところ好評でした。ダンボールとAndroidだとFPSがちょっと足りなかったのでOculus Go置いとこうかと考えてます。
豆本は今日家に届いて、今日はおまけのしおりを作ったりしていました。会場に送りつけて搬入するつもりだったけど何も考えずに家に送ってしまった。
僕はBCCKSで本を作ったり、VRのコードを書いたりして、表紙のデザインとイラストやしおりの印刷所への入稿などはid:corinyouにやってもらっています。家にデザイナがいると便利。
VR夢日記開発中です。めっちゃ酔うと好評#TRANSBOOKS_JP pic.twitter.com/Q64cSCtOOf
— 趣味はマリンスポーツです (@hitode909) 2018年11月16日
来週末のTRANS BOOKSでスマホより小さい豆本夢日記販売します!128ページで7年分、約200篇の夢を収録してます!しおりつきで700円の予定です!スマホより小さくスマホより安い!!来てくれ!! #TRANSBOOKS_JP pic.twitter.com/tOA6KUadEh
— 趣味はマリンスポーツです (@hitode909) 2018年11月17日
シェルのhistoryをクラウドに保存する取り組み
ある日zshの履歴が消えた悲しみからいくつか課題感を持っていた。
- 巨大な1ファイルにどんどん書いていくので、壊れたときの影響が大きい
- 追記方式なので、複数の端末で共有するためGitやDropboxなどに入れるとコンフリクトしやすい
- 履歴から取り出すときにどのディレクトリで実行したコマンドなのかわからない
シェル履歴をファイルに書いて終わりという暮らしは数十年変わっていない。
履歴はクラウドサーバーに保存して、補完したいときにAPI経由で問い合わせるというアーキテクチャが良いと思ったので、作ってみた。
github.com
コマンドの実行時
- zshのフックを使って、コマンドの実行時に、実行したコマンドと$pwdをAPIにPOSTする
- Cloud Functionsが立っていて、送られたコマンドをCloud Datastoreに保存する
Cloud FunctionsはGoogle製のAWS Lambdaみたいなやつで、Cloud DatastoreはGoogle製のAmazon DynamoDBみたいなやつ。
普通に暮らしてると、こんなかんじにDatastoreで履歴を見れる。見えるとまずい情報があったらポチポチやって消せる。
履歴の補完
- $pwdを指定してAPIをGETする
- そのディレクトリでのコマンドに絞り込んでJSONを返す
- pecoで選択して実行する
こんな感じのJSONが出てくる。pwdを保存してるのが新規性がある。
[ { "timestamp": "2018-11-16T07:09:28.066Z", "command": "curl --silent \"$POST_SHELL_HISTORY_APIROOT/accept?apikey=${POST_SHELL_HISTORY_APIKEY}&pwd=${PWD}\" | jq . | less", "pwd": "/Users/hitode909/co/github.com/hitode909/post-shell-history" }, { "timestamp": "2018-11-16T07:09:22.482Z", "command": "curl --silent \"$POST_SHELL_HISTORY_APIROOT/accept?apikey=${POST_SHELL_HISTORY_APIKEY}&pwd=${PWD}\"", "pwd": "/Users/hitode909/co/github.com/hitode909/post-shell-history" }, { "command": "make deploy", "pwd": "/Users/hitode909/co/github.com/hitode909/post-shell-history", "timestamp": "2018-11-16T02:45:08.860Z" }, ]
やってみたところ、候補をディレクトリで絞り込めるのがたいへん便利。こっちのプロジェクトはnpm run buildだけどこっちではmake js、とかこれまでは覚えておくしかなかったのが、履歴から選べば正解が出る。
初めて触るディレクトリなどのとき用に、ディレクトリを指定せず全履歴から選ぶモードも作った。
これからデータが増えると事情が変わってきそうだけど、実行時間も気にならず動いているので、もともとあったCtrl-rでファイルからヒストリを絞り込むのを消して、クラウドから引っ張ってくる版だけで暮らしている。
困り
作り始めたところなのでいろいろ困り事はある。
- オフラインで動かない
- バッファリングしてないのでオフラインでの作業はロストしてしまう。バッファリングする仕組みを作ると良いけどやってない
- 作りが荒い
- precmdで
curl &
してるだけなので[1] 87143
や[1] + done curl --silent --data-urlencode "command=${command}" --data-urlencode >&
というのが1コマンド打つたびに出てくる
- precmdで
- 認証をちゃんとやってない
- APIキーでの認証を手作りしたけどGoogleのアカウントと連携してOAuthで使い始められるとよさそう。いまは1人1個GCPのプロジェクトを作るということにしている。
手元のファイルを大切にする時代は終わったと信じて、未来に進んでいきたい。
関連
- 突然シェルのhistoryが消えてめっちゃつらい - hitode909の日記
- ヒストリが消えたときの日記
- GitHub - hitode909/post-shell-history-to-gcloud: WIP
- 今回作ったやつ
■
ワイン飲みまくってタクシーで帰ってたら日本語お上手ですねお国はどちらですか日本長いんですかと聞かれる自体が発生した、日本、ちょっと、長いです、と答えて降車したけど、アップルストアでマックブックエアー買うときに英語で話しかけられてそのまま英語で受け答えして買った以来の衝撃
— 趣味はマリンスポーツです (@hitode909) November 14, 2018
MacBook Airが発売されたのでMacBook買った
家では2015年に買った11インチのMacBook Airを使っていて、メモリが4GBしかなくて、そろそろ動作が遅くなっていた。ディスクはチェックアウトしたコードくらいしか置いてないので余裕あった。
MacBook Airが発売されるのを待って、アップルストアに行って、MacBookとAirと持ち上げ比べてみると、重さが全然違う。MacBookはびっくりするくらい軽くて、Airはその見た目からすると想定通りくらいの重さで、驚きが少なかった。
ということがあって、一番安いモデルのUS配列のを買ってきた。物理的に軽いのは正義だと思って、家では膝に乗せて使っていて、ゴロゴロ回転しながら使うので、一番軽いものを買うのがよいと思う。
重いグラフィックの編集やIDEを開いたりはしなくて、ちょっとJSを書いてブラウザで動くものを作るくらいだったら持ち運ぶ障壁を下げられる方がメリットあると思う。あとは、会社にはProがあるので、なんかすごい行列計算とかをしたくなったら会社でやればよいという話がある。
www.instagram.com