2003年07月18日(Fri) 昨日よりはいい天気 [長年日記]
● 湿度が高いかも。
● [tDiary] お天気プラグインを設定プラグインに対応させてみました
設定画面のサンプル(そのうち消します)。実装はこれでいいのかな?
(追記) 6月中旬以前のadd_conf_procの無いtDiaryではプラグインのエラーが出て動かないかもしれません。お試しになる方は、今まで動いていたweather.rbをどこかにコピーしてからお試しください。もし動いた時はご一報いただけるとうれしいです。
(また追記)さっそく、halchanさんやkosakaさんに使っていただいています。ありがとうございます。OKを押すとInternal Server Errorが出る…以前、IRCでどなたかがxreaでtDiaryを使っていて、Rubyのbegin周辺で、「unknown node type 0」というエラーが出ていたときに、beginの後に空行を加えると直ったとおっしゃってました。もしどこでエラーが出ているかわかれば、そこら辺に空行を加えることで直るかもしれません。
(もっと追記)手元でtDiaryを1.5.4に巻き戻して、weather.rbを入れた状態で、日記の更新と設定ができることを確認しました。少なくとも1.5.4以降をお使いの方は、ブラウザで設定する機能のあるweather.rbを使っていただけます。ブラウザからの設定のためには新しいtDiaryが必要ですが。
● Creative Commons Licenseの賠償責任
バーチャルネット法律娘 真紀奈17歳さんのところから、クリエイティブ・コモンズ・ジャパンに動きがあったという記事。
残念ながら手元ではPDFの日本語が読めないのですが、Lenz教授の「著作権とCreative Commons実施権」によると、Creative Commons Licenseでは、
その著作物が自分のものであり他人の著作物を侵害しているものではないということを表明し、保証する。そして、これに違反して第三者に損害が発生した場合、賠償の責任を負うとされている
とのことです。ホント?
試しにtDiary-users Projectに適用されているライセンスを斜め読みしてみると、
- 5.a.ii: By offering the Work for public release under this License, Licensor represents and warrants that, to the best of Licensor's knowledge after reasonable inquiry: (i項を中略) The Work does not infringe the copyright, trademark, publicity rights, common law rights or any other right of any third party or constitute defamation, invasion of privacy or other tortious injury to any third party.
- 6. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, AND EXCEPT FOR DAMAGES ARISING FROM LIABILITY TO A THIRD PARTY RESULTING FROM BREACH OF THE WARRANTIES IN SECTION 5, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
と書いてありました。(強調は筆者。)
うわー。
Wikiで責任を追うのは誰になるんだろう?どこかの閉鎖してしまったblogみたいな使い方は問題外として、Wikiに書く人は5.a.iiをちゃんと理解して、自分の書き込みによって万が一生まれてしまった6項の損害賠償責任をWiki運営者に代わって持つ覚悟が必要かもしれないですね。
この日誌にもCreative Commons Licenseをつけようかと思ってたのですが、もう少し真剣に考えよう。もちろん、このライセンスが無くたって、著作権の侵害をしていいわけではないのですが。
● [Ruby][tDiary] ruby-1.8.0とruby-1.6.7とではArray.joinの返り値が違う
手元でruby-1.8.0でtDiaryを見ようと思ったら動かんではないかい。 そういうわけで昨日のベンチマークは ぜんぜん正確ではない。キャッシュ消してなかったし。
調べてみると、Array.join()の挙動が変わったことがわかりました。 emptdiary_style.rb内で拡張文字列クラスを定義して、それをjoinして、 返り値に同じ拡張文字列クラスを期待しているのですが、 実際にはStringが返ってくるようです。具体的には以下のような感じ。
この部分の対策をして、emptdiary_style.rbをcommitしました。 ruby-1.8を使おうと思ったけどemptdiaryスタイルじゃ動かんやんけー、 という方はtDiary本体を更新してください。
● [Ruby][tDiary] そういうわけでベンチマークやりなおし
テスト対象はこの日誌の7月14日分とほぼ同じデータです。 ちゃんとキャッシュを消して。
ふむ。userとsystemを合わせて1.6.7に比べて16%の増速でござる。 よかったよかった♪
● [tDiary] disp_referrer2.rbはどれくらい遅いか
上と同じように、プラグインを出し入れして調べてみました。ruby-1.8.0で、今回はキャッシュの消去はしません。
- 00default.rbのみの場合
- 1.14user 0.04system 0:01.20elapsed 97%CPU
- disp_referrer.rbを加えた場合
- 1.21user 0.06system 0:01.27elapsed 99%CPU
- disp_referrer2.rbを加えた場合
- 0.60user 0.03system 0:00.66elapsed 95%CPU
ありー?素のreferer_of_today_longより速いってのはどういうことだろ?
じゃあ、1.6.7で。
- 00default.rbのみの場合
- 1.29user 0.11system 0:01.40elapsed 99%CPU
- 30386 bytes
- disp_referrer.rbを加えた場合
- 1.50user 0.06system 0:01.56elapsed 99%CPU
- 30387 bytes
- disp_referrer2.rbを加えた場合
- 0.80user 0.11system 0:00.91elapsed 99%CPU
- 31249 bytes
おかしいなー。生成する文字数が効いてるのだろうか? 上にwc -cの結果を追加してみよう…文字数はだいたい一緒みたいだ。
とにかく、手元ではdisp_referrer2.rbは 素のreferer_of_today_longよりも激速という結果になっちゃいました…。
…おかしい。
● [tDiary] どうしてdisp_referrer2.rbは速いのか?
-rprofileした結果を整理してみました。1.8.0です。 特長的な部分だけ (プラグインの有無でcall回数が大きく違うように見えるcallだけ) 抜きだしてみます。 メソッド名の横の数字はcall回数です。
name | total ms/call | 00defaultのみ | disp_referrer.rb | disp_refrrer2.rbも |
---|---|---|---|---|
cumlative sec | - | 7.83 | 21.78 | 11.13 |
Array#each | 133.72 | 126 | 126 | 172 |
TDiary::DiaryBase.disp_referer | 78.14 | 100 | 100 | 142 |
Array#sort! | 23.33 | 0 | 0 | 6 |
Array#collect | 18.31 | 11 | 0 | 14 |
TDiary::Config#charset | 13.33 | 0 | 3 | 0 |
String#% | 3.00 | 0 | 0 | 10 |
Class#new | 1.46 | 0 | 20097 | 4804 |
String#scan | 1.25 | 0 | 0 | 24 |
CGI#escapeHTML | 1.07 | 202 | 202 | 244 |
String#gsub! | 0.76 | 0 | 200 | 284 |
CGI#unescape | 0.69 | 102 | 0 | 0 |
String#strip | 0.56 | 0 | 0 | 107 |
Array#unshift | 0.49 | 0 | 61 | 0 |
Regexp#initialize | 0.13 | 0 | 20035 | 4710 |
Regexp#=~ | 0.10 | 0 | 20033 | 4885 |
ふーむん。profileを取った時は、素のtDiaryの方が速かった模様。 disp_referrer.rbと比べると、 Class#new、Array.unshift、Regexp#initialize、また、 Regexp#=~で得をしてるようです。Class#newって何やってるんだろう? 一方、Array#each、sort!、collect、String#gsub!あたりは call当たりの時間がかかるのに、disp_referrer2.rbで多用されている。
そのうちソースを見て改善できるところは改善してみよう。
早速使っていますが、今の所は問題なしです。<br>[TrackBack from http://www.halchan.org/diary/20030718.html]
最近のツッコまれどころ