Ruby言語やLinuxのネタが多いです。
March 02, 2003 [おもひで]
■ [Ruby] オブジェクトのコピー
久しぶりにハマったのでメモしておこう。
1: h = Hash["test", "a"] 2: ret = h["test"] 3: ret << "b" 4: p ret #=> "ab" 5: 6: p h["test"] #=> "ab"
オレが期待していたのは、6行で"a"が返ってくることだったんだけど、上に書いてあるとおり、実際は"ab"が返る。
これは2行目のretが指しているのがh["test"]のポインタそのもので、3行目でh["test"]の値自身にconcat(<<)しちゃうから、結果として、6では"ab"になるということだ。
回避策としては以下の2つかな。
- 2行目でret = h["test"].clone(or dup)としてretにはh["test"]内のデータのコピーを作ってそれを使う
- 3行目で破壊的なメソッド(concat)ではなくコピーを作るメソッド(+=)を使う
上記例だと簡単に問題箇所がわかるけど、ちょっと複雑なコードで1度Hashから取り出した情報を(コピーするの忘れて)使い回し続けるとハマりそう、ってかそれでハマったんだけどね〜。
#そういうのオレだけ?(^^;)
■ [Ruby] 八声のフーガ, Simon Cozens
ruby-talkでSimon Cozensって人を見るたびにサイモン&ガーファンクルと昔1曲だけ有名になった(2曲目もか?)カズンズっていう二人組のミュージシャンを密かに思い出しては含み笑いをしてしまうのだが(恐い)、なかなかおもしろいことを書いていた。
議論好きの英語圏の人はああいう話が好きなのかと思ってたのだけど、うんざりしている人もいるのね〜。
っていうかそれを小粋に訳す方(SugHimsiさん?)もさすがだ。
ちと話は変わるんだけど、最近ますます英語のドキュメント不足を嘆く声が挙がってきてる割には自分で訳そう(あるいは1から作ろう)って人がそれほど多くない気がする。まぁ、日本語読めなきゃできないっつーのもわかるんだけどさ。
#これを機会に日本語話せる人が増えたらおもしろいんだけどなぁ。
March 03, 2003 [おもひで]
■ [tDiary] アンカー自動生成プラグイン-1.3.0
プラグインのa.rbのみ最新版をtDiaryのCVSにあげました。設定CGI等も順次最新版にしていきますが、現状のモノでもそのまま使えます(表示例を変更するくらい)。 ドキュメントは明日以降に書こうと思います。これから試してみようかなぁと思っている人はドキュメントその他が揃うまで待ってください。
#1.5.x系向けのみです。
■ 先走って使いたい方に
今まで使っていた方はそのままの使い方でも大丈夫です。 変わっていないところは上記アンカの説明を読んでいただくとして、変更点は<%= a "表示文字列|keyword:option" %>といった形式をサポートしたことです。keyword以外は省略可能です。
#今までの形式もそのまま使用可能です。
(例) a.datの内容(こちらも今までのがそのまま使用可能です) mutoh http://ponx.s5.xrea.com/bibo/ users http://tdiary-users.sourceforge.jp/cgi-bin/wiki.cgi? tDiary-users Project euc ※keyword url デフォルト表示文字列 文字コード ※デフォルト表示文字列、文字コードは省略可能(defaultはeuc) ※文字コードがeuc(あるいはascii)以外の場合は明示的に指定する(sjis,jisが指定可能)。
(記述方法) <%= a "Linuxビボ〜ろく|mutoh:20020303.html#p01" %> <%= a "Linuxビボ〜ろく|mutoh" %> <%= a "mutoh" %> <%= a "mutoh:20020303.html#p01" %> <%= a "tDiary-usersのスタイルのページ|users:スタイル" %>
他に、myの代わりにもなるようにしてみました。といっても内部的にmyを呼ぶだけですが。
#私がよく間違えるんで一緒にしちゃいました。
<%= a "この日の日記|20020303#p01" %>
■ [tDiary] Wikiスタイルのリンク機能で使えるようにするパッチ
Wikiスタイルの
[[tDiary-usersのスタイルのページ|users:スタイル]]
形式でこのプラグインが使えるようになるパッチ。
--- ../misc/style/wiki/wiki_style.rb 2003-02-27 02:13:21.000000000 +0900
+++ wiki_style.rb 2003-03-04 01:25:17.000000000 +0900
@@ -153,18 +153,7 @@
s = CGI::escapeHTML( s ) unless stat == :GS
case stat
when :KS
- if /\|/ =~ s
- k, u = s.split( '|', 2 )
- if /^(\d{4}|\d{6}|\d{8})[^\d]*?#?([pc]\d\d)?$/ =~ u then
- r << "%=my '" << $1
- r << $2 if $2
- r << "', '" << k << "'%"
- else
- r << %Q[a href="#{u}">#{k}</a]
- end
- else
- r << "%=kw '" << s << "'%"
- end
+ r << "%=a '" << s << "'%"
when :XS
case s
when /^mailto:/
@@ -289,18 +278,7 @@
s = CGI::escapeHTML( s ) unless stat == :GS
case stat
when :KS
- if /\|/ =~ s
- k, u = s.split( '|', 2 )
- if /^(\d{4}|\d{6}|\d{8})[^\d]*?#?([pc]\d\d)?$/ =~ u then
- r << "%=my '" << $1
- r << $2 if $2
- r << "', '" << k << "'%"
- else
- r << %Q[A HREF="#{u}">#{k}</A]
- end
- else
- r << "%=kw '" << s << "'%"
- end
+ r << "%=a '" << s << "'%"
when :XS
r << s << '">' << s.sub( /^mailto:/, '' )
else
■ [tDiary] Wikiスタイル
Wikiスタイルで
[[ ... ]]
のカッコをエスケープするのってできないのかな。 なんか、ちと制限多いな、Wikiスタイル。tDiaryスタイルに戻そうかな...。
■ [Ruby] はまりそうなら破壊的メソッドを普段から使わない
いや、ごもっともです。破壊的メソッドの方が高速だろうというのが頭にあるのでつい使っちゃうんですよねぇ、別に高速にする必要がなくても(^^;)。以後気をつけますです。
#ちと、リンクの確認もかねちゃってたりします。うん良い感じだ(^^;)。
■ [tDiary] カレンダーの表示がおかしい件
@data_path/2002/になぜか200301.td2が紛れ込んでた。たぶん、ftpでuploadする際に間違えたんだろう。削除したら直った。
#こちらはmyの代わり。うん、これも良い感じだ。
March 04, 2003 [おもひで]
■ [tDiary] アンカー自動生成プラグイン-1.3.1
バグありだったのでちょっと修正してCVSにアップロードしました。ドキュメントも書きましたので、是非、試してみてください。
March 07, 2003 [おもひで]
■ [tDiary] アンカー自動生成プラグイン-1.3.2
またしてもバグがあったので修正版です。いやぁ、相変わらずの品質水準の低さ、申し訳ないです(^^;)。
■ [Ruby-GNOME2] Ruby-GNOME2 MS Windows版 by さかいさん
スゲーぜ!とうとうRuby-GNOME2もMS Windows環境で使えるようになりました!
#ただLinux版なんかに比べるとまだ不安定かも。
March 08, 2003 [おもひで]
■ [tDiary] 本日のリンク元もうちょっとだけ強化プラグイン by zundaさん
本日のリンク元表示プラグインと違うのは、カテゴリとしてアンテナを分割しているところ。かつ、分類方法は自分で指定するのではなく、あくまでも文字列パターンから抜き出しているところが賢い(その代わり、検索エンジン別表示にはなっていないが、これはそちらの形式の方がスッキリすると感じる人も多いだろう)。それに、tDiary標準のリンク元置換リストをそのまま使えるのも良い。
各行毎の合計はないが、x2のような表示形式は本日のリンク元表示プラグインと同様になってる。 オレ的には一番苦労したのが「どうやって表示するか」という部分(特に上記のx2形式)なのでそれが採用されているのはうれしい。
オレが本日のリンク元表示プラグインを作った目的の大きな1つが「どこ(物理的に同じURLである必要はない)から何件アクセスされているのかが知りたい」ということなので、これで、「全く関係のない2つ以上のURLを同タイトルの元にグループ化して1行に表示する機能」が実現できれば乗り換えるんだけどなぁ(おぃ)。
いずれにせよ、なんとなく本日のリンク元表示プラグインの次への方向性が見えてきた気がする。
■ [Misc] GTK+ on Win32
たむらさん情報(in Ruby-GNOME2 ML)。なるほど結構あるのね。
- さかいさん版 - 2.2.1
- tml版 - 2.2.1
- Dropline Systems - 2.2.1
- The Dev-C++ Resource Site - 2.0.0
- GTK+, Glade, LibGlade etc. for Window - 1.3
オレ的にはRuby/GTK2が使えるさかいさん版がおすすめ(^^;)。
March 12, 2003 [おもひで]
■ [Hiki] Hiki英語化?
詳しくはまだ書かないけど、なぜかHiki-0.4のテンプレート・メッセージをナンチャッテ英語化したのが手元にあります。
ニーズがありそうなので、とりあえずここに置いときます。
これを展開して、hikiconf.rbの$langにenを指定すればOK。
興味がある方はどうぞ。
おっと、忘れてましたがTextFormattingRulesはわけがあって訳してません。
■ [Hiki] オットビックリ英語化中にふと思ったこと
- template配下の文字列は全てmessages/[lang].rbに追い出せば、template自体は一切手を入れずに済むんじゃないかなぁ。(でも、templateのHTMLに直書きされてる言葉でmessages/ja.rbにあるものもあるので実は評価する順番で参照できない?)
- template配下は全てがHTMLとして完結してる。これはこれで良いのだけど、header.html, navigater.html, footer.htmlは分割・共通化できそうだし、共通化してあればいじる部分少なくてすむのになぁ。
いや、ふと思っただけなんですが。
March 14, 2003 [おもひで]
■ [Ruby] まつもとゆきひろ 答える
すでにみなさんがリンクしてるので今更なんだけど。まつもとさんは文章も巧いなぁ。
「初心者はいつまでも初心者ではなく、いつまでもその立場に甘んじているべきでもない」という理由で初心者に媚びることを拒否します。
自転車屋に行けば自転車にまだ乗れない人のために補助輪の付いた自転車を買うこともできますが、万人にそれが必要なわけではありません。私が乗りたいのは軽快に走れる自転車で、初心者に優しい補助輪付き自転車ではないからです。
オレは自分で「初心者なんで」と言い続ける人間に多少なりともうんざりした経験がある(というか進行形か?)のでここんとこに特にビビっと来てしまった。
そうなんだよ。補助輪つけたままじゃいかんのだよ。ころんでもいいから補助輪外す努力しようよ。そしたら一緒にサイクリングでも何でもついて行くから。
March 17, 2003 [おもひで]
■ [Ruby-GNOME2] 新Ruby-GNOME2 Project Websiteテスト稼働
すでにRuby-GNOME2 MLや一部サイトで存在を知っている方もいるかと思いますが、Ruby-GNOME2 ProjectサイトをWikiベースで再構築しました。 順次、SF.netから移行していきます。
Rubyで一番オンラインドキュメントが揃った拡張ライブラリを目指してがんばります。
というわけで、まずはAPIドキュメント(英語版)から手をつけ始めてますが、APIドキュメントの日本語化やTips集など、いろいろやりたいことてんこ盛りなので協力者大募集です。興味のある方は是非、ご一報を。
■ [Ruby-GNOME2] Hiki/RD+
今回、新Ruby-GNOME2 Project Websiteを立ち上げるに当たって考えたのが、Wiki(クローン)の採用でした。
Wikiであれば、自分でHTMLを書くことなく統一的なWebsiteを構築できますし共同作業に向いています。
そこで、いろいろとWikiの実装を検討してみることにしました。
ポイントをまとめると以下のようになります。
- RDで記述可能
- 常駐プロセスは使えない
- これはSF.jpで使うためです(一定時間経過するとkillされてしまう)。実は、一時期、たむらさんがRWikiを構築しようとがんばってくれていたのですが、結局断念せざるを得ませんでした。
そういうわけで、最終的に残ったのが、たけうちさんのHikiをRD対応にする案と、岩月さんのWikiもどきを改造する案です。
操作性等に関しては私にとってはどちらも必要十分でした。
次に、改造範囲を考えてみました。
- Hiki - パーサおよびHTML表示部分をRDToolのライブラリに書き換え&改造
- Wikiもどき - PStore部分をテキストフォーマットのものに書き直し。RD表示部分も改造。
実は、Ruby-GNOME2 Project Websiteでは、純粋なRDではなく、クラスやモジュール・メソッドを効果的にリンクできるような独自の仕掛けを考えていたので、いずれにしろHTML表示部分(どちらもRD::RD2HTMLVisitorのサブクラス)は改造が必要でした。WikiもどきはさらにPStore部分を改造する必要がありました。
#実は、PStoreのままWikiもどきを採用することも考えたのですが、いろいろPStoreには苦しめられてきたのでその案は不採用としました。
というわけで、改造範囲がWikiもどきに比べて少なくなりそうだということで最終的にHikiを選ばさせていただきました。
結果として、これだけの短期間(正味5日くらい、うち、3日はCSSの調整だったという(^^;))で、私の目的を達成できたのはちと予想外の出来でした。これもひとえにHikiのおかげです。
March 18, 2003 [おもひで]
[[Hiki+]] [[Hi+ki]]
■ どうも、同じ文字列に対し、CGI::unescapeを2度呼び出しちゃってる場所があるっぽい。で、+が半角スペースに変換されてるような感じ。
command.rbのinitializeで
@p = @p.unescape.to_euc if @p
としているところかな。
■ [Hiki] SF.jpでHiki
ruby, strscanはすでに入っているので、後はamritaとHiki本体を入れるだけで動きます。
ちなみに、SF.jpはraccとかも入っているのでrdtool入れるのも比較的簡単でした。
March 22, 2003 [おもひで]
■ [Ruby-GNOME2] Ruby-GNOME2-0.4.0
リリースしました。さかいさんがWin32な環境でも動くようにしてくれました。すげー。
■ にしてもリリース作業は疲れる...。もう寝よう。
March 24, 2003 [おもひで]
March 25, 2003 [おもひで]
■ [Hiki] Hiki/RD+を本体にマージ
いや、技術的には難しくはないです。html_formatter.rb, parser.rbを置き換えてそのほか2つほどクラスファイルを追加するだけになってます(あとは、テンプレートのhtmlファイルにHiki/RD+のコピーライトを入れてますがそれはいじらなくても動きます)。
したがって、html_formatter.rb, parser.rbをうまくプラッガブルにできるようにすれば切り替えは簡単にできると思います。
■ ただ、ちと問題なのが、Hikiが最初から用意しているdata/配下のファイル(TextFromattingRulesやSideMenu, FrontPage)が意図したとおり表示されないため、まともに使おうと思ったら、その辺のファイルをどうにかしないといけなくなるということです。
■ で、一番手っ取り早いのがそれらもRDで書いたファイルで上書きしちゃうことですが、それだとあんまりなので、例えば、RDだったらTextFormattingRules.rdというように拡張子でスタイルを定義して最初からdata/配下においておくようにして、かつ、常に拡張子付きでファイルを拾いに行くようにすればうまく行きそうな気が .... と考えつつ、Ruby-GNOME2では思いっきり上書きしてますが(^^;)。
■ そうそう、それから生成されるHTMLはRDToolが出力するHTMLそのままなので、tDiaryテーマとの互換が微妙にうまく行かないかもしれません。まぁ、それはおいおい直せばよいのかもしれませんが。
March 26, 2003 [おもひで]
■ [Ruby-GNOME2] Ruby-GNOME2-0.4.0 バイナリパッケージ
さかいさんのページで、Cygwin版が公開されています。GTK+はじめ、必要なライブラリは(Ruby本体以外(^^;))全てありますので、Cygwin使ってる人は一気にRuby-GNOME2環境を作ることができます。是非お試しアレ。
いがらしさんのページで、Debian版(woody, sid)が公開されています。こちらのインストール方法は後ほどRuby-GNOME2に載る予定なのでしばしお待ちを(となにげにプレッシャー(^^;))。
■ ※ここであげたのはMLで流れた情報です。他にもknuさんがFreeBSDのPortsにしてくださっていたり、その他のディストリビューションでも誰かしらがパッケージ化してくれてます。
ありがとうございます。
March 30, 2003 [おもひで]
■ [Ruby-GNOME2] Ruby-GNOME2-0.4.0 Win32バイナリパッケージ(mingw32/mswin32/msvcrt)
さかいさんがバイナリパッケージを作ってSFにあげてくれました。Win32な人は是非お試しを。
■ [Ruby-GNOME2] Ruby/GTK2版テトリス by Joao
実行しようと思ったら、2箇所ほど^Mって書いてある部分を削除する必要アリ(^^;)。
おもろいと思ったのがメソッド名の付け方。Portugueseなんだそうだ。
そうそう、彼はRuby/GTK2でIRCクライアントも作ってるらしい。
■ [tDiary] tDiary Plugin Viewer-1.0.3
ZnZさんから内容表示画面の表示不正のパッチをいただいたのでそれを適用してアップグレードしときました。
■ [Hiki] Hiki/RD+-0.1.2
公開しました。Hiki-0.4.2aへ上書きさせる感じで差分ファイルだけの公開という形にしました。興味のある方はどうぞ。
#インストール方法はREADMEを見てください。別途RDToolとかも必要です。
なお、今後はHiki本体に取り込めるかどうか竹内さんと調整していこうと思います。もし、本体に取り込まれるようになったときは、現在のデータファイル形式等の互換性がなくなるかもしれません。その辺は了解の上、お使いください。
■ ちょっと中身の説明をしますと、parser.rbでRD::RDTreeを生成し、rd2html.rbがHTML生成のVisitorとなってRD::RDTreeをHTMLに変換していきます。ここまではRDToolと同じなのですが、RD::RDTreeでは生成できない記述フォーマットの拡張部分に関するパースもVisitor側のHTML生成部分でやってしまっているという、お行儀の悪いプログラムになってます。まぁ、RDToolのパース部分自体を拡張するのが大変そうだったのと、CGI::escapeするタイミングを考えると妥協点としては妥当な部分かなと。
で、その、rd2html.rb内で行っているパースは富豪的アプローチを取っているため(gsub使いまくり)、コード自体は比較的スッキリしているのですが、速度/CPU負荷的にはちとアレかもしれません。でも、SF.jpは負荷率とかにあまり厳しく制限されていないみたいなので気にしないことにしました(^^;)。
■ それから、オリジナルHikiではできないと思うのですが、Pluginを複数行に渡って記述できるようになってます(書き方のプラグインの説明を参照)。これは、Ruby-GNOME2のステータス管理用のテーブルを簡単に生成できるようなプラグイン(status.rb)を使えるようにするためにそのようなことができるようにしました。
■ あと、a.rbというファイルがありますが、これはtDiaryのアンカー自動生成プラグインそのものです(1行たりとも変更してません(^^;))。これを使うことで、実はオリジナルHikiよりも強力な(?)外部リンク機能を実現しています(辞書ファイルはInterWikiNameをそのまま使います)。こちらも、前述のドキュメントで確認してください。
#実はここが一番アピールしたかったところだったりして(^^;)。

▲ aamine [最近は破壊的メソッドのほうが遅いこともありますよ。gsub とか。]
▲ ただただし [Wikiスタイルはいたずらに文法を複雑にしない、というのが方針です:-) 「できること」は増やしません(笑)]
▲ むとぽん [aamineさん:なるほど。盲信はいけないですねぇ、反省。 たださん:そうですねぇ。やはり、結局のところ、オレスタイ..]