Pythonの静的型をするvscode拡張: Pylance, Pyright, mypyの違い

Visual Studio Code (vscode) において、静的型検査をしながらPythonの開発をするときに使う拡張機能やツールです。

Python 3の機能で型ヒントをプログラム中に書けますが、静的型検査をするには別途後述のようなツールを利用する必要があります。

TLDR: vscodePython開発をする際は、PythonとPylanceの拡張機能を入れると良さそう

Python (拡張機能の名前)

Microsoft製のPython用の拡張機能で、デバッグやJupyter Notebookの表示などの機能を提供します。

とりあえず入れておくべき拡張機能です。

Pyright

Microsoft製の静的型チェックを行うツールです。

かつては同じくPyrightという名称のvscode拡張によって静的型チェックができましたが、2020年7月現在は後述のPylanceが推奨されるようになりました。

github.com

Pylance

Microsoft製の拡張機能で、同じく静的型チェックに加えて、自動インポートや、型宣言を強制するstrictモードも搭載されていて、より高機能です

内部で型チェックのためにPyrightを使っています。Python拡張機能をインストールした後に、こちらをインストールします。

まだプレビュー版ですが、かなり便利な印象です。

また、将来的にはPython拡張機能に統合される予定だそうです。なお、OSSではありません。

marketplace.visualstudio.com

mypy

Microsoft製のツールより(たぶん)前からある静的型チェックを行うツールです。

vscodeに入れるときにMicrosoft製の拡張機能のほうが簡単に入ったので、あまり使ったことがありません。

全体的にPylanceのほうが高機能だと思うので、こちらは劣勢と思われます。メリットとしては完全オープンソースという点でしょうか。

mypy-lang.org

Pyright と mypy の違い

こちらに詳しく記載されていました。

qiita.com

まとめ

とりあえず、vscodePython開発をする際は、PythonとPylanceの拡張機能を入れると幸せになれます

Linux版ZoomでUIの大きさを変える、UIサイズがおかしいのを戻す

Ubuntu 18.04で、Zoomを起動したところ、UIのサイズがやたらと大きくなり、画面が圧迫されて支障が出るようになった。 (Zoomをver 5.1.418436.0628へアップデートした影響?)

解決策

  • ~/.config/zoomus.conf ファイル中を開き、 autoScale=false とする。

なお、同じ設定ファイルのScalaFactorを1以外の値に設定するとUIが拡大される。 4Kディスプレイで使うときなどに便利と思われる。

参考

conferencing - How to enable HiDPI support on Zoom.us linux client? - Super User

AtCoder水色になりました (2020年5月)

2020年5月2日のAtCoder Beginner Contest 165で水色になりました。

特にこれと言ったことはないですが、目標としていた水色になったので、いわゆる変色記事を書いてみます。

f:id:kamocyc:20200504074514p:plain

私について

  • 情報系の大学 (夜間だけど)
  • プログラミング実務経験4年半ほど
  • ちゃんとした大学受験勉強をしていないので数学はあまり得意ではない
    • でも東大の院試には受かった

競プロの目的

  • 数学の苦手意識があった。(思考が遅い。少しひねった問題が解けない) なので、時間制限があり、数学的な考察も要求される競プロで鍛えようと思った。
  • 就活のため
    • 最近はAtCoderのレートが評価されると聞いた。
    • AtCoder Jobsという就職サービスがある。
  • C++を勉強しようと思った。Googleでもたくさん使われているというし、C++は苦手だったので。

目的は達成できたか?

  • 数学の苦手克服: 普通に苦手。ただAtCoder始める前よりは考察の苦手意識とかがマシになったと思う。
  • 就活: これから。ただ水色だと、応用情報技術者試験取ったくらいの(取ってないけど)ちょっとした安心感がある気がして、精神的に気持ち楽かもしれない。
  • C++: 競プロに関係あるstdライブラリとか基本的なコードの書き方はわかりました。苦手意識の克服には良いと思います。(基本構文をいちいちググっているとそれだけでモチベーション削がれるので)ただ、C++の主要要素であるクラスとかは全然使わないので、そこは別途勉強が必要です。

水色はプログラマの目標としてちょうどいい

もっと上の青に行くと、セグメント木とか、普通目にしないようなデータ構造を使ったりします。(そっち関連の分野は知らないので、実際にどの程度使われているのかわからないが)

水色までは、DPとかグラフのDFSとか、わりと素直なアルゴリズムばかりなので、普通のプログラマは水色を目標とするといいと思います。実装力の練習とかコンピュータサイエンスの基礎知識を身につけることにも役立ちます。

やったこと

  • 先人たちの記事を読み、必要な知識・スキルを把握 (特に、 AtCoderで水色になるまでにやった事とかをまとめる - shibh308’s diary など)
  • 過去問を解く
    • 苦手な分野を重点的にやる。(ググって問題を探す)
    • AtCoder Problemsでレベルのちょうどいいものを探す。Streak (連続AC日数) をつなぐ。
  • コンテストにできるだけ毎回出る。
    • 「どうせレーティング上がらないかもしれないし...」とか思うといつまで立っても上がらないので、とりあえず毎回参加する。さんざんでもモチベーションにはなる。

問題数をこなすのはけっこう大切です。 例えばDFSとかの知識だけあっても、慣れていないと帰着できることに気づかなかったり、実装に時間がかかったりします。

いわゆる蟻本も読んでみました。結局身についていないので、水色になるまでそこまで役に立ったかと言うと微妙なところですが、まあ図書館とかで一度読んでみるといいかもしれません。 セグメント木とか頑張って覚えようとしましたが、結局身につかないし使いませんでした。

コンテスト本番

いつも10時過ぎに寝ていたので、10時40分に終わるコンテストでは眠くなることが多々ありました。 対策で、8時台に20分でも寝るとだいぶ頭がスッキリします(パワーナップ)。

また、本番ではACすれば正義なので、あまり自信が無くても提出するようにしています。 最近も、ABC166でD問題をPyPyの任意精度の整数を使って強引に通したりしたので、とりあえず出してみるのも大事かなと思います。

あとは、分からなくても時間いっぱいは頑張って考えてみます。色々考えると解けることもあります。

自分は煮詰まったら、トイレに行ったり、数分休んだりしています。休むとパッと解けることがときどきあります(自分は頭が疲れやすいのかな..)。

人気沸騰

下記リンク先のツイートによると、2020年に入ってからatcoderの参加者数が急増しており、1万人を突破しています。

saba on Twitter: "ABC参加者数推移更新しました。 1万人突破!!!!… "

なので、最近は以前よりも競争が激しくなったかもしれません。(レーティングにどう影響するのかはよく調べていないのでわからないですが)

今後

今後もAtCoderやるかは未定です。 本番は緊張感があって割と楽しいですが、パフォーマンスが全然安定しない(茶〜青)上に現在ちょうど水色のボーダーライン上にいるので、次参加したら緑になりそうです。。。

WindowsゲストをVirtualBoxからVMwareに移行しようとした

TLDR: Ubuntuホスト上で,WindowsゲストをVirtualBoxからVMwareに移行しようとしたが,諦めた.

VirtualBoxでの不都合

Ubuntu 18.04ホストのVirtualBoxにWindows10ゲストを入れていたが,クリップボードの共有ができていないようだった. (Windows上でExcelなど使いたいのでこれはかなり不便)

結局,再起動をしたらクリップボードが共有できたので原因は不明.

ただし今度はシームレスモードがうまく動かなくなってしまった.

VMwareに移行しようとする

VDIファイルデカすぎて失敗

どっちにしても非商用利用のみするので,VMware (Workstation 15 Player) のほうがいいかなと思い,移行しようとした.

まず仮想アプライアンスのエクスポートをして,その後VMwareにインポートしようとしたが,ディスク容量が不足して失敗.

仮想マシンの可変サイズのストレージ容量が肥大化していて60GB以上になっていたので,下記ページを参考にVDIサイズを縮小した.

VirtualBoxのVDIサイズを縮小する - Ragnite Blue

デフラグをしようとしたら「実行不可」のような表示になっていたのでしなかったが,特に問題なくVDIサイズを縮小できた(2日前くらいに自動でデフラグされたよからだろう).

これで23GBくらいまでストレージファイルが縮小した.

ストレージファイルが縮小するとファイルの変換も早くなった.

ストレージファイルのみ移行しようとする

下記を参考にvdiファイルをvmdkに変換してみた.

vdiファイルをvmdkに変換してVMwareに移行|雑録的ノート

しかし,設定後にVMware上で仮想マシンを起動しようとすると,EFI VMware Virtual SCSI Hard Drive (0.0) ... unsuccessfulのようになって,起動しなかった.

ハードディスクの追加時にSATASCSIの両方やってみたが,どっちでも失敗した.

仮想アプライアンス経由で移行しようとする

ここらへんを参考にやってみた.

Virtualbox から vmware(player) へコンバートする - あじーん-0.0.2-SNAPSHOT

Windowsが起動して「デバイスを準備しています」という表示が出て,かなり待たされる.ハードウェア構成が大幅に変わるとこうなるみたい.

このときに気づいたのだが,UbuntuVMwareにはユニティモード(VirtualBoxのシームレスモード)が無いらしい. ということで,VMwareを使うメリットも無さそうなので,ここで諦めた.

ほんとに移行するときは,たぶん下のページみたいにしてライセンスを移行する必要がある.

Windows 10 でハードディスク以外のハードウェアを変更して、そのままOSのライセンス認証をする方法

結論

変換に時間溶かした.

いらないファイルは消したのでファイルの掃除はできた.

シームレスモードが使えないなら,ディスプレイ2枚使えばいいじゃない!

Excelのスピルは無効にできないようだ

Excel 365などにスピル機能が導入されました.

使い方を覚えると非常に便利ですが,人によっては無効化したいかもしれないですね. (自分が意図しない結果になった,エラーが表示された,とか)

どうやら完全に無効化することはできないようです.

ただし,個別の数式でスピルが起きるのを防ぐことはできます.

部分的にスピルを無効化する

一応,個別の数式でスピルが起きるのを防ぐには,その数式の先頭に=@A1:A3のように,@を入れるという方法があります. (暗黙的なインターセクション演算子

名前は仰々しいですが,要するに@を付けると今までのExcelと同じ結果を返します. (データがスピルせずに,その行(または列)のデータだけが表示される.)

関連記事

kamocyc.hatenablog.com

kamocyc.hatenablog.com

参考にしました:

Spill is hijacking my formulas - how to disable it? - Microsoft Community

How can we turn off the spill feature in Excel? - Quora

Microsoftの言い分としては,「スピルは機能の改善であり,より良いものであるので,無効化できない」っていう感じでしょうか.

Excel スピルに関して補足(暗黙的なインターセクション演算子@ など)

スピルに伴ってExcelに導入された暗黙的なインターセクション演算子@(アットマーク)やその他雑記を書きます.

暗黙的なインターセクション演算子@

これは,旧バージョンのExcelの数式の互換性を保つための演算子です.

旧バージョンのExcelファイルを新しいExcelで開いた際に,必要な箇所に自動で挿入されます. (ただし,そのファイルを再び旧バージョンのExcelで開いた際は,@は無くなります.)

ここにも書きました:

Excel スピル(動的配列数式) とバージョン間の互換性 - kamocyc’s blog

細かい挙動

@演算子の挙動(旧Excelの「共通部分の参照」の挙動)は以下のとおりです.

  • 単一の値が渡されたならば,その値をそのまま返す
  • セル範囲が渡されたならば,同じ行または同じ列のセルの値を返す
  • 配列が渡されたならば,一番左上の値を返す

配列に関して,例えば,3×3の配列定数に対して,新Excel@を適用すると,

f:id:kamocyc:20191205194233p:plain

スピルさせると,

f:id:kamocyc:20191205194259p:plain

となります.

Excelのこんな感じでちょっと複雑な配列数式は,

f:id:kamocyc:20191205195659p:plain

Excelではこんな感じになりました.*1

f:id:kamocyc:20191205195916p:plain

Excelで挙動の分かりづらかった共通部分の参照が,どこで起きているかわかりますね.

Microsoftのページでは以下のようなことも書いてありました.

  • なんで@という記号なの? ➡ テーブルのカラムを参照する時に,=[@Column1]みたいに書ける機能がもともとあったから.

  • @を取り除いてもいい? ➡ 単一の値を返すなら除ける.@を除いた数式を旧Excelで開くと配列数式になる.

  • どんな時に@が数式に付く? ➡ セル範囲や配列を返す関数に付く(例えばINDEX, OFFSET,セル範囲を返すユーザ定義関数).例外は,範囲や配列を受け取る関数(SUM, AVERAGEなど)に包まれているときなど」.

スピルのエッジケース

このページに,スピルの問題点について書いてありました.

それを受けて私が試してみた結果を記します.

@が旧Excel用に自動変換されない場合

前の記事で書いたように基本的に@演算子は旧Excelで自動的に取り除かれます.

f:id:kamocyc:20191206075557p:plain

f:id:kamocyc:20191206075619p:plain

数式の@が取り除かれていますね.

しかし,@の位置によっては,単純に取り除けないことがあります.

f:id:kamocyc:20191206075742p:plain

今度は,A1:A3+1に対して@演算子が適用されています.これは,A1:A3+1 = {1;2;3}+1 = {2;3;4}に対して@演算子が適用されて,配列の一番左上の要素が返されています.

この数式は,現在(2019年12月)旧Excelで開くと下記のようにエラーになります.

f:id:kamocyc:20191206080137p:plain

SINGLEという関数が現れましたが,そんな関数は無いので#NAME?エラーになりました.

SINGLE関数?

SINGLE関数というのは,@演算子の初期の名前です.@演算子が変換できない場合は昔の名残でSINGLE関数が現れています.

なお,新Excel=@(A1:A3+1)のような旧Excelに自動変換できない数式を入力すると,下記のような確認が表示されます.(Excel 365 デスクトップ版の場合)

f:id:kamocyc:20191206080933p:plain

なお「代わりにこのバリエーションを使用しますか」と提案された数式は,必ずしも元の式と同じ結果を返すわけではないので気をつけましょう.

ただ,このまま続行すると旧Excelでエラーになる数式になってしまうので,避ける方法があれば避けるべきでしょう.

Excelでも@演算子使いたいとき

Excelでも明示的に@演算子のように配列の一部を取り出したいときは,代わりにINDEX関数が使えそうです.

f:id:kamocyc:20191206081554p:plain

書式は以下のとおりです.

INDEX(対象範囲,行番号,列番号)

引数の指定の仕方にバリエーションがあります. また,@とは違って参照の行番号は自動的に設定されません.(@のように,「同じ行または列」とはならない)

数式の入力順で計算結果が変わる

先ほど紹介したページの中で次のような例があげられていました.

f:id:kamocyc:20191206082614p:plain

D4セルには=A1:A2が,C5セルには=A1:B1という式が入っています. ポイントは,2つの数式がスピルする範囲が重複していることです.

上の図では,最初にC5セルの式を,次にD4セルの式を入力した場合の結果です.

一方,数式の入力順を逆にすると下記のようになります.

f:id:kamocyc:20191206082849p:plain

#スピル!エラーになるセルが変わっています.どうやら,先に入力した数式を優先させる仕様のようです.

そもそもエラーにならないようにすればいいという話なのかもしれませんが,同じ数式なのに結果が異なるのは少し気持ち悪いです.

*1:コメントがホバーで表示できないので,横のセルに書いています.

WHO事務局長による新型コロナウイルスに関する発表(3月3日)

www.who.int

まとめを書きます.

ウイルスの特徴について

インフルエンザとの共通点

  • 呼吸器の症状を引き起こす.
  • 飛沫感染する.

相違点(1)

今までのデータによると,COVID-19は,インフルエンザほど効率的に人から人にうつらない.

  • インフルエンザでは感染しても症状がない人が感染拡大の大きな要因だが,COVID-19ではそうではないようだ.
    • 中国からのエビデンスによると,報告された症例の1%のみが症状が無く,その大半が2日以内に発症した.

相違点(2)

季節性インフルエンザよりも重篤な症状を引き起こす.

  • 多くの人が季節性インフルエンザへの免疫を持っているが,COVID-19に対しては免疫が無い.
    • そのため,より多くの人が感染しやすく,一部は重篤な症状になる.
  • 世界的には報告されたCOVID-19の症例のうち約3.4%が死亡.一方,季節性インフルエンザの死亡率は1%をはるかに下回る.

相違点(3)

季節性インフルエンザに対するワクチンや治療法はあるが,COVID-19に対しては現時点ではワクチンも特定の治療法も無い.

  • しかし,治療法の臨床試験が行われており,20を超えるワクチンが開発中.

相違点(4)

季節性インフルエンザを封じ込めることは不可能だが,COVID-19は可能.

  • 接触の追跡を行うべき.感染を防ぎ,命を救うから.

まとめ

  • COVID-19は,インフルエンザより効率的に広がらない.発症していない人によって伝染が広げられない.
  • インフルエンザより重症になる.
  • ワクチンや治療法がまだ無い.
  • 封じ込められる.

これが,封じ込めるために我々があらゆることを実行しなければならない理由.

各国がインフルエンザ対策のために講じてきたシステムをCOVID-19用に使える.

需要の増加,溜め込み,誤使用,市場操作によって,手袋やマスクなどの供給が世界的に阻害されている.価格が数倍に高騰している. 医者や看護師などが危険になり,COVID-19も抑えられない. 各国に生産を早急に増加させるように呼びかけている.