Showing posts with label Ruby. Show all posts
Showing posts with label Ruby. Show all posts

Sunday, August 29, 2010

コマンドライン Twitter ポストクライアント dokan.rb

またどうでもいいものを作ってしまったので公開しておきます。
コマンドラインからTwitterに投稿するRubyスクリプトです。

http://github.com/takuo/dokan

Tuesday, August 25, 2009

IMAProwl on Windows

WindowsでIMAProwlを動かす手順

ところで、rubygemsのprowlライブラリはhttp_proxyに対応してないみたい。
そのうちなんとかするか。

MS-Win32のRuby1.9.1を手にいれる。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
64bit環境ではx64でもいいけど面倒になりかねないので、とりあえず32bitにしたほうが無難。
適当に展開して、D:\ruby\ とかに移動しておく。




OpenSSL for Windows をインストールする。
http://www.slproweb.com/products/Win32OpenSSL.html
Win32 OpenSSL v0.9.8k Light でよさそう。適当にインストール。

zlib をインストール。IMAProwl自体には必要ないけれども。
http://gnuwin32.sourceforge.net/packages/zlib.htm
binaryのzipをダウンロードしてbin\zlib1.dll を ruby\bin\zlib.dll としてコピー

おなじくreadlineも
http://gnuwin32.sourceforge.net/packages/readline.htm
binaryのzipをダウンロードしてbin\readline5.dll を ruby\bin\readline.dll としてコピー

github.com から IMAProwlをdownloadしてd:\IMAProwl とかに展開、config.yml を設定して実行。



WindowsでRubyスクリプトをバックグラウンド動作させるのは残念ながら方法を存じません。
なんかサービス化ツールがあったかもしれない。
OS Xは基本的にUNIXだからもっと簡単なのかなぁ。

Edit: 0.6からgem不要になったので削除

Tuesday, August 18, 2009

Strange behavior Ruby Net::IMAP

Net::IMAPの挙動が変なの。

GMailのimapアクセスにて。
$ irb1.8
irb(main):001:0> require 'net/imap'
=> true
irb(main):002:0> imap = Net::IMAP.new('imap.gmail.com', 993, true)
=> #<Net::IMAP:0xb7a5eb0c [略]
irb(main):003:0> imap.login('example@example.com', 'example')
=> #<struct Net::IMAP::TaggedResponse tag="RUBY0001", name="OK", [略]

[ここで ウェブインターフェースで「他のセッションをすべてログアウト」を実行する]

irb(main):004:0> imap.capability
ブロックののち segmentation fault.

同様に Ruby 1.9では
$ irb1.9
irb(main):001:0> require 'net/imap'
=> true
irb(main):002:0> imap = Net::IMAP.new('imap.gmail.com', 993, true)
=> #<Net::IMAP:0x9387314 [略]
irb(main):003:0> imap.login('example@example.com', 'example')
=> #<struct Net::IMAP::TaggedResponse tag="RUBY0001", name="OK", [略]

[ここで ウェブインターフェースで「他のセッションをすべてログアウト」を実行する]

irb(main):004:0> imap.capability
EOFError: end of file reached
from /usr/lib/ruby/1.9.0/net/imap.rb:1016:in `get_tagged_response'
from /usr/lib/ruby/1.9.0/net/imap.rb:1073:in `block in send_command'
from /usr/lib/ruby/1.9.0/monitor.rb:190:in `mon_synchronize'
from /usr/lib/ruby/1.9.0/net/imap.rb:1058:in `send_command'
from /usr/lib/ruby/1.9.0/net/imap.rb:316:in `block in capability'
from /usr/lib/ruby/1.9.0/monitor.rb:190:in `mon_synchronize'
from /usr/lib/ruby/1.9.0/net/imap.rb:315:in `capability'
from (irb):4
from /usr/bin/irb1.9:12:in `<main>'
irb(main):005:0> imap.disconnected?
=> false

ということでRuby 1.8ではサーバから一方的に切断されても、それを検出することができません。
1.9 でも #disconnected? は false がかえってしまう。
ここで #disconnect すると Errno::ENOTCONN: Transport endpoint is not connected

うーん。
どうしたものか。Socketのほうかなぁ。
まぁIDLEの実装も1.9.2からぽいのでそっちのほうも試してみなくては。