アイコンを変えた/明日は抜歯だPart.3

※この記事は『本麒麟』を飲みながら書かれた。

ツイッターなどで使っているアイコンを変えた。就職を機に長く使えてユニーク性の高いものに変えたいと思っていた。また、アイコンに必要なのは何より視認性だ。これらの観点から新アイコンは自分の顔写真をトレスして作った。顔はもちろんユニークだし、流行り廃りもないし、人間は顔に敏感なので視認性も高い(高速で流れるTwitchのチャット欄で顔文字が多用されるのはこれが理由だと思う)。

さて、明日は抜歯だ。今度こそ本当に抜歯だ。そう信じている。

さらざんまいの聖地巡礼をした

アニメ『さらざんまい』が面白い。幾原監督は謎が多い作風であり、2話段階ではどういうアニメなのかもよくわからないが、どうやら3人の少年の「欲望」の話らしい。少年が出てくるアニメは好きだ。

OPを見ればわかるが、浅草アニメだ。近いのでオタクと聖地巡礼に行ってきた。吾妻橋周辺とかっぱ橋(こちらは橋ではない)エリアで2話まではほぼカバーできた。

90分くらいかけて見て回ったあと、さらに2人オタクを召喚して自宅で『さらざんまい』上映会と最近のアニメに関する情報交換をした。僕はdアニメストアとAmazonプライムビデオとNetflixを契約しているので大抵のアニメは配信で見られる。今年は劇場アニメが多い。『君の名は。』以後に作り始めた劇場長編アニメが完成する時期なのだろう。

会社員になったが、本業の忙しさにかまけて趣味をおろそかにしていくと…していくとどうなるんだ?意外と何も起きない気がしてきた。だって趣味だから。

発信は大事/J.S.バッハ『ブランデンブルク協奏曲』第5番

※この記事はゆずサワーと洋梨サワーを飲んで書かれた。

↑薄かった。

会社員になって思うことだが、ブログを通して僕のことをスムーズに知ってもらえるメリットは大きい。発信は大事。

感情はあります。

J.S.バッハの『ブランデンブルク協奏曲』は6曲の合奏協奏曲であり、独特な楽器の組み合わせが面白い。第5番はフルート+ヴァイオリン+チェンバロ+合奏だ。第1楽章の3割(上記音源だと-3:18~)がチェンバロソロという大胆な構成になっている。

少人数のアンサンブルにも大人数のオーケストラにもそれぞれ魅力があるが、僕はこのくらい(各パート1〜3人くらい)の規模の合奏が連携の妙と集合のパワーを両方楽しめると思う。ブランデンブルク協奏曲は他にも9人が全員違うパートを担当する第3番や、ヴァイオリンを抜いて中低音のみで演奏する第6番が好きだ。

ある人の言うところによるとクラシック音楽とは「単純な音のパターンに多くを込める」スタイルだという。ただ一つの音の強さが絶妙であるというだけで泣くほど感動することもある。

感情あるっつてんだろ!酔ってるのでまとまりません!!終了!!解散!!!

JavaScriptのbindとは何なのか

Reactのドキュメントで出てきた疑問だが、ReactというよりもむしろJSの知識だ。

同期に教わってみると意外とシンプルだった。bindは何かというよりも、むしろ本当の問題は「thisとはなにか」というところにある。thisは実行時のコンテクスト1であって、関数を呼ぶ方法によって変化する。

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房ずつ食べるか?そんな人は見たことがない。周りに変な目で見られるだろう。常識がないと笑われるかもしれない。そもそもこのサイズのパセリは食べることを想定して出されているのか?昼の混雑時間帯にパセリをのんびり食べている客は店の迷惑ではないか?

だが、自分が変な目で見られることを恐れてパセリの命とパセリ農家の努力の結晶をゴミにして良いのか。自分で決めているルールを曲げて良いのか。食べにくいサイズのパセリを出すこのとんかつ屋はパセリ農家の敵ではないのか。パセリは食べるものではないという人々の思い込みは僕が先頭に立って覆していかねばならないのではないか。

今日僕はとんかつ屋で、パセリとパセリ農家と天皇のことを思いながら、世界の残り全てを敵に回してパセリをちぎってむしゃむしゃ食べた。苦かった。レモンは残した。

第2の料理/ReactのsetStateがワカラナイ

※この記事は『Asahi 極上<キレ味>』を飲んで書かれた。

↑キレ味ってなんだ…?

昨日なんとなく焼きそばに飽きたので今日は鮭の炊き込みご飯を作った。これも僕のレパートリーの1つだが、ご飯を炊くのは時間がかかるので敬遠していた。

作り方はかんたんで、ご飯を炊くときに醤油・鮭・えのき・鮭を一緒に入れるだけだ。こだわるなら昆布も。炊き上がるころには部屋が醤油のいい香りに包まれている。

今日もReactのドキュメントを読んでいた。だいたい理解しながら読み進んでいるが、やはりReactがパフォーマンスを出すために中でゴニョゴニョやっていることを理解するのが難しい。たとえばここ。再描画の回数を減らすためにsetStateは即時に実行されないことがあるという。しかし例示されているコードでどのような不具合が起きる可能性があるのか、failの一言だけではよくわからない。

Because this.props and this.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の値を取得する方法が紹介されているが、これによって何を解決しているのだろうか。

だいたい家にいた/ナウいReact

※この記事は『Asahi 極上<キレ味>』を飲んで書かれた。

強い意思があったわけではないが、今日は夕方に買い物に行った以外は家にいた。

以前からやりたいと思っていた‎@kfurumiyaさんの『正真正銘のReactだけの不純物なしでReact入門』をやった。「不純物なし」というのは意外と厄介で、複雑な状態管理はReduxでやるのが普通なのに対して、このチュートリアルではReactの新しい機能であるHooksを使っている。

Reactは形作りが面倒だが、そこに当てはめていくことで巨大なアプリでも比較的小さい負担で作れるというのがこれまでの認識だった。しかしReactの真価である差分検知システムを効率的に動かすためには無駄な再描画をさせないための工夫が必要らしい。慣れればこれも流れ作業のように書けるのかもしれないが、現時点では難しそうだ。

チュートリアルに沿ってひとりツイッターを作ったあと、本家に近づけるために

  • 空白の投稿はできない
  • 投稿したら入力欄が空白になる
  • 削除できる

の3つの機能を追加してみた。見た感じでは正しく動いている。今後はnodeでなんかいい感じにコンパイルする、テストを書く、Ajax通信するなどをやってみたい。

今日も歯は抜けなかったが髪は切った/リフォーム

※この記事は『GRAND KIRIN IPA』を飲んで書かれた。

予告通り朝から病院に行ってきたが、今日は抜かなかった。まずは診断と説明で、そもそも土曜は手術はしないらしい。結局平日のどこかで時間を作る必要がある。会社と相談だ。

ただ、さすが厄介な患者が回されてくる総合病院の医者だけあって、担当医の説明は端的かつ自信に溢れていて頼もしい。「私なら3分で抜けます」だそうだ。

昼頃病院が終わったのでそこそこの床屋で髪を切った。技術に金を払うことをためらうのは美学に反しているし、そもそも高い金を払うとどのようなサービスが受けられるのかということを知らないまま安い床屋ばかり探すのは非合理的だ。今日はおおよそ相場通りと思われる3600円の床屋に行った。これまでの3倍の価格だ。明確な差は以下のとおりだ。

  • 洗髪・顔剃りが存在する
  • スタッフの対応が丁寧
  • カット中にトークが発生する

カットもたぶんうまかったのだろうが、僕にはよくわからなかった。歯を抜くのは怖いが(カルテに歯科恐怖症と書かれていて笑った)、髪を切るのは平気だ。痛みの有無かもしれないし、再生するか否かが重要なのかもしれない。

朝が早かったので帰宅後しばらく寝た。その後友人を召喚して、部屋の模様替えを行った。動機は3つ。部屋の入り口のすぐそばにロフトベッドとPCデスクがあり、動線が妨げられていたこと、せっかくロフトベッドを導入したのにもかかわらずその下の空間が空いていたこと、そしてPCデスクの近くにミニ本棚を置ける場所がなかったことだ。これらを解決するためPCデスクをロフトベッドの下に移動した。それに伴いテレビ線・LANケーブルは長いものを買ってきてマットの下を通した。今のところリフォームは成功したと感じている。

部屋の機能がロフトベッド下にまとめられ、大きなスペースが空いた。これで床で高速回転することができる。

明日こそ歯を抜きたい

※この記事は『Asahi 極上<キレ味>』を飲んで書かれた。

明日こそ親知らずを抜きたい。経緯はここを参照。電話で確認したところ土曜は予約不可で先着順とのこと。会社員でまだ有給も使えないので当然土曜しかない。先着順がどのくらい激しい争いになるのか予想がつかない。

色々考えたり調べたりするとまた不安になって倒れそうなのでなにも考えていない。とにかく病院に行き、紹介状を渡してよしなにやってもらう。それだけだ。

そういえば紹介状は封がしてある。何が書いてあるか興味があるが開けていない。患者が読んで勝手に内容を変えると危険だからそうしてあるのだろうか。

この記事を書きながら明日行く病院の歯科の紹介を読んでいたらめちゃくちゃ気分が悪くなってきた。さいなら。