メモリ食いすぎ

2011-04-16 / Mac / 0 Comments

Firefoxが4GBもメモリ使ってる・・・

        |\           /|
        |\\       //|
       :  ,> `´ ̄`´ <   ′ .       V            V  こんなにメモリを使うなんて、 .       i{ ●      ● }i            訳が分からないよ。        八    、_,_,     八    .       / 个 . _  _ . 个 ',    _/   il   ,'    '.  li  ',__

冗談抜きで、なんでこんなにメモリ使ってるんだろうね??

Read More

Macで地震速報を通知してみた 続編

2011-04-14 / Mac, 技術メモ / 0 Comments

先日作成したTwitterの地震速報を受信してMacのGrowlへ通知するツールを作り直しました。
仕組み的には前回とたいして変わっていませんが、以下の機能を追加しました。

  • 複数の対象をFollowする事を可能にした。
  • SIGHUPを受信するとTwiterサーバに対して強制的に再接続を行うようにした。
  • PIDファイルを出力するようにした。

前回のツールも今回のツールも、Macのスリープ復帰時にTwitterとの再接続が出来ないという
致命的な問題があります。
この問題への対策としてツールがSIGHUPを受信すると再接続を行うようにしました。
ですので、スリープ復帰後にターミナルから kill -HUP `cat ~/hogehoge.pid` てな感じで
SIGHUPを送信するとサーバーへの再接続が行われます。

スリープ復帰の度に手動入力するのは面倒なので sleepwatcherデーモン等を使って
スリープ復帰時にkill -HUPを自動実行すると良いのではないかと思います。

#!/usr/bin/ruby
# -*- coding: utf-8 -*-
require 'rubygems'
require 'tweetstream'
require 'ruby-growl'
require 'webrick'

# 監視するTwitterアカウント (どちらか片方で十分だと思う)
# @earthquake_jp (4104111)
# http://labs.transrain.net/products/earthquake_jp/
# @eew_jp (16052553)
# http://quake.twiple.jp/

# 複数の監視対象に対応するため配列に格納
# ID番号
id = [4104111,16052553]
# アカウント名
id_name = ["earthquake_jp","eew_jp"]

# 自分のTwitterのアカウント
$USERNAME = "username"
$PASSWORD = "password"

### tweetの受信およびGrowlの送信処理 #################################
def EarthquakeNotification(id,id_name)
  # SIGHUPを受信したらメソッドを終了する
  Signal.trap(:HUP){return}
  
  # Growlへの接続をオープンする
  g = Growl.new("localhost","Earthquake Notification",["Notification"],nil,"")
  
  # TweetStreamはデーモンではなくクライアントとして動作させる
  TweetStream::Client.new($USERNAME, $PASSWORD).follow(*id) do |status|
    # screen_nameが監視対象と同一か判定する、同一なら通知を行なう。
    if id_name.include?(status.user.screen_name) then
      g.notify("Notification","地震速報",
                   "** #{status.user.screen_name} ** \n#{status.text}\n")
    end
  end
end

### 本体 ##############################################################
# PIDファイルの名前を生成 "HOME/スクリプト名.pid"
pid_name = "#{File.expand_path("~")}/#{File.basename(__FILE__,'.*')}.pid"

# TweetStreamでのデーモン化は行なわず、自力でのデーモン化を行なう
WEBrick::Daemon.start do
  # PIDファイルの作成  
  File.open(pid_name,"w") do |file|
    file.puts(Process.pid)
  end
  
  # 再接続を行うためにループ処理で通信系を呼び出す
  loop do
    EarthquakeNotification(id,id_name)
  end
end
Read More

Macで地震速報を通知してみた

2011-04-12 / Mac, 技術メモ / 0 Comments

Macで緊急地震速報を受信できるアプリを探してみたのですが、
見つからなかったので地震速報モドキを自作してみました。

Twitterに流れてる地震速報を拾ってGrowlに通知するという単純なモノです。
単純な作りですが、地震速報が全く受信できないよりはマシなのでしばらく運用してみます。

#!/usr/bin/ruby
# -*- coding: utf-8 -*-
require 'rubygems'
require 'tweetstream'
require 'ruby-growl'

# 監視するTwitterアカウントのID
# http://labs.transrain.net/products/earthquake_jp/
# ID番号
id = 4104111
# アカウント名
id_name = "earthquake_jp"

# 自分のTwitterのアカウント
$USERNAME = "username"
$PASSWORD = "password"

g = Growl.new("localhost","ruby-growl",["ruby-growl Notification"],nil,"")

# tweet監視はデーモンとして実行
fork do
  Process.setsid
  fork do
    TweetStream::Client.new($USERNAME, $PASSWORD).follow(id) do |status|
      if status.user.screen_name == id_name then
        g.notify("ruby-growl Notification","緊急地震速報","#{status.text}") 
      end
    end
  end
end

Twitterからの情報取得はこちらのブログに書かれているコードを利用させていただきました。
地震情報はこちらのアカウントを監視させていただきました。
有用な情報をネットに公開していただきありがとうございます。

Read More