Apresentação Lock & Wipe no M3 da Mobiltec

Muito já falamos aqui no blog sobre os conceitos de lock & wipe e como implementar essa funcionalidade, para Windows Mobile e para Android.

Como vocês já sabem, trata-se de uma funcionalidade crítica no que tange segurança para uso e gestão de dispositivos móveis corporativos. Com ela, é possível bloquear remotamente um dispositivo móvel e apagar seus dados, retornando as configurações originais.

Hoje, vamos mostrar em vídeo como se executa essa operação, utilizando como exemplo o M3 da Mobiltec. O vídeo tem pouco mais de três minutos. Confira!

Chat web em ambiente Windows + ASP.NET

No decorrer do desenvolvimento de um projeto da Mobiltec, tivemos a necessidade de implementar uma ferramenta de comunicação instantânea entre os usuários do sistema. Como características principais, esta ferramenta devia ser integrada ao sistema e compatível com as suas diversas interfaces (web e mobile).

Quando falamos em comunicação instantânea na internet, nos vem a cabeça ferramentas como MSN Messenger, Skype, ICQ (para os mais antigos), entre outras. Estes são tipicamente aplicativos desktop. No entanto nossa implementação precisa ser suportada por uma aplicação web.

Hoje temos vários sites que já funcionam como comunicadores instantâneos, sem que o usuário precise abrir um novo aplicativo e fazer o login, dispensando a troca de tela sempre que uma pessoa se comunica consigo. Exemplos clássicos são o Hotmail.com (que implementou dentro do serviço de webmail a funcionalidade de conversação com seus contatos do MSN) e o Facebook.

A proposta desta postagem é apresentar as ferramentas e técnicas envolvidas na construção do sistema de chat do nosso projeto.

Openfire

Voltando a necessidade da empresa, pesquisando na internet achamos a referencia ao protocolo XMPP (Extensible Messaging and Presence Protocol), que é uma alternativa a protocolos proprietários de aplicações como o MSN Messenger. O ponto chave do protocolo é o princípio de gateways, que possibilitam a comunicação de uma rede XMPP com outras redes que usam diferentes protocolos. Dessa forma, é possível que uma aplicação XMPP se comunique com contas de outros serviços, como MSN, ICQ, etc…

Parte da nossa solução de implementação no projeto foi utilizar como servidor de mensagens instantâneas o aplicativo OPENFIRE, que é um Real Time Collaboration (RTC) Server. A comunicação com este servidor usa somente o protocolo XMPP para troca de mensagens. O processo de instalação é super simples.

Dica: Para que o OPENFIRE possa inicializar junto com o Windows, utilize a linha de comando, navegue até o diretório ‘C:\Program Files\Openfire\bin’ (diretório bin da instalação do OpenFire) e execute o comando “openfire-service /install”

Obs.: Esse método de criação do serviço do Openfire não funciona em win7 e win2008. Para isso deve ser importado para o registro do sistema o arquivo disponibilizado pelo link a seguir e seguido as instruções propostas pelo pequeno tutorial descrito no mesmo: http://bit.ly/HGq0sH

Configurações extras para o HTTP Binding

-> Ao abrir o painel de configuração do openfire <server>:<porta, default:9090> adicionar as seguintes chaves em Server -> Server Manager -> System Properties

  • httpbind.enabled = false
  • xmpp.httpbind.client.requests.polling = 0
  • xmpp.httpbind.scriptSyntax.enabled = false
  • xmpp.session.conflict-limit =0
  • xmpp.socket.ssl.active = true
  • xmpp.auth.anonymous = false

-> Adicionaremos as seguintes duas linhas abaixo para ajudar na realização do update do vínculo das amizades entre a base de dados e o WebAdmin do Openfire:

  • cache.username2roster.size = 0
  • cache.username2roster.maxLifetime = 0

-> As chaves supracitadas são necessárias para o correto funcionamento do chat.

Bosh Server

No decorrer da etapa de pesquisa, nos deparamos com vários problemas em relação ao tempo de conclusão da funcionalidade. A principal delas se refere ao ambiente de execução, rodando IIS 6+ e o componente ASP.NET, pois não foi fácil obter informações sobre como implementar uma ferramenta de chat web nesta plataforma.

Foi utilizado o conceito de HTTP Binding (BOSH SERVER) para nossa solução, que é um Connection Manager, atuando junto de um servidor XMPP. Este proporciona ao usuário um método para manter uma conexão ativa com o Openfire via HTTP. Após muita análise e testes realizados com algumas soluções, para o nosso cenário a mais adequada encontrada foi o Bosh Server “Punjab”, recomendada por diversos blogs como solução mais estável para o serviço de conexão Bosh.

Mas como nem tudo são rosas, tivemos alguns problemas iniciais para fazer com que a solução executasse de forma plena. O processo de instalação e configuração demandou configurações prévias à sua instalação:

 

Dica: Para instalar este último, navegue pela linha de comando até o diretório onde está localizado o arquivo ‘zope.interface 3.7.0’ e execute a seguinte linha para instalar este modulo do pack Zope:

  • ‘easy_install zope.interface-3.7.0-pyXX-win32.egg’

Obs. 1: É provável que ao executar os scripts Python e Twisted (setuptools também) acuse um erro de que não sejam reconhecidos pelo DOS, sendo necessário configurá-los na variável PATH do Windows com o caminho de seus executáveis, como por exemplo:

  • C:\Python27\ (Python)
  • C:\Python27\scripts (Twisted)

Obs. 2: Recomendado usá-las como uma var isolada denominada “PYTHON” e adicionar apenas “%PYTHON%” ao final da string do Path

 

Feito estas configurações, partimos para a instalação do Punjab:

-> Baixe a última versão pelo link http://github.com/twonds/punjab

-> Descompacte o arquivo .tar.gz no diretório onde deseja configurá-lo e renomeie-o para “Punjab”

-> Pela linha de comando, execute o script de instalação no diretório onde foi recém descomprimido e renomeado:

  • python setup.py install

-> Após realizar o processo de instalação, algumas configurações devem ser feitas para que possamos realizar a execução do connection manager com sucesso. Localize o arquivo punjab.tac no diretório ‘Punjab’ e abra ele com o editor de texto, edite as seguintes linhas:

  • Assegure-se que a chamada ‘root.putChild’ esteja passando o primeiro valor como ‘http-bind’
  • Em internet.TCPServer a porta a ser usada por nosso Bosh será 7070

Obs.: O padrão usado no projeto Punjab é a 5280, porém nós utilizamos a 7070 devido ao javascript ter sido desenvolvido com ela, em razão das soluções testadas anteriormente (próprio Openfire) que a utilizam como padrão para estabelecer uma conexão Http Binding

  • Abaixo da linha ‘bosh = HttpbService(1)’, adicionar uma nova com a informação “bosh.connect_srv = False”. Isso impedirá que nosso Bosh Service tenha problemas na resolução de nomes (caso não utilize uma zona DNS durante os testes)

-> Feito isso, podemos executar a seguinte instrução para que o Punjab seja iniciado:

  • twistd.py –y punjab.tac

Obs.: Para testar seu funcionamento, basta acessar http://localhost:7070/http-bind. Uma página de teste do próprio Punjab deverá ser exibida, contendo o seguinte conteúdo:

 

A etapa de comunicação da parte do servidor está concluída. A etapa  seguinte é referente a aplicação web, que vai se comunicar com o connector manager (Bosh), no qual irá tratar as requisições recebidas e se comunicar com o XMPP server (Openfire).

 

Vendo que muitas das idéias que analizamos utilizam Apache e PHP ou JSP (entre outras open source), nossas possibilidades foram diminuindo, até que com muita pesquisa encontramos uma biblioteca Javascript que contemplava nossa necessidade, mas homologar este ambiente para que evitasse problemas de CORS (Cross-Origin Resource Sharing) demandou um tempo maior de análise do cenário atual que nos encontravamos.

JSJaC

-> Biblioteca Javascript client para jabber/XMPP

-> Suporta HTTP Polling e BOSH

  • HTTP Polling
    • É uma extensão do protocolo XMPP que permite o acesso a um servidor Jabber por trás de firewalls que não permitem sockets de saída na porta 5222, através de solicitações HTTP.
  • BOSH
    • É um protocolo de transporte que emula a semântica de uma conexão TCP com “vida longa”, bidirecional entre duas entidades (como um client e um server) de forma eficiente usando vários pares de HTTP requests / responses síncronas, sem a necessidade do uso de polling frequente ou em blocos de respostas.

-> Comunicação feita através de XMLHttpRequest (XHR)

 

JAPIX

-> Utiliza o jsjac com algumas modificações

-> Rede social focada em comunicação, com um chat completo e com muitas funcionalidades, dentre elas o Jappix Mini

-> Para nossa solução, apenas o Jappix Mini foi aproveitado

-> Muitas melhorias foram implementadas e alguns bugs corrigidos para se adaptar as nossas necessidades

-> Sofreu algumas alterações na forma nativa de funcionamento e aplicamos algumas políticas de uso

INTEGRAÇÃO COM ASP.NET

 

Principais pontos de integração do aplicativo ASP.NET :

Login

O Login é feito buscando o id do usuário e unindo ao server descrito no web.config do projeto na seguinte forma: <id>@<server>.

Salvando informações do usuário

Para salvar as informações do usuário de forma segura, usa-se a Sessão do usuário e para persistir esses dados, SecureCookie.

Logout

Desconecta do Openfire, limpa a sessão e apaga dados salvos nos cookies. As operações que se referem à sessão e cookies são executadas por um WebService. Quanto a desconectar, é feito por um javascript. O comportamento original de LogOut era função da página Logout.aspx do nosso projeto, agora essa página apenas limpa a variável de sessão que indica a necessidade de chamar o WebService referenciado.

Enviando ao Client

Uma das vulnerabilidades do jappix minichat é a necessidade de ter o nome do usuário e senha no javascript para conectar, ou seja, se abrir o javascript de uma página com o chat da maneira originalmente proposta, encontra-se Connect(<usuário>,<senha>), um texto sem nenhum tipo de proteção.

Como solução utiliza-se HTTPS para obter as informações se usuário e senha via javascript, através de JSONP.

Secure Cookie

Classe acrescentada ao projeto, como parte da sua lógica de negócio. Contém um Singleton para um objeto Encrypter e faz a busca e inserção de informações em cookies de forma segura. Aplica a criptografia Blowfish para proteger os dados salvos em Cookie (biblioteca de encriptação usada em C#).

JSONP

  • Extensão de Json
  • Escolhida especialmente para usar com HTTPs
  • Faz uma chamada remota para o serviço SecureRetrieveUserInfo.asmx
  • Para a requisição ao serviço seja processada corretamente no ambiente .Net, faz-se necessário a inclusão de ContentTypeHttpModule como httpModules, inserindo a seguinte linha na seção <httpModules> do web.config do Portal
<add name="ContentTypeHttpModule" type="ContentTypeHttpModule.ContentTypeHttpModule, ContentTypeHttpModule" />

IIS 6.0

Para que o IIS possa ler e interpretar requisições de ProxyRequest (configuração nativa do Apache), instalamos o módulo IONIC ISAPI REWRITE FILTER (IIRF):

-> Permite operações comuns de servidores como Apache e soluciona o problema de Cross Domain

-> Encontrado em http://iirf.codeplex.com/releases/view/70382 para download de sua versão mais atual e estável

-> Após concluir o download, execute o arquivo de instalação e basta seguir os passos até concluir o processo

-> Para maiores dúvidas quanto ao processo de instalação (manual ou automático), pode ser acessado http://bit.ly/H5Yj9u

Obs.: Durante a instalação, deve-se atentar ao passo de escolha do virtual host no qual deseja aplicar a solução

Arquivo de configuração

-> Adicionar em C:\Inetpub\wwwroot um arquivo chamado “Iirf.ini” com as seguintes linhas:

  • ProxyRequests                  On
  • ProxyPass                         /http-bind   http://<server>:<bosh port>/http-bind
  • ProxyPassReverse            /http-bind   http://<server>:<bosh port>/http-bind

Obs.: Onde <server> é o nome do servidor e <bosh port> é a porta configurada no Openfire

Habilitar extensão iirf

-> No IIS, vá em ‘Web Sites’, clique com o botão direito no Default Web Site onde está configurado o ambiente de desenvolvimento do chat e em seguida clique em ‘propriedades’

-> Na guia ‘Home Directory’ clique em ‘Configuration’ e em seguida no botão “Add…” na aba ‘Mapping’ da nova janela aberta

-> Na caixa de dialogo aberta, defina os seguintes valores para os itens abaixo:

  • Executable = “”C:\Program Files\Ionic Shade\IIRF 2.1\IIRF.dll””
  • Extension = “.iirf”
  • Verbs = All Verbs
  • Check ‘Script engine’
  • Uncheck ‘Verify that file exists’

-> Após adicionar esta nova ‘Extension’, volte para propriedades e vá na aba ‘Directory Security’ e certifique-se que o acesso anônimo está setado para este web site (e todos seus virtual directories)

INTERNET INFORMATION SERVICES (IIS) 6.0 RESOURCE KIT TOOLS

-> Habilita o certificado de segurança para o acesso HTTPS ao portal

-> Proporciona a troca de informações do usuário entre o servidor e o JavaScript de uma forma segura

recursos

-> Para a instalação, baixe o instalador do aplicativo IIS 6.0 Resource Kit Tools pelo link http://bit.ly/H5YP7B

-> Após a instalação, vá em Iniciar > Programas > IIS Resources > SelfSSL e execute o aplicativo “SelfSSL”

-> Na tela do command aberta, digite “SelfSSL” para executar o programa

-> Digite “y” para confirmar a instalação do certificado

Web.Config – NOVAS CHAVES E SUA UTILIDADE

<add key=" AllowOpenfireIntegration" value="True" />

è Ativa a integração do portal com o openfire e chat

<add key="JabberServer" value="servidor"/>

-> Indica o nome do server onde se encontra o openfire. Obs: não pode ser “localhost”

<add key="JabberServerInLocalMachine" value="False"/>

-> Quando essa chave é true, quer dizer que o chat está executando em uma máquina local ou com um IIS de versão 5.0 ou inferior, ou seja, que não possua as features de ProxyPass e ProxyPassReverse

<add key="UserInfoService" value="https://servidor/nopcommercestore/Extensions/SecureRetrieveUserInfo.asmx/UserName"/>

-> Endereço do serviço para recuperar as informações do usuário via JavaScript

<add key="DeleteUserInfoService" value="http://servidor/nopcommercestore /Extensions/SecureRetrieveUserInfo.asmx/DeleteUserInfo"/>

-> Endereço do serviço que faz o logout do usuário e limpa os dados de sessão e cookies salvos

 

O objetivo neste post é trazer uma ideia inicial de como fazer a integração em um ambiente windows com uma página simples em ASP.NET, com recursos de um chat web. Inicialmente encontramos dificuldades para a implementação devido ao pouco material documentado para a integração com este ambiente. Motivo que também nos impossibilitou de testar um número maior de alternativas, mas com os recursos encontrados já é possível tirar muito proveito de suas funcionalidades.

Escrito por Gregory Miola Silva

Introdução ao HTML5

Nesta semana daremos início a um assunto que é cada vez mais pertinente para os desenvolvedores web e mobile: o HTML5. Um dos conceitos que esta linguagem propõe,  já foi abordado em um dos nossos artigos passados Multiplataforma, além deste conceito o HTML5 está se tornando um aliado de extrema importância para todos que estão trabalhando em projetos voltados a web services independente da plataforma utilizada.

O que é HTML5?

 HTML5 é a mais recente versão do HTML, que está sendo desenvolvida pela W3C e outros parceiros. Esta linguagem de marcação tem como um dos seus principais objetivos facilitar a manipulação de elementos, possibilitando que o desenvolvedor seja capaz de modificar características de objetos de uma forma não intrusiva e transparente ao usuário final.

Nesta nova versão, podemos notar novas tags e a modificação de tags já existentes. Nas versões anteriores não existia um padrão universal para a criação de seções comuns e específicas como, por exemplo, cabeçalho, menu, rodapé entre outros. Não havia uma padronização de nomenclatura de Classes, ID’s e tags. O HTML5 tenta trazer o conceito de escrever código e organizar a informação na página, facilitando a leitura para seres humanos. Traz mais semântica com menos código, promove uma maior interatividade sem a utilização de plugins e sem perda de desempenho. Alem desta características um fato importante nesta nova versão é a sua estrutura semântica.

 
Características do HTML5

DocType
HTML 4.01

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

XHTML 1.0

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

HTML5

<!DOCTYPE html>

Charset
HTML 4.01

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

XHTML 1.0

<?xml version="1.0" encoding="UTF-8"?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

HTML5

<meta charset="utf-8">

 
Estrutura Semântica
head = informação básica do menu de acessibilidade para celulares
header = cabeçalho da página
article = conteúdo
sidebar = barra lateral
footer = rodapé


 
 
 
 
 
 
 
 
 
 
 
Formulários
O HTML5 traz um novo conceito em formulários, a fim de facilitar o desenvolvimento em relação a validações do site ou aplicação.

<input type="number">
<input type="search">
<input type="range">
<input type="email">
<input type="date">
<input type="url">
<input type="week">

 
SVG
No HTML5 o formato SVG (Scalable Vectorial Graphics) pode ser embutido diretamente no documento com o uso do elemento img

<img src="imagens/rabisco.svg" alt="Rabisco em SVG" />
<svg >
<rect width="90" height="60" x="10" y="100" fill="#00FFCC" stroke="#FF0000" stroke-width="3" />
</svg>

 
Novas APIs

Geolocalização
Esta é uma das novas APIs que está sendo lançada junto ao HTML5. A partir desta API será possível verificar a localização do dispositivo ou da máquina através do próprio browser.

<p id="demo">Clique no botão para receber as suas cordenadas:</p>
<button onclick="getLocation()">Try It</button>
<script>
var x=document.getElementById("demo");
function getLocation()
  {
  if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
  else{x.innerHTML="O seu browser não suporta GeoLocation.";}
  }
function showPosition(position)
  {
  x.innerHTML="Latitude: " + position.coords.latitude +
  "<br />Longitude: " + position.coords.longitude;
  }
</script>

 
Canvas
O elemento Canvas é usado para desenhar gráficos, em tempo real, através de scripts (geralmente JavaScript), ele elemento é apenas um recipiente para gráficos, você deve usar um script para realmente extrair os gráficos.

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;">
</canvas>

<script type="text/javascript">

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);

 
Múltimidia
A tag de vídeo é uma das principais novidades do HTML5 atualmente já está sendo utilizada pelo Youtube entre outras empresas, com o uso desta tag gradativamente o Flash deverá perder espaço como um componente de vídeo.

<video width="320" height="240" controls="controls">
  <source src="movie.mp4" type="video/mp4" />
  <source src="movie.ogg" type="video/ogg" />
  Your browser does not support the video tag.
</video>

 
Web Storage
Com HTML5, páginas da web podem armazenar dados localmente no navegador do usuário.
Anteriormente, isso era feito com cookies. No entanto, armazenamento na Web é mais seguro e mais rápido. Os dados são armazenados em pares chave / valor, e uma página web só pode acessar os dados armazenados por si só.
 
Aplicação Offline
O HTML5 possui uma API para que você possar criar uma aplicação online, mas que possa trablhar offline quando necessário.O HTML indica ao browser elementos que deverão ser necessários e serem postos em cache para que a aplicação funcione offline.

Lista de Browsers que suportam

  • Firefox 3.5 +;
  • Chrome 9 +;
  • Opera 10.6 +;
  • Safari 5+;
  • IE 9 +;
     Mobile
  • iOS 3.2+;
  • Android 2.1+;
  • Opera Mobile 11+;

Estes são apenas algumas características deste “poderoso” HTML, certamente o HTML5 irá entrar no mercado gradativamente e facilitará a vida de desenvolvedores tanto no mercado web como no mobile, em uma nova oportunidade iremos abordar alguns cenários com estas APIs mais detalhadamente com exemplo de aplicações concretas.

Escrito por Marcel Guinther

Integrando o Eclipse ao Team Foundation Server

Introdução

Durante o desenvolvimento de um projeto pessoal, fui apresentado a um plugin para o Eclipse que me chamou a atenção. Percebi então, que este plugin na verdade poderia ser a solução de alguns problemas de Gerência de Configuração, como a padronização de processos de release de produtos. Resolvi trazê-lo para o conhecimento de todos através deste post. Este plugin que é pouco comentado no mercado, pode ser de grande utilidade para empresas que já possuem um Team Foundation Server (TFS) instalado (como é o caso da Mobiltec). Por mais que o SVN, Git e CVS sejam bons softwares de gestão de códigos fonte, é difícil para qualquer empresa ter que controlar diferentes tipos de servidores e ter que gerenciar diferentes tipos de releases de seus softwares. O ideal seria utilizar apenas um deles e unificar essa gestão. Pois bem, se a sua empresa já trabalha com o TFS e possui outros projetos em Java, o Team Explorer Everywhere 2010 (TEE) pode ser uma solução para unificar todos os processos da Gerência de configuração, centralizando tudo dentro do TFS. O TEE era de propriedade da empresa Teamprise que foi comprada pela Microsoft. Quem já possui uma subscription da MSDN, provavelmente tem direitos a este software e nunca ficou sabendo para que ele serve. Com este plugin, é possível integrar todas as funcionalidades do TFS no Eclipse, inclusive checkins vinculados a itens cadastrados no portal do TFS. É possível também controlar bugs, issues, etc., através deste plugin. Este plugin irá ajudar a Mobiltec em sua Gerência de Configuração, padronizando todos os projetos que são desenvolvidos em Java e C#, facilitando, assim a gerência dos projetos. O objetivo deste post será mostrar a instalação e demonstrar alguns recursos interessantes dessa ferramenta de integração, que auxiliam na gestão do desenvolvimento.

Instalação
Depois desta introdução é hora de por a mão na massa. O Team Explorer Everywhere 2010 SP1 está disponível para download aqui. O TEE SP1 é compatível com as versões 2005, 2008 e 2010 do TFS. É necessário ter o Eclipse, ou o IBM Rational Application Developer, ou ainda qualquer IDE baseado no Eclipse como o Aptana Studio e Adobe Flash Builder.

A instalação utilizada como exemplo será a do Eclipse, que é a ferramenta padrão de desenvolvimento Java aqui na Mobiltec. Para iniciar a instalação, baixe o arquivo zip TFSEclipsePlugin, usaremos ele mais adiante. O outro arquivo, TEE-CLC, é um cliente para acessar o TFS via linha de comando. Este cliente é cross-platform, ou seja, pode ser usado em qualquer sistema operacional, desde que suportado pelo programa. Não utilizaremos esse TEE-CLC, apenas o TFSEclipsePlugin. Depois do download concluído, no Eclipse, vá em Help e depois em Install New Software, conforme figura abaixo:

Na tela seguinte vá em Add e depois em Archive e selecione o zip baixado anteriormente. Em Name, pode ser colocado qualquer coisa (recomendação da Microsoft: Local Team Explorer plug-in archive). Feito isso, deverá aparecer o Plugin listado conforme a figura abaixo:

Adicionando o novo plugin

Marque o checkbox e clique em Next e novamente em Next. Aceite os termos da licença, e finalize. O plugin será instalado e será necessário reiniciar o Eclipse.

Utilizando o TFS Exploring

Depois que o Eclipse é reiniciado, para iniciar o cliente do TFS, vá em Window e depois em Open Perspective escolha Other. Irá aparecer uma lista de Perspectives parecida com a figura abaixo:

Abrindo perspectiva do TFS Exploring

Selecione a perspectiva Team Foundation Server Exploring. Este é o plugin para o Eclipse do TFS. Na visualização padrão, a esquerda é apresentado o servidor do TFS, e logo abaixo uma janela contendo os checkins pendentes. Outras janelas, como o History (histórico de alterações) podem ser encontradas em Window, Show View e depois em Other.

Para se conectar à um servidor TFS, utilize o botão abaixo da janela Team Explorer:

Conectar ao TFS

Irá aparecer uma janela mostrando os termos da licença, e antes de continuarmos, uma palavrinha sobre a licença.

Você poderá utilizar o TEE completo por 30 dias. Para trocar a licença do TEE, no Eclipse, vá em Window, Preferences e procure pelo caminho conforme a figura abaixo:

Troca da licença

Retomando, após aceitar os termos da licença, irá aparecer uma tela para adicionar um servidor TFS. Preencha os campos com as informações necessárias para se conectar ao seu servidor TFS.

Adicionando um servidor TFS

Principais Recursos

Abaixo uma lista dos principais recursos desse plugin.

Source Control

Source Control

Com o Source Control é possível explorar as soluções e os códigos fontes que estão no TFS. É possível visualizar históricos, realizar branches, merges, etc.

Work Items

Adicionando um work item

Podemos criar e consultar Work Items do projeto. Um Work Item pode ser um bug, uma issue ou mesmo uma tarefa que precisa ser realizada.

Synchronize

Sincronizando códigos fonte

Perspectiva que mostra as diferenças entre os fontes que estão na máquina do desenvolvedor e no servidor. Para abrir essa perspectiva, clique com o botão direito no projeto, depois em Team e Synchronize.

Vinculando Check-ins a Work Items

Realizando um checkin

Observe por esta imagem que podemos procurar por Work Items para que este possa ser vinculado ao check-in que o programador estiver fazendo. Assim fica fácil rastrear as correções de bugs e implementações de tarefas.

Conclusões

Observamos que a integração deste plugin com o TFS foi bem sucedida e este atendeu todas as expectativas. Com certeza será de grande utilidade nos projetos desenvolvidos para Android e J2EE. Agora falta descobrirmos uma integração entre o XCode e o TFS. Alguém tem uma sugestão? Bom, acho que isto é assunto para um futuro post. Até mais!

Escrito por Paulo Sérgio Morandi

Tutorial – Android – Parte 2 – Conhecendo suas ferramentas

Depois de seguirmos com os primeiros passos configurando nosso ambiente de desenvolvimento no Eclipse, agora partiremos para a segunda parte de nosso tutorial que tem por finalidade conhecer algumas das ferramentas que integram esse ambiente e como usá-las. O conhecimento de antemão dessas ferramentas possibilita aos desenvolvedores a agilizarem o processo de desenvolvimento, verificação e correção de erros.

No ambiente Eclipse trabalhamos com o conceito de Perspectivas, que nada mais é do que agrupamento de funcionalidades que estão associadas a determinadas tarefas. Cada perspectiva apresenta um visual próprio contendo abas que são importantes para determinada tarefa, e elas ainda podem ser customizadas pelo desenvolvedor da forma como lhe agradar mais. Para o desenvolvimento Android as principais perspectivas utilizadas são: Java, DDMS e Debug.

Essa perspectiva nos possibilita explorar projetos Java. Através da guia Package Explorer podemos visualizar a hierarquia de pastas do projeto que está aberto dentro do nosso workspace. Ao lado podemos visualizar e editar o conteúdo de cada arquivo do projeto e dependendo do tipo de arquivo podemos ter mais de uma visualização possível como na figura abaixo que temos um arquivo .xml que define o layout de uma tela da aplicação Android.

Pode-se notar que do lado esquerdo são apresentados alguns dos elementos gráficos que podem ser adicionados ao layout para compor a tela do aplicativo. E bem abaixo desses elementos são mostradas as abas Graphical Layout e note_editor.xml que alternam entre a visualização gráfica e a textual.

Agora observando a estrutura de um projeto Android através do Package Explorer podemos ter uma ideia de como ele funciona.

1. /src: Esta pasta deverá conter os arquivos fontes Java. Os arquivos deverão estar organizados de acordo com a estrutura de pacotes do projeto, que é semelhante à qualquer projeto Java.

2. /gen: Também é uma pasta de arquivos fontes, só que neste caso são os arquivos fontes automaticamente gerados pela plataforma Android. A classe R gerada conterá a estrutura do layout para que seja referenciada no projeto.

3. /Android {número de versão}: Esta pasta conterá as bibliotecas (jars) que serão necessárias no projeto.

4. /assets: Esta pasta também conterá recursos externos utilizáveis pela aplicação, porém diferentemente da pasta ‘/res’, estes recursos serão acessíveis somente programaticamente.

5. /res: Neste diretório serão colocados todos os recursos externos (como imagens, arquivos de dados) para serem usados na aplicação.Conterá as seguintes subpastas:

6. /res/drawable: Nesta pasta serão incluídas todas imagens usadas no projeto.

7. /res/drawable-hdpi: para tela de alta densidade (~240dpi);

8. /res/drawable-ldpi: para tela de baixa densidade (~120dpi);

9. /res/drawable-mdpi: para tela de média densidade (~160dpi);

10. /res/layout : Conterá os layouts das interfaces criadas no projeto. Serão armazenados como arquivos xml que serão interpretados pelo Android.

11. /res/values : Nesta pasta serão salvos arquivos xml que deverão conter pares de chave-valor referenciados na aplicação. A ideia é que sejam arquivos contendo valores como arrays, cores, dimensões, strings e etc. É útil para organizar as mensagem exibidas na aplicação, por exemplo.

12. AndroidManifest.xml: Este arquivo é muito importante para o projeto porque ele conterá as meta informações sobre a aplicação Android. Conterá informações sobre as atividades, views, serviços e etc, bem como a lista de permissões que deverão ser necessárias para rodar a aplicação.

Perspectiva DDMS

A Perspectiva Dalvik Debug Monitor Server exibe as ferramentas para controlar e monitorar os dispositivos e emuladores que estão conectados ao computador.

As principais guias utilizadas estão representadas na figura e são elas:

File Explorer: Através dele é possível navegar através das pastas de dentro do dispositivo. Ele permite executar comandos básicos de manipulação de arquivos como criar pastas, inserir arquivos e copiar arquivos. Observação: Quando se tratar de um dispositivo real não será possível ver algumas pastas do sistema por motivos de segurança.

LogCat: É responsável por capturar e apresentar as saídas de debug do sistema e dos aplicativos que utilizem esse recurso para registrar erros ou informações sobre a execução do aplicativo. Existem 5 tipos de logs para utilização: V (Verbose), D (Debug), I (Info), W (Warning) e E (Error).

Devices: Nesta guia podem ser vistos todos os dispositivos conectados ao Eclipse. Na figura apresentada é possível observar que existem dois dispositivos diferentes. Um é o emulator-5554 que corresponde a um emulador, criado pelo AVD Manager como visto no post anterior, e o outro corresponde a um smartphone que foi conectado ao computador e está habilitado para depuração. Abaixo de cada instância do emulador temos todos os processos que estão sendo executados e podem ser identificados pelo nome do pacote do aplicativo que é usado.

Observação: Para possibilitar o uso de um aparelho smartphone com Android é necessário primeiro instalar o driver fornecido pela fabricante ao computador. E depois é só habilitar no aparelho a depuração seguindo os seguintes passos: Vá em Definições > Aplicativos > Desenvolvimento e selecione o checkbox Depuração de USB.

Na guia Device também existem algumas ferramentas que estão representadas pelos ícones do lado direito superior.

1. Debug: Representa o estado do depurador. Se estiver verde, podemos acioná-lo para iniciar a tarefa de depuração. O processo que está sendo depurado ficará com o mesmo ícone ao lado esquerdo.

2. Update Heap: Atualiza as informações sobre o uso de memória.

3. Dump HPROF file: Utilizado para verificar vazamentos de memória (memory leak).

4. Cause GC: Invoca o Garbage Collection.

5. Update Threads: Atualiza as informações e atualizações das threads em execução no processo.

6. Start Method Profiling: É útil para obter uma visão geral de como o tempo é gasto em torno da sua aplicação e inspecionar funções críticas do sistema.

7. Stop Process: Pára o processo selecionado.

8. Screen Capture: Realiza a captura da tela do emulador ou dispositivo no presente momento.

 

Perspectiva Debug

Nessa perspectiva são mostradas as guias do depurador Java que fornece as funcionalidades de depuração, a capacidade de realizar execução por etapas, configurar pontos de interrupção e valores, inspecionar variáveis e valores, e suspender e retomar encadeamentos.

Para criar um ponto de parada (breakpoint) no nosso código, é só clicar com o botão direito sobre a linha de código que deseja e selecionar Toggle Breakpoint, ou apenas dar um clique duplo ao lado esquerdo da linha. Lembrando que para realizar a depuração o processo da aplicação precisa estar com o debug habilitado, isso pode ser visto no DDMS como foi explicado anteriormente.

Na guia Debug existe algumas opções para o acompanhamento da depuração.

Dentre as principais estão:

  1. Resume (F8): Restabelece a execução normal do processo.
  2. Suspend: Suspende a execução dos encadeamentos.
  3. Terminate (Ctrl + F2): Encerra a depuração do processo.
  4. Disconnect: Disconecta o processo da tarefa de depuração.
  5. Step Into (F5): Usado para seguir o passo da execução dentro do método.
  6. Step Over (F6): Usado para seguir no próximo passo da execução na linha do código.

Neste post focamos nas principais ferramentas que o Eclipse e o Android nos fornecem para podermos desenvolver um projeto com mais facilidade e aumentar a nossa produtividade.

Escrito por Roger Mack