日々精進

新しく学んだことを書き留めていきます

IT

%%timeで処理時間を計測するとwall timeとcpu timeが全然違う

IT

Jupyterで%%timeを使って処理時間を計測したところ wall timeが140sでcpu timeが2sぐらいだった。 原因は並列処理をしていたため。cpu timeはメインスレッドの処理時間のみ計測した結果っぽい。 並列処理をした場合の全スレッドのcpuを使った時間は出せない…

ubuntuのバージョンを18.04にするとdocker imageのbuildがtzdataのinstallで止まるようになった

IT

原因はtzdataのinstall時にtimezoneを選択するよう求められること。 Dockerfileに以下を追加すると選択しなくてよくなる。 ENV DEBIAN_FRONTEND=noninteractive 参考: qiita.com

Pythonで「ImportError: No module named」エラー

IT

色々原因はありうるが、自作モジュールでかつコマンドラインから実行している.pyファイルと別のフォルダにあるモジュールでこのエラーが出ている場合、 モジュール検索パスが通っていないことがある。 モジュール検索パスを追加したい場合はPYTHONPATHかsys.…

dockerコマンドを実行すると「An HTTP request took too long to complete.」エラー

IT

docker daemonを再起動したら直った。謎なエラーだ。。 参考: qiita.com

S3のフォルダ名を変更する

IT

直接変更する方法はなく、以下の手順が必要。 ・以下をEC2で実行する aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to> ・古い名前のフォルダを削除する もっと簡単にフォルダ名変えられるようにしてほしい。。 参考: stackoverflow.com</folder_name_to></bucket></folder_name_from></bucketname>

userがsudoできるようにする

IT

以下でsudoできるようになる。 usermod -G sudo <ユーザ名> 参考: webkaru.net

dockerでmountしたフォルダにwrite権限が無い場合の挙動

IT

docker composeファイルで以下のようにホスト側のフォルダをmountしている場合。 volumes: - "/var/log/app:/home/my-user/app/log" /home/my-user/app/log(コンテナ側のフォルダ)にwrite権限がないユーザでファイルを保存しようとすると、Permission Denied…

Windows10を初期化する方法

IT

Windows10には初期化機能があり、簡単に初期化できる。詳細は以下参照。 www.comshop.co.jp こんなに簡単に初期化できるとは。。便利。 ただ、初期化だけだと初期化前にあったファイルを復元できてしまう可能性があるので、他の人にPCを譲る場合は初期化後に…

localeについて

IT

localeとは言語、単位、時刻など国毎に異なる設定をまとめたもの。 C localeはデフォルトのlocale。基本アメリカに合わせた設定になるはず。 LANG, LC_TYPE, LC_ALLなどいくつかの環境変数を使って設定する。 en_US.UTF-8のように 言語_国.エンコーディング…

プロセスのメモリ使用量の履歴を簡単に表示する

IT

cloudwatchのような監視ツールがあればメモリ使用量もグラフで出してくれるんだろうけど、 そこまでしなくていいやという場合。以下をコンソールで実行すると1秒に一度特定のプロセスのメモリ使用量などを取ってきて表示してくれる。 top -d 1 -b |grep <process> 参</process>…

S3にはバージョニング機能がある

IT

知らなかった。。S3にはバージョニング機能があるのでoldフォルダにファイルを取っておいたりしないで良かったのか。 バケット単位でのON/OFFしかできないのでその点はちょっと使いづらいが、便利そう。 qiita.com

PythonでバイナリデータをAES256/CBC/PKCS5Paddingで暗号化・復号するサンプルコード

IT

PyCryptodomeがインストールされている前提。 from Crypto import Random from Crypto.Cipher import AES from test.util.test_util import AES_KEY block_size: int = 32 def test_encrypt_image(): with open("sample.jpg", "rb") as f: plain_image: byte…

PyCryptodomeでAES256/CBCで暗号化する時にIVの長さを32bytesにすると「ValueError: Incorrect IV length (it must be 16 bytes long)」エラー

IT

PyCryptodomeのドキュメントを見ると、CBCモードの場合IVは16bytes固定と書いてある。IVはブロック長と同じ長さでないとだめなはずだけど。。 pycryptodome.readthedocs.io IVを16bytesにすると直った。鍵長は32bytesのものを渡しているのでAES256で暗号化は…

conda createを実行すると「CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/pro/linux-64/repodata.json.bz2>」エラー

IT

原因はcondaのproxy設定が出来ていなかったため。 condaはhttp_proxyなどの環境変数を見てくれず、.condarcで設定しないといけない。 以下のようにproxyの設定をすると直った。 proxy_servers: http: http://localhost:60088 https: http://localhost:60088 …

apt-getを実行すると「[archive.ubuntu.com (91.189.88.152) へ接続しています]」でエラー

IT

原因はproxy環境なのにproxyを経由していないことだった。 環境変数のhttp_proxyとhttps_proxyにproxyサーバを設定すると直った。

Dockerfile内でnvmをinstallする場合先にNVM_DIR環境変数を設定しておく

IT

RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.20.0/install.sh | bash を普通に実行すると/root/.nvmにinstallしにいって困った。 先に ENV NVM_DIR /usr/local/nvm と書いてNVM_DIR環境変数を設定しておくと指定の場所にinstallできた。 …

コマンドライン引数と環境変数の使い分け基準

IT

pythonのプログラムを起動するときに引数を渡す方法としては主に python main.py --start 1 --end 2 のように起動引数として渡す場合 環境変数経由で渡す場合 設定ファイルで渡す場合 変更頻度が低い、かつ環境毎に変わらない場合は設定ファイルを使う 変更…

コンテナにsshでログインできない

IT

現象は以下 buildに失敗したコンテナを docker commit <ID> debug && docker run -it debug /bin/bash コマンドで起動 そこにsshでログインしようとするとConnection refusedエラー docker psを打つとPORTSの項目にdocker-compose.yamlで定義しているポートマッ</id>…

pythonで単体テスト時に現在時刻を設定する

IT

datetime.now()を呼んでいるコードがあると単体テストが書きにくいので現在時刻をテストデータに置き換えたいと思ったが 以下によると結構めんどそう。。 stackoverflow.com freezegunを使うと楽に出来た。これはいい。詳細は以下。 blog.amedama.jp

マイクラのforge serverを起動すると「java.lang.NoClassDefFoundError: net/minecraft/client/renderer/entity/Render」エラー

IT

Super-TNT-Mod-1.12.2.jarをserverに導入すると「java.lang.NoClassDefFoundError: net/minecraft/client/renderer/entity/Render」エラーが発生した。 原因はModがマルチプレイ対応してないこと。serverでは使えないクラスのオブジェクトを生成しようとして…

GCLogFileSizeを設定してもjavaのGCログがローテーションされない

IT

テスト用にGCLogFileSizeを1kに設定してテストを行ったがローテーションしない現象が発生した。 原因はGCLogFileSizeの最小値が8kだから。そんな制約あったのか。。 参考: stackoverflow.com

Dockerを削除してもDockerが追加した仮想NICが消えない

IT

一度Dockerを入れて削除したんだけど、仮想NICが消えない。。 以下を参考にして手動で消した。 レジストリをいじるのはいつもドキドキする。。 参考: viewse.blogspot.com

nuro光環境でRTX1210を使っている場合のポート開放

IT

うちのネットワークは終端装置⇒RTX1210⇒PCという構成になっている。 マイクラのサーバを公開しようとRTX1210のポートマッピング設定をしたが、公開できなかった。。 意識してなかったが、終端装置もルータになっていて二重ルータ状態だったっぽい。 終端装置…

remoteサーバからローカルPCを経由して別のremoteサーバにscpする

IT

以下のように-3オプションをつければいい。 scp -3 remotehost1:text.txt remotehost2:text.txt 参考: qiita.com

Dockerfile内でインストールしたパッケージがdocker imageに入っていない

IT

現象は以下。 Dockerfile内でapt-getでlibopencv-devをインストールした imageからコンテナを作ってログインするとlibopencv-devが無い 原因はdokcerのmulti stage buildを利用していて、Dockerfileは以下のような感じだったんだけど、 これだと/opt/の下し…

Dockerのmulti stage buildは便利

IT

今更ですが。。multi stage build便利ですね。ちまちまcacheをcleanする必要なかった。。 詳細は以下の記事を読めばよく分かると思います。 qiita.com

PyTorchで学習を回すと「ctdet/coco_res18ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm).」エラー

IT

shared memoryが足りないのが原因らしい。 dockerコンテナはデフォルトだとshared memoryが64MBになっている。 以下のようにshm_sizeを指定するとshared memory sizeを変更出来る。 services: servicename: shm_size: '7gb' 参考: qiita.com

Dockerfile内でbashを使う

IT

デフォルトだと/bin/shになっていていつもと勝手が違うのでbashを使いたい。 以下を実行するとそこからbashになる。 SHELL ["/bin/bash", "-c"] 参考: qiita.com

docker buildに失敗した場合のデバッグ方法

IT

以下手順でビルド失敗時点のコンテナに入れるのでそこで手動でコマンドを実行して調査する。 以下を実行して一番上のコンテナのIDをコピーする。 docker ps -a コピーしたIDを以下のコマンドに入れて実行する docker commit <ID> debug && docker run -it debug </id>…

@dataclassでクラス変数を定義する

IT

以下のようにtyping.ClassVarでラップすればいい。 @dataclass class TestClass: var1: ClassVar[str] = "class" 参考: qiita.com