※この記事は『Asahi 極上<キレ味>』を飲んで書かれた。
今日は採血があったが辛うじて倒れずにすんだ。自分の体に傷がつくこと、穴を開けて内側と外側の境界を破壊すること。
教えちゃお
Reactのドキュメントで出てきた疑問だが、ReactというよりもむしろJSの知識だ。
同期に教わってみると意外とシンプルだった。bindは何かというよりも、むしろ本当の問題は「thisとはなにか」というところにある。thisは実行時のコンテクスト[note]スコープのようなもの?難しい[/note]であって、関数を呼ぶ方法によって変化する。
class MyClass {
getX() {
return this
}
}
const myclass = new MyClass()
// クラスから呼び出すと、想定通りに動く
console.log(myclass.getX())
// MyClass{}
// 一度関数単体で取り出してしまうと、thisがなんだったか忘れてしまう
const unboundGetX = myclass.getX
console.log(unboundGetX())
// undefined
// bindを使うとthisを指定しながら関数を実行できる
const boundGetX = myclass.getX.bind(myclass)
console.log(boundGetX())
// MyClass{}
筆者はPythonを先に学んでいたのでJSの上記の仕様には違和感があった。しかしPythonのクラスのメソッドは常にselfを引数に取る(必ずselfが第一引数として渡される)一方でJSはそうではない。どちらも意図的なデザインなのだろう。
class MyClass:
def getX(self):
return self
myclass = MyClass()
# クラスから呼び出すと想定通り動く
print(myclass.getX())
# <__main__.MyClass object at 0x7f2a12223588>
# 関数単体で取り出しても想定通り動く
unboundGetX = myclass.getX
print(unboundGetX())
# <__main__.MyClass object at 0x7f2a12223588>
厳密な話を知りたい人はこの辺読んでください。アロー関数の話もしたいね。
昼にとんかつ屋に行った。とんかつとキャベツを食べると皿にはパセリとレモンが残った。僕はパセリを食べるべきか悩んだ。
食べられるものは全て食べるのがポリシーだ。パセリ農家が廃棄率の高さに悲しんでいることも知っている。天皇だって出されたものは全て食べるのがルールだ。普段の僕なら迷いもせずひと思いに食べていただろう。しかし今回は問題があった。
パセリがデカい。
普通添え物として供されるパセリは枝の先の方で切られており、1口で食べられるサイズだ。しかしとんかつ屋で出されたパセリはデカかった。一般添え物パセリの6倍くらいの可食部分があった。
僕は迷った。2度箸を取り、2度下ろした。一口で食べるのは無理だ。かと言って巨大パセリをちぎって1房ずつ食べるか?そんな人は見たことがない。周りに変な目で見られるだろう。常識がないと笑われるかもしれない。そもそもこのサイズのパセリは食べることを想定して出されているのか?昼の混雑時間帯にパセリをのんびり食べている客は店の迷惑ではないか?
だが、自分が変な目で見られることを恐れてパセリの命とパセリ農家の努力の結晶をゴミにして良いのか。自分で決めているルールを曲げて良いのか。食べにくいサイズのパセリを出すこのとんかつ屋はパセリ農家の敵ではないのか。パセリは食べるものではないという人々の思い込みは僕が先頭に立って覆していかねばならないのではないか。
今日僕はとんかつ屋で、パセリとパセリ農家と天皇のことを思いながら、世界の残り全てを敵に回してパセリをちぎってむしゃむしゃ食べた。苦かった。レモンは残した。
※この記事は『Asahi 極上<キレ味>』を飲んで書かれた。
↑キレ味ってなんだ…?
昨日なんとなく焼きそばに飽きたので今日は鮭の炊き込みご飯を作った。これも僕のレパートリーの1つだが、ご飯を炊くのは時間がかかるので敬遠していた。
作り方はかんたんで、ご飯を炊くときに醤油・鮭・えのき・鮭を一緒に入れるだけだ。こだわるなら昆布も。炊き上がるころには部屋が醤油のいい香りに包まれている。
今日もReactのドキュメントを読んでいた。だいたい理解しながら読み進んでいるが、やはりReactがパフォーマンスを出すために中でゴニョゴニョやっていることを理解するのが難しい。たとえばここ。再描画の回数を減らすためにsetState
は即時に実行されないことがあるという。しかし例示されているコードでどのような不具合が起きる可能性があるのか、failの一言だけではよくわからない。
Because
this.props
andthis.state
may be updated asynchronously, you should not rely on their values for calculating the next state.For example, this code may fail to update the counter:
// Wrong
this.setState({
counter: this.state.counter + this.props.increment,
});
これの解決策としてsetState
に関数を渡すことで確実にsetState
が行われるタイミングでのprops
の値を取得する方法が紹介されているが、これによって何を解決しているのだろうか。
※この記事は『Asahi 極上<キレ味>』を飲んで書かれた。
強い意思があったわけではないが、今日は夕方に買い物に行った以外は家にいた。
以前からやりたいと思っていた@kfurumiyaさんの『正真正銘のReactだけの不純物なしでReact入門』をやった。「不純物なし」というのは意外と厄介で、複雑な状態管理はReduxでやるのが普通なのに対して、このチュートリアルではReactの新しい機能であるHooksを使っている。
Reactは形作りが面倒だが、そこに当てはめていくことで巨大なアプリでも比較的小さい負担で作れるというのがこれまでの認識だった。しかしReactの真価である差分検知システムを効率的に動かすためには無駄な再描画をさせないための工夫が必要らしい。慣れればこれも流れ作業のように書けるのかもしれないが、現時点では難しそうだ。
チュートリアルに沿ってひとりツイッターを作ったあと、本家に近づけるために
の3つの機能を追加してみた。見た感じでは正しく動いている。今後はnodeでなんかいい感じにコンパイルする、テストを書く、Ajax通信するなどをやってみたい。
※この記事は『GRAND KIRIN IPA』を飲んで書かれた。
予告通り朝から病院に行ってきたが、今日は抜かなかった。まずは診断と説明で、そもそも土曜は手術はしないらしい。結局平日のどこかで時間を作る必要がある。会社と相談だ。
ただ、さすが厄介な患者が回されてくる総合病院の医者だけあって、担当医の説明は端的かつ自信に溢れていて頼もしい。「私なら3分で抜けます」だそうだ。
昼頃病院が終わったのでそこそこの床屋で髪を切った。技術に金を払うことをためらうのは美学に反しているし、そもそも高い金を払うとどのようなサービスが受けられるのかということを知らないまま安い床屋ばかり探すのは非合理的だ。今日はおおよそ相場通りと思われる3600円の床屋に行った。これまでの3倍の価格だ。明確な差は以下のとおりだ。
カットもたぶんうまかったのだろうが、僕にはよくわからなかった。歯を抜くのは怖いが(カルテに歯科恐怖症と書かれていて笑った)、髪を切るのは平気だ。痛みの有無かもしれないし、再生するか否かが重要なのかもしれない。
朝が早かったので帰宅後しばらく寝た。その後友人を召喚して、部屋の模様替えを行った。動機は3つ。部屋の入り口のすぐそばにロフトベッドとPCデスクがあり、動線が妨げられていたこと、せっかくロフトベッドを導入したのにもかかわらずその下の空間が空いていたこと、そしてPCデスクの近くにミニ本棚を置ける場所がなかったことだ。これらを解決するためPCデスクをロフトベッドの下に移動した。それに伴いテレビ線・LANケーブルは長いものを買ってきてマットの下を通した。今のところリフォームは成功したと感じている。
部屋の機能がロフトベッド下にまとめられ、大きなスペースが空いた。これで床で高速回転することができる。
※この記事は『Asahi 極上<キレ味>』を飲んで書かれた。
明日こそ親知らずを抜きたい。経緯はここを参照。電話で確認したところ土曜は予約不可で先着順とのこと。会社員でまだ有給も使えないので当然土曜しかない。先着順がどのくらい激しい争いになるのか予想がつかない。
色々考えたり調べたりするとまた不安になって倒れそうなのでなにも考えていない。とにかく病院に行き、紹介状を渡してよしなにやってもらう。それだけだ。
そういえば紹介状は封がしてある。何が書いてあるか興味があるが開けていない。患者が読んで勝手に内容を変えると危険だからそうしてあるのだろうか。
この記事を書きながら明日行く病院の歯科の紹介を読んでいたらめちゃくちゃ気分が悪くなってきた。さいなら。
※この記事は『Asahi 極上<キレ味>』を飲んで書かれた。
ピアジェの発達段階について書こうと思ったのだが、新しい研究によって複雑にアップデートされているので挫折した。心理学は未成熟な学問なので教科書で扱いが大きい理論でもあっさりアップデートされる。
問題を抽象化する能力はプログラミングに役立つ。しかし抽象的な思考が身につくのは遅い。まず具体的な事物に限って頭の中で操作できるようになる。たとえばピザを6等分しようと8等分しようと総量は同じであるとわかる。その後、おおよそ12歳ごろに抽象的・記号的な思考力は完成する。
全然関係ないけど本棚がPCデスクから遠いと面倒だな。やっぱり現在のデスク位置はベストではないように思える。日曜辺り秋葉原で長い線を買ってきて、デスクをベッドの下に移動してみようか。
参考文献:マイヤーズ心理学
具体例の集積から一般的な規則を推論することを帰納的推論という。
この推論は正しい保証がない。一羽でも白いカラスが存在すれば間違いであるとわかる(反証される)。世界中の(そして過去と未来の)全てのカラスが黒いことを確認するのは不可能だ。
さて、実験科学は帰納的推論だ。実験によって具体例を収集し、その背後にある一般的な規則を推論するからだ。つまり実験科学は正しい保証がない。リンゴが落ちるのは万有引力が理由とされているが、「神様が引っ張っている」が事実かもしれない。
ちなみに一般的規則から具体的な事実を推論することを演繹的推論という。
は演繹的推論である。演繹的推論は必ず正しい。
人間は全く同じ論理構造を持つクイズでも、文章の書き方によって正答率が変わる。人間は推論の機能を持たないが、近い機能を流用してそれっぽい情報処理を実現しているのだろう。