NEW・邪悪なブックマークレット考(考えてるだけ)

やあ (´・ω・`) ようこそ、セルフまとめへ。 このテキーラはサービスだから、まず飲んで落ち着いて欲しい。 うん、「また」なんだ。済まない。 仏の顔もって言うしね、謝って許してもらおうとも思っていない。 でも、このまとめタイトルを見たとき、君は、きっと言葉では言い表せない 「ときめき」みたいなものを感じてくれたと思う。 殺伐とした世の中で、そういう気持ちを忘れないで欲しい そう思って(という建前で)、このセルフまとめをまとめたんだ。 続きを読む
2
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

目的を再確認すると ・ブラウザで動くweb技術だけで ・出来るだけ外部鯖に依存せず ・スマホで動かす事を念頭に ・データ共有ネットワークを構築して ・インストール不要のアプリを構築したい。 なので、firehouseとか代替不能なサービスは論外で辛い これは言論の自由が消滅した世界へのバックアップ

2019-12-06 12:32:45
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

現在考えているセットアップは ・GASにシグナリング鯖をのっける。 ※掲示板とかWSプラグインでもいいっちゃ良いんだけどさ。 ・邪悪なブックマークレットを設定 ・対象のドメインでブックマークレット起動 ・必要な設定を行う ※手入力とワンラインコピペか ・するとiframeを開きシグナリングを始める

2019-12-06 12:40:47
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

デバイス名はまあUAとドメインで構成したらいいか。ソレだと同じUAで同じドメインを見る別マシーンとの通信が識別できないなー。 やはり画面で入力してシードにunixtimeを入れておくか。 ただこれだとユーザーがデバイス名を分かっても繋げられない。うーん。一括して管理はできないのでどうしようか。

2019-12-06 12:44:26
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

で、各jsアプリからはどう使うかというと ・共有デバイスがグローバルスコープに見える。 ※ブックマークレットなので初回対象webサイト画面起動時には見えない。 ・グループ単位で共有されている ・そこをkvs感覚で触る ・kvsにはコールバックを設定できる といった塩梅か。

2019-12-06 12:51:32
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

ここでじゃあ同期具合はどうやって確認するのという命題が出てくる、分散データベースの宿命 ・テーブルロックを全ノードに取って ・全ノードにデータ転送をして ・データ転送完了を受け取り ・全ノードで書き込み処理 ・完了報告を受け取って ・コミット指示 ・ロック解除 で書き込み完了をするのかな

2019-12-06 12:57:12
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

うーんindexeddbラッパーの自作ライブラリを見たらバグってるな・・・ うん。 しかしmochaは偉大だ。Unitテストの安心感が違う。 でだ、問題を考えるわけだが、 indexeddbに対して複数のタブから同時書き込みをした場合のオンメモリキャッシュ構成を答えよ と言う問題。

2019-12-08 00:08:10
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

①indexeddb自体がキャッシュ持ってるでしょ、常識的に考えて。 ②無理じゃね? ③ジャーナリングキャッシュを持ちます? まあ、諦めや常識的に考えては思考的に敗北なので、まずは③で考えるとしよう。 そうすると、各タブ間で個別にキャッシュが存在するのをどうにかする必要が有る。

2019-12-08 00:11:10
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

indexeddbはバージョン情報が分かるので! キャッシュが持ってるバージョンが古かったら、バージョン全部破棄になるのかな? でも何時バージョン情報取るんだよって言うね。 マルチプロセス環境下で取って検索かけた瞬間バージョン書き換わってキャッシュで返事したら更新反映が遅れることになる。

2019-12-08 00:17:37
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

readCommitedなので、まあ時間が数秒前後するレベルで済むが、高度なトランザクションは望めないなので、処理途中も容赦なく見えると。複数のレコードの保存をすると全部の反映が終わる前に保存が終わったレコードから読み取られてしまう 本来完了後の件数が分かる前提の所、経過途中の件数の可能性が

2019-12-08 00:20:46
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

これはtaskという単位にトランザクションをラッピングしてキュー(ログ)に詰めて、そこから一気に書き出すと。 で、マルチスレッドなのでテーブル単位にロックしてと。 ふむふむ、参考になるなぁ。 kawasin73.hatenablog.com/entry/2019/12/…

2019-12-08 00:28:39
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

トランザクションが必要な場面は、正直複数レコード一括取得と一括書き込み、一括削除ぐらいかなー。他は書き込みのみぐらい 後はロック解除はindexeddbに依存すればいいか・・・まあモードぐらいはそうだし。ただ、1行単位でロックが必要な気が。あ、バージョン変わるのはDB構造変わったときだけだわ

2019-12-08 00:38:52
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

じゃあ各プロセスが、ロックを受け取った場合はどうなるかと。単純に待つと遅くなるよね こう、キューに一旦書き込むんだから、書き込んだキューの情報は受け取れると、で書き込みは良いんだ。書き込みは。問題は読み込みは情報を持ち帰らないといけないから、大量書き込みでロックは待たざる得ない

2019-12-08 02:14:41
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

じゃあ名前がかぶらないように専用のdbを作る方がmysql見たくてあんぜんにみえる 勿論名前は自分のプロダクト名だ さてじゃあセマフォ的にどうするかと。 メモリキャッシュについては、更新テーブルの時間を記録しておいて、自分が更新した時間よりあとの場合はメモリを破棄すると。でその時間を記憶と

2019-12-09 12:47:59
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

これは ①Indexeddb自身はブラウザに管理されている ②いま懸念しているのは同一ブラウザプロセスツリー上の話 ③ブラウザ内で複数のタブから同時アクセスを食らうとキャッシュが古くなるよね、どうやって検知しようか? というお話。

2019-12-09 23:17:10
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

キャッシュコーヒレンシーにロジックを割いてもあんまり速くなりそうにない。むしろdbアクセスが増えるから遅くなる? まあいいや、次はdumpとrestoreを実装しよう。そしてマニュアル書いてnpmに上げよう。 そしたら次はブックマークレットやな。それもwebpackでパッキングしたやつ。

2019-12-10 09:21:03
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

ただ、firefoxのブックマークレット長、urlに入れられる長さが限定的、18KB付近なので、処理はそう積み込めない。なので不要な機能を載せないように自作するしかない。 必要な機能とは何かだな。

2019-12-10 09:28:33
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

httpサーバー風味にリクエストレスポンス風なIFを提供するところまでか。他は存在を前提とした別ブックマークレットでやっちくりと まあIEとedgeちゃんの2083文字制約に比べればだいぶマシだけど。制限がキツキツになってて、昔出来た仲間を呼ぶが出来ないのでiframe越しに通信経路を開くしかない

2019-12-10 16:59:01
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

取り敢えずラッパーは出来た。次は通信回路か。オレオレパケットの部分。そのままでもいいのかなぁ。出来ればパッケージにして使い回したい。 オレオレutilityもまとめておきたいにゃーん。

2019-12-11 13:00:07
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

うーん、UNITテストを走らせるとワラワラ出てくるバグちゃん。 この非同期の中でのdbに対するロックタイミングがよくわからないのがindexeddbの面倒くさいところなんよね。ラフな使い方が許容されないのが何とも。

2019-12-12 12:54:37
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

npmjs.com/package/indexe… まあこれがそれな。 正直、もっといいやつがいるからそっちを常用には勧めるゾイ。 Dexie.jsとか。 ただ、もっとプリミティブにと考えると自作という選択。

2019-12-13 00:20:02
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

さて、邪悪なブックマークは次に行くわけだが、 WebRTCのシグナリングを同一ブラウザ内、同一ドメイン、複数タブでヤリたいですと言った場合、Indexeddbで有る理由はあまりなくて、セッションストレージでも良いんじゃないか疑惑が沸々と。 長時間起動しっぱなしが正義だとindexeddbなんだけどね。

2019-12-13 01:32:00
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

じゃあ長時間起動してて数百のタブを御せるとすると 古いやつは消さなければならないが、いつ起動したかはわからない。 したがって、この起動した時間のみセッションストレージに入れて、前回の起動までの処理を確認すると。 ふむ。

2019-12-13 09:55:46
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

ローカルフラグを持たせて、同じブラウザの同一プロファイル内での別Window、タブ間でのシグナリングはこのセッションストレージの時間を見て足切りすると。 でないと、ゴミsdpを参照してややこしくなる。同期的に通信が出来ないシグナリング鯖を使えば同じ問題はつきまとう。これは生存期間で対処。

2019-12-13 12:21:03