pinentry-program /opt/homebrew/bin/pinentry-mac
2022年7月15日金曜日
emacs mac gnupg
macのemacsのepgでなぜかminibufferからのパスワード入力ができなくなった。
~/.gnupg/gpg-agent.confに下記を追加したら別ウィンドウから入力できるようになった。
pinentry-macはbrewではいる。
2022年7月12日火曜日
Google functions とdatastore
App Engineからfunctionsに乗り換えるためにテスト。
調べてみるといろいろと新しいシステムデータベースはあるのだけど、
結局われわれの用途にはdatastoreが一番適しているという結論。つまらん。
datastoreの認証がどうなっているのか心配だったのだが、GCPのプロジェクト内では
認証が不要っぽい感じ。逆にプロジェクト外部からは触れなさそう。
この辺、AWSのIAM Roleですべての認証を切り分けていくというのとは好対照だな。
このブログを参考に試してみた。
データはdatastoreのWebサイトから直接データをいれていて、それをfunctionsから
取りに行く形。
const functions = require('@google-cloud/functions-framework'); const Datastore = require('@google-cloud/datastore'); const datastore = Datastore(); functions.http('helloHttp', (req, res) => { const key = datastore.key([req.body.kind, req.body.key]); console.log(req.body.kind, req.body.key); return datastore.get(key) .then(([entity]) => { res.status(200).send(entity); }); });jsonをアップロードすると、自動的にパースしてくれるのね。便利。 package.jsonでdatastoreを参照する。最新版がいくつなのかわからないが、1.0.0だと 動かなかった。
{ "dependencies": { "@google-cloud/functions-framework": "^2.1.0", "@google-cloud/datastore": "1.4.1" } }アクセスはこんなかんじ。謎の文字列は、datastore上のentityのID。
% curl -H "Content-type: application/json" -X POST -d '{"kind":"User", "key": 5634161670881280}' https://xxxx.xxxxx.x.run.app/ {"name":"john"}返り値もjsonになってるけど、誰がやってくれてるんだろう。。不思議。
2022年7月7日木曜日
Julia のコードをssh越しにプッシュする
Juliaには-eというオプションがあって、同じことができる。
方針は同じで、ダブルクォートをエスケープして、前後にダブルクォートをつける。
これは3行ぐらいのコードでしか試してないのでどのくらいいけるのかわからない。
function read_and_process(filename) open(filename, "r") do f l = join(readlines(f), "\n") "\"" * replace(l, "\"" => "\\\"") * "\"" end end l = read_and_process("remote-test.jl") println(l) proc = My.open(`ssh localhost julia -e $l`, read=true) println(readlines(proc.out))
python のコードをsshごしにプッシュする
Python には-cというオプションがあり、これを使うとコードを引数として与える事ができる。例えば、test.py というファイルがあった場合、
python -c "`cat test.py`"などとやれば、test.pyを実行できる。ではこれをSSH越しにできるかというとちょっと難しい。
ssh REMOTE python -c "`cat.test.py`"とやれば良さそうなものだが、コード部分がリモートのシェルで一旦解釈されてしまうので、エスケープする必要がある。 色々試行錯誤してできたのがこんなコード。要するに、全体をダブルクォートで囲み、中のダブルクォートはバックスラッシュで エスケープする、というだけ。全体をシングルクォートで囲むと中のシングルクォートをエスケープする方法が無いので詰む。 要するにシェルから渡す引数にプログラムを全部乗っけるので、限界がありそうだが、 このページを参考に調べてみると、 ubuntu 22.04では2M、macosで1Mなので、そう簡単には破綻しなさそう。
def load_and_preprocess(filename): with open(filename) as f: p = [l for l in f.readlines()] prog = "".join(p) prog = prog.replace('"', '\\"') prog = '"' + prog + '"' return prog proc = subprocess.Popen( ['ssh', 'localhost', 'python', '-c', load_and_preprocess('src/rjupyter_server.py') ], stdout=subprocess.PIPE )
登録:
投稿 (Atom)