Criar Aplicativos BlackBerry com Ferramentas de Software Livre, Parte 1: Determinando a Base

Provavelmente, não há nenhuma maior tecnologia transformadora de mercado do que o telefone celular. E nessa classificação de dispositivos, provavelmente, nenhuma mais reconhecida do que BlackBerry da Research In Motion (RIM). A maioria das pessoas pensa que é apenas para e-mail de negócios, mas há um potencial inexplorado nesse viciante dispositivo. Apesar de ser uma plataforma popular, aplicativos de terceiros ainda são necessários para a plataforma BlackBerry. Não há nenhuma melhor maneira de concretizar esses aplicativos do que possibilitar a ajuda da comunidade de software livre. Acompanhe à medida que este tutorial determina a base para um aplicativo de coleta de dados de software livre, sobre a qual um serviço de coleta de dados acessível e de fácil utilização é construído.

Frank Ableson, Software designer

Depois que sua carreira no basquetebol na faculdade chegou ao fim sem um bom contrato para jogar no L.A. Lakers, Frank Ableson mudou seu foco para o design de software de computador. Ele gosta de solucionar problemas complexos, principalmente nas áreas de comunicações e interface de hardware. Quando não está trabalhando, ele passa seu tempo com a esposa Nikki e com seus filhos. Você pode entrar em contato com Frank em frank@cfgsolutions.com.



19/Ago/2008

Antes de Começar

Este tutorial é para desenvolvedores de software livre e tecnologia Java™ interessados no desenvolvimento de aplicativo para BlackBerry no contexto de um aplicativo de coleta de dados remoto. O aplicativo de exemplo demonstra um aplicativo de coleta de dados simples usando as ferramentas de desenvolvimento para BlackBerry disponíveis gratuitamente. A experiência de desenvolvimento remoto é útil, mas não necessário. Qualificações de programação Java são necessárias para aplicativos para BlackBerry, mas não são um requisito explícito para este tutorial. De forma semelhante, PHP e MySQL são empregados no back end, portanto familiaridade com essas plataforma é útil, mas novamente, não é um requisito.

Sobre Este Tutorial

Portanto, por que estamos preocupados em escrever aplicativos para BlackBerry? Um dos desafios de software livre é que frequentemente é visto com uma única face — Linux®— e está frequentemente escondido em um servidor enterrado em um datacenter. No entanto, um dos maiores segredos do mercado é que a plataforma remota mais popular e poderosa usa uma linguagem de programação de software livre: a linguagem de programação Java. Isso mesmo, uma linguagem de software livre ativas os aplicativos nos dispositivos BlackBerry usados todos os dias.

Os aplicativos BlackBerry representam uma convergência interessante de perfil e capacidade de uso. O protótipo de usuário de um BlackBerry é um profissional que usa um BlackBerry para trabalhar. Os dispositivos BlackBerry permitem que as pessoas estejam mais disponíveis em tempo real, pois o Blackberry é o líder atual em uso de e-mail remoto. Mas a plataforma BlackBerry oferece mais do que simplesmente e-mail. Construído com base em um J2ME, RIM estendeu o ambiente Java para fornecer recursos poderosos e desejáveis, possibilitando aplicativos úteis e divertidos para, ao mesmo tempo, negócios e entretenimento. À medida que novas plataformas remotas entram em cena, a referência é o BlackBerry. Se outras plataformas comparam-se ao BlackBerry, há motivação suficiente para explorar os recursos dessa plataforma que mexe com o mercado.

Este tutorial introduz o desenvolvimento de aplicativo para BlackBerry no contexto do espaço de aplicativo de coleta de dados remota. Fornece uma introdução ao desenvolvimento para BlackBerry com uma rápida introdução para a plataforma, um tour das ferramentas de desenvolvimento para BlackBerry e construção de um aplicativo de coleta de dados completo. O código de origem completo está disponível para o aplicativo para BlackBerry e os componentes do lado do servidor usados no aplicativo de amostra na seção Faça download da . Este tutorial está organizado nas seguintes seções:

  • Básico da Plataforma BlackBerry
  • Desenvolvimento de Aplicativo para BlackBerry com JDE
  • Aplicativos de Coleta de Dados com BlackBerry
  • Processamento de Transação do Lado do Servidor
  • Próximas Etapas

Requisitos do Sistema

Este tutorial demonstra algumas tecnologias de software livre e costura as mesmas para formarem um protótipo para uma plataforma de coleta de dados remota de software livre. Você precisa de todas elas para executar as etapas deste tutorial. Nosso principal foco é desenvolver aplicativos para a plataforma BlackBerry, de forma que essas partes sejam o principal requisito. Você pode usar um Web site publicamente disponível para transações do lado do servidor se construir a partir do lado do servidor não for de seu interesse. Segue a lista completa:

BlackBerry Java Development Environment
Este ambiente emprega a V4.0.2 do JDE, apesar de uma versão mais recente estar disponível.
PHP
PHP pode ser transferido por download de PHP.net. O release estável mais recente é a V4.4.9.
MySQL
O release estável mais recente é a V5.0.
Tutorial da IBM sobre Aplicativos de Coleta de Dados para BlackBerry
Acesse o site do autor que hospeda as transações do lado do servidor.

Realces do Código de Amostra

Neste tutorial, um aplicativo de coleta de dados genérico é construído para o BlackBerry. Tem um nome nada inspirador bb_ibm_demo. Mas não deixe o nome enganá-lo. Quando os conceitos apresentados forem absorvidos, um host inteiro de aplicativos úteis aguarda. O código de origem integral está disponível na seção Faça download da . Os trechos de código de origem incluem:

Construtor bb_ibm_demo
É a classe principal do aplicativo para BlackBerry.
Método main() no bb_ibm_demo do aplicativo para BlackBerry
Esse é o método nulo estático público para o aplicativo (o ponto de entrada do aplicativo para BlackBerry).
Construtor bb_ibm_screen
Essa é a interface com o usuário (UI) real mostrada ao usuário no BlackBerry. Esse método demonstra a criação dos elementos da UI.
fieldChanged()
Esse é o método que manipula os pressionamentos de botão na tela da UI no BlackBerry.
ProcessTransaction
Esse método comunica-se do BlackBerry com um servidor através da Internet usando HTTP.
index.php
Essa é a página inicial de nosso aplicativo do servidor de amostra. A partir daqui, é possível ativar uma procura para obter transações transferidas por upload anteriormente.
db.php
Gerencia a conexão com o banco de dados MySQL.
export.php
Fornece uma exportação para o arquivo CSV de transações transferidas por upload.
manage.php
Gerencia transações transferidas por upload. Agregue a esse arquivo sua própria funcionalidade.
showtransactions.php
Exibe quaisquer transações carregadas para um identificador específico.
posttransaction.php
Essa rotina do servidor funciona lado-a-lado com ProcessTransaction no BlackBerry para registrar dados coletados no campo.
utils.php
Esse arquivo contém funções assistentes para gerenciar transações no servidor.
db.sql
Esse script contém a data-definition language (DDL) para criar a tabela de transações usadas no servidor.

Básico do Blackberry e o JDE

Antes de iniciar a instalação do BlackBerry JDE e construir um aplicativo, vamos introduzir os principais componentes da plataforma BlackBerry. Depois de os fundamentos serem apresentados, vamos examinar o JDE.

Conheça o BlackBerry

Historicamente, o BlackBerry sempre foi uma plataforma de sistema de mensagens. As primeiras versões dos dispositivos RIM eram pagers bidirecionais glorificados. Expandindo desse início simples — e importante — , o BlackBerry de hoje é um ambiente de telefone, texto, e-mail e aplicativo rico integrado, incluindo recursos de mídia e GPS em dispositivos mais novos. Diferentemente de outros dispositivos mais modernos que ostentam telas sexy de toque e hardware cheios de recursos, o BlackBerry é um dispositivo capaz e tátil, ideal para o usuário de negócios poderoso e o usuário de sistema de mensagens de texto poderoso.

Opções de Comunicações de Rede

Todas as comunicações entre um dispositivo BlackBerry e a Internet ocorrem através de centros de dados RIM. A comunicação entre o dispositivo e RIM é realizada usando-se um protocolo seguro. Se você tiver um BlackBerry, você executará sob um dos poucos cenários diferentes:

BlackBerry Enterprise Server (BES)
Redes corporativas empregar um BES como meio para gerenciar dispositivos de usuários remotos e conectar os dispositivos a servidores de e-mail corporativos. A comunicação através da rede RIM e uma instância de um BES é integralmente segura; não há nenhuma parte de texto simples dessa comunicação através da Internet.
BlackBerry Internet Service (BIS)
Esse é o serviço que a maioria dos consumidores e usuários de pequenas empresas empregam, já que possui os custos de licenciamento mais baratos e nenhum requisito de hardware adicional além de um dispositivo BlackBerry. O BIS funciona configurando-se suas contas de e-mail no Web site do RIM e, de forma automaticamente mágica, seu e-mail aparece em seu BlackBerry. A comunicação entre RIM e seu dispositivo é segura, mas a conexão entre RIM e seu servidor de e-mail pode ou não ser segura, dependendo do tipo de provedor de e-mail usado.
Redirecionador de Desktop para o Outlook
O redirecionador conecta ao data center RIM a partir de uma sessão local do Microsoft® Outlook® em execução em um computador local. Nesse cenário, o programa Outlook deve permanecer com login efetuado para que e-mail flua para o dispositivo BlackBerry. Esse não é um cenário ideal para o verdadeiro usuário remoto que possui um laptop, em vez de um computador desktop. Se o laptop estiver em sua bagagem com você no trem, não há e-mail remoto.

Executar sob um ambiente BES fornece o maior controle e opções para aplicativos e execução de política de TI. Por exemplo, um administrador de TI pode evitar que usuários acessem determinados sites da Internet, restringindo, assim, o uso do dispositivo somente para negócios. Além disso, determinados recursos do aplicativo "push" são ativados com um BES. Os tópicos deste tutorial aplicam-se de forma universal independentemente do ambiente sob o qual um BlackBerry específico opera. A única suposição feita é que um plano de dados que permita acesso à Internet seja permitido. É claro, se você tiver um BlackBerry restringido em relação a quais sites da Internet podem ser visitados, pode ser necessário convencer seu administrador de TI a abrir o acesso ao servidor do aplicativo de amostra.

Características do Dispositivo

Há algumas características físicas de um dispositivo BlackBerry que vale a pena mencionar:

Teclado QWERTY
Os dispositivos BlackBerry há muito tempo se distinguem por seu teclado integral QWERTY — uma exigência para usuários remotos que usam muito texto. Os botões táteis também são bons para atalhos de teclado — um recurso sofrivelmente ausente em dispositivos que não possuem botões físicos.
Track wheel
O track wheel é essencialmente um botão de seleção na lateral de seu BlackBerry. O track wheel é usado para navegar pela interface com o usuário, pois os dispositivos BlackBerry não possuem uma tela de toque. O track wheel é "selecionável", o que significa que pode ser pressionado para fazer uma seleção na GUI. Pressionar o track wheel é análogo a "clicar" o mouse em um computador desktop. Manter o botão Alt pressionado no teclado modifica o comportamento do track wheel em uma interface com o usuário. Os dispositivos mais novos têm um track ball, que age de forma semelhante ao track wheel.
Botão Escape
Esse botão age como um botão voltar, movendo o usuário uma etapa para trás na navegação.
Aplicativos Ribbon vs. não-Ribbon
Os ícone dos aplicativos na tela principal são referidos como Ribbon. Aplicativos customizados, como o construído neste tutorial, residem dentro da pasta Applications no Ribbon.
Comunicações por Bluetooth
Além do fone padrão de Bluetooth para ser usado sem o auxílio das mãos, muitos dispositivos BlackBerry suportam o perfil de porta serial Bluetooth. Isso permite que aplicativos sofisticados sejam escritos para um BlackBerry. As ideias incluem comunicar-se com um receptor GPS, imprimir ou carregar firmware em um dispositivo integrado, como um dispositivo ou uma máquina de vendas.

A Figura 1 realça algumas dessas características físicas.

Figura 1. Dispositivo BlackBerry
BlackBerry device

Agora vamos examinar o desenvolvimento do aplicativo para BlackBerry.

BlackBerry JDE

De uma perspectiva de software, os dispositivos BlackBerry são ativados por Java e fornecem uma excelente plataforma para desenvolvimento de aplicativos. Diferentemente de alguns telefones com capacidade de J2ME, em que executar um aplicativo parece com saltar para o outro lado do telefone como que através de uma "inicialização dupla", o aplicativo ativado no BlackBerry possui uma sensação natural e integrada. Na verdade, a integração é tão forre que aplicativos de terceiros podem até mesmo incluir menus customizados para muitos dos principais aplicativos para BlackBerry. Ter um entendimento sólido da linguagem Java é útil para construir aplicativos para BlackBerry.

Este tutorial foca o uso do BlackBerry JDE. Há diversas versões do JDE disponíveis para download a partir do Web site do RIM. Essas versões distintas correspondem a revisões de software encontradas no hardware do BlackBerry. Por exemplo, usar uma versão mais antiga do JDE pode ser uma boa ideia quando o aplicativo tem como meta funcionar no maior número de dispositivos possível, incluindo dispositivos mais antigos, que podem ter um conjunto de recursos mais limitado. Isso pode parecer com escrever um aplicativo que não requeira uma câmera ou verdadeiros serviços de GPS. Usar um denominador menos comum pode ser uma boa ideia ao construir um aplicativo comercial, pois quanto maior o número de dispositivos capazes de executar o aplicativo, maior a oportunidade para venda do produto.

O que Está Incluído?

Os pacotes de download do ambiente de desenvolvimento disponíveis do RIM consistem em mais do que simplesmente um editor de código gráfico e ferramentas de compilação. Recursos do RIM incluem:

Editor de código gráfico
Isso parece semelhante a outros ambientes de programação, oferecendo gerenciamento do projeto do aplicativo, edição de código e depuração.
Simuladores de dispositivo
Possibilitam que o ciclo de codificação, compilação e depuração ocorra diretamente no computador de desenvolvimento. Essa é uma excelente vantagem sobre fazer testes somente no dispositivo real. Boas práticas de codificação sugerem que os testes ocorram no dispositivo antes do release de um produto. No entanto, o uso o simulador economiza muito tempo durante a fase de desenvolvimento. O uso de simuladores também pode ser uma parte importante do processo de suporte do aplicativo, pois um usuários pode relatar uma anomalia que ocorre somente em um dispositivo específico. Por exemplo, um aplicativo que escrevi funcionava bem na maioria dos dispositivos, mas o 8700c demonstrava um comportamento estranho. Usando o simulador, fui capaz de isolar o problema e encontrar uma solução. Uma boa ideia é testar, periodicamente, seu aplicativo nos simuladores dos dispositivos mais recentes à medida que são disponibilizados. Essa é uma alternativa mais barata do que comprar cada novo dispositivo que chega ao mercado. O simulador também é um mecanismo conveniente para documentar um aplicativo — realizar uma captura de tela é simples.
Referência de API
Uma referência de API conveniente e detalhada está incluída no download do JDE.
Simulador de MDS
Esse software simula a o tráfego de comunicação entre um BlackBerry real e a rede do RIM. Sem o simulador de MDS em execução, o simulador do dispositivo BlackBerry não pode se comunicar com hosts na Internet.
Simulador de E-mail
O JDE também inclui um simulador de e-mail. Como grande parte da operação de um BlackBerry está relacionada a e-mail, é uma boa ideia usar o simulador de e-mail. Ele permite que os aplicativos testem a funcionalidade relacionada a e-mail.

De uma perspectiva de código, os aplicativos BlackBerry usam classes J2ME, assim como Interfaces de Programação de Aplicativos (APIs) especialmente estendidas. Essas APIs têm alguma sobreposição com os pacotes J2ME. No entanto, as classes fornecidas pelo BlackBerry são de excelente interesse devido ao poderoso acesso que fornecem a um BlackBerry.

Se seu objetivo aqui é seguir adiante construindo o aplicativo de amostra, leve alguns instantes agora para instalar uma versão do BlackBerry JDE. A seção Requisitos do Sistema inclui um link para a página de download do JDE no Web site do RIM.


Um Aplicativo para BlackBerry

A melhor maneira de aprender é fazendo, portanto, vamos começar logo e construir um aplicativo de coleta de dados para BlackBerry. Cada elemento principal do aplicativo de amostra do tutorial é examinado, incluindo os trechos de código de origem relevantes.

A Classe Application class

Este tutorial cria um único aplicativo, que será construído por partes ao longo do tutorial. O primeiro trecho de código a revisar encontra-se em bb_ibm_demo.java. Você pode fazer fazer download de todo o código de origem para este tutorial a partir da seção Faça download da .

Como qualquer aplicativo Java básico, um aplicativo requer um ponto de entrada, especificamente main. Partes do arquivo de origem bb_ibm_demo.java estão incluídas abaixo.

Listagem 1. Método main do Arquivo bb_ibm_demo.java
//
// bb_ibm_demo.java
//
// MSI Services, Inc.
// Frank Ableson
// 973.448.0070
// fableson@msiservices.com
// código gratuito para ser usado para qualquer propósito, comercial ou outro

package com.msi.ibm;

// importações necessárias
import net.rim.device.api.ui.*;

// nossa classe de aplicativo
class bb_ibm_demo extends UiApplication
{

    // ponto de entrada do aplicativo
    public static void main(String[] args)
    {
        // crie uma instância para nosso aplicativo
        bb_ibm_demo theApp = new bb_ibm_demo();

        // "executar" o aplicativo
        theApp.enterEventDispatcher();
    }


    // construtor do aplicativo
    public bb_ibm_demo()
    {

        // crie uma instância da tela principal de nosso aplicativo
        bb_ibm_screen screen = new bb_ibm_screen();

        // torne a tela visível
        pushScreen(screen);
    }
}

O main cria uma nova instância da classe named bb_ibm_demo. Essa classe é uma extensão da classe UiApplication . UiApplication encontra-se no pacote net.rim.device.api.ui . O UiApplication é uma classe base para todos os aplicativos BlackBerry que possuem uma UI.

O construtor da classe bb_ibm_demo cria uma instância da classe bb_ibm_screen . Essa classe é definida e implementada em bb_ibm_screen.java. Quando a tela for criada, ela é passada para o método pushScreen() . Isso, essencialmente, coloca a tela em visualização no dispositivo.

A Tela

O aplicativo de exemplo tem uma interface com o usuário muito básica. O bb_ibm_screen estende a classe MainScreen , que é uma classe fornecida pelo RIM que implementa recursos comuns para os aplicativos para BlackBerry. Além disso, essa classe implementa a Interface Java FieldChangeListener. Isso possibilita que a classe reaja à entrada do usuário nos elementos da interface com o usuário. Este tópico é explicado em mais detalhes em uma seção mais a frente sobre detecção de um pressionamento de botão.

A UI principal para o aplicativo de amostra é criada no construtor da classe bb_ibm_screen. Antes de verificar o código para a criação de elementos da interface com o usuário, vamos dar uma olhada na declaração dos elementos da interface com o usuário que são membros de nossa classe.

Listagem 2. Declaração de Elementos da interface com o usuário
    // membros privados - representam os "controles"
    private BasicEditField identifierfield = null;
    private BasicEditField datafield = null;
    private ButtonField submitbutton = null;
    private LabelField statusfield = null;

Cada variável representa um elemento da interface com o usuário. Há dois campos onde o texto pode ser inserido. Esses são os membros de BasicEditField . O ButtonField é usado para iniciar uma transação. O LabelField fornece uma exibição somente leitura do que está acontecendo no aplicativo. Vamos dar uma olhada no código que cria a interface com o usuário para o aplicativo de amostra do tutorial (consulte a Listagem 3). O construtor chama o construtor da superclasse com uma chamada a super(). O título da tela é configurado e um método é chamado para criar a interface com o usuário. A interface com o usuário é dividida em um método separado.

Listagem 3. Criando a interface com o usuário para o Aplicativo de Amostra
    // construtor
    public bb_ibm_screen()
    {
        // chame o construtor da superclasse (MainScreen)
        super();
        // forneça um título à janela de nosso aplicativo
        setTitle("BB IBM Demo App");
        // crie componentes da interface com o usuário
        createui();
    }

O Layout

Verificando o método createui mais de perto, observe que cada um dos campos é criado com uma chamada de método específica (consulte a Listagem 4). Por exemplo, a classe BasicEditField apresenta um rótulo, juntamente com um campo de entrada com um valor padrão, um comprimento máximo e um estilo específicos. Para obter uma lista dos estilos disponíveis, examine as definições de classe Field e EditField no Javadoc da API. Uma classe ButtonField é usado para enviar a transação. Uma classe LabelField também é criado para fornecer informações de status. Quando cada um desses elementos for instanciado, o método add é usado para incluir o componente da interface com o usuário na tela. Um dos recursos muito bons das telas do BlackBerry é que a rolagem vertical ocorre automaticamente sem a necessidade de código de rolagem complicado. Para aplicativos de coleta de dados que requerem um boa quantidade de espaço da tela, esse é um recurso bem-vindo.

Listagem 4. O Método creatui() de AuthController.php
private void createui()
  {
      try
      {
      // crie um campo para inserir o "identificador" de nossa transação
      identifierfield = new BasicEditField("Identifier: ","",50, EditField.NO_NEWLINE );
      // inclua esse campo na tela
      add(identifierfield);
      // crie um campo para os dados de nossa transação
      datafield = new BasicEditField("Data: ","",100, EditField.NO_NEWLINE );
      // inclua esse campo na tela
      add(datafield);
      // crie um botão para enviar a transação
      submitbutton = new ButtonField("Submit Transaction",ButtonField.CONSUME_CLICK);
      // indique a esse botão quem trata das mudanças (seleção)
      submitbutton.setChangeListener(this);
      // inclua esse botão na tela
      add(submitbutton);
      // inclua um rótulo de status
      statusfield = new LabelField("Please enter transaction data.");
      // inclua o rótulo na tela
      add(statusfield);
      }
      catch (Exception e)
      {
          System.out.println("Failed to create user interface components");
      }
    }

Agora que a interface com o usuário foi criada, está na hora de verificar a detecção de eventos. Mantendo-se alinhado com a arquitetura Java que ativa a plataforma BlackBerry, a detecção de eventos é implementada através do uso de uma ou mais interfaces de listener de evento.

Detectando Pressionamento de Botão

Há diversos listeners de eventos disponíveis no ambiente BlackBerry. O listener de interesse para este aplicativo de amostra é a interface FieldChangeListener . Essa interface fornece um meio de detectar mudanças nos campos, incluindo botões. Para usar um FieldChangeListener, três requisitos devem ser atendidos. O primeiro é a implementação do método da interface fieldChanged(). O método é, na verdade, bem simples, requerendo somente dois argumentos — o mais importante sendo o primeiro, que representa o campo que foi alterado de alguma forma.

Listagem 5. Método fieldChanged() de AuthController.php
public void fieldChanged(Field field, int Context);

A segunda etapa necessária é instalar o listener com uma chamada para setChangeListener(), conforme mostrado no trecho de código acima. Sem essa chamada de método, as mudanças do campo não são processadas.

O terceiro requisito é que o argumento passado para setChangeListener deve ser uma classe que contém o método fieldChanged . Outra maneira de determinar isso é que a classe implemente a interface FieldChangeListener . Nesse caso, a classe da UI do aplicativo de amostra do tutorial (bb_ibm_screen) implementa FieldChangeListener: class bb_ibm_screen estende MainScreen, que implementa FieldChangeListener.

Vamos examinar o método fieldChanged , conforme mostrado na Listagem 6.

Listagem 6. O Método fieldChanged de AuthController.php
    // esse método implementa a Interface FieldChangedListener
    // ela é usada para detectar quando o botão é selecionado
    // após validar que os dados de entrada estão corretos, tenta enviar uma
    // transação ao servidor
    public void fieldChanged(Field f, int context)
    {
        // qual campo foi alterado
        if (f == submitbutton)
        {
            // verificar campos...
            String id = identifierfield.getText();
            String data = datafield.getText();

            if (id.trim().length() == 0 || data.trim().length() == 0)
            {Dialog.alert("Please fill in all fields.");identifierfield.setFocus();return;
            }

            // ok, parece que temos alguns bons dados
            if (bb_ibm_transaction.ProcessTransaction(id,data) == true)
            {// transação enviada com êxito, vamos reconfigurar a GUI para
	// entrada fácil para outra \
	fieldidentifierfield.setText("");datafield.setText("");\
	identifierfield.setFocus();statusfield.setText("Transaction Sent.");
// se preferir simplesmente fechar esse aplicativos após o envio,
	// remova o comentário da seguinte linha//onClose();
            }

        }
    }

O método verifica se o campo passado para o método é o botão Enviar . Se for, a implementação continua para verificar os dados de entrada. Nesse exemplo, o código simplesmente verifica se os campos não estão vazios. Em um aplicativo mais rígido, esses valores podem ser validados com relação a um armazenamento local de identificadores conhecidos ou outros critérios de entrada. Supondo que os dados passem no teste de validação simples, a transação é processada com uma chamada ao método ProcessTransaction da classe bb_ibm_transaction , que é revisada na próxima seção.


Aplicativos de Coleta de Dados com BlackBerry

Simplesmente o que é um aplicativo de coleta de dados de qualquer forma? Muitos aplicativos se ajustam nessa categoria; estão por toda parte a nosso redor. Toda vez que assinamos um pacote ou tiramos uma foto de uma casa que estamos pensando em alugar, estamos coletando dados. Frequentemente, esses aplicativos estão associados a um mercado "vertical", como saúde ou logística. Independentemente do segmento de mercado, há alguns padrões de design e práticas que são importantes ao coletar informações com um dispositivo remoto. A próxima seção indica o que fazer com os dados quando tiverem sido coletados, inclusive um método Java funcional para processar uma transação.

O que Torna um Aplicativo de Coleta de Dados Bom

Há diversas técnicas que contribuem para um bom aplicativo de coleta de dados. Às vezes os dispositivos saem do raio de ação, mas ainda são capazes de coletar dados. Um exemplo disso é uma parte do equipamento ativada por Bluetooth que se encontra em um local remoto. O técnico de serviço de campo que possui um BlackBerry pode não ter um sinal de celular, mas mesmo assim pode interagir com o equipamento por meio de uma conexão de dados Bluetooth local. Nesse caso, é importante que o usuário tenha a opção de armazenar (enfileirar) dados localmente para transmissão posteriormente quando estiver novamente no raio de ação. Outro exemplo de armazenamento local é para dados de referência usados para validar campos de entrada de dados por usuários remotos. Durante uma contagem do ciclo de inventário, uma lista de referência de itens a contar seria razoável de armazenar no dispositivo sem precisar de uma conexão de rede.

Há, no entanto, vezes em que o armazenamento local não é necessário nem garantido. Por exemplo, um aplicativo pode requerer uma conexão com a Internet para um servidor que fornece informações importantes relevantes para o usuário no momento, como a proximidade de outros usuários na rede. Um exemplo disso seria um aplicativo de rede preocupado com a disponibilidade de pessoas ou recursos específicos. Os dados do mercado é outro exemplo em que os dados em tempo real são importantes. Não queremos comprar toucinho a preços mais altos do que do mercado, por exemplo.

Construir a capacidade de armazenar dados localmente é um aspecto importante dos aplicativos de coleta de dado remotos. No entanto, as técnicas para armazenar os dados localmente no BlackBerry Vão além do escopo deste tutorial. Dito isso, o aplicativo de amostra do tutorial, na verdade, coleta dados e precisa ter algo para fazer com eles depois de coletados. Para fazer isso, vamos examinar o método ProcessTransaction na classe bb_ibm_transaction , implementada no arquivo bb_ibm_transaction.java.

Listagem 7. O Método ProcessTransaction de AuthController.php
    // this method interacts with the server
    public static boolean ProcessTransaction(String id,String data)
    {
        // default to non-success return code
        boolean ret = false;
        
        // some variables necessary for HTTP communication
        InputStream inputStream = null;
        HttpConnection httpConnection = null;


        // because many of the steps can throw an exception, wrap this method 
		// in a try/catch block
        try
        {
            
            StringBuffer returnStringBuffer = new StringBuffer();
            String returnString = new String();
            

            String desiredEncoding = "ISO-8859-1";


            URLEncodedPostData params = new URLEncodedPostData(URLEncodedPostData.
DEFAULT_CHARSET, true);
            params.append("identifier", id);
            params.append("data", data);
            
            String url = "http://ibm.msi-wireless.com/posttransaction.php?" 
+ params.toString();                   
            System.out.println(url);                                              
            //Connecting to Server
            httpConnection = (HttpConnection)Connector.open(url);
            inputStream = httpConnection.openDataInputStream();
            
            if(httpConnection.getResponseCode() == HttpConnection.HTTP_OK)
            {int ch;
            //Process Response// check header field for a specific encodingString \
contenttype = httpConnection.getHeaderField("Content-Type");if (contenttype != null){   
contenttype = contenttype.toUpperCase();   \
if (contenttype.indexOf("UTF-8") != -1)    {        desiredEncoding = "UTF-8";    }}
            // get an inputstreamreader to handle utf-8 dataInputStreamReader \
isr = new InputStreamReader(inputStream,
desiredEncoding);
while ((ch = isr.read()) != -1) { returnStringBuffer.append((char) ch);} \
	inputStream.close();httpConnection.close();inputStream = null;\
	httpConnection = null;returnString = returnStringBuffer.toString();
// examine return stringif (returnString.indexOf("SUCCESS") \
!= -1){    ret = true;}return ret;
            }
            inputStream.close();
            httpConnection.close();
            inputStream = null;
            httpConnection = null;
            //Bad Transaction.
            return ret;
        }
        catch (Exception e)
        {
            System.out.println("Error occurred in ProcessTransaction(" + id + "," 
+ data + ")\n" + e.toString());
            return ret;
        }
        finally
        {
            try
            {if (inputStream != null)    inputStream.close();if \
(httpConnection != null)    httpConnection.close();
            }
            catch (Exception ee)
            {
            }
        }
    }

O ProcessTransaction demonstra diversas técnicas úteis para comunicação com um servidor da Web. Estabelece uma conexão e envia uma consulta URLEncoded a uma URL específica. O URLEncodedPostData cuida da formatação dos dados como se os dados tivessem sido gerados por um "Campo de Formulário" em um navegador de desktop. Observe o código que examina o tipo de conteúdo e configura um InputStreamReader para processar os dados. Sem essa etapa, qualquer dado além do texto mais básico pode ser transmitido de forma inesperada e indesejada. Essa função retorna True se o servidor da Web retornar a cadeia SUCCESS.

Construindo o Aplicativo

Agora que os trechos de código relevantes foram revisados, vamos voltar ao ambiente de desenvolvimento do BlackBerry para construir o aplicativo. Após carregar o código de amostra, o BlackBerry JDE deve ficar semelhante à Figura 2.

Figura 2. O BlackBerry JDE com o Código de Amostra Carregado
The BlackBerry JDE with the sample code loaded

Para construir o aplicativo, pressione a tecla F7 . Para ver a saída do processo de construção, selecione a opção Saída sob o menu Visualizar ou use Alt+2 (enquanto estiver pressionando a tecla Alt , pressione o número 2).

Supondo que não haja erros no código e que o aplicativo tenha sido construído sem erros, chegou a hora de executar o aplicativo no simulador BlackBerry. A primeira etapa a executar é assegurar que o simulador de MDS esteja em execução. O simulador de MDS permite que o simulador do BlackBerry conecte à rede, inclusive à Internet. O simulador de MDS pode ser iniciado automaticamente se preferido. Para fazer mudanças como quando o simulador de MDS é iniciado (automaticamente ou manualmente) e outras opções do simulador do BlackBerry, use a opção Preferências no menu Editar no editor do BlackBerry, conforme mostrado abaixo.

Figura 3. A Opção Preferências no Editor do BlackBerry JDE
Preferences option in the BlackBerry JDE editor

Pressionar F5 iniciará o simulador do BlackBerry. O aplicativo de amostra do tutorial não será iniciado imediatamente. Deve ser iniciado navegando-se até o ícone do aplicativo no aplicativo de página inicial Ribbon e selecionando o aplicativo de amostra do tutorial: bb_ibm. As teclas de seta no computador simulam o track wheel, a tecla Enter simular o pressionamento do track wheel e a tecla escape emula o botão escape do BlackBerry.

Agora que o lado do BlackBerry deste tutorial foi discutido, vamos dar uma olhada no importante lado do servidor, onde os dados são armazenados e gerenciados.


Processamento de Transação no Servidor

Sem um local para armazenar e gerenciar dados coletados, o aplicativo BlackBerry seria de valor limitado. Enquanto um aplicativo de coleta de dados remoto pode armazenar dados somente no dispositivo remoto, na maioria dos casos, um aplicativo de coleta de dados remoto bem-sucedido terá um componente do lado do servidor para complementar o software de coleta de dados remoto.

Armazenamento de Dados

Para armazenar dados no servidor, o aplicativo de amostra do tutorial usa o banco de dados MySQL de software livre muito popular. Uma única tabela de banco de dados de aplicativo é implementada: tbl_transactions. Essa tabela armazena dados enviados pelo aplicativo do BlackBerry. Outras etapas de gerenciamento, incluindo exportação e limpeza de dados usam essa mesma tabela de banco de dados. A Data Definition Language para essa tabela encontra-se na Listagem 8.

Listagem 8. Data Definition Language para a Tabela tbl_transactions
CREATE TABLE 'db_ibmmsiwireless'.'tbl_transactions' (
'tid' INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'unique id',
'usercode' VARCHAR( 50 ) CHARACTER SET ascii COLLATE ascii_general_ci
    NOT NULL COMMENT 'which user',
'datum' LONGTEXT CHARACTER SET ascii COLLATE ascii_general_ci
    NOT NULL COMMENT 'data from tran',
'stampx' DATETIME NOT NULL COMMENT 'when transaction occurred',
PRIMARY KEY ( 'tid' ) ,
INDEX ( 'usercode' , 'stampx' )
) ENGINE = MYISAM CHARACTER SET ascii COLLATE ascii_general_ci

Ter uma tabela de banco de dados não soluciona o desafio de classificar dados completamente. O que é necessário é uma transação para aceitar os dados recebidos, validar os dados, conforme necessário, e armazenar a transação. Há diversas opções disponíveis aqui. O aplicativo requer uma Chamada de Procedimento Remoto (RPC) de algum tipo. Sem ficar preso às diversas discussões filosóficas de qual método RPC é melhor, o tutorial está realizando uma abordagem simplista de como usar os dados de formulário codificados pela URL para envio da transação. Para não ser distraído com outras tecnologias (importantes), vamos manter as coisas simples.

Uma vantagem de usar uma abordagem de dados baseados em formulário é que testar o lado do servidor pode ser realizado com um formulário de construção simples — nenhuma ferramenta cara ou complexa é necessária.

Processamento da Transação

A transação do lado do servidor é implementada em outra tecnologia de software livre: PHP. PHP é empregada devido à sua facilidade de uso, sua rica funcionalidade e seu modelo de licenciamento de software livre. Como muitos ambientes de programação, dividir a funcionalidade em módulos ou classes separados é um bom estilo de programação, fornecendo facilidade de manutenção e capacidade de leitura. Vamos examinar o ambiente PHP que implementa o lado do servidor do aplicativo de amostra do tutorial.

Listagem 9. Transação PHP para o Lado do Servidor
db.php	
<?php
$mysql_db = "db_ibmmsiwireless";
$mysql_user = "username";
$mysql_pass = "password";
$mysql_link = mysql_connect("dbservername", $mysql_user, $mysql_pass);
mysql_select_db($mysql_db, $mysql_link);
?>

A página db.php contém informações de conectividade relacionadas ao banco de dados. Esse arquivo é incluído por qualquer página que interaja com o banco de dados. Observe que usar uma plataforma de banco de dados diferente de MySQL resultaria na alteração do conteúdo do arquivo db.php para refletir o ambiente de banco de dados alternativo.

Listagem 10. Método Detalhes do Banco de Dados
posttransaction.php
<?php
require('db.php');
require('utils.php');
putTransaction($_GET['identifier'],$_GET['data'])
?>

A página post-transaction.php é muito simples — faz referência às configurações do banco de dados localizadas em db.php e carrega as rotinas localizadas em utils.php, que serão revisadas em breve.

Quando as duas instruções require forem processadas para carregar as rotinas do banco de dados e do utilitário, respectivamente, esse script do lado do servidor passa dois elementos de dados para uma função denominada putTransaction. Observe a sintaxe de $_GET[]. Isso demonstra o meio para acessar dados do formulário enviados à página a partir do BlackBerry (ou de um formulário de teste). Observe que se os dados fossem ser enviados usando POST, em vez de GET, seriam acessados usando-se a sintaxe $_POST[] .

Vamos dar uma olhada na função putTransaction , encontrada no arquivo utils.php.

Listagem 11. Exemplo de Geração de putTransaction
function putTransaction($id,$datum)
{
global $mysql_link;

$sql = "insert tbl_transactions (usercode,datum,stampx) values ('$id','$datum',NOW())";
//print($sql);
$result = mysql_query($sql,$mysql_link);
if ($result == 1)
{
	print("SUCCESS");
}
else
{
	print("FAILED");
}
}

O putTransaction recebe dois argumentos: um identificador e os dados a serem armazenados ou $id e $datum, respectivamente. A função gera uma instrução SQL insert para preencher uma nova linha na tabela tbl_transactions. Observe o uso da função MySQL NOW(). Isso permite que uma registro de data e hora gerado pelo banco de dados seja fornecido em cada transação registrada. Essa pode ser uma ferramenta útil nos aplicativos de coleta de dados a se conhecer quando a transação for recebida.

Além disso, uma transação de produção deve incluir uma provisão para proteger contra um ataque de injeção SQL. Essa etapa é omitida por questão de clareza.

Se a operação do banco de dados for bem-sucedida, esse método retorna a cadeia SUCCESS, caso contrário, a cadeia FAILED. Observe que essa função usa a função PHP print , o que significa que essa cadeia é enviada de volta diretamente ao cliente, que, no caso do aplicativo de amostra deste tutorial, é o aplicativo BlackBerry apresentado anteriormente. No senso mais rígido, isso é um atalho. Funções localizadas em utils.php devem, de forma ideal, retornar valores a seus responsáveis pelas chamadas, que tomariam a decisão sobre o que comunicar de volta ao cliente. Por questão de simplicidade, todas as funções retornam valores diretamente ao cliente.

Parabéns! A transação iniciada no BlackBerry agora está armazenada com segurança em um banco de dados relacional no servidor. Agora que os dados foram armazenados, vamos dar uma olhada no que pode ser feito com eles.

Gerenciando os Dados

Funções adicionais no utils.php ativam alguns outros recursos importantes de um aplicativo de coleta de dados. O getTransactions() é chamada a partir da página showtransactions.php. Isso permite uma consulta simples em todas as transações armazenadas e exibe os resultados no navegador.

Listagem 12. Exemplo de Customizações de getTransactions() É Chamada a partir de showtransactions.php
// No arquivo showtransactions.php:

<?
require('db.php');
require('utils.php');
require('header.php');
?>
<html>
<head>
<title>MSI Wireless Transactions</title>
</head>
<body>
<h3>Transaction List for <? print('['.$_POST['identifier'].']')
    ?>.</h3>
<hr />
<? getTransactions($_POST['identifier']) ?>
<br>
<a href="/">Try again</a><br>
<? require('footer.php'); ?>
</body>
</html>


// No arquivo utils.php:

function getTransactions($id)
{
global $mysql_link;
$result = mysql_query("SELECT * from tbl_transactions where \
usercode = '$id' order by tid", $mysql_link);
  if(mysql_num_rows($result))
  {
      print("<table border=1><tr><td>Transaction
#</td><td>Data</td><td>Time Stamp</td></tr>");
      while($row = mysql_fetch_row($result))
      {

print("<tr><td>$row[0]</td><td>$row[2]</td><td>
$row[3]</td></tr>");
      }
      print("</table>");
      print("<a target='_blank' href='export.php?id=$id'>Export Your
Transactions</a>");
      print("<br>");
      print("<br>");
      print("<a href='manage.php?id=$id&action=remove'>Delete Your
Transactions</a>");
      print("<br>");
  }
  else
  {
	print("There are no transactions available.");
  }
}

O arquivo showtransactions.php é essencialmente um processador de formulário para o formulário de entrada localizado em index.php, com partes relevantes mostradas abaixo.

Listagem 13. Função Arquivo showtransactions.php Abreviado
<?require ('header.php'); ?>
//
<form method="POST" action="showtransactions.php">
Your identifier:&nbsp;<input name="identifier" maxlength="50">
<input type=submit value="Look Up My Transactions">
</form><br>
//
<? require('footer.php'); ?>
</body>
</html>

Sequência da Transação Integral

As capturas de tela a seguir percorrem o uso do aplicativo de amostra do tutorial, começando com o aplicativo do BlackBerry e iniciando com uma procura do lado do servidor para localizar as novas transações inseridas. A inserção de uma transação no BlackBerry é mostrada abaixo.

Figura 4. Inserindo uma Transação no BlackBerry
Entering a transaction on the BlackBerry

A Figura 5 mostra o lado do servidor aceitando uma consulta para esse tipo de transação. Observe que o formulário de entrada tem a cadeia IBM DEMO. Você pode inserir qualquer valor que desejar nesse campo. Esse campo corresponde ao campo do identificador ou ID na tabela de banco de dados e a trechos de código introduzidos anteriormente.

Figura 5. O Lado do Servidor Aceitando uma Consulta para a Transação Mostrada na Figura 4
The server side accepting a query for the transaction shown in Figure 4

A página showtransactions.php chama a função getTransactions , passando o valor da consulta, que, neste caso, é IBM DEMO. Quaisquer transações localizadas em tbl_transactions que correspondam a esse identificador são exibidas na página resultante, conforme mostrado abaixo.

Figura 6. Exibindo Transações na Tabela tbl_transactions que Correspondem a IBM_DEMO
Displaying transactions in tbl_transactions table matching IBM_DEMO

Integração de Dados

Um recurso importante de um sistema de coleta de dados é a capacidade de exportar dados coletados para uso subsequente nos sistemas de gerenciamento de destino, como um pacote de logística ou, possivelmente, um sistema de faturamento. Por exemplo, o aplicativo de amostra deste tutorial poderia ser adaptado para ser usado por uma empresa de utilidade para coletar dados de medição no campo. O identificador seria o número do medido e os dados a leitura em KWH do medidor.

O lado do servidor implementa uma função export simplista que coloca os dados selecionados em um arquivo comma-separated value (CSV) que pode ser lido pelo Microsoft Excel®. O código do lado do servidor que implementa essa função está localizado no export.php.

Listagem 14. Função export do Arquivo export.php
<?php
	header("Content-Type: application/vns.ms-excel");
	header('Cache-Control: maxage=10');
	header('Pragma: public');
	header('Content-Disposition: attachment; filename="'.$_GET['id'].
'_transactions.csv"');
	require('db.php');
	require('utils.php');
	$out = fopen('php://output', 'w');
	getTransactionsToCSV($out,$_GET['id']);
	fclose($out);
?>

O getTransactionsToCSV , localizada em utils.php, é mostrada abaixo.

Listagem 15. Esquema O getTransactionsToCSV
function getTransactionsToCSV($out,$id)
{
global $mysql_link;
$result = mysql_query("SELECT tid,datum,stampx from \
tbl_transactions where usercode = '$id' order by tid", $mysql_link);
  if(mysql_num_rows($result))
  {
      fputcsv($out,array("Transaction #","Data","Timestamp"));
      while($row = mysql_fetch_array($result,MYSQL_NUM))
      {
	fputcsv($out,$row);
      }
  }
}

Essa funcionalidade do lado do servidor está disponível gratuitamente para que você use para testar seus aplicativos de coleta de dados para o BlackBerry (consulte Requisitos do Sistema).


Próximas Etapas

Há alguns tópicos que ainda precisam ser abordados antes da conclusão deste tutorial. Está faltando no aplicativo de amostra deste tutorial uma etapa crucial necessária para executar aplicativos em um BlackBerry real. Além disso, há dois recursos bons de se ter em qualquer aplicativo de coleta de dados remoto que precisam ser abordados. E o tópico de licenciamento de software livre é mencionado antes da finalização.

APIs Controladas

Primeiro, vamos discutir a etapa necessária para carregar um aplicativo em um BlackBerry real. Há diversas classes na API do BlackBerry que exigem assinatura de código. Essas classes são referidas como APIs Controladas. Isso significa que RIM vê o uso dessas classes como sensível e, portanto, requer que você assine o aplicativo com uma chave de desenvolvedor fornecida pelo RIM. Isso permite que o RIM identifique o autor de um aplicativo. Por que isso é importante? Vamos dizer que alguém seja o autor de um aplicativo que envia spam ou que seja de alguma forma um cidadão de má conduta. A etapa de exigir uma assinatura faz com que o desenvolvedor pense duas vezes antes de fazer o release desse tipo de aplicativo. Além disso, o RIM pode revogar uma chave de desenvolvedor se necessário, estorvando a capacidade do desenvolvedor trapaceiro de efetuar o release desses tipos de aplicativos. É claro que construir aplicativos trapaceiros não é a intenção aqui. No entanto, é importante discutir isso, pois esta etapa é necessária antes de carregar um aplicativo em um dispositivo real. Infelizmente, esta etapa não é gratuita, mas a taxa (USD $20) não é excessiva.

Para obter uma chave de desenvolvedor, você deve se inscrever no Web site do RIM. ConsulteRecursos para obter a URL de registro da chave do desenvolvedor.

Quando uma chave de desenvolvedor estiver instalada no JDE, a assinatura do aplicativo é realizada diretamente.

Assinando o Aplicativo

Após construir o aplicativo com êxito, selecione a opção Solicitar Assinaturas abaixo do menu Construir.

Figura 7. Selecionando a Opção Solicitar Assinaturas
Selecting the Request Signatures option

Quando a tela Ferramenta de Assinatura é ativada, cada módulo de código é listado, juntamente com um campo Categoria indicando se o módulo específico precisa de assinatura. Insira a senha da chave privada estabelecida quando a chave do desenvolvedor foi estabelecida para prosseguir com a operação de assinatura.

Figura 8. Inserindo a Senha de Chave Privada
Entering the private key password

Quando a etapa de assinatura for concluída, a coluna Status indicará que os módulos foram assinados.

Figura 9. A Coluna Status Indica que os Módulos Foram Assinados
Status column indicates modules have been signed

Nesse ponto, o aplicativo está pronto para ser instalado no dispositivo. Os aplicativos podem ser instalados através de um BlackBerry Enterprise Server, o BlackBerry Desktop Manager ou usando-se um método Over The Air. Para obter informações adicionais sobre como carregar um aplicativo em um dispositivo real, consulte Recursos.

Manipulação de Erros

A manipulação de erros é omitida deste tutorial por questão de brevidade e clareza. É claro que qualquer código pronto para a produção deve ter uma boa dose de manipulação de erros e instruções para o usuário do aplicativo caso algo saia errado.

Enfileiramento

Este tópico foi comentado rapidamente, mas precisa de maior atenção. Há cenários em que um aplicativo precisará enfileirar dados. As razões podem envolver requisitos de dados para reunir dados em lotes e enviá-los com informações de resumo — um aplicativo de inventário físico, por exemplo. Como alternativa, podem haver problemas de conectividade em que as transações não podem ser enviadas imediatamente após a coleta. Apesar de esse tópico não ter sido expressamente implementado no aplicativo de amostra do tutorial, a estratégia de enfileiramento não deve ser ignorada em um aplicativo de coleta de dados no mundo real.

Licenciamento de Software Livre

Tirar uma ideia do conceito de um aplicativo de software livre licenciado não é tarefa fácil. A amostra deste tutorial é um bom ponto de partida para uma plataforma de coleta de dados mais abrangente, mas há mais trabalho a ser feito. Uma das próximas etapas poderia ser incluir informações baseadas em local (dados GPS, por exemplo) ou, possivelmente, prender um scanner de código de barras com capacidade Bluetooth para reunir dados de inventário no campo. Independentemente do próximo recurso técnico a incluir nesse aplicativo, a escolha de uma licença de software livre apropriada precisa ser abordada. Os prós e os contras da seleção de uma licença de software livre está além do escopo deste tutorial, mas precisa de alguma consideração para qualquer produto de software livre sério. A seção de referência contém um link para um site que agrega diversas licenças de software livre. Se estiver levando a sério a construção de um aplicativo de software livre, considere a escolha de uma licença apropriada para seu aplicativo para BlackBerry.


Resumo

Este tutorial introduziu a plataforma BlackBerry e demonstrou como desenvolver aplicativos de coleta de dados remotos com tecnologias de software livre, incluindo Java, PHP e MySQL. O básico da UI e comunicações do BlackBerry foi introduzido, juntamente com um aplicativo simples, mas poderoso do lado do servidor implementado em PHP e MySQL básicos de software livre. Usar essas tecnologias de software livre abre um mundo de criatividade de software que excede muito os toques de telefone customizados e o sistema de mensagens de texto. Pode-se até dizer que o mercado para aplicativos de software livre para BlackBerry com Java está maduro para a colheita.


Downloads

DescriçãoNomeTamanho
Java codeos-blackberry-code.zip17KB
PHP and SQL codeos-blackberry-serverside.zip4KB

Recursos

Aprender

  • Certifique-se de ler a Parte 2 e a Parte 3 desta série.
  • BlackBerry Desktop Software: Research In Motion (RIM) oferece uma gama completa de informações úteis para o usuário e para o administrador no BlackBerry Desktop Software, incluindo mais sobre como instalar software através do Gerenciador de Desktop.
  • Você encontrará artigos sobre cada aspecto de programação Java na Zona da Tecnologia Java do developerWorks.
  • OpenSource.org apresenta um catálogo das licenças de software livre mais populares.
  • PHP.net é o recurso central para desenvolvedores de PHP.
  • Consulte aRecommended PHP reading list."
  • Procure todo o conteúdo de PHP no developerWorks.
  • Expanda suas qualificações em PHP verificando, no IBM developerWorks, PHP project resources.
  • Para ouvir entrevistas e discussões interessantes para desenvolvedores de software, consulte podcasts do developerWorks.
  • Usando um banco de dados com PHP? Verifique o Zend Core for IBM, um ambiente de desenvolvimento e produção de PHP pronto, transparente e de fácil instalação que suporta o IBM DB2 V9.
  • Permaneça atualizado com eventos técnicos e webcasts do developerWorks.
  • Verifique as conferências, feiras, webcasts e outros Eventos futuros no mundo que sejam de interesse de desenvolvedores de software livre da IBM.
  • Visite Zona de Software Livre do developerWorks para obter informações extensivas sobre como fazer as coisas, ferramentas e atualizações de projetos para ajudá-lo a desenvolver tecnologias de software livre e usá-las com produtos IBM.
  • Assista e aprenda sobre as tecnologias IBM e de software livre e funções de produtos gratuitamente com os demos On Demand gratuitos do developerWorks.

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=392894
ArticleTitle=Criar Aplicativos BlackBerry com Ferramentas de Software Livre, Parte 1: Determinando a Base
publish-date=08192008