自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

November 03, 2003 [長年日記]

[Ruby-GNOME2] Ruby/GDK完了

ようやくRuby/GDK(Ruby/GTKに含まれるGDK部分)が終わった...。ぱちぱち。

にしても、プロジェクト初めて1年たったというのに、オレが担当してる部分は一向に終わる気配が無いなぁ。すんまそ。

ちなみに1.0リリース時にはGTK+で必要とするコアライブラリを全部カバーするつもり。

ってことはつまり、あとGLib, GTK+, Pango, GdkPixbufを全部実装しないとならない。GLibは必要そうなのだけで良いとして、他が大変だなー。Atkも実装しないとだよなぁ。

うーん、先は長い....(T_T)。

0.7.0リリースから2ヶ月が経ったのでそろそろ0.8.0をリリースしようと思う。今週末か遅くとも来週の末くらいが良いな。

#と決意表明して自分を追い込むことに(^^;)。


November 09, 2003 [長年日記]

[Misc] 音楽用CD-Rとデータ用CD-R

って何が違うんでしょうか...。

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

tanaka [音楽用メディアは価格に著作権料が含まれています。 また、音楽用のCDレコーダーがメディアを認識するための 信号も含ま..]

むとぽん [なるほど。そういうことでしたか。 情報ありがとうございました。]


November 10, 2003 [長年日記]

[Ruby] wxrbbr

有馬さんによるRBBRwxRuby版。

いよいよwxRubyも実用段階に入ったということか。Ruby-GNOME2 Projectをメンテナンスしている身としては、RubyでGUIプログラミングする人はみんなRuby-GNOME2を使ってくれればどんなに良いだろうと思ってるんだけど、Ruby界(?)としてみると他のGUI Toolkitが出て来るというのは良いことだろう。ライバル出現でオレのモチベーションもあがるかもしれんし...って今以上は無理か(-o-;)。

[Ruby] RBBRファミリー

wxrbbr以外にもいくつかあるので知ってる範囲で紹介してみる。

ap-rbbr

Apollo版。Nishio Mizuhoさん作。

CocoaRBBR.app

RubyCocoa版。ドキュメント表示部分がきれい。kimura wataruさん作。

rbbr

Ruby-GNOME版。元祖rbbr。Ruby-GNOMEパッケージに含まれる。いがらしさん作。

たぶん、これで全部だと思うんだけど、他にあります?


November 12, 2003 [長年日記]

[Ruby] Ruby-GetText-Package-0.5.2 is out!

Win32環境でバグってたとruby-listで指摘を受けたのと、なぜかでruby-talkでちょっとだけ話題になったので、急遽修正してみた。

デグって無ければ良いのだけど。

#ま、それもいつものことか(^^;)。

それにしても、0.5.1ってうっかり八兵衛もビックリのコードだった。良く気づかなかったな...。お恥ずかしい。

そういや、なぜか今日に限ってRuby/GTKのしかも例のsetlocaleの件が話題になってる。なんか、オレ的に今日はl10nな日なのかも。ってかオレバグ(^^;)。

#Ruby/GTKも直した方が良いのかなぁ。ってもうあまり触りたくないんだけど...。

[Ruby] rb_assoc_new

なかださん: rb_ary_new3(2,x,y)よりもrb_assoc_new(x,y)のほうがいいかも。

なるほど。Ruby-GNOME2なんかでも前者使っちゃってるから今後直していこう。


November 16, 2003 [長年日記]

[Ruby-GNOME2] Ruby-GNOME2-0.8.0

リリースしました。今回のはすごいです(って実装したのはさかいさんなんですが)。とうとうRubyからGObjectを定義することができるようになりました。ってこれだけだと使う側はイマイチぴんと来ないかもしれませんが、要は独自のシグナル・プロパティを実装することができるようになりました。

これですっきりとしたイベントドリブン型のコードが書けるようになるでしょう。

是非お試しください。

Ruby/GDKも一段落したし0.8.0はなんか節目のリリースのような感じ。Ruby-GNOME2-0.1-pre1を出してから1年(と2日)が経つんだなぁ。継続は力なりと言うけど良く1年続いたもんだ。


November 17, 2003 [長年日記]

[Ruby-GNOME2] さっそくバグレポート

ってか、コンパイルエラーが3件。しくしく。

なるべく早いうちに0.8.1出しますんで他にもバグあったらレポートしてください。

GTK+-2.0の環境つぶしちゃったんだけど、また、どっかに用意しないとなー。

あー、はやくGTK+-2.0.xとRuby-1.6.x捨ててー。ってかライブラリありすぎ(T_T)。

[Ruby-GNOME2] ke-gtk2.rb

Gnome::Canvasを使ってみるテストとしてke.javaの移植をしたke-tk.rbを移植してみた。

#!/usr/bin/env ruby
# http://www.meigaku.ac.jp/~watayan/prog/java/nanisource.html
# の「何もしない Java applet に毛のはえたやつ」をRuby/Tkに移植したもの
# http://znz.s1.xrea.com/t/?date=20031114#p01
# をRuby/GnomeCanvas2に移植したもの
    
require 'gnomecanvas2'
                                                                                                               
Gtk.init
                                                                                                               
c = Gnome::Canvas.new(true)
c.set_size_request(200, 200)
c.set_scroll_region(0, 0, 200, 200)
                                                                                                               
maxx, maxy = c.width, c.height
num = (ARGV.shift || 100).to_i
interval = (ARGV.shift || 0.5).to_f
                                                                                                                
num.times do
  Thread.start do
    x, y = rand(maxx), rand(maxy)
    while true
      dx = ((rand * 4.0 - 2.0) * 2).to_i
      dy = ((rand * 4.0 - 2.0) * 2).to_i
      dx = 0 if x + dx < 0 || x + dx > maxx
      dy = 0 if y + dy < 0 || y + dy > maxy
      Gnome::CanvasLine.new(c.root,
                            :points => [[x,y],[x+dx, y+dy]],
                            :fill_color => 'black',
                            :width_pixels => 1)
      x += dx
      y += dy
      sleep interval
    end
  end
end
Gtk::Window.new.add(c).show_all
                                                                                                                
Gtk.main

わざとそのままThreadを使ってみたけど大丈夫のようだな。環境によっては再描画されないかも。

[Ruby-GNOME2] Ruby/GTK TreeView Tutorial

by Matthew Berg。まだ読んでないんですが複雑なGtk::TreeViewウィジェットの解説というだけあって期待大です。

元ネタのGTK+版を忠実に書き直したものではなく、Ruby版での使いやすさ・簡単さが表現されていると良いなー。

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

なかだ [ウィンドウを閉じたときに終了せずに止まってしまいました。> ke Ctrl-C押したらSEGV。 #8 <sig..]

なかだ [書き忘れ。 (gdb) up 14 #14 0x400c85a4 in rbgobj_free (holder=0..]


November 18, 2003 [長年日記]

[Ruby-GNOME2] ke_gtk2.rbのバグ

終了処理は入れてないのでウインドウを閉じたときに終了せずに止まってしまうのは問題ないです。SEGVはこちらの環境では起きないです....。

と、ふと、ZnZさんのところの話を読んで、しばらく放置してからウインドウを閉じてCtrl+Cをしてみたら、以下のようなメッセージが。

(ke_gtk2.rb:3833): GnomeCanvas-CRITICAL **: file gnome-canvas.c: line 3721 (gnome_canvas_request_redraw): assertion `GNOME_IS_CANVAS (canvas)' failed
  
(ke_gtk2.rb:3833): GnomeCanvas-CRITICAL **: file gnome-canvas.c: line 3721 (gnome_canvas_request_redraw): assertion `GNOME_IS_CANVAS (canvas)' failed

こりゃいかん。やっぱりスレッドの中でWidget生成するのはまずいのかな....。うーむ。

ちなみに、なかださん、gdbの結果ってどうやって出すんでしょうか?

リリース版ではg_threadの関係でgdbを使えないなーって思ってたのですがひょっとしてg_thread使ってても使えるのでしょうか?

#ひょっとしてCVS版使ってるのかな。

[Ruby-GNOME2] Spam対策

こちらもZnZさん。指摘されたとおりにRuby-GNOME2 ML管理画面から

Restrict posting privilege to list members? (member_posting_only)

という項目があったのでとりあえずYesにしてみた。これで良いのかな?

ひとまず、enのみ対応。うまく動くようならjaも対応しよう。

[Ruby-GNOME2] Ruby-GNOME2-0.8.0のアナウンス on FootNotes

にしてもどうしてRuby関連のアナウンスがあると"Why Ruby?"というコメントがつくのだろう...。

どうせその後、"I love ruby because ..."につながるのはわかりきったことなので、醒めた目で見ると最初のPostも含めてRuby好きの茶番に見えてしまう。

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

なかだ [CVS版です。]

むとぽん [たぶん、g_thread_init呼んでるところがコメントアウトされてるバージョンを使われてたかと思います。 なので..]


November 24, 2003 [長年日記]

[Ruby-GNOME2] Ruby-GNOME2-0.8.1

リリースした。今回は0.8.0でGTK+-2.0.xな環境でコンパイルできなかった問題とかの修正版。

といっても、Gtk::TreeView周りでGTK+-2.2.x系のメソッドが追加されてたり何点かバグも修正されているので、できるだけバージョンアップしてください。


November 27, 2003 [長年日記]

[Misc] 某開発会社

サーバのスペックが低いんじゃボケーッ!ただでもっといいマシン持ってこーいっ!

とクライアント(アプリを開発してるのは別の会社)に言われたのですが、そんなわけないだろうと、こちらもその上に載っているアプリ(Weblogic + Oracle上で動くWWWアプリ)を調べさせてもらいました。

そしたら、なんと、1つのHTML(表)を生成するためにDBに(計算上)6,000 + 12,000 + 12,000回のアクセスしている画面がありました....。若干複雑な画面ではあるのですがなぜそこまで...。

WHERE句とかの存在を知らないんじゃないかとマジで疑ってしまいました。

よくよく聞くとそのうち12,000回のアクセスは不要だそうです...。え?

この画面ではないのですがソースも少し読みました。SQLは何かのツールで自動生成したらしくA4で1ページ以上あったりしてホントに必要な条件だけなの?と疑問に思ってしまいます。もちろん、IS NULLとかの遅くなりげな構文とかをふんだんに使っています。

ループで毎回DBに問い合わせをしているのはもちろんですが、StringBufferも知らないみたいです。惜しげもなくループの中でStringを使いまくりです。おかげで一時的とはいえ大量なメモリがおもしろいように消費されていきます。

PreparedStatementなんて論外です。そんなの彼らにはムズカシ過ぎです。

SQLの動的部分はもちろん文字列結合です。HTMLだけじゃないんです。文字列のエスケープだってループの中でやっちゃいます。6,000件の中から必要なキーを取得して次のSQLを生成しているのでそれもやむを得ません。

負荷試験と称し、20同時アクセスさせたらDBサーバが死にました。といってもクラスタが切り替わっただけなのですが、それもこれもDBのCPU使用率がしばらく100%に張り付いた状態になり、その結果、ヘルスチェック機能がレスポンス無しと判断しクラスタを切り替えたのです。DBサーバとしては正常動作です。でもクライアントはそれをDBサーバの所為にするんです。

#もちろんサーバのスペックをあげれば症状は減るかもしれませんが...。

そんなわけで、我々はこの開発会社の作るアプリをDBへのDDOSアプリと名付けることにしました。でも、フロントエンドのサーバもかなりの高負荷になるのでトロイの木馬とした方が良いかもしれません。実際トロイし<オヤヂギャグ。試験したのが深夜(サービスインしたサーバ上)なのでそんなオヤヂギャグでも大盛り上がりです。

とりあえず、Stringで結合しているものをStringBufferに置き換えただけで数分の一の処理時間になりました。実際に置き換えたモノで実演したところ、さすがのクライアントも納得していただけたようです。

たぶん、12,000件の余分なDBアクセスを除けばもっと早くなると思います。

あ、ちなみに私はエンジニアではないので、上記解析およびレポートは弊社のエンジニア数名に対応してもらいました。あるエンジニアはソースを見た瞬間に頭痛がしたそうです。温厚な彼が言うのですから、私が見たらキレてるに違いありません。

もちろん、メモリ・CPU使用率・ソースコードの解析結果・改善点の指摘等の詳細なレポート付きです .... ここまでやって無料。うがーっ!!!

そんなわけで感想

最近のMS Windowsサーバってある意味スゴイね。よく頑張った。UNIXだったらもう少しがんばったかもしれないけど、そこまでするアプリでもないしね。

それにしてもアプリベンダもハードのスペックやOSの所為にしないで少しは反省して欲しい。

StringBufferとかPreparedStatementの件はオレも昔やらかしたことがあるからあまり人のこと言えないんだけどさ。150秒かかって表示される画面なんて誰も使えんよ。

ついでに、ここまでしないと納得してくれないクライアントって...とっとと退散したい。

ちなみにここで書いた内容は若干フィクションが入ってます。と言っておきます。

次の日

別のアプリ(デーモン)でSocketExceptionが出ました。クライアントからアクセスされた後、reset by peerなんたらと出てその後の接続要求を受けつけなくなります。

アプリベンダ曰く、ソースに悪そうなところが見あたらないと言うことなのでネットワークのパケットをキャプチャして欲しい、というのです。

いろいろ言いたいことはあるのですがその部分のソースを見たわけではないのであまり疑うようなことも言えません。

そんなわけでさっそくパケットキャプチャを仕掛けました。今のところその症状は1回しか発生していないのでいつまでパケットフィルタを動かしっぱなしにするのかはわかりません。日々蓄積したデータはHDDを圧迫しないように手作業で破棄する予定です。

はー、オレは一体何をやってるんだ...。

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

なひ [次の仕事のための勉強を有料でやらせてもらっている(無料なんでしたっけ(涙]

むとぽん [あれでは勉強になりませぬ...(T_T)。]


November 29, 2003 [長年日記]

[Ruby-GNOME2] rbbr

アイコンビューアでGC絡みのSegmentation Faultが出ることに気づいた。

何が悪いのかRuby-GNOME2周りをいろいろと探してみたのだけどよくわからない。

んで、結局、起動時に読み込むライブラリをクリアしたら(gconf-editorで/apps/rbbr/のlibsという項目をクリア)、Segmentation Faultが出なくなった。

ってことはデフォルト以外で読み込んだライブラリにGC絡みの問題があるんじゃないかなぁ、と思うんだけど、とりあえずRuby-GNOME2が提供しているライブラリには問題ないし、何読み込んでたか覚えてないし、眠いからこれ以上調査するのはやーめよっと。

そういや、rbbrって対象にするライブラリを一度requireで読み込んじゃうんだけど、これが根本的にまずいんだよなぁ。

読み込んだライブラリ自体に思いっきり影響受けるし、Ruby-GNOME(1)みたいなライブラリ読み込んでもたぶんおかしくなるだろうし。

何か上手い方法ないかなぁ。対象とするライブラリをrbbrのプロセスとは別プロセスにするとかかな、やっぱり。それはそれで面倒くさそうだ。


November 30, 2003 [長年日記]

[Misc] Namazu検索停止

今日、Linuxビボ〜ろくでpstore周りのエラーが出てたのを見てちょっといやーんな気がしたのだが、何のことはないホントに容量オーバー(XREAは50MBまで)だったようだ。

テキスト主体のサイトで何がそんなに容量を食うんだろうと一度ファイルを全てローカルに落として調べてみたところ、tDiary関連のデータファイルがかなりな量を圧迫していると言うことがわかった。2002年が3.9M, 2003年が2.6M, cache/html/2002が1.2M, cache/html/2003が908K、tDiary用のNamazuデータが2.3Mでそれだけで10M程度消費している。

50Mの10Mってのはそれほど大したこと無いようにも見えるけど、他にもHikiだのなんだのがごにゃごにゃと入っているので少しでも使用量を減らしたい。

というわけで、NamazuのデータファイルとNamazu検索にしか使っていないcache/html/200[23](squeeze.rbで生成したデータ)を削除することにした。これだけで4.6M程度の節約だ。

tDiaryのデータしか増えないのであればあと2年くらいは持ちそうな計算だ。

でも、いずれ破綻するな...。何か考えねば。

[Misc] Mozilla-1.6a, MozillaFirebird-0.7

今更だけどアップデート。両方ともxft対応版。Firebirdの方は良い感じなんだけどMozillaの方は一部のウィジェットが文字化け(?)するなぁ。しばらくはFirebirdの方を使おうかな。

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

Before...

むとぽん [いやぁ、それはもったいないですよ。*.tdrも私の貴重な財産です;)。]

せざーる [はじめまして。サポートにお願いしてみるとよいそうですよ。 http://hayawakari.xrea.org/wi..]

むとぽん [はじめまして>せざーるさん 無料で容量追加ができるんですね。それはすばらしい! 情報ありがとうございました。]