Open source APIs para J2ME

Setembro 27, 2007

Pessoal aqui vai um resumo de apis J2ME focadas em desenvolvimento de GUIs para J2ME. Vale a pena dar uma olhada. Não tem todas APIs aqui, mas já é um começo. Até mais.

Apime

Apime é um framework que oferce mais funcionalidades a J2ME/MIDP. O núcleo das funcionalidades é interface gráfica, contendo componentes para construir aplicações com a estrutura do Swing de J2SE. Também inclui classes para controle de arquivos e customização de skins.

URL http://www.java4ever.com/…project=apime…
Licença GNU General Public License (GPL)

 

byblos

Uma coleção de componentes customizados para J2ME.

URL http://code.google.com/p/byblos
Licença Apache License 2.0

 

Fire (Flexible Interface Rendering Engine)

Fire (Flexible Interface Rendering Engine) é uma biblioteca que foca em prover componentes fáceis de serem utilizados por desenvolvedores J2ME. Fire provê o básico de J2ME (combos, listas, forms, item) mais customizações nesses componentes. Essa biblioteca não depende de aparelho ou tamanho de tela em específico, podendo ser portada para qualquer aparelho.

URL http://www.bluevibe.gr/fire.html
Licença GNU Lesser General Public License (LGPL)

 

J2ME Lightweght Visual Component Library (LwVCL)

LwVCL suporta tanto J2SE e .NET. Agora possue uma versão de rascunho para J2ME MIDP.

URL http://www.lwvcl.com/j2me.php
Licença GNU General Public License (GPL) and Zaval Commercial License (ZCL)

 

jMobileCore

A biblioteca jMobileCore é um poderosa ferramenta para criação de GUIs para J2ME. Simplifica a tarefa do desenvolvedor provendo suporte a ricas GUIs e rápido acesso a dados no celular.

URL http://jmobilecore.sourceforge.net
Licença GNU Library or Lesser General Public License (LGPL)

 

MWT (Micro Window Toolkit)

Inspirado no seus irmãos mais velhos como AWT, Swing e SWT, MWT entra em cena para a construção de UIs otimizados para celulares.

URL http://j2me-mwt.sourceforge.net
Licença GNU Lesser General Public License (LGPL)

 


Smartphones da pesada

Setembro 25, 2007

Para quem gosta de smartphones (e tem grana pra gastar), vai ai duas sugestões de modelos que são os tops de linhas (tops até as redes 3G, alguém já viu um celular 4G?) e que estão disponíveis no Brasil através de importadoras:
HTC Tytn 2
Nokia E90

Existem outros modelos interessantes mas esses me chamaram atenção pela quantidade de recursos. Pena que o E90 não seja touch screen. Até mais


VML – Um objeto de aprendizagem para engenharia

Setembro 19, 2007

No ano de 2005 e 2006 realizei uma pesquisa científica na PUC Minas através do FIP. O resultado do trabalho é apresentado num resumo das funcionalidades do aplicativo desenvolvido. Mais características sobre objetos de aprendizagem e outras discussões serão apresentadas nos posts a seguir.

VML

Virtual Modelling Laboratory (VML) é um software educacional composto por quatro componentes e um sistema de ajuda. A tela inicial permite acesso aos 4 componentes que são componentes separados mas que estão integrados.

O primeiro componente, o Construtor de Equações Gráficas, permite transformar equações construídas graficamente em equações de texto passíveis de serem interpretadas. Digitalmente, este componente é representado por um painel de desenho e uma barra de ferramentas, com os quais o aluno pode criar equações gráficas, adicionar componentes de uma equação e inserir equações no diagrama em blocos.

O segundo componente, o Construtor de Diagramas em Bloco, permite a criação de diagramas em bloco. Esta funcionalidade foi atingida a partir da criação de códigos fontes originais. Digitalmente, este componente é representado por um painel de desenho e uma barra de ferramentas, no mesmo estilo do primeiro componente, os quais permitem ao usuário criar seus diagramas em bloco com o simples clique do mouse.

O terceiro componente, o Interpretador de Equações, permite interpretar tanto as equações matemáticas construídas no primeiro componente quanto aquelas que o usuário digitar seguindo uma notação padrão. Permite, também, plotar gráficos dessas equações.

O quarto componente, o Visualizador de Animações, permite a visualização de animações previamente elaboradas. Esta funcionalidade foi alcançada através da definição de um problema real e de sua representação por um modelo matemático apropriado, o qual foi simulado por um modelo computacional, viabilizado por um código fonte que criamos.

Para facilitar a exploração da potencialidade destes componentes pelo aluno, criamos um Sistema de Ajuda, descritor do passo a passo de utilização destes componentes.

VML é um objeto de aprendizagem único para o ensino da engenharia. Ele contém certas funcionalidades presentes no Matlab como plotar e interpretar gráficos de uma maneira fácil. Não há funções avançadas como resolução de Integral e Derivada, mas por ser um software gratuito já oferece recursos básicos para a disciplina de Modelagem presente nos cursos. Pretendo adicionar mais informações e iniciar posts sobre a tecnologia de objetos de aprendizagem. Interessados favor entrar em contato sobre o VML, o mesmo pode ser “desmembrado” e utilizado em outros contextos educacionais, como o ensino de matemática básica, ou até uma calculadora avançada. Até mais


J2ME e um resumo de JSRs

Setembro 19, 2007

Encontrei nesse site um resumo das JSRs: MobileZoo. Vou traduzi-las aqui para os maiores interessados:

JSR-30
CLDC1.0 Connected Limited Device Configuration 1.0
A Configuração de Dispositivos Conectados Restritos (tenho certeza que já vi tradução melhor…) define o conjunto básico de APIs e a KVM para dispositivos móveis restritos como celulares, pagers e PDAs. Quando utilizada em conjunto com a MIDP, provê uma sólida plataforma para desenvolvimento de aplicativos Java em dispositivos de capacidade limitada.

JSR-139
CLDC1.1 Connected Limited Device Configuration 1.1
Adiciona o seguinte à CLDC 1.0:
— Suporte a ponto flutuante
— Suporte a weak reference. Não vou entrar em detalhes, mas aqui está a parte do javadoc que trata weak reference:CLDC 1.1 WeakReference

JSR-37
MIDP1.0 Mobile Information Device Profile 1.0
Combinado com a CLDC é a Java Runtime Enviroment de todos os dispositivos móveis atuais que suportam J2ME.

JSR-118
MIDP2.0 Mobile Information Device Profile 2.0
Adiciona o seguinte a MIDP1.0:
— UDP/Sockets/Secure Sockets/Server Sockets e acesso a porta serial
— Suporte a novos formatos de imagem (GIF / JPG / WMB)
— Suporte a PCM (Pulse Code Modulation) no formato wave e outros tipos de som sintético
— Proteção de cópia das MIDlet
— Instalação e descoberta de MIDlets através de outros mecanismos (Infravermelho,Bluetooth,etc)

JSR-271
MIDP3.0 Mobile Information Device Profile 3.0
Adiciona o seguinte a MIDP2.0 (resumo de mudanças retirado de MIDP 3.0 Mudanças:
— Comunicação entre MIDlets;
— Bibliotecas compartilhadas, que são chamadas por alguns sites de LIBlets;
— Múltiplas MIDlets rodando na mesma máquina virtual;
— MIDlets rodando em background;
— Jogos mais ricos;
— RMS com questões de seguranças mais sofisticadas;
— MIDlets poderão desenhar em Display(s) secundários;
— Localização e Internacionalização
— IPv6

JSR-185
JTWI Java Technology for the Wireless Industry 1.0
JSR que tem o intuito de diminuir o problema de portabilidade das aplicações J2ME. É uma tentativa de padronizar as JSRs 30,118,120,135 conjuntamente em todos os celulares que suportarem a JSR185.

JSR-172
WSAPI J2ME Web Services Specification
Acesso a web services através do MIDlet.

JSR-211
CHAPI Content Handler API
Define um modelo de comunicação entre aplicações, permitindo se especificar MIDlets como gerenciadores de conteúdo para um ou mais tipos de arquivos.

WMA1.0 Wireless Messaging API 1.0
— Suporte a Short Message Service (SMS), Unstructured Supplementary Service Data (USSD) e Cell Broadcast Service (CBS)
— Habilidades “Push” (executar um MIDlet ao receber mensagem)

JSR-205
WMA2.0 Wireless Messaging API 2.0
— Extende JSR120 com suporte a Multimedia Message Service (MMS), anexos MIME e mensagens multipart
— Proteção de conteúdo MMS usando Digital Rights Management (DRM)

JSR-135
MMAPI Mobile Media API
— MMAPI suporte a aúdio e vídeo no MIDlet
— MMAPI é um superconjunto da MIDP 2.0 e suas capacidades multimídia, adicionando suporte a captura e execução de imagens, sons e vídeos.

JSR-75
PDAP PIM & File Data API
— Adicionar\Remover contatos de telefone
— Eventos de calendário
— Alarme
— Acesso a arquivos e cartões de memória
— Sem acesso de escrita a áreas de sistema protegida

JSR-82
BTAPI Bluetooth API
— Descoberta de dispositivos bluetooth
— Obtenção do perfil e capacidade dos perfis disponíveis
— Abre fluxo entre os dispositivos conectados

JSR-177
SATSA Security and Trust API
— Suporte ao controle de certificados
— Autenticação de usuários utilizando certificados
— Permite MIDlets comunicarem-se com aplicações baseadas em SmartCard e também com aplicações com propósitos de criptografia em geral

JSR-184
M3G Mobile 3D Graphics
— Biblioteca gráfica 3D eficiente baseada em CLDC/MIDP
— Supporte a API scene graph (alto nível) e API imediata (baixo nível, subconjunto de OpenGL)
— Suporte a funções de importação de texturas, meshs, animações, cenas e hierarquias

JSR-129
PB Personal Basis 1.0
— Provê o ciclo de vida de aplicações Xlet e também ciclo de vida de aplicações Java tradicionais
— Provê um framework GUI para componentes lightweight
— Provê a API completa da Foundation Profile, dispositivos menos restringidos como os PDAs por exemplo

JSR-209
AGUI Advanced GUI
— Swing GUI toolkit da J2SE
— Engine gráfico da Java 2D preservado
— Imaging API e Image load/save framework preservado
— Input Method framework preservado

JSR-179
LAPI Location API
Pacote opcional que permite desenvolvedores escreverem aplicações com base em locais, tipo Locale em J2SE.

JSR-256
MSAPI Mobile Sensor API
API para controle de sensores através de Java com suporte a ligar, desligar e ter mais controles a sensores como IR, BT, etc

JSR-257
CCAPI Contactless Communications API
Pacote opcional para comunicação bi-direcional e acesso de dados de leitura apenas. One-way e bi-direcional captura de dados é interessante para uso em conjunto com dispositivos como RFID, código de barras e outros padrões existentes.

JSR-238
MIAPI Mobile Internationalization API
API para correto controle de formatações e ordenamento de strings de textos e outros recursos com base em características culturais, ex: acento em string, chars diferentes, etc.

JSR-234
AMMSAPI Advanced Multimedia Supplements API
Suplemento da MMAPI, mais informações em Comparando as capacidades multimídia do J2ME em celulares

JSR-226
SVGAPI Scalable 2D Vector Graphics API
Renderização de conteúdo 2D utilizando Scalable Vector Graphics.

JSR-180
SIPAPI SIP API
Provê acesso a aplicações SIP em MIDlets.


Streaming em J2ME

Setembro 11, 2007

Fazendo uma pesquisa no Google descobri algumas coisas interessantes sobre streaming em celular. Primeiramente os celulares devem suportar o protocolo RTP ou RTSP (apesar desse último ser baseado no primeiro não necessariamente o primeiro deve estar explicitamente disponível ao desenvolvedor). Mais informações sobre esses protocolos em:RTSP Wiki e RTP Wiki. Caimos no problema da KVM do celular implementar esse tipo de protocolo. Procurando em fóruns descobri que os seguintes celulares suportam nativamente esses protocolos: celulares Nokia S60 3rd Edition (N91, N80, etc). Alguns celulares Sony Ericsson mais recentes (-800, -750, -600, Z520, -550) implementam rtsp e também alguns celulares Motorola 3G (V975/980, E1000).

Uma idéia interessante para simular streaming em celulares que não suportam nativamente (retirada de um fórum de J2ME, a idéia é interessante mas não testei na prática e parece o tipo de POG que funciona, mas continua POG!) é fazer um vetor de players, cada player busca uma quantidade X de dados. Se o seu arquivo tem 400kb, 10 players cada um busca 40kb. Quando um player da fetch e termina de tocar o outro já está realizando o seu fetch e toca assim que o outro acaba e assim por diante. Na prática o que já testei de fetch de player é que é uma operação “cara” e nem todo celular tem processamento suficiente para fazer isso. Mas está ai uma idéia para “streaming” em celular.

Se o celular suporta nativamente basta você pegar uma lista de protocolos implementados para um determinado tipo de conteúdo (content type que eu vou chamar de CT). Para saber quais os protocolos para esse CT, deve-se utilizar o método getSupportedProtocols(String contentType) que retorna um String array. Se você usar esse método com o CT “audio/x-wav” vai retornar com três valores: http, file and capture no wireless toolkit. Esses protocolos permitem ao desenvolvedor saber quais protocolor podem ser utilizados para adquirir um determinado recurso. O desenvolvedor ainda pode recuperar uma lista de CT a partir de um determinado protocolo. O método getSupportedContentTypes(String protocol)realiza essa função, logo se você passar o parâmetro "capture" o método retorna audio/x-wav e video/vnd.sun.rgb565 para o wireless toolkit. Se você passar null para esses métodos vai retornar todos os CTs e/ou protocolos que uma KVM suporta. Mais informações disponíveis em:Multimedia and MIDP 2.0.

Descobrindo-se se o celular suporta tal protocolo basta fazer uma chamada do player da seguinte maneira:createPlayer(“rtp://www.xxx.yyy.zzz”) e o player irá iniciar o stream no celular. O player se encarregará de dar fetch e bufferizar de tempo em tempo o vídeo.

Da parte do servidor de stream podemos citar dois “Stream Servers” um é o Helix Server da Real Network esse não é gratuito mas possui versão para testes disponíveis em:Helix Server. Outro servidor open source é o Darwin Stream Server disponível em:Darwin Stream Server. Devo disponibilizar nos próximos posts um código fonte unindo o Video Player e um Stream Player. Até o próximo post pessoal!