quinta-feira, 29 de março de 2007

E a revista eletrônica JME Brasil vai sair =)

Bom dia pessoal !!!

Hoje pela manhã depois de trocar alguns e-mails fiquei ainda mais animado com a idéia da revista eletrônica JME Brasil!!
Já tinhamos algumas matérias confirmadas, como por exemplo:

  • Tutorial de JME Game - Parte I
  • IA em JME Games
  • Artigo sobre a criação de um Menu em Canvas com direitos e tudo mais!
Além de mais algumas pessoas que falaram que ia escrever algo, mas sem confirmação do tema ainda.
Mas hoje, conseguimos já mais alguns temas para colocarmos na revista:
  • Conectividade Bluetooth
  • Conectividade HTTP
E se você deseja escrever algo para publicarmos na revista, fique a vontade!!!
Me envie um e-mail com uma sugestão de tema, idéia, how-to, tutorial ou o que você quiser escrever e teremos muito prazer em colocar seu artigo na revista!

Vamos lá pessoal!

Você também faz parte dessa comunidade!!!!!

[]s
Neto

segunda-feira, 26 de março de 2007

Menu utilizando Canvas - Estilo Nokia, Sony Ericsson...

Sejam bem-vindos novamente ! :-)

Meu post hoje é para mostrar a vocês um menu que criei utilizando Canvas e me inspirando um pouco nos menus da Nokia (série 60, série N, etc), Sony Ericsson, entre outros modelos que mesclam figuras e textos.

A figura ao lado mostra o celular N95 da Nokia que utiliza esse conceito de Menu.

Funcionamento básico:
É um menu compo
sto por figuras, onde existe um "quadrado" de seleção que fica de fundo das figuras conforme o usuário navega pelas opções. O nome da opção é mostrado como título e fica no alto da tela ( o posicionamento exato depende da implementação de cada fabricante).

As figuras abaixo mostram o menu no emulado da Nokia para série 40 (duas primeiras imagens, sendo a segunda a continuação da primeira) e a ultima imagem uma figura do emulado para série 60.

Porque fiz esse menu?
Utilizo esse menu como o menu principal das minhas aplicações, e da forma como estava antes (eu fixava a quantidade de imagens por linha, e não havia scroll dos icones) eu tinha sérios problemas com modelos diferentes e telas diferentes, pois fiz a montagem inicial me baseando nos celulares da Série 40 2ª edição da Nokia (com um visor de 128x28).
Então resolvi criar um menu novo, onde a própria classe faria os cálculos de como posicionar as imagens na tela e assim não teria problemas com as diferentes telas de celulares.

Como reutilizar o menu?
Depois de fazer o dowload do menu, você irá encontrar o arquivo MenuNokiaStyleCanvas.java que é o menu em si.

Nessa classe você irá alterar apenas TRÊS variáveis:

  1. widthIcon: Largura do ícone em pixels.
  2. heightIcon: Altura do ícone em pixels.
  3. margemQuadrante: Margem do quadrante, servirá de base para desenhar o fundo que serve de indicação de seleção

Além disso, a carga com os dados de cada opção do menu será encontrada no método protected void carregaOpcoes(). Também coloquei alguns comandos para exemplificar alguns pontos e demonstrar outros.

E o código foi comentado da melhor maneira possível (na minha opinião) para que conforme você vá lendo o código, consiga entendê-los! ;-)

Esse menu ainda é uma primeira versão, pretendo adicionar diversas funcionalidades, mas acho que serve de base pro pessoal que ta começando e não tem muita noção de como fazer um menu sem ser aqueles terríveis lists !!! ;-)

No zip disponível, é possível encontrar o .jad e o .jar caso deseje testar o menu.
Arquivo disponível em: http://weblogs.java.net/blog/netomarin/archive/examples/MenuNokiaStyle.zip

[]s a todos!!!!

sexta-feira, 23 de março de 2007

Mais uma opção GSM no Brasil

Como a maioria já devia saber, a Vivo havia anunciado que iria construir uma rede GSM e passar a disponibilizar essa forma de telefonia para seus clientes. O motivo principal alegado oficialmente é de que queriam dar mais opções aos seus clientes que poderiam optar pelo uso de GSM.
Porém, o que circulou foi que na verdade, a migração para 3G da rede CDMA seria muito cara e também estavam tendo muitos custos com os royaltes pagos a Qualcomm.

Bom, e o que isso interessa para nós?
De acordo com a matéria no WNews ( Vivo já tem mais de 300 mil clientes GSM ), já existem em circulação mais de 300 mil aparelhos Vivo GSM no mercado, ou seja, mais 300 mil devices que suportam Java.
Resta saber, se a Vivo não fez nenhum bloqueio nesses celulares, o que não seria de se espantar.

É isso ai, e fiquem ligados porque amanhã irei disponibilizar para vocês um menu no estilo dos menus da Série 60 da Nokia aqui no meu blog.

[]s a todos!

sábado, 17 de março de 2007

(Não) Usando POO em JME

Normalmente, os programadoes que dão seus primeiros passos no JME tendem a trazer velhas (e boas) práticas da programação do Java "convencional" (JSE e/ou JEE), principalmente a forte utilização da POO (Programação Orientada a Objetos) e a utilização de padrões de projeto (os famosos Design Patterns).

É indiscutivel que essas práticas trouxeram inúmeras vantagens em relação a se desenvolver sem utilizá-las. Porém sua utilização no JME deve ser bem entendida e usada com extrema cautela para que o ganho em produtividade e reaproveitamento de código não se tornem causa de perda de desempenho e aumento do tamanho ocupado em memória pela aplicação - lembrando que os dispositivos que usam JME são bem mais limitados do que os que se utilizam de JSE e/ou JEE.

Porém, a palavra "limitado" para caracterizar os dispositivos que implementam o JME não é exagero, pois eles realmente possuem limitações em memória, armazenamento e processamento. Por isso, qualquer ganho de desempenho e memória por menor que seja se torna significativo, principalmente quando levamos em conta os recursos que temos disponíveis no celular. A uma hora dessa você já deve estar perguntando: "Então quer dizer que devo diminuir a criação de novos objetos e classes porque isso custa muito caro ?"

Você não precisa necessariamente sacrificar suas idéias de orientação a objetos ou deixar de usar um determinado pattern. O que se deve fazer é analisar o cenário da sua aplicação e adaptar o que já existe para as limitações dos devices. Então, o que se deve levar em consideração sobre ao excesso uso de orientação objetos? Veja abaixo:

  • O overhead natural da linguagem Java que é adicionado na geração do byte code a CADA CLASSE.
  • O custo para se executar o carregamento de cada classe nova gerada quando é utilizada.
  • O custo gasto para se alocar/desalocar a memória heap da classe em questão.
  • O custo para a montagem da pilha de execução e montagem do escopo da classe e dos métodos.
  • Além de se aumentar o número de objetos que o garbage collector precisa inspecionar.
O que fazer então para que todos esses custos se tornem o minimo possível ?
Algumas medidas podem ser tomadas, como por exemplo:
  • Atribua/recupere os valores diretamente das variáveis. Os métodos get/set fazem sua aplicação perder tempo entrando em um método, montando a pilha de execução, definindo o escopo da execução, etc.
  • Tente reutilizar ao máximo suas variáveis e assim evitando a perda do tempo que a KVM leva para fazer o class loader.
  • Quando for criar uma nova classe derivada de outra análise ao máximo se realmente precisa criar uma classe nova ao invés de usar as classes já existentes adicionando a elas os componentes do JME.
  • Somente crie novas classes quando precisar realmente adicionar algum comportamente diferente ao já existente na classe. O tratamento de comando não precisa ser feito especificamente dentro do componente que possue o comando, PENSE NISSO!!
  • Projetar suas novas classes que tenham o máximo de caracteristicas para que sejam reaproveitadas ao máximo, por exemplo: Quando for criar uma classe nova de personagem para o seu jogo, tente fazê-la de modo que todos os personagens usem a mesma classe, mudando apenas os atributos.
As vezes, o que não parece elegante do ponto de vista de POO ou de algum design pattern pode ser a diferença entre o sucesso e a falha de sua aplicação, pois ela roda em um dispositivo que na maioria das vezes não é o computador principal do usuário e mesmo assim o usuário quer respostas rápidas e precisas!
Abaixo estão dois artigos nos quais me baseei para escrever essa minha pequena contribuição para o melhor desempenho da sua aplicação.

Por isso, como eu sempre digo: Don´t think BIG! Think MICRO! JME!!

Referências: