SlideShare a Scribd company logo
YusukeYamamoto
失敗から学ぶAPI設計
山本 裕介
@yusuke #ccc_h4
YusukeYamamoto
前回までのあらすじ
YusukeYamamoto
前回までのあらすじ
No GGRKS!
使ってもらうためにはどんな汚いことでもする
対象プラットフォームを増やす
外部ライブラリ非依存
YusukeYamamoto
•Twitter APIのJavaラッパ
•開発は2007年5月∼
YusukeYamamoto
Twitter4Jは
•再利用されているライブラリ
https://wiki.fitbit.com/display/API/API+Java+Client
YusukeYamamoto
Twitter4Jは
•再利用されているライブラリ
http://code.google.com/p/weibo4j/
YusukeYamamoto
Twitter4Jは
•再利用されているライブラリ
http://facebook4j.org
YusukeYamamoto
Twitter4Jは
•イイライブラリ
YusukeYamamoto
Twitter4Jは
•イイライブラリとは
YusukeYamamoto
Twitter4Jは
•イイライブラリとは
• 優れたコストパフォーマンス
• 機能が豊富
• 品質が高い
YusukeYamamoto
Twitter4Jは
•イイライブラリ
• 多くのユーザーが使っている
• コミュニティが活発
• 拡張しやすい
• 使いやすい
YusukeYamamoto
Twitter4Jは
•イイライブラリ
• 多くのユーザーが使っている
• コミュニティが活発
• 拡張しやすい
• 使いやすい API・設計
YusukeYamamoto
APIとは
• Application Programming Interface
•何らかの機能を呼び出す口
YusukeYamamoto
Twitter4JのAPIは
•Twitter APIの射影
YusukeYamamoto
Twitter4JのAPIは
•Twitter APIの射影
•現在のところ対象外
• キャッシング・永続化
• フレームワーク的なこと
YusukeYamamoto
Twitter4J実装の変遷
• バージョン1.0
• Twitter APIのXMLのエンドポイント利用
• バージョン2.0
• OAuthサポート
• domオブジェクトを保持しなくなった
YusukeYamamoto
Twitter4J実装の変遷
• バージョン2.1
• 非推奨クラス、メソッドをバッサリ
• Factoryの導入
• バージョン2.2
• Basic認証廃止
• ライセンスをBSDからASLに変更
YusukeYamamoto
Twitter4J実装の変遷
• バージョン3.0
• Twitter API 1.1対応
YusukeYamamoto
Twitter4Jの開発指針
YusukeYamamoto
シンプルに
YusukeYamamoto
シンプルに
YAGNI
YusukeYamamoto
シンプル・YAGNI
•クラス数は極力少なく
YusukeYamamoto
シンプル・YAGNI
•クラス数は極力少なく
•インターフェースは(なるべく)
使わない!
YusukeYamamoto
シンプル・YAGNI
•拡張ポイントはなるべく少なく
YusukeYamamoto
(なるべく)immutableに
YusukeYamamoto
Twitter4Jの拡張ポイント
•クラス継承はさせない
• 基本finalにして継承を防ぐ
• 副作用を生まずに継承を許す設計は
すごく難しい
•strategyパターンとか言語道断
(一部除く)
YusukeYamamoto
シンプル・YAGNI
•Twitter4Jの拡張ポイント
• HTTP認証
• 非同期ディスパッチャ
• ロガー
• HTTPクライアント
YusukeYamamoto
シンプル・YAGNI
•Twitter4Jの拡張ポイント
• HTTP認証
• 非同期ディスパッチャ
• ロガー
• HTTPクライアント
ほとんどのデベロッパは拡張しない
YusukeYamamoto
デザインパターンを適用
YusukeYamamoto
デザインパターンを適用しない
YusukeYamamoto
デザインパターンを適用しない
Twitter twitter = new Twitter();
List<Status> statuses
= twitter.getPublicTimeline();
for(Status status : statuses){
System.out.println(status.getText());
}
多くのプログラマはFactoryとかわからない
まずはコンクリートコンストラクタで。
YusukeYamamoto
IDEの補完を活かせるように
YusukeYamamoto
IDEの補完を活かせるように
http://www.youtube.com/watch?v=Nk9CUxEuUww
補完の例
YusukeYamamoto
IDEの補完を活かせるように
•なるべく同一パッケージに
•一般的過ぎるクラス名にしない
YusukeYamamoto
IDEの補完が活きすぎないように
• 使うべきでないクラス名を異様にする
•z_T4JInternal******
YusukeYamamoto
Twitter4Jの成長
YusukeYamamoto
シンプルなTwitter4J
32 KB
YusukeYamamoto
シンプルだったTwitter4J
5.1 MB32 KB
YusukeYamamoto
互換性維持の苦労
YusukeYamamoto
互換性維持の苦労
•APIが増える
•レスポンススキーマが変わる
•ステータスコードが変わる
•いつの間にか要素が増えてる
•認証方式が変わる
•エンドポイントURLが変わる...
YusukeYamamoto
Twitter4Jの成長
•Twitter APIの成長
•Twitter4Jの成長
• 膨らむクラス数
• 膨らむメソッド数
• 膨らむアクセサ数
YusukeYamamoto
Twitter4Jの成長
•至上命題
互換性の維持
YusukeYamamoto
互換性のために大事なこと
•クラス名を変えない
YusukeYamamoto
互換性のために大事なこと
•メソッド名を変えない
YusukeYamamoto
互換性のために大事なこと
•挙動を変えない
YusukeYamamoto
互換性のために大事なこと
•直列化形式の互換性を保つ
YusukeYamamoto
互換性のために大事なこと
• 直列化形式の互換性を保つ
Java Object Serialization Specification
Versioning of Serializable Objects
5.6.1 Incompatible Changes
5.6.2 Compatible Changes
http://docs.oracle.com/javase/7/docs/platform/serialization/spec/version.html#6678
• 現在の所テストケースはなく「気をつける」だけ
で互換性を保っている
YusukeYamamoto
互換性のために大事なこと
• 非互換はコンパイラに検出させる
YusukeYamamoto
互換性を維持できた例
•User.java
• ユーザー情報
•UserWithStatus.java
• ユーザー情報+α
Extended user information with status
User information
YusukeYamamoto
互換性を維持できた例
class User{}
class UserWithStatus extends User{
getFriendsCount();getFollowersCount();
}
バージョン1.0
YusukeYamamoto
互換性を維持できた例
class User{
getFriendsCount();getFollowersCount();
}
/** @deprecated */
class UserWithStatus extends User{
}
バージョン1.0.4
getterを上位クラスに移動
YusukeYamamoto
互換性を維持できた例
class User{
getFriendsCount();getFollowersCount();
}
/** @deprecated */
class UserWithStatus extends User{
}
バージョン1.0.4
UserWithStatusは非推奨、コンパイラが警告
YusukeYamamoto
互換性を維持できた例
class User{
getFriendsCount();getFollowersCount();
}
/** @deprecated */
class UserWithStatus extends User{
}
バージョン2.0
UserWithStatusを廃止、コンパイラがエラーを出す
YusukeYamamoto
Twitter4Jの失敗
YusukeYamamoto
Twitter4Jの失敗
•パッケージ分けの失敗
•API設計の失敗
YusukeYamamoto
パッケージ分けの失敗
•パッケージ分け
• twitter4j.*
• twitter4j.api.*
• twitter4j.auth.*
• twitter4j.management.*
• twitter4j.internal.*
YusukeYamamoto
パッケージ分けの失敗
•パッケージ分けしすぎると
• クラスが見つけられない
• 特に貧弱なエディタを使っている場合
• blogのコード例をコピペしても動かない
• import部分の記載がないことが多い
• JavaDocの読み方がわからないプログラマは非常に多い
YusukeYamamoto
パッケージ分けの失敗
•下手にパッケージ分けすると
• 言語使用上仕方なくpublicなクラスが使
われてしまう
このパッケージはあのパッケージに対してのみ
公開、とかできるといいが少なくともJavaでは
できない。
YusukeYamamoto
解決策
• コードの見通しの問題であればパッケー
ジ分けしない
• かわりにソースディレクトリを分ける
• クラス可視性はpackage privateで
YusukeYamamoto
mavenでソースディレクトリの分ける設定
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>internal-json</source>
<source>internal-async</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
YusukeYamamoto
API設計の失敗
Twitter twitter = new Twitter();
YusukeYamamoto
API設計の失敗
•コンクリートコンストラクタ
•ユーザーにはわかりやすい
•が、モックテストしづらい
Twitter twitter = new Twitter();
YusukeYamamoto
API設計の失敗
• Twitterをクラスからインターフェースへ
• Factoryを導入
• Twitterインターフェースを実装したモックを作れる
Twitter twitter
= new TwitterFactory().getInstance();
YusukeYamamoto
API設計の失敗
• やはりFactoryパターンは難しい
• Singletonを返すstaticメソッドを導入
• あまり知られていない、使われていない
Twitter twitter
= TwitterFactory.getSingleton();
YusukeYamamoto
参考図書
•Effective Java
YusukeYamamoto
参考図書
•Practical API Design
YusukeYamamoto
#ccc_h4 #q
?
Ad

More Related Content

More from Yusuke Yamamoto (20)

株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
Yusuke Yamamoto
 
これからはじめるGit、GitHub #stapy
これからはじめるGit、GitHub #stapyこれからはじめるGit、GitHub #stapy
これからはじめるGit、GitHub #stapy
Yusuke Yamamoto
 
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
Yusuke Yamamoto
 
JetBrains IDEハンズオン
JetBrains IDEハンズオンJetBrains IDEハンズオン
JetBrains IDEハンズオン
Yusuke Yamamoto
 
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Java Küche 2016 LT 在室状況自動通知ボット #JavaKuecheJava Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Yusuke Yamamoto
 
Java Küche 2016 #JavaKueche
Java Küche 2016 #JavaKuecheJava Küche 2016 #JavaKueche
Java Küche 2016 #JavaKueche
Yusuke Yamamoto
 
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
Yusuke Yamamoto
 
WebStormから始まる快適Web開発ワークフロー #html5jk
WebStormから始まる快適Web開発ワークフロー #html5jkWebStormから始まる快適Web開発ワークフロー #html5jk
WebStormから始まる快適Web開発ワークフロー #html5jk
Yusuke Yamamoto
 
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
Yusuke Yamamoto
 
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Yusuke Yamamoto
 
カジュアルにスレッドダンプ - @yusuke #javacasual
カジュアルにスレッドダンプ - @yusuke #javacasualカジュアルにスレッドダンプ - @yusuke #javacasual
カジュアルにスレッドダンプ - @yusuke #javacasual
Yusuke Yamamoto
 
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Excel方眼紙アプリケーションサーバと侍の新機能 #jjugExcel方眼紙アプリケーションサーバと侍の新機能 #jjug
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Yusuke Yamamoto
 
Twitter4jハンズオン 5/1 #twtr_hack
Twitter4jハンズオン 5/1 #twtr_hackTwitter4jハンズオン 5/1 #twtr_hack
Twitter4jハンズオン 5/1 #twtr_hack
Yusuke Yamamoto
 
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai 株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
Yusuke Yamamoto
 
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjugBotを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Yusuke Yamamoto
 
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijpTwitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Yusuke Yamamoto
 
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Yusuke Yamamoto
 
貧乏人のHeroku活用術 #herokujp
貧乏人のHeroku活用術 #herokujp貧乏人のHeroku活用術 #herokujp
貧乏人のHeroku活用術 #herokujp
Yusuke Yamamoto
 
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
Yusuke Yamamoto
 
JavaScript時代のJava #kansumiB7 #kansumi
JavaScript時代のJava #kansumiB7 #kansumiJavaScript時代のJava #kansumiB7 #kansumi
JavaScript時代のJava #kansumiB7 #kansumi
Yusuke Yamamoto
 
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
Yusuke Yamamoto
 
これからはじめるGit、GitHub #stapy
これからはじめるGit、GitHub #stapyこれからはじめるGit、GitHub #stapy
これからはじめるGit、GitHub #stapy
Yusuke Yamamoto
 
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
Yusuke Yamamoto
 
JetBrains IDEハンズオン
JetBrains IDEハンズオンJetBrains IDEハンズオン
JetBrains IDEハンズオン
Yusuke Yamamoto
 
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Java Küche 2016 LT 在室状況自動通知ボット #JavaKuecheJava Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Yusuke Yamamoto
 
Java Küche 2016 #JavaKueche
Java Küche 2016 #JavaKuecheJava Küche 2016 #JavaKueche
Java Küche 2016 #JavaKueche
Yusuke Yamamoto
 
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
Yusuke Yamamoto
 
WebStormから始まる快適Web開発ワークフロー #html5jk
WebStormから始まる快適Web開発ワークフロー #html5jkWebStormから始まる快適Web開発ワークフロー #html5jk
WebStormから始まる快適Web開発ワークフロー #html5jk
Yusuke Yamamoto
 
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
Yusuke Yamamoto
 
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
Yusuke Yamamoto
 
カジュアルにスレッドダンプ - @yusuke #javacasual
カジュアルにスレッドダンプ - @yusuke #javacasualカジュアルにスレッドダンプ - @yusuke #javacasual
カジュアルにスレッドダンプ - @yusuke #javacasual
Yusuke Yamamoto
 
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Excel方眼紙アプリケーションサーバと侍の新機能 #jjugExcel方眼紙アプリケーションサーバと侍の新機能 #jjug
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Yusuke Yamamoto
 
Twitter4jハンズオン 5/1 #twtr_hack
Twitter4jハンズオン 5/1 #twtr_hackTwitter4jハンズオン 5/1 #twtr_hack
Twitter4jハンズオン 5/1 #twtr_hack
Yusuke Yamamoto
 
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai 株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
Yusuke Yamamoto
 
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjugBotを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Yusuke Yamamoto
 
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijpTwitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Yusuke Yamamoto
 
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Yusuke Yamamoto
 
貧乏人のHeroku活用術 #herokujp
貧乏人のHeroku活用術 #herokujp貧乏人のHeroku活用術 #herokujp
貧乏人のHeroku活用術 #herokujp
Yusuke Yamamoto
 
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
Yusuke Yamamoto
 
JavaScript時代のJava #kansumiB7 #kansumi
JavaScript時代のJava #kansumiB7 #kansumiJavaScript時代のJava #kansumiB7 #kansumi
JavaScript時代のJava #kansumiB7 #kansumi
Yusuke Yamamoto
 

Recently uploaded (6)

論文紹介:"Visual Genome:Connecting Language and Vision​Using Crowdsourced Dense I...
論文紹介:"Visual Genome:Connecting Language and Vision​Using Crowdsourced Dense I...論文紹介:"Visual Genome:Connecting Language and Vision​Using Crowdsourced Dense I...
論文紹介:"Visual Genome:Connecting Language and Vision​Using Crowdsourced Dense I...
Toru Tamaki
 
AIの心臓部を支える力 ― ニューラルネットワークプロセッサの進化と未来.pdf
AIの心臓部を支える力 ― ニューラルネットワークプロセッサの進化と未来.pdfAIの心臓部を支える力 ― ニューラルネットワークプロセッサの進化と未来.pdf
AIの心臓部を支える力 ― ニューラルネットワークプロセッサの進化と未来.pdf
Data Source
 
論文紹介:What, when, and where? ​Self-Supervised Spatio-Temporal Grounding​in Unt...
論文紹介:What, when, and where? ​Self-Supervised Spatio-Temporal Grounding​in Unt...論文紹介:What, when, and where? ​Self-Supervised Spatio-Temporal Grounding​in Unt...
論文紹介:What, when, and where? ​Self-Supervised Spatio-Temporal Grounding​in Unt...
Toru Tamaki
 
論文紹介:PitcherNet: Powering the Moneyball Evolution in Baseball Video Analytics
論文紹介:PitcherNet: Powering the Moneyball Evolution in Baseball Video Analytics論文紹介:PitcherNet: Powering the Moneyball Evolution in Baseball Video Analytics
論文紹介:PitcherNet: Powering the Moneyball Evolution in Baseball Video Analytics
Toru Tamaki
 
astahで問題地図を描いてみよう~第4回astah関西勉強会の発表資料です #astahkansai
astahで問題地図を描いてみよう~第4回astah関西勉強会の発表資料です #astahkansaiastahで問題地図を描いてみよう~第4回astah関西勉強会の発表資料です #astahkansai
astahで問題地図を描いてみよう~第4回astah関西勉強会の発表資料です #astahkansai
akipii Oga
 
GitLab好きのAzureユーザーに朗報!あなたのAzure OpenAIをつかって、GitLabでAIを使う方法とメリットをご紹介.pptx
GitLab好きのAzureユーザーに朗報!あなたのAzure OpenAIをつかって、GitLabでAIを使う方法とメリットをご紹介.pptxGitLab好きのAzureユーザーに朗報!あなたのAzure OpenAIをつかって、GitLabでAIを使う方法とメリットをご紹介.pptx
GitLab好きのAzureユーザーに朗報!あなたのAzure OpenAIをつかって、GitLabでAIを使う方法とメリットをご紹介.pptx
TsukasaKomatsubara
 
論文紹介:"Visual Genome:Connecting Language and Vision​Using Crowdsourced Dense I...
論文紹介:"Visual Genome:Connecting Language and Vision​Using Crowdsourced Dense I...論文紹介:"Visual Genome:Connecting Language and Vision​Using Crowdsourced Dense I...
論文紹介:"Visual Genome:Connecting Language and Vision​Using Crowdsourced Dense I...
Toru Tamaki
 
AIの心臓部を支える力 ― ニューラルネットワークプロセッサの進化と未来.pdf
AIの心臓部を支える力 ― ニューラルネットワークプロセッサの進化と未来.pdfAIの心臓部を支える力 ― ニューラルネットワークプロセッサの進化と未来.pdf
AIの心臓部を支える力 ― ニューラルネットワークプロセッサの進化と未来.pdf
Data Source
 
論文紹介:What, when, and where? ​Self-Supervised Spatio-Temporal Grounding​in Unt...
論文紹介:What, when, and where? ​Self-Supervised Spatio-Temporal Grounding​in Unt...論文紹介:What, when, and where? ​Self-Supervised Spatio-Temporal Grounding​in Unt...
論文紹介:What, when, and where? ​Self-Supervised Spatio-Temporal Grounding​in Unt...
Toru Tamaki
 
論文紹介:PitcherNet: Powering the Moneyball Evolution in Baseball Video Analytics
論文紹介:PitcherNet: Powering the Moneyball Evolution in Baseball Video Analytics論文紹介:PitcherNet: Powering the Moneyball Evolution in Baseball Video Analytics
論文紹介:PitcherNet: Powering the Moneyball Evolution in Baseball Video Analytics
Toru Tamaki
 
astahで問題地図を描いてみよう~第4回astah関西勉強会の発表資料です #astahkansai
astahで問題地図を描いてみよう~第4回astah関西勉強会の発表資料です #astahkansaiastahで問題地図を描いてみよう~第4回astah関西勉強会の発表資料です #astahkansai
astahで問題地図を描いてみよう~第4回astah関西勉強会の発表資料です #astahkansai
akipii Oga
 
GitLab好きのAzureユーザーに朗報!あなたのAzure OpenAIをつかって、GitLabでAIを使う方法とメリットをご紹介.pptx
GitLab好きのAzureユーザーに朗報!あなたのAzure OpenAIをつかって、GitLabでAIを使う方法とメリットをご紹介.pptxGitLab好きのAzureユーザーに朗報!あなたのAzure OpenAIをつかって、GitLabでAIを使う方法とメリットをご紹介.pptx
GitLab好きのAzureユーザーに朗報!あなたのAzure OpenAIをつかって、GitLabでAIを使う方法とメリットをご紹介.pptx
TsukasaKomatsubara
 
Ad

失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring