Entries Tagged 'C/C++' ↓

Autotools e CUDA

Quem gosta de CUDA e Linux, sabe que não existe (a não ser que você procure na internet) suporte para CUDA nas autotools. Bom, eu procurei a um bom tempo atrás e criei um template para iniciar todos os meus projetos de CUDA e agora, não apenas estou liberando ele como um template, mas também estou criando um repositório completo sobre CUDA no meu SVN onde obviamente esse é o primeiro projeto.
Sem demoras, é possível efetuar o download e entender um pouco mais do projeto na página do projeto.
PS: Saiu a versão 3.1 com suporte a printf() em interfaces Fermin ;)

Números aleatórios em C

Bom, todos nós sabemos que rand() nos retorna uma distribuição uniforme de números aleatórios, na realidade praticamente todos os geradores de números aleatórios nos retorna uma distribuição uniforme, o problema é como utilizamos. Procurando sobre isso, encontrei esse artigo que explica o motivo do “erro” de utilização e como corrigir o mesmo.
Enquanto ele não resolve o problema para geração de números aleatórios em paralelo (minha mais nova paixão), ele dá boas dicas de como solucionar isso, e provavelmente como solucionar também em paralelismo (já que o problema está na utilização e não no algorítmo).
Vale a pena dar uma lida, esse é um assunto muito importante para todos, principalmente para quem ainda gera os números dessa forma:

srand(time(NULL));
int num = rand()%max;

;)

Nova especificação do C++ adiada para 2010

De acordo com essa notícia do Slashdot, a nova especificação do C++ (C++0X) será adiada para 2010 ou depois. O motivo é a sua mudança principal chamada “concepts”, que visam deixar os templates mais robustos. Honestamente eu não vi muito de C++ ainda para discutir a fundo templates, herança, polimorfismo, ou qualquer outra coisa, mas uma nova especificação sempre é bem vinda (quando bem feita, que aparentemente é o caso), e pelo que li sobre “concepts” realmente é uma coisa bem complexa, que esta sendo desenvolvida a mais de 7 anos e ainda não está pronta. Como ela será o motivo principal do atraso, ela será retirada e a nova especificação irá se focar em outras coisas (como paralelismo por exemplo).

Observers em C++

Observers são um patrão de design muito utilizado, principalmente quando você quer que camadas superiores do seu software saibam o que aconteceu nas camadas inferiores. O Ogre usa isso para renderizar Frames por exemplo, utilizando FrameListener. Pois bem, curioso como sou resolvi ir um pouco mais a fundo e ver como se faz isso na unha em C++, descobrindo o quão simples isso é, os passos são esses:

  1. Criar uma simples interface com um método que será chamado a toda atualização
  2. Criar um objeto singleton que pode ser observado, adicionando as interfaces em uma lista (ou pilha, whatever), que irá chamar o método de atualização de todos as interface quando obtiver uma mudança
  3. Criar um objeto que implementa sua interface.
  4. A cada atualização, notificar todas as interfaces.

Continue reading →

Ogre, aos poucos…Menu 3D!

Bom, eu sei que faz tempo que não aparecem trechos de códigos por aqui, culpe a falta de tempo.
Mas nada são más notícias, eu tenho um trecho aqui de um Menu 3D, com alfabeto e tudo mais ;) Ainda estou trabalhando na documentação, mas se você possui Linux e OGRE, pode brincar um pouco já, a idéia é bem básica, existem um Zip com os .mesh representando o alfabeto (por falta de vocação em 3D e vontade, temos apenas de A-Z e 0-9), criei (estou aperfeiçoando) uma classe para cuidar de mostrar o alfabeto em um ambiente 3D e, uma classe de Menu, que utiliza esse alfabeto e umas animações bem básicas mesmo.
Esse projeto eu vou fazer um pouco diferente, vou trabalhar no mesmo até conseguir entregar um binário de exemplo para Linux e Windows e, fazer com que esse binário rode em qualquer um desses SOs, com ou sem Ogre instalado.
Para ver como está indo, o link do SVN é:

http://svn.geekvault.org/ogre/MenuFramework

Abraços, e até a próxima.
Zarnick

Ogre, parte 1

Bom, como prometido, temos algo do Ogre aqui :D

Repito que não vou fazer um tutorial sobre isso, para isso vejam a Wiki do Ogre.
Antes de mais nada, como já foi dito anteriormente, o Ogre por sí só é uma engine gráfica 3D, o que quer dizer que sim, você pode fazer seu jogo nela, mas irá faltar no mínimo iteração com o usuário, som e física (verdade, alguns jogos não precisam de física, mas ficam muito melhores com;). Quando você instala o Ogre ele vem com a parte de iteração, utilizando agora o OIS (antigamente era a SDL) e para ter uma GUI, ele utiliza a CEGUI. Com isso você já consegue fazer um jogo quase completo (isso e muita paciência), ou um aplicativo, que é o que vou mostrar aqui. Continue reading →

Bullet physics

Bom, falar que fiquei pasmo com essa engine OpenSource de física é o mínimo. Ao procurar uma boa engine de física que rode com o Ogre de uma forma fácil e seu desenvolvimento seja voltado para o Linux, descobri Bullet. Apenas para ter uma ideia do quão ela é importante, o Blender a utiliza na sua última versão (2.48), como a engine física default para sua game-engine. Entre outras coisas que você pode ver em sua página de download (Google code) ela suporta soft-bodies, como por exemplo roupas e cordas.

Definitivamente vale a pena dar uma olhada ;)

liblogger 0.1

Ola pessoal, calma que minha faculdade está quase no fim, reta final!

Enquanto isso, gostaria de apresentar um novo projeto meu, a liblogger. Em quase todas as aplicações que eu faço eu preciso de um log, a maioria das pessoas precisa, e depois de copiar tantas vezes o mesmo código, resolvi inaugurar uma seção no meu domínio com algumas apps e APIs e, essa será a primeira a ser disponibilizada!

Todas as APIs terão uma documentação feita via Doxygen, um site via Joomla, tutoriais, e um espaço em packages.geekvault.org. Caso contrário ela estará no Sourceforge e provavelmente com sites mais personalizados, alias, esperem novidades nesse aspecto ;) . Continue reading →

Árvores!

Demorou, vou assumir, mas finalmente eu programei mais uma estrutura de dados simples, a árvore. Vou preparar uma explicação sobre o que é uma árvore em computação (essa pode ser um pouco complexa) e assim que eu tiver eu posto aqui, mas por enquanto vocês podem ver o código no svn (http://svn.geekvault.org/c/trees)

Have fun.

Incluindo cabeçalhos de forma segura em C

Certo dia eu estava conversando com um amigo meu sobre C e ele me falou que a coisa que ele mais odiava era ter que tomar cuidado com a ordem dos include que ele fazia quando iniciava um projeto em C. Ora, vamos pensar um pouco, se você incluir duas vezes o cabeçalho stdio.h por exemplo, em dois arquivos diferentes, e incluir os dois, não da erro certo?
Continue reading →