Quem sou eu

Minha foto
Programador por profissão, formação e opção! Interessado em tudo relacionado a computadores, menos manutenção de hardware! Linguagens (interesse e trabalho): Java, C#, C/C++, Python, Ruby, Haskell. Atualmente trabalhando como Desenvolvedor (maior parte do tempo em soluções ASP.NET)

sexta-feira, 28 de setembro de 2012

Select no PostgreSQL agrupando resultados por data.

Mais uma postagem da série do Pequeno Guia do Mochileiro do PostgreSQL.

Me pergutaram no serviço, como agrupar os resultados de um select por hora, ignorando as informações de minuto/segundo.

Segue abaixo o exemplo de como fazer esse agrupamento:
experiments=# create table test_group_date(count real, date timestamp);
CREATE TABLE
experiments=# insert into test_group_date(count, date) values (1, TIMESTAMP '2001-02-16 20:38:40');
INSERT 0 1
experiments=# insert into test_group_date(count, date) values (2, TIMESTAMP '2001-02-16 21:38:40');
INSERT 0 1
experiments=# insert into test_group_date(count, date) values (2, TIMESTAMP '2001-02-16 21:58:40');
INSERT 0 1
experiments=# insert into test_group_date(count, date) values (2, TIMESTAMP '2001-02-16 21:59:40');
INSERT 0 1
experiments=# select * from test_group_date;
 count |        date
-------+---------------------
     1 | 2001-02-16 20:38:40
     2 | 2001-02-16 21:38:40
     2 | 2001-02-16 21:58:40
     2 | 2001-02-16 21:59:40
(4 rows)

experiments=# select sum(count), date_trunc('hour', date) from test_group_date group by date_trunc('hour', date)
experiments-# ;
 sum |     date_trunc
-----+---------------------
   6 | 2001-02-16 21:00:00
   1 | 2001-02-16 20:00:00
(2 rows)

experiments=# select agrupado_por_hora.hora, agrupado_por_hora.max_val - agrupado_por_hora.min_val
from ( select date_trunc('hour', date) hora, min(date) min_val, max(date) max_val
       from test_group_date
       group by date_trunc('hour',date)
     ) as agrupado_por_hora
;
        hora         | ?column?
---------------------+----------
 2001-02-16 21:00:00 | 00:21:00
 2001-02-16 20:00:00 | 00:00:00
(2 rows)

experiments=#

Para mais detalhes sobre a função date_trunc e outras funções de data. Acesse a documentação do PostgreSQL.

Note que além da date_trunc existe a função date_part. A diferença é que a date_part retorna apenas o pedaço solicitado (ou seja, apenas a hora ou minuto, etc...).

terça-feira, 14 de fevereiro de 2012

HTML5 Rocks!

Este post é curto e simples pois o único intuito é compartilhar com vocês leitores o link do site HTML5 Rocks.

Este site possui diversos guias sobre as melhores práticas no desenvolvimento de aplicações e sites utilizando a tecnologia HTML5.

Se você pode se dar ao luxo de focar-se apenas nos navegadores mais novos (IE9, Chrome, Firefox, Safari, Opera) então considere-se sortudo pois seu código vai ficar mais simples (sem hacks mirabolantes) e seus produtos muito mais bem acabados.

A maior parte dos participantes do projeto acima são funcionários da Google, porém existem desenvolvedores independentes e de outras empresas também.

Apenas lembre-se de não desenvolver apenas para um dos browsers pois você pode limitar demais seu público alvo e não queremos que a web volte a ser o que era antes de 1996.

Abraço a todos.

domingo, 4 de dezembro de 2011

Desenvolvendo jogos 3d no Linux - Ogre3D

Boas notícias, a Irrlicht compilou sem problemas no Ubuntu 11.10 com minha placa nVidia 8800 GT (não entendeu, veja o post anterior ).

Agora como no mundo não faltam opções decidi testar também a engine Ogre3D.

Essa engine possui uma documentação muito melhor do que a Irrlicht e alguns recursos muito avançados para renderização. Vale a pena citar que isso não é uma comparação pois a Irrlicht é uma "game engine" e a Ogre3D é uma "render engine".

Basicamente com a irrlicht você pega a engine, escreve um pouco de código e têm seu jogo. Na Ogre3D apenas a renderização está pronta todo o resto você precisa plugar na engine, nem mesmo detecção de colisão é embutida.

A instalação da Ogre3d (nos dois equipamentos citados no post anterior) foi muito simples e como você pode imaginar o desempenho foi extremamente diferente porém usável em ambos.

Para instalar, acesse o site da Ogre3d, baixe os fontes para sua plataforma (usei linux).

Depois disso, SIGA os passos para compilar a engine.

Feito isso você deverá ter um executável em: <LOCAL DOS FONTES>/build/bin/SampleBrowser

Basta rodar esse camarada e observar as diversas qualidades da engine. Alguns desses exemplos são pesados ou exigem recursos novos e talvez não rodem muito bem dependo da sua máquina.

Como sempre, qualquer dúvida podem deixar um comentário perguntando que tento ajudar.

segunda-feira, 28 de novembro de 2011

Desenvolvendo jogos 3d no Linux - parte 1

Este post é uma maneira de compartilhar minha felicidade que tive alguns dias atrás ao conseguir compilar com sucesso a engine Irrlicht no Ubuntu 11.10.

Para começo de conversa, a máquina que estou utilizando possui as placas integradas Intel Corporation Mobile GM965/GL960 que não são o top de linha no que diz respeito à aceleração 3d.

Apesar dessa limitação, instalando o mesa-utils e rodando glxinfo o sistema informa que possui renderização direta! O que é um bom sinal pois melhora consideravelmente o desempenho das aplicações gráficas (leia sobre o funcionamento do X e DRI para entender melhor).

Depois de tentar, sem sucesso, instalar e rodar os demos da Crystal Space através dos repositórios do ubuntu, decidi tentar a Irrlicht novamente, meu primeiro contato com essa engine foi à +/- 6 anos atrás quando comecei a faculdade de Ciência da Computação e queria aprender C++ e programar jogos (como praticamente todo estudante de ciência da computação que passou a infância jogando snes/doom/duke nuken/shadow warrior).

Na primeira vez que usei a irrlicht foi indicação de um grande amigo da faculdade (rwrz!) e eu ainda tinha o dual-boot com Windows. Tudo correu sem problemas e instalar/configurar a irrlicht no VS Express foi moleza.

Desta vez, instalar ela no GNU\Linux (Ubuntu 11.10 ou Oneric Ocelot) foi mais fácil ainda.
Bastou achar no site a lista completa de dependências, que por sinal, já veio com os comands apt-get para instalar as mesmas.

sudo apt-get install build-essential xserver-xorg-dev x11proto-xf86vidmode-dev libxxf86vm-dev mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libxext-dev libxcursor-dev

Depois disso foi só baixar a SDK 1.7.2, entrar na pasta source/Irrlicht e dar um make -j 2

Compilou que foi uma beleza, sem erros e quase nenhum warning. Após terminar a compilação para testar tudo bastou entrar no diretório de exemplos, 01.Helloworld e rodar make. Um detalhe, o código de exemplo usa renderização vai software ao invés da OpenGL, foi necessário alterar para utilizar a OpenGL para checar se a aceleração estava OK.

Novamente nenhum erro e como resultado um binário impecável na pasta bin/Linux/.

A medida que avançar nos trabalhos com a Irrlicht vou postando mais informações aqui, a próxima etapa é compilar a engine no Ubuntu 11.04 onde tenho hardware bem mais poderoso (nVidia GForce 8800 GT / Intel Quad-Core)

quinta-feira, 17 de novembro de 2011

Guia Postgres - Alterar dono (owner) da tabela.

Este post é mais um da série de guias que venho fazendo, postando aqui códigos e trechos de códigos que ajudaram a resolver algum problema durante o dia-a-dia do desenvolvedor.

Mas vamos ao que interessa, o trecho abaixo troca o owner de todas as tabelas (do schema public) da sua base de dados postgresql pelo onwer que você informar.

UPDATE pg_class SET relowner = (SELECT oid FROM pg_roles WHERE rolname = '$USER') 
 WHERE relname IN (SELECT relname FROM pg_class, pg_namespace 
                    WHERE pg_namespace.oid = pg_class.relnamespace AND 
                          pg_namespace.nspname = 'public');

*Outro link interessante (youtube)

quinta-feira, 13 de outubro de 2011

Uma notícia muito triste para todos programadores do mundo.

Hoje, assim cheguei em casa e comecei a ler as notícias do dia, vi que um grande gênio da computação deixou de nos fazer companhia.

Dennis MacAlistair Ritchie, também conhecido como Dennis Ritchie (dmr) ou pai do UNIX faleceu no final de semana passado.
A notícia foi dada pelo site G1 e também pelo amigo dele Rob Pike.

Dennis juntamente com Ken Thompson trabalharam muitos anos na Bell Labs desenvolvendo tecnologias que permeiam nossas vidas até a data presente. Uma delas o belo sistema UNIX que acabou gerando diversas variantes e sendo base para os sistemas mais avançados existentes atualmente foi criado por Dennis.

O UNIX serviu de inspiração para o sistema GNU\Linux e no BSD que por sua vez foi a base dos sistemas que rodam nos computadores da Apple (Mac OS)

Além disso, Dennis também criou a linguagem C provavelmente uma das melhores e mais simples linguagens já criada. A filosofia UNIX de manter as ferramentas simples e bem feitas, as vezes citado como: "Do one thing and do it well" (Faça uma coise e faça bem feito).

O sistema UNIX é uma das peças que tornou possível o que conhecemos hoje como a Internet e que dependemos para praticamente tudo (transações financeiras, compras on-line, conversas e video conferências, etc).

Espero que o Mundo posso entender o alcance das mudanças provocadas por esse hacker e gênio da computação.

Da próxima vez que você acessar a internet ou abrir um aplicativo em seu computador/celular/notebook/geladeira/televisão/carro lembre-se que se não fosse pelo UNIX e pela linguagem C você provavelmente iria estar assistindo TV ou ouvindo Rádio.

Descanse em paz, Dennis Ritchie.

RIP dmr, my sincere condolences to his family and friends.

Notícia do G1 sobre a morte de Dennis Ritchie

Post do Rob Pike (amigo de Ritchie) sobre o falecimento do mesmo.

quarta-feira, 15 de junho de 2011

Guia prático do VIM - Removendo search highlight

Essa dica vai para quem gosta de destacar as buscas de strings no VIM, porém fica irritado quando entra em modo de inserção e os trechos encontrados continuam em destaque.

"" Clean the hlsearch when entering/leaving insert mode.
set hlsearch
autocmd VimEnter * :let @/=""
autocmd InsertEnter * :noh
autocmd InsertLeave * :noh

Referência http://superuser.com/questions/156248/disable-set-hlsearch-when-i-enter-insert-mode.

O event VimEnter descobri lendo um pouco da documentação do VIM, disponível no próprio VIM ou então em: http://vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-events