Archive for the ‘Java’ Category

Colocando o Mobicents com SeamTelcoFramework para rodar

maio 6, 2010

Este post é um tutorial que visa guiar a instalação completa do ambiente de desenvolvimento de aplicações de telecomunicações com foco no protocolo SIP e tratamento de recursos de Media, utilizando o Mobicents e o SeamTelcoFramework o exemplo mais clássico deste tipo de aplicações são as tão famosas URA’s.

Estou utilizando um CentOS 5.4 como base para este tutorial, para quem estiver utilizando este tutorial em outro S.O. só tome cuidado com os caminhos de diretórios, pois podem ser diferentes.

Instalando o Eclipse

Efetue o Download do Eclipse Galileo Eclipse IDE for Java EE Developers para instalar o mesmo basta descompactar na pasta desejada.

Apenas para referencia o meu foi instalado em:

/home/usuario/apps/eclipse

Instalando o Mobicents

Efetue o Download do Mobicents 1.0 com Jboss 4.2.3 (estamos utilizando esta versão pois o SeamTelcoFramework ainda não é compatível com o Mobicents 2 e JBoss 5), para instalar o mesmo basta descompactar na pasta desejada.

Apenas para referencia o meu foi instalado em:

/home/usuario/apps/mss-1.0-jboss-4.2.3.GA

Instalando plugins necessários para o eclipse

  1. Adicione o Jboss tools update site através do menu “Window” > “Preference” > “Install/Update” > “Available Software”
  2. Vá no menu “Help” > “Intall Software”
  3. Selecione o site “Jboss Tools” (site que foi adicionado no passo 1)
  4. Selecione os pulgins listados abaixo que estão dentro de “All JBoss Tools” e prossiga com a instalação dos mesmos:
  • JBoss Tools RichFaces
  • JBossAS Tools
  • JBoss Seam

Instalar o Seam Runtime

Efetue o Download do JBoss Seam 2.1.1GA, para instalar o mesmo basta descompactar na pasta desejada.

Apenas para referencia o meu foi instalado em:

/home/usuario/apps/jboss-seam-2.1.1.GA

Configurando o JBoss Runtime Environment no Eclipse

Vá em “Window”> “Preferences” > “Server” > “Runtime environments” e adicione o Mobicents como um JBoss Community 4.2

Vá em “Window” > “Show view” > “Servers” Adicione um novo servidor baseado no JBoss 4.2 Runtime environment.

Configurando o Seam Runtime no Eclipse

Vá em “Window”> “Preferences” > “JBoss Tools” > “Web” > “Seam” e adicione o JBoss Seam 2.1.1

Pronto neste momento o seu ambiente de desenvolvimento está totalmente instalado, agora é começar a brincar com um projeto.

Criando o primeiro projeto

Crie um novo projeto do tipo “Seam web project”, clique em next até o formulário “Configure Seam Facts Settings”, neste formulário faca as seguintes configurações:

  • Crie um datasource
  • Renomeia os pacotes padrão para um nome apropriado
  • Desative a checkbox “create test project” (Não abordarei sobre os testes neste tutorial).
  • Feito isto clique em “Finish”

Ativar o SeamTelcoFramework em nosso projeto

Adicione os seguintes arquivos a pasta “WEB-INF/lib” do projeto:

Adicione o arquivo sip.xml ao diretório “WEB-INF” do projeto.

Pronto neste momento já temos tudo pronto para começarmos a implementar a lógica da aplicação.

Criando uma Classe para tratar as chamadas SIP

Adicione a classe FirstTelcoClass.java dentro do pacote “<seu pacote>.session”, esta classe implementa uma simples lógica de observar as requisições SIP (INVITE, BYE), quando receber um INVITE atender a chamada e anexar uma sessão de media do Mobicents a mesma, reproduzir um arquivo wav para que você possa ouvir a aplicação funcionando, e depois fazer um eco dos dígitos recebidos (a cada DTMF que você discar a aplicação reproduzirá o mesmo audio).

Inicie a o Servidor, aguarde até 0 Seam iniciar, pois as vezes ele demora algums segundos para subir, para ter certeza que o Seam iniciou verifique a seguinte mensagem no console “13:39:41,641 INFO  [SipApplicationDispatcherImpl] SipApplicationName : FirstTelcoProject/ServletName : SeamEntryPointServlet

Configurando o Mobicents para rotear as request INVITE para nossa aplicação

Após o servidor ter iniciado abra um browser com o seguinte endereço: http://127.0.0.1:8080/sip-servlets-management na coluna que tem o header INVITE adicione a nossa aplicação, apos adicionar clique em save.

Agora nossa aplicação esta pronta para atender chamadas e falar conosco.

Configurando o Ekiga para fazer chamadas

Adicione uma nova conta no Ekiga “Edit” > “Accounts”  > “New” e configure a mesma igual a imagem ao lado (senha pode colocar qualquer coisa).

Não esqueća de ativar a conta criada, deixando ativo a checkbox da mesma.

Hora de testar se tudo isto que fizemos esta funcionando

Utilizando o Ekiga digite qualquer string na caixa de texto na tela principal do mesmo, e clique no icone localizado a direita desta caixa de texto, neste momento o Ekiga enivará uma request INVITE para a nossa aplicaćão, que da forma que esta programada atendera a chamada e reproduzira um audio.

Bom pessoal é isto, agora já temos uma aplicaćão de telefonia baseada no SeamTelcoFramework rodando dentro do Mobicents, agora é hora de botar a sua cachola para funcionar e modificar esta aplicaćão adicionando novas funcionalidades, se quiser depurar a mesma é só colocar um breakpoint no eclipse e fazer a chamada no Ekiga.

Espero que este conetúdo seja util para vocês, qualquer duvida, sugestão, whatever deixa o seu comentário aqui, pois teremos prazer em responder.

Referencias:

http://groups.google.com/group/mobicents-public/web/seam-telco-framework-for-sip-servlets

http://groups.google.com/group/mobicents-public/web/user-guide

Abraços,

Antonio Anderson Souza

Formspring: Como começar no Mobicents ? Quero fazer uma URA. Vc pode me ajudar ?

fevereiro 2, 2010

Como começar no Mobicents ? Quero fazer uma URA. Vc pode me ajudar ?

Vamos lá, o Mobicents é o que chamo de Telecom Application Server, é um Servidor de aplicações para aplicações de Telecom, ele implementa o padrão JAIN SLEE (padronizado pelo JCP), este padrão determina uma série de regra para tornar rápido, simples, e confiável o desenvolvimento de aplicações para Telecom em ambiente Java, estas aplicações o foco deles são para rodar em Redes Inteligentes (IN), SIP, IMS, etc.

Para começar, como não sei se vocẽ já instalou o mobicents, recomendo a leitura do roteiro de instalação, e depois um tutorial sobre o desenvolvimento de uma aplicação IVR simples.

No google groups do projeto mobicents tem vários tutoriais, todos estão bem atualizados, o pessoal da Redhat estão dando uma garra neste projeto!

Espero que tenha ajudado! Qualquer dúvida pode me enviar email direto antonioams@gmail.com

Pergunta feita de forma anônima via Formspring, o que você está esperando  Pergunta aí!

Minhas impressões – OpenTDC 2009 – 17-05-09

junho 15, 2009

Amigos e leitores,

Vou escrever por meio deste post as minhas impressões do OpenTDC 2009, evento ocorrido no dia 17-05-09 na Universidade Anhembi Morumbi, local que está virando ponto de referência para os eventos organizados pela Globalcode. O evento foi voltado para desenvolvedores e entusiastas do Open Source e das tecnologias Java.

NOTA: Desculpem-me mais uma vez pela demora de publicação das informações (quase um mês…rs. E o mesmo se aplicará para a publicação das impressões do evento “Java@TVDigital“).

NOTA 2: Também postado no blog Templário da Tecnologia.

Panorma Geral

OpenTDC 2009

Presenciei o OpenTDC desse ano juntamente com o colega de empresa Joemir Luchetta, que também esteve no evento do ano passado. É importante ressaltar que o evento foi gratuito (como o evento Java@TV Digital ), com sorteio de muitos brindes e coffee-break. A presença de palestrantes que eu já havia visto apresentar trabalhos me deixou seguro de que o evento seria em bom nível. E não foi diferente: palestras claras, algumas com conteúdo bem técnico, outras não, e interação dos palestrantes com o público fizeram do evento um sucesso. Abaixo irei passar os pontos mais importantes dos temas abordados nas palestras. Espero que gostem.

Palestras

Abertura: Java, Open Source e a Comunidade – Yara Senger e Bruno Souza

Abertura: Java, Open Source e a Comunidade - Yara Senger e Bruno Souza

Como de praxe nos eventos organizados pela Globalcode, Yara Senger fez a vez na abertura do evento, expondo os dados relacionados a comunidade Java ( JUG’s, SOUJava, divulgação e participação em eventos e número de profissionais ). Citou também os novos canais da Globalcode, Open4Education e do evento no twitter, por onde irão circular depoimentos e promoções relâmpago relacionadas a cursos da instituição, além de anúncios de novos eventos.

Após isso adentrou ao palco Bruno Souza, o “Java Man“, trazendo uma visão do que é o Open Source, baseada em sua larga experiência com o “ecossistema” Java. A frase base de sua apresentação foi: “Open Source é a forma natural de desenvolver software em um ambiente de rede”. A “rede” no caso pode ter contatos, membros de comunidade, projetos Open Source, networking, entusiastas e etc. É desenvolvendo software em rede que se aprende e evolui-se.

Ele fez um paralelo entre o Java e o Open Source com um fotógrafo: “Como se tornar um excelente fotógrafo? O que isso tem a ver com Java”. Vendo fotos de outras fontes e tirando muitas fotos é provável que se vire um grande fotógrafo. O mesmo acontece no Java: é preciso ver muito código de outras fontes e desenvolver muito código próprio. No mundo são apenas 1/4 de 1% da população que entende software. Para ser um bom desenvolvedor, fotógrafo ou outra coisa é preciso muito estudo e dedicação. De acordo com Bruno são cerca de 10000 horas ( cerca de 8 horas por dia, todos os dias, durante 3 anos e meio! ) para formar um bom profissional. É por meio do Open Source e da relação com o usuário, que é quem mais conhece o software, que o desenvolvedor pode inovar e evoluir. O software é arte e engenharia, e não fabricado, manufaturado, ou aprendido por SW privado.

Finalizando, Bruno deixou uma dica para as pessoas que irão participar do FISL10: ocorrerá no dia 23 de junho, um dia antes do evento oficial, o Javali FISL, organizado pelo SOUJava e que irá apresentar as palestras e o conteúdo presente no JAVA ONE ( 2 a 5 de Junho ), maior evento relacionando a Java no mundo. Deixo os meus parabéns ao trabalho feito pela Yara e pelo Bruno, “universalizando” o Open Source e unindo a comunidade Java e entusiastas, cada vez mais presentes nos eventos.

Robótica Open Source – Vinícius Senger & Paulo Carlos dos Santos

Robótica Open Source - Vinícius Senger & Paulo Carlos dos Santos

Essa era uma das palestras que me interessava, pois gosto bastante de hardware (já tinha ouvido falar de Arduino pelas minhas leituras da Revista INFO; em Fevereiro foi a primeira vez que ouvi falar). No caso, a palestra se deu em ritmo de “bate-papo” (diálogo), onde o Vinicius fez o papel do interessado (aluno) e o Paulo de facilitador da informação (professor). Paulo aliás que já foi aluno e professor do CEFET-SP, lugar onde fiz minha graduação (!).

O Arduino foi apresentado como “Hardware Open Source” ligado a “Physical Computing“, ou seja, trabalhando-se com o Arduino podemos introduzir, aplicar e aperfeiçoar conceitos de eletrônica (hardware, físico) e programação (seja do microcontrolador ou de uma linguagem específica aplicada).

O Arduino trabalha em cima de progração C (para gerenciamento de bibliotecas, I/O de informações sensorias, etc.) e é auxiado pelo Processing (linguagem de programação baseada em Java com IDE, para criar ambientes gráficos e facilitar a integração com projetos eletrônicos).

Assim, fazemos a programação da placa ( via C, com uso de USB, porta serial, WiFi, ethernet…) e visualizamos o resultado por meio de um conjunto de leds, pinos de saída ligados a motores ou sensores (pressão, ultrasom, etc.), auxiliados por interface gráfica (Processing). Portanto podem ser feitos os mais diversos tipos de projetos (sensoriamento de presença, controle de motor, automação residencial, telas touchscreen…), ficando a cargo do projetista a abrangência. “Arduino na mão e uma idéia na cabeça!”.

No Brasil já existe venda de kits do Arduino (saem por volta de 50 a 100 reais os kits mais básicos), sensores (por volta de 50 reais) e “shields” (placas de extensão – breadboards, que podem dar suporte a leitura de cartões SD, rede ethernet…). Geralmente são achados no MercadoLivre. Outros projetos realcionados a Arduino estão sendo criados, como o Arduino Nano, Arduino Severino e Paperduino.

Paulo ao decorrer da apresentação foi mostrando exemplos práticos, apresentados via vídeo no telão, mostrando a aplicabilidade de projetos usando o Arduino, como robôs, acelerômetros, sensores de presença, automação residencial com protocolo X10, entre outros.

Você me pergunta: “Ué, porque todo esse lobby de hardware em um evento de programação?”. Eu particularmente gostei e torço para que mais iniciativas sejam feitas (rs). Mas, o Arduino foi apresentado porque ambos os palestrantes iniciaram um curso intitulado “Academia do Programador” na Globalcode. Usarão o Arduino como instrumento de aprendizado na programação (uso de if, else…) , mas pretendem também criar mais cursos, incentivar a criação de projetos e aumentar a comunidade Arduino. No final das contas foi uma boa iniciativa, pela introdução do tema “desconhecido e voltado para hardware” para os presentes no evento.

Arquiteturas com JSF, JBoss Seam e Spring – Vinicius Senger e Alberto “Spock” Lemos

Arquiteturas com JSF, JBoss Seam e Spring - Vinicius Senger e Alberto "Spock" Lemos

Vinicius Senger e Spock fizeram um teste do que seria apresentado por eles no JavaOne 2009, sendo assim não tinha como não ser bastante técnico o conteúdo apresentado, fora o “show de siglas”. A mesma palestra apresentada no OpenTDC foi apresentada no JavaOne, portanto vemos que o conteúdo dos eventos só vem crescendo.

A idéia principal era mostrar as muitas opções que a plataforma Java EE apresenta para elaboração de projetos, e como montar opções de solução, seja com Struts, Shale, JSF, Wicket, EJB, Spring, Seam, entre outras. Para as empresas há muitos pontos importantes a serem levados em conta, geralmente  os “+ades” (escalabilidade, disponibilidade, manutenabilidade, etc.). Se a empresa busca um projeto de cunho experimental, a arquitetura assim pode também ser; se o projeto é corporativo a arquitetura deve ser conservadora. Frameworks devem ser acoplados a um projeto com inteligência, pois “o simples é bonito e fica bom com Java EE 5”, de acordo com Vinicius.

Uma coisa importante a ser pensada é que o preço de uma arquitetura não deve ser medido apenas com o trabalho do DEV, mas também com equipes de infra, manutenção, gerenciamento, QA e aprendizado. Os principais desafios para se criar arquiteturas corporativas são:

  • Fazer Java EE componentizado, visando reuso. Isso não é fácil;
  • Ter especificação “perfeita” é sonho. Ferramentas não (em termos de uso e aplicação);
  • Usar “+AR’s” é definitivamente difícil (JAR‘s, WAR‘s, EJB-JAR‘s, EAR‘s, etc.). Procure dosar;
  • Mudanças durante o projeto, mesmo que pequenas, aumentam o custo.

O Java EE hoje está OK em muitos pontos (EJB 3.0, JSF, JMS), mas em outros não (questões de modularidade e alguns frameworks). Partindo desse princípio tivemos o nascimento de dois frameworks, Spring e JBoss Seam. O Spring nasceu como alternativa ao Java EE, e o Seam nasceu como modelo de integração dos próprios componentes Java EE. O Seam tem foco em Web 2.0 e promove alguma integração com framework; o Spring tem foco em integrar com outros frameworks e algum com Web 2.0. O antagonismo continua quando falamos de uso em servidores: muitas empresas rodam Spring em diferentes servidores. Poucas empresas rodam Seam em servidores diferentes de JBoss.

Após esse panorama bem abrangente e técnico Spock começou a abordar as soluções envolvendo Java EE, componentes e frameworks, sendo o centro da apresentação. Foram 5 modelos apresentados, com suas vantagens e desvantagens:

  • Java EE básico;
  • Java EE + EJB;
  • Spring;
  • Seam;
  • Seam + Spring.

Como a palestra era prevista para 50 minutos (tempo oficial que eles teriam no JavaOne), e eles só tinham 45 minutos disponíveis (fora 10 a 15 minutos de atrasos de palestras anteriores) fora o horário de almoço atrasado, ficou um pouco “corrido” o conteúdo apresentado nos tópicos de soluções e alguns pontos foram omitidos. Gostaria de especificar melhor os itens acima, mas o tempo e a abrangência não possibilitou. A apresentação não foi ainda disponibilizada no site da Globalcode, nem no site do JavaOne. Quando estiver disponível atualizo este post com a informação.

Para finalizar, o panorama do futuro do Java foi dado com base no Java EE 6, usando JSF 2.0, Web Beans e EJB 3.1. A especificação do Java EE 6 e as próximas serão cada vez mais “puras” e o uso de Spring com Java EE 6 será maior. Fora a omissão de alguns pontos relacionados as soluções, muito pelo tempo disponível, o conteúdo e desenvoltura dos palestrantes agradou.

Adotando Agile: o caminho das pedras – Cláudio Teixeira

Adotando Agile: o caminho das pedras - Cláudio Teixeira

Cláudio Teixeira trouxe um panorama bem legal das metodologias ágeis, muito pela sua experiência com desenvolvimento e arquitetura de projetos em Londres, onde a “onda ágil” está atuante a muito mais tempo. Para se entender melhor porque há novidades em termos de metodologia, foi feita a seguinte pergunta: “Qual a motivação para um novo approach?”. Resposta: “Projetos falham” (em todos os níveis). Com base nisso, e sabendo que o cliente é exigente, é imprescindível fazer com que os projetos sejam rápidos (em termos de tempo), pois a reposta do cliente é rápida e as chances de errar diminuem.

Peguemos como exemplo o RUP. O RUP busca a “perfeição no processo” (o bom é inimigo do ótimo). Onde era implementado RUP? Em sistemas governamentais e exército dos EUA (alto custo e baixa tolerância a falhas), sendo fortemente apoiado a contratos. Para esse cenário não poderia ser diferente.

Com o “boom da Web” e os “Startups! de empresas” houve uma alta demanda de software, mudando o foco para confiança na empresa e menos em contrato e “burocracias”. Se o RUP fosse adotado teríamos planejamentos proféticos e “quadrados” (muitos manuais e cronogramas de processos). Fora que as “metodologias tradicionais” não mostram a “saúde” do projeto (Gráficos ROI e Waterfall não são suficientes). Nesse panorama pensou-se em dois confrontamentos:

  • Funcionalidades X Utilização: quanto mais rápido o feedback do cliente final melhor (faz-se apenas o necessário);
  • Desenvolvimento de software X Manufatura: custo e tempo são essenciais. Podem ser iguais ou não.

Todo esse cenário motivou algumas pessoas (do meio empresarial) a criarem algo novo, mas que fosse compatível com a situação do mercado e desse opção de aproveitar a demanda deste. Daí nasceu a expressão “ágil”, o manifesto ágil e a criação da Agile Alliance. Em nível de metodologia ágil temos 3 tipos de aplicação do processo:

1. Extreme Programming (“XP – O processo dos geeks”):

  • Feedback rápido e simples;
  • Entregas incrementais;
  • “Abraça” mudanças;
  • Código de alta qualidade.

2. SCRUM (“O processo da sala de guerra”):

  • Processo promove acerto e erro;
  • Feedback rápido;
  • Entrega em pequenas iterações;
  • Saúde do projeto vísivel (gráficos Burndowns);
  • Gerente não é comando controle, mas facilitador.

3. Lean: Processo de desenvolvimento da Toyota e tem raízes do SCRUM. Não muito conhecido no Brasil.

As desvantagens dos 3 são (nem tudo é perfeito…):

  • Não funciona com equipes “júnior”;
  • O cliente deve estar “100% disponível”;
  • Adiciona muitas práticas novas para as equipes;
  • O processo é fechado e deve ser seguido a risca;
  • A história do “porco e o frango” (comprometidos e envolvidos).

Qual usar? Scrum ou XP? Scrum gerencia melhor os processos, mas XP fornece melhores práticas (TDD, Unit Tests…). Melhor usar os dois!

E como adotar? Há dois caminhos: Consultoria externa ou “in house”. Se a escolha for a segunda há algumas dicas:

  • SCRUM é mais fácil de adotar;
  • Estude Lean também;
  • Escolha um projeto piloto;
  • Educação para o pessoal de negócio é necessária.

Foi com certeza uma das melhores palestras do evento. O palestrante passou muito bem o conteúdo e foi bastante claro, fora as doses de humor, necessárias depois do almoço (rs).

Java e TV Digital – Dimas Oliveira

Java e TV Digital - Dimas Oliveira

As palestras e a participação do Dimas nos eventos já virou marca de atenção ao conteúdo falado e muitas perguntas ao final da palestra. Não foi diferente dessa vez. Ele praticamente deu algumas dicas e panorama sobre TV Digital com Java, material de referência, Ginga, especificações, etc. Abaixo irei enumerar em tópicos:

  • Compartilhe seu conhecimento e credite as fontes (um “lema” do próprio Dimas. Sempre repetido em suas apresentações);
  • Divulgou uma previsão de venda de 230 milhões de set-top boxes em 5 anos. Mercado de atuação haverá, e muito;
  • Java é um “ecossistema”, formado de usuários e desenvolvedores. Procure sempre saber o que os usuários necessitam;
  • Mostrou fotos do primeiro teste com Ginga no Brasil: ano de 2005 na Paraíba. Pertencemos a “vanguarda” da tecnologia relacionada a TV Digital no mundo;
  • SBTVD é inovação nacional;
  • Em 2012 o Brasil será o segundo maior mercado emergente em TV Digital;
  • TV interativa (TV + aplicações controlando áudio e vídeo) irá necessitar de profissionais e aplicações em Java;
  • Ginga-J faz parte dos padrões mundiais de TV Digital;
  • Java DTV é uma API/especificação Java para TV digital, Ginga-J contém Java DTV e é uma parte do Ginga. O Ginga (NCL/LUA & J) é o middleware;
  • Quem tiver mais curiosidade pode ler a especificação do Java TV (JSR 927);
  • Ginga integra widgets lwuit para melhorar a interface gráfica;
  • As padronizações devem ser seguidas para qualquer operadora;
  • Para quem deseja aprender sobre TV Digital: a curva de aprendizado é de 5% a 8% a mais de conhecimento Java.

Palestra esclarecedora, apesar de já ter visto muitas dessas informações em eventos anteriores (Profissão Java e Java@TVDigital). Ao fim dela, e na saída para o coffee-break, muitos participantes se aglomeraram na frente do palco para fazer perguntas a Dimas. Para quem deseja saber mais sobre TV Digital pode mandar um email para “tvdigital-subscribe@soujava.dev.java.net” e participar da lista de discussão do SOUJava, sendo que o próprio Dimas faz parte.

Painel: Java FX, Adobe Flex e GWT – Éder Magalhães, Maurício Leal e Rafael Nunes

Painel: Java FX, Adobe Flex e GWT - Éder Magalhães, Maurício Leal e Rafael Nunes

Esta última palestra do evento não era para ser um painel (“disputa” de qual a melhor) entre as 3 tecnologias ligadas a RIA, mas um comparativo do que elas podem fornecer. Java FX foi apresentada por Maurício Leal, GWT por Éder Magalhães e Flex por Rafael Nunes.

Sobre Java FX:

  • Rich clients estão mudando o jogo. É preciso ter mais clientes ricos, onipresentes e “projetados” pelo desenvolvedor. FX é a solução;
  • É preciso “extender” RIA em diversas telas. Java FX é a plataforma para criar e entregar RIA;
  • Gera aplicações únicas e completas para desktop, mobile e outras. É portável para qualquer dispositivo;
  • Runtime poderoso e desacoplamento da aplicação do browser;
  • A aplicação é independente do browser, pode ser arrastada para “fora” do mesmo;
  • Coisas a serem construídas com Java FX: vídeo player, efeitos 3D, Java Applets, etc. Todos podem ser “arrastados” para fora do navegador;
  • Existe plugin para Photoshop e Illustrator;
  • Curva de aprendizado rápida: 1 semana.

Sobre GWT:

  • Suporte a Web interativa (RIA);
  • Navegação rápida, agradável e fácil;
  • Produtividade na construção e manutenção de aplicações Web;
  • Web leve: HTML + CSS + Ajax;
  • Para fazer uso de GWT é preciso ter uma equipe com experiência em Java;
  • Ideal para quem conhece Swing;
  • MVC só com código Java;
  • Constrói aplicações Ajax c/ Java (voltada a Open Source);
  • Widgets (componente de uso de interface) que podem ou não ser customizados;
  • Compila código Java em JavaScript;
  • “Esconde” a complexidade do Ajax;
  • Resolve incompatibilidade de browser;
  • Suporta recursos do Java 5;
  • Chamadas são assíncronas e acessadas por GWT RPC (servlet) ou HTTP (retorna XML,JSON e/ou JSNI e é solução para REST ou WebService).

Sobre Adobe Flex:

  • Baseado em linguagem de marcação (MXML);
  • SDK Open Source;
  • Action Script (linguagem de programação orientada a objeto);
  • A proposta é fazer front ends;
  • Flex Builder (“Eclipse” para Adobe Flex): no Windows é pago, mas é completo; no Linux é gratuito, mas tem menos funcionalidades disponíveis;
  • É preciso ter Flash Player para rodar aplicações Flex ou Air (rodam em desktop);
  • Multiplataforma;
  • Curva de aprendizado suave;
  • Independe de backend (Java, PHP, outras);
  • No segundo semestre sairá a versão 4 (!);
  • Depende de fornecedor, runtime e IDE paga. Exige mais poder do cliente;
  • Integra com WebServices e gera cliente automático através de WSDL;
  • HTTP Service (XML ou JSON);
  • Integração AMF: BlazeDS e GraniteDS para Java (depende do backend);
  • Frameworks: Cairngorm, Pure MVC, Mate Flex, Swiz;
  • Flex Unit para testes unitários;
  • Case de sucesso: tour de Flex & flex.org/showcase.

Qual a melhor? A que melhor se aplica pra você, seu projeto e sua realidade.

Conclusão

Foi mais um evento importante do qual pude participar e adicionar conteúdo ao meu portifólio de conhecimento. O nível dos palestrantes, temas e assuntos abordados ficaram de acordo com a atualidade. Mais de 300 pessoas estiveram presentes no OpenTDC 2009. E o mais importante e motivo de parabéns a equipe da Globalcode: tudo isso gratuito. Portanto, indico fortemente a ida de pessoas interessadas em Java e outras tecnologias a esses eventos. Para os interessados na programação do evento ou mini-bio dos palestrantes, favor acessar o link do evento. Para acesso as fotos do evento, inclusive as deste post, podem acessar o Picasa da Globalcode.

Pontos positivos

  • Nível, conhecimento e desenvoltura dos palestrantes;
  • Networking e acesso a informações;
  • Gratuito.

Pontos negativos

  • Atraso nas duas primeiras palestras, motivo pelo qual impactou na apresentação da terceira, e quiçá, mais importante palestra do evento, pois era modelo daquilo que seria apresentado no JavaOne 2009.

Espero que vocês, caros leitores, tenham gostado da leitura de minhas impressões, coletadas durante o evento. Fiquem à vontade para comentar, criticar ou complementar. E aguardem a publicação das minhas impressões do Java@TVDigital, evento também organizado pela Globalcode e de boa repercussão.

Até a próxima!

Nossas Impressões (André Pantalião e Rodrigo Ribeiro) – Falando em Java 2009

maio 25, 2009

Introdução

Neste  domingo, dia 24 de maio, acordamos cedo e perdemos a Fórmula 1(rs) por motivos nobres. Nós (André Pantalião, Rodrigo Ribeiro e Thiago Veiga) fomos ao Falando em Java 2009, evento organizado pela Caelum. O evento aconteceu no Espaço Hakka, localizado nas proximidades do metrô São Joaquim, com fácil acesso.

Report das palestras

Publicaremos posts com as nossas impressões sobre o evento:

Conclusão

Acredito que o evento tenha respondido as nossas expectativas, pois o conteúdo passado foi muito bom, fora o conhecimento dos palestrantes. O número de inscritos para esse ano, por volta de 500 pessoas, só resume o interesse da comunidade Java e a busca por novas tecnologias e know-how na área de atuação.

Pontos positivos

  • O pessoal do evento foi bastante prestativo;
  • 3 “coffee-breaks” de ótimo nível;
  • Sorteio de livros, canecas, camisas e um Nintendo Wii (!!!)para o público ( Rodrigo Ribeiro ganhou uma camisa da Red Hat 🙂 );

Pontos negativos

  • A cada fim de palestra era permitido a saída dos congressistas para um café. Com isso os congressistas perdiam o foco, criava-se aquela multidão e sempre havia um atraso adicional para o começo das apresentações;
  • Alguns palestrantes perderam o foco durante as apresentações, ou não conseguiram passar todo conteúdo presente nelas por falta de controle de tempo. Isso com certeza pode ser melhorado para o futuro.

Espero que vocês, caros leitores, possam apreciar a leitura das nossas impressões, coletadas durante o evento. Fiquem à vontade para comentar, criticar ou complementar.

Palestra: Abertura do Evento – Falando em Java 2009

maio 25, 2009

Abertura do Evento

Palestra apresentada por Fabio Kung e Sergio Lopes

Fabio Kung e Sergio Lopes abordaram o histórico do evento Falando em Java e sobre a história da Caelum.. O evento começou em 2007, com 210 pessoas. Em 2008 tinha 330 pessoas e neste ano a perspectiva era de 500 pessoas.

A Caelum começou com 2 pessoas em 2004 e hoje eles tem 60 pessoas. Falaram sobre a união da equipe, sobre vestir a camisa e sobre como a empresa funciona. Assim como na Voice, muitos dos funcionários da Caelum iniciaram sem saber programar, apresentando um bom avanço no crescimento profissional e pessoal.

Apresentaram alguns novos cursos ( a serem lançados ) como Lógica de Programação, TV Digital e criação de interfaces web com Adobe Flex.

Seguindo a linha de notícias da Caelum falaram sobre uma nova unidade em Brasília e uma atual no Rio de Janeiro. Haverá o lançamento de um livro sobre Arquitetura e Design de Software (previsão: NOV/2009); maiores informações em: arquiteturajava.com.br.

Confirmaram a ausência de Bill Burke no evento, porque ele não conseguiu tirar o visto para o Brasil, após 3 tentativas. A palestra do Bill foi substituída por uma palestra do Jim Webber.

Poderiam ter sido mais sucintos e ter a palestra um pouco mais organizada. Sei que é necessário fazer propaganda, mas foi meio cansativo.

Palestra: Guerrilla SOA – Falando em Java 2009

maio 25, 2009

Guerrilla SOA

palestra de Dr. Jim Webber da ThoughtWorks

Foi uma palestra muito bacana, abordando de forma direta e engraçada um assunto que normalmente traz mais perguntas do que respostas.

Muitas vezes ele encontra muitos sistemas complexos e nestes casos eles utilizam middlewares. Mas ele vai mostrar uma outra opção que utiliza:

  • Agile: pode ser usado em aplicacoes grandes.
  • Web:  Não da forma que conhecemos.

Podemos trazer agile e web juntos

No começo da computação

No começo da computação era comum e normal ter “silos” de aplicações.  Algumas pessoas inteligentes, presenciando esse panorama, enxergaram a possibilidade de dividir e comunicar estes silos de aplicação. Estes caras fizeram muito “encanamento” para juntar estas aplicações.  E isto funcionava, porque de alguma forma os silos estavam ligados entre si. Não era bonito mas funcionava.

Através dos anos, com o desenvolvimento da computação, a competição surgiu e os especialistas de integração se tornaram muito fortes. Eles exercerciam muita influência e se tornaram muito grandes no mercado.

Eles absorveram muita coisa: BPM, Regras de negócio, adapters, GUI tools, segurança, transformations, confiabilidade…. Com isso, mais silos foram integrados e, mesmo assim, não se tornaram muito melhores.

Neste cenário, SOA veio ao resgate destes problemas. Veio para aumentar o nível de abstração, para pensarmos em nosso sistema com uma mente voltada ao negócio. Mas não é para ser implementado da forma que os livros pregam, não focam em processos de negócio, mas em uma visão de TI.

ESB poderia ser uma boa opção, mas ele é ingovernável, porque para ser efetivo todos os sistemas da empresa deveriam estar funcionando no mesmo bus. E se tivéssemos este bus, estaríamos replicando o problema que atualmente temos com os DBAs.  Além disso, esta solução não escala.

Pensando em agilidade

Ninguém pode negar a beleza do modelo tradicional. É mais confortável, parece que podemos prever tudo. Mas, sabendo que não podemos prever tudo, aprendemos ao longo do projeto. Por isso muitos projetos waterfall falharam.

Foi abordada a criação do manifesto ágil, e que os valores ágeis são bem diferentes do tradicional. E que para eles funcionarem tivemos que aprender sobre BDD, restrospectiva, TDD, review e outras técnicas. Aprendemos também a crescer de forma incremental. E temos que fazer isto para desenvolvimento de sistemas complexos e não só para uma única aplicação.

A WEB

A web quebrou regras. Não foi só uma plataforma de publicação, mas de coordenação de tarefas. Quando navegamos em um site como o Amazon, vamos tela a tela… sendo guiados no processo de compras.

A web é protocol-centric, fazendo com que não seja necessário nenhum middleware. É uma rede “burra”, mas que é uma boa idéia.

A rede telefônica é boa em comprar e prover serviços de voz. Quando tentamos utilizar para serviços de dados, chegamos a um limite. A internet é a rede mais burra possível, ela roteia os pacotes independente do que esteja sendo executado.

Tem uma arquitetura que permite o surgimento de inovação, sem que haja previsão do quão grande isso será.

SOA Tradicional

Formada por pessoas de gabinete e programadores no front.

A guerrilha SOA propõe a idéia de quebrar em diversos pequenos passos, como parte de um grande programa de mudança. Devemos dividir os serviços de acordo com os serviços de negócio, deixando com que os responsaveis do negócio definam e sejam responsáveis  por ele.

Devemos priorizar e entregar incrementalmente os serviços, assim damos valor ao trabalho daqueles que estão no gabinete e os que estão no front.

Web e Serviços

A web é um middleware. Ele gastou muito tempo trabalhando em soluções de middleware. E só depois percebeu que a web já fazia quase tudo. E além disso, a Web já está em todos os lugares.

Além disso, a web é incremental, porque podemos fazer deploy de coisas novas sem quebrar o que já existe. Fazendo com que o risco de usar a web seja muito baixo.

O middleware, neste cenário, é opcional. A web pode ser o seu ESB. Se precisar escalar, coloque um servidor proxy para sua aplicação. A Web é projetada para crescer.

As vantagens da tecnologias Web-Centric em comparação da abordagem tradicional:

  • evolutionary design (ao contrario do BDUF)
  • entrega constante (grandes projetos)
  • Mais barato (caro)
  • Incremental (arriscado)
  • Escala da internet (escala da empresa)
  • Tem em todos os lugares (especializada)
  • integração por produto, entregando valor para o produto

Blog:  http://jim.webber.name

Alexandre Gomes, da Sea, fez uma palestra sobre este assunto no lançamento do InfoQ Brasil.

Perguntas que foram feitas

Se SOA é ruim, porque falamos dela tanto?

– Muita gente faz dinheiro com ela.

– Queremos que SOA funcione.

Como usar HTTP para nossos serviços?

– Fornecer os serviços no lado do servidor.

– Implementar melhor máquina de estados no lado do cliente, aprendendo novas técnicas ou reaprendendo técnicas tradicionais.

Quando eu utilizaria SOA dentro de uma empresa?

– Nas mesmas situações que você utilizaria lits distribuídos hoje. usar distribuído por default, REST.

– No ano passado estava trabalhando para uma empresa no Canadá e perceberam que podiam cachear uma boa parte do catálogo utilizando REST. Desde então, ele usa como REST por default. Só não utilizaria em situações onde o tempo de latência deve ser inferior a 1 segundo. neste caso, ele pagaria por isso.

E a TV Digital?

Ele acha que está convergindo com a web, será um aliado natural da Web.

Palestra: O profissional Java Efetivo – Falando em Java 2009

maio 25, 2009

O profissional Java Efetivo

Palestra ministrada por Paulo Silveira e Rafael Cosentino

Como adquirir conhecimento para ser um profissional de destaque?

Fizeram uma palestra que tentou ser engraçada. Tentaram criar uma história para embasar a apresentação, mas boa parte da platéia não “embarcou” junto com esta história.

Foram apresentados alguns problemas e apresentada a melhor solução para eles. A idéia era boa, mas no fim das contas, falou-se muito do personagem de exemplo: Nico. E o conteúdo foi pouco.

Como foi bem levantado por @lucastex no Twitter:

lucastex: #falandoemjava muito #nico e pouco conteudo na palestra… Sorry, deve ter mais sentido pra quem conhece o nico

Arquivo texto

A primeira solução proposta foi um arquivo texto com um formato específico para ser enviado aos fins de semana. Soluciona o problema de integração entre aplicações feitas em linguagens diferentes. Como é uma transferência de arquivo, usa-se TCP/IP+FTP+um formato específico para o arquivo texto.

Pontos positivos:

  • Simples;
  • Independente de plataforma;
  • Perfomance devido a pouco código escrito.

Pontos negativos:

  • Escalabilidade;
  • Segurança;
  • Manutenção.

Aprendizado: alternativa encontrada no trabalho. Solução “forçada” para a situação.

Integração utilizando protocolos binários

O exemplo dado foi de um sistema de cirugia/operação a distância (remota). Ao invés de usar WebServices (SOAP, XML, HTTP e TCP/IP), que pode resultar em lentidão, é melhor usar protocolos binários (UDP / TCP/IP).

Pontos positivos:

  • Performance.

Pontos negativos:

  • Manutenção;
  • Complexidade.

Aprendizado: Universidades, onde os professores forçam o conhecimento com performance.

Integração utilizando SOAP / WSDL

O foco foi criar uma solução que atendesse um sistema de integração de guias de saúde de pacientes no Brasil. Como o objetivo era padronizar, foi escolhido o SOAP/WSDL.

Pontos positivos:

  • Padronização;
  • XML;
  • HTTP;
  • Integridade;
  • Burocracia.

Pontos negativos:

Aprendizado: Comunidade Java (GUJ), fatos do cotidiano como padronização da Nota Fiscal Eletrônica Nacional (SOAP/WSDL).

Integração utilizando Mashup

O browser faz requisições a serviços diferentes e concentra em um local só.  Neste caso, para facilitar, ao invés do SOAP e XML, utilizamos algo mais simples, leve e fácil de ler. Pode ser aplicado para solucionar problema de localização de venda de comida (Chinese Food), centralizando as informações via Google Maps.

Pontos positivos:

  • Fácil de ler e debugar;
  • Simples;
  • Leve;
  • Mais pragmático;
  • no caso de JSON: browser é cliente.

Pontos negativos:

  • Falta formalização;
  • Estilos diferentes.

Integração por troca de mensagem

Pode ser aplicada no sistema de integração do Detran no Brasil. Havia antiga lenda que se você tomasse multa em outro estado que não fosse o de origem do seu carro a multa não chegaria para você pagar. A sugestão é a troca de mensagens com centralização.

Pontos positivos:

Pontos negativos:

  • Performance;
  • Complexidade.

Aprendizado: literatura (Livros técnicos, “bíblias”).

Conclusão

Existem várias formas de adquirir conhecimento portanto é necessário estar “antenado” a tudo o que se passa e a comunidade é onde você pode ter acesso a diversos tipos de informação.

Palestra: Seam e Web Beans – Falando em Java 2009

maio 25, 2009

Jboss Seam e Web Beans

Palestra ministrada por Alessandro Lazarotti (Red Hat) e Ricardo Nakamura (Caelum)

Alessandro e Ricardo mostraram como o Jboss Seam e WebBeans se relacionam entre si e qual o futuro de ambos. Foi usado, como exemplo, a rotina diária do Ricardo Nakamura.

O assunto pode até não ser novo, mas fizeram a apresentação com muita competência. O Ricardo foi engraçado e apresentou o que se propôs. Fez também uma conceituação legal de inversão de dependência. O problema foi a falta do controle de tempo, que impediu que todo conteúdo previsto fosse passado.

A parte de conceituação do ricardo foi muito boa!

Ele usou como exemplo a sua rotina diária:

Processo Normal:

  • Acorda
  • Vai ao banheiro
  • Troca de Roupa
  • Vai comprar pão
  • Toma café da manhã
  • Sai para trabalhar

Sair para comprar pão, para ele, é um processo muito chato. Ao invés de comprar pão, ele queria uma solução um pouco melhor. As alternativas seriam:

  • Sair de casa e comprar o pão
  • O pão ser entregue em casa
  • Comer para quê?

Inversão de controle

Ir comprar o pão é ruim. Porque não inverter o controle ? Mas o que vai ser invertido? Vou fazer o pão? o pão vai me comprar ? A frase não está clara.

Que aspecto do controle está sendo invertido?

Recursos, dependências de alguém (algo). O pão para mim é muito importante. Então teremos que fazer injeção de dependências (DI): o pão será injetado na casa.

Existem alguns frameworks, muito falados, que fazem a injeçào de dependência, como o Spring, Pico Container, Guice e outros.

Expandindo a idéia

Quero também receber água em casa. Como fazer isso?

  • Ligar na fornecedora, verificar se entregam em casa, combinar pagamento.
  • Avisar portaria e empregada.

Estes passos se repetiriam para outros itens que eu desejasse receber em casa. Não seria bom se esta configuração fosse sempre padronizada ?

É preciso haver padronização com frameworks, recursos e configurações. Logo, foi criada a especificação JSR 299 (Contexts and Dependency Injection for java EE), que padroniza a injeção de dependências e gerenciamento do ciclo de vida contextual.

A especificação (CDI)então tomou forma e está próxima de sua proposta final. Mas, qual a implementação de referência da CDI (especificação JSR 299)?

Web Beans é a implementação de referência. Mas então o que é o Seam Framework?

Ele surgiu junto com a especificação, mas não tem vínculo com a especificação. A especificação nasceu com base no Seam. O Seam foi a inspiração. No futuro, o Web Beans será o core do JBoss Seam.

Web Beans

Mostou um pouco de código, baseado no exemplo da entrega de pão em casa.

  • Mostrou o funcionamento do WebBeans com Java SE.
  • Depois com JSF.

Seam

Muito do que foi mostrado é igual ao Web Beans. Mas o Seam não é só isso. Ele suporta muitas outras funcionalidades. É uma plataforma muito grande de integração, para que você não tenha que ter diversos frameworks de integração.

Mostrou exemplos de uso do Seam na apresentação, tais como: envio fácil de e-mail, extensões para o JSF, annotations, expressions language, etc.

Seam 3

As novidades serão:

  • Web Beans como engine;
  • Integrador de diversas tecnologias;
  • Ferramentas de utilidade: plugins, seam-gen, maven;

A mensagem final foi: o Seam não é anarquia, não força você a escrever o projeto da forma dele.

Palestra: VRaptor3: Guerrilha Web – Falando em Java 2009

maio 25, 2009

VRaptor3: Guerrilha Web

Palestra apresentada por Felipe Sabella e Guilherme Silveira (Caelum)

Esta palestra foi uma apresentação (no fundo, uma mensagem de “Use-me”…) das novidades do VRaptor3, framework de aplicações Web desenvolvido pelo pessoal da Caelum, que ainda está em fase de testes e sem documentação completa, tendo sua liberação para o público programada daquia a 3 semanas (previsão dos palestrantes).

Começo

Tudo começou em 2004, quando o pessoal da Caelum buscava uma alternativa mais completa para criar a interface do “GUJ 2.0″, pois o framework usado no momento, o WebWorks, não estava satisfazendo as necessidades. Partindo da premissa do “Quer algo do seu jeito, então faça você” ou “É uma porcaria, vamos fazer o nosso”, surgiu o projeto VRaptor.

Projeto VRaptor

VRaptor como foi dito, não veio pra “reinventar a roda”, mas para facilitar o desenvolvimento Web com a maior compleitude possível. Foi usada a frase “Quando se rouba idéias de todo mundo é uma pesquisa”, para embasar o desenvolvimento da ferramenta e a busca para agregar as necessidades principais do programador Web.

Em uma pesquisa rápida a platéia foi questionada sobre quantos projetos deram certo com Struts e quantos falharam (a mesma coisa com JSF). Algumas pessoas levantaram a mão para certo, outras para errado, mas no final o objetivo era dizer que com o VRaptor as coisas seriam diferentes (“Jabá” da ferramenta, é claro). Foi possível ver que o auditório estava bem fracionando sobre frameworks já usados em desenvolvimento Web, citando até outros exemplos. Hoje no mercado temos cerca de 120 frameworks de desenvolvimento Web disponíveis, aumentando e muito as opções de uso.

Novidades da versão 3

Foram apresentadas as seguintes novidades da versão 3 do VRaptor:

  • Integra com Spring e Pico Container por padrão (Spring é default);
  • Cria novas integrações DWR e Flex;
  • Refactor amigável: validação e redirecionamento;
  • VRaptor auxilia nas annotations do RESTful;
  • Features “legais”: upload e download de arquivos com menos linha de código;
  • URI’s mais limpas e claras (inspiração no Rails);
  • Definições de escopo (uso da annotation “@ApplicationScoped”);
  • Delega para outros a configuração de XML e properties;
  • Conventionful (totalmente convencionável): retorno de método para os mais diversos tipos & collections.

Durante a exposição de cada uma das novidades ambos os palestrantes mostravam, compilavam e explicavam códigos com uso da ferramenta, tornando bem claro o entendimento de uso da mesma.

Por que usar VRaptor?

  • Há pessoas que não gostam de Struts Action (gosto pessoal dos dois e de outras pessoas. Dizem que cada vez que se usa Struts Action “mata-se uma foca”);
  • Cada framework agrada tipos diferentes de usuários. VRaptor pode agradar você.

No final (tirando o “jabá” de sempre) foi uma palestra para agregar conhecimento de mais um framework Web, que pode ou não nos agradar, mas que já tem aceitação de um certo número de pessoas. Ambos os palestrantes conseguiram expor ao público de maneira clara, dinâmica e concisa os conceitos passados.

Palestra: Arquitetura para aplicações Java de médio porte – Falando em Java 2009

maio 25, 2009

Arquitetura para aplicações Java de médio porte

Palestra apresentada por Guilherme Moreira e Sergio Lopes (Caelum)

A palestra teve como foco o crescimento de sites ou aplicações Web, que ocorrendo de forma desordenada e sem planejamento tendem a gerar downtime, timeouts de resposta, inconsistência de dados, etc. Com isso perde-se dinheiro; as vezes muito dinheiro. Tendo como base esses tipos de aplicações os palestrantes abordaram problemas passíves de ocorrer, análise e as possíveis soluções a serem tomadas.

Problema 1: SOAP e gargalo de Rede

  • JSON x XML x WSDL (podem gerar problemas de tamanho de arquivo e compactação).

Solução: Uso do Fast Infoset (FI), que compacta XML (em até 30%) e tem performance.

Problema 2: Hibernate não otimizado

  • Banco de Dados é o gargalo (famosa primeira conclusão).

Solução:

  • Conhecer o cache de primeiro nível e evitar de carregar muitos objetos na memória (risco dejava.lang.OutOfMemoryError: Java heap space”);
  • Aprender a usar “stateless session“.
  • Cuidado com o “n+1 selects“;
  • Aprenda a usar as configurações certas do Hibernate (“@BatchSize“, por exemplo).

Problema 3: BD sobrecarregado

Solução:

  • Abrir conexões somente quando for necessário;
  • Use pool para reaproveitar conexões entre requests;
  • Só inicie transações quando for necessário;
  • Evite o uso do BD o tempo todo;
  • Use cache!

Problema 4: indisponibilidade

Solução:

  • Uso de cluster. Vantagens: escalabilidade e disponibilidade. Desvantagens: performance e não-simplicidade;
  • Uso de load balance. Vantagens e Desvantagens idênticas ao caso do cluster;
  • Gerenciar estados do cluster: Sticky Sessions (caiu a sessão, acabou), replicação (manda os dados para outra máquina) ou stateless (s/ estado nenhum. “Pra que estado?…rs”).

Após as apresentações dos “problemas-análise-solução” ambos palestrantes colocaram a prova e ao vivo uma demo de máquinas em cluster e load balance usando JBoss. Resultado : FAIL! Isso provou que mesmo tendo experiência no assunto, preparando anteriormente a demo, usando bons micros e outros poréns, é certo que algo pode ocorrer e que outros fatores podem influenciar.

Outras idéias para análise de arquiteturas:

Para finalizar eles deixaram uma frase de Martin Fowler para pensar: “Primeira Lei do Design de distribuição de objetos: Não distribua seus objetos” (Nem sempre o gargalo é a rede…).

É importante ressaltar novamente que na palestra houve a apresentação de códigos conforme os exemplos foram passados. Isso facilitou e muito o entendimento do público (tirando a falha na apresentação do cluster).