/ 最近 .rdf 追記 設定 本棚

脳log[2010-07-30~]



2010年07月30日 (金)

最終更新: 2012-11-01T13:41+0900

[SakuraEditor][SHJS][Ruby] Rubyの %リテラルの色分けを修正。

説明が面倒なのと誰も知りたくないだろうから適当に、備忘のためだけに。

  1. まさか %{literal}literal部分で \{\} を使う人間がいるとは思わなかった。(違う種類の括弧を使えばいいじゃない。開閉の釣り合いがとれてれば同じ種類の括弧でもエスケープ不要だし)
  2. だのに Ruby1.9の rake.rbにこんなパターンが……

    %r{[*?\[\{]}
  3. エスケープされた { 2のはの考慮がないから、閉じ括弧が足りないとしてファイル末尾まで正規表現として色分けされてしまう。
  4. ちょちょちょいと .rkw2ファイルにエスケープ文字を追加してサクラエディタに対する修正は完了
  5. SHJSの lang/sh_ruby.js(自作)への対応も同じですむはずが、入力の末尾に達した時点で意図せぬバックトラックが発動し、閉じ括弧が足りなくても色分けが適当な閉じ括弧で終了してしまう現象に遭遇。これは自業自得(20090808p01)なので自分でなんとかせねば。間違いが埋没してしまうのはよろしくない。
  6. こうした

    %r{余分な開き括弧{。間違いはインタープリタを通す前から目立つように}

2のは Rubyインタープリタに対するエスケープ、と同時に正規表現パターンとしてのエスケープですよ。%r[\[] と /\[/ が同じパターンになって、%r[[] がRubyのシンタックスエラー、/[/ がパターンのコンパイルエラーになるんだから。(ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32] / ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32])


2010年07月29日 (木) [tDiary] tDiaryは閲覧やコメントなど閲覧者からのアクセスが全て index.rbを経由するのだから、ある程度のアクセス解析ができるはずなんだけど……カウンタ系のプラグインにそういう高機能なものがあるかと思ったけど見つかんない。ログを残すのが仮に「Webサーバの仕事」だとしても、日記のプロフィールとして入り口となった検索語やアクセスの多い日を表示するのは tDiaryの領分。Webサーバーのログが望みのフォーマットでない可能性もあり自由に変更できないことも考えられる。だったら専用フォーマットで十分かつ最小限のログをプラグインが残してもいいじゃない。


2010年07月28日 (水) [790FX-GD70] BIOS ver.1.D AMD 6 core CPU support. 他


2010年07月27日 (火) バイク:てこ入れ加速…国内販売、ピーク時の1割 - 毎日jp(毎日新聞)」だって、ねえ。カワサキ KLX250しか国内の新車の選択肢ってないじゃない。DR250Rも DR-Z400Sも XR250ももうない。250cc化してもセローのえぐれたシート(足つきがいいとも言う)は嫌よ。2007、8年あたりの排ガス規制が二輪車終了のお知らせなら、自家用車終了のお知らせはいつ?車なんて近距離都市間輸送と公共交通だけでいいよ。


2010年07月23日 (金) 民主主義は多数決じゃないらしいです。「現在の」有権者しか参加できないんだから未来を縛るのは不公平です。(って Wikipedia(民主主義)にもう書いてあるね) ついでに、消費税増税を「決めない」ことが最近ではもう既に将来に対する裏切り。国内の金融機関や保険会社が大量に保有しているという日本国債を、実は徴収すべきを怠っていた税金でしたってことにして紙切れにしたら?(ここから、相続税を引き上げて世代交代を待つ発想がでてくるん?)


2010年07月19日 (月) Amazonが在庫の都合で俺の注文した本の発送を一週間以上遅らせてるうちに(支払いもまだだし、アマゾンは自分の都合のいいように契約の成立は発送メール送信時点だとかいってなかったっけ)、ポイント 10%還元キャンペーンにその本を加えてる。リアル書店から売れ筋の(どこでも買える)本を取り上げようとないものを売る前にすでに入ってる注文をさばけよ。似たようなことが MX610(ロジクールのマウス)をよその Web通販で買ったときにも。(ネット上で)割引販売をしてる横で、予約してた客に「商品が確保できたので支払いを(と定価を提示)」なんてどの口が吐かすのか(払ったけど)。その点、アマゾンが始めてそこそこ経つ予約商品の価格保証はそういうことを防ぐけど、アマゾンが発売翌日、予約分の発送を待ってから値段を下げたりしないと信じていいものだろうか(すべては利益の多寡次第だろうな)。


2010年07月17日 (土)

最終更新: 2010-07-20T09:14+0900

[] ミズノ アーチハンモック・ソックス (73UF-22508, 五本指, バイオギア, ドライベクター)

3種類買った五本指ソックスの中で一番定価が高く、一番期待していたのだけど、五本指ソックスとしてはあまりに残念な出来。指の形が奇形。

  • 左右対称でない。
  • 小指が真横に生えている。
  • 左小指の先が双頭。
  • 指を通すと指の側面の粗い縫い目から肌色が見える。(鉛筆の先を突っ込んだくらいの穴がどの指にもある)
  • 指先を足裏方向に丸めた状態を型にしてるから、甲の布が余る。指の裏は常に引きつれている。
  • 左人差し指が親指の左半分に被さって生えている。
  • 人差し指の形が末広がりだから必ず布が余る。

金はいらんからまともなものを作れととにかく送り返したい。


2010年07月16日 (金) iPadがインターネットごしに DLNAクライアントになれたら迷わず買う(20100610)」DLNAじゃないけどサーバー側で対応してしまいそうだ。iPadが対応デバイスに入ってなくて安心した。>「HP、iPhone/iPodで外出先から利用できるホームサーバー -AV Watch


2010年07月15日 (木) 鼻緒があるからとか関係なく五本指ソックスは良さそうなものだ。(保温性が優れていようとも)ミトンなんてありえないという人間がこれまで普通のソックスをはいていたのが間違いなのだ。窮屈なところに押しこめていて悪かった。靴よりはるかに早く土踏まずがしんどくなるのでそのサポートがあるものにした。八つ割れは気張らずに出歩けるのが気に入ってる。


2010年07月14日 (水) 下駄のスペックには重さが必要だと思う。600グラムでも今の靴より重いということはないみたいだから重要ではないけど。二本歯は、足型の汚れが目立たないという塗り下駄にしよう。もちろん津軽塗で。>「猫のトラックボールルーム ~Logitech Marble Mouse Japan (ST-45UPi)~」 chinaが磁器であるように漆は japanなんだにゃー。


2010年07月13日 (火) これ「八割BLACK(ブラック)」とこれ「竹皮スリッパ(下駄鼻緒)男性用」。慣れないのに天狗を気取るのも一歩間違えば便所サンダル(タイル張りの床でカランカラン鳴るやつ)なのもいやなので。あと車の運転に……とも思っていたけど底がたいらでも踵が固定されないものは基本的に NGらしい(裸足にしよう)。ここのサイトはよくできてる。商品を見つけるのも注文をするのもやりやすい。あと楽天メソッド(笑)。これは確かに効果がある。商品のことも売り手のことも知らずには注文できないから(気持ちだけでも)安心材料は必要。それは店主の商品説明だったりユーザーの声だったり。買ったのとは違うけど二本歯の歩き方>「下駄を知る - 【丸屋】」踵を落とさないで前の歯で。裸足ではそうなるけど足の高い下駄では難しそう。なんか男と女でも違いが>「下駄や草履の磨り減りって、、どうしたら? - BIGLOBEなんでも相談室


2010年07月10日 (土) 夏は下駄だなあ(素足ではけるから)。持ってないけど。


2010年07月09日 (金) Windows Confidential: The Third Rail of Keyboard Shortcuts | TechNet Magazine」を読んでの違和感。レイモンド チェンは Win+Eがどこを開くかの話をしている。おれは Win+Eがどこを開くかなんて確かめたことがなく、Windows Explorer――フォルダを表示するときに利用される簡易表示ではなくフォルダツリーが付いた正式版――を起動するためのショートカットだと思っていた。そんで、だから、使ってない。

最終更新: 2014-01-02T18:04+0900

[SakuraEditor][正規表現] 「鬼車と bregonigに hitEnd(20100531p01)機能が搭載されることを願う他力本願日記」

なんてことをこの日記の冒頭に掲げたもんだから自分でやってみた(どういうこと?)。

 更新履歴

rev3 (2010-09-05, そのうち書く)
(サクラエディタ) 複数行検索を利用した複数行置換を実装。(複数行全置換はまだ。似たようなコードだし必要なのは手間だけだけど)
rev2.1 (2011-01-29)
(サクラエディタ) バグ修正。複数行検索モードでマッチ位置をバッファ内インデックスから(行,桁)に変換する際にミス。誤った検索結果が表示されることがあった。
rev2 (2010-08-27)
(サクラエディタ) 複数行検索モード実装。(正規表現を使った下検索のみ。50MiB制限あり。制限による探索打ち切り・マッチ範囲切り上げの通知なし)
テストバイナリ+変更点(test_multiine_search.zip)
rev1
(鬼車) 普通のマッチなしと、入力次第でマッチする可能性のあるマッチなしに異なる戻り値を割り当てた。
(bregonig) 入力不足のときに BMatchの戻り値を 0(正常終了,マッチなし)にして、エラーメッセージで入力延長によるマッチ成功の可能性を伝えている。
(サクラエディタ) 下検索での入力不足によるマッチ失敗をステータスバーで通知。

 bregonig

既存アプリに影響があるので良くないけど、bregonigへの暫定的な変更はこう。

 regexec_onig(bregonig.cpp)
	} else {
		/* ERROR */
		onig_err_to_bregexp_msg(err_code, NULL, msg);
-		return -1;
+		return err_code == ONIG_MISMATCH_INPUTSHORTAGE ? 0 : -1;
	}

入力が足りなくてマッチしなかったときは、エラーメッセージをセットするけど戻り値は負数(エラー)ではなく 0(マッチなし)。

 鬼車

鬼車(5.9.2)に「K.Takata's software : bregonig.dll」で手に入る onig-5.9.2-mod.diffを適用したものをさらに変更。マッチに失敗したときのエラーの種類で hitendしたかどうかを伝える。ちゃんと動くのか非常にあやしい代物。TODOもいっぱいある。

  • 特定のパターンのパターンに向けた最適化を無効にしている。(そこまで手が回らない)
  • backward searchに対していつ hitendフラグを立てていいのかわからない。(ので未対応)
  • "aaaaa\n" という文字列から [a\r\n]+a というパターンを検索したときにバックトラックにより "aaaaa" がマッチするわけだが、その次の行にも "aaaa.." という文字が続いていた場合は……。一応マッチは見つかっているが hitendフラグも立てたい。
  • [\w\W\s\S] というようなパターンで、メタ文字の登場順([\W\S\w\s]とか)に 依存しておかしな結果になる。(もちろん俺のミス。原因は解らない)

やっぱり鬼車は手に負えないかも。

 サクラエディタ

なんのことはない、影響を受ける既存アプリにはサクラエディタが含まれている。正規表現のコンパイルエラーと入力不足によるマッチなしを区別するためにちょっと変更した。

 複数行検索モード

一行検索(従来動作)してみて、マッチが行末まで続いていたり次の行の内容次第でマッチが成功に変わりそうなときはとりあえず二行ぶん検索してみる。それでも状況が同じなら 50MiBのバッファを埋めてから三度目の検索を行う。50MiBって大きすぎるだろうか。大きさの問題だろうか。かかか。

実装は CSearchAgent::SearchWord()に。これって単語検索専用のメソッドではなかったのですよ。CGrepAgentもこれを利用したらよかった。

バッファの実体は std::wstringで。文字列を比較するにも wmemcmpなりを使おうとして結局 std::wstring("hoge") == L"hoge" を使ったへたれなので、str系のライブラリ関数は恐ろしくて毎回すぐに投げ出します。(あれを使いこなせる人は VBや PHPも使いこなせると思うんですよ)

 TODO
  • 上検索。
  • 検索語ハイライトの処理がたぶん一行ごとに行われている。一行ずつ進みながら複数行を対象に検索を行ってるってわけ。無駄だし目に見えて遅い。
  • バッファ長の制限により、マッチ範囲が途中で切られたりマッチの探索が打ち切られたりしても何も言わないのをなんとか。(制限をなくすかメッセージでも)
  • SourceForge.net: Sakura Editor: Detail: 2309002 - 正規表現による複数行検索対応(簡易版)」のコメントを見ると、検索語ハイライトのほかに「すべて置換」にもパッチが必要そう。パッチを流し読みしてたら BookmarkManager(::MarkSearchWord)までが GrepAgentが持ってたような検索の勝手実装を持ってるらし。SearchAgentを使ってよね。(あ、いや、SearchAgentは当時なかったんだっけ)
  • (複数行)検索にマッチしたなかでも、最初の行がマッチに含まれているか含まれていないかというのは区別する価値がある。サクラエディタの既存の実装は行指向が強いだろうから、「マッチした(ただし先のほうの行で)」ということを勘違いしかねない。(SearchAgentや選択範囲にはそういう指向がないから運良く複数行検索が自然に実装できただけ)
  • (@2011-08-01) [\s\S]*$ というパターン。最後の行の末尾までマッチして欲しいのに一行目の改行直前で止まってしまう。マッチに成功したときの hitEndフラグの扱い。

 @2010-07-12 「鬼車 for Java

hitEnd()の実装の参考になるか?と思ったけどそうもいかなそう。

Revision  74 hitEnd()の実装(但し仕様は満たしていない)。
Revision  85 useAnchoringBounds()及びuseTransparentBounds()に対応。→hitEnd()の実装を修正。
Revision 103 hitEnd()に@Deprecatedを追加。
    /**
     * This method is experimentation phase, and implementation has not been completed yet.
     * @return
     * @deprecated
     */
    @Deprecated
    public boolean hitEnd() {
        return (hasAnchoringBounds ? (range == region.end(0)) : (input.length() == end()));
    }

hasAnchoringBoundsが設定されてる場合は無視するとして、そうでないときは入力の長さとマッチの末尾(end())が一致してることをテストしてるだけに見える。それって hitEnd()とは違うよね。5月31日の日記文字列 aa に対してパターン aa を適用したときに hitEnd()が falseになった事例を引用した。

そうそう。これこそが hitEnd()の使い道 >Check if string is a prefix of a Javascript RegExp - Stack Overflow コメントの最後に見たことのある名前が☺


 @2010-07-12 PCRE

PCRE(現在 ver. 8.10)は戻り読みも再帰も(パターンのコンパイル時の)改行指定オプションもスキャナー的に使うための hitEnd()のような機能(read pcrepartial)も、およそ欲しいものをすべて備えている。悪名高いスタックオーバーフローにも、1.スタック使用量を減らす。2.代替メモリ確保関数を使う(汎用ゆえに遅いmalloc/freeか自作)。3.pcre_exec()の代わりに pcre_dfa_exec()を使う。みたいな各種対策があるらしい。