2012年6月27日水曜日

Mac OS XでCassandraを動かしてみた

はじめに
ちょっとCassandraを試してみたいなと思い、自宅のMac(OS X 10.7.3)にCassandraを入れてみました。
せっかくなので動作確認までをメモしておきます。

ダウンロードと設定
Cassandraはこちらからダウンロードします。
2012/6/27現在ではapache-cassandra-1.1.1-bin.tar.gzが最新版のようです。
ダウンロードしたものは適当なフォルダに展開します。
#以降、展開先フォルダを$CASSANDRA_DIRと表現します。

次に設定ですが、基本的にこちらに書いてあるとおりです。
まず、$CASSANDRA_DIR/conf/cassandra.yaml 中のdata_file_directories, commitlog_directory, saved_caches_directoryの項目を、存在するパスに書き換え、initial_tokenの項目に0を指定します。
次に、$CASSANDRA_DIR/conf/log4j-server.properties 中のlog4j.appender.R.Fileの項目も同様に存在するパスに書き換えます。

実行
Cassandraサーバの実行は以下で行えます。
./bin/cassandra -f
Cassandraクライアントの実行は、以下で行えます。
./bin/cassandra-cli -h [サーバアドレス] -p [ポート番号]

2012年6月22日金曜日

溜まっているGmailを一気に既読にするRubyスクリプト


未読メールって、すぐに溜まりません?
私はいくつかのGmailアカウントを使い分けているんですが、 特にサービス登録用のアカウントにメールが溜まって溜まって…。

で、ちょっと調べてみたのですが、IMAPメールの処理がRubyで簡単にできそうだったので、あまり経験ありませんがRubyで書いてみました。 

require 'net/imap'
require 'kconv'
 
def mail_check(account, password)
    imap = Net::IMAP.new('imap.gmail.com', 993, true)
    imap.login(account, password)
    imap.select(Net::IMAP.encode_utf7("INBOX"))
 
    ids = imap.search(["UNSEEN"])
    if ids.length > 0 then
        imap.fetch(ids, ["ENVELOPE"]).each {|mail|
        if mail.attr["ENVELOPE"].subject.nil? then
            next
        else
            puts(mail.attr["ENVELOPE"].subject.toutf8)
                imap.store(ids, '+FLAGS', [:Seen] )
        end
        }
    end
end
 
mail_check("ユーザ名", "パスワード")

未読(UNSEEN)メールを読み込み、既読を示すSEENフラグを立てるだけのスクリプトになります。
進行状況が分からないとやきもきしてしまうので、処理したメールのタイトルも表示するようにしました。
#ちなみに、imap.store(ids, '-FLAGS', [:Seen] )とすると、既読メールを未読に変更することができます。
#既読メールが一気に未読になっていくのは、なかなか見ない光景なので楽しいです。

かなり溜め込んでいたのでそこそこ時間がかかっちゃったのですが、一気に既読になってすっきりしました。
意外と簡単にIMAPメールって操作できるんですねー。