ごらくらいふ

プログラミングしたりゲームしたり

Appleのリファレンスページからclass名などのシグネチャを一括で引き上げるjavascript

開発者コンソールで叩いてササッと収集。snippetsにでも置いておくといい。

前提

  • 2020/06/22
  • Chrome 83.0.4103.106 で確認

結論

$$(".task-topic-info .display-name").map(el => el.innerText)

Deprecatedは無視する

$$(".task-topic-info :not(.task-topic-deprecated) .display-name").map(el => el.innerText)

関連リンク

h.ear on 2 (WH-H900N) のイヤーパッドを交換した

SONYノイズキャンセリングワイヤレスヘッドフォンである h.ear on 2 (WH-H900N)

イヤーパッドが劣化し、スポンジがむき出しになってしまった。これでは装着できない。 f:id:yajamon:20200617113323j:plain

この商品はイヤーパッドの販売をしておらず、修理に出さなければ純正品できれいな姿にはなれない。 しかし修理に出すと1万円は下らないだろう。(部材代3000円、工賃3000円x2、往復送料1000円) バッテリーがヘタったとか、そういう問題が起きてから頼りたい。

代替品

代替品を見つけたので購入した。

f:id:yajamon:20200617112623j:plain f:id:yajamon:20200617112632j:plain

いざイヤーパッド交換

イヤーパッドには6箇所穴が空いており、ここに爪がかかるようになっている。

f:id:yajamon:20200617115659j:plain

取り外した後の画像だが、爪はイヤーパーツ外周から内側に向いており、わずかに押し込んでやればイヤーパッドを外せることが伺える。

f:id:yajamon:20200617115957j:plain

交換品に付属の剥がし棒は柔らかく、無理に力をかけてはいけない。折れてしまう。

剥がし棒を、爪の外側あたりを目安に這わせ、

f:id:yajamon:20200617120943j:plain

軽くめくる。 この動きを繰り返し、先端を隙間に差し込む。

f:id:yajamon:20200617121128j:plain

合わせてイヤーパッドを、先程の爪が引っかからなくなる程度に押し込むと、爪が外れる。

これを6箇所の爪で行い、イヤーパッドを剥がす。

f:id:yajamon:20200617121814j:plain

f:id:yajamon:20200617121847j:plain

比べてみると、純正品はメッシュにも色がついていて、生地の張りにもゆとりを持たせていることが分かる。

f:id:yajamon:20200617122042j:plain

また、純正品のほうが大きい耳に対応している。

あとは代替品を(上下を間違えずに!)取り付ければ交換完了。

余談

h.ear on 3(WH-H910N)は軽量化が進んだが、代償として非常にチープな安物のような見た目になってしまった。(買ったけど)

また、イヤーパッドの形状が変わったようなので、また新しい交換品が必要になるだろう。 しかも外しづらそうで小銭を稼ぎにきているな、と感じる。

商品リンク

あらためて代替品のリンク。

付属の剥がし棒が折れるかもしれないのでパネル剥がしのリンクもおいておく。

これはオーバースペックな内張り剥がし。バロンチェア肘パッドの交換に使ったやつ。

iOSでキャリア情報の取得が大変。

データ通信に使っているキャリアの情報が欲しい

iPhone XS, iPhone XS Max, iPhone XR以降、nano-SIMとeSIMを使ったデュアルSIMに対応している。*1

この機能はiOS 12.1 から利用できるそうだ。 これに合わせて、CTTelephonyNetworkInfoAPI が更新された。 *2 *3

また、iOS 13からはデュアルSIMの両方で通話が利用できる。 このうちデータ通信は一つの回線だけ利用可能で、それを取得するための API が追加された。 *4

この状況下で、「いったいどのキャリアがデータ通信に使用されているのかを知りたい。」場合の話。

iOS 12.0 では新しい API からキャリア情報が得られない

そういう問題があるらしい。*5 しかし API 上は subscriberCellularProviderdeprecated になってしまった。

軽く調べたところ解決法はすでに見つかっていて、private property によって取得できるらしい。 (deprecated なメソッドを使うのとどっちもどっちな気がしないでもない。)

最終的にこうなる

  • extension をつかって CTTelephonyNetworkInfo を拡張した。
  • iOS 13.0 未満においては、キャリア情報が一つかどうかでデータ通信に使用中か判定する。
extension CTTelephonyNetworkInfo {
    typealias Using = Bool

    /// iOS のバージョンに応じてキャリア情報と、それが通信に使用可能なものか取得する
    var versionCompatibleServiceSubscriberCellularProviders: [(CTCarrier, Using)] {
        if #available(iOS 13.0, *) {
            // iOS 13 からデュアルSIMを同時利用可能 https://support.apple.com/ja-jp/HT209086
            // データ通信に使用するSIMは iOS 13 から判別可能 https://developer.apple.com/documentation/coretelephony/cttelephonynetworkinfo/3183044-dataserviceidentifier
            guard let providors = self.serviceSubscriberCellularProviders else { return [] }
            guard providors.count > 0 else { return [] }

            let usingId = self.dataServiceIdentifier ?? ""
            return providors.map { (key: String, carrier: CTCarrier) in
                let using = key == usingId
                return (carrier, using)
            }
        } else if #available(iOS 12.1, *) {
            // iOS 12 から複数のSIMがありうる https://developer.apple.com/documentation/coretelephony/cttelephonynetworkinfo/3024511-servicesubscribercellularprovide
            // iOS 12.0 ではバグで値が得られないらしい https://stackoverflow.com/questions/52846542/why-do-servicesubscribercellularproviders-return-nil-in-ios-12
            guard let providers = self.serviceSubscriberCellularProviders else { return [] }
            guard providers.count > 0 else { return [] }

            // 1件であれば使っていることが自明
            let using = providers.count == 1
            return providers.map { (key: String, carrier: CTCarrier) in
                return (carrier, using)
            }
        } else if #available(iOS 12.0, *) {
            // private property によって参照できるらしい
            // microsoft の app-center-sdk におけるissue https://github.com/microsoft/appcenter-sdk-apple/issues/1905
            // microsoft の app-center-sdk にも採用されている https://github.com/microsoft/appcenter-sdk-apple/pull/1914/files/fa504f5278f7ca98a3587479d3adcfd4d568922b
            guard let providers = self.value(forKey: "serviceSubscriberCellularProvider") as? Dictionary<String, CTCarrier> else { return [] }
            guard providers.count > 0 else { return [] }

            // 1件であれば使っていることが自明
            let using = providers.count == 1
            return providers.map { (key: String, carrier: CTCarrier) in
                return (carrier, using)
            }
        } else {
            guard let carrier = self.subscriberCellularProvider else { return [] }

            return [(carrier, true)]
        }
    }
}

参考リンク

iPadとハードウェアキーボードで‪"日本語入力"をDvorak‬打ちできる日が来ていた

iPadOS 13.4 にて、ライブ変換が導入されたと聞いて設定を漁っていたら見つけてしまった。

前提の話: ‪Dvorak‬ 入力とは

Dvorak‬入力は母音が左手のホームポジションに集中していて、英文入力に特化したキー配列になっている。 右手で子音、左手で母音を入力できるこの配列は、日本語のローマ字入力にも非常に効果を発揮する。

条件

  • iPadOS 13.4 以降である
  • ハードウェアキーボードを使う

設定箇所

設定アプリの 一般 -> キーボード を開くと、ハードウェアキーボード の項目がある。

f:id:yajamon:20200513121652p:plain

ハードウェアキーボードの項目で、ローマ字入力に使うキーマップを選択できるようになっている。 ここで、‪Dvorak‬を選択すれば、晴れてiPadで‪Dvorak‬打ちが開放される。

f:id:yajamon:20200513121721p:plain

DvorakJPではない

か行のために ckの代替にしたり、 拗音のために nhyの代替にしたり、 二重母音や撥音の入力を補助する母音キーの上下キーによる拡張はない。

いずれ取り込んでほしい。

z + (h|j|k|l) による ←↓↑→ の入力には対応してるのだけどなぁ。

関連リンク

node_modulesをexcludeに入れても参照してエラーになっているときは、@typesを確認する。

typescriptのプロジェクトを作るとき、毎回プロジェクト設定と1から向き合ってる。 色々忘れてるから毎回足を引っ掛けるんだこれが。CompilerOptionsの項目多いし。

前提

  • 発生時の TypeScript version: 3.7.5
  • typescriptのビルド設定はtsconfig.jsonを使っている

問題

  • tscnode_modules配下を参照してしまってエラーを吐くことがある
  • excludeの対象にnode_moduleが入っているにも関わらず

原因

  • typesの設定をしておらず、tscnode_modules/@typesの下すべてを見に行っていた
    • エラーをよーくみると@typesのものばかりだった

対応

  • tsconfig.jsoncompilerOptions.types を設定する
    • 特に外部モジュールを参照しないときは、空配列を与えた
    • compilerOptions.typeRootsの設定でも良い

関連URL

C97 に一般参加してきました。

鉄は熱いうちに打てと言いますが、コミケの戦利品は夜明けまでに上げるのが良いでしょう。 日が経つにつれて公開するのが億劫になってきます。(実績を伴う

ということで戦利品。今回は朝寝坊*1が多くて、ささやかな戦果になりました。

*1:まぁ寝坊したのは朝早いと分かってるのにRTA in Japan見始めてしまったからなんですがね!!

git: 書き出しが同じコミットメッセージの手間を省く

コミットメッセージの書き出しがしばらく同じで、でもコミットメッセージはエディタで書きたいとき。 git commitを叩いて律儀に手入力するのも疲れるし細かい無駄が発生するのでどうにかしたい。

結論

git commit -em 'template message'
  • -m はコミットメッセージを入力するオプション。
  • -e はコミットメッセージを編集することを伝えるオプション。

この組み合わせによって、書き出しが同じコミットを連ねるときの負担が軽減した。 historyからコマンドを拾って叩けばよいので。