title | emoji | type | topics | published | published_at | |||
---|---|---|---|---|---|---|---|---|
Plots.jl による作成した画像+コード+つぶやきをまとめて投稿するツール作ったよ. |
🦉 |
tech |
|
true |
2022-06-01 20:38 |
可視化楽しいですね.一方で使えば使うほどあの機能が欲しい.頭の中で実現したいことを実装に落とし込むにはどうすればいいか?を考えるようになります.そういう意味で可視化というのは学習は高めですし実装する側も骨が折れる仕事です.Plots.jl に関する知見を広めていくにはどうすればいいでしょう?
お気軽なのはTwitterでつぶやくことでしょう.ちゃんとしたものはブログに書いてもらうとありがたいですが.Twitterで投稿するには下記のステップが必要です.
- Plots.jl を使った Julia コードを書く.
- プレビューする
- Plots.jl を使った Julia コードを書く.
- プレビューする
- デバッグする
- ようやく完成
- 描画した画像を添付する
- それをつぶやく.(ふぅ...)
これをスマートにできないでしょうか? また,Twitterだと文字数の制限があります.コードゴルフはそれはそれで楽しいでしょうけれど自然体で書いたコードを共有したいわけです.
Twitter のメディア媒体に付与できる ALT を使う方法があります.
https://help.twitter.com/en/using-twitter/how-to-use-alt-gif
この ALT 機能だと画像の説明として1000文字かけるようです.コードを書く分には十分でしょう.
えーっと画像をアップロードしてその後そこにALTの中に文字をコピペっと
例えば下記のつぶやき
https://twitter.com/MathSorcerer/status/1531287772321185793?s=20&t=uPLNXBXjGK87wKV7psfRxg
下記の図の ALT をクリックすると
コードが出てくる
こんな感じのことをやりたいわけです.
コードから生成物を確認しそこからコードを書き直すか投稿するかを意思決定したい!!!
簡易なツールを Dash.jl を使って作ってみました.それがこちら TweetPlots.jl
です.パッケージではなく単一ファイルから構成されている簡単はスクリプトです.
https://github.com/terasakisatoshi/TweetPlots.jl
下記のツイートを見ると投稿後の様子と投稿前に使ったツールの対応がわかるでしょう.
https://twitter.com/MathSorcerer/status/1531307367635513344?s=20&t=uPLNXBXjGK87wKV7psfRxg
まずはツールを経由してツイートを行うための準備をします.これは Julia に限らず, Tweepy など Python を用いてつぶやく際に必要な手続きも調べると良いです.
お手持ちのTwitterアカウント(そのアカウントでつぶやくため)で Twitter Developer Platform にサインアップします.
https://developer.twitter.com/en
ここで下記の四つのトークンを入手します.
CONSUMER_KEY
(またはAPI_KEY
)CONSUMER_SECRET
(またはAPI_KEY_SECRET
)ACCESS_TOKEN
ACCESS_TOKEN_SECRET
ここではトークンと呼ばれるパスワードに相当するものが4つ必要だと思ってください.また,ツールを用いてつぶやくため読み取り権限の他に書き込み権限も必要です.
詳しくは外部サイト
https://di-acc2.com/system/rpa/9688/
をご覧ください.
なお設定の際 Callback URI/Redirect URL
などの設定が必要ですが https://twitter.com/
を使えばOKです.
作業ディレクトリを作ります. ここでは仮に workdir
にします.名前はなんでもいいので各自の環境で適宜読み替えてください.
$ ~/workdir
$ git clone https://github.com/terasakisatoshi/TweetPlots.jl.git
$ cd TweetPlots.jl
~/workdir/TweetPlots.jl/.env
というファイルを作ってその中に Step1 で格納した値を格納します.
CONSUMER_KEY=TEKITOUNAMOJI
CONSUMER_SECRET=WAKARUDESYO
ACCESS_TOKEN=KUUKIYONDE
ACCESS_TOKEN_SECRET=DEHATUGINISUSUMU
これで準備OKです.DotEnv.jl
パッケージを使って確認をしましょう.
$ julia # .env と同じ場所で実行
julia> using DotEnv
julia> DotEnv.config(); # .env のキーとバリューを読む
julia> ENV["CONSUMER_KEY"] # これで "TEKITOUNAMOJI" が見えるはず
こうすることで大事な情報をコードに直接記述せずに値を参照できます..env
は .gitignore
などに追記してバージョン管理しないようにしておきます.(万が一やっちったーって場合は Revoke してトークンを再発行する必要があります.)
下記を実行します.
$ pwd
/path/to/workdir/TweetPlots.jl
$ julia --project=@. -e 'using Pkg; Pkg.instantiate()'
$ pip3 install tweepy
投稿するロジックは Tweepy を使っています.
app.jl
というファイルを実行します.
$ julia --project=@. app.jl
Dash.jl を用いて書いたローカルホストにアプリが起動します.http://127.0.0.1:8050
に移動するとアプリ画面が見えてきます.
その画面でコードを書いて PLOT!
でコードを実行&描画をします.
コードの最後の行は下記のどれかになっている必要があります.
- plot(...) で作成されたオブジェクト
anim = @animate for ... end
によるアニメージョンオブジェクトgif
オブジェクト
これらを base64 にエンコードしてプレビューが表示されます.
あとは Tweet 以下にあるテキストエリアにてつぶやく文章を書いて Tweet ボタンを押します.
あとは各自のTwitterのUIで投稿されているか確認します.
最初のトークン準備が面倒ですがそれさえ越えれば動くはずです. お試しあーれ.