-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
背景塗りつぶしにPatBltを使う Part2 #766
背景塗りつぶしにPatBltを使う Part2 #766
Conversation
FillRectの利用シーンに合うように、ブラシ・システムカラー・色指定の3オーバーロードを用意。
周辺で宣言していたブラシの一時変数が要らなくなる。 CPropComToolbar.cppのFillRectは関連コンテキストでSetBkColorする必要があるので除外した。
FillRect利用箇所周辺のコードをリファクタリング。 この関数は共通設定ツールバーのリストボックスを描画するためのもので、テキストとアイコンを描画する。 アイコン描画処理のためにSetBkColorする必要があるためFillRect⇒ExtTextOutの変更を行う。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
細かくは見てませんが、ざっと動作確認した感じでは問題無いように思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MyFillRect
関数群のエラー処理に問題があるように見えます。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
問題無いと思います。
相変わらず目的を説明しませんね。FillRect を FillRectA に置換します、FillRectA を FillRectB に置換します、というような、横方向へスライドするだけの「目的」だけが示されて、一体どこへ向かっているのか、進んでいるつもりなのか、まるで説明しませんね。 |
一つ前のコメントは #765 (comment) より前に書かれました。現在の理解は一つ前のコメント時点より多少進んでいますが、この PR の概要に不備があるとの意見は同じです。 |
レビューありがとうございます。いれてしまいます。 |
補足しておくと「体裁が整っていない」はマージ阻害要因じゃないと思っています。 コメントかコードかどちらかで意図を汲み取れるなら、それを持って進めてよいと思っています。 |
不誠実な人間ですね。誤解の元だ。 |
GitHub でやったらあかん発言ですな。 |
言葉を狩られても痛くも痒くもありません。自分は @berryzplus さんの言動を批判しています。それが根拠のない名誉毀損にあたるというのなら真摯に受け止めます。 |
過去発言見てもらうと分かると思います。 内容の説明を求めたことはありますが、本文を訂正しろとかドキュメントを書けと要求したことはありません。 逆に、明らかに説明足りてないコミットをいいんじゃない?と何度か通してきたはずです。説明ちゃんと書けよーといちゃもんつけながら。 やってること変わってないんだから不誠実とか言われるのは心外。 アフォなんじゃないか?と言われたら |
@berryzplus さんの過去の発言を以て berryzplus さんの PR を認めることができないと指摘しました。 |
目的のない PR に対して、その手段であるコードを吟味する理由がありません。その手段の妥当性、目的の達成を判断する基準が存在しません。目的さえ明確なら手段はどうとでもなります。奇しくもその点は同意できるようです。 |
わざとなのか読解力・言語能力に問題があるのか、ハンロンの剃刀を適用すればまずは無能であると判断すべきようですが、@berryzplus さんは他人(ds14050)の発言に正面から受け答えすることがあまりありません。文章と内容が理解できないから応じられないのでしょうか。そこに悪意を見出せば不誠実だという評価につながります。さっきは応じるつもりがないと開き直られたので、こちらも不誠実だと断じました。 |
過去発言見て「今回だけ違う」と思う読解力ってどうなの? 他人を批判すれば、それはそのまま自分に跳ね返ってくるものだと思います。
コミュニケーションはお互いの歩み寄りによって成り立つものです。
PR本文を書きなおしてほしいの意味だと判断して「不要と考えます」と答えました。 「方向性がおかしくなったら止めてください」とお願いしてましたけど、
悪意はありません。 今回の要望を受け入れないことと @ds14050 さんに今後も突っ込みをお願いしたいこととの間に関連はありません。 |
これは part1 への最初のコメントです。「速度を目的とした変更なら、アプリケーションに適用した場合のベンチマークが知りたいです。」 仮定を元にして意見を述べています。@berryzplus さんが明言しないために発生したこのコミュニケーションコストを以後もずっと払い続けていました。 berryzplus さんの発言です。「実動作に合わせたベンチマークは用意してません。速度改善効果の確認がしたいわけじゃないからです。」 これに対する自分の解釈を訂正する発言も berryzplus さんからは出てきませんでした。この発言を元にした意見は完全なロスでした。
意見を聞く耳はないでしょうね。書きません。
行動が改まらなければ同じことです。 |
読解力がないとしてもそれを責めてはいません。昔の Issue ですが自分の考えを理解してもらうために #116 (comment) に至るまでに何度も何度も何度も自分自身はとうに得ていた理解を繰り返しました。 同じように、berryzplus さんに自分を理解させる努力を求めています。明言すること、誤解を正すこと、「コメントかコードかどちらかで意図を汲み取れるなら」と甘えて結果的に読解できない人間を置き去りにすることがないこと。これが歩み寄りではありませんか。
ブラフですよ。謙虚に教えを請う姿勢が見られません。発言を真実だとして行動と考え合わせると ds14050 は berryzplus さん以上の無能で学ぶところなどないと見られているということです。 この一連の PR を通して自分は berryzplus さんにでたらめを改めて理を通すことを求めてきました。でたらめに見えるんです。ただ手を動かして何かした気になりたいだけの人間に見えるんです。 あらためてこの PR の概要を読み直しましたが、ますます混乱してきました。 これは矛盾です。FillRect を MyFillRect に置き換える理由が説明できません。
3つのオーバーロードにより色を指定する型を選ばず使い勝手の向上を目指すのが目的というのでもなく、「既存FillRectとなるべく近い使い勝手となるように」と同じ水準を目指しているだけです。 誰の読解力に問題があり、誰の言語能力に問題があるのか追及することに意味はありません。しかし PR を出した当人である berryzplus さんがこれらの疑問について説明することを拒むなら、やはり不誠実な行動だと自分は判断します。 |
この PR は #765 の展開なので、やっている事は塗りつぶし用のGDI関数を直接呼ぶ形からオーバーロードされた 自分が気になるのは「ここからどうするんだろう?」という事です。 berryzplus さんの元の目論見 では、 自分の予想ですが、結局は ただ仮に処理速度を上げる目標をこのアプローチで達成出来なかったとしても無意味と捉えるのではなく、より成功に近づいた、と考えるのが建設的で良いと思います。 |
#765 を開けばわかりますが、part1, part2 を通して #765 への参照は @beru さんが行ったものが最初です。それがどういうことかはもうくどくど書きたくありません。たぶん自分に慈愛の心が足りなかったんです。
目指す「成功」と複数の価値基準について。 「書かれなかったコード」に軍配を上げたがるのが自分の傾向です。機械に優しくではなく人間に優しくです。だからこそどれだけ機械の負荷が減っているのかにも厳しい目を向けます。本当に負荷が減っているかどうかではありません。コードを費やすことによって失うものがあり、自分が重視する価値からは離れていきます。手を加えただけ前に後ろに進んでいるという単純なことではないのです。 サクラエディタのコードは玉石混淆なので、本質的な無駄を取り除くことにより人間に優しいコードと機械を酷使しないコードがあちこちで簡単に両立できるはずです。優先順位を考えてもらいたいですし、これと同様の最適化を進めるにも、先人からくどいほど伝えられてきた鉄則がいくつかあります。 @berryzplus さんはそれらを踏襲していません。守破離の守をとうに卒業して遙かな高みへ行ってしまったからその行動を裏打ちする正しさが自分にはわからないのだと思います。周りのレベルに合わせる優しさを期待したいですね。
確実に前に進んでいることを確かめながらであれば、作業の積み重ねも無駄ではないでしょうね。これは皮肉ではなく要求です。 |
自己レスです。
(自分で)説明します。「このPRの目的は、FillRect関数の置換です。実際の速度改善は目的ではないので」というのは厳密には「このPRの目的は速度の改善です。FillRect の代わりに PatBlt を使ったオリジナルの MyFillRect を使うようにします」という意味です。 これが理解できた今初めてこの PR の内容が頭に入ってきました。 #765 を見れば FillRect はどういう場合にも遅いらしいので、置き換えに意味があると考える理由はあります。ExtTextOut の置き換えとは事情が違うみたいです。 ことここに至ればこれまでのことはくだらない言葉の行き違いだったとわかります。 ペンと紙が置かれたテーブルと係の人を前にして「お名前宜しいですか?」と声をかけられたときに、(宜しいですか? 良い? 悪い? 名前が? それで?) とフリーズしてしまった人間ならではのつまづきだったと思います。係の人が言い直してくれるまで固まっていました。 @berryzplus さんに謝りはしません。不備は不備ですし、対応にも誠実さが欠けました。しかし自分の無理・矛盾への対応力のなさもちょっとどうかと思います。「ダブルバインド - Wikipedia」に対応できない人工知能みたいだ。 |
PRの #765 と #766 の最初のコメントに #767 への参照が無いから分かりづらかったって事でしょうか? PRの体裁が整っていなくてレビューしにくいと感じたら、それはコメントで伝えればよいのではないかと思います。あとこのままではマージして欲しくないと思ったら、Review changes から Request changes でコメント付きで変更要求すれば良いかなと思います。マージされるまで多少時間は有ったと思いますので静観してないで早めにアクションを取るのが良いと思います。マージされてから「なっとらん」って言うより、やれやれと思うかもしれませんが事前に指摘する方が良いのではないかなと。
手書きのロジックの量を増やすとその分メンテコストが増大するので簡素な記述になるに越したことは無いですね。 速度の最適化するとしたら、計測した数字の上でもちゃんと高速化のパーセンテージが大きくて、あと体感的にも処理時間が短くなったというのが感じられないと、アドバンテージは無いかもしれないですね。
簡単に両立できるのかはやってみないと自分にはわかりませんが、全体のコード量も多いしそんなに楽じゃないと思います。能力のある人であれば朝飯前なのかもしれませんが。 優先順位に関しては主観によるバイアスが大きいと思うので共通認識を持つのは難しいんじゃないかと思います。というのを言い訳にして全員があらぬ方向を向いてて協調しないのもまずいですが…。 リンクの紹介ありがとうございます。「早過ぎる最適化は諸悪の根源」っていうのは昔指摘された事あります。「ワルカコイイ!」という事で構わないんじゃないか…と心の中で思いましたが口にはしませんでした。まぁミクロな最適化ばっかしてて全体のコードのリファクタしないのは技術的負債を積み重ねてるのと紙一重なのはその通りなので、楽しいからと言ってチューニングばかりしてたらまずい事は確かですね。まぁ脳内麻薬との格闘ですね。
定量的に効果を確認するのと、的外れな方向に進んでないか見直しが必要って事でしょうか? しかし同じ塗りつぶしを行うAPIが大きな速度差が出ないように実装されていれば良かったですね。そうも出来ない裏事情とかあるのかもしれませんが、ドキュメントで解説されてないし分かりづらいです…。 |
どこにコメントすべきか迷いましたがここに書きます。 この次のアクションは、整理コミットの作成だと思っています。 PR作るときに issue #767 のタイトルを変更して追加の説明を入れようかなと思ってます。 今回やりたかったことは、塗りつぶしに使うAPIの見直しです。 根拠としてあげてきた「速度」の話は、さきに回答したとおり主因ではありません。 ぼく個人としては、分かりやすさの改善はとても大事なことだと思っています。 |
じゃあ他に良い名前があるのかというと みんながみんな好き勝手な名前を付けだしてそのうち早い者勝ちルールに嫌気がさした人がGUIDを付け始めたら末期症状ですね。 まぁもちょっと描画ルーチンのバリエーションが増えたらネーミングスキームを考えて適用するのが良いのかな…。数が増えたら体系的にまとめていきたいですね。 |
「速度」が主因ではないとして、元のAPI の なお速度に関していえば、 まぁ |
細かなところだけ。
「レビューしにくい」ではなくレビューができない状態でした。リンクされていない issue をレビューの対象に含めることは不可能です。書かれていないために仮定した目的は否定されました。そして berryzplus さんとは話が通じないことがわかっているため、改善を求めることを諦めてしまいました。 今も berryzplus さんの追加の書き込みによって疑問が膨らんでいます。
期待できる効果のオーダーが異なることから、小手先の改善よりロジックやアルゴリズムの改善を優先するべきだということです。これは共通認識でなければ困ります。サクラエディタのコードベースであればアルゴリズムだなんて大仰に構えることもなく、何でこんな無駄なことをやってるんだ、というような箇所がいくらでも見つかると思います。しかしどのレベルに取り組むかは個人の能力・嗜好によるところもあるでしょう。 |
名前は「嫌い」です。嫌いだけど、誤解されないこと、FillRectで検索してヒットすることの2点でこれにしました。FillRectCustomとかApiWrap::FillRectとか適切っぽい名前の候補はありました。 |
767のリンクに気付かなかったのはブラウザ依存ですかね? ieとiPhoneで見た場合issueにPR番号を書くとPR側に参照リンクが表示されて見えます。 |
ああ、逆リンクですか(初めて気がついた)>#767 |
それに、バックリンクはトラックバックなどと同じく参照元が主体であり重きを置いていませんでした。が、手がかりではあり、「不可能」というのは間違いでしたね。 |
…rect_to_patblt 背景塗りつぶしにPatBltを使う Part2
目的
背景塗りつぶしに使うAPIを変更します。
#765 の展開として FillRect 関数の独自版(内部的にPatBltを使用)を用意し、全数を置き換えます。
注意
変更で導入する独自関数
この変更により新たに独自関数を導入します。
既存FillRectとなるべく近い使い勝手となるように3オーバーロードを用意します。
速度影響をなるべく少なくしたいので全関数inline指定です。
FillRectとの主な相違点は実行速度と第二引数ですが、だいたい似た感じに使えるように作っています。
PRの評価方法について
このPRの目的は、FillRect関数の置換です。
実際の速度改善は目的ではないので、置換が正しく行われているか(明らかな置き換えミスがないか)に納得がいけば問題なしとしてよいと考えております。