quarta-feira, 28 de abril de 2010

Começando o desenvolvimento com Android

Olá pessoal!

Nos últimos dois posts que fiz, o objetivo era apresentar os conceitos básicos da plataforma Android para que pudéssemos iniciar o desenvolvimento de aplicações de forma menos traumática, principalmente para aqueles que estão saindo do mundo Web e/ou Enterprise e entrando nessa área de mobilidade. Então, acho que já está mais do que na hora de colocarmos a mão na massa. Pra isso, vou fazer um guia rápido pra você deixar seu ambiente de desenvolvimento pronto e ai vamos fazer um primeiro "Hello World", apesar de não gostar muito desse tipo de exemplo. E para o post não ficar muito extenso, em uma continuação desse post vamos publicar a aplicação no Market.

IDE e SDK
A principal IDE utilizada para o desenvolvimento é o Eclipse que, com o download de um único e simples plug-in, você será capaz de criar projetos, debugar (inclusive direto do aparelho), criar telas através de editores gráficos (irei mostrar mais a baixo) e gerar os pacotes para distribuição da sua aplicação.Mas além da IDE você também deve ter instalado o SDK do Android, que no primeiro download vem "vazio".
Explicando, ele é somente um gerenciador de plataformas (1.0, 1.5, 2.0, etc) e depois de instalado, será necessário então baixar as versões especificas para qual SO você irá querer desenvolver. A dica é já baixar todas as disponíveis para que você não precise ficar interrompendo seu trabalho para baixar uma versão que já poderia ter baixado no momento da instalação.
E como o objetivo aqui é guiar você, não faria sentido gastarmos muito tempo falando de instalação com tantos guias por aí, inclusive o próprio guia do Android é ótimo.

Criando projeto no Eclipse
Depois de instalar o SDK e o Eclipse (caso você ainda não tivesse instalado), é hora de começarmos, criando o projeto. Quando for criar um novo projeto, escolha um "Android Project", e então será mostrada a tela abaixo:

Os principais pontos que temos que nos atentar nessa tela são:
  • Build Target: Aqui você deverá escolher para qual plataforma Android deseja desenvolver. O ideal nesse ponto é sempre usar a plataforma que tenha mais dispositivos, por exemplo a 1.5, mas lembrando que alguns recursos podem estar disponíveis somente na 2.0 ou 2.1. Além disso, se desejar utilizar integração com o Google Maps você deverá escolher a plataforma Google APIs, pois escolhendo somente Android 1.x ou 2.x, essa integração não está incluída. Em um outro post iremos discutir essa questão dos mapas.
  • Application Name: É o nome que sua aplicação terá e que também será exibida no Market, caso você venha a publicá-la. Portanto, muita atenção e cuidado para não escolher um nome "repetido". Em tempo, o Market não irá recusar sua aplicação caso já exista alguma com o mesmo nome, pois o que ele compara é o pacote da sua aplicação, que já irei explicar abaixo.
  • Package Name: É o nome do pacote que irá conter sua Activity principal, e deverá ser inédito de outra aplicação já existente no Market. A dica é, usar um dominio, ou seu nome, enfim, algo que você tenha certeza que não haverá outro igual.
  • Min. SDK Version: Esse campo é preenchido automaticamente quando você escolhe o Build Target e a não ser que você sabia EXATAMENTE o que está fazendo, não deve alterar isso manualmente, pois ele indica a versão minima do Android compatível com a sua aplicação.
Projeto criado!
Depois que o seu projeto é criado, você terá uma estrutura parecida com a da figura abaixo:


No pacote src temos então a atividade que você pode ter determinado na tela de criação de projeto (caso tenha feito isso) e onde irão ficar suas demais classes. E no pacote gen, são as classes geradas pelo próprio ADT, a se destacar a classe R.java. Essa classe será a responsável por fornecer os ids das views, resources e demais recursos disponíveis na sua aplicação Android.
Logo abaixo está a pasta assets, onde você irá armazenar recursos como fontes TrueType, por exemplo. E na pasta res, são armazenados os demais recursos, como por exemplo imagens e Strings utilizadas na internacionalização da sua aplicação.

Atenção: Os nomes das imagens e qualquer outro recurso (seja asset ou um resource comum) deve ser composto apenas de número, letras minusculas, underline ( _ ) e ponto ( . ).

Vale destacar a pasta layout, onde serão armazenados os XMLs das telas que você criar para serem exibidas através de Activities ou dialogs, por exemplo. Vamos abaixo mostrar a edição de um layout desses.

Edição gráfica de UI
O plugin do Android permite que as telas sejam editadas graficamente, com uma ferramenta onde você pode arrastar e soltar componentes e layouts, além de permitir a edição de seus parametros e valores. Veja a tela abaixo, onde estamos exibindo o layout main.xml que será a nossa tela principal do Hello World:


Dê uma navegada nessa tela, "perca" um tempo investigando-a. Em um outro post falaremos sobre como criar uma tela "do zero".

Dando uma olhada na Activity
Considerando que você tenha indicado uma Activity para ser criada quando iniciou seu projeto, vamos dar uma olhada em algumas linhas de código:
super
.onCreate(savedInstanceState);

setContentView(R.layout.main);


O que vemos aqui, é a chamada do método onCreate da superclasse Activity, e logo em seguida, a definição do layout main, que é definido pelo main.xml como o conteúdo a ser exibido pela View. Como eu havia dito, podemos ver que a classe R é a responsável por nos ajudar em "encontrar" esses recursos.

Executando o Hello World
Cliando com o botão direito no nosso Hello World, escolha a opção "Run As..." e depois "Android application". Dependendo da configuração da sua máquina, essa primeira execução pode demorar um pouco, pois o emulador é um pouco pesado. Mas depois, você não precisa mais fechar e abrir o emulador novamente, deixe ele sempre aberto e só execute o "Run As..." e sua aplicação será instalada novamente, com a última versão que você quer testar.
Vamos então, dar uma olhada como fica o Hello World no emulador:



E então...
Bom pessoal, a idéia hoje era mostrar a criação de um projeto para que vocês comecem a se familiarizar com a estrutura e entender algumas coisas básicas. Voltarei em breve explicando o ciclo de vida de uma Activity e o uso de alguns Layouts e Views, fazendo assim a nossa primeira aplicação mais "complexa".

Abraços e até a próxima!
Neto

JBoss In Bossa está quase aí!

Na próxima semana acontece em São Paulo a reunião anual promovida pela JBoss Brasil, o chamado JBoss In Bossa!

Este evento será muito especial porque contará com palestrantes internacionais que são líderes dos projetos open source da JBoss/RedHat, palestrantes da JBoss Brasil e convidados especiais da comunidade brasileira. Toda essa turma trará para os desenvolvedores, gestores e arquitetos as informações mais atualizadas sobre a família de tecnologias Java EE desenvolvida e fomentada pela JBoss.

Estaremos lá contribuindo com o nosso conhecimento e experiência em algumas tecnologias Java EE ao oferecer para a comunidade uma visão sobre o JavaServer Faces (JSF) e o projeto ScrumToys num workshop com 2 horas de duração.

Neste workshop serão ilustradas as diversas melhorias do JSF 2.0 através de códigos escritos para uma aplicação web simples que, chamada de ScrumToys, foi incorporada ao pacote de exemplos na última versão do NetBeans. Esta aplicação será executada através do JBossAS 6 e culminará na integração de uma aplicação web com computação física através do Arduino/Program-ME. Os participantes deste workshop poderão por a mão na massa e, junto com os instrutores; Vinicius Senger, Yara Senger e Dr. Spock; ao executar passo-a-passo os tópicos abordados através de um computador pessoal levado ao evento.

As incrições para este evento ainda estão abertas: Faça a sua Inscrição! Use o código promocional da Globalcode 3880A2BC durante a inscrição e pague apenas R$ 150,00 em vez de R$ 230,00.

Saiba mais sobre esta conferência em JBossInBossa.

Para mais detalhes sobre o workshop veja a página em WS4 - JSF 2.0: Uma evolução nas interfaces web com Java.

Data: 07 e 08 de Maio de 2010
Local: Universidade Anhembi/Morumbi - Campus Vila Olimpia na Casa do Ator
Workshop: JSF 2.0: Uma evolução nas interfaces web com Java
Horário: 07/05 (sexta-feira) das 16h às 18h na sala 1.


[]s
Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/
Meus posts: http://blog.globalcode.com.br/search/label/Spock

Fatos e Fotos sobre o CasualClass TV Digital


Este CasualClass teve um tema muito especial, o assunto certo, na hora certa, com as pessoas certas: TV Digital com Java   Assunto certo na hora certa porque o Ginga foi recentemente aprovado como padrão Brasileiro, saiba mais no post do Dr. Spock aqui no Globalcoders.




Pessoas certas porque tivemos toda a motivação e conhecimento de mercado do Dimas Oliveira, aliado à experência prática e visão de Desenvolvedor do Thiago Vespa que falou sobre Blu-ray e Ginga-J e o conhecimento de LWUIT do Neto Marin.



Este CasualClass foi um pouco diferente dos anteriores pois, seguindo sugestões dos amigos que sempre participam do Casual Class, invertemos a ordem da pizza que foi servida logo no início do evento.



Mas, as pessoas comeram mais rápido do que nós imaginávamos, e logo foram para o auditório, onde o Dimas Oliveira, engenheiro da Sun / Oracle teve "atitude" e começou a conversar informalmente com a galera, que respondeu e perguntou bastante. Sem dúvida a interação com a plateia foi um dos pontos positivos do evento.

Poucos dias antes do CasualClass recebi uma ligação do Dr. Spock, que sugeriu transmitirmos o CasualClass via WebCast. Aceitamos o desafio e toda a parte técnica do CasualClass foi transmitida. Algumas pessoas assistiram de casa, e um grupo de Brasília fez seu próprio evento na América Data, que é a Unidade Globalcode em Brasília.


Este evento é muito especial para nós por vários motivos, primeiro porque é uma iniciativa que vem das origens da Globalcode, lá do início mesmo, quando tínhamos uma pequena sala na Alexandre Dumas... Segundo porque é um momento de confraternização com os nossos amigos (instrutores e alunos) e podemos conversar sobre diversos assuntos e tendências.


Ah, teve também o pessoal do Android, que não conseguia parar de mexer no telefone, twittando, fotografando... Preparados para a primeira turma do Hands-on Android que aconteceu no sábado.

Gostaria de agradecer especialmente todos os palestrantes que participaram compartilhando seu conhecimento com muita energia e motivação: Thiago Vespa e Neto Marin, bem como nosso convidado especial Dimas Oliveira!

Ah, ainda tem mais agradecimentos: Alberto Lemos (Dr. Spock) que motivou e viabilizou a transmissão via webcast, Carlos Fernando Gonçalves e aos amigos que vieram de São José do Rio Preto para participar do evento, e ao Renan da America Data (Unidade Globalcode Basília) que organizou um grupo de alunos e amigos para assistir o evento lá de Brasília.

E claro, se já tem dois parágrafos de agradecimento, aproveito para agradecer o Paulo (JCranky) pela excelente cobertura no blog deste Casual Class e de muitos outros, além de todos os colaboradores e participantes do evento! Valeu Galera! Foi demais.

Próximo CasualClass 

Já estamos pensando no tema para o próximo Casual Class, e a primeira ideia que tivemos foi JavaFX, o que você acha ?
Deixe seu comentário!

Um abraço e até a próxima!

Yara Senger
http://twitter.com/yarasenger
http://blog.globalcode.com.br/search/label/Yara
http://www.globalcode.com.br/instrutores/YaraSenger

Novidades relacionadas a Google App Engine na Globalcode

No último boletim tivemos dois anúncios relacionados a Google App Engine, a plataforma de Cloud Computing da Google, ambas em parceria com Rafael Nunes, instrutor e sócio da YouAndWe, Unidade Globalcode no ABC Paulista/ São Bernardo do Campo.

Novo Minicurso gratuito "Introdução a Google App Engine"

Quer colocar aquela sua ideia genial pra funcionar? Quer compartilhar seus projetos open-source com a comunidade? Não quer se preocupar com infraestrutura de servidores e ter um poder de processamento e escalabilidade além do imaginável?

Nós da comunidade Java temos todas as ferramentas que precisamos para criar aplicações igual ou superiores às que são criadas em outras plataformas, na verdade temos até mais. Vamos ver um pouco da estrutura do Google App Engine, sua plataforma e serviços, e como podemos nos beneficiar em executar nossos projetos na plataforma Java utilizando-se de toda a estrutura disponibilizada pelo Google.

Seguindo a tendência da Open4Education2.0 este minicurso será realizado em São Paulo e transmitido via WebCast para todo o Brasíl.

Inscrições e informações

Novo Hands-on Google App Engine com Java

Neste hands-on abordaremos de forma prática e direta o desenvolvimento de uma aplicação web completa pronta para ser hospedada no GAE, incluindo seus principais serviços como: Persistência com Datastore, manipulação de requisições web com os principais frameworks de mercado, envio de e-mail, aumento de performance com serviço de cache e processamento assíncrono.


Mais informações



Notícias e posts relacionados

Construindo um império com R$ 40,00

Exemplo de CRUD para o AppEngine(Struts 2 + Google Guice + JPA)

Entrevista Mike Repass e Pamela Fox

É isso aí, mil motivos para estudar, estudar, estudar.

Yara
http://twitter.com/yarasenger
http://blog.globalcode.com.br/search/label/Yara
http://www.globalcode.com.br/instrutores/YaraSenger

segunda-feira, 26 de abril de 2010

3º Bate Papo do SP-GTUG - Divulgação

Pessoal,

Teremos um novo bate papo do SP-GTUG, aberto e gratuito, acerca de mais uma tecnologia do Google: o Analytics. Este será o terceiro bate papo do SP-GTUG.

Local e data

O bate papo acontecerá no dia 28/04/10, das 19:00 às 22:00 na Globalcode. Para fazer sua inscrição e participar acesse a home da Globalcode e vá até a parte de "Minicursos Gratuitos da Semana" (ou acesse esse link para ir direto a página de inscrição).

Conteúdo da apresentação

Abaixo segue a descrição passada pelo palestrante:

Título: "Google Analytics"
Resumo: A idéia de agenda para a apresentação segue:
- Apresentação pessoal;
- Uma breve retrospectiva sobre a história do Web Analytics, quais as principais ferramentas, como funcionam, prós e contras;
- Google Analytics: - Implantação (inserção de tags e desenho de métricas);
- A interface web;
- Contas e sub-contas;
- Módulos e funcionalidades;
- Mensuração de campanhas;
- Busca orgânica, paga e interna;
- Análises avançadas;
- Metas
- Funis
- Análises customizadas
- Exemplos de usos não óbvios:
- Mensuração de propagação de conteúdo
- Mensuração de campanhas em mídia social
- Correlação de simulações e vendas
- Espaço para dúvidas
Ministrada por: Rodrigo Rubio (http://www.linkedin.com/in/rrubio)

Novidade: Palestras rápidas (Lightning Talks)

Seguindo uma sugestão do Luciano Ramalho (renomado membro da comunidade Python no Brasil e membro do SP-GTUG), iremos fazer um "beta test" nesse bate papo. Incluíremos após a palestra principal (que terá 1h30 de duração) um ciclo de palestras curtas (lightning talks), que serão definidas no local e durante a apresentação. Serão apresentações feitas por pessoas que estarão na platéia. Você tem alguma idéia ou apresentação pronta? Consegue passar algum tipo de conhecimento em 5~15 minutos? Sinta-se a vontade para fazer presença!

Caso exista tempo livre após as palestras curtas, discutiremos idéias para os próximos eventos do grupo, além de ouvir a opinião da galera.

Você perdeu o 2º Bate Papo do SP-GTUG? Então veja o conteúdo passado!

Abaixo estão as apresentações feitas no 2º Bate Papo do SP-GTUG. Para mais informações acesse o post escrito aqui mesmo no Globalcoders.
Portanto...

Se você participou (ou não) do 2º Bate Papo, não perca tempo e faça sua inscrição agora!
Venha dar sugestões e, quiçá, exibir algo do seu conhecimento para o grupo!
Apareça para dar idéias, opiniões, conhecer gente nova e fazer networking na quarta-feira.

Até lá!

Rodrigo Ribeiro
http://templariodatecnologia.wordpress.com

quinta-feira, 22 de abril de 2010

Casual Class TV Digital - Agora com transmissão via Web

Amanhã, dia 23/04, a Globalcode estará realizando o seu 11o Casual Class com o tema TV Digital.

O objetivo deste Casual Class é trazer, para a comunidade de desenvolvedores Java, as informações necessárias para quem deseja ingressar no mercado de desenvolvimento de aplicações para a TV Digital Interativa.

Se você ainda não conhece essa área de desenvolvimento, não se preocupe. De fato, este é um mercado que teve início na semana passada com a aprovação, pela ABNT (Associação Brasileira de Normas e Técnicas), do Ginga - o padrão brasileiro de TV Digital.

Notícias da aprovação:
Com a aprovação do padrão Ginga, as emissoras e fabricantes de aparelhos de TV podem dar início à exploração de aplicações interativas no ambiente de TV Digital, abrindo espaço para um novo formato de software que terá muita demanda de programadores e, em especial, programadores Java.

Relação do Ginga com Java

O Ginga é subdividido em dois subsistemas principais chamados de Ginga-J (para aplicações procedurais Java) e Ginga-NCL (para aplicações declarativas NCL). O Ginga-J foi desenvolvido para oferecer uma infra-estrutura de execução de aplicações baseadas em linguagem Java para o ambiente de TV digital. Isso significa que haverá muitas oportunidades para o desenvolvedor Java nessa área.

Como se envolver?

Como toda tecnologia recente, não há muitas informações disponíveis.

Por isso, o Casual Class desta semana é, sem dúvida, uma das poucas oportunidades de se informar sobre Ginga, Ginga-J, LWUIT, Blu-ray, e muito mais de uma só vez, e de forma descontraída (Casual Class é sinônimo de diversão e aprendizado).

Quem vai estar lá?

Para conduzir o Casual Class - TV Digital, contaremos com os instrutores Thiago Vespa e Neto Marin, que têm experimentado o desenvolvimento com Ginga e tecnologias relacionadas em primeira mão.

Também contaremos com a presença de Dimas Oliveira, engenheiro da Sun/Oracle que participou ativamente da especificação do Ginga-J.

CasualClass 2.0 - transmissão via Web

Se você não pode participar...

Não se preocupe, pois pensando nos clientes que não podem estar presentes, a parte técnica do Casual Class TV Digital também será oferecida via WebCast (beta!).

Quem não puder comparecer à Globalcode poderá assistir de casa (a uma taxa de R$ 15,00) a transmissão do áudio + slides do Casual Class TV Digital. A transmissão terá início às 20:15 com a palestra do Thiago Vespa sobre Blu-ray.

Lembramos que por ser uma transmissão via Web, é possível que haja problemas de atraso no conteúdo ou de conexão do cliente. Para evitar maiores problemas, sugerimos aos clientes que forem assistir o Casual Class nesse formato, que entrem com meia hora de antecedência para ajustar fone (fundamental), configurações do sistema de webcast e outras coisas.

As inscrições para essa modalidade do evento já podem ser feitas no site do Casual Class: http://www.casualclass.com.br/edicoes/tvdigital.

Outras Unidades Globalcode

Os clientes das unidades Globalcode fora de São Paulo podem entrar em contato com as unidades para conversar sobre a possibilidade de transmissão na própria unidade.

Dados do evento:

Data: 23/04/2010
Local: Auditório Globalcode São Paulo
Av. Bernardino de Campos, 327, Cj 22
Horário: 19:00 - 22:30
Transmissão: 20h15 até as 22:30
Inscrições: http://www.casualclass.com.br/edicoes/tvdigital

Veja a agenda do Casual Class - TV Digital e faça sua inscrição online. O valor é simbólico, consulte.

Abraços e espero que aproveitem!!

Elaine Silva
http://www.twitter.com/elaineqsilva
http://www.globalcode.com.br/instrutores/ElaineSilva

quarta-feira, 14 de abril de 2010

Java no mundo das Telecomunicações

Este é meu primeiro post aqui no blog e gostaria de dizer que estou muito feliz em também poder contribuir com esta grande (e crescente) família Globalcode.

Vou começar escrevendo aqui sobre um tópico pouco explorado no universo Java: o seu uso no mundo das telecomunicações.

Vários de vocês podem ter trabalhado em projetos para empresas de telecom utilizando a tecnologia Java. Eu mesmo já participei de alguns, implantando sistemas de tarifação, faturamento, CRM e cobrança. Mas o objetivo deste post é um pouco diferente: estou falando do uso de Java na própria rede de telecom. Como vocês podem imaginar, esta rede que permite que ligações telefônicas sejam feitas de seu celular ou aparelho fixo é um tanto quanto complexa, lidando com aspectos como roteamento, bilhetagem, roaming, etc. E o Java está presente neste cenário também.

Para provar que não estou mentindo, abram o site do JCP e cliquem no link "JSRs by Technology". Observem que uma das categorias lista é a JAIN (Java APIs for Integrated Networks). São 22 JSRs voltadas para a criação de APIs, focadas em protocolos e arquitetura de redes convergentes.

Para entendermos direito do que se trata e o enorme potencial de aplicações que isto traz, vou dividir este post em algumas partes:
  1. Introdução às Redes Convergentes/IMS
  2. VoIP/SIP
  3. SIP Servlets
  4. JAIN SLEE
Vamos começar contando (de forma mega simplificada) o cenário atual das redes de telecomunicações. Nas próximas semanas pretendo falar sobre VoIP/SIP e o uso prático de Java nestes cenários.

Redes de Telecomunicações
Atualmente, nos conectamos um ao outro através de três redes principais:
  • Internet - rede baseada em pacotes e nos protocolos TCP/IP, que permite o uso de uma infinidade de serviços, como a Web, IM, e-mail, etc.
  • Rede Celular - rede de telecomunicações baseada em circuito (2G) ou em pacotes (3G) que basicamente possibilita o estabelecimento de chamadas de voz. Sua principal característica é a onipresença.
  • Rede Fixa - primeira a surgir, é uma rede de telecomunicações baseada em circuito. É o telefone fixo das nossas casas, cada vez mais em desuso.
Notem: são três redes diferentes, todas com o mesmo intuito de facilitar a comunicação entre pessoas e prover serviços para os seus usuários. Parece um pouco redundante, não? Vamos olhar o conceito de NGN.

Next-Generation Networks (NGN) é um termo amplo, utilizado para descrever um conjunto de evoluções arquiteturais nas redes de fixa/celular, cujo objetivo primordial é convergir todas as redes em apenas uma. Esta nova rede será baseada em pacotes (mais especificamente no protocolo IP) e será utilizada para transportar todas as informações e serviços (Wikipedia). Em outras palavras: é utilizar a internet para os serviços que as redes de telecom hoje nos provem, sem perder a mobilidade e a onipresença das redes celulares. Um outro ponto importante para nós é que nas NGNs define-se uma arquitetura unificada para a implementação e disponibilização de serviços, independente de camada de transporte, que poder ser acessada de qualquer dispositivo / lugar (opa, isto parece ter muito a ver com desenvolvedores...)

Algumas dúvidas comuns:
  • Eu uso a linha do meu telefone fixo para se conectar à Internet! Isto não significa que meu telefone já está na "Internet"?
A resposta é não. Você utiliza o meio físico do seu telefone fixo para acessar a Internet. A internet é uma infraestrutura de certa forma "paralela" à rede fixa. Semelhantemente, quando você acessa a Internet através de seu celular, você está utilizando o meio físico para se conectar. São redes diferentes, o que requisita manutenção dobrada e conversões entre os domínios (feitas pelos chamados "gateways").
  • O que eu (e o mundo) ganha unificando as redes?
Muitas coisas:
  • Uma rede única baseada em pacotes (que tende a fazer um melhor uso de banda que redes baseadas em circuitos).
  • Acesso unificado e integrado aos serviços. Alguns exemplos: acesso à caixa postal do telefone pela Web, confirmação de transação eletrônica via telefone, videoconferência entre dispositivos diversos, etc
  • Independência de dispositivo e de localidade. Assim, você liga para wilson at globalcode.com.br, não para um número de celular ou telefone fixo. Em qualquer lugar do planeta você recebe uma ligação como se fosse local.
  • Tarifação diferenciada. Acessar a Internet pelo celular me parece um pouco caro hoje, assim como ligações de longa distância.
E o que um desenvolvedor Java ganha com este movimento?
  • Nova gama de serviços (já pensou em implementar uma central de atendimento a la Call Centers em Java?)
  • Desenvolvimento de serviços unificados e de amplo alcance (TODOS poderão utilizá-lo)
  • Desenvolvimento de nós do core da rede (duvida? Veja o projeto Sailfin).
Como me disseram uma vez, os desenvolvedores de software começam a fazer parte da rede de telecom. Agora ela fala a nossa língua (IP? :)).

Um lembrete importante: NGN é um conceito arquitetural/comercial. Em termos práticos, existe uma especificação de uma rede baseada nestes conceitos chamada de IMS (IP Multimedia Subsystem). Esta especificação é mantida pelo 3GPP, que entre outras responsabilidade mantem tudo que é relacionada a GSM.

Obviamente esta evolução será longa e díficil. Existem dificuldades enormes em se trocar o core de uma rede telecom, além de óbvios interesses comerciais das operadoras de explorarem a infra-estrutura já existente.

Além destas mudanças de infra-estrutura, uma outra mudança necessária é de que nossas conversas terão que ser transportadas via Internet. Assim, os protocolos de VoIP (Voice over IP) começam a ganhar cada vez mais importância. Falo sobre eles em seguida ...

Até breve!

Wilson

O que é Lógica de programação?

Este é o segundo de uma série de posts voltados aos leitores do blog que estão dando início à carreira de desenvolvimento de software. O assunto de hoje é a lógica de programação.

Para ler antes: Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados

A lógica de programação é um pré-requisito para quem quer se tornar um desenvolvedor de software, independente da linguagem de programação que se pretende utilizar.

Mas o que é de fato a Lógica de Programação e como saber se eu tenho esse pré-requisito?

A lógica de programação nada mais é do que a organização coerente das instruções do programa para que seu objetivo seja alcançado. Para criar essa organização, instruções simples do programa, como mudar o valor de uma variável ou desenhar uma imagem na tela do computador, são interconectadas a estruturas lógicas que guiam o fluxo da execução do programa. Isso é muito próximo ao que usamos em nosso cotidiano para realizar atividades simples que vão desde atravessar a rua até a trocar o pneu de um carro.

Por tráz das atividades que realizamos no nosso dia-a-dia, há sempre o chamado raciocínio lógico que define os passos para que nossa atividade seja completada com sucesso. Quando esse raciocínio falha, ou seja, não é suficientemente preciso, há grandes chances de não alcançarmos nosso objetivo. A mesma coisa acontece com os programas de computador.

Por isso, embora pareça simples, usar o raciocínio lógico para instruir um computador a realizar nosso desejo, é uma tarefa bastante complexa que exige muita prática. Faça um teste, experimente listar todos os passos envolvidos com a troca de um pneu.....

A maioria das pessoas que fazem esse exercício pensam nas tarefas, tirar um pneu e colocar o outro. Algumas pessoas mais detalhistas pensam em abrir o porta-malas e pegar o pneu de estepe. Mas poucas pessoas pensam em coisas como:
  • se o estepe não está cheio o suficiente,
    • ligar para o seguro e aguardar o socorro.
  • Se o estepe estiver ok,
    • pegar o macado no porta-malas,
    • posicionar o macaco sob o carro,
    • suspender o carro com o macaco,
    • desparafusar todos os parafusos,
    • tirar o pneu,
    • colocar o estepe,
    • parafusar todos os parafusos,
    • abaixar o macaco,
    • guardar o macaco no porta-malas,
    • guardar o pneu furado no porta-malas,
    • fechar o porta-malas,
    • entrar no carro,
    • ligar o carro,
    • dirigir até encontrar uma borracharia.
Ufa... Viram como é difícil?
Agora imagine se estivéssemos escrevendo um programa que troca pneus!!! :-)
  • Será que seu programa saberia o que precisa ser feito?
  • Será que o fluxo de execução estaria completo como você pensou?
Esse é o grande desafio do programador: montar a estrutura lógica do programa para ser executado pelo computador.

O programador deve partir do princípio que o computador não pensa e não é inteligente para saber o que precisa ser feito. Portanto, ao escrever o programa, cada tarefa a ser executada pelo computador deve ser minuciosamente detalhada pelo programador.

Esse detalhamento se dá pela organização das instruções do programa usando estruturas de controle que irão guiar o seu fluxo de execução. Tais estruturas de controle são as expressões condicionais e os laços (ou repetições).

Estruturas condicionais

As estruturas condicionais permitem realizar desvios de fluxo com base na avaliação de condições.

No caso do pneu, a frase "se o estepe estiver ok" é a condição que permitirá a execução das demais atividades relacionadas à troca do pneu. Se a condição não é verdadeira, ou seja, "se o estepe não está cheio o suficiente", os próximos passos seriam "ligar para o seguro" e "aguardar o socorro ".

Repare que seguir por um caminho ou por outro (fluxo) depende da condição estabelecida.

Estruturas de repetição (laços ou loops)

Os laços são indicações de que uma ou mais tarefas precisam ser executadas mais de uma vez.
Por exemplo, no caso do pneu, a frase "parafusar todos os parafusos" indica que devemos identificar todos os parafusos soltos e parafusá-los.

A função do laço é permitir a repetição de instruções sem a necessidade de reescrevê-las, até que uma condição seja satisfeita.

Neste exemplo, a condição é que todos os parafusos sejam parafusados. Imagine se tivéssemos que escrever, parafuse o primeiro parafuso, parafuse o segundo parafuso, parafuse o terceiro parafuso.... seria repetição desnecessária de instruções .

Lógica do programa

A lógica de um programa é montada por meio da combinação de várias instruções (de entrada, manipulação ou saída de dados), condições e laços. Por isso é que a lógica de programação é o requisito fundamental para o profissional de desenvolvimento de software. Para desenvolver programas usando qualquer linguagem de programação, o programador deve saber como montar as instruções do programa.

Veja abaixo um exemplo de programa que atribui 1 para a variável x e monta uma estrutura de repetição (laço) para verificar se x é divisível por 2. Se a condição for verdadeira, o valor de x é impresso, caso contrário, o valor de x é incrementado em 1. Essa repetição irá acontecer enquanto x for menor do que 10.

A representação utilizada é de um algoritmo em português estruturado, e para funcionar em um computador, precisamos escrever as instruções utilizando uma linguagem de programação.


Modularização (Procedimentos e funções)

Quando um trecho do programa precisa ser reutilizado em outros locais, é comum isolar esse trecho em procedimentos ou funções reusáveis. A criação desses procedimentos e funções também faz parte do conceito de lógica e é muito importante para o programador. Mas isso ficará para um futuro post.

Como desenvolver a prática da lógica de programação?

A dica que fica aqui é que se você está pensando em ingressar na área de desenvolvimento de sofware, com Java ou qualquer outra linguagem de programação, é preciso estudar todos esses conceitos e praticar muito.


Novamente volto a frisar que a Academia do Programador da Globalcode é uma excelente forma de começar. Nesse treinamento, todos os assuntos que tenho falado nesses últimos posts são bem detalhados e praticados usando o Program-ME como diferencial.

O Program-ME é um hardware utilizado no curso Academia do Programador para que o aluno possa praticar a lógica de programação de forma muito mais divertida, usando leds, sons, sensores, etc, para testar as condições e/ou laços. Essa é uma metodologia de ensino de lógica de programação pioneira. Vale a pena conferir.

Elaine Quintino Silva
http://twitter.com/elaineqsilva
http://www.globalcode.com.br/instrutores/ElaineSilva

Primeira turma da Academia Agile na Globalcode

Cursei o primeiro módulo da Academia Agile - AG1 Implantando e Liderando Equipes Ágeis e fiquei agradavelmente surpreendido com o teor e a pedagogia aplicados pelos instrutores Felipe Rodrigues (Fratech) e Manoel Pimentel (Visão Ágil).

Embora eu seja de geração mais antiga (não façam contas, por favor), tenho a atenção sempre voltada para os aperfeiçoamentos e, consequentemente, para novos aprendizados.

As quebras de paradigmas, a utilização de princípios da psicologia e as dinâmicas em grupo superaram em muito minhas expectativas. Estou absolutamente convicto de que uma nova era, relativamente a conceitos de metodologia, está se firmando definitivamente.

O primeiro módulo desenvolveu muito bem o papel do 'coaching', fornecendo subsídios importantíssimos para aqueles que são ou pretendem tornarem-se líderes de equipes, enfocando aspectos que transcendem o 'modus operandi' atualmente predominante, levando o interessado a 'pensar-se' em termos de consciência e responsabilidade perante o grupo que está sob sua orientação. Esta nova postura amplia significativamente a visão de contexto, potencializando no líder a capacidade de integrar diretrizes profissionais com o potencial humano, de uma forma harmônica e eficaz.

Parabéns a todos os alunos e instrutores pela primeira turma da Academia do Agile, especialmente pelo sucesso do primeiro módulo.


Waldir Hadad - Reassumindo, com muita alegria, a diretoria Comercial/Administrativa da Globalcode, onde atuei de 2004 a 2008.

terça-feira, 13 de abril de 2010

Entendendo uma aplicação para Android

No post passado, o objetivo era apresentar aos que não conheciam, ou esclarecer melhor aos que sabiam pouco, a respeito da plataforma do Google para smartphones (e agora também para tablets), o Android. E antes de começarmos a falar diretamente de código, temos que entender como uma aplicação é estruturada e falar do que podemos chamar de os quatro pilares de uma aplicação para o Android.

Os quatro pilares
Uma aplicação Android se baseia em quatro tipos de classes principais: Activities, services, broadcast receivers e content providers. Cada um desses tipos representa uma forma de interação que sua aplicação irá ter com o usuário, plataforma ou com outras aplicações. Elas podem coexistir em uma única aplicação ou também podem existir separadamente. Mas, vamos entender isso melhor discutindo cada tipo.

Activities
As classes responsáveis pela interação visual da aplicação com o usuário são as que extendem de Activity. Essas classes irão apresentar menus, listas, formulários ou qualquer outra interação que você deseje fazer através das "telas" da sua aplicação. Uma classe Activity é composta por um ou vários objetos do tipo View, que pode ser um texto, uma imagem, um botão ou qualquer outro elemento de interação com o usuário.
Sua aplicação poderá ter uma ou várias activities, tudo isso depende de como você irá fazer o design de navegação. E além disso, sua aplicação pode não ter nenhuma Activity, isso pode acontecer se ela for um serviço, como veremos abaixo.

Services
Uma classe Service não tem interação visual com o usuário, mas ele tem a característica de executar em background tarefas por tempo indefinido. Como por exemplo, tocar uma música ou buscar alguma atualização na Internet.
Esses serviços podem se comunicar com outros serviços, inclusive do sistema operacional, e também fazer a chamada de aplicações, postar notificações e qualquer outro tipo de operação que uma aplicação normal faria.

Broadcast Receivers
Os broadcast receivers são componentes que não "fazem nada" a não ser receber e reagir aos broadcasts que são enviados, inclusive pelo sistema, como por exemplo: mudança no fuso-horário, bateria fraca, uma foto foi tirada ou que algum valor nas configurações foi alterado. Além disso, uma aplicação também pode emitir algo através de broadcast e esperar que um destes recebedores faça o devido tratamento.

Content Providers
Através dos Content Providers é possível tornar disponível um conjunto de dados de sua aplicação através de SQLite ou outra forma que você deseje.

A arquitetura de uma aplicação Android (simplificada)
Então, caso você deseje fazer uma aplicação que possua diversas telas (o que o mais normal) você sempre usará activities para fazer essa interação. Além disso, pode também ter serviços que rodam em background e trazendo notificações ao usuário ou emitem "broadcasts" que são interceptados pelos broadcast receivers.

No próximo post, vamos fazer um primeiro exemplo, demonstrando como criar o projeto no Eclipse, criar sua primeira Activity e configurar o manifest.xml que irá fazer com que o seu aplicativo funcione de forma correta. E de quebra, vamos ver como funciona o processo de publicação de uma aplicação no Market.

Vem mais por ai!

Abraços
Neto

segunda-feira, 12 de abril de 2010

Ginga aprovado, atenção redobrada!

Recebemos recentemente uma mensagem do prof. Luiz Fernando Gomes Soares, via Portal do Software Público Brasileiro (SPB), indicando a aprovação do Ginga-J. Leia o texto na integra:
Caros amigos da comunidade Ginga,

A boa notícia é que na semana passada foram aprovadas em consulta pública as Normas para o Ginga-J e sobre a definição das monomídias do Ginga. Agregadas ao padrão Ginga-NCL, aprovado desde 2007, agora o Ginga está COMPLETO, tanto para dispositivos fixos e móveis, quanto para dispositivos portáteis.

Alguns produtos Ginga já começam a sair no mercado e em breve outros deverão surgir. Infelizmente, não existe ainda uma certificação para tais produtos, o que deixa nós, os consumidores, apreensivos. Como parcela mais envolvida da sociedade nesse processo, nossa responsabilidade aumenta. Temos de ficar atentos para que os produtos do mercado sejam CONFORME às normas aprovadas. Não podemos deixar, DE FORMA ALGUMA, que haja uma INVERSÃO no processo, ou seja, que a Normas sejam adaptadas aos produtos. Vai haver essa pressão e temos de ficar atentos. Cabe a nós não deixarmos isso acontecer. Os produtos é que têm de ser conformes às Normas já aprovadas.

Vamos continuar a desenvolver nossas aplicações seguindo às Normas e exigir que os “produtos Ginga” lançados sejam capazes de as executarem corretamente. Não vamos cair na tentação de fazer aplicações que executem em algumas plataformas e em outras não. Se a aplicação está conforme a Norma, tem de executar em qualquer plataforma. Vamos denunciar quando isso não acontecer. Só assim estaremos protegendo o consumidor, garantindo a tecnologia desenvolvida no Brasil, garantindo os inúmeros empregos já gerados e exercendo nosso papel de cidadão.

Que a aprovação pública da interatividade no Sistema Brasileiro de TV Digital nos traga alegrias e sucesso, de fato
.

Casual Class Globalco sobre TV DigitalAbraços em todos,
Luiz Fernando

Prof. Luiz Fernando Gomes Soares
PUC-Rio / Depto. de Informática
Rua Marquês de São Vicente 225
22453-900 Rio de Janeiro, RJ
Phone: +55-21-3527-1500 Ext: 4330
FAX: +55-21-3527-1530
Outros detalhes sobre TV Digital podem ser encontrados em:Mais um mercado se abre para os programadores Java: TV Digital!

Participe do próximo Casual Class da Globalcode sobre TV Digital e comece a se preparar para este novo mercado!
By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/

sexta-feira, 9 de abril de 2010

Vamos falar de Android...

Nessa minha primeira aparição aqui no blog da Globalcode, vou falar de um assunto que vem sendo tópico frequente nos Twitters da equipe da GC e também de alguns amigos, o Google Android.

Um pouco de história...
Como já faz parte da estratégia conhecida do Google, em 2005 comprou uma start-up chamada Android e que estava trabalhando em uma distribuição de Linux (baseado no kernel 2.6) voltada para smartphones com o mesmo nome da empresa.
Após essa compra muito se especulou e em 2007 os rumores foram confirmados com o anúncio do Google sobre a criação da Open Handset Alliance e os esforços para a solidificação da plataforma Android.
A partir disso, muito se falou e muitos desenvolvedores (eu inclusive) não acreditavam que o Google teria força para entrar na briga com as fabricantes e operadoras. Mas então, a Nokia anunciou a compra de toda a Symbian Foundation, que controlava o desenvolvimento da plataforma Symbian, base de seus Smartphones da S60 (como por exemplo o N95, 5800, N97 e muitos outros) e base de outras fabricantes como Samsung e SonyEricsson.
Com isso, e também com a Apple mordendo uma fatia cada vez maior do mercado com o iPhone, não restou muitas opções a fabricantes como HTC, Motorola, Samsung e SonyEricsson a não ser se juntar ao Google e então, não demorou muito e os primeiros dispositivos foram sendo anunciados.

O valor do software
E seguindo os passos da Apple que mostrou às outras fabricantes que o valor da mobilidade não está no dispositivo mas sim nos softwares e serviços que o acompanham, o Google apostou na criação do Market, a loja de aplicativos para os celulares com Android.
Dessa forma, o usuário pode escolher entre mais de 27 mil aplicativos (e esse número vem crescendo assustadoramente) para personalizar seu celular e assim deixar com as funcionalidades que mais precisa no dia-a-dia, ou simplesmente aumentando o poder de "possibilidades" de uso do seu telefone celular!

E eu com isso?

Bom, se você é um desenvolvedor "convencional", já conhece Java e está querendo entrar no mercado de mobilidade, o Android assim como o Java ME são os melhores caminhos. Mas, a vantagem do Android é que você pode gerar renda mais facilmente, comercializando seus aplicativos através do Market.
Por enquanto, no Brasil é possível apenas a publicação e download de aplicativos gratuitos. Mas há diversas formas de alternativa, como uso de Paypal ou PagSeguro e vender "licença" da sua aplicação. E além disso, você pode encarar que a publicação bem sucedida de uma aplicação gratuita pode de gerar renda de outras formas, como reconhecimento, ofertas de trabalho, e etc.

Android não é Java, mas é Java ;-)
Pode parecer estranha a frase acima, mas o que quero dizer é que oficialmente, o bytecode gerado não é equivalente a Java, pois sua aplicação é transformada em um arquivo com extensão apk que é interpretado pela máquina virtual do Android chamada Dalvik. Porém, a sintaxe e toda a plataforma de desenvolvimento é exatamente igual ao Java que você já deve estar acostumado.
Então, lhe asseguro que se você já tem conhecimento Java, será muito tranquilo a sua entrada no mundo da mobilidade desenvolvendo para Android. É claro que você poderá mudar um pouco a forma de pensar e até de programar em alguns momentos, mas a adaptação acontecerá sem traumas!


Onde aprender?
Como vocês já devem estar sabendo, a Globalcode está com iniciativas cada vez mais fortes no mundo da mobilidade, e começamos isso com um minicurso de desenvolvimento móvel que já foi apresentado por mim (Neto Marin) no mês passado e que teremos novamente no dia 17 de abril (sábado) das 10 às 13 na GC em São Paulo.

E ainda mais especificamente sobre Android, estamos apresentando ao mercado o Hands-on de Android que será realizado no dia 24 de Abril (sábado) das 10 às 19 na unidade da GC em São Paulo. Serão 8 horas intensas onde irei apresentar a plataforma, SDK, ambiente de desenvolvimento, criação de aplicações com diversos recursos da plataforma e também como publicar sua aplicação no Market.

Quer saber mais?
Temos diversos portais na Internet,e inclusive o Android Brasil que além do site, mantém também o grupo de discussão no Google Groups. E é claro, o site do desenvolvedor Android do próprio Google é uma excelente fonte de material, exemplos e API.
E além disso, esse post foi apenas o primeiro de uma série onde pretendo dividir com vocês semanalmente, minhas experiências, dicas e comentários sobre essa plataforma que deixou de ser uma promessa para ser um novo player no mercado.

Abraços a todos.
Neto Marin

quarta-feira, 7 de abril de 2010

Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados

Nesse post, diferente dos últimos que foram mais enfáticos nas experiências com tecnologias, vou focar um pouco mais nos profissionais que estão começando, ou pretendem ingressar na área de desenvolvimento de software, falando sobre conceitos fundamentais relacionados a programação em geral.

Mercado de trabalho para programação
Conforme já sabemos, o mercado de desenvolvimento de software, especialmente no Brasil, continua em franca expansão, sendo que cada vez mais as empresas buscam desenvolver seus próprios sistemas usando as mais diferentes e novas tecnologias.
Algumas matérias interessantes:
As seis profissões mais valorizadas em 2010 no IDG Now!
Muitas vagas e sensação de reaquecimento da economia
Por isso, a área de desenvolvimento de software tem despertado interesse em muitos profissionais de outras áreas que desejam mudar de profissão, já que as oportunidades de trabalho tendem a ser maiores.

Esse é um perfil presente em muitos dos clientes da Globalcode que acabou motivando a criação de um treinamento específico para esse público - a Academia do Programador. Para ingressar nesse mundo do desenvolvimento, o profissional precisa entender conceitos básicos, a começar pelo que é um software, uma linguagem de programação, lógica de programação, etc.

O que são e para que servem as linguagens de programação?
O computador é uma ferramenta prática e acessível, mas para que o mesmo funcione, é necessário que existam os programas de computador (também chamados de softwares ou de sistemas computacionais).
Os programas são sequências de instruções com o detalhamento passo a passo do que o computador deve fazer para desempenhar uma tarefa. Por exemplo, se o programa deve somar dois valores, as instruções são: pegar valor1, pegar valor2 e somar valor1 com valor2 e armazenar na variável resultado.

Para que o computador possa interpretar e produzir o resultado esperado, essas instruções precisam ser escritas em uma linguagem que o computador entende. Essa linguagem é chamada código de máquina (ou linguagem de máquina) e é baseada na menor unidade de informação que o computador pode trabalhar que é o bit.

Apesar de ser a linguagem que o computador entende, o código de máquina é específico para cada sistema operacional (Windows, Linux, MacOS, etc) e muito distante da linguagem humana, o que o torna de difícil utilização para o desenvolvimento de software. Por isso foram criadas as linguagens de programação.

As linguagens de programação funcionam como um meio termo entre o que o computador entende e o que é mais fácil para o ser humano escrever. O programador usa a linguagem de programação (seguindo suas regras de sintaxe) para escrever as instruções do programa numa forma muito mais natural. Depois, esse programa é passado por um tradutor, chamado compilador ou interpretador (dependendo da linguagem de programação utilizada), que traduz as instruções do programa para o código de máquina apropriado, fazendo com que o computador as entenda e execute. Alguns exemplos de linguagens de programação incluem Assembly (a primeira), C, C++, Pascal, Clipper, Java, C#, Ruby, Python, Groovy, entre várias outras.

Quanto mais nova a linguagem, como é o caso de Java, mais alto nível ela é, ou seja, mais fácil de escrever os programas devido às instruções simplificadas.

Para escrever um programa de computador usando uma linguagem de programação, ainda é necessário usar lógica de programação.

O que é lógica de programação?
A lógica, ou pensamento lógico, é algo que faz parte do dia a dia de todos nós. Quando vamos atravessar a rua, tomar banho, trocar um pneu, por exemplo, executamos uma sequência de ações que nos permitem alcançar nosso objetivo final.

Essa sequência de ações, conectada por meio de estruturas de controle como se, então, senão, caso, enquanto, para, entre outras, define uma lógica de realização da atividade planejada.

Esse mesmo raciocínio lógico é trazido para a área de computação para permitir que o pensamento humano seja traduzido em ações que o computador pode executar. No desenvolvimento de software, o raciocínio lógico que usamos para criar os programas é chamado de lógica de programação.

Assim como no nosso dia-a-dia, na lógica de programação organizamos as instruções do programa usando estruturas de controle chamadas de condicionais (como if , else, switch) e repetições (como while, do/while, for). Além disso, nos sistemas computacionais também usamos instruções para entrada/saida de dados que permitem ao usuário entrar com as informações a serem processadas pelo programa e ver o resultado do processamento.

Procedimentos e funções
Ainda na criação da lógica de um programa, é provável que queiramos reaproveitar algumas sequências de instruções. Para isso, podemos criar pequenos trechos isolados de instruções chamados de procedimentos e funções (ou métodos em linguagens orientadas a objetos, como Java). Os procedimentos e funções agrupam instruções que podem ser reutilizadas no fluxo principal do programa ou dentro de outros procedimentos e funções. Eles podem receber parâmetros para guiar a lógica interna e retornar valores para serem utilizados em outros pontos do programa.

Em geral, os programas processam informações (dados) que ficam armazenadas temporariamente na memória do computador por meio das chamadas variáveis. Porém, quando o programa termina sua execução, se esses dados não forem persistidas, eles serão perdidos. Daí a necessidade de utilizarmos um banco de dados.

Mas, o que são banco de dados ?
Um banco de dados guarda dados de um programa de forma permanente, ou seja, antes de terminar a execução do programa, podemos guardar os dados em um banco de dados para acessá-los posteriormente, até mesmo em outras execuções do mesmo programa. Os bancos de dados são mantidos por programas chamados SGBDs (Sistemas Gerenciadores de Banco de Dados). Para interagir com um SGBD, precisamos usar uma linguagem de consulta específica chamada de SQL (Structured Query Language).

Conclusão e recomendações
Bom, isso é um resumo de alguns dos principais conceitos relacionados à área de desenvolvimento de software. A dica para quem deseja seguir nessa profissão é estudar mais profundamente esses assuntos além de outros aspectos como redes, bits e bytes, ferramentas de desenvolvimento, antes mesmo de conhecer a fundo uma linguagem de programação. Por isso, procurei deixar alguns links falando um pouco mais sobre esses conceitos.

Para quem tiver interesse em algo mais centralizado, a Academia do Programador da Globalcode é um treinamento que trata de todos esses assuntos de forma bem detalhada. Esses conhecimentos são imprescindíveis para quem pretende cursar um treinamento de linguagem Java.

Elaine Quintino Silva
http://twitter.com/elaineqsilva
http://www.globalcode.com.br/instrutores/ElaineSilva

Globalcode + Fratech = Academia do Agile


Globalcode e Fratech juntas na criação da Academia Agile, somando a experiência em Agile da Fratech à experiência em educação da Globalcode em um curso diferente. Diferente na forma, no periodo, na carga-horária, no conteúdo e, claro, na abordagem.

Esta formação é composta por 8 cursos que abordam todos os aspectos necessários para um profissional ágil. Desde o primeiro módulo "Implantando e Liderando Equipes Ágeis" o aluno entenderá que tipo de postura e qual a cultura necessária para atingir esse objetivo, através de dinâmicas.

O objetivo é uma imersão profunda nos conceitos que fazem com que o auto-gerenciamento funcione. O aluno também aprende como trabalhar a especificação de produtos de maneira incremental e como realizar o gerenciamento ágil de requisitos no módulo "Criação de produtos com requisitos ágeis". Através do framework Scrum, tratamos do planejamento da equipe no módulo AG6 - Gestão de Projetos com Scrum.

O aluno aprenderá práticas de engenharia passando por TDD, integração contínua, definição e evolução de arquitetura através de práticas de design evolutivo, Domain Driven Design e Modelagem Ágil, além de gestão de processos através de Kanban e Lean e conceitos avançados de liderança e coaching. Há ainda um módulo dedicado a estratégias ágeis para os modelos de governança em TI (AG8 - Estratégia Ágil para Governança em TI )

Qual é o público-alvo da Academia Agile: Desenvolvedores ou Gestores?
Em discussão com os autores da Academia Agile -Felipe Rodrigues e Manoel Pimentel - sobre a potencial "divisão" de interesses Desenvolvedores vs Gestores nos módulos da Academia Agile, tive uma resposta muito interessante:
"Esta separação de desenvolvedores e gestores é muito sutil, e nós queremos deixá-la ainda mais sutil, não queremos programadores de um lado e gerentes do outro, como em uma batalha, queremos todos alinhados, no mesmo time".
Quais as datas e horários da Academia Agile ?
A Academia Agile esta sendo oferecida em novo período, com 12 horas de aula quinzenais, sendo estas concentradas em um final de semana com aulas nas sexta a noite e no sábado o dia inteiro.

Desta forma você não ocupa todos os finais de semana e para as pessoas que não moram em São Paulo fica muito mais viável participar do treinamento. Nos finais de semana que não houver aula, o aluno terá uma leitura recomendada.

Veja o cronograma de aulas completo

A primeira turma já está confirmada, inicia sexta-feira dia 09/04 em São Paulo, Unidade Paraíso a 50mts do metrô. Quer mais informações ?
Entre em contato com a Globalcode e agende um horário no Programa "Fale com o instrutor" ou então pelo Twitter:

http://twitter.com/felipero
http://twitter.com/manoelp
http://twitter.com/yarasenger
[]s
Yara

domingo, 4 de abril de 2010

RichFaces, JSF 2.0, Twitter, Marretadas e Cerveja

Com o advento do Java EE 6 temos a nossa disposição o JavaServer Faces 2.0, que traz diversas melhorias, inclusive um suporte nativo para aplicações Ajax. Nas versões anteriores do JSF o suporte a Ajax é viabilizado através de Servlet Filters e JSF Phase Listeners constantes nas bibliotecas de componentes especializadas (RichFaces, IceFaces, ...)

RichFaces é uma biblioteca importante para aplicações JavaServer Faces que oferece um poderoso conjunto de componentes Ajax, e sempre foi divulgada e utilizada aqui na Globalcode. Atualmente o RichFaces está na versão 3.x que é oficialmente compatível com JSF 1.2, enquanto que o RichFaces 4.0 atualmente em desenvolvimento será oficialmente compatível com JSF 2.0.

E se você quisesse migrar sua aplicação JSF / Richfaces para o Java EE 6 ? Esperaria pelo release do RichFaces 4.0 ?

Pois é, aconteceu comigo: Ao migrar aplicações instaladas no Glassfish V2, que suporta Java EE 5 e JSF 1.2 para o Glassfish V3 (Java EE 6, JSF 2.0), tropecei na falta de compatibilidade entre o RichFaces e o JSF 2.0.

Comecei a pesquisar sobre o assunto e no meio da minha pesquisa recebi um mensagem via Twitter do meu colega Globalcoder Eder Magalhães comentando sobre o RichFaces 3.3.3 (na época Beta, hoje CR1, essa semana talvez GA) e uma chance compatibilidade com JSF 2.0.

Eu tive a oportunidade de experimentar essa versão do RichFaces e a boa notícia é que funciona. Sim, com algumas marretadas, mas funciona. Consegui evoluir com a migração para o Java EE 6, sem ter que re-escrever as aplicações web ou abrir mão do excelente suporte a Ajax do RichFaces, e sem esperar pelo RichFaces 4.

Acompanhe aqui minha aventura e marretadas, onde compartilho duas soluções possíveis para uma migração imediata para o Java EE 6. Quem conseguir migrar tem direito a uma cerveja.

Feliz Páscoa a todos !

Renato Bellia
http://notasingleshot.blogspot.com
http://twitter.com/renatobellia

PS: Obrigado pela dica Eder!

sexta-feira, 2 de abril de 2010

Dando o primeiro passo para se tornar um jEDI

Muitos anos atrás um grande mestre nos disse que para se tornar um mestre JEDI era necessário conhecer como funciona o Garbage Collector e como escrever o seu próprio ClassLoader. Como um Padawan dedicado que não media esforços para se tornar um mestre e sem medo de misturar Star Trek com Star Wars, comecei a estudar como fazer tuning em aplicações Java controlando a alocação de memória realizada pela JVM.

Recentemente participei de duas consultorias onde foi necessário resolver problemas de performance fazendo uma análise da distribuição de memória entre as áreas geracionais dentro de uma JVM da Sun em execução e avaliar como a atuação do Garbage Collector influenciava a aplicação.

Como parte dos estudos e dos trabalhos de consultoria realizados, consegui dar um pequeno passo em direção à força! Agora compartilho um pouquinho do que aprendi.

Para ter uma ideia de como uma configuração errada da alocação de memória dedicada à JVM (normalmente via parâmetros de linhas de comando -Xms e -Xmx) ou a configuração default pode prejudicar a performance de uma aplicação, basta observar o figura a seguir.

GC time graphic
Este gráfico ilustra os momentos e o tempo de execução do Garbage Collector na área Old da memória alocada pela JVM. Alguns tempos são da ordem de 50 a 70 segundos. São tempos que uma aplicação fica congelada enquanto o Garbage Collector realiza a limpeza da memória para liberar espaço. Representa um tempo que certamente incomodará o usuário final durante o uso da aplicação.

Como obter estes dados e otimizar a performance?

No JDK, além das ferramentas tradicionais de linha de comando como javac e java, estão presentes as ferramentas jps, jstat e jstatd. A primeira é equivalente ao comando ps do Unix e permite saber quais processos Java (JVM) estão em execução e o respectivo PID. O segundo permite gerar estatísticas de Garbage Collection e tamanhos da memória ocupada pelas áreas geracionais do Java em execução. A terceira ferramenta faz o mesmo que a segunda ferramenta, mas disponibiliza os dados para acesso remoto via RMI. Muito útil para coletar dados de uma JVM executando remotamente num servidor e acompanhar a partir do desktop do desenvolvedor. O screenshot a seguir ilustra a execução dessa ferramenta via terminal para o demo SwingSet2 presente em qualquer instalação de JDK.

Executando jstat via terminal
Os detalhes sobre estas ferramentas e o significado de cada informação coletada podem ser obtidos em: Java Virtual Machine Statistics Monitoring Tool (jstat) e Java Virtual Machine Process Status Tool (jps).

Contudo, uma ferramenta muito interessante do pacote jvmstat que não foi incorporada ao JDK é o chamado visualgc (Visual Garbage Collection Monitoring Tool). Esta ferramenta permite visualizar graficamente os mesmos dados disponibilizados pela ferramenta jstat. Assim, torna-se possível perceber a dinâmica do Garbage Collector ao liberar memória dentro das áreas geracionais, além de indicar o tempo de execução de cada garbage collection, os tamanhos de cada área geracional e o espaço alocado a cada momento.

Como o visualgc não está presente no JDK, torna-se necessário fazer o download e instalar localmente (muito simples de instalar!). Para executar via linha de comando, basta digitar: visualgc vmid [interval], onde vmid é o PID da JVM desejada obtido via jps e interval é o tempo em milisegundos ou segundos que a ferramenta coleta as informações da JVM e atualiza na tela. Um exemplo de execução desta ferramenta é ilustrada na figura a seguir para o demo SwingSet2 em execução.

Execução do visualgc sobre o SwingSet2
Colocar a ferramenta para rodar ou coletar os dados via linha de comando é a parte fácil. Agora vem a parte difícil! Como analisar estas informações e transformar em resultado útil ao melhorar a performance de um aplicação Java? Este é um segredo que os mestres JEDI raramente ensinam! Mas um antigo pergaminho escrito por uma extinta empresa que era a meca dos JEDI revela todos os segredos. Este valioso documento é datado da época do JDK 1.3 e veio sofrendo atualizações ao longo dos anos para as versões atuais de JDK. O texto citado ainda pode ser encontrado na seguinte página (não sabemos até quando!): Tuning Garbage Collection with the 5.0 Java™ Virtual Machine.

Uma leitura cuidadosa do texto antigo, esquecido ou ignorado por muitos e citado acima, permitirá o Padawan e aprendiz de mestre JEDI conhecer detalhes de como usar a força a seu favor e melhorar significativamente a performance de uma aplicação Java. Contudo, nem sempre o caminho da força e conhecimento é fácil! Este caminho exige muito estudo, esforço e dedicação. Mas, cuidado para não cair na tentação do caminho mais fácil da ilusão criada pelos lordes "Microsith".

Quem sabe algum dia eu conto alguns segredos sobre como criar ClassLoaders customizados! Até lá boa leitura e bons códigos!

By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/