自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
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でも確認したから大丈夫だよな...。

[Misc] そういや

ここ更新したの2週間ぶりだ(^^;)。


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

リリースした。

ライブラリの選択画面を改善して、その状態を保存したりするようになったので、個人的にはかなり使い勝手が良くなったのではないかと思う(まだまだ改善すべきところはあるんだけどね)。

というわけで、是非使ってみちくり。

[Misc] SF.net

なんか、また、メールが遅延してる....。てか止まってる?

本日のツッコミ(全2件) [ツッコミを入れる]

lrz [こんにちは 皆 ;-) Yes Masao, it was me spying your diary through..]

むとぽん(Masao) [こんにちは Laurent ;) Yeah, tDiary is great. Hiki referred to..]


September 09, 2003 [長年日記]

[Ruby-GNOME2] love unstable:RubyでSelfを実装してみた

ichiyamaさんによるSeRuby。Ruby-GNOME2を使っていただいてます。

Selfというのがわからなかったのでどんなモノかは説明できません(^^;)。というわけでひとまず説明を引用。

SelfとはSmalltalkのような文法の、クラスがないオブジェクト指向プログラミング言語環境です。これと似たようなことができるようにRubyのオブジェクト環境SeRubyを作ってみました。しかもIDEつきで。

[Misc] SF.net ML

うぬぬぬ、昨日のRuby-GNOME2 MLに出したメールはロストしちゃったのかな...。


September 10, 2003 [長年日記]

[Ruby-GNOME2] slider by Christian Neukirchen

スクリーンショットを見ると良い感じのアプリケーションランチャだ。

...試してみようと思ったんだけど動かず。残念。

[Misc] fetchmail/procmail

明後日から旅行。

普段はsylpheedでプロバイダのメールボックスから直接POP3でメールをダウンロードしてるんだよね。

で、こういった旅行の時は、流量の多いMLとかを一時止めてしのいでたんだけど、最近はSobigなんかでSpamも多いので1週間も間を空けたらさすがにメールボックスがパンクしちゃうだろうなぁ。

というわけでfetchmail/procmailを使って定期的にローカルにメールを落とすことに。

母艦は1週間も連続運用してると固まるだけでは飽きたらず火事にでもなってしまいそうで恐いので、比較的熱を持たなさそうなOpenBlockSSを使うことにした。初めてまともな用途に使うことができそうだ...(^^;)。

そうそう、一週間、全くPC触らない予定です。とかいって旅行先でインターネットカフェとかに入り浸ってたりして(^^;)。

本日のツッコミ(全2件) [ツッコミを入れる]

たむら [台風来てるみたいだけど、気をつけてねぇ〜]

むとぽん [実は飛行機飛ばなかったりして(^^;)。]


September 11, 2003 [長年日記]

[Misc] 旅に出ます

6:35に羽田。電車は厳しいのでタクシーでも拾って行こうと思います。

メールのリプライ書いてたら結局この時間まで起きてしまったので寝ないで行きます。といっても後1時間くらいか。そろそろ荷造りはじめないと(^^;)。

今回は完全にインターネット環境から脱出します。携帯は念のため持って行くけど、使わない予定(使えない?)。

そんなわけで1週間、まったくメールの返信とかしません、つーかできません。

後のことはよろぴく > 関係各位。

本日のツッコミ(全1件) [ツッコミを入れる]

きた [台風大丈夫っすか?]


September 19, 2003 [長年日記]

[Misc] 旅から戻りました

というわけで、今から未読メールの山をやっつけます。いやー、タマってるなぁ(^^;)。

P.S.台風はうまいこと避けられましたよん。> きたさん

本日のツッコミ(全2件) [ツッコミを入れる]

たむら [無事で何より。]

むとぽん [どーもでーす。]


September 20, 2003 [長年日記]

[Misc] Sylpheed + fetchmail + procmail + bsfilter

SPAMが急激に増えてさすがに辛くなってきたのでオレもbsfilterを導入してみた。

まずは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 [長年日記]

[Misc] うー fetchmail重いよー

もっと軽いやつないかなー。

[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 [長年日記]

[Misc] SF.jp

メンテ中?長いな...。

[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$等のような書き方もできます。

お試しあれ。

[Misc] SF.jp

なんかアクセスできなくなってるし....。昨日作ったイタリア語サイトは無事バックアップ取れてるのだろうか。ちと心配。

本日のツッコミ(全2件) [ツッコミを入れる]

きた [メンテ長いですねぇ]

むとぽん [マシントラブルですかね...。なんかちょっと不安になってきました(-o-;)。]


September 24, 2003 [長年日記]

[Misc] SF.jp

午前中に復旧した模様。心配していたデータも特に問題ないようだ。ほっ。


September 26, 2003 [長年日記]

[Ruby] ObjectPool

Ian A. Marsmanという人が、使ったよー、というメールをくれた。

DBのコネクションプール用に使っている模様。2001/12/30にリリースして、2年掛けでユーザ登場(^^;)。

で、ちとコードを読み直してみたんだけど、これ、クラスじゃなくてモジュールの方が良いかなぁ。2年ぶりに手を入れるべきか...。

[Ruby] 2つの文字列の先頭から等しい文字列を抜き出す

例えば、abcとabcdefという2つの文字列があったら、abcを返す。マッチしなかったら空文字を返す。

  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("あいう", "あいうえ")   #=> "あいう"

なんか、もちっとエレガントな書き方ないかな。ひょっとして正規表現一発で書けちゃったりする?

本日のツッコミ(全2件) [ツッコミを入れる]

kzys [正規表現二発でやってみました。 def match_first(a, b) if a =~ /^(#{Rege..]

さかい [def match_first(a,b) a = a.split(//) b = b.split(//) ..]


September 28, 2003 [長年日記]

[Ruby] (続) 2つの文字列の先頭から等しい文字列を抜き出す

何人かの方々がチャレンジしてくれました。どうもありがとうございます。勉強になりました。

ただ、ZnZさんに指摘されたように「match_first("abcd", "abce")」みたいな場合は"abc"を返すということでkzysさんの実装は残念ながら私が意図したものではありませんでした。表現が曖昧で申し訳ありませんでした。

ZnZさん版

さかいさん版

シンXさんのsed版

本日のツッコミ(全2件) [ツッコミを入れる]

kzys [あー、ほんとですね。 むとうさんコードについてた4つのテストで正しかったので、つい…]

むとぽん [申し訳ないですm(__)m。]


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

結果

むとう版:0.29867

ZnZさん版:0.782644

さかいさん版:0.947942

ささださん版1:0.248477

ささださん版2:0.199617

テストが適切かどうかというのはあまり自信がありませんが、少なくとも上記のテストではささださん版がダントツに速いです。

というわけでイタダキなのです。

もちろん、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:0.199225

2. andを;に変更:0.19624

3. 上記:0.192871

数回繰り返すと1の方が速くなったり2の方が速くなったりもするけど総じて3が速い感じ。微妙だけど。

あ、忘れてた。環境はruby 1.8.0 (2003-09-02) [i686-linux]だす。

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

たむら [or/and は使わない言うてたくせに〜(http://www.rubyist.net/~tamura/d/?dat..]

むとぽん [なるほど。代入時に使うと確かにハマリそうですね。]

ささだ [たむらさんの日記で and の優先順位を覚えました!]


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を使ったアプリケーションがちょこちょこ出てきている。それを紹介できるのはとてもうれしいことだ。

やっぱり、ライブラリは使ってもらってなんぼだもんねぇ。

[Misc] そういえば

今朝、オープニングトークでおぐらさんがLinuxとSCOの例の訴訟について語っていた。五分くらい。うひょー。

[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

本日のツッコミ(全9件) [ツッコミを入れる]

Before...

むとぽん [なるほど。 でも、揚げ足を取るようですが、その引用だと、MはMasaoの長さ1のinitial subwordを指し..]

kjana [情報数学用語ですかね.上の引用は有限オートマトンの本からだし. ふつうああいう書き方だと initial subwo..]

むとぽん [なるほど。 一般的な用語の使い方とはちょっと違うぞということですね。]