日々精進

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

IT

windows11 homeでext4.vhdxの容量を削減する

IT

WSL2を使っていると、ext4.vhdxというファイルの容量がすごく大きくなることがある。これを小さくする方法としてOptimize-VHDを使う方法がよく紹介されているが、これはHyper-Vの機能の一つらしく、Hyper-VはWindows11 Proでないと使えないのでWindows11 Hom…

VSCodeのターミナルで入力が出来なくなった場合の対処法

IT

ターミナルの右上の+ボタンをクリックして新しくターミナルを開き、その後既存のターミナルを削除すればよい。 参考: www.javadrive.jp

/var/lib/docker/overlay2の容量が大きいので削減したい

IT

/var/lib/docker/overlay2の容量をdu -sh /var/lib/docker/overlay2で調べたところかなり大きかったのでびっくりしたが、以下によるとduでは正確な容量を調べられないらしい。 www.creationline.com /var/lib/docker/overlay2の容量を手っ取り早く削減するた…

pythonでdecoratorを付けたメソッドの戻り値の型チェックができるようにする

IT

以下のようにdecoratorを定義すると、@timerを付けたメソッドの戻り値の型がAnyになってしまい、不便。 def timer(fn) : from time import perf_counter def inner(*args, **kwargs): print(f'start {fn.__name__} {CommonUtil.now_datetime_for_log()}') Co…

gradleでインストールしたライブラリが依存しているライブラリがインストールされない

IT

原因は依存関係がoptionalだったため。例えばspring-data-redisだと、jedisは依存ライブラリではあるが(optional)と記載されている。 https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis/2.7.2 optionalは複数のライブラリのど…

springfox2.10.xは使ってはいけない

IT

以下のIssueでcommitterが2.10はbuggyなので使わないでと言っている。じゃあリリースバージョンにbetaとかつけてほしい。。 github.com 3.0.0の使用を推奨しているが、もう2年ぐらいリリース止まっているので別のライブラリに乗り換えた方がよさそう。

JUnitのassertThrowsで例外がthrowされることをテストしたらエラーメッセージがログに出る

IT

以下のように、assertThrowsでExceptionがthrowされることをテストする場合。 assertThrows(Exception.class, () -> myObj.method()); 想定通りの例外がthrowされた場合でも以下のようなエラーメッセージがログに出るので邪魔くさい。 Exception in thread "…

WSL2を再起動する度に/etc/resolve.confが消える

IT

以下のIssueで報告されている現象。これが起きると、インターネットと通信出来なくなるので困る。 github.com まだ未解決のようだが、一旦workaroundとして、以下を実行すると消えなくなる。 sudo sh -c "echo 'nameserver 8.8.8.8' > /etc/resolv.conf" # …

JUnitで例外がthrowされるケースのテストをしたら「Exception in thread "pool-1-thread-1" java.lang.RuntimeException」が出て鬱陶しい

IT

以下のような感じで例外がthrowされることをテストした場合。 assertThrows(Exception.class, () -> obj.method()); 想定通りのExceptionが出てテストが成功する場合でも、「Exception in thread "pool-1-thread-1" java.lang.RuntimeException」みたいなエ…

gradlew dependenciesを実行した時にorg.hamcrest:hamcrest-core:1.1 -> 1.3のように表示される->の意味

IT

以下のように表示されていたら、mockito-core:1.9.5はhamcrest-core:1.1に依存しているが、他のライブラリの依存関係から実際にインストールされているバージョンは1.3になっているよという意味。 +--- org.mockito:mockito-core:1.9.5 | +--- org.hamcrest:…

IntelliJからテストコードをデバッグ実行すると「エラー: メイン・クラスxxxが見つからなかったかロードできませんでした」エラー

IT

エラーメッセージからはメインクラスの指定が間違っているとかクラスパスが正しくないとかそういう原因かなと思ったが、 真の原因はCommand line is too longエラーだった。(IntelliJでテスト実行する時に良く起きるやつ) Run/Debug Configuration画面のSh…

gradle buildで「java.lang.OutOfMemoryError: Java heap space」エラー

IT

「java.lang.OutOfMemoryError: Java heap space」で検索してみると、gradle.propertiesに以下のように設定してヒープサイズを大きくすると直るという情報があるが、直らなかった。 org.gradle.jvmargs=-Xmx4g 原因はログに画像をbase64エンコードした文字列…

docker buildすると「failed to solve with frontend dockerfile.v0: failed to create LLB definition: circular dependency detected on stage: build-env」エラー

IT

原因は、コマンドの最後に\がついていることだった。以下のように、本当は2行目の末尾に\をつけてはいけないのだがついてしまっていた。 RUN echo ". /opt/conda/etc/profile.d/conda.sh" >> /root/.bashrc \ && echo "conda activate myenv" >> /root/.bash…

Base64.decodeで「java.lang.IllegalArgumentException: Last encoded character (before the paddings if any) is a valid base 64 alphabet but not a possible value. Expected the discarded bits to be zero.」エラー

IT

原因はBase64.decodeに渡した文字列が4で割り切れない文字数になっているため。 Base64は64種類の文字でバイナリデータを表現しているため、1文字が6bitに相当する。なので4文字=24bitを1セットとしてエンコードする。 エンコードするデータが24bitで割り切…

WSL2を起動するとwindowsが超重くなったがVmmemの使用メモリ量を減らすと軽くなった

IT

WSL2をインストールし、起動するとVmmemというプロセスが10GBぐらいメモリを確保してしまい、windowsがめちゃくちゃ重くなった。 以下を参考に、.wslconfigというファイルを作るとVmmemのメモリ消費量が減り、重くなる減少は解決出来た。 devlights.hatenabl…

EBSの容量が足りなくなったら、容量を増やすのではなく新しいボリュームを追加した方が良い

IT

理由は、ボリュームサイズを増やすのは割と簡単にできるが減らすのは面倒だから。(特にルートボリューム) 減らす手順は以下。 blog.e2info.co.jp 最初から、ルートボリュームは少なめにしておき、データボリュームを別途追加してデータはそちらに置くよう…

PyCharmで「Cannot connect to remote host: net.schmizz.sshj.transport.TransportException: Connection reset」エラー

IT

PyCharmのSSH Configurationで設定を入力し、「Test Connection」をクリックすると掲題のエラーが出た。 原因は以下 * ローカルでdockerコンテナを起動し、ホストの2222ポートをコンテナの22ポートにmappingしていた * 同時にEC2インスタンスにもsshで接続し…

spring bootのバージョンを2.6系に上げるとspringfoxがエラーを吐くようになる問題

IT

spring bootのバージョンを2.6系に上げるとspringfoxがエラーを吐くようになる。エラーメッセージは以下。 org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.…

multiprocessing.Poolで並列処理をすると、子プロセスで例外が発生した場合エラーメッセージがでない

IT

multiprocessing.Poolでも、apply_asyncを使って子プロセスを起動している場合は子プロセスで発生した例外を親プロセスに伝えられる。詳細は以下参照。 conta.hatenablog.com 自分はmapを使っていたので同様のことができず困った。しかも、子プロセスで例外…

yieldと通常のreturnは併用できない

IT

同じ関数の中で、ifで分岐してこの場合はgeneratorとして使う、この場合は普通に値を返す、ということはできないらしい。 ja.stackoverflow.com しょうがないのでgeneratorがほしい場合とそうでない場合で共通の部分を関数に抽出して残りの部分をそれぞれ別…

concurrent.futuresで並列処理をすると、親プロセス終了時に「Error in atexit._run_exitfuncs OSError: handle is closed」エラー

IT

原因は以下。 子プロセスを管理しているオブジェクトはfull gcが実行されるまで生きている 親プロセスが終了すると子プロセスを管理しているオブジェクトは子プロセスに停止命令を送る その時には子プロセスはすでに終了しているので「handle is closed」が…

aws cliでS3からファイルをダウンロードする時、沢山あるファイルをzipにまとめるとダウンロードが30倍速くなった

IT

約15000ファイルの画像データセットを、普通にダウンロードした場合とzipに固めたものをダウンロードした場合でどの程度速度差があるのか計測してみた。 EC2インスタンスはg4dn.2xlarge。 普通にダウンロードした場合:300秒 zipに固めてからダウンロードし…

boto3でS3からファイルをダウンロード・アップロードするのを高速化する

IT

boto3のS3.Client.download_fileメソッドを使って大量のファイルをダウンロードすると、aws cliでダウンロードするよりかなり遅い。 boto3.amazonaws.com 理由はdownload_fileは同期処理なのに対してaws cliはマルチスレッド(ちゃんと調べてないのでマルチ…

shell scriptで環境変数が未定義かどうかを判定する

IT

-z "${VAR}" とするのがメジャーだが、これでチェックするとset -euxo pipefailを設定して未定義変数を使用している場合、エラーになるようにしているとエラーで止まってしまう。 代わりに ${VAR:-"unset"} == "unset" とするとエラーにならない。 参考: ww…

Cmderが重すぎるのでConEmuに乗り換えしました

IT

タイトル通りだが、Cmderが重すぎてイライラするのでConEmuに乗り換えたら非常に快適になりました。 有料でいいから軽くて使い勝手のいいターミナルエミュレータがほしい。。

OpenSSH 8.8で、Ctrl+Cを押すと接続が切れる

IT

git for windows 2.35に付属しているOpenSSH 8.8を使ってsshでサーバにログインしたところ、Ctrl+Cを押すとssh接続が切断されてしまう。期待する動作は、サーバで実行中のプロセスにSIGINTを送ること。 git for windows 2.28.0に付属しているOpenSSH 8.3だと…

Jetbrains製IDEでuntrusted server certificateをacceptするか何度も聞かれる問題

IT

設定で自動的にAcceptするようにできる。セキュリティ的にはよろしくないと思うけど・・やり方は以下参照。 android - Untrusted Server Certificate in Intellij - Stack Overflow

Cmderでタブ毎にhistoryを分ける

IT

cmderフォルダ\config\clink_settings の history.shared = True をFalseにすると分けられる。 参考: github.com

エクセルで同じBookを2つ並べて作業する

IT

違うシートを参照しながら作業したい場合などに使える。 以下のサイトの方法で同じBookを複数ウィンドウで開ける。今までファイルをコピーして開いたりしてたけど、こっちの方が楽だしどちらのウィンドウで編集したも同じファイルが更新されるのでいいな。。…

docker imageをビルドすると「mesg: ttyname failed: Inappropriate ioctl for device」というメッセージが出る

IT

害は無いんだけど、赤字で表示されるし何か気になるので抑止したい。。 以下の行をDockerfileに追加すると出なくなった。 RUN sed -i -e 's/mesg n || true/tty -s \&\& mesg n/' /root/.profile 参考: www.educative.io