minirubyによる bcc32/mkexports.rbの実行中に sortの部分で Segmentation faultを起こす。
sortをとばして続行。
make testで sample/test.rbを実行すると Array#sortで Segmentation fault。必ず止まる。この部分でだけ止まる。sort!ではなく sortで起きるのでコレではないみたいだし。う〜む。
Array#sortって dupして sort!してるだけじゃないの?
まっさらなWindowsにするのが一番の解決法だとは思いますが(-_-;)
miniruby (ruby 1.8.3 (2005-05-12) [i386-bccwin32]) で実験してみたら
[1,2,3].sort!
は問題なし。
1], [2], [3.sort!;
では Segmentation fault
1], [2], [3.sort!{|a,b| a<=>b };
は問題なし。
array.cの sort_2で何かが起こっている。
変更点は
# user_css2.rb: $Revision3% lastupdate:2005-05-10 # # Append CSS fragment via Preferences Page. # add_header_proc do [@conf["user_css2..css"], @conf["user_css2.#{@conf.theme}.css"]].map{|css| next unless(css); <<-STYLE <style type="text/css"><!-- #{css.gsub(/\x0d\x0a|\x0a|\x0d/, "\n\t\t")} --></style> STYLE }.join(''); end unless @resource_loaded then def user_css2_label 'テーマの微調整' end def user_css2_desc <<-HTML <h3>CSS断片</h3> <p>下から選んだテーマに、スタイルシートを追加設定する場合、以下にCSSの断片を入力してください。</p> HTML end def user_css2_buttonlabel1 'このテーマを修正する' end def user_css2_buttonlabel2 'CSSファイルを開く' end end if(!@conf_theme_list && @mode =~ /^(conf|saveconf)$/ && @cgi.params['conf'][0] == 'user_css2') # plugin/00default.rb からのコピー @conf_theme_list = [] Dir::glob( "#{::TDiary::PATH}/theme/*" ).sort.each do |dir| theme = dir.sub( %r[.*/theme/], '') next unless FileTest::file?( "#{dir}/#{theme}.css".untaint ) name = theme.split( /_/ ).collect{|s| s.capitalize}.join( ' ' ) @conf_theme_list << [theme,name] end end add_conf_proc( 'user_css2', user_css2_label ) do if @mode == 'saveconf' then if(@cgi.params['user_css2.css'].empty? || @cgi.params['user_css2.css'][0].empty?) @conf.delete("user_css2.#{@cgi.params['user_css2.theme'][0]}.css"); else @conf["user_css2.#{@cgi.params['user_css2.theme'][0]}.css"] = @cgi.params['user_css2.css'][0]; end end theme = (@cgi.params['user_css2.theme'][0] or @conf.theme); theme_hash = Hash[* @conf.options.map{|thm,css| (thm =~ /^user_css2\.(.+)\.css$/) ? [$1, $1.split(/_/).collect{|s| s.capitalize}.join(' ')+' (deleted)'] : nil}.compact.flatten ].update( Hash[* @conf_theme_list.flatten] ); theme_hash[''] = '* All Theme *'; theme_url = theme_url(); theme_url += '/' if(theme_url[-1] != ?/); <<-HTML #{user_css2_desc} <select name="user_css2.theme"> #{theme_hash.keys.sort.map{|t| %(<option value="#{CGI::escapeHTML(t)}"#{' selected' if t == theme}>#{CGI::escapeHTML(theme_hash[t])}</option>)}.join} </select> <input type="submit" value="#{user_css2_buttonlabel1}"> <input type="button" value="#{user_css2_buttonlabel2}" onclick="window.open('#{theme_url}'+this.form['user_css2.theme'].value+'/'+this.form['user_css2.theme'].value+'.css')" > <p><textarea name="user_css2.css" cols="70" rows="15">#{CGI::escapeHTML( @conf["user_css2.#{theme}.css"].to_s )}</textarea></p> HTML end
Amazon Webサービスを使ってキャッシュをXMLで保存する以外は amazon.rbと大体*一緒。ひとつだけ新しいメソッド追加。
5に意味は無くて、2とか3は既にありそうだな〜ってことで。
キャッシュが効いてなかったり、nilに対して存在しない呼び出しをしてたり、AssociateIDを一か所埋め込んでなかったり、widthとheightを間違えてたり、amazon.rbのisbn()を呼び出してたりしたのを修正。多分 amazon.rbなしでも動くんじゃないかな (この日記では両方オンにして二種類キャッシュしてXMLの方だけ使って表示してる)。
ruby-amazon(RAA)なんてあるんな。知らんかった。標準添付じゃないから使わなくてもいいかな。
* では何が違うかっていうとバグが潜んでそうなところが違う。
三巻の内容を端的に伝える言葉を抜き出すとコレ↓
自分を洗ってくれた女の子の顔面に ぶっかけ
(一部意図的に省略)
純情少年セドリック(十四歳・童貞)があわあわしてるうちに脱がされて風呂に入れられて双子の姉妹(十五歳)にいいように弄ばれるお話です。(本当)
相変わらずのラブラブっぷり。本の中には二人のしあわせ空間がコレデモカって詰まっとるとですよ。おかげでマンガ読んでニヤけてるヘンな人にならないように、勝手に緩んでくる頬を引き締めるのが大変。
引用ってのは改行も空白も含めてそのまま写したいから、全てのテーマに
blockquote { white-space: pre; }
を適用した上で、wiki_parser.rbの
when /^""\s*(.*)/ # block quote
を
when /^""(.*)/ # block quote
に変更。IE6.0の互換モードでは white-space:preが効かないらしいが tDiaryは HTML4.01Strictな HTMLを吐くので互換モードにはならず問題なし。
結局は改行を挿入する方法が欲しかったわけだけど、今日、やっと、その方法がわかった。Wikiスタイルの書き方の、
「
」(2つの二重引用符)で始まる行は、引用(<blockquote>扱い)となる。文中の改行は、通常段落の行頭に「」を付けたものとして扱う。
と書いてある意味が今になってわかりました。行頭の「""」を取り除いた部分を通常の段落と同じように扱うという意味なのね。
""段落1:単一の改行は無 ""視されます。 "" ""段落2:空改行は段落の区切りになります。
↓
段落1:単一の改行は無 視されます。
段落2:空改行は段落の区切りになります。
squeeze.rb を index.rbと同じフォルダにコピーした後、CGIとしてsqueeze.rbを実行すると Internal Server Errorになる。
原因は tdiary.confを一行ずつ読み込んで @option のある行だけを eval() してることにある。
tdiary.conf.sample には
@options['bot'] = [
'^(Naverbot|Cowbot)-', '^BlogLines/', '^blogmap', '^FAST-WebCrawler/', '^Hatena Antenna/', 'MI[CK]AN/', '^msnbot/', '^NG/', '^Openbot/', '^samidare', '^TAMATEBAKO/', '^TomSoftAntenna']
ってのがあって、一行目だけではRubyスクリプトとしては不完全なので eval()したときに Syntax Errorがでる。そしてエラーはキャッチされずにそのまま Internal Server Error へとつながる。
普通に使ってるだけでエラーが出るようになってるってわけだ。どうして TDiary::Configを使わないのだろう。
タブブラウズだとか(標準の)IEにできないことができることよりも、IEでできることが(気付いた限りでは)全てできるということを評価したい。
以前 Mozillaを使ってみたものの乗り換えなかったのは些細な事、
といったこと。Sleipnirの様なIEコンポーネントを使ったカスタムブラウザではなくMSIEを使ってるような人間には何ができるかより何ができなくなるかの方がより重要だったりする。
FirefoxはIEと同じく単なるWebブラウザだからシンプルだし軽快に動作する。UIも異質なものでなくJAVAアプリよりよっぽどWindowsしてる(ツールバーを好きに移動できないのだけが違う)。ブックマークもフォルダのドラッグはできないもののそれ以外は直接ドラッグして並べ替えられる。ブックマークをサイドバーに読み込むオプションがあるおかげでIEのように特別なことをしなくても「Bookまーく」をサイドバー内に常に開いておくこともできる。Googleツールバーに相当するFirefoxの拡張機能も第三者の手で公開されてる。
大して重要ではないもののDOMインスペクタとJavaScriptコンソールはあって困るものではないし、EUC-JPが読めないメモ帳でHTMLソースを開かれて困ることもない。
IE7がどうなるか気になるものの、IE6.0対Firefoxでは IE6.0+αであるFirefoxの勝ち。
古い日記を見てみたら驚くほど今と同じことが書かれてた(^_^A