CloudNative Days Spring 2021 ONLINE キーノートでの発表資料です。
https://event.cloudnativedays.jp/cndo2021/talks/1071
本セッションでは、DockerとKubernetesのもつ基本的な機能の概要を、コンテナの仕組みをふまえつつイラストを用いて紹介していきます。一般にあまり焦点をあてて取り上げられることは多くありませんが、コンテナの作成や管理を担う低レベルなソフトウェア「コンテナランタイム」も本セッションの中心的なトピックのひとつです。
本セッションは、拙著「イラストで分かるDockerとKubernetes」(技術評論社)の内容を参考にしています。
https://www.amazon.co.jp/dp/4297118378
CTF for ビギナーズのバイナリ講習で使用した資料です。
講習に使用したファイルは、以下のリンク先にあります。
https://onedrive.live.com/redir?resid=5EC2715BAF0C5F2B!10056&authkey=!ANE0wqC_trouhy0&ithint=folder%2czip
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~Shinji Takao
クラウドや多言語の環境に対応できる 新しいJava実行環境 GraalVM は、ネイティブビルドだけでなく、通常の Java VM として使うこともできます。
このたび、クラウド環境用ベンチマーク「BluePerf」などを使い、GraalVM と OpenJDK を比較したので、結果を報告します。
Japan Java User Group (JJUG) Cross Community Conference (CCC) 2021 Fall 発表資料
https://www.youtube.com/watch?v=5MtjfQfdC_g
CloudNative Days Spring 2021 ONLINE キーノートでの発表資料です。
https://event.cloudnativedays.jp/cndo2021/talks/1071
本セッションでは、DockerとKubernetesのもつ基本的な機能の概要を、コンテナの仕組みをふまえつつイラストを用いて紹介していきます。一般にあまり焦点をあてて取り上げられることは多くありませんが、コンテナの作成や管理を担う低レベルなソフトウェア「コンテナランタイム」も本セッションの中心的なトピックのひとつです。
本セッションは、拙著「イラストで分かるDockerとKubernetes」(技術評論社)の内容を参考にしています。
https://www.amazon.co.jp/dp/4297118378
CTF for ビギナーズのバイナリ講習で使用した資料です。
講習に使用したファイルは、以下のリンク先にあります。
https://onedrive.live.com/redir?resid=5EC2715BAF0C5F2B!10056&authkey=!ANE0wqC_trouhy0&ithint=folder%2czip
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~Shinji Takao
クラウドや多言語の環境に対応できる 新しいJava実行環境 GraalVM は、ネイティブビルドだけでなく、通常の Java VM として使うこともできます。
このたび、クラウド環境用ベンチマーク「BluePerf」などを使い、GraalVM と OpenJDK を比較したので、結果を報告します。
Japan Java User Group (JJUG) Cross Community Conference (CCC) 2021 Fall 発表資料
https://www.youtube.com/watch?v=5MtjfQfdC_g
Micro Python is a version of Python that runs on microcontrollers. It allows Python code to control microcontrollers like the STM32F4 Discovery board. The document discusses the Micro Python project, the pyboard development board, and demonstrates some example Python code for controlling LEDs, reading switches, and using other hardware on the STM32F4 Discovery board with Micro Python.
Hirotaka Kawata introduces PyCon JP 2014, the 4th annual Python conference in Japan happening September 12-15. It will include 1 English track and 2 Japanese tracks, as well as keynotes from Hirokazu Nishio and Kenneth Reitz (who spoke at PyCon Singapore). The venue will be in Odaiba, Tokyo at Plaza Heisei. Attendees are encouraged to submit proposals by the deadline of June 20th.
17. Assertion 結果の分かりやすさ
2 elements passed but expected 1
The following elements passed:
[0] Message(type=TEXT, text=Kotlin)
[3] Message(type=TEXT, text=KotlinFest)
The following elements failed:
[1] Message(type=TEXT, text=Java) => "Java" should start
with "Kotlin" (diverged at index 0)
[2] Message(type=TEXT, text=Kotest) => "Kotest" should start
with "Kotlin" (diverged at index 3)
forOne - Collection の中に
ひとつだけマッチする
場合のみ成功
18. 非同期なテストの例
例えばこんな例、どうやってテストしますか?
// 非同期処理: 送信や処理に時間がかかる
val messageId = userA.sendMessage(userB, message)
// 直後に取得すると失敗する
userB.getMessage(messageId).shouldNotBeEmpty() // => Fail
// 非同期処理: 送信や処理に時間がかかる
// D は C をブロックしているのでメッセージが届かないことを確認したい
val messageId = userC.sendMessage(userD, message)
userD.getMessage(messageId).shouldBeEmpty() // 本当にそれでいい?
処理に時間がかかる例
間違った場合も成功になりがちな例
19. 非同期テスト - Eventually
● eventually を使うと、一定時間の間に成功するか判断できる
○ coroutines を使った非同期処理を書くと発生しがちなケース
○ 繰り返し間隔などの設定も可能
// 非同期処理: 送信や処理に時間がかかる
val messageId = userA.sendMessage(userB, message)
// 10秒間の間に正しい結果に変わったら、成功とみなす
eventually(10.seconds) {
userB.getMessage(messageId).shouldNotBeEmpty()
}
20. 非同期テスト - Continually
● continually を使うと、一定時間以上条件が継続することをテスト
○ 内部では、一定時間でループして条件をチェックし続ける
○ 実装には coroutines を使っている
● その他、Retry や Until といったヘルパーもある
// 非同期処理: 送信や処理に時間がかかる
// D は C をブロックしているのでメッセージが届かないことを確認したい
val messageId = userC.sendMessage(userD, message)
continually(1.seconds) { // 1秒の間メッセージが受信されない事
userD.getMessage(messageId).shouldBeEmpty()
}