🦉

Plots.jl による作成した画像+コード+つぶやきをまとめて投稿するツール作ったよ.

2022/06/01に公開約3,400字

本日は

可視化楽しいですね.一方で使えば使うほどあの機能が欲しい.頭の中で実現したいことを実装に落とし込むにはどうすればいいか?を考えるようになります.そういう意味で可視化というのは学習は高めですし実装する側も骨が折れる仕事です.Plots.jl に関する知見を広めていくにはどうすればいいでしょう?

Idea

1. Twitter を使う

お気軽なのはTwitterでつぶやくことでしょう.ちゃんとしたものはブログに書いてもらうとありがたいですが.Twitterで投稿するには下記のステップが必要です.

  • Plots.jl を使った Julia コードを書く.
  • プレビューする
  • Plots.jl を使った Julia コードを書く.
  • プレビューする
  • デバッグする
  • ようやく完成
  • 描画した画像を添付する
  • それをつぶやく.(ふぅ...)

これをスマートにできないでしょうか?
また,Twitterだと文字数の制限があります.コードゴルフはそれはそれで楽しいでしょうけれど自然体で書いたコードを共有したいわけです.

2. 画像に付与できる ALT を使う

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 を用いてつぶやく際に必要な手続きも調べると良いです.

Step1 Twitter Developer Platform に登録

お手持ちの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です.

Step2 ツールのクローン

作業ディレクトリを作ります. ここでは仮に workdir にします.名前はなんでもいいので各自の環境で適宜読み替えてください.

$ ~/workdir
$ git clone https://github.com/terasakisatoshi/TweetPlots.jl.git
$ cd TweetPlots.jl

Step3. .env にトークンを格納

~/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 してトークンを再発行する必要があります.)

Step4. パッケージのインストール

下記を実行します.

$ pwd
/path/to/workdir/TweetPlots.jl
$ julia --project=@. -e 'using Pkg; Pkg.instantiate()'
$ pip3 install tweepy

投稿するロジックは Tweepy を使っています.

Step5.

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で投稿されているか確認します.

最初のトークン準備が面倒ですがそれさえ越えれば動くはずです.
お試しあーれ.

Discussion

ログインするとコメントできます