Amazonで「七竈」「七竃」「桜庭 一樹」「可愛そうな大人」、いずれを検索しても『少女七竈と七人の可愛そうな大人』は見つからない。ISBNで検索してやっと見つかる。4048737007。難儀なタイトルを付けたものだ。
と、そうではなくて、近所の本屋がだらしなくて 4軒まわっても本を見つけられなかった。Gyaoでドラマが配信されてる『少女には向かない職業』はその内の 3軒で平積みだったというのに。何故に新刊を隣に並べてまとめて売ろうとしない。
Rubyist Magazine - RubyKaigi2006特別号(6月10日 午前の部)より。
Ruby オンリーのカンファレンスを Ruby ゆかりの地・日本で開催できる喜びを寿ぎ*ました。
難易度高すぎ(笑) (゜Д゜;)ハッ!俺だけ?
* 再変換(ATOKの場合、文字入力が可能な場所で選択して Shift+変換)すると正解がわかる。
/ItemLookupResponse /ItemLookupResponse/OperationRequest /ItemLookupResponse/OperationRequest/HTTPHeaders /ItemLookupResponse/OperationRequest/RequestId /ItemLookupResponse/OperationRequest/Arguments /ItemLookupResponse/OperationRequest/RequestProcessingTime /ItemLookupResponse/OperationRequest/HTTPHeaders/Header /ItemLookupResponse/OperationRequest/Arguments/Argument[1] /ItemLookupResponse/OperationRequest/Arguments/Argument[1] /ItemLookupResponse/OperationRequest/Arguments/Argument[1] /ItemLookupResponse/OperationRequest/Arguments/Argument[1] /ItemLookupResponse/OperationRequest/Arguments/Argument[1] /ItemLookupResponse/OperationRequest/Arguments/Argument[1] /ItemLookupResponse/OperationRequest/Arguments/Argument
pathが重複している。
def xpath path_elements = [] cur = self path_elements << __to_xpath_helper( self ) while cur.parent cur = cur.parent path_elements << __to_xpath_helper( cur ) end return path_elements.reverse.join( "/" ) end
pathの各要素は __to_xpath_helperで取ってきている。
def __to_xpath_helper node rv = node.expanded_name if node.parent results = node.parent.find_all {|n| n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name } if results.length > 1 idx = results.index( node ) rv << "[#{idx+1}]" end end rv end
node.expanded_nameを破壊的に変更している。("Argument" -> "Argument[1]")
D:\ruby\lib\ruby\1.8\rexml>diff -u element.rb~ element.rb --- element.rb~ 2005-08-12 21:08:47.000000000 +0900 +++ element.rb 2006-06-27 00:36:58.546875000 +0900 @@ -720,7 +720,8 @@ } if results.length > 1 idx = results.index( node ) - rv << "[#{idx+1}]" + rv += "[#{idx+1}]" end end rv
/ItemLookupResponse /ItemLookupResponse/OperationRequest /ItemLookupResponse/OperationRequest/HTTPHeaders /ItemLookupResponse/OperationRequest/RequestId /ItemLookupResponse/OperationRequest/Arguments /ItemLookupResponse/OperationRequest/RequestProcessingTime /ItemLookupResponse/OperationRequest/HTTPHeaders/Header /ItemLookupResponse/OperationRequest/Arguments/Argument[1] /ItemLookupResponse/OperationRequest/Arguments/Argument[2] /ItemLookupResponse/OperationRequest/Arguments/Argument[3] /ItemLookupResponse/OperationRequest/Arguments/Argument[4] /ItemLookupResponse/OperationRequest/Arguments/Argument[5] /ItemLookupResponse/OperationRequest/Arguments/Argument[6] /ItemLookupResponse/OperationRequest/Arguments/Argument[7]
をを、直っている。というわけで上記は ruby-1.8.4に付随する REXML 3.1.3限定の話でした。
def __to_xpath_helper node rv = node.expanded_name.clone if node.parent results = node.parent.find_all {|n| n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name } if results.length > 1 idx = results.index( node ) rv << "[#{idx+1}]" end end rv end
3.1.3 からの ChangeLog。(そのうち 3.1.4からの ChangeLogになりそう)
間に合わせにこんなのを紛れ込ませる。
if(::REXML::Version < '3.1.4') module ::REXML class Element def __to_xpath_helper node rv = node.expanded_name.clone if node.parent results = node.parent.find_all {|n| n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name } if results.length > 1 idx = results.index( node ) rv << "[#{idx+1}]" end end rv end end end end
Apacheと opensslは Windowsでも親切なのに Subversionの気難しいこと。
python gen-make.py -t vcproj --with-http=D:\apache2 --with-apr=〜 〜略〜
で書き出された subversion_vcnet.slnを VC++ 2005 Expressで開いて、mod_authz_svnと mod_dav_svnプロジェクトだけエラーを潰して*ビルドして、出来上がった Release\subversion\*\*.soを D:\apache2\modulesにコピー。
Apacheと svnモジュールの準備が整ったところで D:\apache2\bin\httpd.exeを起動しようとすると MSVCR80.dllがないとか言われる。Apacheのコンパイル時に *.exeや *.dllや *.soと一緒に作成されてた *.*.manifestを手動インストール。
httpd -k install
でサービスを登録して、D:\apache2\conf\httpd.confで
LoadModule authz_svn_module modules/mod_authz_svn.so LoadModule dav_svn_module modules/mod_dav_svn.so <Location /svn> DAV svn SVNPath "D:/svn/rep" </Location>
みたいな設定を追加してリポジトリが見えるのを確認した。
python gen-make.py -t vcproj --with-httpd=D:\apache2 --with-apr=〜 〜略〜
ここにあった気がする。apacheが用意してくれた Makefile.winとか *.makを使ってだと apr, apr-util, apr-iconvはコンパイルできるけど Subversion経由だとこれらがコンパイルできない。だから Subversionには既に出来上がってる libapr.libを使ってほしいのに、その希望を伝える方法がわからない。
--with-apr=DIR --with-apr-util=DIR --with-apr-iconv=DIR
がそれだと思うのに。
* intl3_svn.libは subversion.tigris.orgから DLできる。
みっくるんるん♪はネタとしてよくできてたけど、ハルヒが第12話の学園祭で歌った 2曲は普通にとても良かった。
今日発売のスクールランブル 13巻と、3年前の 5月発売の 1巻を比べてみる。
<ItemAttributes> <Author>小林 尽</Author> <Binding>コミック</Binding> <Creator Role="著">小林 尽</Creator> <Label>講談社</Label> <ListPrice> <Amount>410</Amount> <CurrencyCode>JPY</CurrencyCode> <FormattedPrice>¥ 410</FormattedPrice> </ListPrice> <Manufacturer>講談社</Manufacturer> <ProductGroup>Book</ProductGroup> <PublicationDate>2006-06-16</PublicationDate> <Publisher>講談社</Publisher> <Studio>講談社</Studio> <Title>School Rumble Vol.13 (13)</Title> </ItemAttributes>
<ItemAttributes> <Author>小林 尽</Author> <Binding>コミック</Binding> <Creator Role="著">小林 尽</Creator> <ListPrice> <Amount>410</Amount> <CurrencyCode>JPY</CurrencyCode> <FormattedPrice>¥ 410</FormattedPrice> </ListPrice> <NumberOfPages>161</NumberOfPages> <PackageDimensions> <Length Units="cm">18</Length> </PackageDimensions> <ProductGroup>Book</ProductGroup> <PublicationDate>2003-05-16</PublicationDate> <Publisher>講談社</Publisher> <Title>School Rumble Vol.1 (1)</Title> </ItemAttributes>
ページ数がわからなくなるのは残念だけど、アマゾンの登録するページ数って多分ページ数の書いてある最後のページのこと。だから半端になる。
大抵の本は先頭から数えた紙の枚数をページとしている。最後まで数えたらキリのいい数字になる。
スクールランブルの 13巻を見てみたら奥付に 161Pと書いてある。あれ? 半端。161Pだと巻頭のカラー2Pが含まれていて奥付が含まれていない。純粋な紙の枚数は 161-2+1=160P。OK。この場合は 160+2(カラー)=162Pということにしよう。
この要素からは「講談社」でなく「少年マガジンKC」という値を取得したい。
アマゾンのサイトを見る限り、スクールランブル 13巻には
ジャンル別 > コミック・アニメ・BL > 出版社別 > 講談社 > 少年マガジンKC
というブラウズノードが存在している。何で取得できなくなったのだろう。
ブラウズノードからはレーベルを取得したいだけなので、<Label>に期待した値を入れてくれればそれで済むし、しかも楽なんだけど〜。
月面で一体の死体が発見された。人間と同じ姿ながら、5万年前に死んでいる彼は地球人ではありえない。だが別々に進化したにしては両者は似すぎている。彼は宇宙人なのか地球人なのか。
世紀の発見に沸く地球。様々な分野の科学者集団が一つの死体にアリのように群がり、たちどころに、とはいかないけれど少しずつ、時には意見を対立させながら謎を明らかにしていく過程の興奮すること!
ところが小骨がひとつ引っ掛かっていて、チャーリー(件の死体)の手記にこうある。
「ミネルヴァはどうなったろうか。この禍いの後、果たしてわれわれの子孫はより恵まれた場所で生き延びるだろうか。もし生き延びたとしたら、彼らはわれわれが何をしたか、いくらかでも理解するだろうか。」(206ページ)
これを読んだとき「星を継ぐもの」というタイトルの意味がわかった気がしたし、実際に結末ではそういう結論だったのだけど、その事実と結論された事柄はこの手記を書き残してすぐに死んでしまったチャーリーには知り得ないことのはずなのだが。
「彼らはわれわれが何をしたか、いくらかでも理解するだろうか。」という部分から、チャーリーたちルナリアンが「より恵まれた場所で生き延びる」ために何らかの行動を起こしたのだと思っていたし、実際にルナリアンは死にゆく自分たちの星から脱出するために惑星間の移住計画を推進していたのだからチャーリーの手記に間違いはなく思える。
だが、チャーリーがこの手記を書いている状況を考えると違ってくる。 チャーリーがこれを書いているのは自分が死ぬ寸前のことであり、その原因は対立する二国間の戦争(星の危機に際して戦争!)による破壊だとしたら? チャーリーの敵国はチャーリーの居た月面の基地を破壊したが、チャーリーたちもまた自らの星に存在する敵基地を攻撃して破壊している。
移住計画実現の見通しも立たないうちに始まった、母星を小惑星帯に変え、自らを絶滅に至らしめる戦争のさなかにあっては、あまりにも希望と空想に満ちたメッセージじゃないか。
tDiary-2.1.4からは section_enter_procと section_leave_procが用意されてるので、現在 body_leave_procを使って一日毎に行ってることを、section_leave_procでセクション毎に行うだけ。
気が付いたらファイルサイズが 3.8GBを超えてるのにまだダウンロードしてる。32bit版は約 3.5GBのはずなのに。
ダウンロード済みのサイズがマイナスMBになってるし。進捗グラフがマイナス%になってる。MSのサーバーに「Range: bytes=-123456789-」みたいにマイナスから始まる変な要求を送ってる。
構わないと思うのですよ、リロードの度にプラグインを評価しなくても。
--- index.rb~ 2005-06-13 14:05:11.000000000 +0900 +++ index.rb 2006-06-11 00:52:18.203125000 +0900 @@ -60,11 +60,15 @@ body = '' head['Last-Modified'] = CGI::rfc1123_date( tdiary.last_modified ) + require 'time' + ims = ENV['HTTP_IF_MODIFIED_SINCE']; ims = ims ? Time.httpdate(ims) : Time.at(0); # ENV? + diary_changed = (tdiary.last_modified - ims) > 30; # 30? + # ETag testing code #require 'md5' #head['ETag'] = MD5::md5( body ) - if /HEAD/i !~ @cgi.request_method then + if /HEAD/i !~ @cgi.request_method and diary_changed then if @cgi.mobile_agent? then body = conf.to_mobile( tdiary.eval_rhtml( 'i.' ) ) head['charset'] = conf.mobile_encoding @@ -73,15 +77,15 @@ body = tdiary.eval_rhtml head['charset'] = conf.encoding head['Content-Length'] = body.size.to_s - head['Pragma'] = 'no-cache' - head['Cache-Control'] = 'no-cache' +# head['Pragma'] = 'no-cache' +# head['Cache-Control'] = 'no-cache' end head['cookie'] = tdiary.cookies if tdiary.cookies.size > 0 print @cgi.header( head ) print body else - head['Pragma'] = 'no-cache' - head['Cache-Control'] = 'no-cache' +# head['Pragma'] = 'no-cache' +# head['Cache-Control'] = 'no-cache' print @cgi.header( head ) end rescue TDiary::ForceRedirect
Segmentation faultが起こったり起こらなかったり、起こったとしても(特定のパターンはあるにせよ)違う場所だったりとはっきりしないエラーに困らされた。
原因が create_aggregateで独自に定義した集約関数を使ってるからだということはわかってる。RubyForgeに関連のありそうな投稿を見つけた。
原因はリファレンスが切れて GCに回収されてしまったオブジェクトを参照しようとしてることにある、ということで良いか? 何ともヘタレな回避策は↓。
GC.disable; db.execute(sql); GC.enable
sqlite3-rubyはもうメンテされないのかね。名前付きプレースホルダの問題も解決されないし。
sql = 'SELECT * FROM Books WHERE Title = :title;' db.execute(sql, {'title'=>'惑星をつぐ者'}) #=> no such bind parameter 'title' とかなんとか db.execute(sql, {':title'=>'星を継ぐもの'}) #=>(゜Д゜ )ウマー
bind_parameterのキーに普通はコロンを付けたりしないよね、多分。
WINDOWSが起動しなくなってから、復旧した後でイベントビューアを見てみると大量のエラーが記録されていてびっくりすることがある。こんなの。
ページング操作中にデバイス \Device\Harddisk1\D 上でエラーが検出されました。
ドライバは \Device\Harddisk1\D でコントローラ エラーを検出しました。
アプリケーション ポップアップ: Windows - 遅延書き込みデータの紛失 : ファイル C:\Temp\$Mft のためのデータを一部保存できませんでした。データを損失しました。 このエラーは、コンピュータのハードウェアまたはネットワーク接続の障害によって発生した可能性があります。このファイルをどこか別の所に保存してください。
最初のエラーが出た時点で気づいていれば WINDOWSが起動しなくなる前に何とかできたかもしれない。でも WINDOWSはエラーログを吐き続けるだけで何の警告もしてくれない。それをしてくれるのが eventtriggers.exe。特定のイベントの発生をトリガーにして特定のコマンドを実行してくれるプログラム。\WINDOWS\system32の中にあるはず。但し Windows XP Professional限定。少なくともこの PCには入っていない。
まただよ。また Home Editionの制限にやられた。こんなにも制限事項に引っかかるのが事前にわかってたら価格差を考えても Proを買ってたのに。
読んでみたくなる表紙カバー。
以上を読んで、俺ルールを述べる。
「モーニング娘。」は「。」まで含めて初めて「モーニング娘。」。* 外国語表記のアーティスト名を勝手にカタカナにして夕刊のヒットチャートに掲載していた読売新聞が嫌いです。
小学校で書写とかいう苦行を散々やらされたがそんなルールはなかった。教科書は「〜〜。」というように書かれてたし、これをノートに写すときは句点と閉じ括弧を同じマスに入れるというルールがあったことまで覚えてる。(間違えると間違えた箇所から書き直し。手書きのノートに「コピペ」「挿入」なんてないから延々書き直し(´Д⊂)
教科書至上主義の俺には活字媒体で幅をきかせてる送りがなの規則も不自然に映る。ATOKは送り仮名の送り方として「本則」「省く」「送る」「すべて」の 4つから選べるようになっているが、ATOKのヘルプから送り方の例を抜き出してみる。
本則 終わる 表す 省く 終る 表す 送る 終わる 表わす すべて 終る・終わる 表す・表わす
俺の時代の俺の小学校の教科書と漢字ドリルの送り仮名は全て本則で書かれていた。ATOKの設定は当然「本則」にしている。新聞・雑誌など活字メディアで一番目につくのが「表わす」。俺にしてみれば「短かい」('か'は不要)と同列の誤りに見えてしまう。
逆に日本語でなければ部分的にカンマも使う。
私は pearl, python, rubyを触ったことがありません。
公文書や新聞では表記を統一しなければいけないとかで読点やカンマを混在させたりはできないかもしれないがね。二重母音の「エイ」を全て「ー」と書くというのもそう。個人の文章や著作なら「ゲーム」「メイン」「メール」「プレイヤー」みたいに俺基準に沿って、より自然に感じる表記を選べるけれども、表記を統一する必要がある場合はどちらかを選ばなければいけないわけで、その結果不自然に見える部分が出てくるのは仕方ないと思ってる。
花岡っちは自分の業界を絶対視しすぎ。句読点然り、遷移然り。とはいえ、みずほ銀行のサイトに一般人への配慮が欠けてるのも事実。みずほ銀行のページに行ってみても確認できなかったので想像で書くけど、「宝くじに遷移します」というメッセージを見るに、これってリダイレクトのみを目的として一時的に表示されるページに書かれたメッセージじゃないの? 一瞬意味がわからなくてもすぐにページが切り替わるのを見れば「ああ、そういう意味だったんだな」ってわかると思うんだけど。意味がわからなくても困らないし。(みずほ銀行に同情してみたけど不親切なメッセージってことは変わらんね)
初めはトランジションという単語を、HTMLを触り始めてすぐの頃に目にした。Internet Explorerではページを表示するときと去るときに色々と用意されたビジュアル効果を適用することができて、これがトランジションと呼ばれていた⁑。遷移という単語はこれの訳語として後で知った。以後、遷移は自分の中で一般化した。4月7日の日記で「遷移」が 4回使われている。(他にネットを通して初めて自分の中で一般化した言葉といえば「萌え」。初めて目にしたときは「萌える」=「芽が出る」だったので全く意味不明だった。)
以前から横にだらだら延びた段落は醜いと思っていた。
このようなページを見つけた。C O U L D:固定か可変かそれが問題だ
早速 cssに下記の一行を追加した。
body { max-width: 50em }
emってな曖昧な単位に少し不安があるが Firefox1.5と IE7.0で同じように見えるので良しとする。