SlideShare a Scribd company logo
Mojolicious+Redisでチャット
を作った
Mishima.pm #1 @dokechin
Mojolicious
• Perl のWeb Application Framework
• 広大なMojoネーム空間のモジュール群をWeb
アプリで使うようにしたもの
http://blog2.jamadam.com/?p=808 より引用
私の考えるメリット
• 開発コミュニティが世界的に活発
(MojoConf2014 in オスロなど。2015への
積立金もすでにプールされている。)
• ドキュメント豊富、サンプルソースも一杯あふ
れている
• All in One
• 環境構築が楽、cpanm Mojolicious
非同期な話
1.MojoliciousとNode.jsは非同期サーバ
Mojoliciousでsleepしてみた
#!/usr/bin/env perl
use Mojolicious::Lite;
get '/' => sub {
my $self = shift;
sleep(10);
$self->render('index');
};
get '/hoge' => sub {
my $self = shift;
$self->render('hoge');
};
app->start;
/をGETその後すぐ、/hogeをGET
/hogeが先に返ってくるのでは・・
と期待していたが・・・
結果は・・
/が返ってから/hogeが返ってくる!
処理の流れを1つにすることで、サーバー資源を
節約?どこかで聞いたことあるなぁ・・・
非同期な話
2.非同期vs同期ベンチマーク
同期なコード
package Test::Web::Example;
use Mojo::Base 'Mojolicious::Controller';
use Time::HiRes qw(sleep);
sub welcome {
my $self = shift;
sleep(0.5);
$self->render(
message => 'Welcome to the Mojolicious
real-time web framework!');
}
1;
非同期なコード
package Test::Web::Example;
use Mojo::Base 'Mojolicious::Controller';
use Time::HiRes qw(sleep);
sub welcome {
my $self = shift;
$self->render_later;
Mojo::IOLoop->timer(0.5 => sub {
$self->render(
message => 'Welcome to the
Mojolicious real-time web framework!');
});
}
1;
Apache bench
ab –c 100–n 1000 http://your_host_name/
サーバ構成
さくらVPS
メモリ 1G
CPU 仮想2コア
nginx1.6+hyponotad 5workers
nginx1.6+starman 5workers
結果
0
100
200
300
400
500
600
0 0.2 0.4 0.6 0.8 1 1.2
同期(starman+5workers)
非同期(hyponotad+5worker)
同期(hyponotad+5worker)
トレードオフ
容易な同期的プログラ
ミング
難しい非同期プログラ
ミング
サーバリソース大 サーバリソース小
その他、ベンチをやって気づいたこと
・starman,startletでは、Mojoliciousの非同期機能
が使えない
非同期な話
3.実践的な非同期コードについて
同期的コード
sub mojo4{
my $self = shift;
my $ua = LWP::UserAgent->new;
my $res = $ua-
>get("http://atndfc.dokechin.com");
if ($res->is_success) {
$self->render(message => $res->content);
}
else {
die $res->status_line;
}
}
非同期的コード
package Test::Web::Example;
#use Mojo::UserAgent;
sub mojo{
my $self = shift;
$self->ua-
>get('http://metacpan.org/search?q=mojo'
=>sub{
my ($ua, $tx) = @_;
$self->render(message => $tx->res);
});
}
1;
Mojolicious用各種非同期APIを使う
Mojo::Redis(Redis非同期クライアント)
Mango(Mongo非同期クライアント)
ブロッキングAPIしかない場合
Mojo::IOLoop::ForkCall - run blocking functions
asynchronously by forking
非同期な話
3.Callback hellを避けるためには
# callback hell code
sub mojo{
my $self = shift;
$self->render_later;
$ua->get('http://yahoo.co.jp/' =>
sub{ my ($ua, $tx) = @_;
my $title1 = $tx->res->dom->html->head-
>title->text;
$ua->get('http://google.com/' =>
sub{ my ($ua, $tx) = @_;
my $title2 = $tx->res->dom->html->head-
>title->text;
$self->render(msg => $title1 . $title2);
});
});
}
# finish
sub mojo2{
my $self = shift;
$self->render_later;
my $delay = Mojo::IOLoop::Delay->new;
$delay->on(finish=>sub{
my $delay = shift;
my @titles = map { $_->res->dom-
>at('title')->text } @_;
$self->render(message => "@titles");
});
$self->ua->get( $_ => $delay->begin )
for@urls;
}
# stepsを利用したコード
sub mojo3{
my $self = shift;
$self->render_later;
my $delay = Mojo::IOLoop::Delay->new;
$delay->steps(sub{
my ($delay) = @_;
$self->ua->get( "http://www.cpan.org/" =>
$delay->begin);
$self->ua->get( "http://jognavi.com/" => $delay-
>begin);
}, sub {
my ($delay,@args) = @_;
my @messages = map {$_->res->dom->at('title')-
>text} @args;
$self->render(message=> "@messages");
},
);
}
チャットを作った話
• まずはデモ
morbo
W
WebSocket WebSocket WebSocketWebSocket
UserA UserB UserC UserD
・すべておなじプロセス配下のため、同じ部屋
の発言の通知は可能。
・スケーラブルでない
RoomA RoomB
hypnotoad
W
WebSocket WebSocket WebSocketWebSocket
UserA UserB UserC UserD
RoomA RoomB
Wプロセス間通信の手段が必要
Redis(部屋、部屋の入居者管理)
W
WebSocket WebSocket WebSocketWebSocket
W
RoomA RoomB
Red
is
UserA UserB UserC UserD
Redis-オブジェクトキャッシュ
rooms => {“rooma”,”roomb”}
rooma=>{“userA”,”userB”}
roomb=>{“userC”,”userD”}
RedisのPubSub
UserA,UserBがRoomAチャンネルを購買。UserA
がRoomAチャンネルへ発言、チャンネルAの購
買者(UserA,UserB)に発言内容が通知される。
まとめ
• 非同期はパフォーマンスがよくなるが、コード
は複雑化する。
• Mojoliciousは非同期に動かす仕組み(モジュール、
サーバ)が、備わっている。
• 本番環境での運用を視野にするならば、初めか
らRedisなど、Kye-Valueストアを使ったほうが
よい?
ご清聴ありがとうございました

More Related Content

What's hot

HTML5 開発環境の紹介
HTML5 開発環境の紹介HTML5 開発環境の紹介
HTML5 開発環境の紹介
tomo_masakura
 
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
Yuki Okada
 
JavaScript 研修
JavaScript 研修JavaScript 研修
JavaScript 研修
Yuki Ishikawa
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
Yusuke Wada
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkToshiaki Maki
 
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5jToshiaki Maki
 
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
Takahiro Okumura
 
【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!
Sakae Saito
 
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
松田 千尋
 
jQueryを中心としたJavaScript
jQueryを中心としたJavaScriptjQueryを中心としたJavaScript
jQueryを中心としたJavaScript
hideaki honda
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeomantomo_masakura
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersTakeshi Arabiki
 
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発 ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
schoowebcampus
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
Takahiro Okumura
 
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷javaY Watanabe
 
BuddyPressで街のポータルサイトを作ろう
BuddyPressで街のポータルサイトを作ろうBuddyPressで街のポータルサイトを作ろう
BuddyPressで街のポータルサイトを作ろう
松田 千尋
 
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootGrails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Toshiaki Maki
 
OpenShift のある生活
OpenShift のある生活OpenShift のある生活
OpenShift のある生活
Yoshimasa Tanabe
 
oEmbed と Text::Hatena
oEmbed と Text::HatenaoEmbed と Text::Hatena
oEmbed と Text::Hatena
Yasuhiro Onishi
 

What's hot (20)

HTML5 開発環境の紹介
HTML5 開発環境の紹介HTML5 開発環境の紹介
HTML5 開発環境の紹介
 
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
 
JavaScript 研修
JavaScript 研修JavaScript 研修
JavaScript 研修
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
 
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
 
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
 
【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!【B-1】kintoneでお手軽コールセンター!
【B-1】kintoneでお手軽コールセンター!
 
2479
24792479
2479
 
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
 
jQueryを中心としたJavaScript
jQueryを中心としたJavaScriptjQueryを中心としたJavaScript
jQueryを中心としたJavaScript
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
 
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発 ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
 
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
 
BuddyPressで街のポータルサイトを作ろう
BuddyPressで街のポータルサイトを作ろうBuddyPressで街のポータルサイトを作ろう
BuddyPressで街のポータルサイトを作ろう
 
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootGrails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
 
OpenShift のある生活
OpenShift のある生活OpenShift のある生活
OpenShift のある生活
 
oEmbed と Text::Hatena
oEmbed と Text::HatenaoEmbed と Text::Hatena
oEmbed と Text::Hatena
 

Viewers also liked

Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
マルチタスクって奥が深い #mishimapm
マルチタスクって奥が深い #mishimapmマルチタスクって奥が深い #mishimapm
マルチタスクって奥が深い #mishimapm
鉄次 尾形
 
Amon2 で造られた api サーバを引き継いで課金の実装をしました話
Amon2 で造られた api サーバを引き継いで課金の実装をしました話Amon2 で造られた api サーバを引き継いで課金の実装をしました話
Amon2 で造られた api サーバを引き継いで課金の実装をしました話
Tomoo Amano
 
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
Tomoo Amano
 
Mojoliciousのログ出力を改造する in chiba.pm #3
Mojoliciousのログ出力を改造する in chiba.pm #3Mojoliciousのログ出力を改造する in chiba.pm #3
Mojoliciousのログ出力を改造する in chiba.pm #3
Ayumu Itou
 
PerlでWeb API入門
PerlでWeb API入門PerlでWeb API入門
PerlでWeb API入門
Yusuke Wada
 
2013年のCPANモジュール作成事情
2013年のCPANモジュール作成事情2013年のCPANモジュール作成事情
2013年のCPANモジュール作成事情
charsbar
 
Gofのデザインパターン stateパターン編
Gofのデザインパターン stateパターン編Gofのデザインパターン stateパターン編
Gofのデザインパターン stateパターン編Ayumu Itou
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar
 
2016年のPerl (Long version)
2016年のPerl (Long version)2016年のPerl (Long version)
2016年のPerl (Long version)
charsbar
 
Json(::PP) is a-changing
Json(::PP) is a-changingJson(::PP) is a-changing
Json(::PP) is a-changing
charsbar
 
Perl logging
Perl loggingPerl logging
Perl loggingkeroyonn
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
 
2017年春のPerl
2017年春のPerl2017年春のPerl
2017年春のPerl
charsbar
 

Viewers also liked (14)

Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
マルチタスクって奥が深い #mishimapm
マルチタスクって奥が深い #mishimapmマルチタスクって奥が深い #mishimapm
マルチタスクって奥が深い #mishimapm
 
Amon2 で造られた api サーバを引き継いで課金の実装をしました話
Amon2 で造られた api サーバを引き継いで課金の実装をしました話Amon2 で造られた api サーバを引き継いで課金の実装をしました話
Amon2 で造られた api サーバを引き継いで課金の実装をしました話
 
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
モダンでもなく reactでもなく フロントエンドでもなく 開発でもない話
 
Mojoliciousのログ出力を改造する in chiba.pm #3
Mojoliciousのログ出力を改造する in chiba.pm #3Mojoliciousのログ出力を改造する in chiba.pm #3
Mojoliciousのログ出力を改造する in chiba.pm #3
 
PerlでWeb API入門
PerlでWeb API入門PerlでWeb API入門
PerlでWeb API入門
 
2013年のCPANモジュール作成事情
2013年のCPANモジュール作成事情2013年のCPANモジュール作成事情
2013年のCPANモジュール作成事情
 
Gofのデザインパターン stateパターン編
Gofのデザインパターン stateパターン編Gofのデザインパターン stateパターン編
Gofのデザインパターン stateパターン編
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
2016年のPerl (Long version)
2016年のPerl (Long version)2016年のPerl (Long version)
2016年のPerl (Long version)
 
Json(::PP) is a-changing
Json(::PP) is a-changingJson(::PP) is a-changing
Json(::PP) is a-changing
 
Perl logging
Perl loggingPerl logging
Perl logging
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
2017年春のPerl
2017年春のPerl2017年春のPerl
2017年春のPerl
 

Similar to Mojolicious+redisでチャットを作った

できる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリできる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:WebからはじまるアプリMasami Yabushita
 
iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術
vaccho
 
Drupal on bluemix20150902
Drupal on bluemix20150902Drupal on bluemix20150902
Drupal on bluemix20150902
Yasushi Osonoi
 
JXUG Conference 2 West
JXUG Conference 2 WestJXUG Conference 2 West
JXUG Conference 2 West
Kosuke Usami
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
Fumikazu Kiyota
 
20160601 devtools
20160601 devtools20160601 devtools
20160601 devtools
Noritada Shimizu
 
最近作ったもの
最近作ったもの最近作ったもの
最近作ったもの
onozaty
 
Xoopsサイト制作セミナー 20120922
Xoopsサイト制作セミナー 20120922Xoopsサイト制作セミナー 20120922
Xoopsサイト制作セミナー 20120922
Toshihiro Takehara
 
PHP でも活用できる Makefile
PHP でも活用できる MakefilePHP でも活用できる Makefile
PHP でも活用できる Makefile
Shohei Okada
 
『GMOプライベートDMP』の開発にあたって取り組んできた DevOps、更にその反省点と現在進行中のカイゼン事例の紹介
『GMOプライベートDMP』の開発にあたって取り組んできた DevOps、更にその反省点と現在進行中のカイゼン事例の紹介『GMOプライベートDMP』の開発にあたって取り組んできた DevOps、更にその反省点と現在進行中のカイゼン事例の紹介
『GMOプライベートDMP』の開発にあたって取り組んできた DevOps、更にその反省点と現在進行中のカイゼン事例の紹介
Tetsuo Yamabe
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324Tak Inamori
 
チームで開発するための環境を整える
チームで開発するための環境を整えるチームで開発するための環境を整える
チームで開発するための環境を整える
onozaty
 
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app worksアプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
Takaki Hoshikawa
 
Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話
You&I
 
World Plone Day2012 ふんばろう東日本支援PJ
World Plone Day2012 ふんばろう東日本支援PJWorld Plone Day2012 ふんばろう東日本支援PJ
World Plone Day2012 ふんばろう東日本支援PJ
mooono
 
Browser oh browser browser
Browser oh browser browserBrowser oh browser browser
Browser oh browser browser
Teppei Sato
 
できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16
Masami Yabushita
 
Dockerizeして
大変だった話、幸せになった話
Dockerizeして
大変だった話、幸せになった話Dockerizeして
大変だった話、幸せになった話
Dockerizeして
大変だった話、幸せになった話
Akira Miki
 
Androidアプリ 長い黒髪のマイカノジョ 制作ノート
Androidアプリ 長い黒髪のマイカノジョ 制作ノートAndroidアプリ 長い黒髪のマイカノジョ 制作ノート
Androidアプリ 長い黒髪のマイカノジョ 制作ノート
Hiroyuki Shimanishi
 

Similar to Mojolicious+redisでチャットを作った (20)

できる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリできる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリ
 
iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術
 
Drupal on bluemix20150902
Drupal on bluemix20150902Drupal on bluemix20150902
Drupal on bluemix20150902
 
JXUG Conference 2 West
JXUG Conference 2 WestJXUG Conference 2 West
JXUG Conference 2 West
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
20160601 devtools
20160601 devtools20160601 devtools
20160601 devtools
 
最近作ったもの
最近作ったもの最近作ったもの
最近作ったもの
 
Xoopsサイト制作セミナー 20120922
Xoopsサイト制作セミナー 20120922Xoopsサイト制作セミナー 20120922
Xoopsサイト制作セミナー 20120922
 
PHP でも活用できる Makefile
PHP でも活用できる MakefilePHP でも活用できる Makefile
PHP でも活用できる Makefile
 
『GMOプライベートDMP』の開発にあたって取り組んできた DevOps、更にその反省点と現在進行中のカイゼン事例の紹介
『GMOプライベートDMP』の開発にあたって取り組んできた DevOps、更にその反省点と現在進行中のカイゼン事例の紹介『GMOプライベートDMP』の開発にあたって取り組んできた DevOps、更にその反省点と現在進行中のカイゼン事例の紹介
『GMOプライベートDMP』の開発にあたって取り組んできた DevOps、更にその反省点と現在進行中のカイゼン事例の紹介
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
 
チームで開発するための環境を整える
チームで開発するための環境を整えるチームで開発するための環境を整える
チームで開発するための環境を整える
 
ビジネス雑談サロン オンライン・ストレージ入門
ビジネス雑談サロン オンライン・ストレージ入門ビジネス雑談サロン オンライン・ストレージ入門
ビジネス雑談サロン オンライン・ストレージ入門
 
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app worksアプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
 
Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話
 
World Plone Day2012 ふんばろう東日本支援PJ
World Plone Day2012 ふんばろう東日本支援PJWorld Plone Day2012 ふんばろう東日本支援PJ
World Plone Day2012 ふんばろう東日本支援PJ
 
Browser oh browser browser
Browser oh browser browserBrowser oh browser browser
Browser oh browser browser
 
できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16
 
Dockerizeして
大変だった話、幸せになった話
Dockerizeして
大変だった話、幸せになった話Dockerizeして
大変だった話、幸せになった話
Dockerizeして
大変だった話、幸せになった話
 
Androidアプリ 長い黒髪のマイカノジョ 制作ノート
Androidアプリ 長い黒髪のマイカノジョ 制作ノートAndroidアプリ 長い黒髪のマイカノジョ 制作ノート
Androidアプリ 長い黒髪のマイカノジョ 制作ノート
 

More from Tetsuya Tatsumi

App revealupを改造して
App revealupを改造してApp revealupを改造して
App revealupを改造して
Tetsuya Tatsumi
 
Mojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツールMojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツール
Tetsuya Tatsumi
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演
Tetsuya Tatsumi
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演
Tetsuya Tatsumi
 
テストではまったお話 Test::More
テストではまったお話 Test::Moreテストではまったお話 Test::More
テストではまったお話 Test::More
Tetsuya Tatsumi
 
英文難易度の低いニュースを集めたWebアプリ twien
英文難易度の低いニュースを集めたWebアプリ  twien英文難易度の低いニュースを集めたWebアプリ  twien
英文難易度の低いニュースを集めたWebアプリ twien
Tetsuya Tatsumi
 
Lingua::EN::Fathom
Lingua::EN::FathomLingua::EN::Fathom
Lingua::EN::Fathom
Tetsuya Tatsumi
 
webサービス「ふっふはっほ」
webサービス「ふっふはっほ」webサービス「ふっふはっほ」
webサービス「ふっふはっほ」
Tetsuya Tatsumi
 

More from Tetsuya Tatsumi (8)

App revealupを改造して
App revealupを改造してApp revealupを改造して
App revealupを改造して
 
Mojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツールMojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツール
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演
 
テストではまったお話 Test::More
テストではまったお話 Test::Moreテストではまったお話 Test::More
テストではまったお話 Test::More
 
英文難易度の低いニュースを集めたWebアプリ twien
英文難易度の低いニュースを集めたWebアプリ  twien英文難易度の低いニュースを集めたWebアプリ  twien
英文難易度の低いニュースを集めたWebアプリ twien
 
Lingua::EN::Fathom
Lingua::EN::FathomLingua::EN::Fathom
Lingua::EN::Fathom
 
webサービス「ふっふはっほ」
webサービス「ふっふはっほ」webサービス「ふっふはっほ」
webサービス「ふっふはっほ」
 

Recently uploaded

遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 

Recently uploaded (8)

遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 

Mojolicious+redisでチャットを作った