SBGames 2013, Post-mortem: Renato Degiovani (Tilt.net / Amazônia)

Não escrevi nada no blog a respeito do SBGames 2013… Embora tenha participado na organização local e apresentado minha pesquisa no Consórcio Doutoral, não consegui assistir muitas palestras e keynotes. Mas pelo menos vi o post-mortem, que valeu muito! Estou subindo os vídeos no Youtube e vou linka-los aqui conforme eles vão sendo disponibilizados.

O primeiro post-mortem foi do Renato Degiovani falando sobre o Amazônia (e um pouco do Angra-I):

Infelizmente a qualidade do vídeo (e do áudio) está ruim, pois filmei do meu celular, mas acho que dá pra ver e ouvir razoavelmente.
Por algum motivo (óbvio, eu acho), fiquei pensando se o Renato não seria o nosso Chris Crawford brasileiro…

Be Sociable, Share!

Bug na implementação OpenGL (GLKit framework) da Apple?

Durante o desenvolvimento de uma aplicação OpenGL ES 2.0 para iOS, me deparei com o seguinte erro ao carregar texturas (usando GLKTextureLoader):

Error Domain=GLKTextureLoaderErrorDomain Code=8 “The operation couldn’t be completed. (GLKTextureLoaderErrorDomain error 8.)” UserInfo=0x75a3990 {GLKTextureLoaderGLErrorKey=1280, GLKTextureLoaderErrorKey=OpenGLES Error.}

O estranho é que o erro ocorria apenas com a primeira textura. Analisando meu código, vi que estava chamando glEnable(GL_TEXTURE_2D); antes de carregar todas as texturas. No entanto, por usar OGLES2.0 (programmable pipeline), não preciso ativar o estado GL_TEXTURE_2D (http://www.opengl.org/wiki/GLSL_:_common_mistakes#Enable_Or_Not_To_Enable).

Assim, remover a chamada do glEnable(GL_TEXTURE_2D) resolveu o problema.

Mas uma coisa me chamou a atenção: o GLKTextureLoader aparentemente usa o último valor da flag de erro do OpenGL e parece não fazer uma checagem simples para ignorar erros que não estejam relacionados com sua função. Dessa forma, caso a última flag de erro do OpenGL seja diferente de GL_NO_ERROR (antes de carregar a textura), o parâmetro error do GLKTextureLoader é preenchido de forma errada (pelo menos na minha interpretação).

Um teste que realizei foi o de manter glEnable(GL_TEXTURE_2D) (gerando flag de erro) e chamar glGetError() antes do GLKTextureLoader. Resultado: a textura foi carregada corretamente.

Segue o método que escrevi para carregar a textura (assumindo que mTexture é um membro da classe, do tipo GLKTextureInfo).

- (void)loadTexture:(NSString *)filename
{
  // HACK: Clear GL error code before calling GLKTextureLoader, otherwise GLKTextureLoader will use the previous GL error...
  glGetError();

  NSError *error = nil;
  NSString *filePath = [[NSBundle mainBundle] pathForResource:[filename stringByDeletingPathExtension] ofType:[filename pathExtension]];
  mTexture = [GLKTextureLoader textureWithContentsOfFile:filePath options:nil error:&error];

  if (error)
  {
    NSLog(@"Error loading texture \"%@\" from image: %@", filename, error);
  }
  else
  {
    NSLog(@"loadTexture: %@\nname: %d\ntarget: %d (GL_TEXTURE_2D? %d)\nwidth: %d\nheight: %d\nalpha state: %d\ntexture origin: %d\ncontains mipmaps: %d\n",
      filename, mTexture.name, mTexture.target, mTexture.target==GL_TEXTURE_2D, mTexture.width, mTexture.height, mTexture.alphaState, mTexture.textureOrigin, mTexture.containsMipmaps);
  }
}
Be Sociable, Share!

Até mais, EA Brasil!

EA Brasil

EA Brasil

[Update 16/04/13: só adicionando um detalhe na seção "quantos foram demitidos".]

Acho que hoje (14/04/2013) não é mais novidade que a Electronic Arts demitiu os desenvolvedores do estúdio de São Paulo, além de cortar também equipes em Montreal e Londres.

Depois de ler notícias em sites especializados como UOL Jogos e G1 e os comentários nesses sites e no Facebook, decidi escrever esse texto para esclarecer algumas dúvidas, corrigir alguns comentários e contar um pouco mais sobre o que os desenvolvedores faziam em SP. Nunca postei esse tipo de informação na rede, mas lendo as notícias e comentários percebi o quão vago (ou até errado) são as informações e acho que tem gente que gostaria de saber um pouco mais sobre o estúdio.

É claro que, se você for perguntar sobre o trabalho para cada pessoa do estúdio, cada um terá uma resposta diferente, dado seu ponto de vista e posição na empresa. Logo, o que exponho aqui são minhas opiniões, sob meu ponto de vista. Isto é, quero deixar claro que o conteúdo aqui apresentado não é a visão da EA mas sim de um ex-funcionário da empresa. Deixo isso explícito pois sei como as informações são distorcidas no meio do caminho.

Vou começar com algumas perguntas e respostas rápidas e depois explico com um pouco mais de detalhes o que eu fiz por lá e alguns comentários pessoais.

Acabou a EA no Brasil?

“EA fecha estúdio no Brasil” dá a impressão que não existe mais EA no país. A empresa continua operando em marketing e vendas, mas não tem mais desenvolvimento.

Quantos foram demitidos?

Considero não somente a demissão geral de 11/04/2013 como contratos não-renovados alguns meses antes do ocorrido. Ao todo, 15 pessoas, entre programadores, gerentes e QAs. Alguns moram com os pais ou parentes, outros moram sozinhos e outros são casados (adicionei esse detalhe para refletir o impacto que isso causou nas pessoas da equipe e familiares).

O estúdio só fazia localização?

Não. É bizarro a quantidade de pessoas que afirmam isso. Já me falaram que “a EA não conta como developer no Brasil, porque só faz localização”. Em mais de 2 anos de empresa, eu nunca trabalhei com localização :).

O estúdio só fazia porting?

Também não. Sim, parte da equipe fazia porting, mas não era só isso, como irei mostrar mais pra frente.

O estúdio era só mobile?

Inicialmente sim, mas depois não (mais detalhes abaixo).

“We do it for you so you don’t have to”

OriginLogo

Acho que minha experiência na empresa foi um pouco diferente dos demais programadores, pois entrei na EA para iniciar uma área no Brasil chamada CTG (Central Technology Group) e trabalhar em conjunto com EALA (ao contrário de outras áreas daqui que trabalhavam com Montreal). Como o nome diz, as equipes de CTG são responsáveis pelas tecnologias usadas pelos diversos estúdios espalhados pelo mundo, existindo subdivisões dentro dessa área com times em diferentes países.

Um dos projetos que participei foi a criação do Origin versão iOS. Embora o Origin seja odiado pelo público gamer, foi uma experiência muito boa pois me permitiu trabalhar com excelentes engenheiros client-side e server-side, gerentes e diretores técnicos, e participar da criação de um SDK mobile desde o início, dos requerimentos iniciais à implementação e release. O projeto também me deu a oportunidade de ir até Los Angeles para trabalhar “face-to-face” com a equipe CTG de LA.

EALA

EALA

Além do Origin iOS, a equipe brasileira (inicialmente 3 SE, 1 QA) participou do desenvolvimento e suporte de soluções iOS e Android focando experiência do usuário, marketing e billing; API’s e SDK’s internos que estão presentes em todos os jogos mobile da empresa. Como jogador a gente nem percebe esse tipo de trabalho, mas para os game developers da empresa isto é outra história. Como era dito em alguns momentos, “we do it for you so you don’t have to.”

Ou seja, no Brasil não existia somente porting.

Not only mobile

FreeboxRR2

Com algumas mudanças internas, fui trabalhar em uma outra divisão com novas plataformas e nós aqui do Brasil (1 DM, 2 SE, 1 QA, 1 GD/QA) fizemos a conversão do Real Racing 2 para uma plataforma francesa chamada Freebox (o jogo foi lançado em 2012, junto com o The Sims Freeplay). Não conhecia a plataforma e achei bem legal, pois é praticamente um console – só funciona ligado numa TV ou monitor, é um sistema fechado e funciona com um gamepad. Batemos a cabeça em certos momentos, já que nossa expertise era mobile, e acabei aprendendo bastante com pessoas de fora que tinham experiência com desenvolvimento pra console. Legal também de poder dar feedback e sugestões de melhoria para a fabricante do aparelho.

Só é chato que, a menos que eu vá pra França, dificilmente verei o meu próprio trabalho no mercado…

Coisas que não posso falar

Ou os tais dos “unannounced titles”. O que posso dizer é que tinha coisa bacana sendo feita por aqui. Uma pena que acabou.

A pior empresa dos EUA?

Pelo menos na minha cabeça não entra essa idéia de uma empresa de jogos ser a pior empresa de um país. Bom, votação pela internet né…

E, aproveitando o tópico, vi muita gente falando que o fechamento era merecido, que a empresa é uma porcaria, odeio ela, etc, etc. É a mesma coisa que dizem sobre a Microsoft, mas assim como a Microsoft tem o lado ruim, podemos tentar ver o lado bom da empresa.

E o caso da EA não é diferente. Antes de mais nada, temos que lembrar que jogos são negócios e precisam gerar resultados para uma empresa. At the end of the day, it’s all about the money. Antes de você me xingar, digo que eu também tenho a visão ideal e “romântica” de desenvolvimento de jogos, onde o que mais importa é o trabalho criativo e tentar tocar as pessoas com o seu trabalho.

Mas vamos ser realistas, não é desse jeito que o mercado funciona. Alguns jogam de forma mais agressiva que outros, possuem culturas e políticas diferenciadas, mas no final, acaba sendo necessário analisar números. You have to play the game.

E repetindo: at the end of the day, it’s all about the money. Ou você aceitaria criar o seu jogo dos sonhos sem receber nada (financeiramente) por isso? Como você iria sobreviver nesse mundo capitalista?

Não, não é tão ruim assim

EA Montreal

EA Montreal

Eu não concordava com tudo que era feito na empresa, mas ao menos tive oportunidade de ver coisas muito boas. Pelo menos em desenvolvimento. Para quem é desenvolvedor e odeia a EA e nunca iria trabalhar pra ela, sugiro pensar de outra maneira. Porque o que a gente aprendeu lá não foi pouco, pelo contrário. Algumas coisas que posso citar:

- Trabalhar com pessoas do mundo inteiro e conhecer outras culturas. Trabalhei com pessoas originárias do Brasil, EUA, Canadá, Venezuela, África do Sul, Índia, Inglaterra, Irlanda, Itália, Espanha, Portugal, Romênia, Rússia, China e Coréia do Sul. Acho que não esqueci de nenhum outro país…

- Aprender com a experiência dos outros. Além do desenvolvimento com outros estúdios, o acesso ao código-fonte de jogos e API’s e uso de ferramentas e SDK’s pouco acessíveis a indies (dado o alto custo) permite você aprender bastante, seja questões de otimização, cross-platform, boas práticas ou padrões de implementação. Também tive a oportunidade de participar de treinamentos realizados em Montreal.

- Compartilhar informações. Existe o incentivo de você compartilhar informações entre os estúdios e, por causa disso, acabei aprendendo com o que as pessoas compartilhavam e também com o que escrevi compartilhando coisas que aprendi nos projetos (post-mortem, documentações técnicas, etc.)

- Dúvidas? Pergunte. Sempre tinha alguém pra responder sua dúvida, fosse internamente no estúdio do Brasil ou global. Não era raro a gente receber respostas do Paul Pedriana (há uma piada interna entre os programadores do Brasil que diz que o dia em que o Pedriana sair da empresa, aí sim será o fim).

- Trabalhar em projetos grandes. Permitiu entender a importância de uma boa organização tanto de pessoas como de estruturas de projeto, adotar processos de automação, verificar problemas encontrados no desenvolvimento multiplataforma e em paralelo com várias equipes, além de tomar decisões junto com produtores, gerentes e pessoas de marketing e vendas.

Listei alguns pontos para mostrar que existem, sim, pontos positivos e que pra mim foram muito importantes. Na verdade, pra mim toda experiência é válida, desde trabalhar em um jogo indie ou um advergame até trabalhar em uma empresa que desenvolve triple-A.

Até mais!

Realmente foi uma pena ter acabado por aqui. Como disse um dos ex-programadores do estúdio, quem sofre com isso é a nossa (pequena) indústria e os profissionais, tanto os que foram demitidos quanto os que agora têm uma empresa a menos para trabalhar.

Sou muito grato à todos da EA, aos que acreditaram em mim e me deram essas oportunidades e aos meus colegas de trabalho que me aguentaram durante esse tempo.

Desejo muita sorte à todos e espero trabalhar com vocês novamente!

Minha mesa aqui no Brasil, deixará saudades...

Minha mesa aqui no Brasil, deixará saudades…

(Free) DLC

Para meus amigos da EA:

Be Sociable, Share!

Engine: como pronunciar?

Uma coisa que falo pros meus alunos é que eu não sou O senhor inglês (nem português), mas que é sempre bom sabermos pronunciar corretamente os termos que são comuns na nossa área, principalmente porque “pega mal” falar errado (certa vez, uma pessoa me falou que o conteúdo de uma palestra foi por água abaixo quando o palestrante ficou falando o termo “pixeis”).

Existem algumas palavras que me incomodam mais que outras, e “engine” é uma delas. Duas pronúncias que ouço com frequência são: “endjáine” e “enguíne”. Pra mim é igual alguém escrever “mais” no lugar de “mas”.

Pra tentar corrigir a pronúncia, antes eu perguntava sobre engenharia ou engenheiro. Nunca ouvi uma pessoa falando “en-djái-ni-er” nem “en-guí-ni-er”. E você?

Agora, o que eu pergunto é: “Alguém já jogou Daytona USA? O que o cara falava antes da corrida?” (é engraçado ter que perguntar se alguém já jogou ao invés de se alguém se lembra do jogo…).

Para quem nunca jogou o Daytona USA ou não se lembra, segue um vídeo no tempo exato em que ele fala “Gentlemen! Start your engines.”

E é assim que pronunciamos o famoso termo “engine”!

Be Sociable, Share!

Visual Assist X = produtividade++;

logoWTS
Dica para quem usa o Microsoft Visual Studio para qualquer linguagem (com exceção das versões Express) e ainda não usa o Visual Assist X (VAX): compre a licença e sua vida de programador nunca mais será a mesma. Dinheiro muito bem gasto.

O mesmo vale para empresas que usam a IDE; a produtividade dos seus programadores com certeza aumentará e eles ficarão mais felizes (e ao mesmo tempo ficarão P da vida porque terão que comprar uma licença pessoal para usarem na máquina pessoal deles).

Não, não estou recebendo nada para fazer essa “propaganda” :).

O VAX é uma daquelas ferramentas que, depois que você a conhece, fica se perguntando “Como vivi sem você até agora?”. Ela adiciona novas features ao Visual Studio que facilitam diversas tarefas de programação, como por exemplo: melhora no IntelliSense, sugestões de auto-completar, opções de refatoração, navegação entre arquivos mais rápida, correção de digitação, highlight de código e até conversão de . (ponto) para -> em C/C++. Vale a pena ver mais detalhes no site oficial.

Uma feature que sentia falta no Visual Studio é a possibilidade de alternar entre os arquivos h/cpp de maneira rápida (= via teclado), como acontece no XCode. Com o VAX, é só usar o atalho Alt+O.

Algumas features que uso bastante no dia-a-dia:

  • Alt+M para abrir um dropdown com os métodos (e logo em seguida, digitar parte do nome do método e apertar enter para ir pro método).
  • Shift+Alt+F para encontrar referências de símbolos (que é diferente do “Find in Files”).
  • Shift+Alt+R para renomear variáveis, métodos, etc., seja por erro de digitação ou nome mais apropriado (isso mais quando estou refatorando).
  • Fora aquelas que já funcionam automaticamente (IntelliSense, auto-complete, highlight, etc).

    Jogo dos 7 erros

    Segue abaixo duas imagens do VS2010, uma sem o VAX e outra com o VAX. Consegue listar as diferenças? (considerando o highlight de sintaxe como uma única diferença, realmente há 7 itens diferentes entre as duas versões).

    WithoutVax

    WithVax

    Sobre o código acima, é outro assunto que pretendo comentar futuramente aqui no blog.

    Até!

    Be Sociable, Share!

    printf(“Hello, World!\n”);

    Olá!

    Para não quebrar a “regra implícita” do primeiro post de um blog conter um texto explicando os objetivos do blog, sobre quais assuntos o blog tratará e assim por diante, vou escrever exatamente sobre isso.

    Meu objetivo principal com este blog é me forçar a produzir mais conteúdo sobre as áreas relacionadas ao meu trabalho e estudos. Percebi que há alguns anos atrás eu escrevia e compartilhava mais informações. Tudo bem que desses anos para cá estou com muito mais trabalho e responsabilidades diferentes, mas acho importante continuar produzindo e compartilhando informações.

    Com isso, acredito que dois outros objetivos são atingidos: aprender mais e treinar/melhorar a escrita. Afinal, quando você ensina (seja escrevendo texto/artigo para transmitir uma informação ou preparando uma aula) você também aprende e para melhorar a escrita, só praticando mesmo.

    Sobre assuntos que serão tratados por aqui, comentei que quero produzir conteúdo relacionado ao meu trabalho e estudos, que envolve principalmente desenvolvimento de jogos, incluindo pré-, pós- e produção, programação, gerenciamento e reclamações gerais (afinal, nem tudo são flores).

    Acho que é isso. Alguns textos poderão ser breves, outros longos. Vamos ver.

    - André

    Be Sociable, Share!