Microsoft MVP – C#

É com muita, muita felicidade que eu informo que fui presenteado com o Microsoft Most Valuable Professional (MVP) Award em C#!

Para quem não conhece o programa MVP, segue um link que explica bem: http://mvp.microsoft.com/pt-br/overview.aspx

Ser reconhecido com este premio me deixa extremamente feliz, e me estimula a continuar fazendo o que tenho feito nos últimos 5 anos, palestrando e ajudando a divulgar tecnologias pelas quais me interesso e tive o prazer em conhecer. Tenho certeza que aprendi muito nestes últimos anos e espero ter ajudado muitas pessoas em palestras e eventos.

Gostaria muito de agradecer a todos que me ajudaram neste jornada. Agradeço muito a todas essas pessoas que conheci durante esses anos, MVPs, MSPs, MTACs e funcionários da Microsoft Brasil.

Lembro muito bem até hoje os primeiros eventos de comunidade que participei, e sem dúvida tenho muito a agradecer! Rodrigo Kono, Evilázaro (sobrenome pra que, né?), Fernanda Saraiva, Diego Nogare, Lucas Romão, Andre Baltieri, Felipe Ferreira, Giovanni Bassi, Igor Abade, Djonatas Tenfen, Thiago Zavaschi, José Antonio Leal de Farias(JALF), Fernando Martin Figueira, Ricardo Dorta, entre muuuuitos outros! É tanta gente que conheci que não da pra listar todos!

Grandes e ótimos papos nas madrugadas dos primeiros Community Zones com os divertidíssimos então MVPs de XBox Mauricio Alegretti e José Cerqueira Barros Jr, muito obrigado! Essas conversas boas são as que não esquecemos!

Lembro bem da palestra que tive na UFSCar do ex-aluno Guilherme Carvalhal ( atual funcionário da Microsoft Brasil ) na matéria Orientação Profissional em Computação, no 1º semestre do curso de Bacharelado em Ciência da Computação, ministrada pela excelentíssima professora Sandra Abib! Ali foi plantada a semente que iniciou meu interesse por comunidades, que começou com Imagine Cup e programa MSP (Patricia Arouck, Heloisa Lobo, Carla Silva, e milhões de MSPs que conheci no Brasil inteiro), e mais recentemente o programa MTAC com o incrível Fabio Hara (Hara-san)!

Queria agradecer especialmente aos 2 MVPs brasileiros de Windows Phone, Rodolpho Carmo e Thiago Mônaco, pelo suporte que me deram nestes últimos meses, e é claro, um super obrigado ao hiper atencioso MVP Lead, João Paulo Clementi (JP)! Que boas novas venham neste seu novo caminho nos EUA!

Mais uma vez, muito obrigado a todos!

Classificação etária de jogos na Windows Phone Store Brasil

Opa pessoal!

Já faz um tempo que eu não posto no meu blog, mas acredito que este seja um post que muitas pessoas tenham interesse!

Antigamente (até poucos meses atrás) para um aplicativo entrar na Windows Phone Store do Brasil na categoria de games ele devia passar por uma classificação etária do Ministério da Cultura. Este processo era extremamente demorado, complicado, e desestimulante para os desenvolvedores. Era até um dos principais motivos de não termos tantos jogos para Windows Phone na store brasileira. Esta complicação só é obrigatória no Brasil, na Coréia e na Rússia.

Felizmente, este cenário mudou!

Agora você pode utilizar o mesmo certificado americano ou europeu para a auto-classificação brasileira!

Notícia sobre a auto-classificação do DJCTQ

Para criar um certificado da ESRB, entre neste link.

Para criar um certificado da PEGI, entre neste link.

Os 2 processos são bem parecidos, gratuitos, e instantâneos! Você receberá um arquivo PDF para cada um dos certificados. GUARDE-OS.

Ambas as classificações são válidas para o DJCTQ. Você deve subir qualquer um dos 2 na store, no campo do DJCTQ, mesmo já tendo subido ele no campo do ESRB ou no campo do PEGI.

É isso ai pessoal, qualquer dúvida é só perguntar!

Boa sorte e bom desenvolvimento!

MSP Tech Day

Neste sábado eu palestrei no evento MSP Tech Day (http://www.msptechday.com.br/).
Prometi que ia colocar o código da demo da apresentação! Coloquei no meu SkyDrive. Segue o link:
https://skydrive.live.com/?cid=a365d10d3a900124&sc=documents&uc=1&id=A365D10D3A900124%21851#

Abraços e até a próxima,
Alexandre Z. Chohfi

Detecção de Toques com XNA 4.0

Com a vinda da versão 4.0 do XNA veio também o suporte do XNA ao Windows Phone 7, que será oficialmente lançado nesta segunda-feira(11/10/2010).
image
Uma das novas features mais interessantes é a capacidade de detectar facilmente pontos de toque na tela do dispositivo. A nova API de toques é muito simples de ser utilizada e, para qualquer pessoa que já utilizou as APIs de input do teclado, do mouse ou do gamepad, será um belo Déjà vu.
Para recuperar e utilizar os dados da API de toques, basta utilizar o método estático TouchPanel.GetState() que retorna um objeto do tipo TouchCollection. Este objeto é uma coleção de objetos do tipo TouchLocation. Cada TouchLocation corresponde a um ponto de toque na tela. Lembrando que os dispositivos com Windows Phone 7 devem suportar no mínimo 4 pontos de toque simultâneos.
Cada TouchLocation contêm 3 propriedades úteis: Id, Position e State. A propriedade Id é bem simples, um código de identificação, normalmente um número extenso. Este número é preservado enquanto o ponto existe. Position é um Vector2, com as coordenadas X e Y do centro do ponto de toque. State é uma variável do tipo enumerado TouchLocationState que pode ser:
  1. Invalid: Ponto inválido. O estado só esta Invalid quando você tenta recuperar um estado anterior de um ponto sendo que este ponto acabou de ocorrer.
  2. Moved: Este ponto foi atualizado, mudou de posição, ou pressionado no mesmo ponto.
  3. Pressed: Este ponto é novo, acabou de ocorrer.
  4. Released: Este ponto foi solto, liberado, ou seja, não esta mais sendo pressionado.
É válido lembrar que as APIs de toque do XNA 4 só funcionam para o Windows Phone 7. Não importa se você esta no Windows7, com uma tela multitoque. Se você executar o método TouchPanel.GetState() no Windows ou no XBox360, a API retorna um TouchCollection vazio, sempre! É um stub, ele não faz NADA, apenas retorna o TouchCollection vazio.
O último método interessante da API é o TouchLocation.TryGetPreviousLocation. Este método não é estático. Você o chama a partir de uma instância de TouchLocation passando um parâmetro de saida(out) do tipo TouchLocation. A função retorna neste parâmetro o ponto que ele era anteriormente. Como dito anteriormente, o ponto terá a propriedade State igual a Invalid quando o ponto que chamou a função for um ponto novo, ou seja, State igual a Pressed e o valor da propriedade Id será o mesmo do ponto anterior. O tipo de retorno da função é bool, retornando verdadeiro somente se o ponto que ele retorna no parâmetro de saida é válido.
Com esta configuração de estados e a função TryGetPreviousLocation você consegue descobrir quando um ponto foi criado e quando ele deixou de existir.
Como visto, a API é muito simples de se utilizar. Segue aqui um exemplo de código que testa todas as funcionalidade descritas.
C#
  1. protected override void Update(GameTime gameTime)
  2. {
  3. TouchCollection touchCollection = TouchPanel.GetState();
  4. if (touchCollection.Count > 0)
  5. {
  6. TouchLocation touchLocation1 = touchCollection.First();
  7. TouchLocation touchLocationAnterior;
  8. if (!touchLocation1.TryGetPreviousLocation(out touchLocationAnterior))
  9. {
  10. Debug.WriteLine(“Ponto anterior não existia!”);
  11. }
  12. if (touchLocation1.State == TouchLocationState.Moved && touchLocationAnterior.State == TouchLocationState.Pressed)
  13. {
  14. Debug.WriteLine(“Ponto novo criado(“ + touchLocation1.Position.ToString() + “). ID = “ + touchLocation1.Id.ToString());
  15. }
  16. if (touchLocation1.State == TouchLocationState.Released && touchLocationAnterior.State == TouchLocationState.Moved)
  17. {
  18. Debug.WriteLine(“Ponto não mais presente(“ + touchLocationAnterior.Position.ToString() + “). ID = “ + touchLocationAnterior.Id.ToString());
  19. }
  20. }
  21. base.Update(gameTime);
  22. }
Por hoje é só! Espero que este post tenha tirado as dúvidas de vocês em relação a esta nova API de toques. Em breve irei comentar sobre a API de gestos, que facilita a criação de interfaces naturais ao usuário, como por exemplo Tap, Hold, Flick, Pinch, entre outros.
Obrigado pelo seu tempo e até o próximo post,
Alexandre Z. Chohfi

Escolhendo entre Reach e HiDef no XNA 4.0

Uma das novas features do XNA 4.0 é que agora devemos escolher entre dois profiles de configuração: Reach ou HiDef. Estas pré-configurações foram criadas para facilitar a distribuição de games criados em XNA. Visto que as configurações dos computadores onde o jogo será executado são diferentes umas das outras, os profiles ajudam a selecionar um mínimo de capacidades do hardware que viabilizam a sua utilização.

Por padrão, games criados para Windows e XBox360 utilizam a configuração HiDef, enquanto games criados para Windows Phone 7 utilizam Reach. Projetos criados para Windows Phone 7 NÃO podem ser alterados para a configuração HiDef, devido a limitações do hardware dos dispositivos que executam o Windows Phone 7. Isso não quer dizer que você não possa criar jogos em 3D, ou que os jogos criados em Reach são piores graficamente que jogos criados em HiDef. Entretanto, você pode (e, na minha opinião, deve) alterar a configuração de jogos criados para Windows e XBox360 para Reach.

Reach como o próprio nome já diz, visa “alcançar” a grande maioria dos dispositivos atuais. Se a sua placa de vídeo for antiga, você provavelmente deve usar Reach.

HiDef significa High Definition, ou seja, alta definição. Este profile é para placas de vídeo mais novas.

Se você estiver criando jogos simples, em 2D principalmente, e não utilizar nada muito complexo, provavelmente o seu jogo funciona em Reach. Defini-lo como HiDef apenas inviabilizaria muitos computadores de rodares o jogo, portanto sempre que criar um projeto jogo (Game ou Game library, de Windows ou XBox360) mude o profile para Reach. Se, durante o desenvolvimento, você receber uma exceção indicando que a funcionalidade X não funciona em Reach, ai sim você deve alterar o seu projeto para HiDef, obviamente somente em projetos Windows e XBox360.

Para não deixar a explicação muito superficial, segue uma tabela que indica as limitações de cada profile:

  Reach HiDef
Plataformas Windows Phone 7, Xbox 360 e qualquer computador Windows com uma placa de vídeo com suporte ao DirectX 9 e no mínimo shader model 2.0. Xbox 360 e qualquer computador Windows com uma placa de vídeo com suporte ao DirectX 10 (ou equivalente, veja abaixo)
Shader Model 2.0  (mas o Windows Phone não suporta shaders customizados) 3.0+ (o Xbox 360 suporta extensões de shader customizadas como vfetch, que não estão disponíveis para Windows)
Tamanho máximo de texturas 2048 4096
Tamanho máximo de cubmap 512 4096
Tamanho máximo de texturas de volume Não suporta 256
Suporte a texturas com tamanhos não potência de 2 Limitado. Não se pode usar modo de endereçamento wrap, nem mipmaps, nem compressão DXT quando não é potência de 2 Sim
Suporte a cubemaps com tamanhos não potência de 2 Não Sim
Suporte a texturas de volume com tamanhos não potência de 2 Texturas de volume não são suportadas Sim
Número máximo de primitivas desenhadas por chamada da função Draw 65535 1048575
Formato do Index Buffer 16 bits 16 e 32 bits
Formato do elemento de Vertex Color, Byte4, Single, Vector2, Vector3, Vector4, Short2, Short4, NormalizedShort2 e NormalizedShort4 Todos os formatos do Reach mais HalfVector2 e HalfVector4
Formato de texturas Color, Bgr565, Bgra5551, Bgra4444, NormalizedByte2, NormalizedByte4, Dxt1, Dxt3 e Dxt5 Todos os formatos do Reach mais Alpha8, Rg32, Rgba64, Rgba1010102, Single, Vector2, Vector4, HalfSingle, HalfVector2 e HalfVector4. Formatos de textura com ponto flutuante não suportam filtragem
Formato de texturas de Vertex Texturas de vértice não são suportadas Single, Vector2, Vector4, HalfSingle, HalfVector2 e HalfVector4
Formatos de Render Targets Variavel (veja abaixo) Variavel (veja abaixo)
Render Targets multiplos Não suporta Até 4. Todas devem ter a mesma profundidade de bits. Suporta alpha blending e escrita independente de mascaras por render target
Queries de occlusion Não suporta Sim
Blend com alpha separado (Separate alpha blend) Não suporta Sim
Blend.SourceAlphaSaturation Apenas para SourceBlend, não para DestinationBlend Sim
Número máximo de vertex streams 16 16
Tamanho máximo do stream stride 255 255

 

Lembrem-se que o XNA é desenvolvido em cima do DirectX 9 então, quando digo que para se utilizar HiDef a sua placa de vídeo deve ter suporte ao DirectX 10, não é nem pelo suporte em si mas o profile HiDef, necessita de uma GPU com praticamente as mesmas funcionalidade de um XBox360: MRT, formatos de surfaces com ponto flutuante, vertex tecture fetch, etc, mas no DX9 estas funcionalidades são opcionais. Em teoria, é possível que uma placa de vídeo com suporte somente ao DX9 consiga funcionar para HiDef, mas na prática isso não ocorre, então em vez de falar que HiDef precisa de todas estas funcionalidades na placa de vídeo, é mais fácil dizer que ele necessita de uma placa com DX10.

Você provavelmente vai notar que o suporte aos formatos de RenderTarget ainda podem variar. Agora existe um novo mecanismo de fallback, ou seja, o framework tentará prover o formato pedido, mas, se ele não for suportado, ele escolhe o mais próximo suportado, procurando pelo formato com a profundidade de bits, número de canais, etc, mais similar. Na grande maioria das vezes isso não gera problema algum.

Estes formatos de vertex element, presentes no Game Studio 3.1, não são mais suportados no Game Studio 4.0 por nenhum profile: Rg32, Rgba32, Rgba64, UInt101010 e Normalized101010.

Estes formatos de texturas, presentes no Game Studio 3.1, não são mais suportados no Game Studio 4.0 por nenhum profile: Dxt2, Dxt4, Bgr555, Bgr444, Bgra2338, Bgr233, Bgr24, Bgr32, Bgra1010102, Rgba32, Rgb32, NormalizedShort2, NormalizedShort4, Luminance8, Luminance16, LuminanceAlpha8, LuminanceAlpha16, Palette8, PaletteAlpha16, NormalizedLuminance16, NormalizedLuminance32, NormalizedAlpha1010102, NormalizedByte2Computed, VideoYuYv, Video UyVy, VideoGrGb, VideoRgBg e Multi2Bgra32.

Agora o Game Studio 4.0 mudou definitivamente a ordenação dos bytes dos formatos de cores de BGRA para RGBA. Se você já encontrou com problemas ao fazer isso, saberá facilmente converter o seu código para o XNA 4.0, apenas mudando a ordem dos bytes.

 

Uma das coisas mais importantes é notar que agora o XNA 4.0 não suporta mais placas de vídeo com suporte apenas ao Shader Model 1.1! Apenas Shader Model 2.0 para Reach e 3.0+ para HiDef!

 

Em desenvolvimento para Windows, na maioria dos casos, você só tem que saber que se utilizar HiDef como padrão, você estará limitando o número de usuários capazes de executar o seu jogo, portanto use Reach e, se for indispensável, mude para HiDef.

 

Espero que tenha ajudado. Agradeço muito ao Shawn Hargreaves, especialista do time de desenvolvimento do XNA pelos posts em seu blog que nos informou de todas essas alterações.

Referências:

http://blogs.msdn.com/b/shawnhar/archive/2010/03/12/reach-vs-hidef.aspx

http://blogs.msdn.com/b/shawnhar/archive/2010/07/19/selecting-reach-vs-hidef.aspx

 

Abraços a todos e até o próximo post,

      Alexandre Z. Chohfi

TechEd 2010

Segue a minha agenda to TechEd Brasil 2010:

Programação do dia 13/09/2010:

13:45 – 15:00
Título: Dicas, truques do Visual Studio 2010 e novas funcionalidades do Visual Basic e C#
Palestrantes: João Paulo Clementi, Renato Haddad

15:30 – 16:45
Título: Desenvolvimento com C# no mundo moderno
Palestrante: Alfred Myers

17:15 – 18:30
Título: Tudo o que você precisa saber sobre Scrum e Visual Studio ALM em 150 min – Parte 1
Palestrantes: André Dias, Giovanni Bassi

18:45 – 20:00
Título: Tudo o que você precisa saber sobre Scrum e Visual Studio ALM em 150 min – Parte 2
Palestrantes: André Dias, Giovanni Bassi

Programação do dia 14/09/2010:

09:00 – 10:15
Título: Criando Rich Internet Applications (RIA) com ASP.NET AJAX e jQuery
Palestrante: Fernando Cerqueira

10:45 – 12:00
Título: Tudo que você sempre quis saber sobre o Windows Presentation Foundation (WPF) 4
Palestrante: Bruno Sonnino

13:45 – 15:00
Título: Primeiros passos no Team Foundation Server 2010
Palestrante: Ramon Durães

15:30 – 16:45
Título: Implementando Serviços RESTful usando o Microsoft .NET Framework
Palestrante: Israel Aece

17:15 – 18:30
Título: Conheça os limites do Windows
Palestrante: Guilherme Carnevale

Programação do dia 15/09/2010:

09:00 – 10:15
Título: Dicas e Truques do Exame 70-511: Windows Applications Development with Microsoft .NET Framework 4 
Palestrante: Marcelo Sincic

10:45 – 12:00
Título: Construindo Aplicações de alto desempenho usando o "Windows Performance Toolkit"
Palestrante: Miguel Ferreira

13:45 – 15:00
Título: Discutindo sobre: Linq to Sql, Entity Framework Versus Stored Procedures
Palestrante: Luciano Condé

15:30 – 16:45
Título: Entendendo a Plataforma de Aplicações do Windows Phone 7
Palestrantes: Galileu Vieira, Luciano Condé

17:15 – 18:30
Título: Aproveitando ao máximo as ferramentas do Visual Studio 2010 para Silverlight e WPF
Palestrante: Kelps Leite de Sousa

É isso ai, nos vemos no evento!

Abraços a todos,

         Alexandre Z. Chohfi

Mobile Game Studios

Microsoft_Game_Studios_logo

A Microsoft Games deu uma ótima notícia. Teremos um novo departamento na Microsoft chamado Mobile Game Studios, que estará sob o comando da Microsoft Game Studios. O objetivo do Mobile Game Studios será desenvolver e encubar jogos para dispositivos mobile, focando principalmente em Zune e Windows Phone 7.

Mais uma vez, obrigado pela atenção,

        Alexandre Z. Chohfi

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 1.879 outros seguidores