職質アンチパターン

無責任な事を書きたい

TypeScriptのasync functionに戻り値の型を明記すると,Promiseの型パラメータの推論が効かなくなる (場合がある)

前提.

$ $(yarn bin)/tsc --version
Version 2.8.3

async を付けない場合,以下のコードはコンパイルが通る.

function foo(): Promise<string> {
  return new Promise((resolve) => resolve('foo'));
}

async を付与すると上記コードはコンパイルが通らなくなる.

// NG!
async function foo(): Promise<string> {
  return new Promise((resolve) => resolve('foo'));
}

以下のように,戻り値側にも型パラメータを付与するとコンパイルが通る.

async function foo(): Promise<string> {
  return new Promise<string>((resolve) => resolve('foo'));
}

これは Promise を明示的にreturnしている場合にこういう状況になるのであって,以下のように暗黙的なPromiseを返却する時は問題がない.

async function foo(): Promise<string> {
  return 'foo';
}

なぜなんだろう? ふつうにasyncの場合でも推論が効いて欲しい気がする?

--

コンパイルエラーメッセージは以下の通り.

src/example.ts(2,3): error TS2322: Type '{}' is not assignable to type 'string'.

[追記]

GitHubにissueが上がっていた.

github.com

Looks like a linter issue.
if a function is marked as async, the compiler will wrap the return value with a new Promise.
https://github.com/Microsoft/TypeScript/issues/23114#issuecomment-378360613

なるほど……しかし自動closeされちゃっている……

Anker PowerPort+ 5 USB-C Power Delivery評

これの話です.

仕事柄,自宅で仕事をする時間とオフィスで仕事をする時間の比が半々くらいで,2拠点を行き来するのにいちいちMacBook ProのUSB-C充電器を持ち運ぶのがだるく (あれ結構大きくて重いですよね),それであれば1個これを買って自宅において使おう……USB-Aで充電もできるから何かと便利でしょう,というモチベーションで購入したものです.

結論から言うと,予想通りUSB-Cを介したMacBook Pro 13インチの充電は満足に出来ませんでした.ケーブルを繋いでいるにもかかわらずラップトップのバッテリのインジケータは増加せず,またCPUリソースを食うようなタスクがブン回っている時はバッテリがどんどん減っていく始末.ケーブルの問題かと思い,Apple純正のケーブルに代えてみたものの状況は変わらず.ギギギ……

というわけでもう一個,AppleのUSB-C充電アダプタを買いましたとさ.充電ができて便利!!!!!!!!!

受難の日々は続く……

PoEと私

PoEは本当に便利で,Etherケーブルでデータを送るだけではなく,同時に電流を流すこともできる.つまり我々が持っているデバイスのほとんどはPoEで事足りる,これはすなわちEtherケーブルだけで日常の生活ができるようになるということです.ごちゃごちゃな配線とはさようなら! やりましたね.今すぐにPoEスイッチを買いましょう.私は買いました.

しかしなぜだか知らんが世に出ているガジェットはネイティブでPoEをサポートしておらず,Raspberry Piですらサポートしていないこの体たらく.我々が持て余している大量のRaspberry Pi 2,これらに醜く電源とEtherべつべつ2本の線で繋ぐのか……

と言う時に来たのがこの救世主 <メサイア> です.

PoEでやってきた信号を,データと電流に分けてそれぞれEtherとMicro-USBに流すというスプリッターでかなり便利.Micro-USB側に電流が流れるタイプのスプリッターなので大量のRaspberry Piを抱えて途方に暮れていても救いが得られます.
これはAliexpressで5ドルくらいで買ったものなのだけれど,発注した翌週には現物が来るという実績があるので心置きなく100個発注ができます.
https://ja.aliexpress.com/item/Active-PoE-Splitter-Power-Over-Ethernet-48V-to-5V-2-4A-Micro-USB-4-Raspberry-Pi/32800364355.html?spm=a2g0s.9042311.0.0.PWPikQ

あとAmazonを覗いてみると,いわゆるふつうのDC電源のプラグに変換するものも売っているので,全部PoEにするのは理屈上かのうでしょう……

ところでRaspberry Piの新しいバージョンであるところの3 B+はPoEサポートなんですってね!! 勝利です!!!!
と,ニュースが出た時は騒いでいたんですが,これはネイティブサポートではなくHatによるサポートだったんですね.Hatかよ!!!
受難の日々は続く……

インターネットでネジ買うの難しい










それはそうとこれネジというよりコーススレッドですね.
そうして俺はモノタロウへと降り立ったのであった <続>

LENTIONのUSB-Cの多目的ドック買った

これ.
いままでは謎の安いやつ (Type-C to HDMI 変換アダプター HDMI/USB3.0/Type-Cハブ変換3-in-1 解像度4Kサポート MacBookなど対応) を使っていて,これはディスプレイの相性によっては映像が映らなかったり,そもそも運が悪いと今まで映像出力できていたディスプレイですらもうまく動かなくなったりとかなりストレスフルで,それでもなんとか生活していたのだけれど,やはりEthernetのポートは必要だよねとか,SDカード焼きたいよねとか (私は仕事の都合上Raspberry PiのSDカードを人並み以上に焼きます),そういうのがあって今回良いやつを買ったという次第.

使ってみた感想としては

  • 外装が結構高級な感じで良い
    • 外箱も割と高級感があって好感が持てる
  • ディスプレイによるHDMIの相性問題は今のところ起きておらず,安定して使える
    • というか全機能ちゃんと問題なく使える
  • ドック自体発熱はするものの「熱ッ!」となるレベルで発熱はしないので安心

という感じでかなりできが良くて満足.一点個人的に微妙だったのはドックから伸びるUSB-Cケーブルの長さで,自由な配置のために取り回すにはあまりに短く,それであればケーブルを廃してUSB-Cコネクタと直結する形式でも良かったんでは,とは思ったッス.
とは言え安いドック買って微妙な気分になるよりは,そこそこ良いドックを買っておいたほうがトータルの体験は良いと感じた.

しかしMacBook Proのコネクタインターフェースが全部USB-Cになった結果,こういうドックを常に持ち運ばないと不便というのはなかなか渋い……

それはそうとLENTION,名前が良くていいですね.田舎の平和な村に住んでいそうな名前です.

第二級陸上特殊無線技士になった

特に業務で必要とかではなく,個人の趣味というモチベーションで取得したものの,アマチュア無線技士とは異なって商用利用できる (アマチュア無線は「アマチュア、すなわち、金銭上の利益のためでなく、専ら個人的に無線技術に興味をもち、正当に許可された者が行う自己訓練、通信及び技術研究のための無線通信業務」とあるように,商用利用ができない) 資格なので,職能の幅が広がったとは言える.例えば,陸上移動局・携帯局の免許を取得すれば5.7GHz帯のドローンの操作なども行えるようになった.そういう仕事があるかどうかはわからない.

試験内容に関しては本当に簡単で,中学理科で学ぶような電気電子工学 (オームの法則とか) を理解していれば計算問題はまず問題がない.他は増幅率の計算問題なんかがあるんだけど,これは普通の算数なので通常の知識で解ける.あとは工学・法規ともに知識を問われる問題しか出ないので,本を読んで覚えると良い.僕は以下の本で勉強した.

第二級陸上特殊無線技士試験問題集 (合格精選240題)

第二級陸上特殊無線技士試験問題集 (合格精選240題)

正味,試験対策の勉強をしていた期間は1週間くらいで,それでも合格できた (事前にアマチュア無線の勉強をしていたというのはありそう).合格率も7割越えなので比較的易しい資格と言えそう.

合格発表は試験の約2週間後に行われて,合格していればそこから免許証申請という流れになる.免許証は申請からおよそ1か月程度で手元に届くとのことで,僕はまだ免許証を手にしていない.自動車の普通免許以外の国家資格をはじめて取得したのですこし楽しみにしている.