Mostrando postagens com marcador Dicas. Mostrar todas as postagens
Mostrando postagens com marcador Dicas. Mostrar todas as postagens

segunda-feira, 12 de novembro de 2007

Granite DS + Adobe Flex Builder

eis a grande questão... comecei semana passada a estudar o uso do Granite DS que me possibilita o uso do protocolo AMF3 para comunicação entre Client & Server...

* a problemática: legal, peguei os exemplos do Granite DS, os .war neles contidos, coloquei no Tomcat e funcionou... dai me veio a questão... como faço para usar isso em um projeto usando o Flex Builder?

* o que usei? segue o que usei nesse meu teste:
- Java 1.5
- Eclipse 3.2 + WTP 2.0 + Adobe Flex Builder Plugin
- Tomcat 5.5.20
- OC4J 10.1.3.20 (servidor de app da Oracle usado como servidor de teste de deploy do projeto)
- graniteds-pojo-0.4.0 (como base para o projeto server side)

* criando projeto para o server side da aplicação
- criar um projeto no Eclipse Dynamic Web Project
- criei um diretório para o projeto com o nome GranitePojoFlex
- após criado o projeto no diretório de nome definido
- copiar os arquivos do graniteds-pojo-0.4.0 para o projeto
> web.xml, códigos, diretórios do WEB-INF
- criei um diretório no /WebContent para o projeto Client Side - Adobe Flex, com nome de flex
- defini nas propriedades do projeto, no item: Web Project Settings, o Context Root para: granitepojoflex

* criando o projeto client side
- criei o projeto no diretório flex citado anteriormente
- o mxml do graniteds-pojo-0.4.0, copiei o conteúdo desse para o arquivo main.xml
- copiei o arquivo /WEB-INF/flex/services-config.xml, para o raíz do projeto
- editei esse arquivo services-config.xml

de:

    <channels>
        <channel-definition id="my-graniteamf" class="mx.messaging.channels.AMFChannel">
            <endpoint
                uri="http://{server.name}:{server.port}/{context.root}/graniteamf/amf"
                class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>
    </channels>


para:

    <channels>
        <channel-definition id="my-graniteamf" class="mx.messaging.channels.AMFChannel">
            <endpoint
                uri="http://{server.name}:{server.port}/granitepojoflex/graniteamf/amf"
                class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>
    </channels>


- feito isso é hora de adicionar esse arquivo nos parametros de compilação do projeto, indo nas propriedades, em Flex Compiler, onde adicionei o seguinte: -services "services-config.xml", com isto ira dizer onde está nossos dados...
- ainda é necessário configurar um outro detalhe nas propriedades do projeto, no item Flex Build Path, o item: Output folder URL, para dizer onde executar a aplicação em Flex... e como nesse caso estamos utilizando o tomcat o valor para esse item será: http://localhost:8080/granitepojoflex/flex/bin, o como esse projeto do Flex está dentro do /WebConten/Flex do projeto Server Side, justifica o porque dessa URL

* hora de executar
- primeiro colocar o projeto server side para executar, como não tem nenhum JSP, não irá aparecer nada quando o servidor e a aplicação estiver rodando
- agora hora de executar o projeto Flex, só mandar executar nosso main.mxml...
- lembrando que foi configurado a URL, você irá observar que estará executando em um endereço URL no seu browser

e eis um projeto em Flex Builder + Granite

* fazendo um deploy em um servidor para testar
no caso usei o OC4J, mas antes...
- no projeto Server Side, clique com o botão direito e vá em exportar WAR...
- para facilitar exporte para o Desktop por exemplo
- no OC4J, na parte de administração eu selecionei esse .war gerado e realizei o deploy...
- após iniciado a aplicação eu usei a seguinte URL para acessar e testar: http://localhost:8888/granitepojoflex/flex/bin/main.html, a porta é 8888, pois essa é a padrão do OC4J

segue o projeto Zipado: [link]

Obs.: esse projeto usa a versão modificada do Granite DS, falado nesse [post]

Granite DS, mapeamento flexível

hoje estudando o Granite Data Services, que é uma alternativa OpenSource e gratuita ao LiveCycles da Adobe, acabei encontrando uma informação que julgo eu ser muito útil...

estava vendo o funcionamento do AMFPHP, onde verifiquei que o mapeamento das classes são flexíveis, onde posso ter múltiplas classes mapeadas, enquanto no granite, eu tinha que mapear apenas uma única classe de cada vez... mas segundo a sugestão repassada, tem como deixar o Granite funcionando de forma similar ao AMFPHP, que em tese é mais fácil de reutilizar o mapeamento...

a dica está nesse [link flex-brasil]

onde é sugerido a alteração da classe: org.granite.messaging.service.SimpleServiceFactory.java

para que o Granite possa ser utilizado de forma flexível:

classe original:
package org.granite.messaging.service;

import flex.messaging.messages.RemotingMessage;

import org.granite.config.flex.Destination;
import org.granite.context.GraniteContext;

import java.util.Collections;
import java.util.Map;

/**
 @author Franck WOLFF
 */
public class SimpleServiceFactory extends ServiceFactory {

    @Override
    public ServiceInvoker<?> getServiceInstance(RemotingMessage requestthrows ServiceException {
        String messageType = request.getClass().getName();
        String destinationId = request.getDestination();
        
        GraniteContext context = GraniteContext.getCurrentInstance();
        Destination destination = context.getServicesConfig().findDestinationById(messageType, destinationId);
        if (destination == null)
            throw new ServiceException("No matching destination: " + destinationId);
        String scope = (String)destination.getProperties().get("scope");
        
        Map<String, Object> cache = null;
        if (scope == null || "request".equals(scope))
            cache = context.getRequestMap();
        else if ("session".equals(scope))
            cache = context.getSessionMap();
        else if ("application".equals(scope))
            cache = Collections.synchronizedMap(context.getApplicationMap());
        else
            throw new ServiceException("Illegal scope in destination: " + destination);
        
        String key = SimpleServiceInvoker.class.getName() '.' + destination.getId();
        SimpleServiceInvoker service = (SimpleServiceInvoker)cache.get(key);
        if (service == null) {
            service = new SimpleServiceInvoker(destination, this);
            cache.put(key, service);
        }
        return service;
    }
}

classe alterada:
package org.granite.messaging.service;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import org.granite.config.flex.Destination;
import org.granite.context.GraniteContext;

import flex.messaging.messages.RemotingMessage;

/**
 @author Franck WOLFF
 @author Erko Bridee de Almeida Cabrera
 
 * Alterações da classe para possibilitar um mapeamento
 * flexivel para qualquer classe do projeto
 
 * * dica do link:
 * http://br.groups.yahoo.com/group/flex-brasil/message/7933
 * - Graniteds com unico mapeamento de Classe
 
 */
public class SimpleServiceFactory extends ServiceFactory {

    @Override
    public ServiceInvoker<?> getServiceInstance(RemotingMessage requestthrows ServiceException {
        String messageType = request.getClass().getName();
        String destinationId = request.getDestination();
        
        GraniteContext context = GraniteContext.getCurrentInstance();
        Destination destination = context.getServicesConfig().findDestinationById(messageType, destinationId);
        if (destination == null)
            throw new ServiceException("No matching destination: " + destinationId);
        String scope = (String)destination.getProperties().get("scope");
        
        Map<String, Object> cache = null;
        if (scope == null || "request".equals(scope))
            cache = context.getRequestMap();
        else if ("session".equals(scope))
            cache = context.getSessionMap();
        else if ("application".equals(scope))
            cache = Collections.synchronizedMap(context.getApplicationMap());
        else
            throw new ServiceException("Illegal scope in destination: " + destination);
        
        /*************/
        Destination d = destination;
        ifdestination.getProperties().get("source").equals("*") ){
          Map<String, Object> propertiesMap = new HashMap<String, Object>();
          propertiesMap.put("source", request.getSource());
          d = new Destination(destination.getId(),
          destination.getChannelRefs
          (), propertiesMap, destination.getRoles());
        }
        /**************/
        
        /* String key = SimpleServiceInvoker.class.getName() + '.' + destination.getId();
        SimpleServiceInvoker service = (SimpleServiceInvoker)cache.get(key);
        if (service == null) {
            service = new SimpleServiceInvoker(destination, this);
            cache.put(key, service);
        } ALTERADO */
        
        String key = SimpleServiceInvoker.class.getName() '.' +
        d.getProperties().get("source")//<--Muda Aqui
        SimpleServiceInvoker service = (SimpleServiceInvoker)cache.get(key);
        ifservice == null ) {
          service = new SimpleServiceInvokerd, this )//<--Muda Aqui
          cache.put(key, service);
        }
        
        return service;
    }
}

com isto no projeto do código fonte do GraniteDS, basta usar o build.xml para regerar o .jar do Granite e utilizar este novo jar gerado...

com isto no exemplo do Granite-Pojo, o services-config.xml fica de outra forma:

    <services>
        <service
            id="granite-service"
            class="flex.messaging.services.RemotingService"
            messageTypes="flex.messaging.messages.RemotingMessage">
            <destination id="pojo">
                <channels>
                    <channel ref="my-graniteamf"/>
                </channels>
                <properties>
                    <scope>session</scope>
                    <source>*</source>
                </properties>
            </destination>
        </service>
    </services>



e no código mxml, no mx:RemoteObject, você deverá indicar o atributo source, como mostrado abaixo:

    <mx:RemoteObject
        id="srv"
        showBusyCursor="true"
        destination="pojo"
        source="test.pojo.PojoService"/>



feito isto, com um único mapeamento, você poderá acessar n-classes do seu projeto...
melhor, o que achou?

quarta-feira, 7 de novembro de 2007

Flex2/ActionScript 3 - Transformando objetos em XML

agora pouco, um amigo me notificou sobre um post muito interessante e útil no blog do Urubatan, onde ele publicou um código muito útil, que transforma um objeto do AS3, para um XML, de forma muito simples

Urubatan - Flex2/ActionScript 3 - Transformando objetos em XML

terça-feira, 6 de novembro de 2007

Java : ordenando uma coleção|lista de objetos, costumizado

algo bem útil, que as vezes quebra um galho quando estamos trabalhando com coleções e listas... as vezes precisamos ordenar, mas como fazer para ordenar uma coleção de objetos complexos?

para isso segue o seguinte:

considerando que temos uma classe específica em nosso projeto, para o exemplo, vou me basear nessa abaixo:

public class MyObj {
  
  private int myValue;
  priate String desc;
  
  public MyObj() {}
  
  public void setMyValueint value ) { this.myValue = value; }
  public int getMyValue() { return this.myValue; }

  public void setDescString newDesc ) { this.desc = newDesc; }
  public String getDesc() { return this.desc; }
    
}


para esta classe, defini uma classe de comparação, especifica para esta classe:

import java.util.Comparator;

public class MyObjComparator implements Comparator {
    
    public int compare(Object o1, Object o2) {
        MyObj ob1 = (MyObj)o1;
        MyObj ob2 = (MyObj)o2;
        ifob1.getMyValue() == ob2.getMyValue() ) {
            return 0;    
        else ifob1.getMyValue() < ob2.getMyValue() ) {
            return -1;
        else ifob1.getMyValue() > ob2.getMyValue() ) {
            return 1;
        }
        return 0;
    }    
}


considerando que tenho uma coleção|lista de objetos da minha classe definida, anteriormente:

List myObjList...

para ordenar, utilize um código como esse, que irá utilizar a classe de comparação:

Collections.sortmyObjList, new MyObjComparator() );

com isso resolve o problema, relacionado a ordenar uma coleção|lista de objetos complexos (definidos no teu projeto)

segunda-feira, 22 de outubro de 2007

MeioBit : Apple : por que os usuários Windows não migram para Mac

um artigo muito bom publicado hoje no Meio Bit:

Por que diabos Windows-users não migram pro Mac?

bom na minha opinião e no meu caso, só não migro para o Mac por 1 único e ainda persistente motivo : $$$, infelizmente a diferença de preço ainda pesa, mas ainda pretendo ter um brinquedinho da Apple =]

outra fato citado no artigo que eu realmente desconhecia, embora ter nascido e morado em Foz do Iguaçu - PR, grudado em Cidad del Este - PY, não sabia/conhecia a loja (Big Manzana) citada no Meio Bit, a qual pelo que foi comentado no artigo, possibilita comprar lá e realizar a importação com todos os processos legais para trazer o brinquedo para o Brasil =D

sábado, 20 de outubro de 2007

Dica : Som Catado

essa madrugada vi no programa do Jô Soares uma entrevista com esse pessoal, achei bem interessante o som que esse pessoal faz...


Site

terça-feira, 16 de outubro de 2007

O Velho : Atairu - o MMOG Brasileiro Educacional

algo muito legal e que realmente me deixa muito feliz em saber, aqui no Brasil, muito embora as adversidades temos algumas frentes de desenvolvimento de games, como o desse caso, de um jogo nos moldes MMOG focado a área educacional, ao meu ver uma proposta muito interessante =]


Site projeto

Fonte : O Velho

Tutorial : Simplifique suas configurações no Java

Existem muitas maneiras de configurar as aplicações Java, podemos utilizar aquivos properties, xml, base de dados, ou mesmo linhas de comando. Cada um desses oferecem suas próprias vantagens... mas normalmente temos para cada tipo de configuração um suporte totalmente distinto para acessar os dados, não seria legal uma API unificada para simplificar o uso desses? bom se você gostou da idéia, tem como fazer isso =]

conhece o : org.apache.commons.configuration? não? bom, essa API te possibilita isso ;)

no Java Boutique, disponibilizaram um tutorial (em inglês) de como utilizar essa API, recomendo a leitura : [link]

Fonte : DZone

segunda-feira, 15 de outubro de 2007

Dica : O Velho : Ganhando mais com o AdSense


Fonte : O Velho

IDG Now : dicas de como tirar fotos melhores com uma câmera digital

no IDG Now tem uma série de materias interessantes, sobre como tirar fotos melhores com uma câmera digital e hoje eu olhando o site lá vi que eles centralizaram os links em um único local, com uma descrição prévia...

IDG Now : Saiba como tirar melhores fotos com sua câmera digital compacta

fica a dica ;)

sábado, 13 de outubro de 2007

Caixa de Ferramentas : 21 sites para Base de dados


Nunca é tarde para começar a aprender sobre base de dados, porque são um tanto usuais, basicamente todas as aplicações hoje utilizam base ded ados. Então segue uma lista com 21 sites que podem lhe ajudar inicialmente para trabalhar com essas bases de dados.


Cacti.net - trabalha com RRDTool para proporcionar opções gráficas, templates avançados e mais utilidades.


Database Administration and SQL Scripts - uma grande coleção de scripts de base de dados e artigos.


dbForums.com - um forum muito ativo de desenvolvedores de banco de dados, de todos os tipos


Dev Shed - uma grande coleção de tutoriais para trabalhar com MySQL


FirebirdSQL.org - é um banco de dados relacional com características padrão de SQL e compatibilidade entre plataformas


FlameRobin.org - um gerenciador de banco de dados para usar com o FlamebirdSQL


Ganglia - um sistema de monitoramento escalável e distribuido para trabalhar com RRDTools


How To Forge - uma coleção de artigos de como fazer alguma coisa "fora do corriqueiro", tarefas com o MySQL


ibWebAdmin.net - um administrador para o Firebird e InterBase


MySQLQuickAdmin.com - uma interface gráfica gratuita para MySQL


Oracle FAQs - uma coleção de perguntas frequentes sobre administração de base de dados Oracle


pgAdmin.org - um projeto OpenSource para administração e desenvolvimento de projetos/base de dados em PostgreSQL


phpMyAdmin.net - provavelmente o melhor gerenciador de base de dados conhecidos hoje para SQL, relacionado ao MySQL


phpPgAdmin - uma ferramenta web para administração do PostgreSQL, para quem conhece o phpMyAdmin, segue a mesma linha


PostgreSQL.org - OpenSource, um sistema de base de dados SQL com suporte a Orientação a Objetos


RRDTool - um sistema OpenSOurce que gera log dos dados e gráficos, normalmente utilizado para monitorar os dados da base de dados


SQLite Aministrator - uma ferramenta para ajudar a criar, projetar e administrar base de dados


SS64.com - uma coleção de comandos para Oracle e SQL


ToadSoft.com - uma ferramenta de desenvolvimento de base de dados para Oracle, SQL Server, DB2 e outros bancos de dados


TurboDbAdmin - uma solução de gerenciamento de base de dados que utiliza AJAX


Zmanda - uma solução OpenSource para realizar backups de bases de dados do MySQL

Fonte : Mashable

Como Fazer : melhorando sua câmera digital

uma dica de como alterar sua câmera digital, para tirar algumas fotos com um estilo profissional...


veja mais detalhes em : Instructables

sexta-feira, 12 de outubro de 2007

Dica Tutorial : jQuery, escreva menos, faça mais

jQuery é um kitp de ferramentas javascript para simplificar vária tarefas como a seleção de um elemento, manipulação DOM, tratamento de evento, animações, uso de AJAX. Este tutorial procura demonstrar como utilizando o jQuery, você irá escrever menos e ser mais produtivo, algo do genero, de um simples uso por hobby para um uso profissional.

tutorial em inglês no Dev.Opera : [link]

Fonte : DZone

quarta-feira, 10 de outubro de 2007

Dica : exemplo de como fazer um Abas utilizando CSS

segue uma dica muito interessante de como implementar Abas usando apenas CSS, bem mais simples que o uso de tabela para definir as abas, não?

veja os links: (em inglês)
- Dave Woods
- Alistapart

Fonte : DZone

segunda-feira, 8 de outubro de 2007

Faça você mesmo sua luz, ao estilo vaga-lume

do interessante mundo da químida aplicada nada como misturar alguns compostos e eis uma reação interessante, bom essa é algo que pode-lhe ser útil, indo acampar e precisa de um tipo de luz alternativa? segue a dica:

itens:
- Hidrogen Peroxide
- Soda
- uma garrafa pet (a princípio parece que o líquido não importa, mas qualquer coisa parecisa ser limonada...)

modo de preparo:
- esvazie a garrafa pet
- pegue um pouco de soda, mas bem pouco e coloque na garrafa
- agora adicione na garrafa 3 medidas do Hidrogen Peroxide
- só agitar e a luz aparece =]

veja o vídeo:

Fonte : Gizmodo

domingo, 7 de outubro de 2007

Adobe Flex : trabalhando com dados XML

relambrando o post anterior, onde para a comunicação com a aplicação Java no servidor além do formato que sugeri de como enviar os parametros, também comentei que a maneira mais fácil de inicialmente de trabalhar com os dados para enviar para o Flex seria envia-los como sendo um XML, certo?

então relembrando que o retorno do mx:HTTPService foi definido o atributo result, que este chamaria a função onSuccess, onde nesta função ali eu faço um cast para XML, bom nesse caso tu jogaria o retorno fazendo um cast para uma variável do tipo XML, sendo esta acessível em outras partes da aplicação...

e para trabalhar com dados em XML no Adobe Flex tem esse [link], onde possui exemplos de código e algumas explicações da forma de trabalhar com dados em XML (site em inglês)

outros links úteis:

- Rodrigo Fraga - Flex - Leitor de RSS
- eGenial - Leitor de RSS [fonte]

sexta-feira, 5 de outubro de 2007

Camisa detectora de rede Wi-Fi

engraçado, mas é isso mesmo que você leu...


A camisa detectora de Wi-Fi, faz tudo aquilo que você sonhou que ela faria, detecta os sinais Wi-Si e os exibe... para todos. Consegue detectar tanto redes 802.11b quanto 802.11g e a respectiva força do sinal, o qual é atualizado em tempo real, conforme você viu ali na imagem... (utiliza baterias AAA, que estão atras do display ali...)

A camiseta já está disponível, desde o inicio desse mês por U$ 30.

[Site do produto]

Fonte : Gizmodo

Caixa de Ferramentas : JavaScript : 27 sites


Javascript é uma das linguagens mais utilizadas na Web e além disto atualmente vem ganhando mais e mais popularidade (só lembrar do tão falado Ajax). Bom segue 25 sites com coisas úteis para programação javascript, de iniciantes a programadores com conhecimentos avançados na linguagem.


ActiveWidgets.com - uma biblioteca de componentes para lhe prover funções no estilo Ajax com elementos visuais comuns.


Agile Partners Photo Resizing Tutorial - um tutorial de como fazer para utilizar o Prototype e o script.aculo.us para construir redimencionamentos de fotos.


ByteFX - um framework simples de baixo nível para efeitos em javascript.


DevGuru - define todos os termos do Javascript e lhe disponibiliza exemplos de código do que eles já fizeram.


DojoToolkit.org - um kit de desenvolvimento DHTML OpenSource em javascript o qual é baseado em outras ferramentas para te facilitar a vida na hora de utilizar o javascript.


Drag & Drop Sortable Lists - Tutorial para criar listas ordenáveis com funcionalidades drag & drop.


DynamicDrive.com - uma vasta coleção de DHTML e Javascript para você utilizar.


Firebug - uma extensão para o Firefox que possibilita ao desenvolvedor testar, verificar e alterar dados em tempo de execução no javascript da página. (Eu uso e recomendo)


JavaScript-reference.info - um site de referência para lhe ensinar tanto como ler e como escrever códigos Javascript.


JavaScriptKit.com - uma lista de objetos javascript, propriedades e métodos que você pode utilizar como exemplos.


jQuery.com - uma biblioteca javascript, para a principio ajudar a codificar o mínimo de linhas de javascript.


Learn JavaScript in 10 Minutes - um tutorial rápido para ensinar o básico de Javascript em 10 minutos de leitura.


Lightbox2 - código javascript para sobre posição de fotos em uma mesma página com um fundo semi transparente. Algo que tenho visto sendo muito utilizado em sites para exibir uma imagem em tamanho maior, sem a necessidade de abrir uma nova página, ou redirecionar para outra página.


LightWindow - outro sistema similar ao anterior que te possibilita trabalhar com multiplos tipos de media distintas de outros websites.


MochiKit.com - um conjunto de bibliotecas javascript que utilizam-se das ideias do Python e Object-C, usando elas no javascript.


Moo.fx - biblioteca javascript para efeitos que trabalha em conjunto do Prototype.js e do framework Mootools.


Mootools.net - um framework javascript orientado a objetos para programadores javascript com conhecimento intermediário a avançado.


Prototype Windows Class - possibilita que você abra outras "janelas" sobre o seu HTML atual.


Prototypejs.org - um framework javascript construido em cima das ideias do Web 2.0, incluindo uma integração com Ajax.


QuirksMode.org - um site pessoal de um profissional desenvolvedor web, onde ele disponibiliza mais de 120 truques para contornar as incompatibilidades de browsers que ocorrem no uso do CSS e Javascript.


Reflection.js - um pequeno código javascript para adicionar o efeito de reflexo as imagens.


script.aculo.us - uma biblioteca javascript que integra-se facilmente a inumeros frameworks.


ThickBox - tabalha em conjunto com o jQuery para proporcionar uma sobre posição hibrida de imagens utilizando Ajax.


TinyMCE JavaScript Content Editor - um editor de conteúdo completamente escrito em javascript que converte o conteúdo nele modelado em HTML.


W3Schools JavaScript Tutorials - 100 exemplos para estudar e aprender javascript.


WebTeacher.com - voltado ao ensino de javascript para novos programadores.


Walter Zorn Drag & Drop - biblioteca javascript DHTML cross-browser que te possibilita alterar qualquer imagem em uma camada, sendo que está possa ser arrastada e alterada sua posição, conforme o usuário quizer.

Fonte : Mashable