/ 最近 .rdf 追記 設定 本棚

脳log[2018-01-09~]



2018年01月09日 (火) なんだってー!!!「まず読み方。async:エイシンク await:アウェイト」■asyncって asynchronousの略でしょ、だから「アシンクロナス」で「アシンク」でしょって思ってました。違いました。エイシンクロナスだってさ。■aは否定の接頭辞。asymmetryとか、anemiaとか……。もしや! 「アシンメトリ」ではなくエイシンメトリって読むらしいですよ。■ブコメによるとアシンクとエイシンクはそこそこ拮抗しているらしい。冠詞の a や the だって強調してエイや thee と発音するみたいだからそんなもんか。むしろその結果がエイシンクロナスとも言えるわけで。だけど、全部が全部わざとなのか、俺みたいに知らなかった人間だっているでしょう。


2017年12月31日 (日) 「収支が不足する」という新聞の見出し。ネットでも見られる>「兵庫県、収支不足解消へ…震災後初 : ニュース : 読売新聞(YOMIURI ONLINE)」 収入と支出が不足すると読んだのだけど、意味がわからない。わからなくはないのかな。キャッシュフローが細っている、経済活動が萎縮しているという意味にとれなくはない。どこに基準をおいて不足していると判断するのか、それを意義付ける根拠に興味がなくはないが、つまり緊縮財政へのカウンターとしてだが、もちろんそういう記事ではない。


2017年12月29日 (金) 気がつきました。WR250Rは80km/hからが本番だと。サスペンションがアスファルトを踏みしめて安定する。あとやっぱり音がいい。単調な音、ふん詰まった音ではなく、ハーモニーがある。しかし80km/hからは高速道路の領域なのでアクセルを戻さざるを得ない。そして回転数とともに下がるテンション。良くないね! 乗り手を煽る乗り物は!


2017年12月26日 (火) IEのDOMの背後にある歴史的データ構造と移行戦略。既存のデータ構造の上に API層を作り、データ構造への直接依存を周辺のコードから取り除いたのち、API層の内側を全取っ替えする。API層というのも特徴的で、DOMをそのままクラスライブラリにはしなかった。「Modernizing the DOM tree in Microsoft Edge - Microsoft Edge Dev BlogMicrosoft Edge Dev Blog」 たいへん面白く勇気づけられるお話。いったいどこに人類の叡智を結集した妥協なき理想のコードがあるのか。環境が変わり要求が変わるからどこにも存在しないんだな。■「特徴的な API層」 読み取りと書き込みを意識して分けさせる構成。JavaScriptで DOMを操作するときにも必要な考え>「Speeding up the slowest Firefox(23), separate DOM manipulation from reading .offsetXXX or getComputedStyle, which is in textfunc.jk.js」。


2017年12月25日 (月) 去年から1枚のバスタオルを1週間に1回だけ洗ってる。1週間に1回しか使ってないわけじゃない。7回使ってる。ひと月にではない1週間につきだ。断片的に書くせいで無駄に補足が長くなった。無駄ついでに補足すると7枚のタオルがあるわけでもない。煙に巻こうとしてるのかな。誤解の余地のない正確な描写が難しいだけ。■余裕のないちまいタオルは却下。しかしバスタオルは洗濯機でも物干し竿でも場所をとる。ほとんどそれだけのために洗濯してるのかと錯覚するほどだ。というのは、シャツの洗濯頻度を1シーズンに数回に減らしたから次にバスタオルが目立ってきたという事情がある。■シャツについて。洗濯すると消耗するんだよね。頻繁に洗濯しないでいいように肌が直接触れないようにしてるし、代わりにではないけど(まったくだ)、肌着は毎日洗ってる>20141020。■バスタオルを使うのって1日で1番きれいな状態の体に対して1分に満たない時間だけだ。それで毎日洗濯が必要なほど汚れるというのなら体の洗い方が間違ってる。それでも、ぬれた状態のタオルを長時間放置すると悪臭が発生するのは避けられない。1、2時間以内に速やかに乾かす必要がある。肌着と同じく例のあれ(※さっきリンクした)の出番です。


2017年12月24日 (日) [JavaScript] 再掲>「JSMinでアグレッシブ(level 3 of 3)に最小化する(と、不要な空白と全ての改行が取り除かれるので、セミコロンインサーションの余地がなくなって、一つのセミコロンも省略できなくなる)のが好き(20080820p01)」■JavaScriptでの実装(jsmin.js)をエディタのマクロに加工して使ってる。■再掲2>「いざ自分で JavaScriptを書くと、=== の使い所がなくて困る。つまり、異なる型の変数を比較する場面というのが想定されていないから、それに対処する理由がない。(20161104)」■異なる型の変数を「見分けられる」ということと「区別できない」ということの、どちらもが優劣を付けられない異なる仕様であり、それを一律に === へ統一することなどできはしない、というのが意見。=== を使うことでテキトーなものを投げ渡してもうまく対処してくれることが期待されてしまうし、実際それが仕様のうちになってしまう。それは俺の意図するものではない。(問い)「では 1"1" が等しくなるのが意図する仕様なのか」 (答え)「そんな(変数の型を意識しないような)コードは存在しない!!!」 個人の趣味でしか許されない? TypeScript使えばえーんちゃう。TypeScriptが翻訳の結果として === を使うというのは(実際に使うかどうかは別にして)、意味が全然違って問題がない。それを意図や表現の改竄とは呼ばない。それらは今度は TypeScriptで書かれたソース上に存在するものだから。


2017年12月23日 (土) この世には、エリクサーを躊躇なく使える人間と、使えない人間がいるんだ。 | Books&Apps」■俺はエリクサーどころか MP さえも使えなかったなあ。戦勇僧魔のオーソドックスなパーティーでダンジョンに入って、結局最後まで魔法使いはお荷物なの。■最近はちょっと違う。リソースが有限でも最大火力が出せることを重視する。魔法が強いとなれば勇魔魔魔でダメージを食らう前に敵を殲滅してすすみ、MP が尽きれば MP 回復アイテムを使うなり宿屋で寝て出直すなりする。2度目なら探索の手間が減るのでより先へ進める。それを繰り返す。■敵を倒すまでの時間、攻撃を食らってる時間、回復にかける時間、すべてを最小にして効率的に、なによりも最大火力で敵を殲滅する爽快感をもって攻略をすすめる。これ以外にない。■エリクサーはボスの目前で使い、戦闘中の1ターンを節約する。■中庸がいちばんいけない。結局ゲームなのでリソースは工面できる。リソースを余らせてそこそこの火力で満足するなど意味がない。■これって年寄りの傾向かもしれないね。老い先短い年寄りが耐えて耐えてやがてたどり着く新天地に気力十分で乗り込むことを期したとして、収穫期が来る前に死んでますから。サイクルが短く、刹那的になるのはしゃーない。ロングスパンで戦略が立てられるのは若人の特権。ところで、人の一生を超えるスパンで最適な選択を考えられるのは、たとえば国だろうか。本当に?■「FF3にはエーテルがなかった: 不倒城」 こういう事情は知らなかった。FF3の初体験が NDS版で、2回目がこのとき(20100102)。エミュレータによる倍速プレイでプレイ時間というリソースをじゃぶじゃぶつぎ込んだ攻略だった。


2017年12月22日 (金) [SakuraEditor] てっきり novice123 さんはそうだと思ってたんだけど違った。現在活動中の Admin がいない(笑) さしあたって誰がチケットを閉じるのかw


2017年12月21日 (木) リンクをたどるという基本中の基本の操作にスクリプトで介入して期待を裏切るサイトとはうまくやることができない。つまり、Ctrl+クリックしてるのに新しいタブで開かないサイトや、Ctrl+クリックしてるのにブラウザの設定とは異なりすぐに新しいタブに移動するサイト。なぜ、余計な手間をかけて、下手な模倣をするのか。実行されないコードに優るコードはない。クライアントサイドスクリプトとはそういうものだ。実行の主体も主導権もこちらにある。


2017年12月20日 (水) 気がついたこと。俺はアマゾンのサイトへは、Ctrl+T(新しいタブを開く)、a(ブラウザに登録した検索キーワードであり、amazon.co.jpの頭文字でもある)、Delete(余計な補完を消す)、Enter(移動)で行くことがほとんどなんだけど、最近その先のページからウィッシュリストへのリンクが消えた。毎月購入するほとんどのものはウィッシュリスト経由でカートに入れている。消えたものを探してうろうろしたりはしない。■気がついたこと。それだけでアマゾン断ちはできる。アマゾンが離れていくのなら俺は追いかけない。アマゾンに依存してきていなければそれは可能。■あとね、マーケットプレイスで本の送料が統一価格ではなくなったけど、未だに「関東への配送料○○円」ってやってんだよね。そのうえ出品者のページから配送料テーブルが取り除かれ、すべて、カートに入れて精算直前の画面から出品者十把一絡げの合計送料いくら、で確認しろという。買えないよね。買い物に必要な情報を隠して、物を売る気がない。■ひょっとしたら配送料を決定するパラメータが増えて柔軟性が増した結果、注文確定直前まで実際の配送料がわからないことになったのだろうか。オープンプライスに感じる不便さみたいなものなのだろうか。例外的なプロモーションのために日常の使い勝手を犠牲にしたのだろうか。いいよ、さようなら。


2017年12月19日 (火) [LUTS]「Kid Delf IRUS Limited - いらっしゃいませ LUTSDOLLです。」■中の人の事情は知らないけど、ここ数年で初めてのヒット。強いのか泣きそうなのかよくわからない表情。すべて同じモデルなのだとしたらそれは能面ぽい。製造に移ってからどれだけ微妙なニュアンスを再現できるかだけが心配。


2017年12月18日 (月) [SakuraEditor] サクラエディタBBS[8303]■GREP置換とな。GREPはいつも Ctrl+G だから気づかなかったけどその下にそういうコマンドがある。いや知ってたけどね、実際にあるのを確かめたのは初めてだった。しかし……、デバッグのためという理由があってさえ試すことができなかった。■オプションの多さだろうか。取り返しのつかなさだろうか(※バックアップオプションはある)。置換の及ぶ対象の予測不可能性だろうか。■XPかそれより前の Windowsではショートカットに埋め込んだ引数が無視されて無理だったかもしれないけど、SendTo に GREP置換モードで起動するオプションを付けたサクラエディタのショートカットを入れておいて、フォルダを右クリックから送るようにするのが使いたい状況からも一部のオプション指定を省略できることからも楽だと思う。実際にそうできそうだ>「コマンドラインオプション(sakura-editor.sourceforge.net)」。■あるいはもうひとつの思いつき。まず GREPする。出力形式に種類があってグループ化されてると問題があるんだけど、そうでない場合は「/path/to/file.withmatch(line,keta) [charcode]: matchline」という行のリストが出力される。この GREP出力に基づいて選択的に置換を実行できれば、事前に対象が把握できて安心できるし、一部を除外したければ行を削除するなり選択範囲から外すなりして対応できる。ヒントは svk commit にあった。svk add a.txt b.txt && svk commit するとコミットメッセージを入力するためにエディタが起動し予めこう入力されている。「(改行)=== Targets to commit (you may delete items from it) ===(改行)A /path/a.txt(改行)A /path/b.txt」 試したことはないけど、Aから始まる行を削除することで一部の svk add のコミットを先送りできるのだと思う。もちろんコミット対象を指定して svk commit しても同じことができるんだけど、svk commit してから除外する作業フローが許されているし、実際にそうしたいだろうシチュエーションに誰でもが遭遇しうるだろうと思う。■GREP置換に話を戻すけど、改行が増減しない限りはうまくいくだろう。特定のファイルの特定の行が特定の内容を持っていることを確認してから、その行を対象に置換を実行する、というようなマクロなりコマンドなりがあると、既存の GREPなりタグジャンプなりを含んだ作業フローに組み込みやすいと思う。逆に言うと今の GREP置換は異質。スクリプトが使えない人が必要とするシチュエーションがあるのだろうとは想像できるけど、コマンドラインオプションで制御したくなる程度に、GREPと同じ程度に異質。いやひょっとして、GREPはそのあとでエディタで開きたいという考えがあって実行するけど、GREP置換の場合はどうだろう。■■■2003年に投稿されたマクロ>「Macro/投稿/133 Grep結果から複数のファイルをまとめて置換処理 - SakuraEditorWiki」 同じことを考え、とっくに作成している人がいた!


2017年12月16日 (土)

最終更新: 2018-02-15T12:43+0900

[SakuraEditor] insert_datetime.patch(-44行/+29行)

 F5で現在の日付と時刻を挿入したい。

メモ帳でできるように……と書くために今試してみたのだけど、挿入されたのが「00:49 2017-12-17」だった。なんだこのキモい並びは。年月日も時刻もフォーマットこそ OSの地域と言語のオプションに従ってはいるものの、その前後関係が決定的にYMD文化圏のそれではない。

 しかし日付は日付、時刻は時刻。

メモ帳はどうでもいい。サクラエディタには「日付を挿入」コマンドと「時刻を挿入」コマンドがある。それぞれのフォーマットをカスタマイズできる。日付を挿入するコマンドを F5 に割り当てて、そのフォーマットを「yyyy-MM-dd HH:mm」にすればいいと考える。できない。日付書式と時刻書式が分かれていて同時に使用できないせい。

ソースを見れば一目瞭然だけど、Windowsが GetDateFormatと GetTimeFormatという2つの APIを公開していて、サクラエディタのコマンドがその薄い被せ物だというのが、おそらくこの不便な分離の理由。くっつけたっていいでしょ。

 注釈(パッチの上から順に)

  1. TCHAR* で受け取った引数を const TCHAR* で返すのは筋が通らない。constを外した。
  2. MyGetDateFormat/MyGetTimeFormat には 3引数のものとフラグとポインタの 2引数が追加された 5引数のオーバーロードが存在するが、追加された 2引数は過度に複雑で目的が不明瞭なので 1引数にまとめた。CFormatManagerは DLLSHAREDATAから切り出された過去があるらしく、DLLSHAREDATAのメンバ構成がそのまま引数になっていたのだろう。しかし過去は過去。
  3. 省かれたコロンコロンについては以前に書いた>「namespaceが導入されたからグローバルな名前空間を明示するために :: を付けましょう、これまでただ Func(); と呼んでいたものを ::Func(); と書きましょう、なんてのはなんの冗談かと思う。譲るのは当然後から来たほうだし、衝突しないような名前を選ぶ、衝突が避けられないときにしぶしぶ :: を付けて区別する、くらいの態度で(20161214)
  4. GetDateFormat/GetTimeFormat APIが書き込みを行わなかった場合に戻り値となる文字列が不定になるが、呼び出し元がそれを知る(すべ)がない。CFormatManagerの責任で戻り値をターミネイトする。
  5. カスタムフォーマットの場合に限り GetDateFormatと GetTimeFormatの両方の APIを呼ぶ。そうでないと OSの設定で日付フォーマットを「'hh' yyyy'年'M'月'd'日'」みたいにしたときに hh がそのまま hh とは表示されなくなる。

    書式文字列と書き込み先が同じポインタでも問題ないみたい。フォーマットに対して書き込み文字数の方が多い場合があるとしたら問題になるだろうか。ANSI版で日本語の曜日が書き込まれるときとか?

  6. CFormatManagerのメンバ変数をポインタから参照へ。ポインタであるならそれは nullable であるので NULLチェックをしなければいけない。それをしていないのなら、その必要がないとわかっているのなら、それを表明できる参照型を使わない理由がない。

 「前」と「後」でも良く解らんが [2005/8/10] - 晶紀の館

GetTimeFormatは時刻だけしか対応していなくて、日付を整形したい場合はGetDateFormatというAPIを使うことになります。これが2つに分かれている所為で、両方を一度に整形したい場合に実に厄介な問題が発生するんですが、まぁそれは置いておいて………。

置いておかないで。知りたい。

「tt」が「AM」になるのか「午前」になるのかは、実行したOSの設定次第です(日本語設定なら「午前」とか)。

それでは、日本語環境で「t」はどうやって表示されるのでしょう。

「AM」が「A」、「PM」が「P」に対応するみたいで、なんとなく「t」は「tt」の短縮形じゃないかと想像付くんですけど、果たして、「午前」「午後」はどのように短縮されるんでしょうかね…。

wwwwww

 コンストラクタからコンストラクタを呼ぶ - 役に立たないプログラミングTip - 晶紀の館

20170908p02で書いた明示的デストラクタ呼び出しと placement new の組み合わせがここでも。そんなにありふれてるかなあ。

20170908p02で結論が出てるけど、一時オブジェクトとスワップするのが最適解。ナンセンスに思えた途中の試行が実はいいセンいっていたという。さらに最近の C++ なら素直に移譲コンストラクタが使える(らしい)。

 インラインの基準@2018-02-06

約200行ほどの関数です。別にどうと言うことの無い関数なんですが(個人的には幾つかに分割したいんですけど)、何故にinlineになっているのかっ!

インライン展開するには大きすぎるから。って言うか、そもそもインライン展開する必要ないでしょ。プログラムの起動時に1回だけ呼ばれる初期化用の関数なんだし。

自分がわりと inline を、とりあえず付けておこうっていう人間かな。このファイル(脳log[20170908p01] ツールチップ>a.patch)の中を inline で検索すると知れると思うけど。

基準は、今考えてるんだけど、以下のいずれか。

  • 小さいこと(1~3行)
  • フラグによる分岐と関数呼び出しばかりで、実質的に小さいこと
  • コードブロックの目的と入出力を明示するために名前を付けて関数化したけれど、1か所からしか呼び出されないこと

最近 C++ In Depthシリーズを読み返してるんだけど、そして実はシリーズに見えてシリーズとは書かれていないんだけど、『Efficient C++』の中に「シングルトン関数」という呼び名で3番目の関数のインライン考が載せられていた。同意するかは読み手に任されるとしても、そういう考えのもとにインライン化することもあるってことで。

2番目の「実質的に小さい」は、よく考えると嘘かもわからんね。呼び出す関数の引数が多かったり、呼び出すつもりの関数がインライン展開されたりすると、ソースコード上の見た目以上に大きいということがわりにありそう。

他の関数を真似してinlineをつけたんだと思うけど、「訳がわからんけど動くからそれで良いや」的にコンパイラを誤魔化すだけのテクニックなんて使用厳禁っ!

最近知ったんだけど、inlineを付けるだけで関数の多重定義によるリンクエラーが避けられるらしいですねえ>20170410。そういうことをしだすと、「道具として使う」を通り越して乱用の域に達してると思う。

pHを測る機械があって、ピッと簡単に数字が出るのかは実際に使わなかったから知らないけど、「原理も知らずに……(もにょもにょ)」というぼやきが聞こえてきたのが印象に残ってる。原理を知らないと手段の優劣も限界も条件にあった適切な選択もわからんもんね。

道具ってのは元をたどれば誰かが目的のために最適な手段を求めた結果として生み出された経緯があると思う。予め用意された道具を使っているだけではアマチュアの域を出られないのではなくて? 知の高速道路に関係する話。開拓者とフォロワーの違い。大多数にはハイアマチュアも届かない存在かもしれんけど。

 表示する日付時刻のフォーマットをカスタマイズ - Tablacus Explorer - タブファイラー開発ブログ

日付と時刻を同じひとつのフォーマットで指定できる。そのソースがたぶんここ>「HRESULT tePSFormatForDisplay(PROPERTYKEY *ppropKey, VARIANT *pv, DWORD pdfFlags, LPWSTR *ppszDisplay)

[hHmst]が時刻を表すフォーマット文字としてリストでき、[dMyg]が日付の文字としてリストできる。時刻文字が見つかると日付文字が見つかるまで、日付文字が見つかると時刻文字が見つかるまで API 呼び出しを遅延し、切り替わる部分まで(もしくは文字列末尾まで)をフォーマット文字列として、対応する API を呼び出している。どんなフォーマットでも最低1回は GetDateFormat を呼び出してるっぽいのは、2値だと if 文の条件がシンプルに書けるからか。必ず1度は、それも最初に日付フォーマット文字に出くわすだろうという推定は、すごく妥当だと思います。

これが真摯な対応というべきものか。俺は2割のコーナーケースを捨てて過度にシンプルな解法を選びがち。

 datetime - Win32: GetDateFormat and GetTimeFormat exist. GetDateTimeFormat? - Stack Overflow

先に挙げたコードの通りの回答。たぶん AM とか PM とか Thu とか Sat とか Oct とかに展開された文字列が再度フォーマット文字として解釈されてしまうんだろう。まじめに挙げると問題のあるロカールでは問題ばかりだった。