Levando sua aplicação a outro nível usando bigdoor e outras gems de gamificação @caffo rails-br Tópicos 1. Gamificação? 2. No mundo real 3. Em aplicações web 4. Utilizando Ruby 'When you play a game of thrones you win or you die. There is no middle ground.' George R.R. Martin 'When you play a game of rubies you win or you die. There is no middle ground.' Caffo akita em busca do ruby gigante 1 -- press start -- Manual do Jogo Tópicos 1. Gamificação? 2. No mundo real 3. Em aplicações web 4. Utilizando Ruby Tópicos 1. Gamificação? 2. No mundo real 3. Em aplicações web 4. Utilizando Ruby Tópicos 1. Gamificação? 2. No mundo real 3. Em aplicações web 4. Utilizando Ruby Tópicos 1. Gamificação? 2. No mundo real 3. Em aplicações web 4. Utilizando Ruby Hora da Porta!!!1 1 2 ??? 3 :( self.happy=false Tatuagem grátis! “Eu quero ajudar o @akita a encontrar o ruby gigante no final da palestra do @caffo na #rubyconfbr” @caffo + #rubyconfbr :) self.happy=true Testes passaram! recompensa pela AJUDA w00t ou ou 2x Gamificação? Gamificação? A aplicação de elementos de jogos e game design para resolver problemas e aumentar o engajamento dos seus usuários. Na prática... Transformando a experiência do usuário em um jogo, podemos produzir grandes mudanças em como o usuário visualiza internamente a aplicação. No mundo real Hora da Porta!!!1 Programas de Milhagem Fidelidade no café Na Web Porque fazer algo do tipo? Quando executada corretamente, a gamificação amplifica a motivação dos seus usuários a continuarem usando seu produto. Funciona mesmo? Funciona. A gamificação ‘hackeia’ o seu cérebro. Hora da Porta!!!1 Em Ruby http://bigdoor.com/ BigDoor - Mecânicas ✓ Ranking de usuários ✓ Níveis (noob, pro, veterano, elite) ✓ Badges com ‘milestones' ✓ Goods (items de valor econômico) BigDoor - Prós • GPL, com suporte premium • Configuração de interações simplificada • API (em Ruby) ou JS • Vários relatórios prontos BigDoor - Contras • Gem com pouca documentação • Lógica fica distribuida • Dependencia externa BigDoor - Exemplo require 'rubygems' require 'bigdoor' APP_KEY = '28d3da80bf36fad415ab57b3130c6cb6' APP_SECRET = 'B66F956ED83AE218612CB0FBAC2EF01C' client = BigDoor::Client.new( APP_SECRET, APP_KEY ) currency = BigDoor::Currency.new({ 'pub_title' 'end_user_title' 'end_user_description' 'currency_type_id' 'currency_type_title' 'exchange_rate' 'relative_weight' }) currency.save( client ) => => => => => => => 'Moedas', 'Moeda', 'compradas com XP', '1', 'Purchase', 100.00, 2, Hora da Porta!!!1 UserInfuser http://code.google.com/p/userinfuser UserInfuser - Mecânicas ✓ Sistema básico de pontuação ✓ Ranking de usuários ✓ Badges com ‘milestones’ UserInfuser - Prós • Sua própria cópia da plataforma • Configuração de interações simplificada • Documentação relativamente boa UserInfuser - Contras • UI baseada em Widgets • Plataforma não pode ser customizada usando Ruby • Dependência externa • Fragmentacão da base de código UserInfuser - Widgets UserInfuser - Exemplo require 'rubygems' require 'userinfuser' ui = UserInfuser.new("[email protected]", "123-456-789") ui.award_badge(current_user_email, "assistiu-palestra-caffo") ui.award_points(current_user_email, 10) # Mostra o widget de pontos points_widget = ui.get_widget(current_user_email, "points", 100, 100) puts points_widget # Mostra o widget de ranking rank_widget = ui.get_widget(current_user_email, "rank", 100, 100) puts rank_widget # Mostra o widget de badges (trophys no userinfuser) trophy_case_widget = ui.get_widget(current_user_email, "trophy_case") puts trophy_case_widget Hora da Porta!!!1 Badgeable https://github.com/scottburton11/Badgeable Badgeable - Mecânicas ✓ Sistema básico de pontuação ✓ Badges ✓ O que voce quiser Badgeable - Prós • Muito simples • Nenhuma dependência externa • Extremamente customizável Badgeable - Contras • Muito simples • Compatível apenas com Mongoid and ActiveRecord • Extremamente customizável Badgeable - Exemplo require 'rubygems' require 'badgeable' require 'mongoid' class Person include Mongoid::Document include Badgeable::Subject embeds_many :nachos end badge "Nacho Nacho Man" do thing Nacho count 40 subject :person conditions do |nacho| nacho.spicy? end end # Ou ainda jose = Person.create(:name => "Jose da Silva") jose.award_badge("Total Badass") FINAL Hora da Porta!!!1 Obrigado! (^o^)b