- 投稿日:2019-04-15T22:20:10+09:00
VimでJupyter Notebookを編集するツールを作った
概要
VimでJupyter Notebookを編集するツール vim-jupyterを作った.
特徴はこのJupyter Notebookをvimで開くと
# j2p2jVersion: v1.0.1 # Aux:{"metadata":{"kernelspec":{"display_name":"py37","language":"python","name":"py37"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.2"}},"nbformat":4,"nbformat_minor":2} # Markdown: # # Hello World # meta:{"metadata":{}} # In []: print("hello world!") # meta:{"metadata":{}}こうなる.Markdown CellやMetadataが全てコメント内に放り込まれる仕様.
ちょっと見た目が煩わしいけど,jsonをそのまま編集するよりはマシなはず.インストール
1. J2P2Jをインストールする
$ go get github.com/tamuhey/j2p2jもしくは,release pageからバイナリをダウンロードする,
こいつが裏でJupyter <=> Pythonの変換をしている.2. vim pluginのvim-jupyterを入れる
vim-plugを使うなら
.vimrc
に以下を追記Plug 'tamuhey/vim-jupyter'なぜ作ったか
- 外部からの接続がほとんど遮断されているサーバでJupyter Notebookを編集しなければならない事情があったのでつくった.
- 環境構築もかなり面倒な場所だったため,ファイルを2つ持ち込めば動くツールにした.
- 投稿日:2019-04-15T19:05:25+09:00
GoでAmazon S3をKVSとして使う
これはなに
永続化が必要なバイナリKVSとしてAmazon S3を使いたい場合があります。
セッションの取り回しや、aws.WriteAtBuffer
やエラーがトリッキーなのでスニペットです。package s3kvs import ( "bytes" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3manager" ) var PersistentS3Store = &S3Store{} type S3Store struct { Bucket string Uploader *s3manager.Uploader Downloader *s3manager.Downloader } func (s *S3Store) Init(bucket, region string) (err error) { s.Bucket = bucket sess, err := session.NewSession(&aws.Config{ Region: aws.String(region), }) if err != nil { return } s.Uploader = s3manager.NewUploader(sess) s.Downloader = s3manager.NewDownloader(sess) return } func (s *S3Store) Set(key string, body []byte) (err error) { params := &s3manager.UploadInput{ Bucket: aws.String(s.Bucket), Key: aws.String(key), Body: bytes.NewReader(body), } _, err = s.Uploader.Upload(params) return } func (s *S3Store) Get(key string) ([]byte, error) { buffer := aws.NewWriteAtBuffer([]byte{}) _, err := s.Downloader.Download(buffer, &s3.GetObjectInput{ Bucket: aws.String(s.Bucket), Key: aws.String(key), }) if err != nil { if aerr, ok := err.(awserr.Error); ok && aerr.Code() == "NoSuchKey" { return nil, nil } return nil, err } return buffer.Bytes(), nil }
- 投稿日:2019-04-15T14:07:02+09:00
GO111 で GAE用の外部ライブラリを使っていて unresolved referenceになる問題
今まで使えていたメソッドがなぜか呼び出せなくなっていてかなりハマったのでメモ。
結論としてはパッケージの先頭に以下のように書いてあったのが原因
// +build appengine要するにappengineな環境だけでビルドする設定が入っていた。GAEでgo111対応するとこれは動かなくなるっぽい。
とりあえずこの部分のコメントを外したら動いた。
まだ理解しきってないがとりあえずメモということで。