Technè

Tecnologia & Experiência do Usuário no C.E.S.A.R

XNA para os que aspiram criar jogos

Posted by Silvio Carréra On outubro - 6 - 2010


XNA é um framework que visa facilitar o desenvolvimento de jogos para plataforma Windows, Xbox 360, Zune e mais recentemente para o Windows Phone 7 também. Através de um conjunto de ferramentas o XNA tenta liberar os desenvolvedores de ter que escrever códigos repetitivos e oferecer vários aspectos de desenvolvimento de jogos em um único sistema.

Atualmente XNA abrange toda as seções de desenvolvimento de jogos da Microsoft, incluindo a padrão Xbox Development Kit e XNA Game Studio. O Framework integra várias ferramentas como o XACT que é usado para a criação de conteúdo de áudio. Também a suporte para criação de jogos tanto em 2D como 3D e permite uso direto de controles do Xbox 360 com simples comandos.

StarterKit de Corrida
Pelo tempo que usei o framework por conta própria (por volta de um mês) posso dizer que ele é uma ferramenta muito interessante no sentido de que você consegue fazer algo bom e jogável, em pouco tempo, sem saber muito de C# (meu caso). Basta ter conhecimento de programação orientada a objeto e ver como a organização proposta pelo XNA funciona. Qual procedimento vem antes de qual, que tipo de código tem que ficar onde, entre outros para que aos poucos você possa ir explorando os limites dele. Outra grande vantagem é você poder fazer uso dos Starter Kits. Que são uma espécie de jogos pré-prontos com tudo pronto para rodar. Você tem para plataforma, shooter, corrida e vários outros e basta você pegar o mesmo e mudá-lo conforme necessário para se adaptar ao seu jogo. Podem também ser usados para aprendizados iniciais já que tem-se uma estrutura bem formada de um projeto já pronto.

Como ponto de partida o XNA é uma ferramenta ótima por ser simples para quem não sabe nada e ao mesmo tempo é ótima para quem já tem conhecimento na área pois é bastante poderosa para desenvolver jogos e possui uma comunidade que cresce cada vez mais. Outra que é possível colocar seus jogos a disposição no XBLA (Xbox Live Arcade) para que outros baixem e joguem (pagando uma taxa para entrar no XNA Creators Club).

Vale ressaltar que a comunidade Brasileira está muito presente nessa área. É bom dar uma olhada na Sharp Games e no XNA Challenge Brasil e os últimos vencedores do mesmo. Na primeira edição venceu um jogo que tinha como idéia inicial expandir o Space War original adicionando comandos de voz (algo que nenhum outro jogo havia feito na época), o que resultou no Space War Mission Commando e que vale a pena dar uma olhada.

Do mais, se você tem interesse sério em desenvolvimento de jogos ou apenas busca uma plataforma de qualidade para satisfazer sua curiosidade gamer o XNA é um ótimo ponto de partida.

Uso de NOLOCK no Microsoft SQL Server

Posted by Thiago Veras On agosto - 13 - 2010

Para um melhor entendimento de todos e contextualização do uso de NOLOCK dentro do Microsoft SQL Server é interessante passarmos antes por algumas definições.

O LOCK é um mecanismo usado pelo Banco de Dados para bloquear conteudo na tentativa de sincronizar os múltiplos acessos de diversos usuários à mesma informação.

O uso do lock está diretamente ligado ao controle de concorrência. Este controle pode ser classificado como otimista ou pessimista. No caso do SQL Server, ele possui suporte a ambos, no entanto, o pessimista é o padrão.

Controle de Concorrência Otimista (Optimistic Concurrency Control)
No controle de concorrência otimista, o usuário não cria Locks quando faz a leituras dos dados. Desta forma, quando o usuário for atualizar dados, o sistema verifica se outro usuário está alterando os mesmos dados. Caso positivo, um erro será gerado. O controle é chamado de controle otimista porque é principalmente utilizado em ambientes onde a disputa dos dados é baixa e o custo de ocasionais Rollbacks das transações é menor do que o custo de utilizar Locks em comandos de leitura.

Controle de Concorrência Pessimista (Pessimistic Concurrency Control)
No controle de concorrência pessimista, a base de dados cria Locks que impedem usuários modificarem dados que podem afetar outros usuários de algum modo. No momento em que um usuário faz uma ação, o banco de dados cria um Lock para aquele conteúdo, desta forma, outros usuários ficam impedidos de realizarem ações que conflitem com o Lock até que o primeiro usuário acabe sua transação. O controle é chamado de controle pessimista porque é usado principalmente em ambientes onde a disputa dos dados é alta e o custo da proteção dos dados com Locks é menor do que o custo dos Rollbacks das transações se ocorrerem conflitos.

Com a definição do lock e dos controles de concorrência, fica mais fácil o entendimento do recurso NOLOCK do Microsoft SQL Server.
O NOLOCK permite executar consultas ao banco de dados sem bloquear o conteúdo. Com esta breve descrição é importante a reflexão que o recurso do NOLOCK só faz sentido no uso do Controle de Concorrência Pessimista.

Considerando este cenário, vamos nos aprofundar um pouco mais no recurso NOLOCK do Microsoft SQL Server. Ele possui duas características bem importantes:
1. Permite executar uma instrução SQL sem causar bloqueio da tabela que está sendo lida;
2. Permite ler dados não commitados.

A primeira característica é bem interessante, principalmente quando se busca performance e paralelismo. No entanto, a segunda característica precisa ser bem observada para evitar um uso indevido do NOLOCK e causar problemas no sistema. Diante disto, é muito importante que o desenvolvedor saiba exatamente o que está fazendo quando estiver utilizando o NOLOCK.
Vamos entender a sintaxe para utilização deste recurso. Segue abaixo um exemplo:

– Instrução SQL Normal:
SELECT * FROM NOTA_FISCAL ORDER BY CD_NOTA_FISCAL;

– Instrução SQL com NOLOCK:
SELECT * FROM NOTA_FISCAL WITH (NOLOCK) ORDER BY CD_NOTA_FISCAL;

Vamos agora analisar o uso para uma aplicação com as seguintes características:
1. A tabela de Nota Fiscal é modificada apenas com comandos de INSERT ou DELETE. Nunca UPDATE, pois devido ao negócio da aplicação não existe atualização das Notas.
2. Quem modifica esta tabela é apenas um procedimento de importação que roda através de um scheduler e não permite multi-threads do mesmo tipo. Ou seja, não temos nunca 2 importações de notas fiscais rodando em paralelo, elas ficam em fila se por algum motivo existir uma concorrência.
3. Existem diversas consultas e reports que precisam de acesso rápido a esta tabela de Nota Fiscal.
4. Todos os reports possuem horário de geração.

Diante destas características do sistema, o uso de NOLOCK pode ser recomendado e trazer um beneficio bem interessante a performance das consultas e reports relacionados as notas fiscais.

Vamos entender melhor esta conclusão..

Quando NÃO usamos NOLOCK e estamos no controle de concorrência pessimista, precisamos esperar que os outros procedimentos na tabela acabem para que consultas possam ser realizadas. Desta forma, denegrindo a performance de relatórios que estão rodando em paralelo a procedimentos de importação. No entanto, com o uso do NOLOCK em uma aplicação com as características descritas acima, podemos consultar os dados sem a necessidade de esperar que as importações realmente terminem, pois teremos lá o conteúdo de momento.
O report vai marcar a hora que ele foi gerado e como não são feitos UPDATES nas notas, nunca teremos dados inconsistentes. No pior caso, poderíamos ter uma nota que posteriormente ela seria cancelada (deletada), mas isto é algo comum dentro do negocio da aplicação.

O uso do NOLOCK implica em abrir mão da consistência em nome da melhor concorrência e tem suas aplicabilidades. No entanto, é importante sempre entender bem do negocio da aplicação e utilizá-lo com bom senso para que suas desvantagens não te tragam problemas piores que um problema de performance.