底辺

ゑ?

2024/3/29 単体テストの考え方/使い方 読了

 

テストについて改めて勉強したく読んだ。

評判が良い本として知っていたが、読んでみて確かに良い本で、今後よく振り返る本になりそう。

  • 単体テストとタイトルにはあるが統合テストまで話題をカバーしており、良いテストを書くための方法論について体系だってまとめられている
  • C#でサンプルコードは書かれているがオブジェクト指向言語に馴染みがあれば問題なく読める
  • 単体テストとは何か、良い単体テストが持つ4つの性質、そしてそれぞれが何をすると損なわれるか、などが様々な例をもとに説明されわかりやすい
  • 設計の話もかなり出てくる。良いテストと良い設計が両輪のためだが、全体の3割くらいは設計の話だった
  • 訳は良く読みやすい日本語で、よくある何言ってるかわからない、原著参照したい、などの訳は無かった(fluent interface→流れるようなインターフェース、など変な訳語も一部あったが)
  • 各章のまとめが丁寧でかなり良い。サッとその章のエッセンスを振り返ることが出来る。あらゆる技術書でこのレベルのまとめを章末に作って欲しい
  • アンチパターンの章は、実際に現場で見たことある悪い例がそのまま載っていたり、納得感を持って読めて良かった

2024/3/1 大規模サービス技術入門 読了

 

読んだ。

2010年の本だけど、今でも基本的なところは変わらず有用な本のように思った。

はてなの中の人によって書かれており、はてなという規模の大きいサービスならではの実際にぶつかった技術的課題やそれをどう解決したか等を知ることが出来る本となっており、単純に読み物としても面白かった。

負荷が高い場合はまずどう調べていくか、そしてCPU負荷が高いのかI/O負荷が高いのか、それらを切り分けたあとのスケーリング戦略についてや、計算量・データ量削減のためのアルゴリズムや圧縮技術の実践課題、など様々な内容が盛り込まれている。

やはりコンピュータサイエンスの基礎が大事というのがこの本を読んでもわかる。

クラウドよりまだオンプレかなという論調とかSSDが流行りたて?っぽいのはだいぶ前の本ならではかも。

面白くてすらすら読んでいけるので、興味がある人は昔の本と敬遠せずに読んでみると良いです。

GitHub Copilot, AWS CodeWhisperer & Q 試したメモ

CodeWhisperer + Q:個人では無料なのは良い(ビジネスプランは確か有償)けどCopilotより補完の量や質が若干微妙(全然使えないわけではなくあくまでcopilotと比較して)。Q(Copilot chatにあたるもの)は現状では日本語対応していない。プレビュー版で対応していたプログラミング言語のほうが質が良いらしく今回プレビュー版に入っていなかったRustで試していたのでCopilotより微妙だった説もあるが、調べてみてもCopilotには劣るという声が多い印象。Copilotに無いコードのセキュリティスキャン機能があるのは良いと思った
Copilot:CodeWhispererより補完の質が良くわりとピンポイントで書きたいコードが出てくる。Chatも日本語対応しており便利。ただChatの中身はGPT4を調整したものらしいがChatGPT4の方が賢くて察してくれる感触

WebAPI The Good Parts 2024/2/17 読了

 

 

自分は仕事ではWebサービスに関わっているが今はその中の機械学習モジュールを担当しているのであまり普段 WebAPIの設計や改良をしているわけではない。が、そちら方面も単純に興味があるため読んだ。

エンドポイントの設計や利用者の影響を減らすためのバージョン管理、レスポンスデータの設計などWebAPIの様々な話題が載っており、面白かった。

とりあえず基本的にはなるべくHTTPの作法に則っておけば大きく外さなそう。(ヘッダを上手く使うとか、エラー時も常時200で返すんじゃなくて適切なステータスコードで返してエラーの詳細をちゃんとボディに仕込んであげるとか)

セキュリティ周りの話はこの本の中では一部イメージが付きづらい部分もあったけど、JavaScriptAPI提供側の意図しない形で実行される攻撃手法が多いという印象を受けた。セキュリティ技術はいたちごっこで発展してきていると思うので、ブラウザによって脆弱性対応されていたりいなかったりとか色々事情が込み入っていて、ちょっと大変だな。。でもやっぱりWebAPIはインターネットに公開する以上セキュリティは気をつけすぎるくらいでちょうど良さそう

2014年に出た本なのでちょっと古い部分もあるかもわからんけど、WebAPIの設計をする人は必読っぽそう。

もっと色々知りたくなったので、例えばブラウザの仕組みとかもちょっと勉強してみてるけど、おもろい

CMakeで複数のテスト実行バイナリを一つのビルドターゲットとする

CMakeで複数のテスト実行バイナリを一つのターゲットとしてまとめる

→cmake --buildの--targetにいちいち全部書かなくて良い。

add_custom_target, add_dependenciesを使って出来る。

CMakeLists.txt

# それぞれのディレクトリでそれぞれのテスト実行バイナリを
# 生成するようになっているとする(add_executable)
add_subdirectory(xxx)
add_subdirectory(yyy)
add_subdirectory(zzz)

add_custom_target(hoge_tests
  COMMENT "Building all hoge tests executables..."
)
add_dependencies(hoge_tests xxx_test yyy_test zzz_test)


Makefile

# hoge_testsというターゲットにテストが全部含まれているので
# --targetにはhoge_testsを指定しておけばmake build-testsでテスト実行バイナリを全部ビルド出来る
build-tests:
    cmake -S . -B build.cpp && cmake --build build.cpp --target hoge_tests


テスト実行コマンド例

cd hoge && make clean && make build-tests && cd build.cpp && ctest

pandasのread_parquetでS3の認証を通す

pandasのread_parquetでS3のparquetファイルを読み込むときに指定のプロファイルを使いたい場合。

→例えば以下のようにstorage_options引数が使える。これには以下のように"profile"をkeyに含むdictを渡す

import pandas as pd

s3_path = "s3://your-bucket/path/to/your-file.parquet"
storage_options = {"profile": "your_profile_name"}
df = pd.read_parquet(s3_path, storage_options=storage_options)

pandas内部でs3fs→boto3と使っているので、↑でいけることがドキュメントを見るだけでは分からなかった。 pandas.pydata.org

storage_optionsやAWS環境変数等を特に指定しないと~/.aws/credentialsのデフォルトのプロファイルが使用される。 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYの値はコード内には書きたくないので、こんな感じで~/.aws/credentialsを使うか、Secret Manager使うかとかが定石と思われる

ちと古いけどpandas1.5.1で確認

詳解 システム・パフォーマンス 第2版 買った

 

 

ついに買った。

パフォーマンス系の仕事はちょくちょく取り組む機会があるのでずっと読んでみたかったが、なかなか手が出せていなかったやつ。

現在また難しいパフォーマンス系の調査を行っており、ヒントが無いかやはり読んでみたいなと思ったのと、LinuxやOSそのものについても色々と学ぶことが出来る教科書的な側面も持っていると聞き、購入に踏み切った

あまりにも厚いので、ゆっくりと時間をかけて読んでいければと思う

ちなみに、著者のBrendan氏曰く「本書の内容は短くするように努力した」らしい。。

 

横から見ると…

 

人をぶん殴れる厚さだ