Select multiple tabs in Chrome - Stack Overflow
All you need to do is to hold-down the CTRL key on the keyboard and then single-left click on each desired tab to multi-select them.
こんなチョー基本的な機能に今まで気が付かなかったとは!普段はそんなに出番がないけど、この機能を活かしている拡張があると有用さが増す。
加湿器、かなり丁寧に掃除しないと雑菌を撒き散らす というのを何かで見かけてから使うのを躊躇していたが、子が風邪を引いたので咳をラクにしてやりたいなと雑菌等の心配がない加湿器を探す。この雑菌を撒き散らす結果おこる症状を Humidifier Lung というらしい。そして撒き散らされるのは雑菌だけでなく、水に含まれる鉱物も問題だとされている。
Mayo Clinic の記事 を読んだ感じ、超音波式の加湿器は汚染の問題が多そうに見える。一方で Wirecutter の加湿器案内 は(掃除をしろと前おいた上で)超音波式を推している。うちにある加湿器 は数年前までの Wirecutter 推薦機だが、これは超音波式ではなく蒸発式というらしく、相対的に汚染の心配は少ないらしい。ただファンにホコリがたまり、かつファンの掃除がやりにくい問題がある。あと蒸発に使う wick も気がつくと茶色くなっていて不衛生に見える。
日本語の記事を見ると加熱式が人気だけれど、加熱式は加湿しすぎる心配があり、自分も以前加湿しすぎてカビをはやした経験から抵抗がある。しかも Mayo Clinic の記事は "Cool-mist humidifiers may ease a child's stuffy nose during a cold. But heated humidified air doesn't seem to have the same result." と言っている。
自分は喘息もちで、子も今のところ喘息はないが気管支の弱さは引き継いでいる。それを考えると加湿器はリスク高すぎで割に合わない気がしてきた。加湿器は諦め、洗濯物でも吊るすかなあ。
Mercurial 版の git rebase -i
+ edit みたいなもの。Mercurial によくあることとして Git よりは全然使いやすい。hg-evolve という拡張の一部になっている。まったくドキュメンテーションがないが、対話的ツールなので起動すれば間違えようなく使えます。
Android Studio はいつの間にか platform のコード (View とか) をステップ実行できるようになっていた。実行しているデバイス・エミュレータのバージョンと一致するソースコードを事前に SDK Manager でダウンロードしておく。
過去数年はクラウドにある VM + 手元のデバイスという組み合わせで開発していたのでデバッガは諦めていたが、今の仕事はエミュレータが使えるので、それにあわせデバッガも再び使い始めた。便利ですねデバッガ。
RxJava で main thread になんかさせるコードが関与する場合 Observable#blockingFirst() を使うとデッドロックしてしまう。そこで以下のようなかんじで subscription と retrieval を分離し、その間でタスクを flush する。
AtomicReference<String> result = new AtomicReference();
Disposable unused = yourSubject.subscribe(result::set);
shadowOf(getMainLooper()).idle();
assertThat(result.get()).isEqualTo("Expected");
RxJava のコードには BlockingObsever というのがあるのでこれを使わせてくれれば解決なのだが、使えないので雑に AtomicReference で済ます。
unit test 内でスレッドのタスクキューを空にする方法は色々あるっぽい。上の例は Robolectric のこの資料をもとにしている 。この方法では background threads は待てない。
Coroutine だとどうするんだろうね?ていうかテストフレームワークがいい加減非同期対応してほしいもんだわ JS とか 10 年前から対応してんだぞ。
追記
Coroutine はサポートがあるらしい。
Ubuntu を Chrome OS みたいにするという話らしい。開発者環境はコンテナベースにしたいとある。Crostini を例にあげているけれど VM が間に挟まるのは嫌だなあ。コンテナだけにしておいてほしいアプリは Snap-based. VSCode も Android Studio もあるのでなんとかなりそう。ただし Chrome OS と違って Chrome はない。Firefox でも使えばいいのかな。
今のところは実験的ぽい様子なのであまり気にしなくて良さそうではある。
Twyman's law states that "Any figure that looks interesting or different is usually wrong", following the principle that "the more unusual or interesting the data, the more likely they are to have been the result of an error of one kind or another".
Twyman's law - Wikipedia
データ分析をしていて面白いことに気づいたときにまずすることはデバッグであり、A/B テストのインフラは "guardrail metric" を用意しような、という文脈で出てきた格言。
TIL というか久しぶりにやったので記録。
@XxScoped
class A {
@Inject A(Lazy<B> b) {
b.get();
}
}@XxScoped
class B {
@Inject B(Lazy<A> a) {
a.get();
}
}
とかやるとあーら不思議、A の constructor が何度も呼ばれてしまいます。ふつうはこんなわかりやすい例じゃなくてもうちょっと入り組んでいるが、スタックトレースをダンプすれば多少入り組んでいても一目瞭然である。
コンストラクタでなんかするのを止めろ、が一般的な良い解決。ただし今日は俺のコードじゃねー的な場面なので適当に直します。
理論上は静的にチェックできるはずとはいえ Lazy
がそういうチェックを回避する手段なのでチェックで弾くのは本末転倒。動的にチェックするのはどうかというと、それも可能だけれど、どのみちクラッシュするので労には見合わなそう。
とある本の冒頭で引用されていた、元 Netscape CEO のセリフ。いまいち出処がわからないが、あちこちで引用されている 。データサイエンス方面では有名な格言らしい。 この T シャツ とかほしくないですか?
・・・しょうじき自分で着たいかと言われると微妙だが、偉いボスが着てたらときめいちゃいそう。
Chrome の side panel には extension の API があった。標準の side panel 機能はいらないものばかりだが、拡張にはなにかいいものがあるかもしれない。
ちょっと探した範囲ではこれといって良い利用例は見当たらなかった。
これ に触発されて TIL をつけてみる試み。基本的にはぐぐったリンクを書いておくだけなので読む人にとってはノイズですが、他に良い置き場所が思いつかないので。
DuckDB や BigQuery には Struct という type がある。
これは表面的には JSON type と似ているが、型が決まっている。したがって columnar storage だと個々の primitive values が column になるのが便利。BigQuery とかはそもそも出自が Protobuf の columnar database で, struct は proto と似たようなものである。ZetaSQL を見ても proto と struct は似たような扱いを受けている。
この便利な機能は Postgres にもあるのかなと調べてみると、composite type というらしい。Postgres は columnar ではないので別に JSON でも大差ない気もするけど、型がある嬉しさはある、のではなかろうか。たとえば index を作れるとか。
ふと JSON type には index 作れないのかなと調べてみると, GIN (全文検索) としてインデクスできるようである。