Active Object

Y
増補改訂版
Java 言語で学ぶデザインパターン マルチスレッド編
12. Active Object
内山 雄司 (@y__uti)
2019-08-08 社内勉強会
自己紹介
内山 雄司 (@y__uti)
◦ http://y-uti.hatenablog.jp/ (phpusers-ja)
仕事
◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています
興味
◦ プログラミング言語処理系
◦ 機械学習
2019-08-08 社内勉強会 2
発表の流れ
1. Active Object とは?
2. Active Object の実装の説明
3. 議論:Active Object のバリエーション
4. 補講:java.util.concurrent パッケージの利用
2019-08-08 社内勉強会 3
Active Object とは?
能動的な (active) オブジェクト
具体的には
◦ 自分固有のスレッドを持っていて (= 能動的な)
◦ 外部から受け取った非同期メッセージを
◦ 自分固有のスレッドで
◦ 自分の都合がよいタイミングで処理して
◦ 結果を返す
ことができるオブジェクト
2019-08-08 社内勉強会 4
別の解釈
2019-08-08 社内勉強会 5
Active Object パターンでは、シングルスレッドで動作することを前提と
して設計されている Servant 役に皮をかぶせて、マルチスレッドの
Client 役から利用できるようにしている、と見なすこともできますね。
Servant 役に皮をかぶせて = 再利用性
マルチスレッドの Client 役から利用できるようにしている
◦ スレッドセーフ = 安全性
◦ 非同期処理 = 応答性 (パフォーマンス)
(教科書 419 ページより引用)
Active Object の実装
Active Object = Future + Worker Thread
2019-08-08 社内勉強会 6
サンプルプログラム1
クライアント側から見えるもの
2019-08-08 社内勉強会 7
public interface ActiveObject {
// fillchar を count だけ繰り返した文字列を作って返す
public abstract Result<String> makeString(int count, char fillchar);
// 渡された文字列 string を表示する
public abstract void displayString(String string);
}
public abstract class Result<T> {
// 値を取得する
public abstract T getResultValue();
}
(List 12-4 より)
(List 12-12 より)
サンプルプログラム1
ActiveObject の使い方
シングルスレッドならこんな感じ
2019-08-08 社内勉強会 8
// ActiveObject インスタンスを作る ActiveObjectFactory があるとして
ActiveObject activeObject = ActiveObjectFactory.createActiveObject();
Result<String> result = activeObject.makeString(10, "A");
System.out.println(result.getResultValue());
これをマルチスレッドでも使いたい
◦ 非同期処理 - makeString の実行中にクライアントを待たせない
◦ スレッドセーフ - 複数のクライアントから同時に利用可能にする
2019-08-08 社内勉強会 9
(教科書の図を引用)
非同期処理の実現
Future パターンを利用する
Future パターンとは? (復習)
1. Host 役は Client 役からの要求に対して Future を返す
2. 別スレッドで処理を実行して結果を Future に設定する
3. Client は Future から結果を取得できる
2019-08-08 社内勉強会 10
2019-08-08 社内勉強会 11
(教科書の図を引用)
ここをブラックボックスと
考えれば Future と同じ
2019-08-08 社内勉強会 12
Main
request
Host
Data
FutureData
RealDatasetRealData
getContent getContent
(教科書の図を引用)
スレッド安全性の実現
Worker Thread パターンを利用する
Worker Thread パターンとは? (復習)
1. Client 役と Worker 役は Channel を共有している
2. Client は要求を表現する Request を Channel に追加する
3. Worker は Channel を見張っている
4. Channel に Request が来たら取り出して処理を実行する
2019-08-08 社内勉強会 13
2019-08-08 社内勉強会 14
(教科書の図を引用)
2019-08-08 社内勉強会 15
Channel
Request
ClientThread
putRequest
(教科書の図を引用)
2019-08-08 社内勉強会 16
Channel
Request
WorkerThread
takeRequest
execute
(教科書の図を引用)
スレッド安全性の実現
2019-08-08 社内勉強会 17
ワーカースレッドを 1 人にしておくと、ワーカースレッドが行う処理の
範囲はシングルスレッドになりますから、排他制御を省略できる可能性
があります。
(教科書 276 ページより引用)
SchedulerThread = 1 人のワーカースレッド
Servant のメソッドはワーカースレッド上で実行される
◦ 排他制御を省略できる
◦ シングルスレッドを前提とした設計のまま再利用可能
議論
Active Object のバリエーションを考える
2019-08-08 社内勉強会 18
Scheduler の必要性
Servant 役がもともとスレッドセーフなら
⇒ Future パターンを適用するだけで非同期にできる
たとえば教科書の例における Servant
2019-08-08 社内勉強会 19
ActivationQueue への追加
(教科書 412 ページ)
教科書の実装
◦ ActivationQueue が一杯だとクライアントは wait する
バリエーション
◦ Guarded Suspension (第 3 章) ではなく Balking (第 4 章) を利用
2019-08-08 社内勉強会 20
スケジューリング方法
(教科書 412, 420 ページ)
教科書の実装
◦ ActivationQueue の先頭要素を取り出して実行する (FIFO)
バリエーション
◦ ガード条件を確認して実行可能なリクエストを処理する
2019-08-08 社内勉強会 21
参考文献
Lavender, R. Greg; Schmidt, Douglas C. "Active Object"
(https://en.wikipedia.org/wiki/Active_object の References 3 から PDF を取得可能)
試してみよう
displayString を連続して呼んではいけないことにする
2019-08-08 社内勉強会 22
class Servant implements ActiveObject {
private boolean canDisplay = false;
public boolean canDisplay() { return canDisplay; }
public Result<String> makeString(int count, char fillchar) {
canDisplay = true;
...
}
public void displayString(String string) {
if (!canDisplay) { System.out.println("*ERROR*"); return; }
canDisplay = false;
...
}
}
試してみよう
ガード条件を満たすリクエストを処理する
1. MethodRequest クラスに guard メソッドを追加する
2. ActivationQueue の実装を変更する
3. SchedulerThread の run の実装を変更する
2019-08-08 社内勉強会 23
試してみよう
MethodRequest クラスに guard メソッドを追加する
2019-08-08 社内勉強会 24
abstract class MethodRequest<T> {
public abstract boolean guard();
...
}
class MakeStringRequest extends MethodRequest<String> {
public boolean guard() { return true; }
...
}
class DisplayStringRequest extends MethodRequest<Object> {
public boolean guard() { return !servant.IsNeedToMake(); }
...
}
具象クラスでの実装
試してみよう
ActivationQueue の実装を変更する
1. requestQueue をキューからリストに変更
2019-08-08 社内勉強会 25
private final LinkedList<MethodRequest> requestQueue;
2. takeRequest メソッドでガード条件を満たすものを探す
public synchronized MethodRequest takeRequest() {
...
for (MethodRequest request : requestQueue) {
if (request.guard()) {
requestQueue.remove(request);
notifyAll();
return request;
}
}
return null;
}
試してみよう
SchedulerThread の run の実装を変更する
2019-08-08 社内勉強会 26
public void run() {
while (true) {
MethodRequest request = queue.takeRequest();
if (request != null) {
request.execute();
}
try { Thread.sleep(10); } catch (InterruptedException e) {}
}
}
ポイント
◦ ガード条件を満たすリクエストが存在しない場合もある
◦ ガード条件が成立するタイミングは (一般には) わからない
◦ したがって takeRequest 側で wait しては駄目で polling する
デッドロックの可能性
以下の条件でデッドロックに陥る
◦ ActivationQueue が埋まっている
◦ その中にガード条件を満たすリクエストが存在しない
今回の例では DisplayStringRequest でキューが埋まると「死」
◦ キューに空きがないのでリクエストを追加できない
◦ キューに MakeStringRequest が存在しないので要素を取り出せない
2019-08-08 社内勉強会 27
補講
java.util.concurrent パッケージの利用
2019-08-08 社内勉強会 28
サンプルプログラム2
パッケージが提供する機能
◦ 非同期リクエストの表現 MethodRequest
◦ 非同期リクエストの実行管理 SchedulerThread, ActivationQueue
◦ 非同期処理の戻り値の表現 Result, FutureResult, RealResult
(教科書 423 ページの Table 12-3 を参照)
2019-08-08 社内勉強会 29
実装してみよう
java.util.concurrent のクラス群を自分で書いてみよう
2019-08-08 社内勉強会 30
public interface Callable<T> { ... }
public interface ExecutorService { ... }
public class Executors { ... }
public class Future<T> { ... }
class ActivationQueue { ... }
class SingleThreadExecutor implements ExecutorService { ... }
◦ java.util.concurrent を使った場合と同様に動くようにする
実装してみよう
ExecutorService インタフェース
2019-08-08 社内勉強会 31
public interface ExecutorService {
public <T> Future<T> submit(Callable<T> callable);
public void execute(Runnable runnable);
public void shutdown();
}
public class Executors {
public static ExecutorService newSingleThreadExecutor() {
return new SingleThreadExecutor();
}
}
Executors
◦ ExecutorService を実装する SingleThreadExecutor を生成して返す
実装してみよう
戻り値のない処理 (Runnable) の非同期実行
2019-08-08 社内勉強会 32
public class SingleThreadExecutor
extends Thread implements ExecutorService {
// queue は Runnable オブジェクトを格納する ActivationQueue とする
public void execute(Runnable runnable) {
queue.putRequest(runnable);
}
public void run() {
while (true) {
Runnable runnable = queue.takeRequest();
runnable.run();
}
}
}
実装してみよう
戻り値のある処理 (Callable<T>) の非同期実行
2019-08-08 社内勉強会 33
public <T> Future<T> submit(Callable<T> callable) {
Future<T> future = new Future<T>();
Runnable runnable = new Runnable() {
public void run() {
T result = callable.call();
future.set(result);
}
};
execute(runnable);
return future;
}
◦ callable の結果を future に設定する Runnable を作って非同期実行
◦ MakeStringRequest の execute メソッドと同じ仕掛け
◦ この future + runnable が java.util.concurrent.FutureTask<V> に相当
実装してみよう
shutdown による終了処理
2019-08-08 社内勉強会 34
public void shutdown() {
shutdownRequested = true;
}
public void execute(Runnable runnable) throws RuntimeException {
if (shutdownRequested) { throw new RuntimeException("Rejected"); }
...
}
public void run() {
while (!(shutdownRequested && queue.isEmpty())) { ... }
}
◦ shutdown 要求後は新規のリクエストを受け付けない
◦ queue に残っているリクエストの処理を待って終了する
おわり
質疑応答
2019-08-08 社内勉強会 35
1 of 35

Recommended

TVM の紹介 by
TVM の紹介TVM の紹介
TVM の紹介Masahiro Masuda
5.5K views68 slides
画像処理ライブラリ OpenCV で 出来ること・出来ないこと by
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
221.7K views64 slides
jaws aws-nuke by
jaws aws-nukejaws aws-nuke
jaws aws-nukekota tomimatsu
638 views26 slides
CuPy解説 by
CuPy解説CuPy解説
CuPy解説Ryosuke Okuta
120.2K views21 slides
画像処理の高性能計算 by
画像処理の高性能計算画像処理の高性能計算
画像処理の高性能計算Norishige Fukushima
2.4K views45 slides
Kubernetesによる機械学習基盤への挑戦 by
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Preferred Networks
14.6K views18 slides

More Related Content

What's hot

1076: CUDAデバッグ・プロファイリング入門 by
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門NVIDIA Japan
21K views51 slides
TensorFlow XLAは、 中で何をやっているのか? by
TensorFlow XLAは、 中で何をやっているのか?TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?Mr. Vengineer
7.1K views101 slides
AutoTVM紹介 by
AutoTVM紹介AutoTVM紹介
AutoTVM紹介tomohiro kato
4K views18 slides
C++ マルチスレッドプログラミング by
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
107.7K views97 slides
スモールサービスにおけるCloudFrontの真骨頂 by
スモールサービスにおけるCloudFrontの真骨頂スモールサービスにおけるCloudFrontの真骨頂
スモールサービスにおけるCloudFrontの真骨頂Kentarou Takeda
1K views19 slides
[DL輪読会]Objects as Points by
[DL輪読会]Objects as Points[DL輪読会]Objects as Points
[DL輪読会]Objects as PointsDeep Learning JP
27.6K views27 slides

What's hot(20)

1076: CUDAデバッグ・プロファイリング入門 by NVIDIA Japan
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門
NVIDIA Japan21K views
TensorFlow XLAは、 中で何をやっているのか? by Mr. Vengineer
TensorFlow XLAは、 中で何をやっているのか?TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?
Mr. Vengineer7.1K views
C++ マルチスレッドプログラミング by Kohsuke Yuasa
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa107.7K views
スモールサービスにおけるCloudFrontの真骨頂 by Kentarou Takeda
スモールサービスにおけるCloudFrontの真骨頂スモールサービスにおけるCloudFrontの真骨頂
スモールサービスにおけるCloudFrontの真骨頂
Kentarou Takeda1K views
[DL輪読会]Objects as Points by Deep Learning JP
[DL輪読会]Objects as Points[DL輪読会]Objects as Points
[DL輪読会]Objects as Points
Deep Learning JP27.6K views
Linux女子部 systemd徹底入門 by Etsuji Nakai
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai137.9K views
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について by Fixstars Corporation
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてマルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
コンテナの作り方「Dockerは裏方で何をしているのか?」 by Masahito Zembutsu
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu30.8K views
20230105_TITECH_lecture_ishizaki_public.pdf by Kazuaki Ishizaki
20230105_TITECH_lecture_ishizaki_public.pdf20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki414 views
Python 3.9からの新定番zoneinfoを使いこなそう by Ryuji Tsutsui
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui6.9K views
リレーショナルな正しいデータベース設計 by Mikiya Okuno
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
Mikiya Okuno20.2K views
Slurmのジョブスケジューリングと実装 by Ryuichi Sakamoto
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
Ryuichi Sakamoto1.9K views
「機械学習:技術的負債の高利子クレジットカード」のまとめ by Recruit Technologies
「機械学習:技術的負債の高利子クレジットカード」のまとめ「機械学習:技術的負債の高利子クレジットカード」のまとめ
「機械学習:技術的負債の高利子クレジットカード」のまとめ
Recruit Technologies19.9K views
LiDAR点群と画像とのマッピング by Takuya Minagawa
LiDAR点群と画像とのマッピングLiDAR点群と画像とのマッピング
LiDAR点群と画像とのマッピング
Takuya Minagawa10.3K views
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料) by NTT DATA Technology & Innovation
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
ぼくがAthenaで死ぬまで by Shinichi Takahashi
ぼくがAthenaで死ぬまでぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまで
Shinichi Takahashi25.7K views
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー by Toru Makabe
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe37K views

Similar to Active Object

WildFly Swarm - Rightsize Your Java EE Apps by
WildFly Swarm - Rightsize Your Java EE AppsWildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE AppsYoshimasa Tanabe
5.1K views52 slides
脱・独自改造! GebでWebDriverをもっとシンプルに by
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルにHiroko Tamagawa
37.2K views32 slides
はじめてのJPA by
はじめてのJPAはじめてのJPA
はじめてのJPAkawaba
3.3K views116 slides
Flex's DI Container by
Flex's DI ContainerFlex's DI Container
Flex's DI ContainerMasaaki Yonebayashi
1.3K views70 slides
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3] by
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
155 views71 slides
React Native GUIDE by
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
1.3K views85 slides

Similar to Active Object(20)

WildFly Swarm - Rightsize Your Java EE Apps by Yoshimasa Tanabe
WildFly Swarm - Rightsize Your Java EE AppsWildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE Apps
Yoshimasa Tanabe5.1K views
脱・独自改造! GebでWebDriverをもっとシンプルに by Hiroko Tamagawa
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa37.2K views
はじめてのJPA by kawaba
はじめてのJPAはじめてのJPA
はじめてのJPA
kawaba3.3K views
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3] by David Buck
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
David Buck155 views
React Native GUIDE by dcubeio
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio1.3K views
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned by Daiki Kawanuma
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learnedエンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
Daiki Kawanuma11.3K views
jjugccc2018 app review postmortem by tamtam180
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180 16.1K views
SDLoader SeasarCon 2009 Whire by Akio Katayama
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama314 views
Jvm internal by Go Tanaka
Jvm internalJvm internal
Jvm internal
Go Tanaka5.9K views
PHP 2大 web フレームワークの徹底比較! by Shohei Okada
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
Shohei Okada13.4K views
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜 by Ryo Sasaki
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
Ryo Sasaki204 views
モダンJavaScript環境構築一歩目 by 大樹 小倉
モダンJavaScript環境構築一歩目モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
大樹 小倉16.4K views

More from y-uti

潜在ディリクレ配分法 by
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法y-uti
5.8K views59 slides
目で見る過学習と正則化 by
目で見る過学習と正則化目で見る過学習と正則化
目で見る過学習と正則化y-uti
3.2K views52 slides
ロジスティック回帰入門 by
ロジスティック回帰入門ロジスティック回帰入門
ロジスティック回帰入門y-uti
4.9K views46 slides
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi... by
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...y-uti
1.7K views18 slides
PECL operator で演算子オーバーロード by
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードy-uti
1.4K views28 slides
PHP-ML で手書き数字認識 by
PHP-ML で手書き数字認識PHP-ML で手書き数字認識
PHP-ML で手書き数字認識y-uti
2.3K views14 slides

More from y-uti(20)

潜在ディリクレ配分法 by y-uti
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法
y-uti5.8K views
目で見る過学習と正則化 by y-uti
目で見る過学習と正則化目で見る過学習と正則化
目で見る過学習と正則化
y-uti3.2K views
ロジスティック回帰入門 by y-uti
ロジスティック回帰入門ロジスティック回帰入門
ロジスティック回帰入門
y-uti4.9K views
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi... by y-uti
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
y-uti1.7K views
PECL operator で演算子オーバーロード by y-uti
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
y-uti1.4K views
PHP-ML で手書き数字認識 by y-uti
PHP-ML で手書き数字認識PHP-ML で手書き数字認識
PHP-ML で手書き数字認識
y-uti2.3K views
OPcache の最適化器の今 by y-uti
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今
y-uti10.2K views
スパース推定 by y-uti
スパース推定スパース推定
スパース推定
y-uti8.2K views
Kaggle の Titanic チュートリアルに挑戦した話 by y-uti
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話
y-uti2.1K views
PHP カンファレンス福岡 2017 参加報告 by y-uti
PHP カンファレンス福岡 2017 参加報告PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告
y-uti544 views
分類問題 - 機械学習ライブラリ scikit-learn の活用 by y-uti
分類問題 - 機械学習ライブラリ scikit-learn の活用分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用
y-uti8.4K views
JIT のコードを読んでみた by y-uti
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
y-uti10.1K views
JIT for PHP を試した by y-uti
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試した
y-uti5K views
Task Spooler を試した by y-uti
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
y-uti3.1K views
anyenv + phpenv + php-build が便利すぎる件 by y-uti
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
y-uti11.8K views
PHP カンファレンス福岡 参加報告 by y-uti
PHP カンファレンス福岡 参加報告PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告
y-uti1.2K views
RFC: "var" Deprecation by y-uti
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
y-uti1.6K views
最近の PHP の話 by y-uti
最近の PHP の話最近の PHP の話
最近の PHP の話
y-uti3.2K views
Windows で拡張モジュールをビルドしてみた by y-uti
Windows で拡張モジュールをビルドしてみたWindows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみた
y-uti2.7K views
PECL を数えてみた by y-uti
PECL を数えてみたPECL を数えてみた
PECL を数えてみた
y-uti4K views

Recently uploaded

定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
132 views64 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Hitachi, Ltd. OSS Solution Center.
89 views26 slides
The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
76 views29 slides
光コラボは契約してはいけない by
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけないTakuya Matsunaga
25 views17 slides
SNMPセキュリティ超入門 by
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門mkoda
453 views15 slides

Recently uploaded(12)

The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.76 views
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga25 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda453 views
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka90 views
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4380 views

Active Object