t.i.

Publicações arquivadas desta categoria

Animação básica em Java: sprites

Publicado por mogli__ em 12 Jun 2007 | sob: t.i.

Faltou dizer: pretendo fazer alguns posts técnicos na área de TI, talvez até criar outra categoria.
Percebi o quanto ajudam blogs e fóruns ao redor da internet, e é - no mínimo - ético fazer o mesmo. :)

Comecei a pesquisar sobre animações em Java forçado pela necessidade de desenvolver um jogo, requisitado como trabalho semestral de uma disciplina da graduação.
Na verdade o foco da questão é a análise do sistema, mas como prefiro o código àquelas caixinhas de necessidade discutível que a UML oferece, deixei isso para o resto da equipe, lendo apenas o necessário para não bancar um fantoche nas aulas.

Partindo de alguns sussurros “utilize sprites…” para o começo da pesquisa, achei várias fontes de material muito – muito, indeed – bom. Destaco o Developing Games in Java e o Killer Game Programming.
Créditos destas duas referências ao colega Cláudio Raso, integrante da equipe.

A seqüência foi ler os códigos fornecidos em paralelo com o conteúdo. Alguma coisa foi compreendida desta forma, mas o que mais ajudou foi um exemplo deveras simples, que me inspirei em fazer ao seguir o que nosso Professor tanto diz: quebre a complexidade.

Ok, um jogo pode ser algo que leve meses para ser desenvolvido. As variáveis, os controles, as condicionais… Pode ser impossível de começar se pensarmos assim.

fundo - fundo chao - chao esfera - esfera

O exemplo que eu segui, que é o código disposto aqui, trata-se do seguinte conjunto: um fundo, um chão e uma esfera. A esfera deve mover-se de acordo com as teclas esquerda e direita, respeitando os limites da tela.
O jogo deve ser encerrado quando a aplicação for fechada.

Temos aí os casos de uso e os requisitos funcionais do sistema, para quem deseja fazer pontes com a análise.

I wanna code!

É interessante abstrair qualquer conhecimento sobre layouts (Gridbag e afins), porque a exibição dos componentes gráficos – na minha sugestão – não segue este tipo de procedimento.

Cada elemento é “pintado” na tela – herdeira do Frame (isso, AWT mesmo) – com o método drawImage. Existem várias alternativas para isso (drawString, drawRect…) que podem ser muito úteis, mas não são necessárias no nosso exemplo.

Este método tem quatro parâmetros: a imagem, a coordenada X, a coordenada Y e um observador – que é o próprio objeto.

Se o canto superior esquerdo da janela é a coordenada (0, 0) e eu mostro um desenho a partir destes valores, será que não podemos seguir a exibição quadro a quadro dos desenhos animados para montar o nosso jogo? Pensemos assim:
. Tempo 1: exibir a esfera em (10, 50);
. Tempo 2: exibir a esfera em (11, 50);
. Tempo 3: exibir a esfera em (12, 50);
. Tempo 4: exibir a esfera em (13, 50);
Fica fácil concluir que a esfera está se movimentando horizontalmente para a direita, certo?

Para tanto, precisamos incrementar o valor X da esfera e chamar o método draw repetidas vezes. É… duas coisas diferentes, quase simultâneas. Se você pensou “programação paralela?!” está no caminho certo.
Na verdade é uma vertente bem mais simples do que a ciência da programação paralela, vamos apenas lidar com uma Thread, porque temos mais de uma tarefa para ser executada o tempo todo: incrementar o X da esfera (de acordo com o teclado, é claro) e “pintar” o desenho.

Aqueles livros indicados anteriormente dão uma boa explicação sobre Threads, desde a compreensão inicial até a forma de implementar. Não é complicado e não vou me ater a isso aqui.

Maravilhoso, nossa teoria está quase pronta. Basta que verifiquemos se a esfera ainda não chegou ao limite da tela, pois isso impediria o movimento.

Da mesma forma como a tela, cada imagem tem como ponto (0, 0) o seu canto superior esquerdo. Portanto, se o X da esfera for 0 ela não poderá ir para a esquerda, e se o X mais a largura dela for igual à largura da tela, não poderá ir para a direita. Portanto:
. Se a coordenada X da esfera for 0, impede movimento para esquerda;
. Se a coordenada X da esfera mais a sua largura for igual à largura da tela, impede o movimento para direita;

marco 0 - marco 0

Em teoria, é isso. Note que não há qualquer solução pronta chamada Sprite. Na verdade, sprite é um conceito de quadro a quadro, até onde eu pude entender.
Para o exemplo que discutimos foram utilizadas quatro classes: LimitePrincipal, Gestor (inner class do LimitePrincipal), ControleEsfera e EntidadeEsfera, como segue:

ControleEsfera
- aEntidadeEsfera
+ ControleEsfera()
+ caminhaDireita()
+ caminhaEsquerda()
+ confereColisaoDireita(int)
+ confereColisaoEsquerda(int)
+ getImagem()
+ getX()

EntidadeEsfera
- aImagemEsfera
- aX
+ getImagemEsfera()
+ serImagemEsfera(Image)
+ getX()
+ setX(int)

LimitePrincipal
- aControleEsfera
- aGestor
- aImagemChao
- aImagemFundo
- aThread
- serialVersionUID
+ LimitePrincipal ()
+ criaTela()
+ movimentoDireita()
+ movimentoEsquerda()
+ run()
+ paint(Graphics)
+ main(String [] args)

Gestor
+ keyPressed(KeyEvent)
+ keyReleased(KeyEvent)
+ keyTyped(KeyEvent)

Copie, melhore e devolva: :D
. Fonte;
. Imagens;

Não há duvida de que a maneira exposta é extremamente simples. Podem ser utilizados os demais métodos do listener, pode ser criado um controle de aceleração, pode variar a coordenada Y, pode… Enfim, há diversos recursos e possibilidades que foram abstraídos para facilitar o entendimento, e espero que tenhamos atingido isso.

Questione, comente, sugira.
Façamos da colaboração nossa ferramenta de evolução.

Faltou dizer: a orientação a objetos do exemplo está bem fraca e eu não expliquei o modelo MVC que foi utilizado porque não são o foco da questão. Ilustrou-se, apenas, uma das maneiras de realizar movimentos em Java. ;)

TI modular

Publicado por mogli__ em 13 Mar 2007 | sob: t.i.

Avaliando o comportamento dos departamentos de TI atuais, vários aspectos são confrontados com alguns dogmas do início dessa ciência.
Dentre eles, temos a divisão das atribuições do departamento através de contratos com terceiros, caracterizando a prática do outsourcing na área de tecnologia.

Este bom hábito facilita muito o controle das operações de TI. Os gestores que, em dado momento, precisavam ocupar-se em planejar o orçamento estratégico e dimensionar um upgrade nas estações, por exemplo, delegam esse trabalho para o parceiro responsável por isso.
A organização ganha, diretamente, por não investir em bens de depreciação rápida, como são os equipamentos de tecnologia. Além disso, todos os custos agregados, como suprimentos e manutenção, também são responsabilidade da terceirizada.

É evidente que essa prática tem limites quando entra na questão de customizações e sigilo das informações. Mesmo assim, estas linhas não se contrapõem à idéia, e sim norteiam os termos dos contratos de prestação de serviço.
Por estas mesmas razões que, geralmente, os contratos de outsourcing em TI visam as áreas mais práticas do setor.

Uma vez assinados os contratos, a dependência da organização - mesmo com toda a força legal - na empresa contratada é considerável. Tendo isso em mente, deve-se tender sempre a manter uma relação de parceria, no lugar do clássico cliente-fornecedor.

Devem ser claras também as modificações de filosofia de uma TI corporativista para um departamento de TI com serviços terceirizados. Haverá diminuição no quadro funcional, porém a equipe terá acréscimo em polivalência e responsabilidade. O fato de um determinado serviço ser prestado por terceiros não tira a atribuição do setor de TI, que deverá cobrar e controlar a prestação desse serviço e sua boa qualidade.
A Fujitsu, referência em soluções de TI, publicou os 7 passos para outsourcing em TI, que descrevem algumas das modificações na organização e no departamento de TI interno.

Desprendendo-se de detalhes operacionais, os colaboradores poderão focar no negócio da organização. Além disso, a economia proveniente desses contratos de prestação de serviço permitirá também investimentos mais adequados para o desenvolvimento da corporação.

Dividir a TI em módulos e deixar que cada especialista cuide do seu é uma ótima maneira de ter sempre equipamentos e serviços atualizados, de boa qualidade e bem administrados.

What does IT stand for?

Publicado por mogli__ em 06 Mar 2007 | sob: t.i.

Engraçado como uma troca de paradigma geralmente vem acompanhada de um novo nome para o objeto em questão. Você não pode passar a observar um sistema sob um determinado ângulo e, quando alterada essa visão, continuar a chamá-lo do nome antigo.
É um pouco romântico, mas é verdade.

Seguindo esse sentido - claro, com razões técnicas, teóricas, de postura e métodos… Além do romantismo - estamos utilizando a sigla TI - Tecnologia da Informação - como o conjunto dos recursos técnicos e administrativos, físicos e virtuais, práticos e abstratos, que tratam das soluções desenvolvidas e mantidas pelas tecnologias da informação em âmbitos corporativos e pessoais.
Como pode ser visto, progredimos de conceito, paradigma e nome, em relação à anciã Informática.
Não, nenhuma crítica. Aliás, anciã foi um elogio. É a origem da ciência, nunca poderá ser menosprezada.

Esse novo conceito foi muito bem recebido pela comunidade, de modo geral. Se puxarmos pela memória, há alguns anos o endereço do site de um programa de televisão aparecia, em letras miúdas, no final dos créditos. Hoje é o próprio nome! Está na logomarca!
Na publicidade, é mais comum você ter o site do que o telefone. Claro, ele tende a fornecer mais informações, de maneira mais prática e barata.
That’s evolution, baby.

Certo… De cálculos matemáticos, para alguns recursos tímidos e inexpressivos… Crescendo… Dominando os meios de comunicação, ok vamos devagar aqui. Quantos cursos de graduação temos na área? É, muitos. Ótimo! Tudo isso, muito bom.
Não é?
Acho que você pensou demais para responder…

Existe uma piadinha, antiga mas muito criativa e - dói dizer isso - com certa verdade: a informática veio solucionar problemas que não existiam.

P***, virei a mesa. É exatamente este o calo. As TI cresceram, e continuam, em uma evolução de projeções geométricas. Certo, é o futuro. Mas será que o foco não está sendo perdido?

Pensem com clareza. O Sr. João - homem digno e íntegro, preocupado com a família e freqüentador das missas dominicais - abre uma empresa de sapatos. Ora ora, Sr. João, mas que maravilha! Muito sucesso para o senhor. Agora, veja bem, será que a sua empresa não precisa de um site? É bastante importante. E, por que não, um sistema para controle contábil. Sim, o senhor sabe, esse trabalho manual todo pode ser facilitado.
E assim vai.

Dentro de 06 meses o Sr. João está tendo uma úlcera porque o sistema não emite o balanço fiscal e os auditores do governo estão respirando bem perto da nuca dele.
Pobre homem, tão íntegro que era.

Esse quadro - exagerado, claro, mas muito sincero - está sendo repetido o tempo todo. Hoje mesmo o IDG Now! publicou uma matéria sobre os dramas do ERP. Céus, vejam só: ele, que era a estrela de pouco tempo atrás, virando tema de dramas!

Proponho aqui um novo foco de direcionamento dos recursos de TI. Confúcio não precisou conhecer nenhuma automação em workflow para dizer que não se deve usar um canhão para matar um mosquito.
Isso porque um conceito precisa ser fortemente fixado nos profissionais de tecnologia - e em tantos outros, é claro: ferramenta.
No link acima, a definição é perfeita: um dispositivo que forneça uma vantagem mecânica ou mental para facilitar a realização de tarefas diversas.

Este conceito, concatenado aos ensinamentos do mestre chinês, mostra claramente que uma ferramenta deve ser adequada ao trabalho para o qual foi desenvolvida. Adequada.
Se você precisa de um martelo que não machuque as mãos, você emborracha o cabo. Se é para uma criança utilizar, você faz com peças de plástico, para ser mais leve. Se deve ser eficiente e será manejado por um adulto, você o deixa mais pesado.
As ferramentas são adequadas ao trabalho e ao usuário.

O novo conceito, e sua nova sigla, são claros: IT - Information Tools.

Facilite o processo de transformação dos dados. Desenvolva as ferramentas adequadas para que seus usuários tenham as informações corretas, e gerem o conhecimento exato.

Comente, show us your universe!