“ひ to り go と” = zumuya の人が記事を書く所

まんまるスピーカー - Echo Spot

MacHard

何ヶ月も前に YouTube で見かけて「いいなー」と思っていた Echo Spot がついに日本でも発売開始。それと同時に自分の手元にもやってきたのだ。

見た目がまるまるしていてかわいい。スマートスピーカーが欲しかったというよりもこのかわいさに惹かれたところがある。もはやデザインの多様性なんて存在しないようなモバイルの世界でなくこういう卓上、机の上のためのガジェットが盛り上がってくれれば楽しいのに。

そして今回はディスプレイつきで普段は時計なのもいい。ちょうど常時表示されている時計がなくて困っていたし、それだけでも買う理由になる。(昔部屋にあった壁掛け時計は音楽を聴くときにカチカチ音が気になって外に移してしまった。)

→ 続きを読む

RawRepresentable のままで Dictionary にアクセス

MacDev
enum MyKey: String
{
    case identifier
    case colorCode
}

func process(_ dictionary: [String: Any])
{
    let identifier = dictionary[MyKey.identifier.rawValue] as? String
    let colorCode = dictionary[MyKey.colorCode.rawValue] as? Int
    ...
}

この .rawValue を何度も書きたくなかったので extension を書いたという話。シンプルなコードなので誰が書いてもほぼ同じになりそう:

extension Dictionary
{
    subscript<WrappedKey: RawRepresentable>(_ key: WrappedKey) -> Value? where WrappedKey.RawValue == Key
    {
        get { return self[key.rawValue] }
        set { self[key.rawValue] = newValue }
    }
}
これがあると
let identifier = dictionary[MyKey.identifier] as? String
let colorCode = dictionary[MyKey.colorCode] as? Int
こうなる

もちろん最初から [MyKey: Any] にした方がきれいな状況であればその方がいいと思う。すっきりした勢いだけで書いた内容のない記事でした。

callback を登録解除できない IOKit のバグ

MacDev

IOKit で HID デバイスからデータを受け取るには IOHIDDeviceRegisterInputReportCallback() で callback を登録する。逆に callback の登録を解除したいときは専用の関数があるわけではなく Apple の資料によると

Note: To unregister pass NULL for the callback.

登録するときと同じ関数を、(callback: NULL) で呼べばいいらしい。

...と知ってからずっと試しているけど、どんな書き方をしても解除したはずの古い context で callback が呼ばれてしまい、アプリケーションがクラッシュ。

どうしようもないので IOKit のソースコードを読んでみることに。

→ 続きを読む