2022-01
2022-01-30
キャッシュ周りを整理して,https://rsc.tosuke.me にデプロイし直した
CFWのキャッシュはworkers.devではヒットしない
2022-01-29
React Server Components実装した!
https://tosuke-streaming-html.tosuke.workers.dev/
2022-01-27
TypeScript 型レベルプログラミング フリースタイルガイド - Object.create(null)
わかる。無意識にやってた
ParsecのmacOSホスト,便利といえば便利ではある
「使えなくもない」という感じ
キーリマップができなくて特定のキーが送れないとかがあってつらい
tsk(@t0suk3)
node v16.11あたりからSparkplugが有効になったっぽいんでv16.9.0とv16.13.2でwebpackのビルド速度の比較したら10%くらい改善された
すごい速くなるかと思ったけど実質分岐コストをなくしてるだけだからそこまでは速くならないのかな
V8 codegenの反省(抽象操作を全部展開した結果異常な量の機械語が生成されてしまった)もあるんだろうが
界隈が「ツールチェインをRustやGoで書き換えて高速に!」みたいな盛り上がりをしているときにJavaScriptがさらに速くなる方向性に夢見てたんですが,まあそうはならんかみたいなところはあるな
やはりネイティブには勝てない
とはいえフリーランチってやつは最高ですね,勝手に改善されて勝手に速くなるのはうれしい
Viteみたいに計算量を減らす方向性は賢いと思う
2022-01-26
React Server Components w/ Next.js 現状はNext.jsのReact18対応周りを読み込んだログなのだが,Shopify/hydrogenとかいう面白フレームワークを見つけたのでこれも読みたくなってきた
N・H・Kにようこそ!は実はNHKのアニメじゃないらしいということを知り,驚愕している
react@0.3.0を触って過去を思う回
実は大体のコンセプトは揃っている
2022-01-25
rokoucha.iconにFinal A3000をもらった
もらったものに追加……
2022-01-24
誕生日とかいうやつなのだが,ここ数年期末テスト期間が完全に重なるせいで何も誕生日感がない
これも今年で終わりかと思うと少し寂しいですね
2022-01-22
3つのOS,6つの思想,n台のPC
困ってます,助けて!
2022-01-19
iso-recursive typeとequi-recursive typeは違う
単純に再帰型と言っても実は2種類ある
同型(変換は必要)であるか等価(変換不要)であるか
code:typescript
// equi-recursive
type Fix<A> = (x: Fix<A>) => A
// 不動点コンビネータに型が付く
type F<A,B> = (x: A) => B
const Z = <A,B>(f: (g: F<A,B>) => F<A,B>) =>
((x: Fix<F<A,B>>) => f((y: A) => x(x)(y)))((x: Fix<F<A,B>) => f((y: A) => x(x)(y)))
code:ocaml
(* iso-recursive *)
type 'a fix = Fix of ('a fix -> 'a)
(* -rectypesがあるとequi-recursiveも使える *)
type 'a fix = 'a fix -> 'a
let f x = x x (* : ('a -> 'b as 'a) -> 'b のように,推論結果としても出てくる *)
iso-recursive typeの場合,再帰性を使いたい場合に値を「開か」なければならない
let Fix(f) = aみたいな
Haskellだとequi-recursive typeは使えないように見えるが,型レベル不動点コンビネータを導入することによって可能になるらしい
自分で実装することで,React Server Components the hard wayになっているわけだけど,人には勧められないわけで困る
最近とても人には勧められないような学習方法ばかり取っていて,どうなんだという感じになっている
Next.jsやReactの実装を読むことで理解を進めて実装を書いているわけだけど,結局新たな独自フレームワークが生えることになるわけで,それはそれでどうなんだという
まあNext.jsのReact Server Components対応が微妙すぎて,最初は待ちだったんだけどロクに進む気配がないから自分で書き出したので結局はVercelってやつが全部悪いってことで……
ブログ的なものを題材にしているのはだいぶ微妙で,Metaの人間が作っているということは背景としてはFacebookでSSRをやるには
既存の仕組みではダメで
コンテンツの優先度がはっきりありそう
かつSPAとしての遷移も考えると
初回だけサーバーでやるのは厳しい
データ集約もしたい
Relayでも悪くなかったんだろうけど,ちょっと大きすぎた
みたいな事情がありそうではある。Facebookありきなのでそういうサイトでしか効果を発揮しないよねというのはまあある
What changes are planned for Suspense in 18? · Discussion #47 · reactwg/react-18 · GitHub
Likely after React 18.0: Suspense for Data Fetching
- Built-in Suspense <Cache> which will likely be the primary recommended way for third-party data fetching libraries to integrate with Suspense. (For example, react-fetch uses it internally.)
Suspense for Data Fetchingはreact@~18.0では安定化されない
Suspense Cacheがない
これは知ってた
ちゃっかり<SuspenseList>もない
useTransitionが完全に空気
またreact@experimentalに篭ることになるのか……
とはいえMajorになるような仕様変更は不要になるわけで,hooksくらいにはスッと入ってくれるのではないか
なんか謎の勘違いをしている気がしてきた,悲しい
2022-01-18
なんというか,クネクネしているときのどうしようもない自分が本来の自分であって,過集中で実力を発揮している自分は他人なんじゃないかという気持ちになっている
インポスター症候群の亜種みたいな?
2022-01-16
Streaming HTMLでSelective Hydrationするやつをやっている
Selectiveと言っているが実際にはEagerとかのほうが正しく,サーバー側がStreaming HTMLをしている側からクライアントを起動し,送られてきた部分からHydrationを走らせるという感じ
このとき,サーバー側も全てのデータを持っているわけではないので,状態変化をストリームでクライアントに通知する仕組みを組む必要がある
tsk(@t0suk3)
SSRがstreamで流れてくるってことはSuspense boundaryが開く度に新しいNEXT_DATA(的なデータ)の差分が流れてくるってことか
ちゃんとやってるはずなのにhydration errorが起きる
→Streaming HTMLでは<Suspense/>は実体(<!--$-->と<!--/$-->で囲まれた部分)を持つので<Context.Provider/>みたいな実体を持たないコンポーネントと同一と考えてると死ぬ,了解!
できたぜ
https://gyazo.com/98d7b1b6a521a656fcf862de4face136
読み込み中でもカウンタが動いてる
なんでこんな面倒なことをやってるかというと,React Server Componentsをやるためです
Reactアプリケーションから見るとServer Componentsは「APIを叩くとVDOM的なやつがストリームで送られてくるやつ」であり,サーバー - クライアント間での早いタイミングでのデータの共有が必要
そもそもStreaming HTMLはDOMContentLoadedの発火をめちゃくちゃ遅くする技術であって,これを待っていたら普通に体験が最悪になってしまうというのもある
そろそろデプロイするかと思ってminiflareを使っているが,2.0.0-rc.3以降でストリームがメチャクチャになるバグがあるっぽい
した https://tosuke-streaming-html.tosuke.workers.dev/
なんかもうめちゃくちゃハックした
2022-01-13
/ci7lus-diary/2022.1.12#61deca0bae0f140000824a7c
真の仲間は最長文字数として有用です!
「岩の重さは安心できます!」的な不安定さがあってなんかすき(日記)
SSR w/ Vite,素振るか
SSR w/ Vite 素振り
すっかりZenn Scrapsと化した弊Scrapbox
pnpm,打ちにくいのとPnPと間違えられがちなのを除けば素晴らしい
Node.jsのsymlink周りの挙動を巧妙に活用(悪用?)してPnPのような大道具を使わずに厳格かつ高速なnode_modulesの生成をしている
pnpm recursive | pnpm
普通にtopological runがあるのえらすぎるだろ
Masaki Hara(@qnighy)
これ今見たらちゃんと実装されてて nodeLinker: pnpm ってやるとpnpmと同じ仕組みのnode_modulesができる。これだとyarn linkの挙動は最適じゃないもののyarn PnP (ローダーにフックして頑張る方) 特有の苦しみからは解放されるから、とりあえずみんなこれを使えばいいのでは
工業化MODとかいうやつが鉱石粉砕→洗浄→遠心分離→焼く(数分かかる)になって久しいの,どうしてそんなことに……感があるな
硫化水素と反応させたりして5倍精錬するガチの工業プラントを要求するやつ(Mekanism)もあったな
原神とかいうやつ何も考えずにやっていたら武器突破素材を全然集めていない状態で世界ランクが3になってしまい,完全に止まった
救済措置的に璃月で突破素材を1回分だけ交換できるけど,全然足りない
ここに到達する時間を考えても素材が足りるわけがなく,エーッになった
ぼちぼちキャラ突破と育成をやるか……と思っていたところだったので
突破段階2以上だとそれぞれの属性ごとに一日一回しか取れないボス素材が必要だし,ここ超えると天賦育成でもだいぶ資源を使うので,この速度で敵のレベルが上がるとかなり困ってしまう
実はオープンワールドとソシャゲの周回って相性微妙じゃない?
2022-01-10
Next.jsのReact Server Components対応渋いしViteのSSRで独自フレームワーク作ってやろうかと思ったけどreact-clientがnpmにpublishされてなくて解散した
__webpack_chunk_load__と__webpack_require__をモックすればreact-server-dom-webpackを使うこともできそうな気もする
React Server Components周りの謎大体理解できてきていて,後は「どうやってClient Componentだけが含まれるchunkをビルドしているのか?」くらい
Next.jsはloaderでServer Componentの中身を吹き飛ばすことで解決してた。それはそう
2022-01-09
原神やりすぎている。よくない
3日ほどで序章クリアして1章に入り,今第3幕の開始条件をクリアしている
璃月,ひろすぎ
煙緋をメインアタッカーとして使っている
ぴょんぴょん法器キャラ
重撃が範囲攻撃なので雑魚の掃討に便利
とはいえガイア+バーバラの配布キャラコンビを使うと安定した高火力が出せる(永遠に敵を凍らせ続ける戦法ができる)のでそれも楽しい
煙緋の突破のために氷アタッカー育成が必要なのでね……
2022-01-05
かえるよん
帰省のときに自宅のWindows環境の上にParsecを起動しておいたのはかなり体験がよかった,常にやっておきたいくらい
面倒な操作なしに複数環境を切り替えて使える
2022-01-03
動画サービスを支える配信基盤のコアテクノロジー - Speaker Deck
Next.jsのReact Server Components周りいじって遊ぶ
React Server Components w/ Next.js 現状の続き
Edge functionからpublicに配置したファイルをHTTP経由で取ろうとしてるんだけどフルパスが必要で魂がサービスディスカバリの形になってる
何かがおかしいと思ってたらClient Componentはdefault exportじゃないと動かなかった。なんでだよ
next.js/next-flight-client-loader.ts at ebf509539c0f4f519923c7780e269872059c384e · vercel/next.js · GitHub
おそらくreact-server-webpackの問題であることまではわかった
Client ComponentをインポートしているShared ComponentをServer ComponentからインポートしてServer Componentとして動かしたとき,Client Componentとしての利用が行われないバグがありそう
依存関係を解析する必要がありつらいというのはまあわかるのだが,Shared ComponentからClient Componentをインポートできないのはだいぶしんどい制約
単純にShared Componentにloaderかけてないだけな気がする
CSSをインポートするときにimport assertionsでmedia query記述したらいい感じにlink要素に反映されたりしないだろうか
ダークテーマのときにライトモードのCSSは落としたくない
2022-01-02
正月の諸々が一段落したので,人々の振り返りやらScrapboxを見たりしていた
質の高い技術文書を書く方法 - As a Futurist...
Threading Model · React Native
ReactNative FabricのArchitecture Overview生えてて面白い
#日報