日々精進

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

IT

YAMLとJSONの使い分け方

IT

YAMLは可読性が高く、コメントが書けるので設定ファイルなど人が読み書きするしプログラムも読むファイルに向いている JSONはより一般的なので、プログラム間のデータ連携に向いている 参考: stackoverflow.com

pythonでファイルを読み込むコードを簡単にする

IT

普通はwith open(path) as f: ...のように書くと思うけど、以下だとone linerでかける。 from pathlib import Path contents = Path(file_path).read_text() 細かいけどちょっと嬉しい。 参考: stackoverflow.com

python標準のファイル操作APIでなく、tf.gfileを使うメリット

IT

tf.gfileは普通のファイルシステムの他にHDFS等に対応しているのがメリット。 ファイルシステムだけしか使わないならメリットはない。 参考: stackoverflow.com

yamlを出力したときにインデントが足りないところがある

IT

dictに配列をネストさせたオブジェクトをyamlに出力すると以下のようになる。 dictionary: - A - B こうなってほしい。 dictionary: - A - B こうするためには、以下のようにする。 class FixIndentDumper(yaml.Dumper): def increase_indent(self, flow=Fal…

OrderedDictをyamlに出力する

IT

yaml.dump(ordered_dict)を実行するだけだと、Pythonのクラス名も出力されてしまうので以下のようにすると通常のyaml形式で出力される。 def represent_odict(dumper, instance): return dumper.represent_mapping('tag:yaml.org,2002:map', instance.items(…

YAMLとJSONの使い分け方

IT

YAMLはJSONより可読性が高く、コメントも書けるので設定ファイルはYAMLの方が適している。 JSONはデータフォーマットとしてより一般的なので、システム間でテキストで構造化データを受け渡す場合に使う。 JSONはコメントが書けないのがツライ。。 参考: sta…

boto3でbucketのregionを取得する

IT

以下でできた。 s3: ServiceResource = boto3.resource('s3') bucket = s3.Bucket(bucket_name) bucket.meta.client.get_bucket_location(Bucket=self.bucket_name)['LocationConstraint'] 参考: stackoverflow.com

【OpenAPI3.0】readOnly属性を付けてもswagger codegenで生成したコードにsetterがある

IT

setterは生成しないのがあるべきと思ったが、生成される。。 Issueはあるけど2ヶ月以上放置されているので今後も直る可能性は低そう。 参考: github.com

yamlでNoneや指数形式が文字列になる

IT

none_item: None float_item: 1e-09 上記のようにyamlを定義してPyYamlで読み込むと。それぞれ'None', '1e-09'という文字列になってしまう。。 なので、以下のように修正した。 none_item: # None float_item: 0.000000009 もっといいやり方ないのかねぇ。。…

aws cliで「SignatureDoesNotMatch」「The request signature we calculated does not match the signature you provided. Check your key and signing method.」エラー

IT

原因は aws configure コマンドで設定したシークレットアクセスキーなどの情報が間違っていたため。 IAMロールで権限を与えていたのでそもそもaws configureは不要だった。なので、.awsフォルダを削除したら直った。 参考: qiita.com

S3上のデータを直接tensorflowから読み込んだ場合に「curl returned error code 77」「If the signature check failed. This could be because of a time skew. Attempting to adjust the signer.」エラーが出る

IT

tensorflowのtf.data.TFRecordDatasetにS3に置いたTFRecordのパスを渡すと読み込んでくれるという機能がある。 github.com これを使うと curl returned error code 77 が出た。77はSSL証明書のエラーらしい。 curl.haxx.se 今回はEC2からのアクセスで、man i…

EC2からS3のデータをダウンロードする場合、AWS外のネットワークを経由する場合がある

IT

今までEC2-S3間の通信はAWS内のみ通ると思っていたけど、VPCエンドポイントがない場合、一度インターネットに出るらしい。 そうすると通信速度が落ちるしセキュリティ的にも問題になりうるので VPCエンドポイントは必ず作るようにしておかねば。。 参考: ht…

AWS CLIを使ってS3からファイルをダウンロードすると途中から速度が落ちる

IT

現象は以下。 インスタンスタイプはg4dn.xlarge 同じリージョンのS3バケットからEBS gp2にダウンロードする aws s3 cpコマンドで実行 このとき、 最初:210MB/s⇒5GBぐらいから速度が下がり始める⇒10GBを越える頃には150MB/sぐらい のように速度が変化する。 …

特定のVPCからの通信のみ権限を与えるポリシー

IT

以下のようにVPCエンドポイント指定で権限を付けられる。 { "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:a…

JetBrains系IDEの.imlファイルに差分が出て困る問題

IT

.imlファイルはコミットしてチームで共有することが推奨されているのでコミットしているが、 この中にコンパイラ・インタープリタの設定も入っていてその名前が人によって自由に決められるので そこで差分が出て困る。。 以下で「インタープリタの名前をPyth…

AutoScaling時にOutOfMemoryError発生時のヒープダンプを回収する

IT

AutoScalingしている時にOOMが発生するとサーバが落ちてAutoScalingGroupがサーバを消す。 なので、-XX:+HeapDumpOnOutOfMemoryError JVMオプションを設定していてもヒープダンプファイルがEBSもろとも消えてしまう。 消える前にS3にアップロードさせたいが…

MetaspaceとそのJVM option

IT

Metaspaceとは、クラスやメソッドの情報を格納しておく領域。ヒープ外にあるので、-Xmxを設定していても必要に応じていくらでもメモリを確保しにいく。 software.fujitsu.com なので、クラスを動的に読み込むようなアプリでは-XX:MaxMetaspaceSizeを設定して…

Windows環境のsshクライアントはGit付属のOpenSSHがおすすめ

IT

今まで以下のクライアントを使ってきたけど、どれもいまいちだった。 ・Putty 使いづらい ・WSL付属のssh WSLのファイルはWindowsから編集するとWSLから見えなくなるのでだめ。 いちいちWSLに入らないといけないのもちょっとね。。 あと、バージョンが古いの…

EFSをmountすると「mount: wrong fs type, bad option, bad superblock on /dev/nvme3n1,」エラー

IT

フォーマットしてないのが原因。以下のようなコマンドでフォーマットすると直る。 mkfs -t ext4 /dev/sdg 参考: ex1.m-yabe.com

EFSの通信速度

IT

EFSの通信速度がどう決まるかわかりにくかったけど、まとめると以下っぽい。 ・バーストすると、通信速度がEFS使用量(GB)/100 [MB/s]になる。但し、最低は100MB/s。 ・EFS使用量が少ないとバーストできる時間も短くなる。 ・EFSを作ってすぐは2TB転送するま…

EFS,EBS,S3のパフォーマンスとData Locality

IT

AIの学習に時間がかなりかかるので高速化したい。 データセットが大きいので、通信速度を上げる方法を調べた。速度を上げるためには Data Localityを意識することが大事。以下の記事は参考になりました。 missinglink.ai 調査結果 【S3】 リージョンをまたい…

エクセルで極端なデータ以外の平均を出す

IT

TRIMMEAN関数でできる。こんな関数あるんだ。知らなかった。。さすがエクセル。 参考: dekiru.net

chromeでキーボードの再生キーなどを無効化する

IT

キーボードの再生キーなどを触るとchromeのポップアップが出て鬱陶しいので、無効化したい。 chrome://flags をアドレスバーに入力し、 Hardware Media Key Handling をdisableに変更すると無効化できた。 参考: www.addictivetips.com

cloud init実行時のログは「 /var/log/cloud-init-output.log」に出る

IT

cloud initが想定通り動かない場合、 /var/log/cloud-init-output.logに出ているログを確認してデバッグする。 参考: docs.aws.amazon.com

EBSの最大速度は1GB/s

IT

EBSの速度について検索すると、最大500MB/sぐらいだという記事がよくひっかかるけど、 実はしばらく前にパフォーマンスが改善されて最大1GB/sになったらしい。 今まで勘違いしてた。。公式ドキュメントを当たらないとだめだな。 参考: aws.amazon.com

S3の帯域はリージョンによって結構違う

IT

S3はバケット毎に特定のリージョンに保存されるので、そのリージョンのEC2からは速くダウンロードできる。 リージョン同士の通信速度の測定結果は以下。 blog.overops.com 調べた範囲では2014年時点のものしか見当たらなかったけど、参考になる。

windowsでAddress already in useを解決する

IT

ポートを専有しているプロセスがどれかよく分からないことがよくある。特にsshでポートフォワーディングしているとき。 netstat -nao | find "[ポート番号]" を実行してあるポートを専有しているプロセスを特定しようとしたが、上記で出てきたプロセスのPID…

try-with-resourcesとAutoCloseableインターフェース

IT

自分で実装したクラスをtry-with-resourcesで自動的にCloseされるようにする場合、 AutoCloseableを実装すればいい。その時にoverrideしたcloseメソッドがtryブロックを抜けたときに呼ばれる。 参考: www.task-notes.com

docker execでホスト側からコンテナに入る

IT

これよく使うんだけど、しばらくdockerから離れると忘れる。。 以下手順でコンテナには入れる。 docker psでコンテナの名前かIDを確認 docker exec -it bashを実行する 参考: qiita.com

docker-compose.ymlのvolumesは左側がホストで右側がコンテナ

IT

勝手に逆だと思っててハマった。。 ホスト:コンテナ や ホスト:コンテナ:権限 のように書ける。 参考: qiita.com