mex

当ブログのデザインを変更しました。tailwindcssなるcssユーティリティフレームワークをつかいましたが、すでにもう別のを使いたくなっている。多分次はemotion。私はこのブログを作るためにブログを書いています。
あともうそろそろこの /log をなんとかしないといけない。あまりにもコンテンツ量が多すぎてダークモード切り替えやコンポーネント単位のフェイドインがカタつく。多分android端末とかだともっと酷いと思うので次はページネイションを実装します。あと日毎にパーマネントなページあっていい感じがした。ビルド時間めっちゃ長くなりそうですが、まぁ工夫すればなんとでもなりそう。
というかmexって何...。

最近はとても忙しい。仕事にしても家庭にしてもやりたいこととやらないといけないことがそこそこあって、双方のバランスに悩んでいる。もっと厳しく時間を管理してキビキビやれるといいのだけど、弛緩して過ごしてしまうたちなのでなかなかに難しいし、頑張りすぎると成果をもとめだすのでそこそこにしないとストレスになってしまう。ストレスはできるだけ避けた方がいい。これは新卒で入った会社を辞めたときに学んだ。
緊急事態宣言が来週いっぱいで解除される。正確には28日に解除するかどうか判断するらしい。ただ、蒲田では個人経営の飲み屋はもうほとんどアルコールを提供しているし20時以降も気にせず営業していて、客の方もマスクを外し歓談しつつビールを飲んだりしているのが店の外から伺える。緊急事態宣言はもうみんなどうでもよくなってる。
ややご近所に今年四月に開業した居酒屋がある。多分その店は協力金が受け取れないのか、開店当初からアルコールの通常提供しつつ午前二時まで営業していて、寝しなに歓声奇声が響いてくる。ちょっとうるさいけれど寝てしまえるので、一昨年もきっとこんなもんだったと思う。
このアルバムかなりいいです。中でも一番好きな曲。

最近はいろんな人のインタビューや批評を読むようにしている。ユリイカの大友良英特集を買ったりエレキングのジムオルーク完全読本を読んだり。音楽の向き合い方は人それぞれでとても興味深いです。

ハードオフ小田栄、マルチトラックレコーダーとドラム用のマイク探しに行ったけどない。楽器とか機材のスペースもそんなにひろくない。ギターとギターケースとアンプが多い。そんなに詳しくないけど、中古機材販売の主戦場はもうメルカリとかなんだろうなと思いました。もしくはもっと専門で扱ってるとこいったほうがいいのかも。

午前4時、眠れないので起きている。久々に日記でも書こうかと思ったが脳は全然冴えていないので、何も思いつかない。仕事でもします。
 

divとspanは同じだ!という記事だがコメントで死ぬほど叩かれている。div要素はデフォルトでdisplay:block だが、これはブラウザによって与えられたもので初期化すると display:inline 。なのでdivとspanは同じです。みたいな主張です。ふーんという感じなんですが。これはフェイクニュースだよクソったれみたいなのがコメントに並んでいたので一部抜粋していきます。
そもそもhtmlタグはスタイルを示すものではない。
HTML Living Standardを改めて眺めて勉強不足を痛感しました。外観に関する記述が一切ない。つまり h1要素がh2要素より小さいpxで表示されてもHTML Standardの仕様に違反していない。
なのでHTMLにおけるブロック/インラインは、cssの display:block 、display:inline といったdisplayの状態とは意味合いが異なる。
htmlタグはスタイルを定義しないとあるのでこちらもなるほどという感じ。あとHTML Living Standardではブロック/インラインって言葉はでてこず、これらはそもそもcssに文脈があるようです。HTML Living Standardにはフローコンテンツ/フレージングコンテンツといった定義がこの辺がcssの仕様の基礎になっていそうとは思ったけどちゃんと調べていない。
うーむこういうの勉強不足が如実にでる。わからないことがあったらHTML Living Standardをちゃんと読もう。

父が亡くなったので沖縄に帰省していた。葬儀、告別式、初七日、繰り上げ法要で四十九日まで終わり、東京に戻るために那覇空港に来ている。一応コロナウィルス禍での移動なので那覇空港で抗原検査を受けたのだが、そのために搭乗の三時間前から空港にいる。
急だったせいかあまり実父が亡くなった実感はない。離れて暮らしていた期間が長いからかも知れない。自分は中学校卒業してからは寮だったり一人暮らしだったりで実家でまともに暮らしていない。といってもコロナウィルス流行前は盆と正月は帰省していたので普通の社会人はこんなもんではと思う。もっと話しておけばよかったとか、もっと顔を見せておけばよかったとかそういう後悔はあんまりない。悲しみもそれほど深くはない。今のところは。自分が子供をもったらまた別の感情が生まれてくるのかも知れないけどたらればの話なのでなんでもいい。まぁもう少ししたら悲しくなるかもだし無理に悲しむこともないかと思っている。
遺影をiphoneのカメラで撮影したら、Googleフォトが勝手に3Dやらコラージュやらを提案してきたので笑ってしまった。そういうのじゃないから。

青空文庫でちらっと古事記を読んで興味ね〜となった。なんでだろうな。

pipeline-operatorがどうなってるのか気になり、そのままtc39のproposalsを見ていた。pipeline-operatorは2018に提案されてまだstage1だからもう仕様に入るのはもう少し先の話だと思う。
新しく採択されたのを眺める。Promise.anyももう入ってくるらしい。
どういうシーンで使えるのかちょっと調べる
Promise.allSettled、かなり使いどころがありそう。
allSettled は、 all とは違い、個々が Resolve/Reject どちらになっても、最後までとにかく全て実行する。実行した結果を配列として Resolve するため、基本的に allSettled 自体は Reject しない。
したがって、 status: 'rejected' な結果だけをリトライすれば良い。完了したものを無駄にせず、効率よく簡単に実装することができるだろう。
Promise.anyはどうやって使うのかいまいちわからなかった。でもまぁ使われていくうちに誰かがかっちょいい利用シーンを見つけてくれると思う。
any は rece とは違い、 Resolve する前に Reject する Promise があっても無視し、最初にいずれかが Resolve するまで待つ。そして、全ての Promise が Reject した場合にのみ全体を Reject する。
従って、「最初に Resolve する Promise を待ちたい」という要件を満たす場合は、 any を使えばそれだけで良い。

react-guiが話題になってた。なんか軽量でよく使われるhooksとコンポーネントまとめみたいな感じ。
The library integrates directly with the native DOM event system (i.e., it does not use React DOM’s synthetic event system); this provides excellent flexibility and performance, as well as broad compatibility with alternative renderers.
SyntheticEventではなくてネイティブなDOMEventを使うらしい。ていうかSyntheticEventってこんなにあったんだ。
合成イベント (SyntheticEvent) - React
このリファレンスガイドでは、React のイベントシステムの一部を構成する SyntheticEvent(合成イベント)ラッパについて説明します。詳細については、 イベント処理 ガイドを参照してください。 イベントハンドラには、 SyntheticEvent のインスタンスが渡されます。これはブラウザのネイティブイベントに対するクロスブラウザ版のラッパです。 stopPropagation() と preventDefault() を含む、ブラウザのネイティブイベントと同じインターフェイスを持ちつつ、ブラウザ間で同じ挙動をするようになっています。 何らかの理由で実際のブラウザイベントが必要な場合は、単に nativeEvent 属性を使用するだけで取得できます。合成イベントはブラウザのネイティブイベントとは別物であり、直接の対応があるわけでもありません。例えば onMouseLeave イベントの場合、 event.nativeEvent は mouseout イベントになっています。個々の対応については公開 API の範疇ではなく、常に変わる可能性があります。すべての SyntheticEvent オブジェクトは以下の属性を持っています。 補足 v17 以降、 SyntheticEvent は プーリングされなくなったため、 e.persist() は何も行わなくなります。 補足 v0.14 以降、イベントハンドラから false を返してもイベントの伝播は止まりません。代わりに、 e.stopPropagation() または e.preventDefault() を手動で呼び出す必要があります。 React は異なるブラウザ間でも一貫したプロパティを持つようにイベントを正規化します。 以下のイベントハンドラはイベント伝搬のバブリングフェーズで呼び出されます。キャプチャフェーズのイベントハンドラを登録するには、イベント名に Capture を追加します。たとえば、キャプチャフェーズでクリックイベントを処理するには onClick の代わりに onClickCapture
合成イベント (SyntheticEvent) - React
ReactのEventの仕組みはEvent delegationで実現されているらしいから、それをやめてネイティブなDOMEvent使うことでパフォーマンス向上するってことかしら。まぁ実際のコード見てみないとわからないんですが。
ReactがネイティブなDOMEventを使ってないの理由は↓。仮想DOMはそういうものなのかもしれん。preactはネイティブらしいけど。
 

ここ3ヶ月ほど、あすけんってアプリを使ってカロリーを気にしながら食事を摂っていたが、自分に合わなかったらしくてそれほど成果もでず、いちいち記録しないといけないめんどくささでストレスが溜まったのでやめた。体動かしたほうが自分としてはいいのかもしれない。本当はどっちもやったほうがいいのだろうけど。
食品まつりをよく聴いている。
あとDNA。Apple MusicにCBGBでのライブ盤があった。なつかしくてDNA on DNAも買ってしまった。シンプルでミニマムでかっこいいですね。

インゲボルク・バッハマンの「三十歳」という短編小説集を読んだ。オーストリアの作家らしいが自分はとくにオーストリア文学に興味があったわけではない。今年三十歳になり、三十歳っぽい本ないかなーと思って読んだ。アマゾンへのリンクを貼っていますが、実際は大田区馬込図書館で借りました。
もともとバッハマンは詩人だったらしく、ストーリを表現するというよりも風景を描写するだけみたいな文章が多い。そこまで詩に詳しくないのでこれが詩人だったためなのかはわからない。一人称、二人称、三人称が混在する作品や、登場人物の説明がまったくない作品があったりで、なんのことやらわからないまま読み終えてしまう人もいそう。
正直、表題作の「三十歳」は退屈だったけど、「すべて」、「人殺しと狂人たちのなかで」、「ゴモラへの一歩」はとても面白かった。とくに「すべて」は父親となった人やこれからなるであろう人は読んでみるといいかもしれない。
バッハマンに興味をもったので他の作品も読んでみようと思う。ちなみに一番有名なのはラブレターらしい。

昨日のエラーについて根本的な原因はわからんけども直接の原因と回避策はわかった。別のissueとQiita記事がヒントになった。
ページ遷移の際、page.waitForSelectorを使い、次のページにしかない要素の出現を待って遷移が完了したかどうかを確認しているのだけど、このときに Protocol error (Runtime.callFunctionOn): Target closed.が発生しているようにみえた。
要は↓のような感じのコード。page.gotoだけじゃなくてclickで画面遷移する場合も同様に発生する。
await page.goto("https://......"); await page.waitForSelector("#kokonisikanaiID"); //ここでエラー
エラーになっていたコード
↓のようにすると Protocol error (Runtime.callFunctionOn): Target closed. は発生しなくなる。なぜこれでエラーがでなくなるのかはさっぱりだが、Promise.allで解消するところをみるとおそらく実行順序が原因なのだと思う。この辺のテストを見ても参考になりそう
await Promise.all( page.goto("https://......"), page.waitForSelector("#kokonisikanaiID") );
対策を施したコード
検証はここ終わりです。なぜなら今朝になって元のコードでもテストが落ちなくなったからです。レスポンスの遅延か?また発生したらまとめます。
 

そういえばNotion APIが公開されていた。このブログではNotion内のコンテンツを取得するのにsplitbee社が作った非公式なAPIを使っている。まぁもともとNotionのAPIをこっそり叩く方法はみんな知っていたし、notion-blogとかもそういう類だったと思う。
さらに言えばsplitbeeは上述のAPIと組み合わせてreact-notionという簡単にNotionっぽく作れちゃうreact componentを提供しているので、公式のAPIを使うには自前でデザインとか色々凝ってやったるでっていうモチベーションが必要になってくるのだった。
 
話を変えます。
最近はすこぶる仕事が捗っている。どんどんとタスクを消化している。緊急な仕事をやりつつ重要な仕事も進めている。優秀ですね。理由はわかっていてあんまりおおっぴらに書けないですが、まぁとにかくめちゃくちゃ気持ちよく仕事ができています。お仕事楽しい。
そしてここ2、3日、屁がすごいでる。なんかの病気か?本当に尋常じゃなくてずっとブーブーやってます。リモートワークで本当によかった。

Rustの本読んでるけどトレイトの導出がさっぱり理解できないです。
 

最近は電子音楽をよく聴いている。よかったやつを載せておきます。多いけどこれでも絞った感じです。Bandcampサイコー。

今日で三十歳になりました。とくに感慨はないです。
二十五歳を超えてから時間の経つスピードが増しているように思ったけど、二度の転職、結婚、引越しをやっているのでそのせいかもしれない。
三十歳になる直前に電動シェーバーが壊れたので今髭が伸びまくっている。妻に縄文人みたいだねって言われた。