SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Binderのはじめの一歩と
Androidのプロセス間通信(IPC)
Android IPCのとりあえず1回目
2010/10/31
@l_b__
横浜Androidプラットフォーム部
第3回勉強会
目次
●Androidのプロセス間通信
●Binderって?
●何故Binder?
●Android独自のIPC
●Binderの歴史
●Binderの仕組み
●実際に使ってみる
●Ashmemって?
●Ashmemの関数
●実際にAshmemを使ってみる
●次回予告
Androidのプロセス間通信
● AndroidのNative側でプロセス間通信(IPC,InterProcess
Communication)を行うには以下の方法がある。
1. Binder
2. Ashmem(Anonymous Shared Memory)
3. UNIXドメインソケット
4. TCP/UDPソケット
5. 名前付きパイプ
 
 ※ただ、Androidソース内に名前付きパイプを使っている箇所は
無い。
Binderって?
●Android独自のプロセス間通信の一つ。
●POSIXメッセージの置き換え。
●プロセス間で小さいデータ(数百〜数千byte程度)を
高速にやり取りするために使用。
●何故POSIXのIPCがあるのにBinderという機構が導
入されたのか。
何故Binder
●AndroidはSystemV(UNIXの1種)のIPCをサポート
していない!
●NDKの/docs/system/libc/SYSV-IPC.TXTにサ
ポートされない理由の記述あり。
○カーネルでのリソースリークが発生する
○カーネルリソースを枯渇させるサンプルコードも有
り。(もちろんAndroidでは動かないのでLinuxで動
作させる必要あります。)
Android独自のIPC
●System V IPCの代わりは以下の通りと思われる。
○メッセージキューはBinderに。
○共有メモリはAshmemに。
○セマフォはPOSIX IPCのセマフォに。
Binderの歴史
● 元々はNext Generation BeOSに採用される予定だった
OpenBinder。(http://www.angryredplanet.
com/~hackbod/openbinder/)
● UNIXのCORBA、WindowsのCOMのように分散コンポーネント
環境を提供するフレームワーク。
● BeOSポシャっちゃったので残念ながら動くものとしては採用され
ず。
● OpenBinderをメンテしていたHackbornさんは今はAndroidのプ
ラットフォームエンジニア。よくGroupに投稿しています。
● 余談ですがBeの創業者Gasseeも、Danger、Androidの創業者
Andy Rubinも元Apple。Appleすごいですね。
Binderの仕組み
Kernel
Binder Driver
(/dev/binder)
ServiceManager libBinder
Receiver
Application
Sender
Application
Binderの仕組み
● Binder Driver(/dev/binder)にアクセスしているのはフレーム
ワーク中、ServiceManager(ソースの
/framework/base/cmds/servicemanager/service_manage
r.c)とlibBinder
(/framework/base/libs/binder/ProcessState.cpp)のみ。
○この中の仕組みはまだ追えていません。
● ユーザーアプリケーションは直接Binderドライバを操作することは
ない。
Binderの仕組み
● Binderを受信するアプリはServiceManagerに自身をサービスと
して登録する。(図の水色矢印)
● 受信するアプリはBBinderを継承し、onTransact()で受信処理を
実装。
● Binderを送信するアプリはServiceManagerから送信先サービス
を取得し(図の緑矢印)、取得したIBinderサービスに対し
transact()でメッセージを送信(図の赤矢印)。
実際に使ってみる
Binderを受信するNativeデーモン(Binder
Receiver)と、送信するNativeアプリ(BinderSender)を作ってみま
す。
実際に使ってみる 受信側
● main.cpp 受信側起動処理 SurfaceFlingerやAudioFlingerな
どが参考になります。
#define LOG_TAG "RECEIVER"
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
#include <utils/Log.h>
#include "receiver.h"
int main(int argc, char** argv) {
LOGD("Reciever start.");
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
LOGD("ServiceManager: %p", sm.get());
Receiver::instantiate();
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}
実際に使ってみる 受信側
● receiver.h BBinderを継承した受信処理クラスの定義
#ifndef RECEIVER_H_
#define RECEIVER_H_
#include <utils/RefBase.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
using namespace android;
class Receiver:public BBinder {
public:
static void instantiate();
Receiver();
virtual ~Receiver();
virtual status_t onTransact(
uint32_t, const Parcel&, Parcel*, uint32_t);
};
#endif /* RECEIVER_H_ */
実際に使ってみる 受信側
● receiver.cpp Receiverクラスの実装。受けた数値を5倍して返
す。
#define LOG_TAG "RECEIVER"
#include <binder/IServiceManager.h>
#include <binder/IPCThreadState.h>
#include <utils/Log.h>
#include "receiver.h"
using namespace android;
void Receiver::instantiate() {
    defaultServiceManager()->addService(
            String16("Receiver"), new Receiver());
}
Receiver::Receiver() {
LOGD("Receiver created.n");
}
Receiver::~Receiver() {
LOGD("Receiver destroyed.n");
}
実際に使ってみる 受信側
● receiver.cpp 続き BBinder::onTransactの実装部分
status_t Receiver::onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) {
LOGD("Message received code=%d.n", code);
pid_t pid;
int num;
switch(code) {
case 0:
pid = data.readInt32();
LOGD("Sender pid=%d", pid);
num = data.readInt32();
LOGD("Number Data=%dn",num);
reply->writeInt32(num*5);
break;
default:
//do nothing.
break;
}
return NO_ERROR;
}
実際に使ってみる 送信側
● receiver.cpp 送信処理。自プロセスIDと数値の12を送信する。
#define LOG_TAG "SENDER"
#include <binder/IServiceManager.h>
#include <binder/IPCThreadState.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
#include <utils/RefBase.h>
#include <utils/Log.h>
using namespace android;
int main() {
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder = sm->getService(String16("Receiver"));
LOGD("Sender getService %pn",sm.get());
if (binder == NULL) {
         LOGE("Receiver Service not found.n");
         return -1;
}
実際に使ってみる 送信側
● receiver.cpp 続き。実際の送信処理部分。
Parcel data, reply;
pid_t pid = getpid();
LOGD("pid=%d", pid);
data.writeInt32(pid);
int num = 12;
LOGD("num=%d", num);
data.writeInt32(num);
//非同期メッセージはFLAG_ONEWAYを4番目に追加
binder->transact(0, data, &reply);
LOGD("reply num=%d", reply.readInt32());
return NO_ERROR;
}
実際に使ってみる 受信側makefile
● receiver/Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= 
receiver.cpp 
main.cpp
LOCAL_SHARED_LIBRARIES:= 
libcutils 
libbinder
LOCAL_MODULE:= BinderReceiver
include $(BUILD_EXECUTABLE)
実際に使ってみる 送信側makefile
● sender/Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= 
sender.cpp
LOCAL_SHARED_LIBRARIES:= 
libcutils 
libbinder
LOCAL_MODULE:= BinderSender
include $(BUILD_EXECUTABLE)
実際に使ってみる ビルドスクリプト
● build/build.sh
#!/bin/bash
ANDROID_ROOT=~/android/myfroyo
source $ANDROID_ROOT/build/envsetup.sh
cd ~/android/myfroyo/external/binder_sample
mm
● 全体のAndroid.mk
include $(all-subdir-makefiles)
実行結果のログ
D/RECEIVER(  286): Reciever start.
D/RECEIVER(  286): ServiceManager: 0xb678
D/RECEIVER(  286): Receiver created.
D/SENDER  (  288): Sender getService 0xa678
D/SENDER  (  288): pid=288
D/SENDER  (  288): num=12
D/RECEIVER(  286): Message received code=0.
D/RECEIVER(  286): Sender pid=288
D/RECEIVER(  286): Number Data=12
D/SENDER  (  288): reply num=60
Ashmemって?
● プロセスの間で複数のプロセスからアクセスできる共有メモリの
Android版。
● ashmemドライバ(/dev/ashmem)を介して使用する。
●  作成したashmemのファイルディスクリプタをmmap()して使うこと
ができる。
●  Androidでは以下で使われている。
○システムプロパティの格納領域(@shigepon7 さん情報)
○ andrpoid.os.MemoryFileクラスの内部
○ グラフィックメモリのバッファ領域
○ Skia(2Dグラフィック&フォントエンジン)のバッファ領域
Ashmemの関数
● libcutils.soに含まれる。
● 定義は/system/core/include/cutils/ashmem.h
●  ashmem_create_region
○  新規に共有メモリ領域を作成し、そのfdを返す。ラベルをつけること
が可能。
●  ashmem_set_prot_region
○ メモリ領域のアクセス権限などのオプションを設定する。
●  ashmem_pin_region
○ pinを立てる。pinを立てている領域は使用中と見倣される。
●  ashmem_unpin_region
○ pinを外す。pinが外れた領域は未使用としてカーネルがメモリ領域を
回収する。
●  ashmem_get_size_region
○ メモリ領域のサイズを取得。
実際にAshmemを使ってみる
● initやbionicのシステムプロパティでashmemを使っている箇所を
参考にサンプルを書いてみましたが、残念ながらエラー。
● 共有メモリにアクセスするためのfdに、共有メモリ作成したのとは
別のプロセスからアクセスしましたが、EBADF(ファイルディスクリ
プタ不正)が発生...
● 以前Donutで同じようなコードを書いたときはEACCES(パーミッ
ションエラー)が発生...
● もう少し試してうまくいったら資料を更新します。
次回予告
● Ashmemがうまくいったら、Binder、Ashmem、ソケット通信のベ
ンチマーク(送信データサイズごとに)を計りたいと思います。
● libbinder(/frameworks/base/libs/binder)内のクラス構成も
調べたいなと。

Weitere ähnliche Inhalte

Was ist angesagt?

Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
Takuya ASADA
 

Was ist angesagt? (20)

ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
Android Things : Building Embedded Devices
Android Things : Building Embedded DevicesAndroid Things : Building Embedded Devices
Android Things : Building Embedded Devices
 
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
 
Node-REDをIoTビジネスに適用するために苦労した3つの話
Node-REDをIoTビジネスに適用するために苦労した3つの話Node-REDをIoTビジネスに適用するために苦労した3つの話
Node-REDをIoTビジネスに適用するために苦労した3つの話
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
Android enterpriseで実現できる端末管理の世界
Android enterpriseで実現できる端末管理の世界Android enterpriseで実現できる端末管理の世界
Android enterpriseで実現できる端末管理の世界
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
 
Android™組込み開発基礎コース BeagleBoard編
Android™組込み開発基礎コース BeagleBoard編Android™組込み開発基礎コース BeagleBoard編
Android™組込み開発基礎コース BeagleBoard編
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginners
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話
 
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
ゲームの仕様書を書こう4 仕様書作成で楽をするconfluenceの活用
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
 
Android カスタムROMの作り方
Android カスタムROMの作り方Android カスタムROMの作り方
Android カスタムROMの作り方
 

Andere mochten auch

Binderのはじめの一歩
Binderのはじめの一歩Binderのはじめの一歩
Binderのはじめの一歩
l_b__
 
Overview of Android binder IPC implementation
Overview of Android binder IPC implementationOverview of Android binder IPC implementation
Overview of Android binder IPC implementation
Chethan Pchethan
 
Clean architecture: Android
Clean architecture: AndroidClean architecture: Android
Clean architecture: Android
intive
 
Design pattern in android
Design pattern in androidDesign pattern in android
Design pattern in android
Jay Kumarr
 

Andere mochten auch (12)

Android IPC Mechanism
Android IPC MechanismAndroid IPC Mechanism
Android IPC Mechanism
 
Binderのはじめの一歩
Binderのはじめの一歩Binderのはじめの一歩
Binderのはじめの一歩
 
Intentの概要
Intentの概要Intentの概要
Intentの概要
 
Inter-process communication of Android
Inter-process communication of AndroidInter-process communication of Android
Inter-process communication of Android
 
Overview of Android binder IPC implementation
Overview of Android binder IPC implementationOverview of Android binder IPC implementation
Overview of Android binder IPC implementation
 
Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会
 
Androidのリカバリシステム (Androidのシステムアップデート)
Androidのリカバリシステム (Androidのシステムアップデート)Androidのリカバリシステム (Androidのシステムアップデート)
Androidのリカバリシステム (Androidのシステムアップデート)
 
Android ipm 20110409
Android ipm 20110409Android ipm 20110409
Android ipm 20110409
 
Android Design Principles and Popular Patterns
Android Design Principles and Popular PatternsAndroid Design Principles and Popular Patterns
Android Design Principles and Popular Patterns
 
Clean architecture: Android
Clean architecture: AndroidClean architecture: Android
Clean architecture: Android
 
Design pattern in android
Design pattern in androidDesign pattern in android
Design pattern in android
 
Software Design patterns on Android English
Software Design patterns on Android EnglishSoftware Design patterns on Android English
Software Design patterns on Android English
 

Ähnlich wie Binderのはじめの一歩とAndroid

Open binder
Open binderOpen binder
Open binder
l_b__
 
Android SDK Toolsのおさらい
Android SDK ToolsのおさらいAndroid SDK Toolsのおさらい
Android SDK Toolsのおさらい
Tomoki YAMASHITA
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
ken_kitahara
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
fumoto kazuhiro
 
App widgetでテザリング
App widgetでテザリングApp widgetでテザリング
App widgetでテザリング
Eiichi Tsuru
 
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
三七男 山本
 

Ähnlich wie Binderのはじめの一歩とAndroid (20)

Open binder
Open binderOpen binder
Open binder
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
 
Android SDK Toolsのおさらい
Android SDK ToolsのおさらいAndroid SDK Toolsのおさらい
Android SDK Toolsのおさらい
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
 
Node-REDのノード開発容易化ツール Node generator
Node-REDのノード開発容易化ツールNode generatorNode-REDのノード開発容易化ツールNode generator
Node-REDのノード開発容易化ツール Node generator
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
HCEでなんちゃってType4のNDEFタグをつくる
HCEでなんちゃってType4のNDEFタグをつくるHCEでなんちゃってType4のNDEFタグをつくる
HCEでなんちゃってType4のNDEFタグをつくる
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Apilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlabApilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlab
 
Android Hacks - 合宿インテント
Android Hacks - 合宿インテントAndroid Hacks - 合宿インテント
Android Hacks - 合宿インテント
 
Telemetryについて
TelemetryについてTelemetryについて
Telemetryについて
 
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
 
Ifcq o smeetup20190517_tokyo_8esp32iot
Ifcq o smeetup20190517_tokyo_8esp32iotIfcq o smeetup20190517_tokyo_8esp32iot
Ifcq o smeetup20190517_tokyo_8esp32iot
 
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるRancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げる
 
App widgetでテザリング
App widgetでテザリングApp widgetでテザリング
App widgetでテザリング
 
Adobe XDプラグインをつくってみよう
Adobe XDプラグインをつくってみようAdobe XDプラグインをつくってみよう
Adobe XDプラグインをつくってみよう
 
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
 
Android程序的编译,安装和运行 | 小米科技 汪文俊
Android程序的编译,安装和运行 | 小米科技 汪文俊Android程序的编译,安装和运行 | 小米科技 汪文俊
Android程序的编译,安装和运行 | 小米科技 汪文俊
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 

Mehr von l_b__ (9)

Fuchsia概略その1
Fuchsia概略その1Fuchsia概略その1
Fuchsia概略その1
 
Android,Brillo,ChromeOS
Android,Brillo,ChromeOSAndroid,Brillo,ChromeOS
Android,Brillo,ChromeOS
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介
 
Eclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグEclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグ
 
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達
 
Yapf2013
Yapf2013Yapf2013
Yapf2013
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Binderのはじめの一歩とAndroid