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ってのがありんす。

コード

こんな感じです。

gist7069234

タイマーしかけて時間が来たら標準コマンドの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になっていて充分少ないし、時間が経つとメモリ食っていくのも変わらないので、上のプラグインが不要ってわけでもないですわん。

プログラミングと目的

桐島、Rubyやめるってよ」ってプレゼンが有って、まぁ論理的じゃなくふんわりしててあんま好きじゃないんだけど、それはそれとして、職業プログラマなら目的なかったらアホだけど、自宅でやるならアリだよね。

 
んで、目的ナシで成果が出るときってどんな場合だろう?って考えてた。んで突き詰めてくと、道具って目的を内包してるなと気づいた。トンカチ握ると何でも釘に見えるという揶揄があるが、それはそれとして、トンカチの作り出された目的は釘を叩くことである。プログラミングするってことはプログラミング言語を使うことであり、プログラミング言語も勿論道具であって、プログラミング言語の作り出された目的はコンピュータをうまく動かすことである。つまり、コンピュータの長所を活かすことでならプログラミング言語と戯れることで成果を残す可能性がある。
 
コンピュータの長所って言うと、
  • 計算が速い
  • 決められた順番に間違いなく実行してくれる
  • 繰り返しに強い
  • 寝ないで働ける
  • 大量の情報を扱っても疲れない

などなど。

 

これらの方面では成果を残せる可能性があるわけだ。インターネットとその先のデバイスを含めるとまぁ膨大なことができる。が、汎用ロボットは発達してないので物資界への関わりは限定的かな。そして人工知能はまだ居ないので創造性のあることはできない。あと、非プログラマの人々の力がないとできないことっていっぱいあるよね。

 

というわけで、成果がコンピュータに関わる範囲で収まるので満足できる人には、目的なしでプログラミングに打ち込むのもいいんじゃないでしょうか。

iPhoneにはてなブログアプリ入れてみた

これで万年床から書けるので更新頻度上がるかも?

しばらく停止してたのですが毎日100人前後は来てくれるみたいで有難いことです。

アクセス解析が付いてるとやっぱいいね。誰かが見てくれるっていうのは励みになりますね。というか誰も見てくれななかったら絶望する。自分が見てればいいという人もいるかもだけど。

アクセス解析見たら1日700人ぐらい来てた。ありがてえ。ところで、はてなブログアプリがサクサク動かなくてイラッとする。画面切り替えで溜めが入る感じ。

「ふーん、で、君はウェブサービスでどれが好きなの?」

「オウフwwwいわゆるストレートな質問キタコレですねwww
おっとっとwww拙者『キタコレ』などとついネット用語がwww
まあ拙者の場合ウェブサービス好きとは言っても、いわゆるビジネスとしてのウェブサービスでなく
メタSF作品として見ているちょっと変わり者ですのでwwwジェイン・マクゴニガルの影響がですねwwww
ドプフォwwwついマニアックな知識が出てしまいましたwwwいや失敬失敬www
まあソーシャルのメタファーとしてのFacebookは純粋によくできてるなと賞賛できますがwww
私みたいに一歩引いた見方をするとですねwwwポストTwitterのメタファーと
商業主義のキッチュさを引き継いだサービスとしてのですねwww
Instagramの文学性はですねwwww
フォカヌポウwww拙者これではまるでオタクみたいwww
拙者はオタクではござらんのでwwwコポォ」