logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Ago 24

Atualizando seu Android Milestone para a ROM MIUI BR

Escrito por Stefan Horochovec em 1, 2.0, 4, 6, Android, Aplicativos, app, AR, Beta, BI, blog, botão, Botões, busca, C#, cache, class, comunicação, custom, development, Dica, Diversos, Download, err, erro, for, Google, ide, IE, if, instalação, lista, lite, mg, NaN, O, on, Pessoal, processo, procura, prova, RIA, Ria’s Geral, S+S, site, SmartPhone, Software, TAT, Teste, UI, update @ 08 24th, 2011 | via http://www.horochovec.com.br/blog | Sem comentários
Stefan Horochovec
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá pessoal,

Que tal mudar radicalmente seu Android? Hoje eu instalei a ROM Android MIUI BR em meu Motorola Milestone. Fiz a instalação na curiosidade de ver uma grande customização, já que a grande maioria das ROMs disponíveis atualizam as versões, mas a concepção do Android é mantida. Já os chineses que estão por traz da MIUI não, eles simplesmente mudaram MUITO a UI do Android. A base da mudança foi buscar uma semelhança grande com o iOS. Particularmente não achei isso muito bacana, mas o trabalho foi muito bem feito e vale um post.

Bom, primeiramente quero deixar claro que eu não testei essa ROM em nenhum outro aparelho, apenas em meu Motorola Milestone, mas segundo o site americano da ROM, diversos aparelhos já podem testar a versão beta da ROM.

O processo de atualização é bastante simples, mas será necessário baixar uma série de softwares para isso. Vale lembrar que esse processo pode estragar seu celular, portanto, faça por sua conta e risco, não dou garantia que irá ocorrer tudo bem. Caso algo de errado, provavelmente seu celular terá que ser enviado para a Motorola, portanto, tenha certeza que a bateria do seu celular está bem carregada, uma falta de energia no meio do processo seria catastrófico.

Vale lembrar que, os aplicativos terão que ser re-instalados, pois basicamente o processo consiste em você formatar seu celular e instalar tudo novamente.

Mão a obra, primeiro, faça o download dos softwares abaixo:

  • USB Drivers
  • Open recovery
  • RSD Lite
  • SBF Milestone
  • MIUI ROM Chinesa
  • Tradução da MIUI ROM Chinesa para o Português Brasileiro

1º Passo
Instale os drivers USB caso ainda não tenha instalado os mesmos em seu computador;

2º Passo
Instale o RSD Lite

3º Passo
Descompacte o Open Recovery. Copie a pasta OpenRecovery que será criada na descompactação para a raiz do cartão de memória. Repita a operação para o arquivo update.zip que também foi descompactado no arquivo anterior.

4º Passo
Copie para a pasta /OpenRecovery/updates/ os arquivos que você baixou da MUIU ROM Chinesa e Tradução da MIUI (miuibrasil_Milestone-2.3.4a_deodexed.zip e? TRAD_1C_MIUI-Bra-Milestone_2.3.4a.0.zip)

Nesse momento, temos uma diferença na instalação. Você já instalou alguma vez uma outra ROM customizada a partir da versão 2.2.1 do Android (Shadowmodbr, Cyanogem, etc) ? Se sim, vá para a segunda etapa. Caso contrário, faça a primeira também.

Primeira Etapa (Essa etapa é um pouco complicada para marinheiros de primeira viagem. Tenha calma, qualquer dúvida, envie no contato abaixo do post. Um erro aqui será crucial para o seu processo)

  • Desligue seu celular;
  • Descompacte o arquivo SBF Milestone em algum local em seu computador;
  • Pressione o botão de reduzir o volume e o botão de tirar a foto em sua câmera, mantenha-os pressionados enquanto o smartphone é ligado;
  • Ao invés de abrir uma tela com a logomarca do Android que você está acostumado, deve ter surgido uma tela escrita BootLoader e alguns números. Caso seja esse o resultado, ligue o celular em seu computador com os cabos USB, caso contrário, repira a operação.
  • Quando conectar os cabos, o seu computador irá se preparar para a comunicação com o dispotivo, aguarde;
  • Finalizada essa etapa, instale o RSD Lite;
  • Depois de instalado, abra o RSD Lite, aguarde uns instantes para que o seu dispositivo apareça na lista de aparelhos;
  • Depois de aparecer na lista, selecione seu aparelho e no ícone “Procurar”, selecione o arquivo da SBF Milestone, e pressione o start. Após isso, você deverá aguardar a instalação da SBF. Nesse período seu celular irá estar fora do ar e ele irá se reiniciar diversas vezes.
  • Quando finalizar, o telefone irá se reiniciar e irá travar o logo da Motorola, nesse momento, desligue e ligue seu aparelho novamente.
  • Fim da primeira etapa;

Segunda Etapa (Instalação da MIUI BR)

  • ? Ligue seu dispositivo pressionando o botão X do teclado ou o botão da câmera. Sim, depende de cada modelo, dá para entender?
  • Quando o aparelho estiver ligando, irá aparecer um triangulo vermelho, ? muito semelhante a um triangulo de avisos no trânsito. Feito isso, aperte simultaneamente os botões de aumentar o volume e o da câmera junto;
  • Selecione a opção: “apply sdcard:update.zip”;
  • Selecione a opção: Limpar cache partition;
  • Selecione a opção: Limpar Data / Factory Reset (Na próxima tela, selecione a opção SIM);
  • Selecione: Aplicar Atualizações;
  • Selecione o arquivo:? miuibrasil_Milestone-2.3.4a_deodexed.zip ;
  • Selecione o arquivo:? TRAD_1C_MIUI-Bra-Milestone_2.3.4a.0.zip;
  • Selecione: Voltar;
  • Selecione: Reiniciar;
Se tudo correr bem, seu celular estará com a MIUI funcionando perfeitamente. Abaixo algumas telas retiradas do meu aparelho:

01
02
03
04
05
06
07

Um abraço pessoal,? até a próxima!

Abr 9

Flex Twitter no livro Flex+Zend

Escrito por Daniel Schmitz em 1, 2009, AMF, api, app, AR, back, comunicação, falha, Flex, for, framework, Google, if, Livro, NaN, O, on, Outros, Pessoal, PHP, problema, problemas, processo, prova, redirecionamento, RIA, Ria’s Geral, serviço, Tema, Twitter, UI, zend, Zend Framework @ 04 9th, 2011 | via http://flex.etc.br | Sem comentários
Daniel Schmitz
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Pessoal,

no livro Dominando Flex e Zend existe um capítulo abordando a criação de uma app com acesso ao Twitter, que chamamos de FlexTwitter. Esta aplicação, quando foi criada em 2009, usava o próprio Zend Framework para se conectar no Twitter e realizar operações tais como obter seguidores, enviar mensagens, entre outros.

No final de 2010, a api do twitter mudou completamente a forma como o login é realizado. Veja as diferenças:

Antes:

  • Usamos o Zend_Service_Twitter, repassando usuário e senha
  • A API do twitter verifica login e senha, e retorna as informações do usuário
  • A partir daí, começamos a usar o serviço

Agora:

  • O usuário precisa registrar uma aplicação em dev.twitter.com
  • Neste registro, o usuário precisa fornecer um “callback url”.
  • Com a app registrada, ele obtém a chaves de acesso, como o consumer_secret e o consumer_key
  • Através destes parâmetros, temos que instanciar o Zend_Oauth_Consumer e chamar um método chamado redirect, que irá redirecionar a página atual para o login do Twitter.
  • O usuário loga no twitter e, ao clicar em “Allow”, o twitter retorna para a página de “callback url”
  • A partir deste momento, pode-se utilizar ou outros métodos do Zend Framework.

Um dos maiores problemas nesta nova implementação é o redirecionamento da página, ou seja, como estamos utilizando AMF para comunicação entre flex e php, o redirecionamento vai falhar. O que temos que fazer é, de dentro da aplicação, abrir uma nova janela e proceder com o processo de login.

Outro problema encontrado é o callback url. Pelo que eu vi no google, existem problemas ao criar uma callback “http://localhost/flextwitter/callback.php”, pois o twitter não aceita um “localhost” como url. Resumindo, o que era simples e perfeito para o livro, ficou complicado de mais para se usar.

Desta forma, eu gostaria de propor uma discussão entre as pessoas que tenham o livro.  Vocês irão escolher entre a criação de um capítulo novo contendo esta implementação do Flex Twitter ou um capítulo novo contendo a implementação de algum sistema qualquer. Vocês escolhem!

Somente as pessoas que tenham o livro terão os comentários aprovados.

?

?

Mar 10

Oportunidade Área Comercial – RS

Escrito por Fabio da Silva em 1, 4, 6, Apresentação, AR, BI, blog, Blogs, cliente, comunicação, control, Curso, Cursos, Dica, for, Formação, gestão, Google, IE, int, mg, O, on, Pessoal, RIA, Ria’s Geral, serviço, Serviços, Tecnologia, UI, UX, Vagas, XP @ 03 10th, 2011 | via http://fabiophx.blogspot.com | Sem comentários
Fabio da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

A T@rgetTrust oferece 3 oportunidades na área comercial:


Auxiliar Comercial – Administrativo
Atender e entender as demandas dos clientes. Acompanhar e operacionalizar as vendas. Registro de inscritos, matrículas, controle de ingressos e presenças. Apoio na divulgação e comercialização dos serviços que a empresa oferece.

Pré-Requisitos: Boa apresentação, iniciativa, pró-atividade, comunicativa, capacidade de trabalhar em equipe, ótimo inter-relacionamento pessoal.

Conhecimentos Desejáveis: Habilidade de comunicação oral e escrita. Conhecimentos de atendimento comercial, de rotinas administrativas, de informática e tecnologia. Cursos superior em andamento nas áreas de administração.

Quantidade de Vagas: 1

Benefícios: Salário compatível, VT + VR+ Assis. Médica.

Enviar currículo com pretensão salarial para rh@targettrust.com.br.

Comercial – Vendas
Atender e entender as demandas dos clientes. Acompanhar e operacionalizar vendas. Prospecção de novos clientes. Apoio à área de Marketing.

Pré-Requisitos: Iniciativa, pró-atividade, comunicativa, capacidade de trabalhar em equipe, ótimo inter-relacionamento pessoal.

Conhecimentos Desejáveis: Habilidade de comunicação oral e escrita. Experiência com vendas e atendimento comercial. Curso superior nas áreas de administração, marketing, gestão comercial ou tecnologia com formação complementar e/ou vivência na área de vendas.

Quantidade de Vagas: 2


Benefícios: Salário compatível, VT + VR+ Assis. Médica.

Enviar currículo com pretensão salarial para rh@targettrust.com.br.

Mar 7

BlazeDS – do básico ao avançado – Parte 1

Escrito por DClick Team em 1, 2009, 4, 6, action, Actionscript, Adobe, AMF, apache, app, AR, arte, auto, BI, Blazeds, blog, botão, class, classe, cliente, código, código fonte, Componente, componente flex, Componentes, comunicação, configuração, control, Controls, Crossdomain, custom, dados, demo, developer, Diversos, Documentação, Download, Eclipse, err, erro, event, Evento, events, exemplo, Exemplos, falha, flash, Flex, fonte, for, framework, Frameworks, function, Galileo, git, handle, Hibernate, HTTPService, ide, IE, if, image, instalação, int, Java, library, LOB, Messaging, mg, MXML, NaN, O, on, opensource, Outros, Plugin, problema, problemas, pt, reference, referencia, Remoting, RIA, Ria’s Geral, runtime, screen, Screencast, screencasts, Segurança, Sem categoria, server, serviço, Serviços, servidor, site, spark, Spring, string, tag, TAT, Tecnologia, Twitter, UI, uint, web, Webservice, window, XML @ 03 7th, 2011 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

BlazeDS é uma aplicação Java opensource mantida pela Adobe, sob licensa GNU Lesser General Public License, Version 3 (LGPL v3), que fornece um conjunto de serviços, todos sobre o protocolo HTTP(Hyper Text Transfer Protocol), para permitir uma aplicação Flex fazer chamadas a serviços remotos Java, retornando os dados tanto de forma assíncrona como em tempo real.

Por utilizar o formato de dados binário chamado AMF(Action Message Format) para a serialiazação e deserialização de dados, a comunicação entre uma aplicação Flex e o servidor Web se torna muito otimizada. Existem estudos feitos comparando as diversas tecnologias, como o Jamesward, mostrando o potencial do AMF.

Outra grande vantagem quando usamos o BlazeDS é a facilidade de ter classe Java automaticamente convertida para uma classe ActionScript e vice-versa.

O BlazeDS pode ser baixado do site da Adobe em dois formatos:

  1. Turnkey – Versão que já vem com exemplos e servidor tomcat pré configurado
  2. Binary – Versão com os binários

Você pode optar também por fazer o download do código fonte. A documentação também está disponível neste link.


Entendendo os arquivos de configuração do BlazeDS
A estrutura de arquivos do BlazeDS é bem simples, quando descompactamos o blazeds.war, presente na versão binária, podemos ver a seguinte estrutura:

Devemos nos atentar a duas pastas. A pasta lib, que contém todos os jars necessários, e a pasta flex, que contém todos os arquivos de configuração do BlazeDS. Vamos ver o que cada arquivo significa:

  1. services-config.xml: É neste arquivo que estão as principais configurações do BlazeDS como segurança, logging, serviços disponíveis (Canais), fábricas para a integração com Frameworks Java como Spring e EJB3 e as referências para os outros três arquivos de configuração.
  2. remoting-config.xml: É nesse arquivo que iremos configurar os serviços Java para serem “consumidos” pela aplicação Flex. Sempre quando configuramos este arquivo, iremos trabalhar com o componente Flex chamado RemoteObject.
  3. message-config.xml: Aqui é configurado tudo o que for relacionado com mensageria, sempre necessário quando trabalhamos com os componentes Flex Consumer e Producer. Um exemplo da utilização desta tecnologia seria fazer um bate bapo, ou até mesmo aplicações colaborativas, onde é desejável a iteração simultânea de diversos usuários.
  4. proxy-config.xml: Além da possibilidade de utilizarmos o componente RemoteObject, o Flex disponibiliza mais duas formas de integração: O HTTPService e o WebService. Porém, por questões de segurança, os serviços só podem ser chamados quando os mesmos estão no mesmo domínio que a aplicação, ou que exista uma configuração específica que permita um cliente Flex fazer a consulta (esta configuração é feita por um arquivo chamado crossdomain.xml e está sempre no servidor onde está o serviço chamado). Caso uma das duas condições acima não seja satisfeita, deveremos utilizar o BlazeDS como proxy , e é ai que configuração deste arquivo se torna necessário.



Criando o seu primeiro projeto com o BlazeDS

Para criar o projeto iremos precisar de:

  1. Eclipse Galileo JEE
  2. FlashBuilder Plugin
  3. BlazeDS 4 Binary
  4. Tomcat 6



Feito os downloads e a instalação do Eclipse e FlashBuilder, vamos iniciar o FlashBuilder para criar o projeto.
Antes de criar o projeto, vamos configurar o Tomcat:

  1. Nas preferências do Eclipse, vá em Server — Runtime Environments e clique em Add…
  2. Na pasta Apache selecione Apache Tomcat v6.0 e clique em Next
  3. Selecione a pasta onde você descompactou o Tomcat e clique em Finish

Feito a configuração do Tomcat, vamos criar o projeto:

  1. Vá em File – New – Flex Project
  2. Preencha os dados do primeiro passo como na imagem abaixo e clique em Next
  3. Neste passo vamos configurar os dados do servidor. Deixe tudo configurado como na imagem e clique em Next


    Para selecionar o “Target Runtime”, clique em New e depois escolha o Apache Tomcat 6, como na imagem abaixo.
  4. No último passo não será necessário mudar nada, clique em Finish

Agora vamos criar a classe Java que terá o serviço para retornar a string “HelloBlazeDS”

  1. Crie uma classe Java br.com.dclick.service.RemotingService
  2. Crie o serviço:
    1
    2
    3
    4
    5
    6
    7
    8
    package br.com.dclick.service;
    public class RemotingService {

    ? ? public String sayHello() {
    ? ? ? ? return “HelloBlazeDS”;
    ? ? }
    ? ?
    }

Agora vamos configurar o BlazeDS para disponibilizar o serviço que acabamos de criar.

  1. Abra o arquivo remoting-config.xml que está na pasta WebContent/WEB-INF/flex
  2. Para que seja possível chamar os métodos da classe Java, precisamos configurar um destination. Isso é necessário para cada classe Java.
    O arquivo fica assim:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    xml version=“1.0″ encoding=“UTF-8″?>
    “remoting-service” class=“flex.messaging.services.RemotingService”>
    ? ?
    ? ? ? ? “java-object”
    ? ? ? ? ? ? class=“flex.messaging.services.remoting.adapters.JavaAdapter”
    ? ? ? ? ? ? default=“true” />
    ? ?

    ? ?
    ? ? ? ? “my-amf” />
    ? ?

    ? ? “blazeServices”>
    ? ? ? ? ? ? ? ? ? ? br.com.dclick.service.RemotingService
    ? ? ? ?
    ? ?

Vamos colocar na aplicação a chamada para o servidor.

  1. A primeira coisa que precisamos fazer é configurar o RemoteObject. Fazer isso é muito simples:
    1
    2
    3
    4
    5
    ? ? ? ?
    ? ? ? ? “services” destination=“blazeServices”
    ? ? ? ? ? ? ? ? ? ? ? ? result=“services_resultHandler(event)”
    ? ? ? ? ? ? ? ? ? ? ? ? fault=“services_faultHandler(event)” />
    ? ?


    Alguns detalhes:

    * Perceba que a propriedade destination aponta para o destination que configuramos no arquivo remoting-config.xml

    * Precisamos declarar um id para poder referenciar o RemoteObject

    * Adicionamos um ResultHandler para tratar o resultdo do serviço

    * Adicionamos um FaultHandler para tratar a falha do serviço

  2. Os Handlers ficam assim:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ? ? ? ?
    ? ? ? ? [CDATA[
    ? ? ? ? ? ? import mx.controls.Alert;
    ? ? ? ? ? ? import mx.rpc.events.FaultEvent;
    ? ? ? ? ? ? import mx.rpc.events.ResultEvent;

    ? ? ? ? ? ? protected function services_resultHandler(event:ResultEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? Alert.show(event.result.toString());
    ? ? ? ? ? ? }

    ? ? ? ? ? ? protected function services_faultHandler(event:FaultEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? Alert.show(event.fault.message);
    ? ? ? ? ? ? }

    ? ? ? ? ]]>
    ? ?


    Alguns detalhes:

    * A propriedade result do evento ResultEvent vai conter o resultado do serviço. No nosso caso o serviço retorna uma String “HelloBlazeDS”

    * A propriedade fault do evento FaultEvent contém os detalhes do erro.

  3. A última coisa é chamar o serviço. Vamos fazer isso no evento creationComplete, como segue:
    1
    2
    3
    4
    ? ? ? ? protected function application1_creationCompleteHandler(event:FlexEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? services.sayHello();
    ? ? ? ? ? ? }
  4. A aplicação inteira fica assim:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    ? ? ? ? xml version=“1.0″ encoding=“utf-8″?>
    “http://ns.adobe.com/mxml/2009″
    ? ? ? ? ? ?? ? xmlns:s=“library://ns.adobe.com/flex/spark”
    ? ? ? ? ? ?? ? xmlns:mx=“library://ns.adobe.com/flex/mx” minWidth=“955″ minHeight=“600″
    ? ? ? ? ? ?? ? creationComplete=“application1_creationCompleteHandler(event)”>
    ? ?
    ? ? ? ? [CDATA[
    ? ? ? ? ? ? import mx.controls.Alert;
    ? ? ? ? ? ? import mx.events.FlexEvent;
    ? ? ? ? ? ? import mx.rpc.events.FaultEvent;
    ? ? ? ? ? ? import mx.rpc.events.ResultEvent;

    ? ? ? ? ? ? protected function services_resultHandler(event:ResultEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? Alert.show(event.result.toString());
    ? ? ? ? ? ? }

    ? ? ? ? ? ? protected function services_faultHandler(event:FaultEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? Alert.show(event.fault.message);
    ? ? ? ? ? ? }

    ? ? ? ? ? ? protected function application1_creationCompleteHandler(event:FlexEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? services.sayHello();
    ? ? ? ? ? ? }

    ? ? ? ? ]]>
    ? ?
    ? ?
    ? ? ? ? “services” destination=“blazeServices”
    ? ? ? ? ? ? ? ? ? ? ? ? result=“services_resultHandler(event)”
    ? ? ? ? ? ? ? ? ? ? ? ? fault=“services_faultHandler(event)” />
    ? ?

Agora só falta fazer o deploy da aplicação e subir o servidor.

  1. Vá em Window – Show View – Other. Na janela que abrir, digite Servers e clique OK
  2. Na view Servers, clique com o botão direito em Tomcat v6.0 e selecione Add and Remove…
  3. Selecione a aplicação HelloBlazeDS e clique em Add e depois Finish
  4. Na view Servers, clique com o botão direito em Tomcat v6.0 e clique em Run

Agora é só executar a aplicação e ver o resultado:

Isso é tudo, guarde esse projeto configurado para ser usado nos próximos posts.

Fev 16

BDD – Do que se trata?

Escrito por DClick Team em 1, 4, 6, análise, AR, arte, auto, bar, Behavior, bug, class, classe, classes, cliente, código, comunicação, cultura, demo, Desenvolvedor, Desenvolvimento, Desenvolvimento de Software, development, err, erro, exemplo, Ferramenta, for, Formação, framework, Frameworks, IE, if, int, Java, lógica, NaN, O, on, Opinião, problema, problemas, programação, Projetos, relatório, RIA, Ria’s Geral, Sem categoria, serviço, Software, Sun, TAT, Tema, Teste, Twitter, UI, Ved @ 02 16th, 2011 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

BDD – Behavior Driven Development



BDD está ficando mais conhecido ultimamente e muitas pessoas estão adotando a prática no dia a dia de desenvolvimento. Mesmo assim BDD é tão antigo quanto o próprio TDD (Test Driven Development).
BDD nada mais é do que trazer ao código, e principalmente ao código que testa os casos de uso da aplicação, um pouco mais da lógica de negócio e do problema que está sendo resolvido no nível do usuário.

Melhorando a comunicação



Quando escrevemos algum teste unitário, normalmente damos um nome ao teste para que possamos entender os resultados quando gerarmos um relatório após a execução dos mesmos. Também damos nomes que façam sentido, para facilitar a comunicação da equipe de desenvolvimento, pois se outra pessoa da equipe precisar dar manutenção no teste, torna mais fácil a compreensão do que o teste está encarregado de testar sem que seja necessário ler muitas linhas de código.


Nos tempos atuais falamos bastante de aumentar a integração da equipe com o cliente ou a área que entende do negócio da aplicação. Também falamos em uma maior colaboração de ambas as partes no desenvolvimento de software. Para quebrar essa barreira que existe entre desenvolvimento e análise, algumas equipes empregam uma programação mais voltada a resolver os casos de uso propostos, ao invés de resolver problemas de baixo nível e compor uma aplicação final.


BDD prega que o problema que será resolvido deve estar bem claro para a parte quem entende do negócio (chamarei de cliente, mesmo que algumas vezes não seja necessariamente um cliente), e quem desenvolve a aplicação em si. Para isso são escritos casos de testes baseados nos casos de uso do sistema, e tais casos de teste usam uma linguagem comum para ambas as partes.


Como normalmente o cliente não é técnico, fica muito difícil se comunicar com ele via testes unitários em código, e fica mais difícil ainda que o cliente colabore com a melhoria e a escrita de tais testes. Porém, os testes unitários e automatizados são a melhor ferramenta do desenvolvedor para testar a aplicação e garantir que a equipe mantenha o código funcionando.


Para suportar ambas as necessidades, e implantar o BDD de fato, uma das soluções é associar o problema de cada caso de uso, a um teste unitário que irá se certificar que aquele caso de uso está sendo corretamente executado.


Por exemplo, em java podemos dar nomes a nossas classes de teste de acordo com o caso de uso que aquele teste se refere. E podemos também nomear os métodos como a execução específica daquele caso de uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class TesteDeCadastroDeUsuario {
? ?
? ? @Test
? ? public void testeDeCadastrarNovoUsuario() {
? ?
? ? ? ? // … cadastra o usuário
? ?
? ? ? ? Assert.assertTrue(“Usuário novo não foi cadastrado corretamente, “
? ? ? ? ? ? ? ? ? ? ? ? + “pois o nome está inválido.”,
? ? ? ? ? ? ? ? ? ? ? ? nomeUsuarioValido());
? ?
? ? }
? ?
}



Dessa forma quando o cliente ver o resultado dos testes e perceber que este teste falhou, ao invés de ler algo como “O serviço de usuário voltou null.”, ele conseguirá ler “No teste de cadastro de usuário, ao testar que um usuário novo está sendo cadastrado, o teste falhou pois o usuário não possui um nome válido, logo não foi cadastrado.”


Parece pouca coisa, mas para o cliente é um informação muito importante nas discussões sobre prioridade de correção de bugs e melhorias do sistema. Isso porque fica claro para o cliente quando o desenvolvedor descreve o teste exato que falhou e o cliente sabe exatamente a qual caso de teste se refere e qual o problema que está sendo resolvido. Não é informação pertinente ao cliente como que tecnicamente se corrige o problema e como que o sistema está implementado para que o erro ocorre-se, esse é o papel do desenvolvedor.

Simples e Efetivo, mas não é a Silver Bullet



Existem muitos frameworks para facilitar a empregação do BDD. Vimos aqui que mais do que um framework, BDD é uma cultura e pode ser empregado sem o uso de qualquer ferramenta, pois o importante é manter a comunicação entre os níveis técnicos diferente na mesma equipe.


Muitos correm atrás da implantação do BDD nos projetos com a esperança de que os problemas na resolução de bugs e na comunicação da equipe serão resolvidos. Isso não é verdade e seu projeto irá dar tão certo quanto ele daria antes da adoção de BDD. BDD é um mudança de comportamento na equipe onde todos devem estar empenhados na causa de melhorar a comunicação, e tentar entender os problemas de verdade que o sistema se propõe a resolver.


A mudança de comportamento tem que partir do lado do cliente também, pois é necessário a compreensão de que os erros que estão claros para ele agora, não surgiram do nada. Na verdade eles sempre estiveram presentes no sistema, só que protegidos pela barreira que impedia a comunicação entre de desenvolvimento e análise.


Espero ter sido claro, qualquer opinião sobre o assunto será bem vinda.


Por @Gust4v0_H4xx0r

Fev 11

Android ContentProvider

Escrito por Fábio Batista da Silva em 1, abas, Android, app, AR, Arquitetura, arte, auto, Banco de Dados, BI, boolean, case, class, classe, código, comunicação, control, Curso, dados, demo, Dica, Dicas, err, exemplo, Flex, for, ide, IE, if, image, int, interface, Java, lite, map, mg, O, on, override, Partilha, pattern, pt, RIA, Ria’s Geral, runtime, SQLite, string, tag, TAT, Tema, tv, UI, update, utils, XML, XP @ 02 11th, 2011 | via http://www.flexria.com.br/home | Sem comentários
Fábio Batista da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá,

Esse sera o primeiro post que escrevo sobre android, estou começando a “brincar” com ele e resolvi compartilhar um pouco do pouco que descobri. :)
Nesse post vou dar uma ideia de como implementar o seu próprio ContentProvider.


SQLite :

Uma das grandes facilidades do android e o suporte ao SQLite.
As aplicações poderiam acessar diretamente o banco porem é uma boa pratica encapsular isso em um ContentProviders
de forma que isso fique acessível para sua aplicação ou qualquer outra que precise acessar esses dados.

ContentProviders :

O ContentProviders é uma parte muito importante da arquitetura de um sistema android.
São eles quem provem os dados para a aplicação.

Uri :

No Android a comunicação entre aplicações e providers é feita através de Uri.
Cada ContentProviders expõe URIs públicas que identificam o seu conjunto de dados
e controla uma ou mais tabelas e expondo uma URI diferente para cada uma delas.

Uma Uri segue o formato: “content://{authority}/{table}/parametroN”
{authority} é o “nome” do ContentProviders
{table} é a tabela que esta acessando
{parametroN} são os parâmetros esperados pelo provider.

EX :
Todos os registros da tabela (Diretório): content://br.com.flexria.jobsdroid.jobsdroidprovider/jobs
Um único registro com id 1 (Item) : content://br.com.flexria.jobsdroid.jobsdroidprovider/jobs/1

Escrevendo seu ContentProvider :

Bom, vajamos na pratica com isso funciona.
Para escrever seu ContentProviders vc precisa basicamente de quatro coisas.

  • BaseColumns
  • ContentProviders
  • SQLiteOpenHelper
  • Registrar o provider no AndroidManifest.xml :

ContentProvider :

E a classe que provera os dados a nossa aplicação,
A classe abstrata ContentProvider exige a implementação dos métodos :

* query(Uri, String[], String, String[], String)- Recuperar dados.
* insert(Uri, ContentValues) – Insere um novo registro.
* update(Uri, ContentValues, String, String[]) – Atualiza um registro existente.
* delete(Uri, String, String[]) – Deleta um registro.
* getType(Uri) – Obter o MIME type do dado.

Dentro desses métodos iremos implementar a logica que encapsula esses comportamentos.
Isso é valido para cada uma das tabelas que o provider esteja acessando,
Como aqui só tenho uma tabela e esse é apenas um exemplo didático esta tudo na mesma classe,
porem isso pode ficar meio confuso com quando temos varias tabelas e comportamentos diferentes.
Uma solução para isso seria implementar o Pattern Strategy para encapsular cada comportamento.

O exemplo é bem básico porem gostaria de salientar três pontos
* Método getType – Informa que tipo de dado esta sendo requisitado, se é um item ou o diretório.
* Variável mMatcher – Usado para verificar qual Uri esta sendo acessada, se é um item ou o diretório.
* Constante AUTHORITY – Mesma identificação do provider utilizado no AndroidManifest.xml

Bom, como uma Imagem diz mais que mil palavras ai vai o código:

public class JobsDroidProvider extends ContentProvider {
  /**
  * Provider Authority
  */
  public static final String AUTHORITY = "br.com.flexria.jobsdroid.jobsdroidprovider";
  /**
  * DataBase Name
  */
  private static  final String DATABASE_NAME = "jobsdroid.db";
  /**
  * DataBase Version
  */
  private static  final int  DATABASE_VERSION = 1;
  /**
  * match for directory of jobs.
  */
  private  static final int MATCH_JOBS 		= 1;
  /**
  * match for sub-directory of a single jobs.
  */
  private  static final int MATCH_JOBS_ID 	= 2;
  /**
  * Log Tag
  */
  public static final String TAG = "JobsDroidProvider";
  /**
  * DBHelper instance
  */
  private DBHelper mHelper;
  /**
  * UriMatcher instance
  */
   private static final UriMatcher mMatcher;
   /**
   * Projection Map instance
   */
   private static HashMap<String, String> mProjection;
?
   static {
	mProjection = new HashMap<String, String>();
	mProjection.put(Jobs._ID, 	Jobs._ID);
	mProjection.put(Jobs.NAME, 	Jobs.NAME);
    }
?
    static {
    	mMatcher = new UriMatcher(UriMatcher.NO_MATCH);
	mMatcher.addURI(AUTHORITY, Jobs.TABLE, 		MATCH_JOBS);
	mMatcher.addURI(AUTHORITY, Jobs.TABLE+"/#", 	MATCH_JOBS_ID);
    }
?
?
    @Override
    public String getType(Uri uri) {
?
	switch (mMatcher.match(uri)) {
		case MATCH_JOBS:
			return Jobs.CONTENT_TYPE;
		case MATCH_JOBS_ID:
			return Jobs.CONTENT_ITEM;
		default:
			throw new IllegalArgumentException("Unsupported URI: " + uri);
	}
    }
?
?
    @Override
    public boolean onCreate() {
	mHelper = new DBHelper(getContext());
	return (mHelper != null);
    }
?
?
    @Override
    public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {
	String type = this.getType(uri);
	Log.i(TAG, "query " + uri.toString());
?
	Cursor cursor;
	SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
	SQLiteDatabase database = mHelper.getReadableDatabase();
	builder.setTables(Jobs.TABLE);
	builder.setProjectionMap(mProjection);
?
	if (type.equals(Jobs.CONTENT_ITEM)) {
		builder.appendWhere(this.whereItem(uri, selection));
	}
?
	if (sortOrder == null || sortOrder.length() == 0) {
		sortOrder = Jobs.NAME;
	}
?
	cursor = builder.query(database, projection, selection, selectionArgs,null, null, sortOrder);
	cursor.setNotificationUri(getContext().getContentResolver(), uri);
?
	return cursor;
    }
?
?
    @Override
    public Uri insert(Uri uri, ContentValues values) {
	this.getType(uri);
	Log.i(TAG, "insert " + uri.toString());
?
	SQLiteDatabase db = mHelper.getWritableDatabase();
	long rowId = db.insert(Jobs.TABLE, Jobs.NAME, values);
?
	if (rowId > 0) {
	    Uri itemUri = ContentUris.withAppendedId(Jobs.CONTENT_URI, rowId);
	    getContext().getContentResolver().notifyChange(itemUri, null);
	    return itemUri;
	}
?
	throw new RuntimeException("Failed to insert row into : " + uri);
    }
?
?
    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
	String type 		= this.getType(uri);
	SQLiteDatabase db 	= mHelper.getWritableDatabase();
?
	Log.i(TAG, "update " + uri.toString());
?
	if(type.equals(Jobs.CONTENT_ITEM)){
		selection = this.whereItem(uri, selection);
	}
?
      	int count = db.update(Jobs.TABLE, values, selection, selectionArgs);
	getContext().getContentResolver().notifyChange(uri, null);
?
	return count;
    }
?
?
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
	String type 		= this.getType(uri);
	SQLiteDatabase db 	= mHelper.getWritableDatabase();
?
	Log.i(TAG, "delete " + uri.toString());
?
	if(type.equals(Jobs.CONTENT_ITEM)){
		selection = this.whereItem(uri, selection);
	}
?
	int count = db.delete(Jobs.TABLE, selection, selectionArgs);
	getContext().getContentResolver().notifyChange(uri, null);
	return count;
    }
?
    private String whereItem(Uri uri, String selection) {
	if(this.getType(uri).equals(Jobs.CONTENT_ITEM)){
		String where  =  Jobs._ID + " = " + uri.getPathSegments().get(1);
		if(!TextUtils.isEmpty(selection)){
			return where + " AND (" + selection + ")" ;
		}else{
			return where;
		}
	}
	return selection;
    }
?
    /**
    * Inner class Jobs
    */
    public static final class Jobs implements  BaseColumns {
    	    ....
    }
?
    /**
    * Inner class DBHelper
    */
    private static class DBHelper extends SQLiteOpenHelper {
       	....
    }
}

BaseColumns :

Inner class que representa a tabela do banco de dados,
estende a interface BaseColumns que possue as constantes _ID e _COUNT.
A classe Jobs possuí as constantes que representam as colunas da tabela e a Uri que a identifica

/**
* Inner class Jobs
*/
 public static final class Jobs implements  BaseColumns {
    public static final Uri CONTENT_URI = Uri.parse("content://"+ JobsDroidProvider.AUTHORITY + "/" + Jobs.TABLE);
?
    /**
    * The MIME type of a directory.
    */
    private static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.flexria." + Jobs.TABLE;
?
?
    /**
    * The MIME type of a single Jobs.
    */
    private static final String CONTENT_ITEM = "vnd.android.cursor.item/vnd.flexria." + Jobs.TABLE;
?
    /**
     * Table name
     */
    private static final String TABLE 	= "jobs";
?
    /**
     * Column name
     */
    public static final String 	NAME = "name";
}

SQLiteOpenHelper :

Inner class que é responsável pela criação e alteração do banco de dados,
A classe abstrata SQLiteOpenHelper exige a implementação dos métodos :

* onCreate() – Chamado quando o banco de dados for aberto pela primeira vez. Aqui que criaremos o banco de dados.
* onUpdate() – Chamado quando a versão do banco de dados muda. Quando uma nova versão da app for instalada.

Como nesse caso temos a primeira versão não tenho nada no método onUpdate.

/**
* Inner class DBHelper
*/
private static class DBHelper extends SQLiteOpenHelper {
    private static final String SQL_CREATE_TASKS = "CREATE TABLE " + Jobs.TABLE +
                     " (" +
                           Jobs._ID 	+ " INTEGER PRIMARY KEY AUTOINCREMENT," +
                           Jobs.NAME 	+ " TEXT" +
                       " );";
?
    DBHelper(Context context) {
       super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
?
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_TASKS);
    }
?
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
?
    }
}

AndroidManifest :

Depois disso podemos registrar o provider no AndroidManifest.xml


 android:authorities="br.com.flexria.jobsdroid.jobsdroidprovider"
			android:name=".JobsDroidProvider" />

Utilizando o Provider :

Feito isso ja podemos utilizar o provider na Activity,
quando utilizamos o método getContentResolver da Activity e passamos como parâmetro a Uri do conteúdo
o nosso provider é chamado e os métodos que implementamos podem ser utilizados.

EX :
* getContentResolver().query(JobsDroidProvider.Jobs.CONTENT_URI, null, null, null, null);

ContentValues values 	= new ContentValues();
values.put(JobsDroidProvider.Jobs.NAME, "Fabio B. Silva");
?
getContentResolver().query(JobsDroidProvider.Jobs.CONTENT_URI, null, null, null, null);
getContentResolver().insert(JobsDroidProvider.Jobs.CONTENT_URI, values);
?
?
Uri uri = ContentUris.withAppendedId(JobsDroidProvider.Jobs.CONTENT_URI, 1);
// uri = content://br.com.flexria.jobsdroid.jobsdroidprovider/jobs/1
getContentResolver().update(uri, values,null,null);
getContentResolver().delete(uri, null, null);

Em um próximo momento volto a falar sobre isso, mais por hora é só.

Espero que essa dicas possam ajudar aos que como eu estão começando com o android

Abraço e até a próxima….

Fev 5

Qualidade em Processo de Desenvolvimento de Software

Escrito por Edgard Davidson em 1, 2009, 6, Agile, api, AR, arte, AUG, auto, BI, busca, class, cliente, comunicação, conferência, control, cultura, Curso, Cursos, demo, Desenvolvimento, Desenvolvimento de Software, Documentação, empresas, event, Evento, exemplo, falha, for, Google, ide, IE, if, image, int, Liderança, LOB, Mercado, Mestrado, mg, Motivação, mudanças, NaN, O, on, Opinião, processo, produto, Projetos, pt, Qualidade de Software, RIA, Ria’s Geral, Software, Sun, TAT, Tecnologia, Treinamento, UI, yahoo @ 02 5th, 2011 | via http://edgarddavidson.com | Sem comentários
Edgard Davidson
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Chaus Report 2009 – Standish Group

Pesquisas como as realizadas pelo Standish Group apresentadas no Chaus Report 2009 demonstram que grande parte dos projetos de software falham ou são desafiados, seja porque não cumprem o orçamento, ou não cumprem o cronograma, ou as funcionalidades não atendem às necessidades dos usuários ou porque todos estes fatores estão presentes em conjunto. Para o Standish Group um projeto de software é considerado um Sucesso quando todas a funcionalidades do escopo inicial são entregues no orçamento e cronograma planejado. O projeto é Desafiado quando ele sofre com atrasos, não cumpre o orçamento inicial e/ou é entregue com menos recursos e funções do que o definido no escopo inicial. E finalmente, o projeto é considerado Falho quando ele é cancelado antes da conclusão ou o produto da sua entrega nunca é utilizado.

Há algumas décadas a indústria de software vem buscando técnicas de desenvolvimento que possam reduzir os riscos dos projetos de software e tornar essa atividade mais produtiva. A referida constatação não é recente. Já em em 1968 houve um evento denominado conferência de NATO, que, entre outras coisas, tentou entender e discutir o porquê que a maioria dos projetos de software falham ou são desafiados. De lá para cá, a indústria de software vem evoluindo e a partir dos anos 90 surgiram várias propostas como o desenvolvimento de processos formais como RUP, pautados sobre modelos de maturidade como CMMI e a evolução de autores consagrados como Coad & Yourdon, Pressman, Sommerville, Rumbaugh, Booch, Jacobson, etc.

Quando o assunto é desenvolvimento de software, existem basicamente duas grandes “escolas”: a tradicional e a ágil. Cada uma delas enxerga e trata o processo de desenvolvimento de software de maneiras bem peculiares, apesar dos objetivos finais serem os mesmos. Na escola tradicional o conceito de processo de desenvolvimento de software se assemelha ao usado em processos de produção industrial: um conjunto de passos parcialmente ordenados, constituídos por atividades, métodos, práticas e transformações usadas para atingir uma meta, centrado em documentação e controle operacional. Já os adeptos das metodologias ágeis não estão presos a processos rígidos; o que interessa é aquilo que de fato agrega valor ao usuário, não que a escola tradicional não pense assim, como entregas rápidas ou como já diria um dos princípios ágeis: “Nossa maior prioridade é satisfazer o cliente através da entrega rápida e contínua de software de valor.”

Não obstante, a indústria de software é bastante dinâmica, novas idéias, tendências e tecnologias surgem a todo instante e em todas as partes do mundo. Acompanhar essa dinâmica é fator crítico de sucesso para profissionais e empresas que pretendem adquirir um diferencial no mercado. Um ponto fundamental para acompanhar o dinamismo do mercado está na habilidade de lidar de forma mais eficiente com as mudanças de requisitos, aumentar a motivação da equipe e melhorar comunicação com o cliente do projeto, e, para isso, será necessário estar pronto para introduzir uma nova cultura de liderança que irá alterar os papeis e trará uma nova forma de trabalhar transferindo parte da responsabilidade do gerente do projeto para a equipe.

A adaptação às mudanças decorrentes de fatores externos são uns dos conceitos centrais dos métodos ágeis. Onde os métodos mais formalizados e centrados em planejamento e documentação são preditivos na tentativa de prever as necessidades futuras, em contrapartida, os métodos ágeis são adaptativos e rapidamente se adaptam às novas exigências, aderindo ao lema “abrace as mudanças!”. A única medida de sucesso é a de produto funcionando.

Outro princípio importante é a simplicidade e pensamento enxuto. De acordo com o conceito de pensamento ágil, projetos de grande escala, por exemplo, não são desejáveis. Pelo contrário, é preferível minimizar a quantidade de trabalho daquilo que não precisa ser feito. Isto inclui, por exemplo, não gastar tempo escrevendo documentação desnecessária.

Cada vez mais a abordagem ágil de desenvolvimento de software vem se popularizando entre grandes empresas de sucesso como: google, yahoo, amazom.com, globo.com entre outras. No entanto, nem sempre as empresas que tentam adotar a filosofia ágil têm obtido o mesmo sucesso. Várias discussões tem se formado para entender o motivo do referido insucesso, e as conclusões estão convergindo para fatores como: falta de treinamento dos colaboradores; equipes hierarquizadas, e, sobretudo, resistência de mudança cultural.

Desenvolver software é uma tarefa que exige técnicas de engenharia e arte. Se uma empresa ou profissional não absorver a filosofia ágil dificilmente se manterá competitiva no cenário atual do mercado de software por mais que se implemente uma metodologia.

Nesse sentido, cabe a nós profissionais críticos, formadores de opinião, termos a a clara consciência de adotar processos tradicionais ou processo ágeis, ou no melhor dos casos, como integrar os dois para tirar o maior proveito.

Jan 19

O Adobe Flex

Escrito por SamuelFacchinello em .NET, 1, 4, 6, Adobe, Adobe Flex, Air, Animações, app, AR, BI, blog, Blogs, C#, chrome, comunicação, Dica, Dicas, Download, efeito, efeitos, empresas, err, exemplo, Exemplos, explorer, Ferramenta, firefox, flash, flash builder, Flex, for, free, gc, Google, grátis, html, ide, IE, int, interface, internet, Java, labs, mg, Microsoft, O, on, online, Pessoal, PHP, player, Plugin, produto, programação, RIA, Ria’s Geral, S+S, serviço, Serviços, TAT, Tech, Tema, Teste, Treinamento, Tutoriais, UI, Vídeo, Vídeos, web, Webservice, window, windows, XML, XP @ 01 19th, 2011 | via http://desenvolvendoemflex.blogspot.com/ | Sem comentários
SamuelFacchinello
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá!!

Bom, vamos começar do começo!!! Aqui vou explicar um pouco sobre o Adobe Flex e suas maravilhas.
Començando…

  • O que é o Adobe FLEX??
É uma linguagem de programação baseada na plataforma Flash da Adobe (mas não se engane, o Flex não é para fazer animações com “linha de tempo”, Adobe Flex é para fazer Sistemas Web).
Hoje, o flex não é uma ferramenta muito conhecida entre as empresas que utilizam sistemas na web, mas isso já está mudando, graças a empresas e/ou pessoas que estudam mais e mais para sempre inovar com seus produtos e serviços.

  • O que o Flex tem de bom?

O Flex é famoso pela sua rica interface gráfica, pela sua facilidade de aprendizado, também pela facilidade de comunicação com outras linguagens (JAVA, PHP, etc) seja por Xml, WebService, RemoteObject, etc. Ele tem efeitos e transições que deixam o usuário final maravilhado com a interface das aplicações desenvolvidas com essa ferramenta.

  • Como começo??

É muito fácil de aprender a desenvolver em Flex, para começar você deve fazer o download do Flash Builder (versão teste por 60 dias) aqui (você também pode solicitar uma licença estudante para não comerciais aqui).
É só instalar e começar a se divertir. :D
*Para rodar as aplicações desenvolvidas em Flex, precisa de um navegador (firefox, chrome, ie, opera, etc) e o plugin do FlashPlayer instalado.
A própria Adobe disponibiliza um treinamento grátis (em inglês) das funções básicas do Flex, esses vídeos podem ser visto aqui.

  • Exemplos de aplicações

A muitos exemplos espalhados pela internet, mas existe o Tour de Flex que pode ser instalado logo abaixo (versão em AIR) ou então clicar aqui e ver a versão online.

<p>&amp;amp;amp;lt;p&amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Con&amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;lt;/p&amp;amp;amp;gt;</p>

  • Conclusão

A principio é isso pessoal, em breve novos posts com dicas e tutoriais.
Qualquer dúvida é só entrar em contato.

Abraço, Obrigado.

Jan 12

Criando uma aplicação com Flex 4, Java e Blazeds

Escrito por Pablo Souza em 1, 2009, 3d, 4, 6, Access, Adobe, Adobe Flex, app, AR, auto, back, bar, BI, Blazeds, blog, botão, browser, builder 4, class, código, Componente, Componentes, comunicação, configuração, control, Curso, Cursos, dados, Data Service, Data Services, DataGrid, Desenvolvimento, Design, developer, development, dispatch, Diversos, Download, DRE, dynamic, Eclipse, email, err, event, Evento, exemplo, Exemplos, Ferramenta, flash, flash builder, Flash Builder 4, Flex, Flex 4, fonte, fonts, for, Formação, Formulário, frontend, function, git, handle, html, ide, IE, if, image, instalação, int, interface, Java, kit, label, layout, library, lista, map, menu, Messaging, mg, MXML, NaN, novidade, Novidades, O, on, Oracle, pattern, pt, Remoting, RIA, Ria’s Geral, server, serviço, Serviços, servidor, site, spark, string, Sun, tag, TAT, Tech, Tema, TextInput, UI, web, window, windows, XML @ 01 12th, 2011 | via http://rectius.com.br/blog | 2 comentários
Pablo Souza
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Hoje vou mostrar a integração de aplicações Flex 4 com back-end Java, utilizando o Blazeds para comunicação entre eles. Durante a instalação e configuração do ambiente de desenvolvimento, estamos considerando que você está trabalhando numa máquina com Windows. Caso não seja este o caso não fique preocupado, basta repetir os mesmos passos descritos para o Windows adaptando para o sistema operacional que você estiver utilizando.

1. Instalações

- Download Java Development Kit (JDK6), e após configurar a váriavel de sistema JAVA_HOME.
- Download Eclipse IDE for Java Developers.
- Download BlazeDS Turnkey, contêm uma versão configurada do servidor Tomcat e diversos exemplos.
- Download Adobe Flash Builder 4, versão Standalone.

2. Instalando o BlazeDS

Após o download do BlazeDS descompacte-o num diretório de sua preferência:
C:blazeds

* Nesse momento você já deve ter instalado o JDK e confgurado a variável JAVA_HOME.

Para verificar se tudo está funcionando vamos iniciar o servidor Tomcat.

Abra um prompt do Windows e digite:
cd C:blazedstomcatbin

Em seguida inicie o servidor Tomcat:
catalina start

Após a inicialização do servidor, você verá a janela abaixo:

O servidor de aplicação foi inicializado na porta 8400. Como eu disse anteriormente, o BlazeDS Turnkey vem com uma série de aplicações de exemplo mostrando a integração entre o Adobe Flex e o Java.

Para verificar se o servidor está rodando corretamente e ver as aplicações que citei, digite num browser de sua preferência:
http://localhost:8400/

3. Instalando o Eclipse

Após o download do Eclipse, descompacte o conteúdo do arquivo compactado para uma pasta um diretório de sua preferência:
C:eclipse

* Assim como o BlazeDS, o Eclipse também não necessita de instalação. Basta descompactá-lo para utilizar.

4. Instalando o Flash Builder 4

Para a instalação do Adobe Flash Builder 4 basta você ir avançando as opções, sempre mantendo os valores padrões. A versão Standalone é uma versão Trial que dura 60 dias. No site da Adobe você pode obter gratuitamente uma licensa de utilização caso você se enquadre nas exigências legais (estudantes, profissionais autônomos, etc).

5. Criando o projeto Java

Abra a pasta onde você descompactou o Ecplise e execute-o:
C:eclipseeclipse.exe

Em seguida vamos criar nosso projeto Java. Clique em:
File > New > Dynamic Web Project

Agora vamos criar um bean que será usado na serialização das informações que serão trocadas entre o Adobe Flex e o Java.

Clique com o botão direito do mouse no projeto e então:
New > Class

A seguir a implementa da nossa classa Java bean Usuario.java:

package br.com.rectius.model;
?
import java.io.Serializable;
?
public class Usuario implements Serializable {
?
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;
?
	private String nome;
	private String email;
	private String cargo;
?
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getNome() {
		return nome;
	}
?
	public void setEmail(String email) {
		this.email = email;
	}
	public String getEmail() {
		return email;
	}
?
	public void setCargo(String cargo) {
		this.cargo = cargo;
	}
	public String getCargo() {
		return cargo;
	}
?
}

Agora vamos criar nossa camada de serviço, que será o ponto de entrada das requisições do nosso front-end Flex.

Clique novamente com o botão direito do mouse sobre o projeto e então:
New > Class

A seguir a implementação da nossa camada de serviço UsuarioService.java:

package br.com.rectius.service;
?
import java.util.ArrayList;
?
import br.com.rectius.model.Usuario;
?
public class UsuarioService {
?
	/*
	 * Como não estamos utilizando nenhuma ferramenta
	 * para persistência dos dados, vamos armazenar
	 * a informações nessa lista estática
	 */
	private static ArrayList<Usuario> listaUsuarios =
		new ArrayList<Usuario>();
?
	/*
	 * Insere um novo usuário
	 * @param usuario
	 */
	public void insereUsuario(Usuario usuario)
	{
		listaUsuarios.add(usuario);
	}
?
	/*
	 * Retorna todos os usuários
	 * @return
	 */
	public ArrayList<Usuario> listaUsuarios()
	{
		return listaUsuarios;
	}
?
}

Pronto! Nossa aplicação Java já está finalizada.

6. Configurando o BlazeDS

Para que o Adobe Flex possa se comunicar com nossa camada de serviço no Java, teremos que modificar alguns arquivos de configuração do BlazeDS.

Abra a pasta onde você descompactou o BlazeDS:
C:blazeds

Crie um nova pasta chamada:
C:blazedsBlazedsConfigBase

Localize agora o arquivo blazeds.war e descompacte-o na pasta que acabamos de criar:
Arquivo: C:blazedsblazeds.war
Pasta: C:blazedsBlazedsConfigBase

Veja o contéudo da pasta C:blazedsBlazedsConfigBase>:
C:blazedsBlazedsConfigBaseMETA-INF
C:blazedsBlazedsConfigBaseWEB-INF

* A pasta WEB-INF contém toda a informação necessária para a integração de um projeto Adobe Flex + Java + Blazeds.

Agora vamos copiar algumas pastas do BlazeDS para dentro nosso projeto Java. Localize a pasta:
C:blazedsBlazedsConfigBaseWEB-INF

Copie o arquivo e os diretórios abaixo para WebContentWEB-INF, dentro do Eclipse:
C:blazedsBlazedsConfigBaseWEB-INFweb.xml
C:blazedsBlazedsConfigBaseWEB-INFflex
C:blazedsBlazedsConfigBaseWEB-INFlib

A pasta lib contém todas as biliotecas necessárias para realizar a comunicação do Adobe Flex com o Java.
A pasta flex contém os arquivos de configuração necessários para estabelecer essa comunicação.

Nesse momento a estrutura do seu projeto deve estar como na imagem abaixo:

Agora vamos configurar nossa aplicação para que o Flex consiga se comunicar com o nosso projeto Java.

Dentro do Eclipse localize e abre o arquivo:
WebContentWEB-INFweb.xml

Configure-o conforme a seguir:

<?xml version="1.0" encoding="UTF-8"?>
DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
?
    <display-name>BlazeDSdisplay-name>
    <description>BlazeDS Applicationdescription>
?
    -- Http Flex Session attribute and binding listener support -->
    <listener>
        <listener-class>flex.messaging.HttpFlexSessionlistener-class>
    listener>
?
    -- MessageBroker Servlet -->
    <servlet>
        <servlet-name>MessageBrokerServletservlet-name>
        <display-name>MessageBrokerServletdisplay-name>
        <servlet-class>flex.messaging.MessageBrokerServletservlet-class>
        <init-param>
            <param-name>services.configuration.fileparam-name>
            <param-value>/WEB-INF/flex/services-config.xmlparam-value>
       init-param>
        <load-on-startup>1load-on-startup>
    servlet>
?
-- begin rds
end rds -->
    <servlet>
        <servlet-name>RDSDispatchServletservlet-name>
		<display-name>RDSDispatchServletdisplay-name>
        <servlet-class>flex.rds.server.servlet.FrontEndServletservlet-class>
		<init-param>
			<param-name>useAppserverSecurityparam-name>
			<param-value>falseparam-value>
		init-param>
        <load-on-startup>10load-on-startup>
    servlet>
?
    <servlet-mapping id="RDS_DISPATCH_MAPPING">
        <servlet-name>RDSDispatchServletservlet-name>
        <url-pattern>/CFIDE/main/ide.cfmurl-pattern>
    servlet-mapping>
?
    <servlet-mapping>
        <servlet-name>MessageBrokerServletservlet-name>
        <url-pattern>/messagebroker/*
    
?
    
        index.html
        index.htm
    
?
    
    
?

Ainda dentro do Eclipse localize e abra o arquivo:
WebContentWEB-INFflexremoting-config.xml

Dentro desse arquivo é que informamos quais os serviços que nosso front-end Flex poderá ter acesso. Para tal basta criar um novo destino para cada serviço.

Crie um destino para o serviço UsuarioService adicionando no arquivo remoting-config.xml o código abaixo:

    <destination id="UsuarioService">
    	<properties>
    		<source>br.com.rectius.service.UsuarioServicesource>
    	properties>
    destination>

Pronto! O projeto Java já está configurado para trabalhar com o BlazeDS.

7. Publicando nossa aplicação no Tomcat

Já terminamos o projeto Java e a configuração do BlazeDS. Agora o próximo passo é publicar o projeto no servidor de aplicações Tomcat.

Navegue até a pasta:
C:blazedstomcatwebapps

Crie uma pasta para o projeto Java:
C:blazedstomcatwebappsGerenciaUsuario

Agora dentro do Eclipse, clique sobre a pasta WEB-INF e a copie Edit > Copy.

Cole então seu conteúdo na pasta que criada no passo acima:
C:blazedstomcatwebappsGerenciaUsuario

Agora reinicie o servidor de aplicação Tomcat para subir o projeto que acabamos de fazer deploy:
catalina stop
catalina start

08. Criando o projeto Flex

Uma das novidades do novo ambiente de desenvolvimento Adobe Flex, o Flash Builder 4, é sem dúvidas os recursos de conexão a dados e serviços.
No passo 4 nós fizemos a instalação do Flash Builder 4. Agora localize seu ícone na área de trabalho ou no menu iniciar e abra o aplicativo.

Em seguida crie um novo projeto Flex. Clique em File > New > Flex Project

Agora faça suas configurações conforme a imagem abaixo:

Root folder: Representa o diretório onde fizemos o deploy do nosso projeto Java, dentro do servidor de aplicação.
Root URL: Representa a URL de acesso ao projeto no servidor de aplicação.
Context root: Representa o nome da nossa aplicação.
Output folder: Representa o local onde serão compilados os arquivos do Flex.

Clique em Validate Configuration para se certificar de que você configurou tudo corretamente e em seguida clique em Finish.

Antes de qualquer coisa vamos conferir se o Flash Builder inseriu corretamente um parâmetro de compilação no projeto Flex.

Clique com o botão direito do mouse no projeto Flex, clique em Properties e certifique-se de que o argumento de compilação -services foi inserido:

Agora vamos criar a interface. Digite o código abaixo:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx">
?
	<s:controlBarContent>
		<s:Label text="Gerenciamento de Usuários"
				 fontWeight="bold" fontSize="18"/>
	s:controlBarContent>
?
	<s:layout>
		<s:VerticalLayout
			horizontalAlign="center" verticalAlign="middle"
			paddingLeft="10" paddingRight="10" paddingBottom="20" paddingTop="20"/>
	s:layout>
?
	<s:Panel title="Cadastro de Usuários" width="500">
?
	s:Panel>
?
	<s:Panel width="500" height="100%" title="Listagem de Usuários">
		<mx:DataGrid id="dgUsuarios" left="20" right="20" bottom="20" top="20">
		mx:DataGrid>
	s:Panel>
?
s:Application>

09. Conectando a aplicação Adobe Flex ao Java

Em seguida vamos utilizar os novos recursos inseridos no Flash Builder 4 para se comunicar com o Java.

Clique em Windows > Data/Services. Após a aba correspondente se abrir clique em Connect to Data/Service….

Veja que alguns arquivos foram criados automaticamente:

Clique com o botão direito em qualquer ponto da sua Application (não clique nos componentes Panel ou qualquer outro que não seja a Application) e clique em Generate Service Call:

Em seguida selecione o método listaUsuarios():

Vá para o modo de visualização “Source” e veja que um método handler foi criado para manipular o evento CreationComplete da Application.

Agora volte para o modo “Design”, clique com o botão direito no componente DataGrid e em seguida clique em Bind to Data…

Clique no botão OK e veja o resultado:

Finalizamos o código para a listagem dos usuários. Agora precisamos fazer o código que vai inserir os usuários.

Novamente clique com o botão direito do mouse no componente DataGrid e então clique na opção Generate Details Form…

Arrume o posicionamento do formulário de cadastro, altere o label do botão. Em seguida clique com botão direito do mouse sobre o botão e Generate Service Call…

Agora altere o método button_clickHandler que foi gerado automaticamente:

protected function button_clickHandler(event:MouseEvent):void
{
	var usuario:Usuario = new Usuario();
	usuario.email = emailTextInput.text;
	usuario.nome = nomeTextInput.text;
	usuario.cargo = cargoTextInput.text;
	insereUsuarioResult.token = usuarioService.insereUsuario(usuario);
}

Com isso já conseguimos inserir usuários na coleção do back-end Java. Agora vamos modificar nosso código para que toda vez que um usuário for inserido os usuários sejam listados novamente no componente DataGrid.

Agora altere o método insereUsuarioResult_resultHandler:

protected function insereUsuarioResult_resultHandler(event:ResultEvent):void
{
	listaUsuariosResult.token = usuarioService.listaUsuarios();
}

Agora rode sua aplicação e veja o resultado final.

Pronto! A aplicação está rodando perfeitamente.
Como lição de casa, faça com que seja possível remover e alterar um usuário.

Fontes do projeto:

Download do projeto Flex (28 KB)
Download do projeto Java (3.67 MB)

Referências:
- Accessing data services overview

Espero que tenham gostado e até a próxima!

Jan 7

Software para gerenciar publicidade online – OpenX

Escrito por Leonardo França em 1, 4, 6, api, AR, Banco de Dados, BI, blog, Blogs, busca, buscas, camp, campanha, class, comunicação, comunidade, dados, err, Ferramenta, for, Google, ide, IE, if, image, kit, mg, mysql, O, on, online, Partilha, PHP, publicidade, RIA, Ria’s Geral, Serviços, site, Software, TAT, UI, Vídeo, web, Widget @ 01 7th, 2011 | via http://www.leonardofranca.com.br | Sem comentários
Leonardo França
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »



Publicidade sempre foi um nos meios de se monetizar um site ou blog, os banners são considerados outdoors da web e por isso temos que ter uma atenção especial. Com o tempo, seu blog começa a crescer e a criar um publico segmentado e publico vindo de sites de buscas(ok ok, quase que exclusivamente Google). Quando comecei o blog, o objetivo era compartilhar conhecimento, nada mais que um hobby, com o tempo percebi que ele pode ser rentavel se tiver o devido cuidado e atenção(e constantes atualizações).

Temos na web várias ferramentas para gerenciar publicidade online, cheguei a criar uma bem simples para colocar no blog, mas precisava de algo mais completo e robusto.
Conheci o PHPAds quando trabalhava no Grupo Comunidade de Comunicação, é um software feito em PHP e banco de dados MySQL. Depois de um tempo passou a ser chamado de OpenX, sendo um dos melhores softwares que temos hoje para gerenciar publicidade online.

Dentre as principais funções, destaco:

  • Criação de campanhas.
  • Configurar tempo que a campanha fica online.
  • Suporte a varios formatos de banners, inclusive vídeo e VAST.
  • Criação de zonas especificas(você cria um banner para aparecer em determinada area de um site).
  • Estatisticas completas de visualizações, cliques etc.
  • Suporte a varios sites.
  • e muito mais.

mais detalhes:
http://www.openx.org

Caso queria anunciar no meu blog, segue o link do midia kit :D
http://www.leonardofranca.com.br/index.php/anuncie/

« Entradas anteriores |

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2795 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com