SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
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
?

Contenu connexe

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

イベント企画運営の経験と実際 / The history of organizing events by me
イベント企画運営の経験と実際 / The history of organizing events by meイベント企画運営の経験と実際 / The history of organizing events by me
イベント企画運営の経験と実際 / The history of organizing events by mewhywaita
 
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身Hisateru Tanaka
 
JAWS-UGサミット2011春 LT資料
JAWS-UGサミット2011春 LT資料JAWS-UGサミット2011春 LT資料
JAWS-UGサミット2011春 LT資料Yuuki Namikawa
 
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugSpring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugToshiaki Maki
 
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会Yusuke Suzuki
 
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナーエンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナーYusuke Suzuki
 
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップするRaspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップするKazuko Shikiya
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾Ryutaro YOSHIBA
 
Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!zaki4649
 
Ninja framework使ってみた
Ninja framework使ってみたNinja framework使ってみた
Ninja framework使ってみたeiryu
 
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11Yusuke Yamamoto
 
イカしたライブラリを作った話
イカしたライブラリを作った話イカしたライブラリを作った話
イカしたライブラリを作った話Keishin Yokomaku
 
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5jToshiaki Maki
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Yuuki Takezawa
 
勉強会アンチパターン at LLまつり
勉強会アンチパターン at LLまつり勉強会アンチパターン at LLまつり
勉強会アンチパターン at LLまつりHiro Yoshioka
 

Similaire à 失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring (20)

Twitter4Jとテスト
Twitter4JとテストTwitter4Jとテスト
Twitter4Jとテスト
 
イベント企画運営の経験と実際 / The history of organizing events by me
イベント企画運営の経験と実際 / The history of organizing events by meイベント企画運営の経験と実際 / The history of organizing events by me
イベント企画運営の経験と実際 / The history of organizing events by me
 
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身
 
JAWS-UGサミット2011春 LT資料
JAWS-UGサミット2011春 LT資料JAWS-UGサミット2011春 LT資料
JAWS-UGサミット2011春 LT資料
 
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugSpring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
 
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
 
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナーエンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
 
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップするRaspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
 
Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!Bapp Storeを調べてみたよ!
Bapp Storeを調べてみたよ!
 
Ninja framework使ってみた
Ninja framework使ってみたNinja framework使ってみた
Ninja framework使ってみた
 
関西DB会.pdf
関西DB会.pdf関西DB会.pdf
関西DB会.pdf
 
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
Twitter4Jのプロモーション戦略 - たくさん使ってもらうためにしたこと #jjug_b11
 
イカしたライブラリを作った話
イカしたライブラリを作った話イカしたライブラリを作った話
イカしたライブラリを作った話
 
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
 
meguro.rb LT
meguro.rb LTmeguro.rb LT
meguro.rb LT
 
Webdb2011 hadoop
Webdb2011 hadoopWebdb2011 hadoop
Webdb2011 hadoop
 
YouTube APIの紹介
YouTube APIの紹介YouTube APIの紹介
YouTube APIの紹介
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
 
勉強会アンチパターン at LLまつり
勉強会アンチパターン at LLまつり勉強会アンチパターン at LLまつり
勉強会アンチパターン at LLまつり
 

Plus de Yusuke Yamamoto

株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokaiYusuke Yamamoto
 
これからはじめるGit、GitHub #stapy
これからはじめるGit、GitHub #stapyこれからはじめるGit、GitHub #stapy
これからはじめるGit、GitHub #stapyYusuke Yamamoto
 
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansanYusuke 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 在室状況自動通知ボット #JavaKuecheYusuke Yamamoto
 
Java Küche 2016 #JavaKueche
Java Küche 2016 #JavaKuecheJava Küche 2016 #JavaKueche
Java Küche 2016 #JavaKuecheYusuke 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開発ワークフロー #html5jkYusuke 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 #javacasualYusuke Yamamoto
 
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
Excel方眼紙アプリケーションサーバと侍の新機能 #jjugExcel方眼紙アプリケーションサーバと侍の新機能 #jjug
Excel方眼紙アプリケーションサーバと侍の新機能 #jjugYusuke Yamamoto
 
Twitter4jハンズオン 5/1 #twtr_hack
Twitter4jハンズオン 5/1 #twtr_hackTwitter4jハンズオン 5/1 #twtr_hack
Twitter4jハンズオン 5/1 #twtr_hackYusuke 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 #jjugYusuke 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 #apijpYusuke Yamamoto
 
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Yusuke Yamamoto
 
貧乏人のHeroku活用術 #herokujp
貧乏人のHeroku活用術 #herokujp貧乏人のHeroku活用術 #herokujp
貧乏人のHeroku活用術 #herokujpYusuke 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_h4Yusuke Yamamoto
 
JavaScript時代のJava #kansumiB7 #kansumi
JavaScript時代のJava #kansumiB7 #kansumiJavaScript時代のJava #kansumiB7 #kansumi
JavaScript時代のJava #kansumiB7 #kansumiYusuke Yamamoto
 

Plus de Yusuke Yamamoto (20)

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

Dernier

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Dernier (10)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

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