DEVGRU

プログラミングと競馬予想について書きます

Angular + Sentry で、 ErrorHandler から console.log() を呼び出すときの落とし穴

あんまりないと思うのだが、Angular と Sentry (Ravenではなく) を同時に使っているとき、ErrorHandler で Sentry にエラーを送ると同時に console.log() にエラー内容を出したいことがあるかもしれない(うちのプロジェクトではなぜかある)。

しかし、そのまま console.log() するとまずいことが起きたので、回避方法をここに書いておく。

発生したまずいこと、というのは再帰呼出しで、ブラウザの制限を食いつぶすまで再帰呼び出しが続いていたようだ。

これを回避するには、以下のようにする。

import { consoleSandbox } from '@sentry/utils/misc';

class MyErrorHandler extends ErrorHandler {

    handleError(err: any) {
         consoleSandbox(() => {
              console.error(err.originalError || err);
         });
    }
}

これで再帰呼び出しは起こらないようになった。

Angularアプリケーションプログラミング

Angularアプリケーションプログラミング

Angularデベロッパーズガイド  高速かつ堅牢に動作するフロントエンドフレームワーク

Angularデベロッパーズガイド 高速かつ堅牢に動作するフロントエンドフレームワーク

  • 作者: 宇野陽太,奥野賢太郎,金井健一,林優一,吉田徹生,稲富駿,丸山弘詩
  • 出版社/メーカー: インプレス
  • 発売日: 2017/12/15
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

大きなテキストファイルをSCPするときは-Cをつけると速い

機械学習用のEC2インスタンスにファイル転送する際、大きなJSONファイルをSCPすると非常に時間がかかっていた。

しかし、オプション1つつけるだけでかなり早くなった。

つけたオプションは -C。以下のように使う。

scp -C from host:/to

実際手元で試してみたら、以下のように違いが出た。

-C なし 43MB   1.1MB/s   00:40
-C あり 43MB   9.8MB/s   00:04

おおよそ10倍の差がついた。

EC2インスタンスは時間課金なので、この差は大きいだろう。

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services エンタープライズ基盤設計の基本

Amazon Web Services エンタープライズ基盤設計の基本

AWS EC2の深層学習用インスタンスのJupyter Notebookでtqdmを使えるようにする

機械学習で非常に時間のかかる処理をするとき、AWS の EC2 インスタンスを立ててその上で実行している。

AMIは深層学習用のインスタンスを用いている。

aws.amazon.com

Jupyter Notebookもプリインされている。

また、時間のかかる処理を可視化するのに便利なパッケージ tqdm があり、これも重宝している。

github.com

tqdm は Jupyter Notebookもサポートしているが、上記AMIで動かすのには一苦労あった。

結論から言えば、以下が必要だった。

conda install -c conda-forge ipywidgets nodejs jupyterlab tqdm
jupyter nbextension enable --py widgetsnbextension --sys-prefix
jupyter labextension install @jupyter-widgets/jupyterlab-manager

まず、最新版の ipywidgets , nodejs, それに tqdm をインストールする。筆者はJupyter Labを使うためそれも導入している。

次に、 ipywidgets を有効化する。これによってインタラクティブな機能が使えるようになる。

最後に、jupyterlab exntensions を有効化する。

そして、以下のようなコードでtqdmが動くようになる。

from tqdm.autonotebook import tqdm

for _ in tqdm(range(1, 100)):
  # なにか重い処理
  ...

こんな感じでプログレスバーが表示される。

f:id:katoken-0215:20190329234600p:plain

参考:

ensekitt.hatenablog.com


独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

みんなのPython 第4版

みんなのPython 第4版