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

June 01, 2003 [長年日記]

[Ruby-GNOME2] メニューのヘルプ

今日、ruby-gnome2-enで指摘されて気づいたのだけど、最近はメニューのヘルプを右寄せしないのね。

Sets whether the menu item appears justified at the right side of a menu bar. This was traditionally done for "Help" menu items, but is now considered a bad idea. (If the widget layout is reversed for a right-to-left language like Hebrew or Arabic, right-justified-menu-items appear at the left.)

[GTK+ APIリファレンス:gtk_menu_item_set_right_justified()より引用]

とりあえず、Simple Text Editorは直しときました。


June 03, 2003 [長年日記]

[Ruby] Ruby/TKメンテナ募集

うーん、やまださんも指摘されてるけど、ホント寂しいことだ...。

研究者(じゃなくても公務員全般)が自分の仕事のために作ったツールを無料で公開し改善していくのは国益に反しているとは思えないし、税金の無駄使いにはならないと思うんだけどなぁ。

というような話がオープンソース政策についての討論会でされると良いのだけどな。

管轄が違うからダメとかなのかな。

それにしても新メンテナがうまく現れると良いけど...。


June 04, 2003 [長年日記]

[Ruby-GNOME2] Install Guide for MS Windows

Joao Pedrosaが書いてくれました。きちんと手順を踏んで書かれているので、MS Windowsで試してみようと思っている方は参考にしてみてください。

#英語ですが(^^;)。

ちなみにJoaoって「じょー」って発音すれば良いのかな。難しいの。

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

たむら [来週になったら kitajみたく、私の言葉で訳して up していいっすか ? Rubyのバイナリも Ruby Bin..]

むとぽん [おー、それは是非!]


June 05, 2003 [長年日記]

[Ruby-GNOME2] メモ

Bugs [ 744920 ] problem with tutorial treeview exampleの件。

確かに再現する。一体なぜなんだ...。

Cで似たようなこと書いたけどこの事象は発生しないし。

うーん、誰かわかる人ヘルプミー。


June 07, 2003 [長年日記]

[Ruby-GNOME2] おとといのバグの件

結局、GTK+-2.2.1のバグっぽい。GTK+-2.2.0だと再現しない。

ChangeLogを見ると、結構GTK+-2.2.0以降にGtkTreeView周りは結構手が入ってるみたいだからその辺が原因なのかな。

おととい試した環境はGTK+-2.2.0のソースに含まれるgtk-demoを改造したもので、それ自体はGTK+-2.2.0でコンパイルしたライブラリにリンクされていたので気づかなかった。

やはり、環境を揃えるのは重要だな....。

#一応、GTK+のバグトラッキングシステムに投げときました。

[tDiary] 久しぶりに

HEADにバージョンアップ。うまく動いてるかな。

[tDiary] アンカー自動生成キーワード表示プラグイン

たださんのInterWikiNameリストアップが便利そうだったので、アンカー自動生成プラグイン向けにも作ってみた。

それから、アンカー自動生成プラグイン作成当時からの懸案だった「a.rb設定」ボタン(相当のアンカ)を編集画面に表示するようにしてみた。

これで、通常の日記表示画面から設定用ボタンを無くすことができる。

#もちろん、残すことも可能。

うん、なかなか便利だ。


June 08, 2003 [長年日記]

[Ruby-GNOME2] この前のバグの件

既知のバグだったらしい。検索したつもりだったんだけどなぁ(-o-;)。


June 09, 2003 [長年日記]

[tDiary] アンカー自動生成キーワード表示プラグイン

毎回使うものでもないので、表示場所をedit_procからform_procに変更しました。これで、普段使うプレビューボタンとか登録ボタンとかの下に表示されるようになりました。

よかったら使ってみてください。

[Misc] Lightweight Language Saturday

おもしろそうだの〜。こっそり参加してみようかな。


June 11, 2003 [長年日記]

[Ruby-GNOME2] スゲーわけのわからん質問

を某所で受けた。一応回答したけど、回答もわけわからんものになってしまった気がする...。はぁ。

[Misc] Lightweight Language Saturday

ありゃ、受付終わっちゃいましたか。残念。

[Ruby] Ruby-GStreamer

ソース見たけどRuby/GLibの提供してる仕組みを使えばもっと楽に実装できるんだろうけどな...。


June 14, 2003 [長年日記]

[Ruby-GNOME2] Sokoban

いわゆるひとつのアレ、「倉庫番」をRuby/GnomeCanvas2で書いてみました。

あえて画像は使わずに、Ruby/GnomeCanvas2の機能を使って各キャラクタを表現してみたのですが、この程度ならさくっとかけてしまうRuby/GnomeCanvas2はパズルゲーム向きかもしれません。

#もちろん、画像も使うことができますけどね。

みなさんも是非Ruby/GnomeCanvas2を使ってパズルゲーム(じゃなくても良いけど)を書いてみてはいかがでしょうか。

#ちなみに300ステップちょいでできてるんですよ。ゴイスー!

ちなみに、libart_lgplは2.3.12以降を使ってください。RedHat9の2.3.11だとたまに落ちます。実はこの原因がわからず、ひたすらRuby-GNOME2の方をデバッグしてたためリリースが遅れてしまいました。

でも、実は、さらにもう一箇所、怪しげなGC.startをしてます。

なぜかこうしないと何ステージかクリアしていくとWarningが大量に出るんです。

誰か本当の原因を追及してください。簡単に言えばデバッグしてください(^^;)。きっと、倉庫番よりチャレンジしがいのあるパズルゲームかもしれません(^^;)。

にしても、ハイスコアを保存したりコンティニューできたりすれば、立派なゲームになりそうな予感。誰かやりません?

#サンプルなのでそこまでは実装しませんでした。

そうそう、全面クリアされた方は是非ご報告を。って、そんな人いないか(^^;)。

[Ruby-GNOME2] Sokoban

あーっ、行き過ぎた〜!

ってことが頻発したので一回だけUndoできる機能をつけてみました。

にしても、まだ13面。まだまだだなぁ。


June 16, 2003 [長年日記]

[Ruby-GNOME2] Sokoban

なぜかハマってしまいました。んでもって、コンティニューができないのが不満になってきたので、Ruby/GConfを使ってコンティニュー機能を付けてみました。起動すると前回の続きから始まります。

[Ruby-GNOME2] Ruby/GConf

今回初めて使ってみたのですが(^^;)、とっても便利です、これ。

Ruby/GConfって何者かというと、要はアプリケーションの設定ファイルなんかを保存・読み出ししたりするためのライブラリなのですが、データを保存・読込するだけではなく、ロックとかも勝手にやってくれるし、変更がかかるとイベントをあげたりもします。かなり高機能なくせして使う方はメチャクチャ簡単というすばらしーライブラリです。

例えば、以下のようにして使います。

require 'gconf2'
                                                                                
client = GConf::Client.new
  
#データの読込
p client["/apps/hoge/laststage"]
p client["/apps/hoge/name"]
  
#データの書込
client["/apps/hoge/laststage"] = 1
client["/apps/hoge/name"] = "Ruby-GNOME2"

この例ではわざと読込を先にやっているので1度目はnilが出力されますが、2度目に実行したときは1, Ruby-GNOME2が出力されます。

たったこれだけで永続的にデータを保存・読み出しできます。

データ自体はgconfdというデーモンが管理していて、非同期で$HOME/.gconf/apps/hoge/%gconf.xmlというファイルにXML形式で書き込まれます。

データには基本的な型しかサポートしてませんが、設定情報としてはこれで十分でしょう。

岡さんの日本語訳がとてもわかりやすいですので興味のある方はどうぞ。


June 17, 2003 [長年日記]

[Ruby-GNOME2] Sokoban

あまりの反響の無さに寂しかったのでruby-list/talkでアナウンスしてみた(^^;)。

[Ruby] ProcとBlock

うーむ、ややこしい(T_T)

  * Proc.newおよびブロック引数で与えられるProcは、引数チェッ
    クがゆるい。breakやnextが例外になる
  * lambdaおよびprocが返すProcは、引数チェックが厳しい。
    breakやnextは実行の中断
 
という説明にしましょう。
 
|・今まで、rb_f_lambda() だったものは代わりに rb_block_proc() を使うべき?
 
はい。

結局のトコロ、Ruby-GNOME2的にはrb_f_lambda()はrb_block_proc()に変えるべきなのかしらん。ちと量が多くて大変だの(T_T)。

[Ruby-GNOME2] ライセンス診断

RWikiのRuby/Tk版, nyasuさんのvruby版。せっかくなのでRuby/GTK2版を作ってみよう。

#!/usr/bin/env ruby
 
require "gtk2"
 
QTITLE = "フリーソフトウェアライセンス診断"
GONEXT = nil
 
Gtk.init
class Question < Gtk::MessageDialog
  def initialize(question, yes, no)
    super(nil, MODAL, QUESTION, BUTTONS_YES_NO, question)
    set_title(QTITLE)
    @yes, @no = yes, no
  end
  def run
    (super == RESPONSE_YES) ? @yes : @no
  end
end
 
QUESTIONS = [ 
  Question.new(
    "あなたのコードを商用ソフトウェアに組み込まれて販売されてもかまわないか?",
    GONEXT, "GPL"),
  Question.new(
    "あなたはストールマンのフリーソフトウェア運動に心から賛同しているか?",
    "GPL", GONEXT),
  Question.new(
    "あなたはそのソフトウェアを将来Rubyの一部として配布したいか?",
    "Rubyライセンス","BSDライセンスまたはMITライセンス" ),
]
 
QUESTIONS.each do |q|
  if (lic = q.run)
    dialog = Gtk::MessageDialog.new(nil, Gtk::Dialog::MODAL,
                                    Gtk::MessageDialog::INFO,
                                    Gtk::MessageDialog::BUTTONS_OK,
                                    lic + " がおすすめ")
    dialog.set_title(QTITLE + "結果").run
    exit
  end
end

QuestionクラスをGtk::MessageDialogのサブクラスにしてみた。

そうそう、Ruby/GTK2では文字列をUTF-8にしないといけないので、上記を保存した後、UTF-8に変換してから実行する必要があるのがちと面倒かな。

以下は上記のコードをjudge.rbとして保存した時の例。iconvを使ってる。

iconv -f euc-jp -t utf-8 judge.rb |ruby -

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

きた [そうそう.UTF-8にしないとダメなんですよねぇ. 実はこないだそれが分からなくて10分くらい思考錯誤してました… ..]


June 18, 2003 [長年日記]

Invalid Text

[Ruby-GNOME2] <%= a "Ruby-GNOME2 Tips|ruby-gnome2-ja:Ruby-GNOME2 Tips" %>

昨日書いたネタとかを移してみました。量で勝負(^^;)。

ところで、Ruby-GNOME2の文字コードをUTF-8にしないといけない件ですが、実は、Ruby/GLib自体がiconvを使った文字コード変換機能を持ってますのでこれを使った方が良いかも。しかもちょっと高機能。

#実は私も結構忘れちゃったりするんですが。

puts GLib.charset
                                                                                
puts GLib.convert("ほげ", "utf-8", "euc-jp")  #str, to, from
puts GLib.locale_to_utf8("ふが")
puts GLib.locale_from_utf8("utf8 string")

ちょっと高機能と言ったのは最後の2つです。現在のLocaleからUTF-8に変換してくれたり、その逆をしてくれたりします。

ま、でも、全ての文字列に対してこの変換をかますのはイマイチなので、私はUTF-8でソースを書くか、この前の例みたいにiconv使って変換させてから実行させるパターンが多いですね。

でも、ホントは日本語なんかはRuby-GetText-Package使ってそっちに追い出すべきなんだよねぇ。でも、チュートリアルには大げさすぎるか。いっそ英語のみとか....それは本末転倒か(^^;)。

#この辺もまとめてTipsに載せておこう。

[Ruby-GNOME2] gconfclock

昨日、岡さんのRuby/GConfの解説を見て、MVCの文字が。

MVCと言ったら時計でしょ!(?)というわけで、サンプルを書いてみました。

gconfd経由のプロセス間通信です。なんかおもしろいな。

実は、一瞬、チャットプログラムを作れるかも!って思ったりしたんだけど、gconfdはユーザ単位のデーモンなので他のユーザとはチャットできないみたい。残念。

#ってか、セキュリティ上、当たり前か。

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

きた [なるほど.GLibがそういう機能を持ってたんですね. 勉強になりました.]


June 19, 2003 [長年日記]

[Ruby-GNOME2] localeとMarshal

ruby-gnome2-en MLで以下のような問題がレポートされた。

$export LANG=es_ES (pl_PLとかでも良いです)
irb(main):001:0> require 'gtk2'
=> true
irb(main):002:0> a = 12.34
=> 12,34
irb(main):003:0> z = Marshal.dump(a)
=> "\004\010f\r12,34\000G\256"
irb(main):004:0> w = Marshal.load(z)
=> 12,0

12,34 が 12,0になってしまっているのだが、ruby-devで聞いたところKnown problemsなんだそうだ。

どうしようかな...。

Ruby/GTK側でsetlocale実装してMarshal使うとこだけlocaleを明示的に変えて!とか言うのが現実的なのかな...。


June 21, 2003 [長年日記]

[Ruby] setlocaleとRuby

昨日の話の続きなんだけど、Ruby-GNOME2のようなsetlocaleを内部的に呼び出すライブラリは、一部のlocaleでString#to_fもうまく動かないのね...。

require 'glib2'
p num = 12.34
p str = num.to_s
p str.to_f

結果

$ ruby test.rb
12,34
"12,34"
12,0

[Ruby-GNOME2] pygtkでは

この問題は発生しない、と指摘された。なんでだろ〜(音頭)ってpygtkのソース見たら、内部的にsetlocale(LC_NUMERIC, "C")してる。

/* set the LC_NUMERIC locale back to "C", as Python requires
 * that it be set that way. */
setlocale(LC_NUMERIC, "C");
return;

gtk/gtkmodule.cの中ね。

こんなんで良いのかな....。

[Ruby-GNOME2] とあまり考えもせず

この不具合を報告してきたJoaoがいいんじゃない?って言ってたので上記修正を適用。


June 23, 2003 [長年日記]

[Ruby-GNOME2] anonymous CVSが更新されない?

なんか最近調子悪いな、SF。anonymous loginしようとすると全然できないし、何よりViewCVSで見ると最新であるはずのgtk/Changelogが7日間も更新されていない(実際は毎日コミットしてるんだけどな....)。

どうしたんだろ。

[Ruby] ruby-1.8.0-preview3

出たのでバージョンアップ。Ruby-GNOME2で以下のメッセージでまくり...なおさんとなぁ(T_T)。

 warning: rb_f_lambda() is deprecated; use rb_block_proc() instead


June 28, 2003 [長年日記]

[Ruby-GNOME] Ruby-GNOME-0.32 released

リリースしました。5か月ぶりです(^^;)。

ruby-1.8.0preview3でWarningが出るのをフィクスしています。

要は、rb_f_lambdaの件なのですが、これ、機械的に全てrb_block_procに置き換えました。

したがって微妙に挙動が前バージョンと変わって、ブロック内でbreakとか使ってると例外があがるようになりましたのでアプリケーションによっては修正が必要かもしれません。

これからRuby-GNOMEを始める方は、ほとんど開発が止まっているRuby-GNOMEではなく、Ruby-GNOME2を使うようにしてください。


June 29, 2003 [長年日記]

[tDiary] squeeze.rb

バグレポートを頂いたので修正してCVSへあげておきました。

このバグ自体は、通常のプラグインとして使う場合は関係なく、また、レポートしていただいたおがわさんのサイトの方法で回避可能ですし、特に問題なくsqueeze.rbを使っている方はバージョンアップをする必要はありません。