Writeup - Flatt Security Developers' Quiz #6
⚡️ Flatt Security Developers' Quiz #6 開催! ⚡️
— 株式会社Flatt Security (@flatt_security) December 29, 2023
解答は年明け1/5(金)11:59まで!Tシャツ獲得を目指して頑張ってください!
デモ環境: https://t.co/hXaNP2Ciwv
ソースコード: https://t.co/ejTKzpAp9D
解答提出フォーム: https://t.co/jnc5Wv2Hi7 pic.twitter.com/uf3ZqHEdTK
Flatt Security Developers’ Quiz #6 に回答し、Tシャツ頂きました👕
Writeup書きます。
Webセキュリティ資格のBurp Suite Certified Practitioner (BSCP) に合格した
Webバックエンド開発やデータベース領域の研究開発を10年近く行ってきた筆者ですが、2023年夏頃からセキュリティ関連のキャリアパスを志向するようになりました。
Webセキュリティの実践的な経験とその証明がほしく、Burp Suite Certified Practitioner (以下、BSCP) を受験し、晴れて合格しました🎉
Apache Beamが多言語・多バックエンド処理系を実現する仕組み
ストリーム処理とバッチ処理を統合して扱えるプログラミングモデル(あるいはデータ処理のフロントエンド)である Apache Beam が、特にGoogle Cloud DataflowやApache Flinkからの利用を背景にシェアを伸ばしています。
Apache Beamの特色として、複数のプログラミング言語のSDKを持つこと・複数のバックエンド処理系(Flinkなどを指す)を持つことが挙げられますが、これがどう実現されているのかをまとめます。
Rustの std::sync::RwLock はLinuxでwriter starvation問題を起こす (macOSなら平気)
まとめ:
std::sync::RwLock::{write(), try_read()}
を併用した場合には「書き込みロックを最優先」という挙動は必ずしも期待できない (LinuxではNG)- Pthread の規約が挙動に自由度をもたせており、Linuxにおけるデフォルト実装では writer starvation が発生する
- Rustにおいて writer starvation を回避しつつ readers-writer lock を使うには
parking_lot::RwLock
を使うと良い
トヨタの3.5ヶ月のソフトウェアエンジニア(研究開発)生活を振り返る
トヨタ自動車に入社し、自動車データの収集〜分析基盤の研究開発やっていきます
Rustでmockするならmockallで決まり!・・・でよろしいでしょうか?
Rustで DI (Dependency Injection)、してますか?
今日話題にするのはドメイン層でインターフェイスを定義してインフラ層でその実装を書くやつです。
例えばドメイン層で trait UserRepository
を書いて、インフラ層で struct UserRepositoryImpl
するやつです。
テストを書くとき、 struct UserRepositoryImpl
はDBアクセスなどしてしまうので取り回しが悪いから、mock を作って fixture を入出力したいことありますよね。
Rustでそういうことやるなら mockall がオススメだよという記事です。
そんなに不満はないのですが、もしベターなやり方があったら記事末尾のコメントやTwitterやらもらえたら嬉しいです。
前職のFOLIO時代の同僚で現CADDiの むらみんさんの記事 に
外部通信のような比較的大きい副作用が絡むテストに於いて テストダブルを差し込むことは可能なのですが、かなりの労力が必要になる印象を持っています。
と書いていたのを今更ながら発見して、自分はこうしてるけど皆はどうしてるんだろ?と思って筆(キーボード)を取りました。
Rustの2種類の 'static
Rustの 'static
、難しいですよね。
「プログラム中ずっと生き残るライフタイムでしょ?簡単簡単」
なるほど。では次の2つの 'static
の違いがわかるでしょうか?
1 | let x: &'static str = "Hello, world."; |
1 | /// Returns some reference to the boxed value if it is of type `T`, or |
「・・・2つめのなんだっけ?」
という人はぜひ読んでみてください🦀
この記事では、Rustの2種類の 'static
、
'static
ライフタイム'static
ライフタイム 境界
を解説します。
ぼくのかんがえたさいきょうの CircleCI 設定 for Rust
あまり見ない気がするので書きました。特徴は、
- lint, testなどの各ジョブが並列に動く(ジョブ実行数を多くしてないとdocker containerの立ち上げ分むしろ全体時間はロスになることもあるが…)。
- Travis CI のマトリクスビルド に近いことを、
parameters:
を使ってやっている。rust-toolchain
ファイル に書かれたバージョンと、.circleci/config.yml
に書かれた MSRV (Minimum Supported Rust Version) の2つでビルドしている。
cargo-readme
を使ってrustdocとREADMEを比較し、どちらかがメンテされていない場合にエラーにする(お好みで)。- キャッシュ使う。
あたりです。見慣れなさそうなところはインラインコメント付けましたので参考にしてください 💁♀️