2020.09.30
Mac mini の Bluetooth が不安定なんだよなーと最近ずっと思っていたが解消したかもしれない 以前に調べたときに "USB 3 のハブをつけてるとノイズで不安定になる" って眉唾情報を見たのに試してなくて、試したらイヤホンへの伝送がぶちぶちになるのが直った
スピードがめちゃめちゃ変わってるみたいな挙動だった
干渉なのでは? と思ったけど「なにもせずに干渉するなら調べてもしょうがないでしょ」と思ってしまっていた
"知識があると思っている" ものに関して思い込みが発生しやすくなる問題っぽい
可能性を否定することでショートカットしているつもりで一番の遠回りをしている
誤った直観を回避する訓練が足りないなー
USB 3 デバイスがワイヤレス通信に干渉し、Wi-Fi デバイスや Bluetooth デバイスに影響することがあります。ワイヤレス通信の干渉による Wi-Fi や Bluetooth の問題を解決する方法については、こちらの記事を参照してください。
有名な話っぽいわね
つらい
書いたコードがメモリリークしてるなぁと思ったけど JS に WeakRef の仕組みがないので、JSDOM みたいな相互参照が大量にあるようなオブジェクトは一生ガベコレされてないんじゃねえか? さすがに GC させるための仕組みはありそう
window.close() っぽい?
Timers in the jsdom (set by window.setTimeout() or window.setInterval()) will, by definition, execute code in the future in the context of the window. Since there is no way to execute code in the future without keeping the process alive, outstanding jsdom timers will keep your Node.js process alive. Similarly, since there is no way to execute code in the context of an object without keeping that object alive, outstanding jsdom timers will prevent garbage collection of the window on which they are scheduled.
If you want to be sure to shut down a jsdom window, use window.close(), which will terminate all running timers (and also remove any event listeners on the window and document).
timer のためという発想はなかった
それを除けば GC を阻害する材料はないんだ
どうやってるんだろう
ちゃんと参照カウンタGCの挙動がわかっていない?
Oilpan is a garbage collector written in C++ for managing C++ memory that can be connected to V8 using cross-component tracing that treats the tangled C++/JavaScript object graph as one heap …
Oilpan implements a Mark-Sweep garbage collector …
RC じゃなかった
マーク&スイープ方式は、参照カウントにおける循環参照問題を回避し、不要なオブジェクトを確実に破棄できる。また、参照カウントを使わない分、ガベージコレクタが動作していない間の処理は高速である。
じゃあ循環参照問題はないんだあ
JSDOM リーク問題 close してもリークし続けててなに
The leakage only happens if jsdom.jsdom and window.close() are synchronous. If I modify your example to fire windows.close() and global.gc() asynchronously, you will see a spike in memory, which will actually drop back to normal after the gc is done
どういうこと?
イベントループの次まで待ってからやるといい感じになっている………… ってどういうことなんだ
わからんし時間をかけたくない + JSDOM のフル機能は必要ない だったので JSDOM.fragment を使うことにしました
ところで JSDOM.fragment には frame が消え去るバグなのか不具合なのかがあるっぽい
なんで?
frame を見る箇所が一箇所だけだったのでそこだけ new JSDOM に切り戻した
あとで報告するか
再現コードも簡単だし
Array.from(JSDOM.fragment('<frame></frame>').childNodes).length
SQL テクのコーナーかもしれない
strftime('%s', '2020-12-23T00:00:00+09:00') とやるとUNIX時刻が得られる
SQLite では日付・時刻型が存在しないので INTEGER を使うとソートしやすいのでは、と考えたときにいちいちあらかじめUNIX時刻に変換するのは面倒なので SQL でできるといい
タイムゾーン情報はUTCとの差分の分数を INTEGER で持つことにした
seed を書くときに便利だった
PSYQUI が DJ で流していたのを聞いたことだけあって曲名がわかっていなかったが Spotify のリコメンドにより発見された いいねがいっぱい押せない不具合
~ 9話まで
人生の課題感、こういう感覚あるよなってなる
イヤーパッドを始めて外した
イヤーパッドを交換するの難しい印象があったが、工業製品らしい交換しやすい構造になっていた
工業製品らしさ (工夫) が表われたときの感動が好きで、難しい印象があったものに関しては特に感じるのでよかった
プラスチックで結合部が作られていて、パチっとハメるだけ
聴感ためしてみたいなー