update_profile - Twitterユーザー情報を更新するEarthquakeプラグインを書いた
Updated update_profile - Twitterのユーザー情報を更新するEarthquakeプラグインをアップデートしたをお読みください!
今日で1日1リリース、3日目!
寝込んでて9:30から作業始めたんですけど間に合いました!
予告通り、Earthquakeプラグインを作りました。
今日のプラグインは、
名前やバイオを手軽に更新したかったでござる。:bio ほげほげ
みたいな感じで。
インストール
⚡ :plugin_install https://gist.github.com/babie/7076697
設定
ZeroConfでございます。
使い方
⚡ :name 我々はボーグだ ⚡ :description お前たちは同化される。抵抗は無意味だ。 ⚡ :url http://ja.memory-alpha.org/wiki/%E5%90%8C%E5%8C%96 ⚡ :location 浮遊機械都市 ⚡ :me { ... "name" => "我々はボーグだ", ... "description" => "お前たちは同化される。抵抗は無意味だ。", "url" => "http://t.co/ks4Wv00N9P", "location" => "浮遊機械都市", ... }
みたいな感じっす。:bio
が:description
のエイリアスになっております。長いので。上では特に付け足しませんでしたが、yes/no聞かれるんで安心して打ってください。
:me
は:user #{twitter.info['screen_name']}
の略です。確認するのにめんどかったので入れた。
:screen_name
の更新はnoを優先で入れようか迷ったけど、重大すぎるので入れるのやめました。
コード
descriptionの複数行入力はEarthquakeの:update
コマンドからパクってきたんだけど、前々回のauto_restart プラグインみたいに入力がおかしかったのでstty
コマンドを挟んでます。
stty icrnl
は「復帰キャラクタを改行キャラクタに変換する」で、\rを\nに変換stty brkint
は「ブレークによって割り込みシグナルを発生する」で、\Dを表示するんじゃなくてINTシグナルに変換
して対処してますん。
なんか俺の端末がおかしいっぽいな。プログラム起動するとstty設定忘れるんじゃろか?
class_eval
はプラグイン読み込みに便利ですねぇ。
今後
現在は:name ほげほげ
とかで更新できるようになってるけど、:name
(引数なし)の時はただの表示にした方がいいかも。んで更新は:update_name ほげほげ
に変える。オリジナルコマンドとの整合性的に言っても。長いのが嫌で現状こうなってんだけど、そこは各ユーザーにエイリアス張ってもらう方がいいのかもしれん。
あと:me
は別プラグインに分けた方がいいだろうなぁ。名前被ってるプラグインコマンドも散見されるし:myself
にリネームしようかなぁ。
次回予告
3日坊主回避できるかな?
まだEarthquakeプラグインのネタ残ってんだけど、ちょっと趣向を変えてコマンドラインでも作ってみようかな。
fav_machine - favしたツイートの画像を保存するEarthquakeプラグインを書いた
Updated
このプラグインをsave_imageとevent_chainに分割して、もっと汎用的にしました。使ってる人いないと思うけど、いればそちらをオススメします。
はい、予告どおりEarthquakeプラグインでございます。
はい、名前はアレです、おっさんなので。このプラグイン入れて常時起動しておけば、Earthquake上はもちろん、スマートフォンなんかのTwitterクライアントでfavしてもローカルに保存されます。Bitcasaのディレクトリなんか保存先に指定すればいいんじゃないでしょうか。
ちょっと話は逸れますが、特定のユーザーやキーワードを監視してツイートや画像を延々とBitcasaフォルダに溜め続けてBitcasaアカウントにそのフォルダのアクセス権与えるサービス(有料)を企画したんですが、Twitter API利用規約に「再配布禁止」って書いてあったので諦めました。そりゃそうだ。迂回方法なー。
ちなみにBitcasa APIは2013年10月24日現在まだありません。
インストール
Earthquake内で、
⚡ :plugin_install https://gist.github.com/babie/7076697
してください。
設定
Earthquake.config[:fav_machine] = { :dir => "~/.earthquake/fav_machine", :screen_names => ["babie"] }
のように~/.earthquake/config
に設定します。デフォルトで、~/.earthquake/fav_machine
ディレクトリが自動で作られ、自分がfavった画像が入ります。よく考えたら他人がfavった情報ってuser_streamに入ってなかったっけ?:screee_names
いらんかったかも。てへ。
使い方
マッスィーンなので自動です。
コード
ネスト深くてごちゃっとしてますねぇ。
Object#try
はActiveSupportによる拡張です。この場合はeachできるならするって意味です。画像ついてないツイートのときはmediaが入ってないから。
んで、今のところ pic.twitter.com 画像URLのみサポートですわ。必要になったらnokogiri使ってtwitpicとかpixivとかもサポートするかも。需要ありそうだな。
ついさっきまで、デフォルト設定が「俺(babie)がふぁぼった画像を保存する」という、わりとひどい仕様になってたので、ユーザーの名前突っ込むように直したわ。てへ。
今後の拡張予定
あれだ、もっとマッスィーンっぽく色々できた方がいいかも。:retweet をチェインするとか。ちょっと考えるわ。
次回予告
明日もまたEarthquakeプラグインの予定です。ばいなり〜
auto_restart - Earthquakeをメモリ解放のために一定時間で再起動するプラグインを書いた
あの日見たソフトウェアの能力を僕はまだ知らない。(名前は知ってた)
皆さん、Twitterクライアントは何をお使いでしょうか?私は最近Earthquakeというターミナルで動くクライアントを使い始めたところです。いや、数年前からあったんですけど、あの大地震の記憶も冷めやらぬときにツイートが回ってたもんですから、てっきりTwitterで地震速報を受け取れるソフトだと勘違いしてました。
Earthquakeの良いところ
使い始めた感想ですが、今までのTwitterクライアントで通常時のメモリ使用量が格段に少ない(38MB!弊社調べ)とこが気に入りました。
そして、このソフトウェア、Rubyで書かれているのですが、言語内DSLが素晴らしいです。壮絶技巧な黒魔術もなく平易に書かれているので、Rubyの入門用ソースコードリーディングにも最適です(全部は読んでないですが、多分)。綺麗。
また、プラグインが特定ディレクトリにファイルを1個置くだけって手軽使用なんで、入門用ソースコードライティングにもオススメです。公開もgistにアップロードするだけ。ステキ!抱いて!
んで、僕もプログラミングのリハビリにプラグインを書いてみました。auto_restartって名前のメモリ解放のための自動再起動プラグインでっす。
Rubyのソフトウェアは常時起動してるとメモリがぶくぶく太って行き再起動が必要なことがあります。ツラい。デーモン管理ツールのBluepillなんかを使うのも良いですが、ちょっと導入が面倒ですよね。なのでプラグイン化してみました。
インストール
Earthquake内コマンド一発です。
⚡ :plugin_install https://gist.github.com/babie/7069234
頭の稲妻マークは除けてコピペしてくださいね。んで :restart すればプラグインが読み込まれます。
設定
デフォルトで1時間間隔となってますが、お好みで変更できます。例えば2時間にするには、
Earthquake.config[:auto_restart] = { :interval => 2.hours }
こんな感じです。秒数なので注意してくださいね。EarthquakeはActiveSupportを読み込んでいるので2.minutes
とか書けます。もちろん60 * 60 * 2
なども可です。
使い方
名前の通り自動です。というか手動リスタートは標準コマンドに:restart
ってのがありんす。
コード
こんな感じです。
タイマーしかけて時間が来たら標準コマンドのEarthquake::Input#input(":restart")
を呼ぶってすげぇ簡素なコードなんですが、めちゃめちゃハマりました。何回か再起動してると入力しても文字が表示されないことがあるんです。
Readline.readline が動いているスレッドを避けてリスタートしたり特に念入りに殺してリスタートしたりしてみたけどよくわからない。ググってググってようやく辿り着いたのがstty echo
です。なんかReadlineの動いてるスレッドをkillするときstty -echo
(入力をターミナルで反響しない)しちゃう時があるみたいです。
うーむ、terminfoとかターミナルに特有なUnixの知識を避け続けたのが仇になったようです。読めない略語が多くてつらいんだもん。まぁ、時間はかかったがなんとか成って良し。
今後の拡張予定
あれだ、RSS(実メモリ)はリセットされるんだけど、VSZ(仮想メモリ)の減らし方は知らん。まー、実際に専有してなきゃええんじゃないか?
次回予告
明日はまたEarthquakeプラグインを紹介します。
Earthquakeプラグイン書くの楽しい!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
追記
なんか次回の関係でソースコード読んでたら、ActiveSupport::Cache::MemoryStore 使ってるので、設定ファイルで
config[:cache] = ActiveSupport::Cache::MemoryStore.new(:size => 16.megabytes)
とかするとキャッシュサイズ制限できるっぽい。けど、元々デフォルトで32MBになっていて充分少ないし、時間が経つとメモリ食っていくのも変わらないので、上のプラグインが不要ってわけでもないですわん。