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.)
■ とりあえず、Simple Text Editorは直しときました。
June 03, 2003 [おもひで]
■ [Ruby] Ruby/TKメンテナ募集
うーん、やまださんも指摘されてるけど、ホント寂しいことだ...。
研究者(じゃなくても公務員全般)が自分の仕事のために作ったツールを無料で公開し改善していくのは国益に反しているとは思えないし、税金の無駄使いにはならないと思うんだけどなぁ。
というような話がオープンソース政策についての討論会でされると良いのだけどな。
管轄が違うからダメとかなのかな。
■ それにしても新メンテナがうまく現れると良いけど...。
June 04, 2003 [おもひで]
■ [Ruby-GNOME2] Install Guide for MS Windows
Joao Pedrosaが書いてくれました。きちんと手順を踏んで書かれているので、MS Windowsで試してみようと思っている方は参考にしてみてください。
#英語ですが(^^;)。
■ ちなみにJoaoって「じょー」って発音すれば良いのかな。難しいの。
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] アンカー自動生成キーワード表示プラグイン
たださんのInterWikiNameリストアップが便利そうだったので、アンカー自動生成プラグイン向けにも作ってみた。
それから、アンカー自動生成プラグイン作成当時からの懸案だった「a.rb設定」ボタン(相当のアンカ)を編集画面に表示するようにしてみた。
これで、通常の日記表示画面から設定用ボタンを無くすことができる。
#もちろん、残すことも可能。
■ うん、なかなか便利だ。
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が大量に出るんです。
誰か本当の原因を追及してください。簡単に言えばデバッグしてください(^^;)。きっと、倉庫番よりチャレンジしがいのあるパズルゲームかもしれません(^^;)。
■ にしても、ハイスコアを保存したりコンティニューできたりすれば、立派なゲームになりそうな予感。誰かやりません?
#サンプルなのでそこまでは実装しませんでした。
■ そうそう、全面クリアされた方は是非ご報告を。って、そんな人いないか(^^;)。
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 -
June 18, 2003 [おもひで]
■ [Ruby-GNOME2] 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はユーザ単位のデーモンなので他のユーザとはチャットできないみたい。残念。
#ってか、セキュリティ上、当たり前か。
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を使っている方はバージョンアップをする必要はありません。

▲ たむら [来週になったら kitajみたく、私の言葉で訳して up していいっすか ? Rubyのバイナリも Ruby Bin..]
▲ むとぽん [おー、それは是非!]