技術系ぽい雑談(2021-06-14)

3
ほえほえ@スプシマン @hoehoe1234

個人的にはこういうハック(発想)大好きですし、すばらしいと思います。応用であるとともにパターンであるところに渋さと経験を感じます。 twitter.com/sugoi_kaizen/s…

2021-06-14 14:49:18
吉田拳@Excel作業代行の㈱すごい改善 @sugoi_kaizen

データベースでよくあるんですけど、例えば各顧客がどの広告経由で来店したかのこんなデータで、各項目が0か1かで記録されてるケース。 これだと扱いづらいので新規に広告媒体を書き出す列を用意して関数仕込んで、集計に使いやすい材料データになるよう整形するわけです。 pic.twitter.com/ebh3HAMMbX

2021-06-14 14:30:39
ほえほえ@スプシマン @hoehoe1234

中学まで算数完全制覇が必要なのはいうまでもないのでうが、これは「理解」を言っているのではありません。中学までの算数は「応用」することが求められます。昨日のカーネルリーディングでも「切り上げ」の話がでました。みんさん無意識にやってらっしゃると思いますが切り上げとはこのような話です。

2021-06-14 14:50:55
ほえほえ@スプシマン @hoehoe1234

100円なら100円、110円なら200円、120円でも200円、、、、190円でも200円、200円でも200円です。これは多分、中学校の算数の話でしょう。しかし、この話が今度は「メモリブロックの切り上げ」の話になるのです。

2021-06-14 14:52:23
ほえほえ@スプシマン @hoehoe1234

メモリブロックは2の累乗のサイズで確保したりします。V6では64が基本になっています。たしか、これをグレインと呼ぶとか聞いたことがあるのですが定かではありません。単位64、すなわち、UNIT64ということです。これは単純に64個で1と数えるということですが、この感覚が実に難しいのです。

2021-06-14 14:53:44
ほえほえ@スプシマン @hoehoe1234

10円、1000円なら簡単に「切り上げ計算」ができるのですがコードでは64で切り上げなければなりません。さて、どうしましょうか?という話になります。ここで中学数学を「応用」する必要があります。切り上げとはなにか?を一般的に理解する必要があるのです。

2021-06-14 14:54:55
ほえほえ@スプシマン @hoehoe1234

推奨しているように具象例を書くことをおすすめします。 必要なサイズ(Request)、必要な単位(64単位、B) R B  0 0 1 1 2 1 ・・・ 63 1 64 1 64 2 となります。今回は64ですが、この仕組は一体どうなっているのでしょうか?

2021-06-14 14:57:30
ほえほえ@スプシマン @hoehoe1234

推奨している方法は ①10進数を基数として具体例を書いてみる ②10進数を基数として数式、ルールに変換してみる ③求められている問題の具体例を書いてみる(上記ツイ) ④求められている問題を数式、ルールに変換してみる。 ⑤一般法則を考えてみる。 となります。

2021-06-14 14:59:20
ほえほえ@スプシマン @hoehoe1234

今回の場合は、具体例から63を足して切り捨てればほしい数字になります。ここは自分で「図、数直線」を書いてみるのもいいと思います。ワイはよくそういう図式化をやります。 さて、63とはどういう数なのか?を考えます。そうですね。基数から1つ少ない数です。

2021-06-14 15:00:46
ほえほえ@スプシマン @hoehoe1234

基数をRとすると、R-1を足すと、基数倍+1であれば次の水準に切り上がります。なので式を書くと 求めたいブロック単位 B リクエスト数 N 基数 R とすると B = (N + (R-1)) / R となります。Bは商ですね。これが切り上げの仕組みでごく簡単な話なのですが

2021-06-14 15:03:10
ほえほえ@スプシマン @hoehoe1234

自分で数式なりイメージなりを整理しておかないと「コードに現れた時」になかなか読めません。コードは「なぞる」のではなくて「読む」んですね。読むとは「意図を理解する」ということです。コードリーディングとはまさにそれで「なぞる」ことから「意図を理解する」ことへの意識の変化を意味します。

2021-06-14 15:04:38
ほえほえ@スプシマン @hoehoe1234

B = (N+63)>>6 を見たときに、「Nに63を足して右に6ビビットシフトしている」というのがコードをなぞるということです。もちろん最初は文法が理解できることが優先なのでこれでよいのです。しかし、コードリーディングとしてはこの先にある「意図」を読み取ることが必要なのです。

2021-06-14 15:06:48
ほえほえ@スプシマン @hoehoe1234

これは「Nを切り上げて必要なブロック数(64単位)をもとめている」というのが読むということです。メモリなので要求サイズを切り上げたブロック数を確保することが必要ですからね。これが中学数学を「応用する」ということだと思います。

2021-06-14 15:08:20