/ 最近 .rdf 追記 設定 本棚

脳log[2013-12-09~]



2013年12月09日 (月)

最終更新: 2014-09-04T19:38+0900

[tDiary][正規表現] tDiary用MathMLプラグイン(x-math.rb)の置換用正規表現

 問題のある現象と急場しのぎの*解決

SCRIPTタグの外側に書いた HTMLコメント(<--から-->までの、二連のハイフンに挟まれた文字)が CDATAセクションに置き換えられたり、STYLEタグを挿入する位置によって無関係の HTMLコメントがやはり CDATAセクションに置き換えられたりられなかったりする現象が発生していて、以下の replace_bodyメソッド内の2行をコメントアウトすることで解消した。正確にいうとこの2行の直前の行末のドットを削除する必要もある。

gsub(/(<style [^>]*?>.*?)<!--(.*?)-->(.*?<\/style>)/m){"#{$1}\n<![CDATA[\n#{$2}\n]]>\n#{$3}"}.
gsub(/(<script [^>]*?>.*?)<!--(.*?)-->(.*?<\/script>)/m){"#{$1}\n<![CDATA[\n#{$2}\n]]>\n#{$3}"}

これは以前にちらりと書いた(自分の好みを正当化する理由としてでっちあげた)指摘の実例ではないかと思う。

つづくパターン次第ではマッチを成功させるために .*? は何にだってマッチする。

避ける方法は例えばドットの直前に (?!</script>) とか (?!</style>) とか (?!-->) と書くなど(だけではなく否定先読みとドットをグループ化したものでドットを置き換えるようにしないといけないかも)。空白を閉じタグのどこに挿入できるかできないかは調べられなかった。

 @2014-09-04 具体的にはこう。(先読みとドットの前後を入れ替えると意味が変わることを覚えられずいつも引っ掛かる)
gsub(/(<style [^>]*?>(?:(?!<\/style>).)*?)<!--((?:(?!<\/style>).)*?)-->(.*?<\/style>)/m){"#{$1}\n<![CDATA[\n#{$2}\n]]>\n#{$3}"}.
gsub(/(<script [^>]*?>(?:(?!<\/script>).)*?)<!--((?:(?!<\/script>).)*?)-->(.*?<\/script>)/m){"#{$1}\n<![CDATA[\n#{$2}\n]]>\n#{$3}"}

ちょーめんどくせー。しかもこれでも閉じタグが <!-- --> でコメントアウトされている場合にその閉じタグを無視できない。思うに、開きタグと <!--の間、-->と閉じタグの間に空白だけを許可すれば単純になるのでは?

# 最終形。置換後に改行が増えてるのが(※元々の仕様)気に入らないけど……。
gsub(/(<(style|script)(?: [^>]*)?>\s*)<!--((?:(?!--|<\/\2>).)*)-->(\s*<\/\2>)/m){"#{$1}\n<![CDATA[\n#{$3}\n]]>\n#{$4}"}

 問題2: XHTMLInfo#unsupported_body (@2014-01-06)

def unsupported_body
	date = @cgi.params['date'][0]
	url = @conf.index + @plugin.anchor(date, false)
	force_url = @conf.index + self.anchor(date, true)

85行目の @plugin.anchor が引数1つのところに2つ渡したエラーになるので、86行目にならって self.anchorに書き換えた。

url = @conf.index + self.anchor(date, false)

 問題3: XHTMLInfo#supported_agent? (2014-01-06)

def supported_agent?
	is_gecko? || is_mathplayer?
end

Blink Operaなんかも XHTMLをサポートしてるらしい(少なくとも HTTPでそう宣言している)ので下のように書きかえた。

def supported_agent?
	@cgi.accept.to_s.index("application/xhtml+xml") || is_gecko? || is_mathplayer?
end
 @2014-01-08 XHTMLでなく MathML

MathML対応の方が問題になるのだった。

対応しているのは、Gecko を採用している Mozilla Firefox などのブラウザ[4]、Safari 5.1 以降。また、Presto を採用している、Opera 9.50[5]〜12.1 においても単体でほとんどの数式の表示が可能となったが、Opera 14 より WebKit そして Blink になり非対応。Google Chrome は対応していない。非対応ブラウザでも MathJax[6] で表示可能。Internet Explorer では、例えばプラグインの Design Science の MathPlayer をインストールすることで MathML を表示できるようになる。

やる気のないブラウザのことなんて知らない。

* 本来の意味の姑息を使うべき場面ですよ。

最終更新: 2014-01-02T17:32+0900

[Vista] インストールできる最新の Internet Explorer(Qちゃん) on Vistaの持病

スムーズスクロールが ONの場合に限って異常にスクロールが引っかかり、ほとんどまともな閲覧が不可能になる。スペック不足ではなく、それが証拠にスムーズスクロールを OFFにすると何の支障もないどころか軽快そのもの。

最近やっていたテキスト処理(20131101p01)で DOMをいじくり要素を作成・追加しすぎたのかと思っていたが、そういえばちょっと前はそんなことなかった。検索すると IEの持病であるらしい。これは 2011年の記事。

IE9でスクロールがカクカクする: たきざわテクニカル PC修理&サポート

直近の Windows Updateから下のをアンインストールしたら直った。

Windows Vista for x64-based Systems 用 Internet Explorer 9 の累積的なセキュリティ更新プログラム (KB2888505)

はぁー。IE11をインストールしたいなあ。

 @2013-12-14 直った。

12月分の累積的~(これにはアンインストールした11月分も含まれているのか11月分はリストから消えた)をインストールしても遅くならなかった。

 @2013-12-下旬 再発した。

Windows Updateでは Definition Updateしかインストールしてないんだけど。

* 全角文字の字間は拡大するが英字はそのままなので、一部は間延びして一部は詰まって見える。全体に散らした方が目立たないのに。@2013-11-19 Safariと同じ方法をより限定された対象に適用するだけで矯正できるのでやってしまった。対象を限定しなくても副作用はないけど処理負荷を考えて限定した。コピペコード率高し(だが構わない。分岐直後なので当然のこと。ツールファンクションは共有してもいいけど)。@2013-12-16 ■の連続も分割されないな。どういう Unicodeプロパティを参照してるんだろ。

最終更新: 2014-01-03T21:32+0900

[tDiary] 脚注プラグイン(footnote.rb)とセルフリンクプラグイン(my-ex.rb)の組み合わせ問題

 おことわり

多分に自作成分(#p03.05)が入っているので指摘が公式版に当てはまるかは不明。

 現象

サブタイトル内で脚注プラグインを呼び出している過去のセクションに言及すると、言及した方のセクションにその脚注が現れる。

 解析

日記本文内で [[YYYYMMDDpSS]] 形式(Wikiスタイルの場合)でリンクを作成すると、それは my プラグインの呼び出しに展開され、my-ex.rb内で再定義された拡張版 my メソッドは apply_plugin( section.subtitle_to_html, true ) によってリンク先のサブタイトルの取得を試みる。これは evalに相当する処理であり、脚注プラグインのようにセクションの入り口で初期化処理を行いその後のプラグインメソッド呼び出しを待ち構えるタイプのプラグインを撹乱しているのではないか。

公式版で現象が報告されていないのは、このサブタイトル取得機能は言及された日付の日記データが @diaries変数に予め入れられていることを前提としており、実質的に同月内の直近のエントリへのリンクでしか機能しないからではないか。この日記で顕在化しやすいのは取得できるサブタイトルに制限がないからだ(20090114p01, 20110220)。

 どうするか

*_enter_procと *_leave_procの実行順序に期待できない Hikiでどうやっているか知りたい。


プラグインファイルのトップレベルでベタっと初期化していた。参考にならない。

 自作成分

  • 同じ内容の脚注をまとめられる。

    「* * * 脚注文章」とか「* *2 *3 脚注文章」という表示になる(アンカーはユニークでないといけないので並べる必要がある)。二番目三番目はともに fn(1) または fn(1, "*") と書いている。三番目は fn(2) と書いても良かったかも(その場合は自動的に決まる脚注マークに少し影響する)。

    脚注マーク(title属性には脚注文章が入る)の遅延文字列化はない*ので、まだ書いていない脚注を fn(4) などと参照することはできない。

  • 脚注マークがかぶっていないときは連番を振らない。

    これで冒頭の数文字を脚注マークに転用しやすくなる。二番目が登場したときに番号1をさかのぼって振れないのが少し不満。

  • 第一引数と第二引数がともに文字列のとき、短い方を脚注マークと判断する。

    これで冒頭の数文字を脚注マークに転用しやすくなるし、頭を悩ませることなくどう書いても正解になる。普通ならね。

無駄に手が込んでるのだけど、脚注よりはかっこ書きが、かっこ書きよりは整理して流れのあるひとつの文を構成する方が良い。タッチ操作で脚注マークの title属性を読む方法もわからないしね。

* できたらおもしろいのだけど、ERBが eoutvarを文字列で初期化してしまうのと、<%=%>で埋め込んだスクリプトをまめに .to_sしてくれるのでできない。ここは <<演算子のオーバーロードだけを(ERBが eoutvarに)要求すべき場面ではないか。

 脚注の脚注(のつもり。本当にやろうとすると Stringを HTMLTextと PlainTextに分けてやらないとエスケープ漏れの原因になる)。プラグインに渡す文字列内で <%=%>って素直に書いたらあかんのね(プレビューでエラーが出る)。WikiSection#to_htmlが仕事してないから内部仕様が日記著者に露呈してるのだ。


2013年12月08日 (日) 「まるで、生めん。」というコピーについて。これが敗北宣言だと理解して使っているのだろうか。この生めんではない、生めんに劣るらしい何かは例えば、長期保存性などのために味や食感を犠牲にした商品だというのだろうか。でなけりゃ最初から生めんを食べればすむ話だ。そんな低い志で、そんな低い現状認識で送り出された商品を、食べている自分が悲しい気持ちになってくる。俺はどん兵衛が好きだよ。でも生めんで食べたいとは思ってない。■ついでにこちらも。最近のことではないけど、展示住宅らしい家に「そっくりさん」と書かれた垂れ幕が下がっているのを何度か見た。その趣旨は知らないし調べないが、この言葉が比較基準とするべき本物の存在を前提としていることに気が付かないのだろうか。あなたの家は偽物ですか?


2013年12月06日 (金) [COSMOS]「三菱電機の液晶ディスプレイ事業が終了。「事業損益の改善が見込めず」 - 4Gamer.net」■今使ってるのは三菱の VISEO MDT243WG(WUXGA 1920×1200 16:10)。PCの他に PS2と PS3と CMT-SE3のDVD映像を直接・同時に接続できて(まだ2系統余ってる)リモコンで切り替えられるのが最大の魅力。デジタルとアナログ入力の組み合わせなら親子画面にできるから CMT-SE3で再生する DVDをチラ見しながら PCが操作できることに最近気がついた。レビューを漁ってると海外では NECブランドで売られてるとかよくわからない説明があった。そうなると次のディスプレイは NECの MultiSyncだろうか。WQXGA(2560×1600, 16:10)が 30インチより小さくなってるといいんだけど。■■■@2013-12-11 なんと 4Kが 24インチ以下「["Dell Uシリーズ 23.8インチ 液晶ディスプレイ (4Kモニタ/3840x2160/IPS非光沢液晶/8ms/ブラック) UP2414Q"]」12月18日発売予定。約10万円。


2013年12月05日 (木) コンビニ経営してるけど、客に対して文句言わせてくれ」■ありえなさすぎて釣り臭いけどコメント。損して得を取るという思想が欠けている。コンビニは物を売る業態ではなくコンビニエンス(利便)を売る商売なのだからなおさら。ひとつひとつの指摘はもっともだけど、普段の自分は当てはまらなくても、たまたま事情があってボールペンを借りたいときだってあるだろう。図々しいか?道行く人に時間を尋ねる程度のことではないのか?どんなに行儀の良い客でもいずれトラブって離れていくだろうし、客に目を光らせしょっちゅういちゃもんをつけている経営者の姿というのも足を遠ざけさせるのに十分だろう。君子は危うきに近寄らず。触らぬ神に祟りなし。■これがエロ雑誌とタバコの取り扱いをやめて客層の改善を図るという話なら俺にとっても直接的なデメリットがなく間接的なメリットしかなくて結構なのだが。


2013年12月04日 (水) アマゾンもうざくなった。ロードするたびにポップアップして画面を隠す新商品広告。隠された画面は俺が表示したもので隠した新商品案内はアマゾンが表示したものだ。お前が売りたいものは俺が買いたいものではない!著者名をクリックして検索できなくなったのももうずいぶんになる。オプションを表示するのは正解ではない。望みの結果はひとつしかなく、それを1クリックで提示できない時点でもう最善ではないんだよ。俺は表示されたオプションを無視してもう1回クリックすることで著者名による検索結果を表示してる。1クリックだったのが2クリックへの退化だ。


2013年12月03日 (火) シリコン製品だとかモバイルバッテリーだとか。余ってるんだなー、売りたいんだなーと思う。てこでも買わない。……と書いてみたけど、意地になるまでもなく全くの不要物なのだった。■■■ののちゃんのぐうたら藤原先生は科学の解説記事での明晰かつわかりやすい語り口で相当株を上げている。この前は構造色。車の塗料など既に実用化されてるとか。■■■[SakuraEditor] CRといえば CRで、LFその他を含まない気がする。総称は line breakとか end-of-lineとか newline markerではなかろうか。"Check EOL code consistency before save."とか? Enterに対しては Returnキーを忘れるなと茶々を入れる。■■■10kgの、いわゆるみかん箱のみかんは2週間もたなかった(すべておいしくいただいたという意味です)。あと1度か2度注文する。みかんといい秋に 4kg+4kg注文した梨といい和歌山県が光っている(近いしね)。


2013年12月02日 (月) 「間髪をいれず」が殺された日 - アスペ日記」マイナビウーマンのように、病気への不安を煽ってなんちゃって偏向医学まがい知識(一面の/局所の/限定された条件下での真実に価値なんてあるか?現実に人体があり個個人が存在するのにシステムの/ネットワークの全体は無視するか?)を授ける健康信仰エンターテイメント番組みたいなのは無視したらいいんだよ。ワザノバの、粗を指摘するのもあほらしい正しいところ探しをしたほうが早そうな翻訳も、そっと閉じて触れなければいいんだよ。■言葉が狩られる結果になっているとは気付いていなかったし、それはつまり知らず自分が狩る側に立っていたことに気付かされたということでもあり、これは無視せず声を上げた人がいた結果だけどね。■「誤用の方が定着したもの」他は全く知らなかったり雑学知識として持っているだけなので異論はないが、端緒(たんしょ)憧憬(しょうけい)は誤用の方が定着したとは認めたくない。■■■プログラマが heか theyかの記事で残念なコメント「ソースコードは“シー(ぷらぷら)”なのにね」C/seaと sheが同じだとでも?まずは違いを「知る」ところから。■■■「半沢なにがし」がナカザワなのかハンザワなのか文字情報だけなので未だに判然としない。■■■「誤読の世界」■あらぼん、みしょう、ぎゃくて、じょうさま、だいかん、はくや、は間違えそう。ほとんどがそもそも見聞きする機会がなく知らない言葉だから。他は大丈夫……ではなくて、元凶の読みをはっきりさせたくて検索していたのだった。こういう質問があるあたり戦犯がいそうではないですか「元凶と書いて、「げんきょう」と読むのと「がんきょう」と読むの、 どちらが正しい... - Yahoo!知恵袋」俺はガンキョウって読みたい。小学生向けの漢字表で併記していたものがあったはずだ。


2013年11月30日 (土) [SakuraEditor] 『API design for C++』の日本語版を読み終わった。学ぶところは多いし(特にバージョニング/互換性。ユーザーコードを破壊しない(再コンパイルさせない)ために何ができ何を避けるべきなのか)、何よりばらばらに持っていた知識を APIデザインという一本の筋にそって整理してくれたところに価値を置く。APIなんて利用するだけだからと考えてはいけない。クラスを作成するときには必ずクラスの利用者の――目的やユースケースに従ってブラックボックスを操作する者の――視点が必要になる。APIとはインターフェイスでもあり、public(クラスの外に公開)や protected(派生クラスに公開)のメソッドでもあり、ヘッダファイルにプロトタイプ宣言が置かれた関数でもある。絶対に無関係ではいられない。■テクニックだけでなく新たな視点を与えてくれるという点で『大規模 C++ソフトウェアデザイン』を思い出したし、実際ラコスは何度も引用されていた(※2冊の提供する視点が同じということではない)。あんまり UMLとかを使う方面に深入りしないのも共通で、安心の C++本。■最後の最後に CRTP(Curiously Recurring Template Pattern)が出てきた(これはテクニックね)。静的な(コンパイル時の)ポリモーフィズム。実装を伴うインターフェイスクラスとしてミックスインクラスとも解釈できるとあった。サクラエディタで機能拡張のなれの果てともいえる Viewクラス(といってもヘッダで 31KiBだからかわいいもんか)をどうやって実装できたかという思考実験で、一番に思いつくのがこの CRTP。■Viewの特性や機能(範囲選択できる。選択した範囲に基本的な操作(置き換え/コピー/切取/貼付)ができる。検索できる。文書(文字列/バイト列)を視覚表現に変換できる。色分けできる。ファイルをドロップできる(のはウィンドウクラスかも)。ブックマークできる)をミックスインクラスとして独立して実装する。Viewはこれらのミックスインクラステンプレートを自身をパラメータにインスタンス化し、これを継承する。ミックスインクラスがテンプレートパラメータを通じて Viewの機能にアクセスできるのはもちろん、試したことはないけど、他のミックスインクラスが Viewにもたらす機能に依存して独自の機能を実装することもできるのではないかと思う。■個々の機能を個別のミックスインクラスとして実装する利点は、自身の管理するデータ、依存する機能、それらを組み上げて実現する単一の(またはひとまとまりの)機能にフォーカスできること。■こういう機能拡張のフレームワークはできるだけ早い時期に確立しておきたいものだ(あきらめてら)。■■■どことは書かないけど……ネクスサス7……。「Deffered」も気になってたんだよね。検索したら2番目が目当てのサイトだったんだけど、1番目がまた見事。「Common misspelling of deferred.」Commonでした。そして別のサイトだけど、Deffered、Defferedときてからの Deffred(デフレッド)、Deffered. 正解は出てこない。一貫性もない。この有様では苦労するでしょうな。


2013年11月29日 (金) マジックテープ/ベルクロ/面ファスナーのもわもわした方って消耗品なんね。使ってるところがそうないのと、消耗するまで使うこともなかったので知らなかった。ストームクルーザー(10年以上前のもの)だとか dhbの防風ジャケット(去年のもの)の袖口のいつも使う部分だけひっつきが悪い。縫い付けるのは難易度が高そう(生地の表から裏に糸が貫通してるわけではないから)だし、貼り付けてなんとかなるものか。


2013年11月28日 (木) 32種類のうち27種類は、例えば「.holdings」「.bike」「.sexy」「.diamonds」といったASCII文字列。一方、残りの5種類は、非ASCII文字列のIDN(Internationalized Domain Name:国際化ドメイン名)となっている。」■国際化を果たしたのはドメインを管理している所で、それによってドメイン自体は地域化していると感じる。読み取りも入力もできないドメイン(利用者ごとにその範囲は異なる)なんて使えないし。英語の読み書きを万人に求めるわけではないけど国際的といえばそれが一番(つまり従来の URLが一番)だと思う。同じ「国際」と付いていても全然違うもんだ。


2013年11月27日 (水) 「AともいえるがBともいえる」とか言う人の役立たなさ - Chikirinの日記」■この批判が当てはまるのは Aと Bが既に明らかな場合。「Aともいえるが Bともいえる」の価値は、Aしか目に入っていなくて、それがゆえに Aだと主張してる人に別の視点を提示することにある。選択するにも妥協点を探るにもまずは論点を出し尽くさないといけないだろう。「Aだ」と言うだけで Bに言及しないなら詰めの甘さを疑ってかかられて当然。


2013年11月26日 (火) バリエーションを実装する4つの方法。1.フラグや実行時型情報を使って N通りの分岐コードで N通りのバリエーションを実装する。下の下。実行の開始点と終了点が共通なだけ。2.インターフェイスや仮想関数を使って個別別個に実装された N個のコードを1通りのコードで実行する。共通の性質が括り出され制御の流れを共有するが、一定の枠内にありながらも一番融通が利かせられるかも。3.N個のフォーマットされた静的なデータに従って1通りのコードが走る。派生表現の自由はさらに減るが何が起こり何が起こらないのかが明確で安全。データの作成はプログラマ以外が分担できる。4.N個のデータの代わりに N通りのスクリプト。結局これになるのかな。5.これ以外は想像がつかない。意識して眺めたこともないし。■バージョニング。後方互換性/前方互換性という視点からの評価も必要。


2013年11月25日 (月) [SakuraEditor]「おそらく『"』を1個置換するたびに『"』で囲まれた範囲を色分けするロジックが走っているのではないかと思います。置換が完了した時点で1回だけ走らせれば解消するのではないのでしょうか?」■ドキッとして自分の SHJS版でやってみたら置換個数なりの時間で済んだ(Rubyと並んで気合いの入った色分けを定義してある JavaScript設定で、組み込みの色分けもオンにしてのテスト)。2.1.0.0だと確かに 0個置換でしばらく待ったあと 256個置換でまた止まる。■ところで、この進捗表示に付いてる[キャンセル]ボタンは[中止]がふさわしいのではないかと思った。経過をロールバックはしないのだし。■[#521 すべて置換の高速化]でレイアウトを迂回することで解消するとしても、別問題としてレイアウトが色分けの扱い方を間違えて浪費してる感じは残るね(ソースは調べてない)。最初は、引用符の色分けは他所の関数を呼び出すだけのレイアウトべったりの実装だから、と原因を推定していたのだけど、r3118でまるっきり作り替わっていたのだった。それなら CColor_Quote.cppから #include "view/CEditView.h"を取り除けたりしないんだろうか。