Ruby言語やLinuxのネタが多いです。
September 07, 2003 [おもひで]
■ [Ruby-GNOME2] Ruby-GNOME2-0.7.0
リリースしました。
今回はRuby/GtkGLExtが追加されてます。Win32でも動作します。また、Ruby/GStreamerもWin32環境で動作するようになりました。
あと、内部的に大きく変わったこととしてEnumやFlagsという形でGType化されている定数群をクラスとしてまとめるようになりました。
ほぼ互換性を残した形にはなっていますが、微妙に互換性が無くなってしまっているところがあるかもしれません。
■ 今回は、GTK+-2.0.6でも確認したから大丈夫だよな...。
September 08, 2003 [おもひで]
■ [tDiary] lrz's diary
Ruby/GStreamerのメンテナでありRuby-GNOME2のフランス語サイトを立ち上げ(Hikiのフランス語化も彼)、しかもきたさんのチュートリアルを英語/フランス語化し始めるなど大活躍中のLaurentですが、なんとtDiaryで日記をはじめたようです。すげーパワーだ。
■ 残念ながら、今のところプラグイン周りは使えていない様子。英語化されてないもんなぁ。
#そろそろプラグイン周りも英語化しないとな....と言い続け早数ヶ月...(T_T)。
■ 最近、このサイトにso-netの翻訳サービスからアクセスしてきている形跡があるんだけど、これも彼だな〜きっと。ここの翻訳サービス教えたのオレだし(^^;)。
■ Hi Laurent,
Welcome to tDiary world!
How is tDiary? If you read this page, Do TUKKOMI here how tDiary is, please ;).
■ って、もう見てないかな(^^;)。
なんでここに書いたかというと、Laurentのページではツッコミが有効になっていないみたいなんだよね。
#というかツッコミはできたんだけど表示されなかった。なぜ?
■ [Ruby-GNOME2] rbbr-0.4.0
リリースした。
ライブラリの選択画面を改善して、その状態を保存したりするようになったので、個人的にはかなり使い勝手が良くなったのではないかと思う(まだまだ改善すべきところはあるんだけどね)。
■ というわけで、是非使ってみちくり。
September 09, 2003 [おもひで]
■ [Ruby-GNOME2] love unstable:RubyでSelfを実装してみた
ichiyamaさんによるSeRuby。Ruby-GNOME2を使っていただいてます。
Selfというのがわからなかったのでどんなモノかは説明できません(^^;)。というわけでひとまず説明を引用。
SelfとはSmalltalkのような文法の、クラスがないオブジェクト指向プログラミング言語環境です。これと似たようなことができるようにRubyのオブジェクト環境SeRubyを作ってみました。しかもIDEつきで。
September 10, 2003 [おもひで]
■ [Ruby-GNOME2] slider by Christian Neukirchen
スクリーンショットを見ると良い感じのアプリケーションランチャだ。
...試してみようと思ったんだけど動かず。残念。
■ [Misc] fetchmail/procmail
明後日から旅行。
普段はsylpheedでプロバイダのメールボックスから直接POP3でメールをダウンロードしてるんだよね。
で、こういった旅行の時は、流量の多いMLとかを一時止めてしのいでたんだけど、最近はSobigなんかでSpamも多いので1週間も間を空けたらさすがにメールボックスがパンクしちゃうだろうなぁ。
■ というわけでfetchmail/procmailを使って定期的にローカルにメールを落とすことに。
母艦は1週間も連続運用してると固まるだけでは飽きたらず火事にでもなってしまいそうで恐いので、比較的熱を持たなさそうなOpenBlockSSを使うことにした。初めてまともな用途に使うことができそうだ...(^^;)。
■ そうそう、一週間、全くPC触らない予定です。とかいって旅行先でインターネットカフェとかに入り浸ってたりして(^^;)。
September 11, 2003 [おもひで]
September 20, 2003 [おもひで]
■ まずはSylpheed上でメール箱直下にspamというフォルダを作りそこにspamメールを移動。このフォルダは実際は$HOME/Mail/spam/になる。
続いてbsfilterをもらってきて初期化。
$ bsfilter -c ~/Mail/inbox/ml/ruby-list/* $ bsfilter -c ~/Mail/inbox/ml/ruby-talk/* $ bsfilter -c ~/Mail/inbox/ml/ruby-gnome2-ja/* $ bsfilter -c ~/Mail/inbox/ml/ruby-gnome2-en/* $ bsfilter -s ~/Mail/spam/*
cleanの方は多くのフォルダを対象にした方がより確実なんだろうけど、とりあえずruby関連のMLを対象にしてみた。
そんでもってfetchmail/procmailの設定。今までfetchmail/procmailは使わずにSylpheed自身の機能を使っていたので一から設定。この辺、よくわかってないんだよな、オレ。
$HOME/.fetchmailrc
defaults
protocol pop3
no mimedecode
nokeep
poll mail.highway.ne.jp
username xxxx
password xxxxxxx
mda "/usr/bin/procmail -d %s"
$HOME/.procmailrc
:0 HB: * ? bsfilter /home/mutoh/Mail/spam/.
bsfilterは-aをひとまず使わないようにした。
#このオプションって、spamと認識されなかったらcleanということでデータベースをアップデートしちゃうって理解でOK?
で、Sylpheed上で、「設定(C)」 - 「受信」 - 「外部プログラム」の「メールの受信に外部プログラムを使用する」をチェックし、コマンドのところに
/usr/bin/fetchmail
と書く。fetchmailをSylpheedの外部プログラムとして受信時に読み込むようにするわけだ。
これだけだと新着SPAMがSPAMと認識されなかった場合に困るのでSylpheedの「設定(C)」 - 「アクション(A)」 に以下のようなアクションを登録してみた。
アクション名: SPAMとして登録
コマンドライン: |/usr/bin/bsfilter -su&
後は、新SPAMが来た場合、Sylpheed上でそのメールを選択して「ツール(T)」 - 「アクション(N)」 - 「SPAMとして登録」を選択すればそのSPAMが新たにSPAMとして認識されるようになる....はず。
なお、新SPAMはこれやってもspamフォルダには移動できないので、それは手動でやる。まぁ、それくらいはいいでしょ。
■ こんな感じにしてみたんだけど大丈夫かな?
間違えてたらツッコミよろしく。
September 21, 2003 [おもひで]
■ [Ruby-GNOME2] Ruby/Libgda by Laurent
14個目のライブラリがCVSに追加されました。GNOME-DB Projectが提供しているDBアクセス用のライブラリです。 Ruby/DBIでいいじゃん、という気がしないでもないですが、実際のところはどうなんでしょう(^_^;)。September 22, 2003 [おもひで]
■ [Misc] fetchmailの設定ミスったー(T_T)。
nokeep入れてなかったらサーバに残す設定になっていていきなりメールが溢れて届かないようになってしまっていた...(T_T)。
もし、今日、オレにメール送ったって人がいたら再送プリーズ。
■ [Ruby-GNOME2] Ruby-GNOME2 Project Website イタリア語版
やはり時代はイタリアだよな、ってことでイタリア語サイトをはじめました。
もちろん、私が得意のイタリア語で...(以下略)。
■ 今回は、Luigi Maselliという人が主にメンテしてくれるとのこと。フランス語サイトのように上手に運営されると良いですね。
■ リソースファイルもイタリア語化したものをHiki-devに送っておきました。これからイタリア語のサイトをはじめたいと思っている方がいらっしゃいましたら是非お試しください。
■ これでHikiはもっとも多言語化されたRubyアプリケーションの1つって言っても良いかもしれませんねぇ。
■ [Ruby] net/pop3
fetchmailが遅いので、Rubyで代わりになるものを実装してみよっかなぁと思ってnet/pop.rbの例を使って自分のプロバイダのメールサーバへアクセスしてみたら、やっぱり遅い。
どうも認証に時間がかかってる模様。APOP使ってるわけでもないし、どういうことだろう。ってかSylpheedのpop3アクセスが速いのかな。
September 23, 2003 [おもひで]
■ [Ruby-GNOME2] rbbrでクラス・モジュールの検索
rbbr-0.4.0では左上の検索窓にクラス・モジュール名を入れてリターンキーを押すとクラス・モジュールの検索ができます。
この検索機能を使ってGtk::Buttonを検索しようとし、検索窓にGtk::Buttonと入力すると、最初にGtk::ButtonBox::Styleがヒットしてしまいうざいことこの上なしです。
#もちろん、何回かリターンキーを押せばそのうちGtk::Buttonがヒットしますが。
そんなときは、検索対象のオシリに$をつけてみましょう。Gtk::Button$、こうすれば一発でGtk::Buttonにヒットします。
実は、検索窓の文字列は大文字・小文字を無視した正規表現を受け付けるようになっています。
だから、gtk::button$って書いてもGtk::Buttonがヒットしますしg.*button$等のような書き方もできます。
お試しあれ。
September 26, 2003 [おもひで]
■ [Ruby] ObjectPool
Ian A. Marsmanという人が、使ったよー、というメールをくれた。
DBのコネクションプール用に使っている模様。2001/12/30にリリースして、2年掛けでユーザ登場(^^;)。
■ で、ちとコードを読み直してみたんだけど、これ、クラスじゃなくてモジュールの方が良いかなぁ。2年ぶりに手を入れるべきか...。
def match_first(a, b)
ret = ""
(0...a.size).each do |i|
break unless a[i] == b[i]
ret << a[i]
end
ret
end
puts match_first("abc", "abcdef") #=> "abc"
puts match_first("abc", "abc") #=> "abc"
puts match_first("abc", "fabcd") #=> ""
puts match_first("あいう", "あいうえ") #=> "あいう"
■ なんか、もちっとエレガントな書き方ないかな。ひょっとして正規表現一発で書けちゃったりする?
September 29, 2003 [おもひで]
■ [Ruby] (続 x 2) 2つの文字列の先頭から等しい文字列を抜き出す
ささださん版。いやー、特に2つ目のがすばらしいですね。新しいオブジェクトを極力作らないようになっていますし、むとう版のように文字列をいちいち追加したりもしていないので高速ですし。ってかInteger#times思いつきませんでした....(-o-;)。and aに関してはたぶん今後も思いつかないハズ(^^;)。
■ というわけで、実際、簡単な性能テストをしてみました。
s = Time.now
(0...1000).each {
match_first("abc", "abcdef")
match_first("abcdefghijklmn", "abcdefghijklmnop")
match_first("a" * 50 + "b" * 50, "a" * 50 + "c" * 50)
match_first("abc", "abc")
match_first("abcd", "abce")
match_first("abc", "fabcd")
match_first("あいう", "あいうえ")
}
p Time.now - s
■ テストが適切かどうかというのはあまり自信がありませんが、少なくとも上記のテストではささださん版がダントツに速いです。
というわけでイタダキなのです。
■ もちろん、ZnZさん版、さかいさん版は性能を考慮しているわけではないということをお断りしておきます。
■ [Ruby-GNOME2] ZoneCheck
ZoneCheck is intended to help solving misconfigurations or inconsistencies usually revealed by an increase in the latency of the application, up to the output of unexpected/inconsistant results.
だそうです。オプションですがRuby/GTK2を使ったGUI frontendがサポートされています。
■ [Ruby] andの使い方
;の代わりですか。なるほどー。
お恥ずかしながら意識的にこのようなandの使い方をしたことなかったので勉強になりました(汗。
andやorは評価された結果の値が返るんですね。そーか。考えたこと無かったなぁ、てか、trueかfalseが返るかと思いこんでました(^^;)。<相変わらずダメなオレ。
irb(main):010:0> "hoge" and "fuga" => "fuga" irb(main):011:0> 1 and "hoge" => "hoge" irb(main):012:0> nil and "hoge" => nil irb(main):013:0> false and "hoge" => false irb(main):010:0> "hoge" or "fuga" => "hoge" irb(main):031:0> 1 or "hoge" => 1 irb(main):032:0> nil or "hoge" => "hoge" irb(main):033:0> false or "hoge" => "hoge"
■ [Ruby](続 x 3) 2つの文字列の先頭から等しい文字列を抜き出す
; のほうが速いんじゃないとのことなので試す。おー、確かに微妙に速い。さらに;ではなく改行にして以下のようにするともちっとだけ速くなるみたい。
def match_first(a, b)
a.size.times{|i|
return(a[0,i]) if a[i] != b[i]
}
a
end
■ 数回繰り返すと1の方が速くなったり2の方が速くなったりもするけど総じて3が速い感じ。微妙だけど。
■ あ、忘れてた。環境はruby 1.8.0 (2003-09-02) [i686-linux]だす。
September 30, 2003 [おもひで]
■ [Ruby] (続 x 4) 2つの文字列の先頭から等しい文字列を抜き出す
ZnZさんがRWikiにまとめページを作ってくれました。ありがとうございます。
まとめページにあるZnZさんの2つ目のは楽しいですね。二分探索って言えば良いのでしょうか。
オーバーヘッドがあるので小さい文字列には向かないですが、大きい文字列を扱ってもスピードがあまり落ちないのが良いですね。
■ メソッド名ですがmatch_firstは確かにおかしいかも。でも、shared_prefixですか...。prefixって言葉はこういう場合にも使うのかな。
■ [Ruby] (続 x 5) 2つの文字列の先頭から等しい文字列を抜き出す
シンXさんがsed版の解説をしてくださっています。実はよくわかっていなかったので(^^;)大変勉強になりました。
ちなみにRubyは楽しいですよー。デビュー(?)お待ちしております(^^)。
■ [Ruby-GNOME2] Musicextras
音楽のextra情報(詞やアーティスト画像、アルバムカバーなどの情報らしい)を表示するツール。GUI frontendとしてRuby/GTK2, Ruby/Libglade2を利用する。
■ 最近、Ruby-GNOME2を使ったアプリケーションがちょこちょこ出てきている。それを紹介できるのはとてもうれしいことだ。
やっぱり、ライブラリは使ってもらってなんぼだもんねぇ。
■ [Ruby] Etcモジュール
Etc.passwdとEtc.groupって使いづらいような気がする。Rubyっぽくないというか。何より一度イテレートした後にまた最初に戻る方法がわからない(-o-;)。ひとまず/etc/passwdファイルの情報だけ欲しかったので以下のようなモノを作ってみた。
require 'etc'
module Users
extend Enumerable
@users = []
while user = Etc.passwd
@users << user
end
module_function
def each
@users.each do |user|
yield user
end
end
end
Users.each do |v|
p v.name
end

▲ lrz [こんにちは 皆 ;-) Yes Masao, it was me spying your diary through..]
▲ むとぽん(Masao) [こんにちは Laurent ;) Yeah, tDiary is great. Hiki referred to..]