/ 最近 .rdf 追記 設定 本棚

脳log[2012-07-07~]



2012年07月07日 (土) [SakuraEditor] DirectWriteの続き。文字の描画結果をビットマップとして保存することで DirectWriteのハイレベルな APIをスタンプにすることができた。まともな速度で。■「BugReport/101 - SakuraEditorWiki」同じフォント(Consolas)を指定しても範囲内の一部の文字が表示されたりされなかったりするのよね。表示されるのは DirectWriteを使った方。■ビットマップでなく D2Dサーフィス(っていうの?)に書き込む方がハードウェアアクセラレーションが期待できてスケーリングも容易そうで正道なんだろうけど、改行マークとかスペースの代替表示とか選択表示とか諸々すべての移植が面倒なのであった。■こういうときは「諸々すべて」を具体的に列挙してみるのがとっかかりとしてよさそうだ。

最終更新: 2013-05-26T23:26+0900

Re:読めないとはこういうこと→勉強できない子をあぶりだす5つの質問 読書猿Classic: between / beyond readers

この5つの文章は難しい。この文章を読んで思うのは、自分にとって国語(日本語)と論理性がまったく結びついていない*ということ。母国語であるがゆえに考える間もなく言っていることの表層は解る。背後の論理まで理解できなくてもわかったつもりで読み流してしまう。あるいは興味が字面に集中していてその意味や意図を読み取る意思に欠けるという個人的事情もあるか。算数の文章題を解くつもりで頭を切り換えて、立ち止まりながら振り返りながら「ねずみ>犬」と頭にメモを残しながら読まないと理解できない。これが口頭だったらどうか。俺はバカだ。

* そのせいで国語のテスト(センター試験を含む)では余計な苦労をした気がする。だれも問題文中に根拠を探して論理的に妥当な解答を用意するものだとは教えてくれなかった。ルールを知らずにゲームをプレイしていたようなもので、そんなアンサガをよく放り投げなかったものだ。


2012年07月05日 (木) そろそろ PCと PS3の起動がはばかられる暑さになってきた。寝苦しい。PRS-650にますます活躍してもらうとしよう。今はすぐそばで両前足を投げ出して伸びてるにゃんこも涼しい部屋へ出て行くだろう。現金なやつだからな。


2012年07月04日 (水) (7月3日の日記) Amazonの Wishlistの購入・未購入フィルタが壊れてる。以前に購入しましたと表示されるにも関わらずいくつかの商品が未購入の方に現れる。


2012年07月03日 (火) プログラミングは名詞と動詞を定義して文章を書く行為だ。その観点では C++は言語が強要するノイズが多すぎて読むのに適さない。げんなりする。■複雑さを前にして自壊しないために構造が必要だといっても。ライブラリを書くための言語だといっても。


2012年07月02日 (月) これは何に対して文句をつけたらいいのだろう。Firefox13?RadeonHD6850?スムーズスクロールで画面の真ん中近くに亀裂が走る。読もうとしてるのに……。


2012年07月01日 (日)

最終更新: 2012-07-01T14:27+0900

[SakuraEditor] CEditView::IsSearchStringという無茶な関数。

  • 検索条件を thisで与え、検索対象を引数で与える。(なぜ検索対象が可変?そのせいで対象となる文字列(連続したバッファ)が必要で、将来的に複数行検索に対応できない)
  • 仕様(出力)が検索オプションで変わる。
  • 検索コードを呼ぶのでなく自分でマッチ判定をしてる。(コピペコード)
  • 検索語ハイライトを行う CColor_Foundからしか呼ばれていない。
  • (関数の目的から)一文字一文字呼ばれることを想定しているが、検索情報を蓄えたりせず(できず)、その場その場で判断している(無駄が多い)。CColor_Foundの方が、行が変わるごとに通知があり行末に向かって順次実行されることがわかっているぶん戦略的に動ける。

というわけで、CEditView::IsSearchStringからコピペコードを廃すると CColor_Foundが知りたがっている何番目の単語がマッチしたのかを知るためにさらなる検索が必要になるにもかかわらず、CEditView::IsSearchStringという変態のために仕様を決める必要は全然ない気がしてきた。仕様ってのはこれの→「sakura-unicode:1830」「複数単語検索のブックマーク・Grep対応 - ID: 3539115」。CEditView::IsSearchStringには消えてもらって CColor_Foundと CSearchAgent::SearchWordの組み合わせで何とかすべき問題ではないかと。SearchWordだと検索結果が改行をまたぐようになってもそのままで適応する利点もある(CColor_Foundと CColorStrategyの方には対処が必要だが)。


2012年06月30日 (土) ミンサガ3週目終了。実機を含めたら6週目。おかしいな GT5をやってるはずだったのに。


2012年06月23日 (土) [GT5] IAライセンス取得。全銀。全金は精神がささくれだつのでまだまだ取りかからない。■ G27は GTFPみたいにモーターを逆回転させる音がしないらしくてすごくすごくうらやましい。


2012年06月22日 (金)

最終更新: 2012-12-05T05:04+0900

[SakuraEditor] InsTextマクロでドキュメントを変更しても(変更)フラグが表示されない。 (BugReport/99) - SakuraEditorWiki

前に自分が引っかかったのと同根。「タブやタイトルバーに変更フラグが表示されるように修正した。フラグ自体は立ってたけど描画が行われていなかったというミス。(20100620p01)

変更フラグを管理してるのは CDocEditor。ドキュメントを変更した関数が SetModified(bool modified, bool redraw)メソッドでこれに通知するが、更新フラグが立ったとき(落ちたとき)に描画が抑制されていると、以後ドキュメントの変更をトリガにしたキャプションの変更機会を失う。キャプションの内容は変数展開、条件分岐を利用して高度にカスタマイズが可能で、キャプションの更新を必要最低限にケチるのは理に適ってる。ではどうするか。描画の抑制を描画の遅延ととらえて、抑制中に加えられた描画に影響する変更を記録して、後でまとめて描画する? Webブラウザが JavaScriptに対して行ってるように? それは大変。マクロ由来のコマンドを描画を抑制して実行してるのは CMacro。かといって CMacroがコマンド呼び出しの前後で描画を適切に維持するのは出過ぎた行為。さっき「キャプションの更新を必要最低限にケチるのは理に適ってる」と書いたけど、描画の抑制をやめるのが一番簡単。だって Charマクロで InsTextのような問題が起きないのは、Charマクロの実体関数が redrawフラグを受け取らないで常に描画を行ってるせいだから。

 余談: InsTextで何をしていたのか。

<2012-06-25> ReDrawマクロの存在を教えてもらったのでちょっと修正。なんでこんな(描画に問題があるときに実行して下さい)コマンドがあるんだか。

現在の編集ウィンドウを再描画します。何らかの原因で画面表示を最新状態に更新したい場合に使います。

【例】 ステータスバーを非表示にしたとき、メニューバーの左側にステータス情報が表示されますが、ファイル名のチップ等で消されてしまうことがあります。そういう場合に使います。

なんで手動でやらそうとしたんだ……。 </2012-06-25> <2012-07-04> ……って、その、メニューバーの左側右端に表示されるステータス情報は、もう消えなくなってるアレだ。「SourceForge.net Repository - [sakura-editor] Revision 1594</2012-07-04>

/** OneTouchIndent.js
 * サクラエディタのマクロ。
 * Tabキーに割り付けて使う。
 * 前の行にならって同じインデント(Tab,Spaceなど空白文字全般)を挿入する。
 * Enterをトリガーにしたオートインデントってイマイチじゃない?
   一段深すぎたり、空行を挿入したかったりするときに削除の手間が必要で。
   このマクロは、Tabキーを押す手間は必要だが、望まないインデントは行わない。
*/

if (OneTouchIndent()) {
	Editor.ReDraw();
} else {
	Editor.IndentTab();
}

function OneTouchIndent() // returns true(done) or false(undone)
{
	// 文字列選択中はインデント文字の挿入ではなく、インデントを行いたい。
	if (Editor.IsTextSelected) {
		return false;
	}

	var caret = eval(Editor.ExpandParameter("({y:$y-1, x:$x-1})"));

	// 前の行にならってインデントの文字と量を決定するので、先頭行では(デフォルトの)インデントを行いたい。
	if (caret.y < 1) {
		return false;
	}

	var thisline = Editor.GetLineStr(caret.y+1);
	var prevline = Editor.GetLineStr(caret.y);
	var previdnt = prevline.match(/^(?:(?![\r\n])\s)*/)[0]; // 行頭の、改行を除く空白文字

	// prevline[0...previdnt.length]
	// thisline[0...caret.x]
	if (previdnt.length <= caret.x) {
		return false;
	}
	if (previdnt.substring(0, caret.x) !== thisline.substring(0, caret.x)) {
		return false;
	}

	Editor.InsText(previdnt.substr(caret.x));
	return true;
}

 @2012-12-05

気付くのが遅すぎるけど、インデントを深くしたいときには意識的にタブキーとスペースキーを使い分けないといけなかった。そういうのを気にせずワンボタンで済ませられたらなお良かった。


2012年06月19日 (火) USBメモリ(TB-BH2/2G/R)を落とした。なくしてからけっこう気に入ってたことに気がついた。がっくり。■どんなんでも役目を果たせるからこそ選ぶ理由が欲しい。代わりがすぐには見つからない。


2012年06月17日 (日) [W53S] 今朝開いたら砂嵐だった。閉じて開き直すと一瞬だけ正常に表示するがすぐに崩れる。パカパカしてるうちに直ったが今度は周辺部の広範囲に白い斑点のようなものが浮き出てきた。昨日の雨がいけなかったのだろうか。バッテリーのは赤い水玉のままだったけど本体の方は真っ赤っかだった。スマホはいらないし、俺は auにとって客ではないようなので、auに今以上の金を落とすのも癪だ。幸いなことにいつの間にか正常に戻っていたのでまだ使える。■ W53Sのパネルとか電池とか電池蓋とかまだ買えるんだね。これは auを評価せざるを得ない。Sony Ericssonは製品ページすら残していない。


2012年06月14日 (木) [ruby-dev:45735] [ruby-trunk - Feature #6587][Open] proposal: adding new methods File.rootname and Pathname#rootname

最終更新: 2014-10-23T14:06+0900

Windows怖いよ。

 X:file.extというファイルと XX:alt.strmというファイル。

Y:\My\Desktop>echo aaa > C:a.txt

C:\a.txtを作成しようとしてアクセス拒否される。(C:a.txtは C:\a.txtと同じ?)

Y:\My\Desktop>cd /d C:
C:\>echo aaa > Y:a.txt

Y:\My\Desktop\a.txtが作成される。(Y:a.txtは必ずしも Y:\a.txtではない!)

C:\>cd /d Y:\My\Documents
Y:\My\Documents>cd /d C:
C:\>echo aaa > Y:a.txt

Y:\My\Documents\a.txtが作成される。(Y:a.txtがさっきの Y:\My\Desktop\a.txtと違う!)

C:\>echo aaa > T:a.txt

T:\a.txtが作成される。(初登場の Tドライブに関しては T:a.txtと T:\a.txtは同じ)

C:\>echo aaa > Z:a.txt

「指定されたパスが見つかりません。」(Zドライブが存在しなくても、Zがファイル名だという扱いは受けません)

X:a.txtは必ずしも Xドライブのルート直下の a.txtにアクセスするわけではなく、ワーキングディレクトリの履歴が影響してる雰囲気。コマンドプロンプトだけでなく irbでも同じ場所に作成された。ドライブごとにワーキングディレクトリがあるとか?カレントドライブという概念。X:foo\barはカレントドライブを上書きする相対パス?

ちなみに、Cや Tや Yが CCや TTや YYだったりすると、それは(ドライブレターではありえないため)カレントディレクトリの CC(TT,YY)というファイルの a.txtという代替ストリームへの書き込みになるみたい。(代替ストリームの内容を確認する簡単な方法は moreコマンドだって)

 / というパスと \ というパス。

大体どちらもカレントドライブの直下を指すみたい。直接 Windows APIを叩いてみてはいないけど。

 @2014-10-23 本当にあった。

=C: =D: など    ドライブ毎のカレントディレクトリを保持(移動したことのあるドライブのみ)


2012年06月13日 (水) Fx13.「ライブブックマークを読み込んでいます…」このメッセージを何度読んだだろうね。ブックマークツールバーの上でポインタを左右に動かすと*必ず*リストの先頭に表示され、コンマ1、2秒で消える。チラチラガタガタする表示がうっとうしい。それは見せる価値のある情報か?常に最新なのであればフィードにアクセスできないときだけ知らせたらいいだろう。■(無題)タブはなくなってしまったん?内容を表示するしないの設定に関わらず「新しいタブ」というページがタブの履歴の先頭にエントリしてる。白紙のページの履歴なんていらんのだけど。あってもそんなに邪魔じゃないと言われればそうなんだけど、ローギアに入ってるのにまだシフトペダルを下に踏めるような気持ち悪さ(※DR250Rは違ったよ)。