/ 最近 .rdf 追記 設定 本棚

脳log[2016-12]



2016年12月01日 (木)

最終更新: 2016-12-02T23:22+0900

目があった。鹿。このあとどんどん近づいていって見つめ合ったまますれ違った。体当たりされなくてよかった。 シシトビバシっていうのは名前だけではなかったのだ。


2016年12月02日 (金) おかしい。いろいろと言ってることがおかしい。「電撃 - 『サガ スカーレット グレイス』7時間プレイ後座談会。それぞれが感じた『サガ』らしさとは?」■すっごくやりたくなったけど Vitaがない。携帯ゲーム機はいらないんですよ。液晶の Vitaもいらないんですよ。うーんでも、うーん。


2016年12月14日 (水) [SakuraEditor]「Sakura Editor / PatchUnicode / #1092 セキュリティ対策」 24ファイル版のパッチを途中まで読んだ。■bSelLock はたしかに else や default でパターンを網羅したいケース。■SetFocus は、他はなくても必ず自分自身が対象として含まれるだろうという期待があるのだろうけど、それは予断だし油断があったのだと思う。同じファイルのすぐ上にある CViewCommander::Command_CASCADE にも同じ型のコードがあるけどそれは?■クリア済みのWndProcを呼ぶことについて。呼べないから呼ばないでいいのか、呼べないから呼べるようにして呼ぶのか、判断がつかない。■パッチ部分は SendMessageToAllEditors なのだけどそのすぐ上にある Send を Post に置き換えただけの PostMessageToAllEditors については?■ここまでで触れずにとばした部分は全体に趣味的な印象を持った。delete 0 は安全らしいし、CloseHandle(0) は無害らしいし、使わない領域、範囲外とインデックスでマークされてる領域を NULL で埋めなければいけない理由はないし、変数を2つ定義して、同時に初期化した片方を条件にもう一方を直後の if-else 文で初期化(※厳密には代入)するというとき、定義部分でも初期化が必須かといえばどーでもいい。それよりも C99 より前の C言語に倣った関数冒頭にまとめた変数宣言(&定義)のほうがつらい。長大な関数のあるブロックである変数が必要になったとき、使いたい値が代入されてからそこまでのすべてのコードパスでどんな値が代入され得るのかチェックしないといけないし、反対に不要になったときは、代入をやめたことで関数の以後で問題が起こらないことを確認しなければいけないし、それを forループの変数 i についても行わなければいけないのだから。行き当たりばったりで次々変数を増やすのもどうかと思うが、適切な粒度のスコープがあると思う。env/CAppNodeManager.cppのパッチで指摘された初期化はまとまっていて問題を見出せない。■env/CAppNodeManager.cppの別の部分については、IsSakuraMainWindow でもやっていて実質的な意味を持たない NULLチェックを足して今以上にごたごたさせるより、2番目のループを取り除くぐらいの書き直しをしたらいい。「hWndLastが NULLのときに全くメッセージが送られていなかった」なんてときのコードはおそらく原型が残っていないし(そんなことを言うやつがよくわからないまま(同じ)轍を踏むのだ(自虐)。でも unicodeブランチでは遡れるログに限界が……)、その対応のせいで(たぶん昔はそうだったのだろうけど)双子のループではなくなっているのだから。こんな感じにしたい>CAppNodeGroupHandle__PostMessageToAllEditors.txt。もちろん SendMessageの方も。仕様の違いは、pWndArrに hWndLastが複数含まれていたときに複数回メッセージが送られないってことだけど、そんなこと起こらないし期待もしていないでしょう? ほぼコピペの双子関数をひとつにまとめるのは、PostMessageと SendMessageの戻り値の型が違うせいで失敗した。マクロを使うとデバッガで追いかけるのが難しくなるし、メンバ関数テンプレートはコンパイラの実装が遅かったような記憶があって積極的に使いたくないし、そもそもリンクエラーを取り除けなかった(<テンプレートの定義を.cppに書いていたから。明示的な実体化が必要だった。こんな感じ)。たぶんファイルローカルのモジュール関数テンプレートにしたら一挙両得だけど、アクセス許可を出さないとダメだよね? 代わりに staticメンバにする? そうするだけの、過剰なテクニックを駆使したりヘッダに手を入れたりするだけのメリットがないのでコピペのままでいいや。■macro/CWSH.cppについて。中断のためのスレッド関数とメインスレッドがパラメーターを通して hEventを共有していて、子スレッドの方で OpenEventDuplicateHandle みたいなものは呼んでいないんだけど、子スレッドの終了を待たずに SetEvent(hEvent);CloseHandle(hEvent); して子スレッドはイベントを受け取れる?■読んだのはここまで。趣味的(あるいは潔癖・偏執的)とは書いたけどデバッグモードのコードだと思えばそういうものかなという気がしないでもない。が、C++が初期に遅いと言われたのってコンパイラが隠れてする仕事(コンストラクタの呼び出しとか)に対する無理解が理由にあると聞くので、無駄とわかってるところに 0 を埋めて歩くことに積極的にはなれない。staticでない未初期化変数の値をそのまま使用するのは結果が予測できないバグだけど、未初期化変数(遅延初期化変数)それ自体は問題にしないよ。■自分の不見識が明らかになるだけかもしれないけど……。「スタックのドカ食い対策」<スタックで間に合ってるならスタックの方が速いんじゃないの? 「WINVERによる条件コンパイル」<ソース分裂バイナリ分裂はない方がいいし、俺プリプロセッサ嫌いなんだよね(<誰も聞いていない! 共感性・説得力皆無!)。さらに共感を得られそうにないことを書くと、namespaceが導入されたからグローバルな名前空間を明示するために :: を付けましょう、これまでただ Func(); と呼んでいたものを ::Func(); と書きましょう、なんてのはなんの冗談かと思う。譲るのは当然後から来たほうだし、衝突しないような名前を選ぶ、衝突が避けられないときにしぶしぶ :: を付けて区別する、くらいの態度でいるんだけど、みなさん積極的に :: を付けますね。それって(知らないしやったことないけど)まさに MFCプログラミングで名前のバッティングが避けられなかったからみんなそうしてただけなんじゃないかとも思ってるんだけど、SDKプログラミングでもわりと積極的だよね。自分が無知で異端なのかと不安になる。■途切れていた古いログを見つけた。「Fix: Send/PostMessageToAllEditors() don't send message when last window parameter is NULL.」この修正が不可解で、現在のソースに残ったコメントから以前のコードを想像できなかった(だから原型が残っていないのだろうとコメントした)。単純に m_hWndLast の NULLチェックを省いてこう直せば良かったじゃない?>if( phWndArr[i] != m_hWndLast ) この頃はまだ IsEditWnd(※後のIsSakuraMainWindow?)が引数の NULLチェックをしていないことから、先取りして phWndArr[i](※m_hWndLastではない)の NULLチェックを追加してもいい>if( phWndArr[i] != m_hWndLast && phWndArr[i] )。ま、済んだことはさておき、この時点ではまだ双子のループが存在していないことが興味深い。双子のループが誕生したのはこのコミット>「New: Grouping of the tab windows.」(←Firefoxだとアドレスバーで20回ぐらい Enterキーを押しているうちにページ内アンカー(#diff-24)が機能するけど、Operaだとリロードしてしまって永遠に機能しない。くそったれな遅延ロード。くそったれな S……)。グルーピング対応のためとはいえループは必要だったろうか(反語ではありません。結論保留)。


2016年12月16日 (金)

最終更新: 2018-03-14T23:15+0900

[SakuraEditor] poor-awk.js (15.8KiB, 2017-01-04)

行単位で加工するマクロのための定型。そのままで同時に標準入出力にもファイルドロップ(SendToを含む)にも対応している。Perl譲りなんだろうけど、Rubyの -p スイッチって便利だし実際のニーズに基づいてるよねって。

 @2018-03-10 使用例:大文字小文字を区別しない昇順ソート (ソート(case-insensitive).js)

マクロに登録しても良し、ソートしたいテキストファイルをドロップしても良し。

よく知らないけどプラグインだとメインメニューにコマンドを登録できたりするんだろうか。こういうものを C++で書いてエディタ本体に内蔵したくはないよね。

掲示板に貼り付けるには長いし、Wikiのマクロ投稿ページはログインを要求してきて書き込みさせてくれないしで、返信できずにここに書いてるんですよ。>「[8316] ソートの挙動の切り替えはサクラエディタ内で可能になりませんでしょうか

Meryのソートマクロを見たら実質ワンライナーだった。連打するたぐいのマクロではないとしても、自分のはゼロオーバーヘッドルールから離れすぎていた。


2016年12月18日 (日) [SakuraEditor]「Request/533 正規表現検索でサブマッチにも個別の検索色を」■別件の余録だけど過去にやった>「パターン内での色分けに対応した。JavaScriptの正規表現と違ってキャプチャの位置がわかるので、SHJSの仕様に従ってかっこを /(A)(B)(C)/ というように隣接させる必要がない。入れ子にすることも許される。入れ子にしたら一番内側の色が適用されるようにしたつもり。」コードでいうとこのファイル(shjs_style_regex_keyword(trunk2@1711).patch)の 7120行目から7153行目のあいだ、JavaScriptで検索して唯一マッチする else節がそう。ただその別件っていうのが色分けのメカニズムを置き換えるものだったので、ポンと持って行くことはできない、かもしれない。知識をアップデートしないと今のサクラエディタの色分けについてはわからない。■ただねえ、マッチ全体がたとえば黄色になって、その中の一部(キャプチャ部分)が赤や青になったら、黄色は赤や青で分断されることになるんだよね。キャプチャが入れ子になってると赤の一部が青で上塗りされるということも起こる。そういう入れ子関係をただ一番内側の色で塗るということにしてわかりやすいかというと疑問。関係がわかるように(たとえば高さを変えた色つきのアンダーラインなんかで)うまく塗り分けしたくなる<もちろんそういう凝ったプレゼンテーションは管轄外なので、これはやらないフラグ。■正規表現キーワードでは使い道がないわけではない。たとえばマッチの条件が異なる複数の要素から構成されているとき、ここは記号の色、ここは文字列の色、ここはマッチの条件には必要だけど特になんでもない部分なのでテキストの色、みたいに塗り分けることができるので。もちろんそのためには正規表現キーワードの色設定の保存のしかたまで考えないといけないが。■なんといいますか、過去のパッチを読み返してみたり(あ、セミコロンダブってる>「static const Range Null;;」)、高校生のときのノートを(捨てる前に)眺めてみたりするたび思う。あの頃俺は賢かった(今はもう理解できない……)。たぶん没入することが必要なんだな。振り返ってるときにはそれがない。■パッチを読んでいて……。「-で始まる行がいっぱい」<嬉しい!やってやったぜ! 「+で始まる行が凝集している」<ファイルを移動しただけか、正しい徴候。それかなんとなく気に入らなくてイチから書き直す悪い癖の発露。「あちこちに散らばる + の行」<やり方か仕組みのどちらかが間違ってる。「交互に現れる + の行と - の行」<普通っぽい。あと手前味噌だけどコメントが丁寧だと思った。「あ、そうなんだ。勉強になります(書かれていなければわかっていなかった)」って感じ。やっぱり時間差があっても自分は自分で、阿吽の呼吸で疑問と答えが噛み合うところがある。■アクセスログの一覧を下の方まで眺めてたら、こんな名前のファイルが3ヒットしていた>subpattern_highlight.rev2.patch。え、あれ? こんなんやってたっけ。「脳log[20120517p01] サブパターンハイライト。」つい反応してしまうくらいお気に入りのネタではあるんだな。■■■漢検の対策テキストから啐啄同時(※ATOKで一発変換できない)という四字熟語を仕入れた。ここ(「阿吽の呼吸で~」)が使い所だと思うのだけど、どういう形で文に組み込めるんだろうか。


2016年12月20日 (火) いやあ、履歴を読んでるだけで楽しい!「秀まるおのホームページ(サイトー企画)-秀丸エディタ改版履歴」■カラーマーカーって秀丸由来の名前と機能だったのねん。そういうのはエディタでなくワープロの機能だと思うから興味ないよ。筆箱に蛍光ペンが入っていたこともないよ(ほとんど教科書に注釈を付けるだけで済ませて読み返しもしない)。


2016年12月21日 (水) [正規表現]「absent operatorの挙動だが、(?~) は何にもマッチしないのが期待値なんだろうか?」■空パターンはすべての文字列に含まれている(※空文字列を含め何にでもマッチする)というのが普通なので、そういう文字列以外にマッチするパターン(※非包含オペレータが表すもの)は何にもマッチしないのだろうかってことだよね。文字の集合に対する [] (どの文字にもマッチしない)と [^] (どの文字にもマッチする) とは反対なのが面白い。■文字集合を使った初心者のよくやる間違い [^ここに文字の集合ではなく列を書いてしまう] や、お手軽だが不完全な代替 .*? を使ったパターンに対して、正しく、簡単で、理論を逸脱しない答えが用意されるのが待ち遠しい。■日本語部分だけ読んだ>「正規表現における 非包含オペレータの提案」。■いや待てよ。非包含オペレータが扱う典型的なパターンはどういうものだろう。foo だろうか .*foo.* だろうか。俺は (?~) について書いてるつもりで (?~.*) について書いていたんだろうか。二つが同じだとすると部分一致ではなく完全一致であることを明示するために (?~^foo$) みたいにアンカーを付けたくなるだろうから両者は区別されるんだろう。じゃあやっぱり勘違いしてた? s=uvw みたいな文字で構成された式を「文字列がパターンを含む? どういうこと?」と読んで疑問のままにしてるんだけど、その辺を含めて PDFを読み直したい。


2016年12月26日 (月) [SakuraEditor] ダイアログのフォントがMS Pゴシックの 9(単位はポイント?)なんだけど、これを刷新したい。検索文字列だとか、タイトルバー文字列のフォーマットだとか、タイプ別設定の拡張子リストだとか、特に入力欄の文字が米粒で、ノートパソコンのコントラストの低い液晶で判読できないのがつらい。■リソースファイルっていうのは(仕組みは知らないけど)良くできたもので、「FONT 9, "MS Pゴシック"」という行を軒並み「FONT 12, "Meiryo UI"」に書き換えるだけで大体はうまくいく(みたい)。ひと手間必要だったのはオーナードローのリストボックスで、それも WM_MEASUREITEMを処理するだけのこと。■ネガティブ要素はいろいろあるよ。XPと Vistaにはデフォルトで Meiryo UIがインストールされていないとか、設定ダイアログの縦が 730ピクセル程度(@96DPI)になるせいで、800×600程度の画面(最初のパソコンの 15インチブラウン管モニタがこれだった)では使えなくなるとか。でも「自分の」環境では問題がないのがわかっていれば、もう戻れないくらい見違えるんだよ>MeiryoDialog.png(118KiB)。■徹底するならツールバーとかタブコントロールのタブの文字サイズを変更する手段を講じる必要があるし、一部のダイアログ(FileOpen/FileSaveの他にもたぶん気付いてないものが)はリソースファイルの数字をいじる必要があるらしくちょっと表示が狂ったりはみ出たりしてる。■■■@2016-12-27 最新の trunk2では問題ないけど、2.0.3.1ベースでは共通設定のツールバータブのリストビューの項目サイズだけが、WM_MEASUREITEMに答えてもフォントのサイズに合ってなかった。まさにコレ>「[r3879] Fix: 共通設定-ツールバーのリストボックスの高さが正しく設定されない」。正しくない値が WM_MEASUREITEMより後の2か所で求められ設定されていた。旧版は自分が WM_MEASUREITEMに反応するために最初に書いたコードとそっくり同じだ。たぶんこういうことなんだろう>「For class and private DCs, GetDC leaves the previously assigned attributes unchanged. However, for common DCs, GetDC assigns default attributes to the DC each time it is retrieved. For example, the default font is System, which is a bitmap font. Because of this, the handle to a common DC returned by GetDC does not tell you what font, color, or brush was used when the window was drawn.」。ダイアログのウィンドウハンドルを使って得る DCが「common DC」なのかって聞かれると自信がないけど。あるいはまだ一度も SelectFont(SelectObject)してなかっただけとか。■r3879はフォントに高さを聞いたがそれを知らない俺はリソースファイルがうまくやるやり方に従った。オーナードローコントロール以外はそれで文字が切れたりしてなかったから。カスタムDPIでもうまくやるかは知らない。■ちなみに MapDialogRect(※先のスクリーンショットに写しておきました)を使うのは3番目の(それで最後の)案で、その前には引数を4つ(left,top,right,bottom)も取らない GetDialogBaseUnitsを検討した。実際 MapDialogRectで使ってるのは bottomと topの2つだけだし、それが GetDialogBaseUnits関数は引数をひとつも取らないって言うんだから、これで間に合うならこれを使おうとするだろう。……でもひとつも? ダイアログのウィンドウハンドルもいらない? 実行コンテクストを参照してマジカルな方法で答えを返すとでも? 答えはここに>「GetDialogBaseUnits is a crock – The Old New Thing」 crockは「ナンセンス、でたらめ」という意味が何番目かに載ってる。■WM_MEASUREITEMに反応してオーナードローアイテムの高さを変える方法は邪道ではある(が、適切なデフォルトを設定しているだけだとポジティブに考えたい)。変更対象のファイルが個別のプロパティシートに対応したものではなく、基底クラスのもの(prop/CPropCommon.cpp, typeprop/CPropTypes.cpp)だということからそれが知れる。WM_MEASUREITEMは WM_INITDIALOGより前に呼ばれるから、基底クラスが派生クラスにディスパッチする仕組みが働かないんだよね(だから基底クラスのファイルに直に書いた)。これが同じ事情を説明してる>「OnMeasureItem will be called only if the control's class is created at run time, or it is created with the LBS_OWNERDRAWVARIABLE or CBS_OWNERDRAWVARIABLE style. If the control is created by the dialog editor, OnMeasureItem will not be called. This is because the WM_MEASUREITEM message is sent early in the creation process of the control. If you subclass by using DDX_Control, SubclassDlgItem, or SubclassWindow, the subclassing usually occurs after the creation process. Therefore, there is no way to handle the WM_MEASUREITEM message in the control's OnChildNotify function, which is the mechanism MFC uses to implement ON_WM_MEASUREITEM_REFLECT.」 邪道だろうがなんだろうが、ツールバータブの個別対応コードを削るだけでダイアログのフォントを正しく変更できたのだから嬉しい。「やってやったぜ!」■これはなんだろう>「Imp: ダイアログのフォント変更設定追加 · mocaskr/sakura@af39f17」 リソースからコンパイル済みのダイアログテンプレートを読み込んで、それからダイアログを作成するまでのあいだにフォント指定を書き換えるってこと? うへぇ、こんなんMS Pゴシックにも Meiryo UIにも満足できないこだわり派のユーザーも黙っちゃうよ。そうか、実行時に変更できるのか。■「履歴を読んでるだけで楽しい」とか書いていてもそれは楽しそうだ、というだけのことで、実際に読んではいなかったり。「列を指定してソート。たしか秀丸にあったことで知った機能」というのもそうだし、「ダイアログのフォントとしてMeiryo UIが指定可能」というのも、検索に引っかかって初めて気付くわけで、検索可能なオンラインのヘルプっていうのは広告塔なのだね。■ダイアログのフォント指定は言語設定と同じように特別な配慮が必要な設定だろうか。つまり、表示言語をうっかりクリンゴン語に変更してしまうとスタートレックを見たこともない自分は元の設定に戻すことさえできなくて設定画面の迷宮で途方に暮れてしまうわけだけど、ダイアログのフォント設定を間違えたり壊したりすると同じように元に戻せなくなりそうなので。※iniファイルを直接編集するという解決法は、可能であるというだけであって、利用者に求めていいことではない(俺だってやりたくない)。■実はフォント設定にからめてセキュリティフォントをからかってやろうとしたのだけど、自分の想像が及ぶ程度の素朴な仕組み(※salt付きの換字暗号)ではなかったのでやめた>「自称完璧なマイナンバー保護技術『セキュリティフォント』 その1 - Windows 2000 Blog


2016年12月28日 (水) [SakuraEditor] タイプ別設定のカラータブのアクセラレータキー &C がかぶってるんだよね……。■それとこれは Windows(Vista)に固有なのかもしれないけど、&> に対しては [Alt]+[.(>)]でいけるんだけど、&< に対しては [Alt]+[,(<)]ではダメで、[Alt]+[Shift]+[,(<)]でないと効かない。たしかに < の文字を入力するためには [Shift]キーが必要だけどさ、この非対称は?■あとタイプ別設定のキーワードヘルプタブの「ヒットした次の辞書も検索(&A)」だけが他と違ってフォーカスするだけでチェックが切り替わらない。■グループ化されたラジオボタンに対するアクセラレータキーはグループに対して1つだけ割り当てることにしたらすっきりすると思うんだけど、今更かな。