Sunday, November 27, 2011

[off-topic] Belo Monte


existem dois vídeos circulando sobre Belo Monte:

um contra, do movimento gota d'água que é altamente divulgado por ter vários artistas globais:

http://www.youtube.com/watch?feature=player_embedded&v=TWWwfL66MPs

e outro com números que tentam mostrar que existem problemas bem maiores e que as alternativas para geração de energia não são viáveis.

http://www.youtube.com/watch?feature=player_embedded&v=JhYd48tQav4

Não sei o que vocês acham de tudo isso. Mas penso o seguinte: o assunto é demasiado complexo para que as pessoas no geral entendam suficientemente sobre a coisa a ponto de poder decidir o que deve ser feito ou não. Tomar partido nesse debate como fazem os atores da Globo é, no mínimo, irresponsável.

Enfim, é uma daquelas coisas em que você tem que se lembrar em quem você votou. A gente gosta de dizer que vive em uma democracia quando, na verdade, a forma de governo é uma república democrática. Ou seja nós, o povo, não dirigimos o país. Cabe a nós somente a escolha de quem dirige. A única escolha efetiva é o voto.

Quem tá lá em Brasilia, por que você escolheu, é quem vai tomar a decisão. E aí confiar que é uma pessoa de bem e tem assessores extremamente competentes e preparados para dar a informação correta e esperar que seu candidato tome a decisão mais acertada. Resumindo, lembre-se que você viu e reviu o horário eleitoral várias vezes, estudou minuciosamente os candidatos em que você votou (quem ele é, o que ele fez em mandatos passados) e sabe que fez a coisa certa.

Ah, você não faz nada disso? Então fica aí a dica...

Tuesday, October 25, 2011

Teste para game developer

Pessoal,

estou refazendo o teste para desenvolvedores de games da Manifesto e por isso, resolvi publicar o antigo. O teste funciona da seguinte maneira:

  1. Marco a entrevista e falo para o candidato ir preparado para pelo menos 1h, provavelmente mais de 2h, de entrevista e teste
  2. Entrevista rápida, nos moldes de templates do gamasutra, como: http://www.gamecareerguide.com/features/739/game_job_interview_questions_and_.php . Essa parte deve continuar mais ou menos como tá no link e como era antes, não faz muito sentido mudar. E aí é seguir os conselhos diversos que existem por aí tanto na formatação de currículo quanto nas respostas das entrevistas. Uma coisa importantíssimas é: se for fazer entrevista, na Manifesto inclusive, trate de aprender bem o que fazemos! Quem somos, com o que trabalhamos, o que fazemos ultimamente, tudo isso pode ser encontrado aqui, no sem cassis, e no blog da manifesto.
  3. A entrevista tem 3 partes. De acordo com o tempo que o candidato vai respondendo as outras partes são reveladas. Se o candidato fizer duas partes, tá no páreo. Se fizer as três bem, tá contratado. Essa dinâmica deve persistir, mudaremos mais o foco das perguntas um pouco. A primeira parte, chamada de estágio, é obrigatória para qualquer programador que queira ser levado a sério. A segunda deve ser respondida por alguém com um pouco de experiência em sistemas interativos. A terceira normalmente só o pessoal que já trabalhou com jogos ou os muito experientes.
  4. Não existem respostas certas ou erradas. O contexto normalmente produz respostas bem diferentes então faz sentido perguntar se o código deve ser otimizado, modularizado, para plataformas com restrições memória (como celular), se será multi-plataforma, etc... A linguagem nunca foi obrigatória, o candidato pode escolher qualquer uma (exceto as perguntas específicas).

Abaixo as perguntas, boa lida.

Game e Test Developers (estágio)

1. Escreva um programa, em qualquer linguagem, que escreve números de 1 a 100. Mas para múltiplos de três, escreve "Fizz" ao invés do número e para múltiplos de cinco escreve "Buzz". Para números que são múltiplos de três e cinco, escreve "FizzBuzz".

2. Implemente um método que retorna um booleano indicando se o parâmetro recebido é um palíndromo.

Um palíndromo é uma string que pode ser lida da esquerda para a direita como da direita para a esquerda. Por exemplo, "abcba" é um palíndromo, "abab" não é. 

3. O que você entende por arquitetura em camadas e como você organizaria, se possível utilizando UML, as classes de um jogo como o breakout. Indique em que camada ficaria cada classe.


Game e Test Developers (júnior)
1.  Imagine que você está implementando um sistema de combates. A regra de combate é dada abaixo:

5% de chance de errar o ataque 10% de chance do oponente desviar o ataque, 5% de chance do oponente bloquear o atack, 12% de acertar um crítico e o restante de acertar.

Como você faria essa implementação para maximizar performance? (descreva em palavras usando código se achar conveniente)

2. Como funciona uma tabela Hash? Dê um exemplo desenhando a seqüência de tabelas Hash obtidas numa tabela de tamanho 13, cuja função hash é dada por H(chave) = chave mod 13, e colisões são resolvidas usando listas, pela inserção das chaves: 52, 78, 48, 61, 81, 120, 79, 121, 92.

3. Em que sentido o FPS impacta na simulação de física, comente os problemas na colisão.


4. Qual a diferença entre um loop frame-based e time-based e quais os impactos (prós e contras) na escolha de um deles.

When we say frame based the code and/or animation is dependent solely on how fast the FPS was set to, with a steady code, reducing the FPS rate will slow down the game and increasing it will hasten it. Time based coding can manage this quite well since everything can be dependent on time so frame rate doesn’t affect it that much.

5. Que problemas de encapsulamento que dificultariam um refactoring no código abaixo:


/**
* From time to time party satisfaction must be calculated
* and the apropriate ajustment made to maintain the desired 
* satisfation value
*/
if(mTimeSinceLastGuest >= mTimeForNextGuest)
{
// reset timer every time the guest number is reviewed
mTimeSinceLastGuest = 0;
mTimeForNextGuest = 15;
if (mGuestManager->isPartyEmpty())
{
// not enough people in the party (didn't met the minimum number of guests)
    mGuestManager->addGuest();
}
}
else
{
mTimeSinceLastGuest += dt;
}

Game e Test Developers (sênior)
1. Explique por que uma pilha é a maneira mais usual de implementar o fluxo de telas em um jogo.


Representação Exemplo de uma pilha

A stack is a last in, first out(LIFO) abstract data type and data structure. A stack can have any abstract data type as an element, but is characterized by only two fundamental operations, the push and the pop. The push operation adds to the top of the list, hiding any items already on the stack, or initializing the stack if it is empty. The pop operation removes an item from the top of the list, and returns this value to the caller. A pop either reveals previously concealed items, or results in an empty list.

2. Qual a melhor maneira de representar uma estrutura de levels de um jogo. Assuma que cada level pode ser: um conjunto de levels (sublevels) ou um level jogável. Explique também como seria a melhor maneira de saber qual o level atual e o próximo a ser jogado.

3. Escreva um código, em qualquer linguagem, para imprimir os nomes dos irmãos e primos de um nó em uma árvore AVL binária balanceada.


Exemplo de árvore AVL balanceada.

Árvore AVL (ou árvore balanceada pela altura) é uma árvore de busca binária auto-balanceada. Uma árvore AVL é dita balanceada quando, para cada nó da árvore, a diferença entre as alturas das suas sub-árvores (direita e esquerda) não é maior do que um. 

4. Descreva, de preferência em UML com pouco código auxiliar, a implementação de um mapa de tiles simples e qual a melhor maneira de fazer a câmera (com zoom e scrool).

5. Em que situações um trecho de código deve ser repassado a uma linguagem de script, como Lua, e não em código baixo nível como C++? DÊ exemplos.

6. [C++]

Quais dessas linhas, comentadas com números, são construções legais em C++ e qual o resultado de cada uma delas:

int arr[10] = {};
int* p0 = arr + 1; // 1
int* p1 = arr + 10; // 2
int* p2 = arr + 11; // 3
int v0 = arr[11]; // 4

int arr2[5];
int* p3 = arr2 + 2;
int diff = p0 - p3; // 5
float* fp = reinterpret_cast<float*>(p0); // 6

int i = 42;
int j = i++ + ++i; // 7

7. [C++]

Você conhece a biblioteca C++ boost? O que você poderia falar sobre smart_pointers ?

Wednesday, September 28, 2011

Comparação de Engines

Hoje me pediram para fazer uma lista de tecnologias de jogos que alunos tinham que aprender. Dei essa resposta. Concordam?

Unity 3D
Principal engine hoje no mercado. Tomou todo o espaço que antes era da Torque (da garagagames.com que fechou as portas). Tem um modelo de negócio muito interessante pois usa o modelo de receitas normal de licença mas também possui uma App Store. Na App Store é possível comprar módulos para incremetar a engine mas também modelos, levels, textures, sprites, etc. Tem um fórum bem ativo e uma documentação vasta apesar de ser um pouco deficiente.

É mais voltado para jogos 3D, mas com as extensões já existente faz o papel de uma engine 2D numa boa.

Se a idéia é um jogo multi-plataforma a Unity é a única que faz um trabalho decente para ter o jogo, com mais ou menos o mesmo código, em Mac, PC, Web, iPhone e Android.

Utiliza Javascript como principal linguagem de Script mas também pode ser programada em C# ou um dialeto de Python chamado Boo. Usa a plataforma Mono como plataforma de execução.

Para jogos Mobile também é uma das melhores opções pois as demais engines (como a Ansca Corona, que é bastante popular) não da suporte a chamadas nativas no iOS o que dificulta (em alguns casos impossibilita) a comunicação com API como o Openfeint ou da Flurry que são essenciais para transações in game (maior fonte de receita atualmente desses jogos).

Flash
É ainda a principal ferramenta para jogos Web. A grande maioria dos jogos de Facebook são feitos em Flash. Tem a curva de aprendizado menor de todas e também pode ser usada para criar versões PC, Mac com bastante facilidade. A principal facilidade é a integração entre os assets de arte que é bem mais fácil que nas outras engines (como a Unity).

O grande problema do Flash ainda é a performance. Com pouquíssimas otimização de hardware (não usa a placa de vídeo direito e se for Flash 9 ou menos, não usa de jeito nenhum) fazer um jogo em Flash que rode em FPS decente (acima de 15 pelo menos) requer uma experiência legal e a curva de aprendizado é longa.

Se a idéia é um jogo Web ou Desktop, é uma boa pedida. Principalmente usando Wrappers como o Zync que gera os executáveis para qualquer lugar. Se for um jogo 2D é a melhor opção (com renderização simples: lógica e rede podem ser intensos).

Unreal
É a principal engine AAA do mercado. A maioria dos grandes jogos para Console usam, principalmente os FPS. Antes tinha uma licença impossível para qualquer desenvolvedor Indie (centenas de milhares de dólares) mas agora possui uma versão student e versões mais simples dado a concorrência de coisas como a Unity. É possivelmente a melhor opção para um jogo AAA para quem nunca fez um.

A curva de aprendizado, como era esperado, é imensa. É totalmente não recomendado para qualquer projeto que não seja realmente uma coisa profissional de vários anos de desenvolvimento. Usar num jogo casual é como matar uma barata com uma bomba atômica. Apesar de funcionar, aprender a fazer uma bomba atômica é bronca.


XNA
Não é uma engine mas sim uma plataforma de desenvolvimento da MS. É interessante como possibilidade de treinamento e usada em todos os jogos indies para Xbox 360. É muito interessante também pois possibilita o uso do Kinect (é possível testar no PC).

Existe também a possibilidade de fazer para Windows nos Mobiles e nas Tablets. Para apostar nesse caso o ideal é já baixar o Developer Preview do Windows 8 e mandar bala já nele. Ainda não se sabe o que se esperar desse mercado, mas muita gente tá apostanto bastante.

Wednesday, September 14, 2011

jogos e a agenda digital do governo



a agenda digital que o governo começa a montar prevê banda larga pra muita gente, principalmente para as escolas. banda larga somente não é o suficiente, é necessário também conteúdo de interesse nacional para que essa banda seja usada da melhor maneira.

jogo, como ferramente de educação, é um dos conteúdos que o governo pretende ajudar a distribuir. veja: 

da matéria, "A desoneração do IPI para uma quantidade tão grande de consoles vai exigir contrapartidas dos principais fornecedores. Os fabricantes Microsoft, Sony e Nintendo teriam pedido a redução do imposto, que tem alíquota de 50% sobre o valor dos aparelhos. As três empresas dominam esse mercado e, segundo Görgen, fazem uma espécie de barreira de entrada aos desenvolvedores nacionais. Por isso, serão definidas contrapartidas. Uma das medidas em estudo trata do estímulo à instalação de laboratórios dessas multinacionais no Brasil."

a medida "instalação de laboratórios" é boa? como isso vai ajudar a fomentar uma indústria nacional? uma boa contra partida para o mercado, dos desenvolvedores (e espero que a ABRAGAMES esteja engajada nisso para fornecer boas alternativas) é forçar que a localização e o QA desses jogos sejam feitos por aqui.

A localização de um jogo é de extrema necessidade para que o mesmo não só tenha todos os textos traduzidos para a língua local mas também adaptado a cultura local. Muitas vezes um desenvolvedor estrangeiro insere no jogo elementos que não serão bem recebido em outras culturas. É muito comum jogos com elementos religiosos terem sua arte modificada para se adequar ao mercado de países orientais por exemplo. 

O jogo Fruits Inc, da Manifesto, teve alguns elementos "não-green" como inseticidas em fazendas que foram bem recebidos por certos públicos e criticados em outros.

Para a empresa que faz a localização os benefícios são diversos. Além do ganho financeiro, por fazer o serviço em si, muitas vezes a empresa terá acesso ao código-fonte de programação e arte para fazer as modificações possibilitante o aprendizado. 

Existe também a possibilidade para as empresas que fizerem os serviços com sucesso e profissionalismo de criar reputação com os principais publicadores internacionais e daí partir para parcerias mais lucrativas e duradouras para criação de partes de jogos, como o outsourcing de arte e programação bem comuns no meio, como de jogos inteiros totalmente produzidos no país.

Por fim, torcer pra que a coisa seja levada a séria, não só pelos políticos. nós desenvolvedores e gamers precisamos fazer a nossa parte. evitando coisas como:

the strange case of the casual gamer - part 2


our last [first] post in this series ends like this:

Casual gamer, as any audience, brings expectations and experiences. Which experiences they bring? What can we assume they already know? Who are they and what should we know about them to properly create a game that adresses their needs?

A good game teaches skills with high perceived value for the player. That is the subject of the next post in the series...

so, now it's time for the second post. the one that talks about the perceived value for the player... our post, just like this other one, is based on Nick Fortugno article. so the casual gamers we are talking about, at least for now, are the ones that plays casual downloadable games from internet portals. Who are they?

Basically moms. Moms that like to read Stephen King, for instance. And that is why you see lots of terror themed, hidden object, games in top 10 lists of portals. Couldn't be further from the the typical male teenager or young adult hardcore player that buys console games... to illustrate that Nick says that
Most hardcore gamers have dedicated hardware to fulfill their needs. From the last post we learned that the audience brings experiences and expectations. An interface full of commands and complicated controls using a specific controller or even a keyboard are ok for a hardcore gamer. For AAA developers that is also a problem. we are not talking about experience only, they come with expectations too. See the hardcore gamer in the previous image? He has all that dedicated hardware and he expects that the game supports it(special controls, multiple monitors, addon creation, ...) !

On the other hand, our hands, casual gamers came to games first as internet users. They did not, still don't, think about computer as a game-playing device as much as a web-surfing device.
AJ Kelton makes a nice list of things Nick says about the experience and expectations that comes with casual gamers. One of the things that I see as very important, and exemplifies perfectly what we are trying to state, and Kelton don't talk about it is the left button rule. The left button rule states that the only input allowed is the mouse and only moving it and clicking with the left button.

As Nick says, "One clear point is that casual gamers came to games first as internet users [...] the dominance of the left mouse button is unsurprising given the way that casual gamers were first exposed to games". 

Surfing the web doesn't require anything other than clicking the left button of the mouse! Casual games have evolved a lot from their first hits with more strategy, new genres and even going social massive multiplayer. But, the left button rule stand strong after 10+ years...

This leads us to one of Nick's conclusions: "Casual games appeal to all kinds of players, particularly non-gamers, which creates a set of particular concerns and constraints that influence the design of these games". So: mechanics must be intuitive, interfaces must be clear and achievements is prized over struggle. 

After these whole text what do you think is of high perceived value for casual gamers. Comments?

Since Nick's article in 2008, these so-called casual games evolved and gone multiplatform. They are now all over facebook, with social games, and cell phones in mobile games for iPhone and Android (not to mention in tables like the iPad). That is the subject of the next post... games as services.

Saturday, September 3, 2011

the strange case of the casual gamer

based on the #EE_Cin series of articles that are basically powerpoint slides commented, i've decided to comment some of the presentations I give every now and then...

i will start with the strage case of the casual gamer that talks how the market starts and who are these so called casual gamers. with mobile and social games the term casual is much broader now and pretty much everybody is a casual gamer. casual games were a very narrow niche that become mainstream... how that happened? i'll try to explain in this series of posts.
the presentation is based on a text by Nick Fortugno, former lead game designer of Playfirst (Diner Dash). the text is a chapter in the book Game Usability: Advancing the player experience.

Diner Dash is one of the few games that got 5 stars in Gamezebo, the single most important critic site of casual games. So, Nick is someone to be listened, or read in this case...

So, to start: What do we need to know about casual gamers to make a good casual game?
A good game should be intuitive to be easy to learn, challenging enough to make the player feels he is learning new things all the time and utimately fun so it can be called a game.

How can we do that?

Most studies about fun in games will relate these concepts. The most important thing is the right amount of challenge. If the challenge is too low, the player won't learn anything new and feels bored. If the challenge is too high he won't be able to perform the task and learn something in the process. The right amount of challenge will invariably lead the player to the flow channel.

Daniel Cook in his article The chemistry of game design in gamasutra creates a model in which "The player is entity that is driven, consciously or subconsciously, to learn new skills high in perceived value. They gain pleasure from successfully acquiring skills."

In summary, Daniel Cooks says, what we already said with different words, that for our game piece to be intuitive, easy and fun it should constantly teach new skills so he can gain pleasure from that activity. To design such a game Cook creates the concept of Skill Atom. A skill atom is diagramed as the following image:
Every time the player makes an action the computer then simulates the impacts of that action in the environment then gives somekind of feedback to the user. After the feedback the model of the game inside the player's head is update to incorporate some new skill. The following image is an example of a real skill atom from the jumping action in Mario games.



The full skill chain for Tetris can be found here.

So, according to Daniel Cook the assumption we make about which skills the gamer already mastered, or partially mastered, before playing our game for the first time is a crucial decision.

Casual gamer as any audience, brings expectations and experiences. So, which are these experiences from casual gamers? What can we assume they already know? Who are they and what we should know about them to properly create a game that adresses their needs?

A good game teaches skills with high perceived value for the player. That is the subject of the next post in the series...

Thursday, September 1, 2011

being a game designer...

i've been reading, once again, the book Rules of Play by Katie Salen and Eric Zimmerman. It's a good book, recommended to anyone aspiring to be a game designer.

the second chapter is called The Design Process, which is iterative (the process, not the chapter). according to the authors, and i agree: "designers learn best trough the process of design, by directly experiencing the things they make".

the sentence ultimately means that the single most important task a game designer has during the process of creating a game is PLAYING the game he is creating. that lead us to a question a ask anyone that comes for a game designer job interview: How much do you play?

a decent game designer can't play less then four hours a day. why? during the process of making a game, the game designer will be playing the game over and over again for hours troughout months of development, most of this time the game will be an unbalanced, ugly and full of bugs piece of crap.

the funny thing is that, at least in my experience, three quarters of the people postulating a game design position can't even say the last game they played.


so, if you want to be a game designer start playing. play the same game over and over again. pay attention to every single detail. know what is right and what is wrong about the game. learn what makes it a good game and what makes it a sucessful game. then, when you go to an interview you can tell everything about it and make sure the person who is interviewing you gets you are simply passionate about what you are talking about...

Sunday, August 28, 2011

[off-topic] o problema da única história.

quem já teve a oportunidade de ir, a trabalho, conversar com americanos, europeus e/ou asiáticos ouve coisas que faz você se identificar muito com essa história... se você não é de SP/Rio então, nem se fala. uma das melhores conversas/apresentações que já vi do TED.






mesmo com tanta coisa vindo de todo lugar do mundo, quando falamos de economia criativa - como os jogos que fazemos na manifesto ou a OjE na joy - americanos e europeus ainda se impressionam como no Brasil se faz esse tipo de coisa. aparentemente estamos bem a frente dos africanos nesse sentido, em  percepção do primeiro mundo com relação a nós no terceiro.

em 2010, quando anda tinhamos os AAA premium games como carro chefe do mercado, eramos somente 0,5% do todo em jogos, e o méxico por exemplo 2% com os impostos levando a culpa desde sempre.

nosso mercado que consome cada vez mais. já é 165mi, e deve dobrar. fruto da mudança no modelo de negócios para o freemium de mobile e facebook.

isso tem feito os mesmo saberem cada vez mais sobre nós. mas como mercado consumidor, não como produtor. é impressionante a quantidade de pessoas que se espantam por que é mais fácil conversar comigo (e a grande maioria dos brasileiros) em inglês do que em espanhol...


Chimamanda é escritora, nigeriana, e da pra saber muito mais sobre ela no wikipedia.


E se você não sabe o que é TED, deveria saber. internet e tecnologia não serve só pra tá no facebook não... TED é para compartilhar idéis que melhoram o mundo, veja algumas: http://www.ted.com/conversations

lá tem idéias para responder perguntas de todos os tipos como:

Como melhorar a educação?
Como diminuir o desperdício de água?
Como a linguagem transformou a humanidade?
Estamos filtrando os micróbios corretos?

Enfim, todo tipo de pergunta...

esse post foi originado de um post no Update Or Die, outro lugar muito interessante de se ver. esse nacional, passe lá também, tem de tudo: http://www.updateordie.com

Tuesday, August 23, 2011

Educação Empreendedora Prova 1

this post is in portuguese, sorry for the english readers... if we have any at all.

ontem, segunda-feira 22 de agosto, foi a primeira prova da cadeira de Educação Empreendedora que pago no Cin com @srlm e @teco_sodre

a prova foi sobre os 6 primeiros textos da série de 24 textos no blog de silvio...

vai abaixo os bullets points dos textos e links.



  • Toda boa empresa é uma boa escola: pelo menos uma vez por semana, se perguntar o que aprendeu nos últimos 7, 14, 21 dias. Se, vez após vez, a resposta for muito pouco, é hora de procurar algum lugar que esteja construindo o futuro.
  • A aprendizagem passa por, na verdade, fazer as perguntas certas. Na economia do conhecimento todo negócio provê oportunidades de aprendizado.
  • Se a economia é do conhecimento, todos os negócios, públicos e privados, são ou estão centrados em educação.
  • Educação é a prioridade das prioridades e o passo seguinte para o fim da miséria. [declaração de Dilma e Obama no State of the Union Speech]
  • Educação + Oportunidade = Esperança
  • PROBLEMAS: P&D equivale a 1,1% do PIB, média de 2,3% da OCDE (Organização para Cooperação e Desenvolvimento Econômico); Sérias carências na qualificação de recursos humanos das áreas de C&T; pouca produção de patentes (0,3 patentes triádicas por milhão de habitantes em 2008); reduzido percentual de empresas efetuando inovação em produtos.
  • O estado é omisso na inovação quando não "sai da frente". 37% de taxa de agregação fiscal. O Estado arrecada havendo lucro ou não! O que se exige da empresa é algo ilógico: que corra todo o risco e o Estado fique com a arrecadação.
  • Se a empresa não está envolvida no processo de inovação gera empregos de pouca qualificação.
  • Imitação Criativa - Lin Su Kim:Da imitação à inovação. Toda imitação é criativa, pois não repete os erros já cometidos.
  • Inovação é um risco que o Estado deve correr junto ao empreendedor, pois ganha na arrecadação e ao prover a sociedade acesso ao produto.
  • Qual o papel das políticas públicas e seus agentes na criação de oportunidades? Ou seja, o papel na construção de uma população empreendedora preparada para as oportunidades que apareçam ou que sejam criadas pelas políticas: educar gente, criar oportunidades e sair da frente!
  • Educação: escala dos projetos-piloto, ensino fundamental eficaz, minimamente coerente. Os problemas são de software, não de hardware. Conteúdo, métodos, professores e não infraestrutura, salas, giz.
  • Oportunidade: criar oportunidades de DESENVOLVIMENTO pessoal, social, empreendedor e econômico. Olhando para o futuro assim como dando conta das demandas complexas do presente e compensando o passado.
  • Complexidade: CEOs no mundo toda acham que as coisas serão complicadas daqui pra frente. Mais do que já são e poucos se consideram preparados.
  • As empresas possuem MUITO MAIS DADOS sobre os clientes, mas acreditam que a INFORMAÇÃO sobre eles é PIOR.
  • Sair da frente: facilitar a vida, evitar a informatização do caos.
  • Feito isso, teremos um ambiente propício para a criação, sustentação e evolução de novos negócios inovadores de crescimento empreendedor. Que tipo de negócio está esse?
  • Crescimento empreendedor em um mercado que cresce x% ao ano é cresce 5x, 10x ao ano.
  • O cenário para qualquer tipo de empreendimento é o mercado. CENÁRIO = MERCADO!
  • Cluetrain: 95 teses sobre como é (seria em 1999) o mercado do mundo em rede.
  • Mercado = conversações entre pessoas conduzidas por uma voz humana. Nos tempos atuais estamos falando de pessoas digitais, conectadas em contextos digitais.
  • Neeleman's 3. Negócio: colaboradores satisfeitos, excelência no atendimento, clientes satisfeitos. Em resumo, um negócio é a relação entre clientes e colaboradores mediados pelo atendimento. Quão bem seus colaborares estão para atender certo cliente.
  • Na economia do conhecimento, um BOM NEGÓCIO é uma comunidade com um propósito, e não uma propriedade qualquer.
  • A complexidade da demanda dos clientes deve ser atendida por performance simples.
  • Ou seja, comunidades precisam de soluções simples para problemas complexos. Precisam de um propósito comum. O atendimento ao cliente só é satisfatório em startups.
  • Startup = trabalho e pessoas. Times coesos resolvendo problemas. Startup como cultura de trabalho na empresa.
  • A criação de um negócio depende, em última instância, de um EMPREENDEDOR. Nada, nem políticas públicas de incentivo, são capazes de criar negócios inovadores de crescimento empreendedor sem esse CARA.
  • O empreendedor por trás do negócio deve ser capaz de: montar um time vencedor! Liderar, no sentido de criar redes de entendimento e propósito, de integridade e confiança, de determinação, dedicação e capacidade de execução.
  • O empreendedor também deve ser capaz de criar um produto ou serviço. [7].


Tuesday, July 26, 2011

Knowledge Representation in Games

Motivated by an assignment (~in1122 class) I started to create a system that could take several game session logs and analyze them to find non-trivial relevant information.


What is non-trivial, relevant information in a game session? In a previous post of my blog, fat client architecture, I tell a little story that motivates this kind of analysis.

Knowledge representation and reasoning has always been a field marked by the dispute among practitioners if representation and reasoning should be put together or not. I won’t get into much detail about this, but for my work they are treated as distinct parts.

First, in this post we will explore the knowledge representation part or, in other worlds: How I use the Game Ontology Project to describe game sessions.

Second part, the automated reasoning part, is creating a production system, using Drools Expert, to analyze a game session output and recognize common game hacks. And that is the subject of another post in the near future.

GOP, or Game Ontology Project, is “a framework for describing, analyzing and studying games”. The framework consists of a “… a game ontology that identifies the important structural elements of games and the relationships between them, organizing them hierarchically”.
Initially the top level of the ontology consisted of five elements: interface, rules, goals, entities and entity manipulation. However, according to the Wiki “… [They] considered another top-level called “Entities”… However, we haven’t had the time or the need to actually explore it and see what sorts of entries we’d need to define.”
I am not very sure about this need in my work. For the reasoning a definitely needs the definition in code but in a conceptual level I am still not sure. But, since we are mostly concerned in representing a game session most of our work is developed using the Entity Manipulation branch of the ontology.

Entity manipulation consists of altering the attributes or abilities of an entity in the game world
Some of the classes that inherit from Entity Manipulation are:
·        To Collide
·        To Create
·        To Move
·        To Customize
The GOP Wiki is full of examples (strong and weak) that represent each concept. To Collide has a strong example in the game Pac-Man.
“In Pac-man, Pac-man can collide with ghosts. In his normal state, this will remove Pac-man. If he has recently eaten a super pellet, this will remove the ghost.”
A typical Pac-man game session would be described with a log that resembles the following:
·        ToMove(Pacman, left)
·        ToRemove(Point00), where Point00 represents one of the points that the Pac-man can eat.
·        ToMove(Pacman, up)
·        ToColide(Pacman, Pinky)
·        ToRemove(Pacman)
So, we move Pac-man to the left, eat a point (the others were probably eaten already), then we move the Pac-man up and the Pinky ghost gets us. Game Over!
The figure below shows screenshots of the game session that generated the mentioned output.

Figure 1: Game starts, player moves left then eats a point, moves up and finally hits a ghost.
Obviously some of these concepts need attributes to improve their expressiveness and consequently our analysis. For instance, suppose we want to check if the ToCollide is valid. How can we be sure that Pinky and the Player are in the same place?
ToCollide could also be inferred from previous actions such as ToMove from the Player and Pinky. Such rule would be modeled, in FOL, as something like:

For more sophisticated thing we feel the need to include a third element in ToCollide that represents time. So we can write rules like:
For an online game this should be mandatory. Since we handle a part of the computation to the client that is running in the player machine, it is possible to determine if the ToCollide is a valid statement or a possible cheat. The server holds all information it needs (game rules, setup of a level, etc…) to simulate server-side.
There are three important notes to be said about these rules. The first is that we are already mixing knowledge representation with reasoning here. However the rules presented are actually reasoning or a just a form of representation of our knowledge about the game rules? That is a complicated debate that is, again, out of the scope of my work.
The second is that, in a massive system with a few hundred thousand users doing an extensive analyzes of every game log is impractical. However, carefully choosing which logs, the ones with best performance for instance, is of great value not just for security but also for design.
Supose we have a game like Pacman in which the score formula makes it possible to, knowing the initial setup of the level, infer the biggest score possible and the shortest time in which the game can be completed. That would be a good filter to choose which Player should be audited.
The next post will translate some of this knowledge into the Drools Expert framework. The framework will enable us to integrate the reasoning process in a java server. We will also try to answer the question that’s in your head right now: Why would I use that instead of a ordinary procedural approach?

Tuesday, June 28, 2011

fat client architecture

imagine you are organizing a solitaire league with your friends. the rules are simple, each of of you gets a deck of cards with some initial setup and plays at home. after each session your friends call you and tells you if he was successful or not and the time it took for him to end the game. as the host you keep a ranking of the times. after one month of competition the friend which successfully completed the game in less time is the winner.

there is nothing wrong with this story, right? no, wrong! What if one of your friends just cheated and told you a imaginary time? you know your friends, what about Allan he would probably do that to take the prize. obviously you and your friends would want to see how each one have played to ensure the time is even possible not to say true.

the story sound odd, and it really is. but when you see facebook games, sites with flash games like miniclip and even MMOs like World of Warcraft ALL of them, no exception, does that in some degree! they hand to the player their client (a deck of cards), the player plays it for sometime and then tells the server what he just did. the server, most of the time, doesn't do more then just accept what the client said and update the game state.

what happens, in your solitaire league, if you doubt your friends time? a good way to ensure that would be to tape the game session and send it over for audition. that is what a serious of posts in this blog will talk about in the next few days. i am going to use an ontology called game ontology project to record game sessions and a production system named Drools Expert to audit it and make sure no one is cheating...

Thursday, May 12, 2011

Reasoning and Knowledge Representation in Games

Download PPT here.

This week I made a presentation about Reasoning and Knowledge Representation in Games for in1122 class. My class project is creating a reasoning module that based on some game ontology to describe play events can find if a player cheated the game and how.

This first presentation focus on state of the art work in this area, which is a very incipient area. The state of art is the basis for creating a new ontology (that has it's ground in the one presented) that will generate detailed logs of a play event which we can use to make inferences.

According to the W3C Ontology 101 document: One of the ways to determine the scope of the ontology is to sketch a list of questions that a knowledge base based on the ontoloy should be able to answer, competency questions.

These are mines

  1. Is there a flaw in the game design?
  2. Are players cheating? How? 
  3. Which is the most difficult part of the game? 
  4. Should I help the player? When? How?
  5. Do players learn? What? How?
For the project of this specific class I want to answer the first question only. This first presentation just creates the ground. As the project progress I'll post more info about it here.

    Saturday, April 30, 2011

    Balanceamento dinâmico de jogos massivos 3

    [1]   Andrade, G., Ramalho, G., Gomes,. A. & C., Corruble, V. (2006). Dynamic Game Balancing: An Evaluation of User Satisfaction. Second Annual Artificial Intelligence and Interactive Digital Entertainment Conference.  AIIDE '06. Stanford. The AAAI Press, 2006. p. 3-8.
    [2]   Andrade, G., Ramalho, G., Santana, H. &  Corruble, V. (2005). Challenge-Sensitive Action Selection: an Application to Game Balancing. In IEEE/WIC/ACM International Conference on Intelligent Agent Technology (IAT 2005). pp. 194-200. Compiègne: ACM/IEEE.
    [3]   Noah Falstein. The Flow Channel. Game Developer Magazine, May Issue, 2004
    [4]   Csikszentmihalyi, M. (1990). Flow: The Psychology of Optimal Experience. New York: Harper & Row, 1990.
    [5]   Sirlin, David. Balancing Multiplayer Competitive Games. In: Game Developers Conference, 2009, San Francisco, GDC Lecture Handout. San Francisco, Proceedings: GDC 2009.
    [6]   Malone, T.W. What makes computer games fun?  Byte, 1981, 6, 258-277 (Reprinted in Computers in Education (U.K.), 1982, 4, 14-21; and in D. Peterson (Ed.), Intelligent Schoolhouse. Reston, VA: Reston Publishing Co. (Prentice-Hall), 1984. Abbreviated version reprinted as: Guidelines for designing educational computer programs, Childhood Education, 1983, 59, 241-247.)
    [7]   Meira, Silvio. WoW: mais um monopólio a vista? Disponível em: http://blog.meira.com/2006/06/02/wow-mais-um-monopolio-a-vista/ Acesso em: 28 ago. 2010.
    [8]   Pierce, Shay. “Stickiness” in Games, or: Why you can’t beat WoW. Disponível em: http://www.gamasutra.com/blogs/ShayPierce/20100130/4271/quotStickinessquot_in_Games_or_Why_you_cant_beat_WoW.php Acesso em: 28 ago. 2010
    [9]   Pierce, Shay. Levels Vs. Stickiness, Or: How WoW Can Be Beaten. Disponível em: http://www.gamasutra.com/blogs/ShayPierce/20100201/4279/Levels_Vs_Stickiness_Or_How_WoW_Can_Be_Beaten.php Acesso em: 28 ago. 2010.
    [10] Spronck, P., I. Sprinkhuizen-Kuyper and E. Postma. 2004. “Online adaptation of Game Opponent AI with Dynamic Scripting.” International Journal of Intelligent Games and Simulation (eds. N.E. Gough and Q.H. Mehdi), Vol. 3, No. 1. University of Wolverhampton and EUROSIS, pp. 45-53.
    [11] Giel van Lankveld, Pieter Spronck, Jaap van den Herik, and Matthias Rauterberg (2010). Incongruity-Based Adaptive Game Balancing. Advances in Computer Games. 12th International Conference, ACG2009. (eds. H. Jaap van den Herik and Pieter Spronck), pp. 208-220. Springer-Verlag, Berlin Heidelberg, Germany. (Presented at the 12th Advances in Computer Games conference).
    [12] Togelius, J.,   Schmidhuber, J., IDSIA, Lugano. An Experinent in automatic game design. Computational Intelligence and Games, 2008. CIG '08. IEEE Symposium, pp 111 - 118
    [13] G. N. Yannakakis, and J. Hallam, "Entertainment Modeling in Physical Play through Physiology beyond Heart-Rate," in Proceedings of the Int. Conf. on Affective Computing and Intelligent Interaction, Lecture Notes in Computer Science, vol. 4738 Lisbon, pp. 256-267, Portugal, September, 2007. Springer-Verlag.
    [14] Yannakakis, G. N., and Hallam, J. 2007. Towards optimizing entertainment in computer games. Applied ArtificialIntelligence 21:933–971.