SlideShare a Scribd company logo
[初音ミク] Kinesis でフリーザを撃て!
自己紹介
しみず @shimy_net
発売中 近日発売
iOS逆引きレシピ
AWS芸人
無駄に技術を使って
面白いLTをする
過去の発表
自転車でDynamoDB ピタゴラスイッチで自動化
Kinect でキックスタート
今回は
Kinesis
Kinesisとは?
Kinesis
ビッグデータ リアルタイム分析 見える化
なんでも
リアルタイムに見える化
簡単にいうと
ひらめいた
みんなの元気を
Kinesis に流し込めば
フリーザを倒せるんじゃね?
つまり
元気を集めて
Kinesis に入れて
見える化
フリーザを倒す
(゚ー゚*;)
なるほど
(́Д`;)
大丈夫か俺
まずは、考えた
元気を集める方法
Tweet 元気
・形態素解析
・感情分析
・元気の数値化
1Tweet = Max 100 pt
元気を数値に変換
ー Step1. 形態素解析
本日は晴天なり
本日 / は / 晴天 / なり
MeCab
ー Step2. 感情解析
本日 / は / 晴天 / なり
Positive or Negative
-1.0∼+1.0で評価
+0.63-0.18
ー Step3. 数値化
元気 72 pt
本日 / は / 晴天 / なり
+0.63-0.18
ー Step4. エネルギー弾の生成
82pt
37pt
77pt
64pt
93pt
Tweet
Tweet
Tweet
Tweet
Tweet
53万pt を超えろ
ということで、作った
仕組み
Kinesis
Stream
Twitter4J Kinesis MeCab Dynamo Unity
見える化分析KinesisTweet
#jawsdaysのTLの元気で
フリーザと戦う
Tweet を Stream に入れる
Kinesis
Stream
Twitter4J Kinesis MeCab Dynamo Unity
TwitterStream twitterStream = new TwitterStreamFactory().getInstance();	
StatusListener listener = new StatusListener() {	
@Override	
public void onStatus(Status status) {	
	String key = RandomStringUtils.randomAlphanumeric(10);	
	String json = DataObjectFactory.getRawJSON(status); 		
	PutRecordRequest putRecordRequest = new PutRecordRequest();	
	putRecordRequest.setStreamName(PropUtil.getInstance().getProp("StreamName"));
	putRecordRequest.setData(ByteBuffer.wrap(json.getBytes(Charset.forName("UTF-8")));	
	putRecordRequest.setPartitionKey(key);	
	PutRecordResult putRecordResult = kinesis.putRecord(putRecordRequest);	
}	
};	
	
twitterStream.addListener(listener);	
FilterQuery filterQuery = new FilterQuery();	
filterQuery.track(new String[] { PropUtil.getInstance().getProp("Keyword1"),
PropUtil.getInstance().getProp("Keyword2") });	
twitterStream.filter(filterQuery);
Tweet を Stream から出す
Kinesis
Stream
Twitter4J Kinesis MeCab Dynamo Unity
private void processRecordsWithRetries(List<Record> records) {
	for (Record record : records) {	
	 	boolean processedSuccessfully = false;	
	 	String data = null;	
	 	for (int i = 0; i < NUM_RETRIES; i++) {	
	 	 try {	
	 	 	// Get Data	
	 	 	data = decoder.decode(record.getData()).toString();	
	 	 	Status status = DataObjectFactory.createStatus(data );	
	 	 	 		
	 	 	// MeCab something	
	 	 	// ・・・・・・	
	 	 	processedSuccessfully = true;	
	 	 	break;	
	 	 } catch (Throwable t) {}	
	 	}	
	}	
}
Tweet を分析して数値化
Kinesis
Stream
Twitter4J Kinesis MeCab Dynamo Unity
Tagger tagger = new Tagger("-Ochasen");	
tagger.parse(status.getText().replaceAll("¥n", ""));	
Node node = tagger.parseToNode(status.getText().replaceAll("¥n", ""));	
Double sum = 0.0;	
int count = 0;	
for (; node != null; node = node.getNext()) {	
	String[] mecabArray = node.getFeature().split(","); 		
	String originalWord = node.getSurface();	
	if (!mecabArray[6].equals("*")) {	
	 	originalWord = mecabArray[6]; // 基本形	
	
}	
	 	 	 	 	 		
	String feature = mecabArray[0];	
	if (feature.equals("名詞") || feature.equals("動詞")	
	 || feature.equals("形容詞”) || feature.equals("形容動詞")	
	 || feature.equals("副詞")) {	
	 	// Positive or Negative	
	 	sum+=PositiveNegativeJudge.getInstance().getDouble(originalWord+":"+feature);	
	 	count++;	
	}	
}	
Double point = Math.floor((sum / count + 1.0) * 100.0 / 2.0);
DynamoDB で集計
Kinesis
Stream
Twitter4J Kinesis MeCab Dynamo Unity
	
private static PutItemRequest createPutItemRequest(String id, String datetime, String name,
String screenName, String text, Double value) {	
	
	Map<String, AttributeValue> putItems = new HashMap<String, AttributeValue>();	
	putItems.put("AppName", new
AttributeValue().withS(PropUtil.getInstance().getProp("ApplicationName")));	
	putItems.put("Datetime/SerialNumber", new AttributeValue().withS(datetime+"/"+id));	
	putItems.put("ScreenName", new AttributeValue().withS("@" + screenName));	
	putItems.put("Name", new AttributeValue().withS(name));	
	putItems.put("Text", new AttributeValue().withS(text));	
	putItems.put("Value", new AttributeValue().withN(Double.toString(value)));	
	PutItemRequest putItemRequest = new
PutItemRequest().withTableName(PropUtil.getInstance().getProp("DynamoDbTableNameDetail")).withIte
m(putItems);	
	
	return putItemRequest;	
}
DynamoDB に元気が溜まる
元気ポイント
元気ポイント総量
Atomic Counter
集計結果を JSON で Unityへ
Unity で見える化
Kinesis
Stream
Twitter4J Kinesis MeCab Dynamo Unity
ミクさんに
お手伝いしてもらう
おねだりするミクさん
リアルタイムに
Kinesis から元気を集めるミクさん
ミクさん
みんなのTweet
元気ゲージ
かめはめ波
かめはめ波
フリーザ
フリーザ
デモします
負けバージョン
ずっこけるミクさん
負けバージョン
53万ptに達せず
元気が足りない
※ここまでは予定調和
こんなこともあろうかと
仕込んでおいた
集計プログラム	
if (tweet.indexOf(“芸人イケメン”)) != -1) {	
	point = 530000.0;	
}
オラに元気をわけてくれ
芸人イケメン
#jawsdays
とTweetすると元気 53万pt が届く
BGM:チャラヘッチャラ
みんなの応援が
届く
再び
デモします
かめはめ波
勝ちバージョン
53万を超えた!
超えすぎww
※発表当時は「芸人イケメ
ン」というTweetでいっぱい
になりました。
照れるますわ(;́Д`)
フリーザに直撃
倒れるフリーザ
勝ちバージョン
やったね!
芸人イケメン
Kinesisイケメン
まとめ
リアルタイムに
データ処理できるクールなサービス
おまけ(LTの裏側)
題材にKinesis を選んだ時点で絶対にクリアせねばならん課題がありました。
 ↓それは
5分の発表枠のなかで、
リアルタイムに反映できるデモを実現する事
 ↓というわけで、デモプログラムのためのサーバーサイドのプロセスは
  安定稼働させる必要があり、それなりに監視していました。
ところが・・・
おまけ(LTの裏側)
[発表直前]
DyanamoDBからデータを取り出すプロセスが高頻度で死亡する事案が発生
ec2-user 14685 0.1 4.2 1625848 71584 ? Sl 02:10 0:27 java KinesisPutter
ec2-user 18622 2.2 4.8 1787796 82660 pts/1 Sl 06:01 0:21 java -Djava.library.path=.:/usr/local/bin/mecab-java KinesisGetter
ec2-user 18944 22.0 4.2 1618412 71836 ? Sl 06:16 0:08 java DynamoJsonCreator
 ↓
ec2-user 14685 0.1 4.2 1625848 71584 ? Sl 02:10 0:27 java KinesisPutter
ec2-user 18622 2.2 4.9 1839496 83452 pts/1 Sl 06:01 0:21 java -Djava.library.path=.:/usr/local/bin/mecab-java KinesisGetter
cronでプロセスを再起動するように泥臭い対応をしていましたが
もし運悪くプロセス死亡時にデモをすると、リアルタイムに最新データを
取り出せない可能性がありました。困った・・・
*/2 * * * * bash /home/ec2-user/KinesisTwitter/check_putter.sh > /home/ec2-user/cron.log.putter.txt 2>&1
*/2 * * * * bash /home/ec2-user/KinesisTwitter/check_getter.sh > /home/ec2-user/cron.log.getter.txt 2>&1
*/2 * * * * bash /home/ec2-user/KinesisTwitter/check_create_json.sh > /home/ec2-user/cron.log.create.json.txt 2>&1
おまけ(LTの裏側)
任天堂のピーク発生
と調べていると、DyanamoDBが単純にキャパを超えていました・・・
(;́Д`)すんません、ぼけてました。
ちょうど、任天堂AWS導入事例のセッションが開催されていて
TLへの書き込みが増加したため、キャパ超えが頻発していたようです。
DyanamoDBをスケールアウトして対応
AWSの真髄ここにありですね
スケールするDyanamoDB
参考(感謝)
ドラゴンボール
Amazon Kinesis http://aws.amazon.com/jp/kinesis/
Amazon DynamoDB http://aws.amazon.com/jp/dynamodb/
Twitter4J http://twitter4j.org/ja/
MeCab http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html
MeCab-java 
単語感情極性対応表 http://www.lr.pi.titech.ac.jp/ takamura/pndic_ja.html
Unity http://japan.unity3d.com/
MikuMikuDcance for Unity http://mmd-for-unity-proj.github.io/mmd-for-unity/ 
Lat式ミク http://dic.nicovideo.jp/a/lat
フリーザ http://ux.getuploader.com/karota318/
かめはめ波モーション http://www.nicovideo.jp/watch/sm15093547
歩き・スキップモーション http://www.nicovideo.jp/watch/sm21263509
待機モーション http://www.nicovideo.jp/watch/sm18961728
やられモーション http://www.nicovideo.jp/watch/sm19073965
日常モーション http://www.nicovideo.jp/watch/sm18015670
ありがとうございました

More Related Content

PDF
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
PDF
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
PDF
とあるイルカのバーボンハウス
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
PDF
Elasticsearch勉強会#44 20210624
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
PDF
コンピューティングとJava~なにわTECH道
PDF
人狼知能プログラミング演習資料2015
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
とあるイルカのバーボンハウス
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
Elasticsearch勉強会#44 20210624
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
コンピューティングとJava~なにわTECH道
人狼知能プログラミング演習資料2015

What's hot (20)

PDF
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
PPT
実行時のために最適なデータ構造を作成しよう
PDF
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
PDF
人狼知能セミナー資料案20170624
PPTX
JavaでインメモリSQLエンジンを作ってみた
PDF
Velocity.js is next generation animation engine.
PDF
【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
PDF
【CEDEC2018】ココが変わる!Unityの新しいエディタワークフロー
PDF
ソーシャルアプリ勉強会(第一回資料)配布用
PDF
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
PPTX
Ember.js Tokyo event 2014/09/22 (Japanese)
PDF
Jvm internal
PDF
Elasticsearch勉強会#39 LT 20201217
PPTX
【Photon勉強会】1時間でわかるプラグイン開発とその実際(2017/3/23講演)
PDF
Heroku Postgres
PDF
JavaOne2015報告またはこれからのJava
PDF
㉒初期プロジェクトを改造!
PDF
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
PDF
SolrとElasticsearchの比較
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
実行時のために最適なデータ構造を作成しよう
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
人狼知能セミナー資料案20170624
JavaでインメモリSQLエンジンを作ってみた
Velocity.js is next generation animation engine.
【GTMF2018OSAKA】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【CEDEC2018】ココが変わる!Unityの新しいエディタワークフロー
ソーシャルアプリ勉強会(第一回資料)配布用
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
Ember.js Tokyo event 2014/09/22 (Japanese)
Jvm internal
Elasticsearch勉強会#39 LT 20201217
【Photon勉強会】1時間でわかるプラグイン開発とその実際(2017/3/23講演)
Heroku Postgres
JavaOne2015報告またはこれからのJava
㉒初期プロジェクトを改造!
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
SolrとElasticsearchの比較
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
Ad

Similar to [初音ミク] Kinesis でフリーザを撃て! (8)

PDF
Hands on
KEY
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
PDF
UnityとBlenderハンズオン第2章
KEY
Arctic.js
PDF
わかるコードを書くために For writing clean code
PDF
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
PPT
20130924 Picomon CRH勉強会
PDF
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Hands on
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
UnityとBlenderハンズオン第2章
Arctic.js
わかるコードを書くために For writing clean code
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
20130924 Picomon CRH勉強会
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Ad

More from 崇之 清水 (20)

PDF
WordPress RESTful API & Amazon API Gateway (English version)
PDF
知らなきゃ損なアップデートを振り返り(2020年分)- いにしえのサービスから勝手にチョイス
PDF
マイクロサービスを AWS サーバレス&コンテナで実装する方法
PDF
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
PDF
クラウドを活用したセンシング/モニタリングなどデータ分析の実現
PDF
AWS 主要なサービスアップデート 6/3-11/28
PDF
5分でサーバーレスの環境構築から本番デプロイまでやったろやないか! - Serverless Meetup Osaka #4 LT
PDF
サーバレスアプリケーションの入門と実践 - AWS Cloud Roadshow 2017 Osaka
PDF
AWS における サーバーレスの基礎からチューニングまで
PDF
データ分析 on AWS
PDF
日本語でおk AI スピーカーを作ってみた
PDF
Amazon Web Services (AWS) のご紹介
PDF
Amazon AI のスゴいデモ(仮) - Serverless Meetup Osaka
PDF
Amazon Pinpoint - re:Invent Serverless Follow Up - 20161207
PDF
AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜
PDF
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016
PDF
Amazon API Gateway を活用したゲームサーバー構築
PDF
関西スタートアップAWS勉強会 スタートアップ最新事例
PDF
スタートアップ向け構成例とAWS活用事例(福岡市スタートアップカフェ)
PDF
Amazon Aurora の活用 - Developers.IO in OSAKA
WordPress RESTful API & Amazon API Gateway (English version)
知らなきゃ損なアップデートを振り返り(2020年分)- いにしえのサービスから勝手にチョイス
マイクロサービスを AWS サーバレス&コンテナで実装する方法
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
クラウドを活用したセンシング/モニタリングなどデータ分析の実現
AWS 主要なサービスアップデート 6/3-11/28
5分でサーバーレスの環境構築から本番デプロイまでやったろやないか! - Serverless Meetup Osaka #4 LT
サーバレスアプリケーションの入門と実践 - AWS Cloud Roadshow 2017 Osaka
AWS における サーバーレスの基礎からチューニングまで
データ分析 on AWS
日本語でおk AI スピーカーを作ってみた
Amazon Web Services (AWS) のご紹介
Amazon AI のスゴいデモ(仮) - Serverless Meetup Osaka
Amazon Pinpoint - re:Invent Serverless Follow Up - 20161207
AWS SDK for PHP のインストールから 始めるクラウドマスターへの道 〜 Promise による非同期オペレーション 〜
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016
Amazon API Gateway を活用したゲームサーバー構築
関西スタートアップAWS勉強会 スタートアップ最新事例
スタートアップ向け構成例とAWS活用事例(福岡市スタートアップカフェ)
Amazon Aurora の活用 - Developers.IO in OSAKA

[初音ミク] Kinesis でフリーザを撃て!