Rabbit Slide Show

ゲーム vs. Sinatra

2014-12-20

Description

Sinatra札幌の2013年~2014年の活動を振り返ると、いろいろなものとSinatraを組み合わせたものがほとんどでした。そこで、Ruby/GTK2(GTK+)、Gosu(SDL)、Sinatra(Rack)を例として、GUIアプリケーション、ゲーム、Webアプリケーションを対比させてみたいと思います。

Text

Page: 1

ゲーム vs. Sinatra
Masafumi Yokoyama
Sinatra/Padrino勉強会
2014/12/20
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 2

自己紹介
@myokoym
Sinatra札幌
将棋アマ三段
ヌルゲーマー
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 3

札幌の将棋事情
北海道将棋会館
札幌市中央区南4西9
北海道将棋連盟のブログ
http://doshoren.blog.fc2.com/
札幌将棋情報のブログ
http://blogs.yahoo.co.jp/sapporoshogijoho
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 4

Ruby Kaja 2013
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 5

よろしくお願いします。
m(_ _)m
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 6

話すこと
第一部
2013年から2014年にかけての
Sinatra札幌での活動について
第二部
表題の件
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 7

第一
部
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 8

年表(序盤)
2013/11/24
最初の勉強会
Sinatraと見せかけてRabbitの話
2014/02/08
札幌市中央区Ruby会議01
RubyでGUIする話
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 9

札幌市中央区Ruby会議01
札幌市中央区Ruby会議01
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 10

年表(中盤)
2014/05/10
二回目の勉強会
Sinatraと見せかけてGosu(ゲーム用
ライブラリ)の話
2014/06/14
OSC 2014 Hokkaido
Sinatraの帽子を使ったゲームを展示
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 11

OSC
OSC 2014
2014 Hokkaido
Hokkaido
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 12

年表(終盤)
2014/08/17
SinatraSapporoSuturday#01
ArduinoでLEDをチカチカして納涼
2014/10/11、2014/11/16
SinatraSapporoSaturday#02
SinatraSapporoSunday#03
Padrinoを使い始めた
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 13

ちょっとwait
events.count |event|
event.Sinatraメイン?
end
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 14

#=> 0
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 15

理由
何かと組み合わせて使っていた
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 16

何か
1. Rabbit
http://slide.rabbit-shocker.org/authors/myokoym/
sinatrasapporo01/
2. Gosu
http://slide.rabbit-shocker.org/authors/myokoym/
sinatrasapporo02/
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 17

何か
1. Rabbit
http://slide.rabbit-shocker.org/authors/myokoym/
sinatrasapporo01/
2. Gosu
http://slide.rabbit-shocker.org/authors/myokoym/
sinatrasapporo02/
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 18

Rabbit
Rubyist用プレゼンツール
http://rabbit-shocker.org/
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 19

Lavieさん
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 20

Rabbit
文章はテキストで記述
RD、Wiki、Markdownなど
装飾(テーマ)はRubyで記述
RubyGemsで簡単に追加
バージョン管理しやすい
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 21

Ruby-GNOME2
http://ruby-gnome2.sourceforge.jp/ja/
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 22

Ruby-GNOME2
Ruby-GNOME2はGNOME
で使用されるGTK+などの主要
なライブラリのRubyバインディン
グ集です。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/
ruby-list/49734
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 23

Ruby-GNOME2
GTK+はマルチプラットフォー
ム対 応のG U Iツ ー ル キ ッ トな の
で、マルチプラットフォーム対応
のGUIアプリケーションをRubyで
書くことができます。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/
ruby-list/49734
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 24

バージョンについて
Ruby/GTK2
Ruby/GTK3
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 25

Ruby/GTK2
GTK+ 2のRubyバインディング
gem install gtk2
旧バージョン
GTK+ 2の開発はほぼ終了
採用実績が多く、安定性は高い
Rabbit(プレゼンツール)
mikutter(Twitterクライアント)
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 26

Ruby/GTK3
GTK+ 3のRubyバインディング
gem install gtk3
新バージョン
GTK+ 3に対応
GObject Introspection
新機能(CSS対応の強化など)
新ウィジェット
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 27

迷ったら
Twitterやメーリングリストなどで
ご相談ください
日本語MLあります
ruby-gnome2-devel-ja
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 28

何か
1. Rabbit
http://slide.rabbit-shocker.org/authors/myokoym/
sinatrasapporo01/
2. Gosu
http://slide.rabbit-shocker.org/authors/myokoym/
sinatrasapporo02/
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 29

Gosu
Gosu is a 2D game
development library for the
Ruby and C++ programming
languages, available for Mac
OS X, Windows, and Linux.
http://www.libgosu.org/
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 30

Gosu
2Dゲーム開発ライブラリ
RubyとC++向け
マルチプラットフォーム
OS X、Windows、Linux、Raspbian
iOS(C++)、Android(WIP)
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 31

Gosu 0.8.6
現時点での最新リリース版
gem install gosu
SDL2ベース
Ruby 2.1対応
RubyInstaller for Windowsも
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 32

SDL
https://www.libsdl.org/
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 33

SDL
Simple DirectMedia Layer
マルチメディアライブラリ
主にゲーム用途
C言語で記述
マルチプラットフォーム
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 34

SDL2
zlib License
MITより緩い
iOS、Android対応
などなど
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 35

第一部まとめ
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 36

Sinatra最高
Sinatra最高
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 37

第二
部
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 38

テーマ
vs.
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 39

vs.(versus)
【前置詞】
1. (訴訟・競技などで)…対,…
に対する
2. …と対比して、比較して
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 40

対比させてみる
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 41

粒度を合わせる
GUIアプリケーション
Ruby/GTK2、GTK+
ゲーム
Gosu、SDL
Webアプリケーション
Sinatra、Rack
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 42

ポイント
動作環境
画面構成
更新方法
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 43

ポイント
動作環境
画面構成
更新方法
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 44

動作環境
GTK+
デスクトッ
プ(ネイテ
ィブ)アプ
リ
ゲーム vs. Sinatra
SDL
デスクトッ
プ(ネイテ
ィブ)アプ
リ
Rack
Webサー
バー、Web
ブラウザー
Powered by Rabbit 2.1.4

Page: 45

構図
ネイティブアプリ
vs.
Webアプリ
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 46

ネイティブアプリ
動作速度が速い
デバイスの機能を活かせる
push通知など
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 47

Webアプリ
リリース、インストールが楽
他のサービスと連携しやすい
使われる技術が限られる
HTTP、JavaScript
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 48

適材
適所
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 49

ポイント
動作環境
画面構成
更新方法
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 50

画面構成
GUIアプリ ゲーム系
(OSと紐
一から形
付いた)パ を決めて
ーツを組
描画する
み合わせ
る
ゲーム vs. Sinatra
Webアプ
リ
(ブラウザ
の)パーツ
を組み合
わせる
Powered by Rabbit 2.1.4

Page: 51

誰もがデザイナー
∧ ∧
(,,゚Д゚)
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 52

ポイント
動作環境
画面構成
更新方法
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 53

更新方法
GTK+
SDL
イベント駆 フレームレ
動
ート×イベ
ント
ゲーム vs. Sinatra
Rack
HTTP、
JavaScrip
t
Powered by Rabbit 2.1.4

Page: 54

更新方法
イベント駆動
フレームレート
HTTP
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 55

更新方法
イベント駆動
フレームレート
HTTP
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 56

イベント駆動
起動すると共にイベントを待機
し、起こったイベントにしたがって
処理を行う
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 57

イベント駆動
イベントを待機
イベントハンドラ
イベント
マウス、キーボードなど
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 58

イベントハンドラ
(コールバック関数)
イベントが起こったときの処理を
記述
クリックやアクティブ化など
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 59

Ruby/GTK2の
イベントハンドラ
window.signal_connect("destroy") do
# ウィンドウが閉じられた時の処理
end
button.signal_connect("clicked") do
# ボタンがクリックされた時の処理
end
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 60

イベント駆動
CPUに優しい(当社比)
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 61

更新方法
イベント駆動
フレームレート
HTTP
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 62

フレームレート
1秒間に一定回数の処理を行う
1秒間に60回の場合、60fps
frame per second
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 63

1フレームの主な処理
状態の更新
イベントや時間経過による
画面への描画
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 64

Gosu
class Game < Gosu::Window
def update
# 1秒間に約60回呼ばれる
end
def draw
# updateとセットで呼ばれる
end
end
Game.new(640, 480, false).show
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 65

ゲーム系
自由度が高い
常にCPU使ってる感ある
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 66

更新方法
イベント駆動
フレームレート
HTTP
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 67

HTTP
「何を」「どう」したいか
リクエスト-レスポンス型
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 68

「何を」
URL
http://<ホスト名>/[パス]...
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 69

「どう」
メソッド
GET
POST
...
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 70

Sinatra
get "/" do
# http://host.name/ の処理
end
post "/new"
# フォーム等の /new の処理
end
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 71

リクエスト-レスポンス型
いわゆるクラサバ
サーバーがレスポンスを返したら
一区切り
基本的に状態を保存しない
セッションやDBなどを使えば可能
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 72

JavaScript
プログラミング言語
何でもできる
マルチメディアな使い方も
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 73

結論
やっぱり
適材適所
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Page: 74

おわりに
Sinatra楽しいょ!
ゲームやGUIも楽しいょ!
組み合わせても○
ゲームのデータやハイスコアをWebで
管理するとか
コミュニティでチーム開発?
ゲーム vs. Sinatra
Powered by Rabbit 2.1.4

Other slides