/ 最近 .rdf 追記 設定 本棚

脳log[2017-10-14~]



2017年10月14日 (土) あっぱれキルミスト>BabyPleaseKillMe.png


2017年10月13日 (金) 他人事ではなくなってきたぞ。「ヤマハ発動機は、同社二輪車に神戸製鋼のアルミ押出材が使われており、部品の特定を確認を急いでいることを明らかにした。 アルミ押出材は高強度で加工がしやすく、軽量化にも適している。二輪車では、リアアームなどに使われているという。ただ、どのモデルにどのような形で使用されているかは「確認を急いでいる」(同社広報担当)段階だ。


2017年10月08日 (日) 車が一台も通らない信号を守れと声高に叫ぶ人は何を守っているのだろう - 接客業はつらいよ! あけすけビッチかんどー日記!」■こういう信号を守るのは日本人とドイツ人くらいだってね。当然のようにこうして例外が存在するわけだけど。■自分のこと。子供の前では特に守るというのはブコメの一人と同じ。赤信号だ急げーって親子で無視する姿をしばしば見かけるのも現実だけど。実際のところ子供がいようがいまいがほぼ守ってるかな。信号待ちは休憩時間。■あるとき発想の転換があって、自分は信号を無視してどこへ急いでいるんだろうと自問した。急いでなかった。それ以来、待つ理由がないから無視するのではなく、破る理由がないから守ることにしてる。■キリスト教にもそういう戒めがあったと思うけど、こういうとき日本人ならお天道様が見てるからって言うらしいよ。


2017年10月02日 (月) Piece Tableだって。「Text Editor: Data Structures – averylaird.com」■バッファのひとつが読み取り専用で常にファイルシステム上のファイルと内容が一致してるというのは利点になりそう(最近『Androidを支える技術Ⅰ』を読んだから特にそう思うんだろう)。イテレータを受け取らない正規表現ライブラリに検索対象のバッファを渡すにはどうすれば、と思ったが、バックアップファイルをひとつ余分に書き出すだけだろうか。10秒に1回は Ctrl+S を押す勢いなのでそれは全く気にならない。アンドゥ・リドゥは追記用バッファをそのままにして Tableの差分を記録かな。レイアウト情報(折り返しと改行)の持ち方がわからない。つまりデータの特定の部分をポイントする方法が。必ず Tableを通して参照しなければいけないだろうけど、Tableの更新でどうなるのか。ひとつ上のレイヤーで挿入や削除を監視して仮想文字配列のインデックスで管理するのか。■検索検索>「テキストエディタ用バッファの各種データ構造とその評価 (2)」たぶん前に読んだな(まったく覚えていない)。(サイトのひとつ上の階層に上って) へー、Unityもやってるんだー、そういえばそういうことをやってる津田って人のブログ日記を最近ブックマークしたなー。同じ人だ!>「津田の開発な日記 | ~ いったい何を開発しているのか ~」■まったく覚えていないのに読んだと判断できる矛盾のない理由。言葉が足りないだけ。覚えていなかったのは文書の内容で、実は外形的な特徴(色、フォント、文体など)に見覚えがあった、のだろう。残念ながらデジャヴの可能性は否定できない。


2017年09月26日 (火) 新人が三つ折りを綺麗にできない」■え、目分量だめ? と思って答えを求めて読んだが目分量だった。他でも使う考え方だけど、間違えるときにどちら方向に間違えた方がましかを予め考えておくのが有用。三つ折りの場合は、最初に折るときにちょうど三分の一を狙わずに、折り返し幅が三分の一未満かつ残りが封筒の幅の2倍未満に収まる範囲内であれば可。そうすれば次に反対側から折るときに封筒に収まる範囲内で端と折り目をぎりぎりまで近づけるように調整する余地が残る。余分なマージンは内側の端と折り目の距離となって表れるが内側なので見えない。見えないから良しとするこのへんもずぼらって言われるのかなあ。これ以上の手間はかけたくないなあ。■元増田の新人の態度には覚えがある。二十歳くらいで教習で S字で、「ストップストップドア開けて見てみ内輪差で後輪が擦れそうになってるもっと余裕を持って」みたいな注意を受けたんだけど、「じゃあ(目視してぎりぎりだけど脱輪しないことが確認できたので)」ってそのまま行こうとして再度止められた経験に重なる。■脱輪しそう(でも脱輪しない)と、三つ折りの方がいい(四つ折りがダメとは言われていない)ってこと。正しい態度だとは言わないけど、慎重な振る舞いはこうしてこれから身につけるんじゃないですか。自分のずれてる具合を勘案すれば、その新人も相当なぼんやりマイペースに分類されるかもだけど。


2017年09月25日 (月) アマゾンのなか見検索でよく目次を確認するのだけど、あれの遅延ロードが自分の都合だけの良くない実装のお手本なんだよね。つまり、「いついかなる場合でも必ず待たせます。時間を空けてもダメです。スクロールするたびに待たせます」っていう実装。■そんなに通信したくないならやめれば、とは言えない。それがなければ 10行前後におさまる章タイトルのみになったり、それすらなかったりするのだから。■オライリー・ジャパンでは必ず目次が確認できることを知っている。でもそこだけだし、他にはどことどこの出版社が、とかリストして覚える気もない。アマゾンが貴重な情報源。残念だ。


2017年09月18日 (月) Firefox 56ではWebページのスクリーンショット撮影機能が利用可能に | スラド IT」■説明を読めば読むほどそれって Abduction! っていうアドオンがやっていたことじゃないのかなって思う。選択した要素や範囲か全体を JPEGか PNG形式で保存したりクリップボードにコピーしたりできる。全体のスクリーンショット>脳log.png (8.5MiB)。 標準機能なら便利かと思いきやコメントから窺われる Firefoxのダメさ期待されてなさがつらい(俺自身 Fx23で見捨てたけど)。どうしてこうなっちゃうんだろう。


2017年09月15日 (金) エンジニアに向いている人、向いていない人ってどこが分水嶺なんだろうね? - おうさまのみみはロバのみみ」というタイトル。たとえば自分が辞書を片手にした外国人だとして、「エンジニアに向いている人、向いていない人ってどこが関ヶ原なんだろうね?」と書いてしまうことを避けられるだろうか。また、これは避けるような表現だろうか。あるいは天王山……(もういい)。


2017年09月14日 (木) GRAVITY DAZE 2の体験版が、「左の方から声がする。右スティックで左を向こう」というチュートリアルから始まる。自分は X軸リバース、Y軸リバースしか受け付けないのだけど(20170407)、この体験版は違和感なく左を向くことができた。へー珍しい、と思っていたら次は「こっちこっち上だよ」という展開。となればこれの種明かしはつい最近読んだばかりなのでわかる。チュートリアルがコンフィグを兼ねているのだった。やり直して試したのだけど、スティックをどちらへ倒しても左を向いたし、たぶん次は上を向いたのだろう。たいへん良いですね。■@2017-10-12 最近読んでる本『APIデザインの極意 Java/NetBeansアーキテクト探究ノート』に「難しいです」という表現が頻繁に出てきて、他にも「良いです」「正しいです」があるんだけど、どうにも慣れない。使われ出したのは明治・大正期の口語が最初で、昭和の真ん中頃には間違いではなくなり、現在は正しい形として学校で教えられるそうな。ではどうして違和感が。たぶん知らない所で気にする人が気にしてきたんだろう。こういう型の投稿文を読み上げるときに「の」を補うようにしていた人の例が見つかるし、たぶん出版物でも。カリ活用が一部を除いて口語から欠落しているせいで、言い切りだと問題にならないものがです・ます調にしようとすると表現に困ってしまうらしい。そういう苦しさ、舌足らずでつたない印象が違和感として伝わってしまう。■というのが「たいへん良いですね」へブーメランとして返ってくる。「良いです」の違和感が「良いですね」「良いでしょう」では消えてしまうのが謎。■「ないです」も良くないね、つい口から出るけど>20170214


2017年09月13日 (水) PCマウスを選ぶときは「dpi」にも注目を ロジクールから100円ショップの品まで、性能を実測してみた - はてなニュース」■知らなかった。ポインタオプションで最速の設定にしてるのを、代わりにDPIを上げることでも実現できて、しかも増幅された疑似DPIではなくなるから 1ドット単位での移動も可能になる、と。■しかしトラックマン マーブル(300dpi)は唯一無二なのがなあ……。


2017年09月12日 (火) YouTubeの新 favicon. すぐに色あせそうな安っちい蛍光色には触れないけども、ロゴと違って角張ってるのはどうなのって思ってた。それは俺のブラウザ(Fx22)が古いせいでした。IE9は表示すらしない。■最新の CSSと HTTPSの新しい暗号化が古いブラウザを締め出していく。スタイルシートは切れば読めるようになるが、HTTPSは処置なし。安全な暗号化方式についてサーバーと合意できない。依存せず離れられるかどうかを試されてるのだと思えば悪くはない(強がり言ってら)。■@2017-10-15 最近「Captive Portal」という言葉を知った。captiveとはまたけっこうな単語を選んだものだと思うが、これを避けるのに HTTPSが役立つらしい。つらいね。captiveもそうだし、お金を出さないでいい代わりに自分が売り物にされるというのも。だけど広く平等なアクセスを可能にしていると見れば、悪いことではない。関わりたくはないけど。俺は貧困ビジネスを否定する根拠を持っていない。


2017年09月08日 (金) [SakuraEditor] ツールチップがおかしいよね。選択した単語のヘルプがマウスカーソルのそばに出る。そこじゃないよ。■メニュー>設定>キーワードヘルプ自動表示するを選ぶと(※この設定をソースコードで見つけて、どこで設定できるのか探した。iniには書き込まれない揮発性の設定みたいだ)、選択しなくてもキャレット付近の単語の説明が出るんだけど、ポインタの先の単語じゃないんだよね。ポインタのそばに説明が出るのに……。■ポインタがビューの上にないときには表示しない処理もあるんだよね。表示するのはポインタではなくキャレットのそばの単語の説明なのに。■誰かのこだわりの結果なのかなんなのか。普通じゃないね。■2.3.1.0で補完をすると、例えば サクラ を入力してから補完ウィンドウを出して サクラエディタ を選ぶと、サクラサクラエディタ みたいに補完されるのだけど、trunkをデバッグモードでコンパイルしたものがたまたまあるので試してみてもそんなことは起こらないから、何かの設定のせいなのか、よくわからないうちに直ったのか。■単語検索といえば昔のはてなダイアリーは豪快だった。サクラエディタも Trieとか接尾辞配列とかを導入したら、予め決めた単語境界に基づいて抽出した単語を登録済みキーワードと比較するのではなく、もっとアグレッシブに編集中のテキストから登録済みのキーワードを見つけ出せるのに。……とかいって俺には難しすぎるデータ構造だから他人事(ひとごと)だよ。手を動かして理解する手もある?

最終更新: 2017-10-01T01:05+0900

[SakuraEditor] ツールチップ>a.patch

  • ベースは https://svn.code.sf.net/p/sakura-editor/code/sakura -r 4196
  • +1007行, -760行。増えた……
    • CEditView.h, CEditView.cpp, CEditView_Search.cpp, CEditView_Mouse.cpp に限定すると +28行, -429行。圧倒的に減った(ファイルが2つ増えてるんだから多少はね)。
    • 新ファイル(AsWithHelpTooltip.h, AsWithHelpTooltip.cpp)合計が 714行。
    • 目的は減量ではなく機能単位での CEditViewからの切り出しだから……。
  • class CEditViewから消えたメンバー一覧
    • BOOL KeySearchCore(...); publicだが privateにできる。
    • bool MiniMapCursorLineTip(...); publicだが privateにできる。
    • enum LID_SKH {...} publicだが privateにできる。
    • BOOL KeyWordHelpSearchDict(...); publicだが privateにできる。
    • bool ShowKeywordHelp(...); public
    • DWORD m_dwTipTimer; public
    • CTipWnd m_cTipWnd; public
    • POINT m_poTipCurPos; publicだが privateにできる。
    • CDicMgr m_cDicMgr; publicだが privateにできる。
  • 代わりに継承元がひとつ増えた
    • class CEditView: public AsWithHelpTooltip<CEditView>
      • この名前ちょっと微妙? AsSelectable みたいなのを想定した命名規則なんだけど。
    • 基底クラスだけど仮想のデストラクタはない。インターフェイスではないし、public継承されたのもたまたまで、想定される使い方では必要ないはず。
      • 「public継承されたのもたまたま」

        理想を追求する人は private 継承して public 部に using AsWithHelpTooltip::XXX を並べるなり、継承ではなくコンポジションを選び一行だけの委譲関数を書くなりすると思う。というわけで、public 継承している現状に対応して AsWithHelpTooltip::OnTimerAsWithHelpTooltip::OnMouseMove をクラス外部から隠す目的で public から protected に変更するのは間違い。public と private と protected が混在することになるという一事をもって即座に間違いだと気付くべきところ。

      • protected 継承のことは知らない。virtual だとか菱形だとかの継承も難しすぎてわからない。
  • [新機能] メニュー>設定>キーワードヘルプ自動表示する を有効にすると登録キーワードをポイントするだけでヘルプツールチップが出る。
    • その際ツールチップの X座標は単語が始まる場所で、Y座標は注目している行の1.5行下。
    • キャレットを動かしたときも同じ位置に出せるんだけど、そこは互換性。知っていればポインタという定位置にヘルプが出るのも悪くないかもしれないし。
  • [違う所] ビューの境界ギリギリでツールチップを表示したあとポインタをビューの外に持っていくとツールチップが消えないことが本家ではあったがそれがない。
    • ミニマップ(これもビューの一種)のツールチップは必ず消えるんだけど、どういう仕組みによるのかはわからなかった。
    • ミニマップのツールチップはメインメニューが展開しているときにも出る。これは m_bInMenuLoopTRUE にならないからなんだけど、なぜミニマップだけなのか。
  • [気付いた点] CTipWnd::ComputeWindowSize()CTipWnd::DrawTipText() の中で DrawText() の引数 pszWorknew してるけど、DrawTextはサイズを指定する引数も受け取るから _T('\0') を埋める必要も new する必要もないよね。
    • というのが DrawTipText() というひとつの static 関数に反映されてる。

 何がしたかったのか

CEditViewの問題は(ANSI版よりずっと改善したとはいえ)あらゆる機能がひとつのクラスに同居していることなので、publicが privateにできたからといってなんの安心材料にもなりはしない。試したかったのは1機能1クラスで CEditViewを拡張する方法。20091129p01とか20131130。新機能はただの余録。そういうのも簡単にできるよねっていうお試し。

個別機能クラスが結局は CEditViewのすべて(継承元である他の個別機能クラスを含む)に依存できそうなのがちょっと予想外だった。機能と機能の絡み合いがだんだんと窮まってきそう。privateデータメンバー(※)を狭い範囲に閉じ込めて守りやすいのだけが利点か。

※publicデータメンバーもメンバーアクセスを代行するだけのセッタゲッタもありませんよ。それを当然の前提にして privateデータメンバーに注目してる。

 述懐

たまたま目についたひとつのメンバ変数 m_cTipWnd を分離してやろうと思って初めてキーワードヘルプや補完機能をセットアップしてから、コードの絡み合いを解きほぐして再構成するのに一週間ちかくかかってる。これでは、とりあえず一か所に、とりあえず public, friend にしたくなるのもわかる。あえてクラスを分けてアクセスを制限して、その結果に頭を悩ませたい人間がいるだろうか。いやいるし必要なんだけど、結局自分の能力でできる範囲のやり方しかできない。この a.patch だって自信満々で晒してるわけではなくて、むしろクラス設計は迷いまくりで、AsWithHelpTooltip.GetLastHitKeywordDictionary() なんて行き場のない妥協の産物である。正しい設計なんてのは与えられればそれ以外に考えられないくらい当たり前のものに思えるのに、自分でそこにたどり着くのは難しかったりする。高校数学の問題とかがそう。解法をチラ見すれば解ける。しかし独力ではなんのとっかかりも見つけられない。

最終更新: 2017-11-04T18:59+0900

[C++] オブジェクトメンバーの持ち方。初期化と再初期化。参照とポインタ。

クラスを書くときの理想として、コンストラクタでメンバーを初期化して以後は変更したくないというのがある。メンバーの状態は自身の行動の前提条件であり、そこが流動的ではあらゆるメソッドが事前に前提を確認してからでないと本題に入れなくなる。コンストラクタで準備の完了と条件の確認をすべて済ませておきたい。そこが動く、動いたなら、それはパラメータを変えた別のインスタンスに任せたい。

上で登場した AsWithHelpTooltip というオブジェクトは CTipWnd というオブジェクトをメンバーとして持っており、寿命を共にする。CTipWnd のサイズ(を始めとするその他諸々)を隠したいならポインタ(か参照)一択だが、そういう制約がないなら new CTipWnd の手間を避けて、AsWithHelpTooltip のサイズに CTipWnd のサイズを丸々含めるような持ち方をする。

初期化である。AsWithHelpTooltip とそのメンバーである CTipWnd は As~を継承する CEditView の初期化(ウィンドウ作成など)を待たないと初期化が完了しないので、As~のコンストラクタでは呼ばれるのが早すぎる。また、CEditView はコンストラクタとは別に Create という名前の初期化(リセット)関数を持っている。であれば As~にも Create という名前の初期化関数を生やして CEditView の Create から呼んでもらうというのが自然な流れ。As~はそれでいい。そのメンバーである CTipWnd にも Create の連鎖を波及させるべきだろうか。CTipWnd は小さな部品であり、そこそこ汎用性もある。そこに、外部の都合で、リセット関数という全く不要で全ての前提を覆す邪悪なメンバーを生やしてもいいものだろうか。

代入演算子を定義しようか。しかし代入は邪悪で避けるべきものだ。なにより外部のリソースを作成するときに使用したパラメータは、コンストラクタの中で使用するのみで以後は不要なので保存していない。代入なんかのためだけに余計な荷物をしょいこむなんてまっぴらごめんである。

ではやはりポインタだろうか。Create 関数が呼ばれるたびに new CTipWnd でメンバーのインスタンスを作り直そうか。こういうとき参照は使えない。参照はコンストラクタで初期化するしかできないし、初期化しなければいけない。そこが参照のポインタとは違う参照たる所以であるので不便でも不満でもない。しかしポインタには不満がある。ポインタは無効な状態(nullptr)を許容する所が参照とは違う点で、今回の As~と CTipWnd の関係ではそういう無効な状態の入り込む余地などないのだから、CTipWnd をポインタで持つというのは意図や前提の過不足のない表現として不適切で不満がある。

結局 As~の Create 関数の中でこうやって CTipWndを再作成したんですよ。

m_cTipWnd.~CTipWnd();
new(&m_cTipWnd) CTipWnd( G_AppInstance(), asView(this)->GetHwnd() );

代入なし、(CTipWndに)リセット関数なし、new なし、ポインタなしで満足してるんだけど、何かの本で読んだテクニックというわけではなくて、どんな落とし穴があるのか戦々恐々としてる。普通の new ですら使うのが怖くてできるだけ見えないように(STLを使ったり)するのに、placement new なんてとてもとても。

 @2017-09-28 placement new より swap

picojsonというパーサを読んでいます。分からないのは、以下に該当するコードです。deleteしていないのに、配置newしたオブジェクトがメモリリークしないのはなぜなのでしょうか。

inline value& value::operator= ( const value& x ) {
    if( this != &x ){
        this->~value();
        new (this) value(x); // thisの寿命はどうなる?
    }
    return *this;
}

ほぼ同じ2行だ。そして picojson は知っているし信頼できるソースだ。だけど検索したら現在の picojson にはその2行がない。こういうことらしい。

make operator= safe when part of LHS is being assigned, as well as ex… · kazuho/picojson@96f6c81

exception-safe はわかる。破壊と構築がアトミックでないから、構築し損ねた荒れ地にさらにデストラクタが走る可能性がある。

でも when part of LHS is being assigned っていうのがわからない。さへんのいちぶぶんにだいにゅうされているとき?

 @2017-10-30 placement new より swap (続き)

c++ - Can I use placement new(this) in operator=? - Stack Overflow

ある回答者によれば『Exceptional C++』で言及されているらしい。もう一度読もうか。

その回答に補足して、継承とスライシングに関わる問題が placement new を使った手法にはあるとも指摘されている。picojson の主な理由もそれだったのかもしれないけど、よくわからん。

ある型の代入演算子の中で自身のデストラクタを呼ぶとき、それが仮想であるならば呼ばれるデストラクタは派生クラスのものであるかもしれず、placement new で新しいインスタンスで上書きするときに派生部分の初期化が行われない、と。そのようにコードを呼んだ側も呼ばれた側も意図するところは「ある型」部分に限った代入なので、仮想のデストラクタを呼んだのが間違い。

『[単行本(ソフトカバー)] Jaroslav Tulach【APIデザインの極意 Java/NetBeansアーキテクト探究ノート】 インプレス』を読んでその苦労を垣間見るけど、派生クラスは難しい。派生が可能なクラスを公開して、それを互換性を保ったまま改善するというのは、ほとんど不可能なのではないかと思えるほど。どれだけ注意を払っても余分なコードで対策しても、得られるのは「ソースコード上の」とか「バイナリの」とかいう条件付きの互換性なんだからやってられない。

 @2017-11-02 placement new より swap (続きの続き)

『Exceptional C++』の項目41がそのものずばりでアンチイディオムとして取り上げており、すでに述べた2つ以外にもこれでもかこれでもかと否定の論拠を挙げていた。C++怖い。そして、「何かの本で読んだテクニックというわけではなくて」とか書いていたのは誰だっけ?

実際のところ、a.patch のケースでは例外安全性以外の問題はないと思うんだよね。Exceptional C++ のケースも picojson のケースも、継承を伴う代入演算子の話だし。問題があるのはたしかで万事うまくいく解決策もあるのに、あえて危険な手段をとったのが知識と思慮の不足ゆえなのは否定しようがないけど。


2017年09月06日 (水) Unreal Engine採用タイトル増加の理由は? ゲーム以外でのUnreal Engineの使われかたは? Epic Games Japan代表に聞く(1/2) - ファミ通.com」■Unreal Engine 4は「増築につぐ増築」だった 3からガラッと作り直したらしい。最近よく名前を聞くけど、必ず Unreal Engine 4 なんだよね。ラストレムナントが使っていた Unreal Engineのバージョンは 3 で、「開発当時はEpic Gamesに日本支社がなく、ドキュメントも全て英語で書かれていたため、翻訳と時差に翻弄される開発となった。この出来事は後にエピック・ゲームズ・ジャパンを設立させるきっかけにもなっている」と書かれている。■ページを繰るのにスクリプトを要求するサイトはまあ珍しくはなくて、そういう場合はまず CSSを切ってみて隠されていたテキストが表示されないか確かめてみるのだけど、ファミ通.com は他に例のないパターンで、非表示の div要素の内容として JSON形式で全ページの HTMLが入っている。ロックだね。■作家の古橋秀之という人の Webサイトが、スクリプトと HTMLの境界がわからなくなるような不思議な造りだったと思ったんだけど、今はもう違うみたい。今でもツールの痕跡のない 1990年代風 HTMLが味わい深いページではあるけども。