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

sábado, 28 de março de 2009

CFWebDay O Maior Evento ColdFusion no Brasil

cfwebday

Já estou há tempos para postar esta mensagem, mas tenho andado totalmente ocupado, devido a um projeto que está demandando 15h/dia do meu tempo disponível.

Mas enfim… vamos ao que interessa!
Se você está ligado na comunidade em torno do ColdFusion, já deve ter ouvido falar do CFWebDay. Será enfim o maior evento ColdFusion realizado no Brasil, com 5h de palestras online. Acesse o site, inscreva-se e confira.

O Jefferson Petilo (RIABrazil) e eu estaremos palestrando neste evento sobre temas diferenciados, mas que terão certo grau de conexão. Estamos preparando um conteúdo interessante, com o objetivo principal de ser reutilizável pela comunidade após o evento, como material de argumento para promover o ColdFusion.

Caça aos Cases

Na minha apresentação, titulada “O ColdFusion no mercado brasileiro”, estarei procurando citar cases nacionais que envolvem o produto. Afim de levantar o maior número de cases possível, desenvolvi um documento, contendo um questionário, para me auxiliar na busca pelos mesmos.

Se você possui ou conhece alguém que possua um projeto com o ColdFusion e que considere o mesmo com argumentos interessantes para serem apresentados como case de utilização do ColdFusion, por favor envie (ou indique) ao responsável pelo mesmo o PDF a seguir.

Infelizmente não posso garantir que poderei citar durante a palestra, devido ao tempo, todos os cases que receber. Porém, garanto que todos serão mencionados nos slides que serão disponibilizados no site da RiaBrazil, após o evento. Estaremos também, colaborando junto aos responsáveis de cada projeto, para que os mesmos possam ser inseridos no site da Adobe como cases ColdFusion.

O arquivo encontra-se no post a respeito deste assunto que fiz do site Adobe Groups, destinado ao Grupo de Usuários Oficial da Adobe RIA-BA do qual o Jefferson e eu somos responsáveis.

Desde já, obrigado pela colaboração!

Download do PDF: http://groups.adobe.com/posts/01076232cf

sexta-feira, 16 de janeiro de 2009

RIA-BA Grupo de Desenvolvedores RIA na Bahia

mini_banner

Essa é uma grande notícia!
Recebemos o “sinal verde” por parte da Adobe para iniciarmos uma comunidade oficial Adobe destinada a desenvolvedores e interessados no desenvolvimento de soluções RIA baseadas e suas tecnologias.
Surge assim o RIA-BA. Acesse o link no site de comunidades da Adobe, que será o site principal do grupo, inscreva-se e conheça mais detalhes sobre como será a nossa atuação.

As tecnologias que abordaremos, são basicamente as que são voltadas diretamente ao desenvolvimento de soluções RIA, que hoje são o Flash, o Flex/FlexBuilder, AIR, ColdFusion (e frameworks), Flash Media Server, BlazeDS, Cairngorm (e outros frameworks) e diretamente ligadas ao Flash Platform, assim como o Flash Catalyst (Thermo) e outras ferramentas que forem anunciadas.

À frente do grupo estaremos eu (Vicente Maciel Jr) e o meu amigo Jefferson Petilo.

Como alguns sabem, atuamos na Bahia (independentemente, por hora) com consultoria, treinamento e principalmente o desenvolvimento de soluções RIA. Nossa intenção com o grupo é concentrarmos esforços, para cada vez mais aumentar o potencial e resposta de demanda de mercado na região, através da distribuição de informação e acesso às novidades que surgirem no setor, de maneira mais rápida e eficiente possível. Para isso, estaremos abertos e firmando boas parcerias que possibilitem alcançar tal objetivo, bem como atender a outras necessidades dos usuários do grupo em relação a outras tecnologias Adobe que não sejam exatamente o foco do nosso grupo abordar, tais como Fireworks, Illustrator, Photoshop, Premiere, etc.

Enfim, interessados, mantenham-se ligados no site, que será nossa principal ferramenta de abordagem, efetivação e comunicação com a comunidade.

Sugestões e criticas construtivas serão sempre muito bem-vindas!

Treinamento Oficial Adobe ColdFusion 8

logo_itraining Começa no dia 07 de fevereiro (sábado) uma turma da formação ColdFusion oferecida pela iTraining em Salvador-BA. Os treinamentos serão aos finais de semana e estão sendo oferecidos a preços promocionais. 

Fui convidado e estarei ministrando este curso, ao qual irei adicionar algumas informações de elaboração própria e inerentes a aplicações reais dos conhecimentos que serão obtidos, além de fornecer dicas para quem futuramente desejar aplicar-se à prova de reconhecimento profissional da Adobe.

Para detalhes, acesse aqui, ou entre em contato com a Monica (iTraining) no telefone: 71-3450-1114

quarta-feira, 19 de novembro de 2008

ColdFusion IDE codename Bolt

BOLT1

Seguindo a série de novidades que estão sendo anunciadas no Adobe MAX 2008, surgiu a notícia de uma IDE específica para ColdFusion, baseada no Eclipse (assim como ocorre com o FlexBuilder) chamada por enquanto de BOLT.

Confesso que tinha até mesmo esquecido, que à não muito tempo a Adobe havia feito uma pesquisa em massa, questionando seus usuários/parceiros quanto a aceitação/necessidade de uma solução do tipo.

Hoje utilizo o CFEclipse e algumas vezes recorro ao Dreamweaver, que adicionei novamente ao “cinto de utilidades” depois das novidades presentes na versão CS4.

Cenário atual em relação ao CFEclipse

O CFEclipse justifica-se para mim por me permitir unificar minhas ferramentas de programação em uma única plataforma, o Eclipse, e ser gratuíto. Seus recursos, na minha opinião, não são assim tão fantásticos e pecam bastante em coisas simples como sintax highlight, code completition, document templates e code templates que são recursos extraordinários presentes e disponibilizados pela plataforma Eclipse e muitas vezes ignorados. O FlexBuilder também comete alguns desses pecados, porém recursos como package/inheritance recognition, structure recognition, refactoring e outras caracteristicas ofuscam esses pontos negativos enquanto o CFEclipse não trata nem o básico de uma maneira plenamente satisfatória. Mas tudo bem. É gratuíto, é uma opção, já permite alguma agilidade de longe muito melhor do que um Notepad Plus.

Cenário atual em relação ao Dreamweaver

O Dreamweaver é excelente e de qualidade inquestionável e imbatível quando se trata de trabalhar layout e programação ao mesmo tempo. Peca por não ter recursos ágeis de codificação e nesse ponto meu grau de comparação sempre será os recursos presentes no Eclipse. Na versão CS4 melhorou muito. A questão de integrar-se com Subversion foi para mim o ponto mais alto, seguido pelos recursos de desenvolvimento JavaScript/AJAX e pelas incríveis melhorias de interface e funcionalidade relacionadas a WebStandards.

A proposta do Bolt

Tomando como base o conteúdo da seção no Adobe Labs dedicado ao Bolt, onde aliás os interessados podem inscrever-se ao Beta do mesmo, relaciono os principais recursos e meus comentários a respeito dos mesmos.

  • Auto-configuração de Mapeamento de Objetos Relacionais (ORM): Sendo lançado juntamente com o ColdFusion 9 Centaur, era de se esperar que o Bolt trouxesse um recurso do tipo, senão seria uma falta grave. No post que fiz a respeito do ColdFusion 9 Centaur, há detalhes a respeito desta nova funcionalidade. Ainda não tenho o Bolt em mãos, mas creio eu que a funcionalidade baseie-se indicação do DSN com o qual a aplicação à ser desenvolvida irá trabalhar e a partir disso o Bolt seja capaz de gerar os arquivos de configuração necessários à implementação do recurso no framework do ColdFusion 9
  • Geração de Código: Acredito eu, trata-se de wizards para a criação de objetos, suas propriedades, e métodos, incluindo os getter/setters seguindo as novas especificações do CFML/CFScript também abordadas no post que fiz sobre as novidades do ColdFusion 9
  • Gerenciamento do Servidor: Este recurso deve expor o painel administrativo do ColdFusion diretamente na IDE, eliminando a necessidade de se abrir um navegador para interagir com a mesma.
  • Facilidade de extensibilidade usando recursos exportos pela arquitetura do Eclipse. Sinceramente isso é natural de qualquer recurso baseado no Eclipse, à não ser que a Adobe decida, a exemplo do que ocorre com o Flash, Dreamweaver e etc, definir um framework próprio (API) para promover tal extensibilidade com Javascript por exemplo.
  • Sintax highlight para CFML/CFScript, HTML, Javascript e CSS. É o mínimo #1 que se espera de uma IDE para ColdFusion ou qualquer outra tecnologia semelhante.
  • Code Completition para CFML/CFSCript (tags/palavras-chave), funções, variáveis e componentes. É o mínimo #2.
  • Expansão/Retração de bloco de código. Útil para códigos muito extensos. É um dos recursos básicos da plataforma Eclipse no que se refere à edição de código. Particularmente, eu não sentiria tanta falta disso, mas sei que existem desenvolvedores que não dispensam este recurso simples.
  • Criação e Gerenciamento de blocos de código (snippets). Neste teor, eu só espero que a Adobe não queira reinventar a roda, como ocorreu com o CFEclipse e faça uso dos recursos de Code Templating que o Eclipse oferece e é na minha opinião um dos pontos mais altos no que diz respeito de agilidade de desenvolvimento/produção de código. Espero também que a Adobe preocupe-se em permitir que os templates de novos arquivos sejam editáveis.
  • Visualização estrutural. Janela que apresenta o componente/arquivo de código em questão como uma estrutura, identificando métodos, variáveis, etc. Está aí algo também bem básico para qualquer IDE.
  • RDS Explorer. OK! Obrigado! Mais um básico! Espero só que seja mais útil do que encontrado por exemplo em outros recursos já disponibilizados no Eclipse, um pouco mais próximo do Data Explorer que existe no Dreamweaver.
  • Debugger com recursos de verificação linha-a-linha. Muito útil, bem vindo, já disponibilizado como plugin para o eclipse anteriormente (mas que ainda não utilizei). Acho que não utilizei justamente por ser algo que eu teria que configurar manter de forma independente e que para mim não se justifica muito em uma IDE.

Enfim, se a Adobe conseguir 50% do que se espera, eu acho que já teremos em mãos uma ferramenta extraordinária e sem precedentes quanto ao desenvolvimento ágil com ColdFusion.

Lembre-se que para participar do Beta, você pode candidata-se a partir do link que se encontra na página dedicada ao Bolt no Adobe Labs.

ColdFusion 9 Centaur

Logo ColdFusion 9 - Centaur

Das novidades anunciadas, umas da que eu mais esperava!

O ColdFusion 9, de code-nome Centaur, na minha opinião apresenta-se com um pacote de inovações técnicas na sua infra-estrutura que remetem à força e dedicação da Adobe em torná-lo cada vez mais uma plataforma competitiva em relação a outros servidores de aplicação disponíveis no mercado.

As novidades desta versão, conforme o que já foi publicado oficialmente pela Adobe (há mais, acreditem), deixam isso bem claro. Faço abaixo meus comentários pessoais a respeito de cada recurso:

Mapeamento de Objetos Relacionais (ORM)

A idéia é diminuir a necessidade de implementação personalizada e geralmente repetitiva para que se obtenha consistência e agilidade no desenvolvimento de aplicações no que se refere à dados. Com este recurso, de uma forma bastante simples o ColdFusion irá expor ao desenvolvedor, a partir de uma configuração bastante simples, objetos que representam dados do banco de dados, considerando a relação existente entre os mesmos.
Hoje, para atingir uma situação/ambiente de desenvolvimento semelhante, utilizo o framework Transfer-ORM desenvolvido, mantido e disponibilizado por Mark Mandell.
Infelizmente acho que códigos que exponham tal recurso ainda não podem ser publicados, mas se você deseja ter uma prévia do que será este recurso no ColdFusion 9 Centaur, conhecer o Transfer-ORM é uma boa introdução.

Melhorias na linguagem em sí

Até mesmo para expor o recurso de mapeamento de objetos relacionais (orm) citado acima, a linguagem necessitava de implementações. Haja visto que o próprio Transfer-ORM acaba pecando em alguns dos seus aspectos internos e capacidade de integração com outras camadas da aplicação, justamente por algumas limitações que o CFML/CFScript apresentavam até então. No caso do Transfer-ORM isso é notável principalmente quando implementa-se uma integração com o Flex/AIR por exemplo. Em resumo, é necessário criar algumas soluções alternativas para integrar os objetos gerados pelo Transfer (os TransferObjects) às capacidades AMF (Remoting/LiveCycle) do ColdFusion.

Essas melhorias na linguagem são basicamente:

  • Possibilidade de escrever componentes (CFCs) totalmente utilizando CFScript
  • Palavra chave “new” para simplificar o instanciamento de componentes bem como sua inicialização
  • Palavra chave “import” para definir o acesso a objetos de dependência em um componente
  • Definição explícita de getters e setters (métodos com diretivas get/set)
  • Definição de um escopo para variáveis locais que simplificará até mesmo a estrutura de um componente
  • CFFINALLY e CFCONTINUE que complementam a logica do TRY/CATCH e LOOPs
  • Enfim, a eliminação das diferenças entre CFTAGs e CFSCript

Ao mesmo tempo que temos que avaliar que isso tudo é extremamente positivo em termos de recursos, capacidade e robustez do ColdFusion, acho que foi importante a preocupação em manter a simplicidade do CFML em sí afim de que o ColdFusion não perca a agilidade da programação declarativa.

Outro fator importante é a proximidade de sintaxe, na questão dos scripts, da estrutura de código e da lógica que será possível de se implementar com o CFSCRIPT em relação às tecnologias concorrentes. Creio eu que além de diminuir uma resistência – que é imediata em relação as TAGs – aumenta a capacidade de se compreender o ColdFusion por parte de desenvolvedores PHP, ASP/.Net, Java, etc.

Serviços ColdFusion expostos ao Flex/AIR através de bibliotecas AS3 específicas (SWCs)

Como desenvolvedor Flash/Flex/AIR, este para mim é o principal recurso que fará diferença no meu dia-a-dia a respeito do ColdFusion 9 Centaur. Vários recursos, que não sei se já podem ser citados publicamente ainda por isso não o farei agora, que hoje dependem de uma implementação manual e repetitiva de aplicação para aplicação, já será abstraída pelo ColdFusion, permitindo o consumo direto desses recursos por meio de objetos em uma API definida em AS3 que poderá ser implementada nas aplicações como RSLs (Runtime Shared Libraries) assinadas digitalmente, que farão parte do framework compartilhado de distribuição única, ou seja, que o usuário baixa uma única vez ao primeiro acesso à aplicação Flex (o AIR não necessita desse download adicional).
Este recurso será certamente considerado um grande diferencial na adoção do ColdFusion para integração com Flex em aplicações RIA robustas.

Método “onServerStart” no Application.cfc

Bom, para quem é usuário do CF e já implementa o Application.cfc em suas soluções, a importância já é implícita. Mas enfim, dá ao desenvolvedor a capacidade de executar uma rotina personalizada na inicialização de um servidor.

 

Para ler dados oficiais do anúncio e candidatar-se a Beta Tester, visite a página dedicada ao lançamento no Adobe Labs:
http://labs.adobe.com/wiki/index.php/Centaur

Adicionalmente, eu não poderia deixar de comentar que ainda espero que exista alguma novidade em relação a politica comercial do ColdFusion. Mas como ainda estamos em fase de discutir o produto em sí, o que nos resta é aguardar.

De qualquer forma, repito, na minha opinião a Adobe encontrou várias formas de justificar e reforçar o diferencial do ColdFusion em relação aos seus concorrentes. E digo isso sustentando que eu mesmo me surpreendi.

terça-feira, 11 de novembro de 2008

POG ColdFusion para identificar registros que nao podem ser excluidos de uma tabela

Odeio POGs. Em primeiro lugar porque a exigência comigo mesmo faz com que eu não descanse até encontrar uma solução verdadeiramente elegante.

A situação desta vez foi a seguinte: Se vocês repararem, todos os sistemas que a gente encontra por ai, no CRUD apresentam a possibilidade de excluir qualquer registro, verificando no momento da transação (server-side) se aquela ação é realmente possível ou não. Se possível, simplesmente efetiva, senão retorna uma mensagem para o usuário. A minha intenção é já desabilitar a opção de excluir na interface, prevendo tal condição. Para isso, preciso que no momento de mandar os registros de uma tabela para serem apresentados na interface, eu verifique se estes não são referenciados de alguma forma.

Conversando com meu amigo Jefferson Petilo, primeiro definimos o que era óbvio. Precisaríamos no banco de dados que fosse, utilizar as restrições de operação entre registros das tabelas através de chaves estrangeiras. Considere:

Tabela1 (TiposDeImagens):

Campo Tipo Função
id (uuid, int, etc) Chave Primaria
label (varchar) Descrição do tipo

Tabela2 (Imagens):

Campo Tipo Função
id (uuid, int, etc) Chave Primaria
label (var char) Descrição da imagem
tipo (uuid, int, etc) Chave Estrangeira
OnDelete = restrito


Logo depois, por não encontrar nada universal no SQL ou que pudessemos facilmente replicar para vários banco de dados, decidimos que a melhor maneira de verificar registro por registro (no exemplo, da Tabela1, TiposDeImagens) quanto a possibilidade do mesmo ser excluído, seria:

POG_cf_img0_11nov08_17h53m

Porém isso, claro, na ocasião de ser disparado contra um registro que não possui ligações, ocasionaria na exclusão do registro em sí.

Ai entra o POG:

POG_cf_img1_11nov08_17h54m

O <cftransaction> com o ROLLBACK logo após o teste de deleção do registro, garante que o mesmo não seja efetivamente excluído.

Continuando a conversa com o Jefferson verificamos ainda a implementação desta solução via “trigger/actions” no banco de dados. Qual não foi a nossa surpresa ao reparar que o “POG” acabou sendo uma solução bem mais simples de se implementar.

Outra coisa em relação ao uso de “triggers/actions” é o fato de tornar a solução dependente de banco de dados e implicar em se ter várias versões de um código relativo a um mesmo e único recurso. Mas essa é definitivamente outra discussão de prós e contras.

O que fica para mim agora, é o desejo de estudar alguma solução, que seja ao mesmo tempo “elegante” (antônimo de POG, embora eu e o Jefferson tenhamos considerado este POG como “elegante”) e simples de ser implementada.

sexta-feira, 22 de fevereiro de 2008

Flex, Cairngorm e desenvolvimento progressivo independente de Business / Delegate usando "FakeData Factory"

flex3_fx_124x120 Eu já estava para fazer esse post desde ontem quando passei a adotar essa metodologia que vou apresentar aqui para o devido propósito anunciado como título, mas no momento de pausa para me atualizar do conteúdo de outros blogs que leio, acabei, por pura coincidência, me deparanto com um artigo publicado pelo Ricardo Pettine no Blog da DClick com o título “A EVOLUÇÃO DO MOCK USANDO O CAIRNGORM”, o que me levou a antecipar e mudar um pouco o objetivo desta postagem.

Na verdade, se observarem os 3 comments que fiz no Blog da DClick, vão ver que eu tentei fazer o assunto progredir lá mesmo, mas acabei esbarrando no problema de caracteres do código de exemplo que tentei postar.

(que vergonha a minha... enferrujando no uso de blogs... acho que se eu tivesse colocado um <code>, resolveria talvez).

Bom, vamos lá...

A minha intenção com o que eu fiz e proponho usar, é permitir o desenvolvimento de toda a estrutura de front-end no Flex, usando Cairngorm, independente da parte de Business/Delegate que referem-se justamente à integração com o Back-end.

Não fiz isso baseado em nenhum modelo, nem ao menos pesquisei alternativas. Simplesmente adotei e apliquei para uma necessidade atual que tive em um projeto no qual estamos redefinindo todo um framework de backend (ColdFusion), mas que por já ter todos os dados e requisitos especificados, obviamente permitia o progresso individual do desenvolvimento do Front-end.

Então, são os requisitos para aplicar esse recurso:

  1. Utilizar o framework Cairngorm (embora possa ser aplicado em qualquer situação onde o MVC seja a base de desenvolvimento)
  2. Ter os ValueObjects (VO) ou DataTransferObjects (DTO) definidos.

Com os requisitos atendidos você imediatamente compreenderá que a implementação proposta será aplicada nos Commands, no caso da arquitetura do Cairngorm.

Meu exemplo se baseia em um EmailLoadAllCommand, que por sua vez instanciaria um EmailDelegate e então o método loadAll(). O Result nesse caso trabalharia com o recebimento de uma array de instancias de EmailVO.

Apenas para referência, o método execute() de EmailLoadAllCommand:

public function execute(event:CairngormEvent):void{
var delegate:EmailDelegate = new EmailDelegate(this);
delegate.loadAll();
}

A alteração seria feita exatamente aqui, eliminando neste momento o Delegate e consequentemente a implementação de Responders para tratar o resultado da atividade do Delegate. O código acima alterado para usar a solução proposta pela implementação da classe EmailFakeCollection.as que apresentarei logo após:

public function execute(event:CairngormEvent):void{
//var delegate:PessoaFisicaDelegate = new PessoaFisicaDelegate(this);
//delegate.loadAll();
EmailModel.getInstance().emailCollection = EmailFakeCollection.generate();
}

Repare que estamos no método execute(), alterando o Model diretamente, com o dado solicitado. Neste caso apenas antecipamos o que só ocorrería no result() do responder que sería especificado no instanciamento do Delegate.´

Considerando o exemplo acima, onde o Command teoricamente implementa mx.rpc.IResponder e portanto conterá o método result(), simplesmente mudamos a instrução de associação dos dados ao model de lugar.

A idéia então consiste em que a classe EmailFakeCollection (e todos os eventuais FakeCollections que o sistema necessitar) implementem um método estático generate() que por sua vez retorne um ArrayCollection simulando dados que seríam recebidos no result da classe apontada para ser o responder da aplicação.

Eu pessoalmente preferi implementar um parâmetro para o método estático generate() afim de que eu possa especificar um número de itens que desejo receber como retorno.

No caso do exemplo citado então, a proposta da classe EmailFakeCollection seria a mostrada abaixo, seguido da classe EmailVO para referência apenas:

package br.com.ir.pessoas.factory{
 
import br.com.ir.pessoas.vo.EmailVO;
 
import mx.collections.ArrayCollection;
 
public class EmailFakeCollection{
 
private static var fakeRawData:Array = [
{
id: 1,
email: "macieljr@gmail.com",
padrao: 1
},
{
id: 2,
email: "macieljr@interfacerica.com.br",
padrao: 0
},
{
id: 3,
email: "macieljr@ir.com.br",
padrao: 0
},
{
id: 4,
email: "owner@vpmjr.com",
padrao: 0
},
{
id: 5,
email: "publisher@teclandoalto.com.br",
padrao: 0
}
];
 
public function EmailFakeCollection(){}
 
public static function generate(_qty:int = 0):ArrayCollection{
 
var returnData:ArrayCollection = new ArrayCollection();
 
var totalItems:int = (_qty > 0 && _qty <= fakeRawData.length) ? _qty : fakeRawData.length;
 
for(var i:int = 0; i < totalItems; i++){
 
var email:EmailVO = new EmailVO(
fakeRawData[i].id,
fakeRawData[i].email,
fakeRawData[i].padrao
);
 
returnData.addItem(email);
 
}
 
return returnData;
 
}
 
}
 
}
package br.com.ir.pessoas.vo{
 
import com.adobe.cairngorm.vo.IValueObject;
 
[RemoteClass(alias="br.com.ir.pessoas.EmailVO")]
[Bindable] public class EmailVO implements IValueObject{
 
public var id:int;
public var usuario:String;
public var provedor:String;
public var padrao:uint;
 
public function set email(_email:String):void{
 
if(_email.length){
 
var emailParts:Array = _email.split("@");
this.usuario = emailParts[0];
this.provedor = emailParts[1];
 
}
 
}
 
public function get email():String{
 
return this.usuario + "@" + this.provedor;
 
}
 
public function EmailVO(_id:int = 0, _email:String = "", _padrao:uint = 0){
 
this.id = _id;
this.email = _email;
this.padrao = _padrao;
 
}
 
}
 
}

Eu acabei batizando isso de FakeDataFactory. Nem sei se o nome ja foi usado. Mas agora vou ficar de olho em temas como o abordado pelo Ricardo no blog da DClick para conhecer e aprender melhor formas alternativas de implementar isso.

Por enquanto esta forma me atende completamente. Inclusive, caso a aplicação especificasse a necessidade de criar um Factory (no padrão costumeiro da palavra mesmo) para o recebimento de dados no formato JSON, um XML ou qualquer outro tipo de serialização, eu simplesmente implementaría a classe normalmente e simularia dentro do meu FakeDataFactory o recebimento de dados e instanciamento através desse Factory de desserialização. Depois, na implementação final de integração com o Back-End, bastaría mover a chamada dessa implementação no seu local apropriado.

Qualquer dica à respeito do fundamento, outras formas de implementação e padrões já existentes é muito bem vinda!

quinta-feira, 15 de novembro de 2007

Por que usuários de PHP são tão unidos?

Estava com um amigo (Jeff) discutindo uma excelente matéria postada no ColdFusionJedi sobre uma High Scholl na Nova Zelândia que possui aulas de ColdFusion como matéria regular de informática em substituição a aulas de Word, Excell, etc.

Ao final da matéria surge um tópico interessante... alguns dos alunos demonstraram que iriam migrar para o PHP mesmo sem terem associado ao CF algum problema que os levassem a esta atitude.

Surgiu o seguinte trecho na minha conversa com o Jeff:

Vicente Jr: Que louca essa última parte: "...I'm curious why all the kids seemed to be moving to PHP..."

Jeff: Sabe que é uma verdade?

Vicente Jr: Tenho minhas suspeitas:
- CFBoy@NZ: Hi! I'm doing CFML Apps... It's so cool!
- PHPBoy@Anywhere: Are you a fag? My dad tolds me it's sucks... it's not real programming language. If you really want to be a MAN, a programmer, learn PHP! You bitch!

Jeff: (risos)

Jeff: Mas sabe por que os usuários de PHP se unem assim? Em comunidades, etc?

Vicente Jr: Não faço idéia!

Jeff: Porque nunca conseguiram terminar um sistema sozinhos!

Vicente Jr: (risos) + (risos) + (risos)

Claro que trata-se de uma brincadeira, tão comum quanto a que outro colega postou em uma lista sobre CF da qual participamos, com um vídeo (uma coleção na verdade) produzido pela comunidade RubyOnRails criticando o CF (e outras linguagens, dentre elas o PHP). Mas suspeito se não tem lá seu fundo de verdade! (Risos++)

segunda-feira, 22 de outubro de 2007

CF_SSLPOP referenciada no ColdFusion Open-Source Update

A CustomTag já está entrando em uso por ai. Recebi vários emails elogiando o trabalho e esse reconhecimento tem agregado mais entusiasmo para novas atitudes colaborativas para a sociedade de desenvolvedores ColdFusion (e outras tecnologias) como foi essa pequena contribuição.
Engraçado é que o pessoal lá de fora valoriza mais o trabalho da gente do que os nossos conterrâneos. Pra mim isso é um tanto quanto estranho, mas tudo bem...
Aproveitando a oportunidade, ao mesmo tempo da publicação na lista de Open-Sources em ColdFusion, recebi a notícia de que o RiaForge não mais dará suporte às licenças do Creative Commons. Ainda não entendi o motivo mas vou procurar saber. Assim, a CustomTag CF_SSLPOP agora está sob o modelo de licença BSD.

segunda-feira, 15 de outubro de 2007

ColdFusion Custom CF_SSLPOP disponível no RIAForge



Baseado no post a respeito de implementação SSL com a tag CFPOP do ColdFusion, embora o código esteja aberto e disponível para que cada um implemente da forma que achar conveniente, resolvi criar uma custom tag para facilitar a vida de quem quiser implementar o recurso.

Serve como mais um exemplo de uso do código e o mesmo pode ser extraído para ser utilizado em CFCs, UDFs e etc.

O modelo de licença que escolhi foi o "creative commons (attribution)" que o torna livre para ser utilizado e implementado como quiser, mantendo apenas a obrigatoriedade de citar a procedência/fonte da informação.

Visite a página do projeto no RIAForge.com

sábado, 13 de outubro de 2007

Connecting to Gmail using CFPOP

This is a brief translation of the original post regarding the same subject in brazilian portuguese.

Researching the web (and also after hours trying some native solution) I could realize a lot of people had already tried to use to retrieve data from their Gmail accounts. It makes a lot of sense, but unfortunately doesn’t implements SSL on its algorithm. It makes impossible to reach the desired result.

After some hours looking for solutions for this, discarding the option to use CFX_POP (paid solution), we and my colleague Jefferson Petillo decided to research some alternative. I choose to go into Java direction and after some time researching I found this post (http://unk1911.blogspot.com/2005/12/gmail-via-pop3-in-java.html).

Based on it, I wrote the following simple lines of code to successfully retrieve messages from my Gmail account using :



IMPORTANT: Comparing the original code I had as the base to produce mine, you can realize I omitted the definition ("mail.pop3.socketFactory.fallback", "false") that is equivalent to define it as TRUE. This FLAG makes JVM recovers or not the original “SocketFactory” class used on Pop3 Socket connections that is “javax.net.SocketFactory". If FALSE is defined to “fallback” flag, JVM, from here on, will always use SSL in future Pop3 Socket connections until "mail.pop3.socketFactory.class" is defined back to “javax.net.SocketFactory” instead of "javax.net.ssl.SSLSocketFactory" we are using to implement SSL. For a ColdFusion shared environment it would result on an undesired situation where every Pop3 Socket connection made from any application running that server instance, to use SSL when was implemented. This would produce a connection error when POP server doesn’t requires SSL.

Regarding this, the better way to implement this solution would be:



Where “someFlag” will be some variable indicating SSL is required for next request. It could be, for example, a checkbox form field that will exists in FORM scope if it was checked. In this case “someFlag” can be replaced simply by:



GREAT QUESTION: Why isn’t it already implemented as a simple parameter, just like SSL=”true/false” by Adobe / Macromedia / Allaire?


Special thanks:
The author of the original Java solution posted here http://unk1911.blogspot.com/2005/12/gmail-via-pop3-in-java.html and Jefferson Petilo for his help, curiosity, effort and sleepiness.

Conexão ao Gmail usando CFPOP

Muitos já pensaram nisso e provavelmente já passaram pelo “problema” de tentar uma conexão ao servidor do Gmail para resgatar mensagens usando a tag <cfpop... . O problema refere-se ao fato de que o Gmail implementa SSL na conexão aos seus servidores e a tag <cfpop> não possui suporte a uma conexão com essa especificação.

Nesta necessidade, muitos acabam por investir na aquisição da tag CFX CFX_POP que implementa conexão ao servidor usando SSL.

Ontem (12/10/07) das 11:30PM até umas 2:30AM de hoje, eu e meu colega Jefferson Petillo ficamos tentando de várias formas estudar uma solução direta com o ColdFusion. Depois de várias tentativas estudos e fracassos, descobrimos que simplesmente o ColdFusion não implementava de forma nativa condições para completar esta operação.

Por ter estudado bastante o que falta para que o ColdFusion permita esta funcionalidade, ficamos perplexos em tomar conhecimento de que a implementação para a solução deste problema nos parecia à princípio simples. E com este pensamento nos questionamos sobre qual sería o motivo deste recurso não encontrar-se implementado no produto.

Como não ficamos satisfeitos só em aguardar uma solução, ao passo que notamos que a solução poderia ser simples, nos dividimos em pesquisas. Eu optei por estudar a solução usando Java.

Enfim, assim que acordei, ansioso em achar a solução para essa questão, parti para a pesquisa e à partir do que encontrei aqui neste post (http://unk1911.blogspot.com/2005/12/gmail-via-pop3-in-java.html), acabei descobrindo que a solução é muito mais simples do que eu imaginava à princípio.

Fato técnico: Para que uma SESSION a um servidor SSL seja estabelecida, primeiramente HOST e CLIENT devem estabelecer um HANDSHAKE com sucesso. Isso ocorre via SOCKET.

O problema teórico: Embora não tenha acesso ao código fonte, me parece óbvio então que entre duas suposições, uma é verdadeira: 1 – O algoritimo da tag <cfpop> não implementa o Handshake. 2 – Há um bug nesta implementação. Embora pareça óbvia que a verdadeira suposição seja a primeira, baseado no fato de que o CF8 possui em sua interface de administração a opção de ativar SSL na conexão ao servidor de email (vide figura 1), pode-se supor que exista a verificação desta opção no algoritimo do <cfpop>. OK! As opções no administrador, à princípio refere-se à configuração de SMTP e não POP. Mas, por mais absurdo que pode ser, é uma suposição.

A solução teórica: Antes de implementar um request (que ocorre via socket, naturalmente) usando a tag <cfpo>, forçar o handshake com o HOST (servidor POP) usando SSL.

Solução prática: Implementa-se esta solução, simplesmente definindo-se nas propriedades do JVM (obtido via System.getProperties()) as informações corretas para que seja utilizado SSL (obtido através de javax.net.ssl.SocketFactory) no processo de conexão. Vide código abaixo:



IMPORTANTE: Repare que em relação ao código original, a definição da seguinte propriedade ("mail.pop3.socketFactory.fallback", "false") foi omitida, o que equivale a deixa-la como TRUE. Esta opção faz com que o JVM retorne ou não ao padrão que é utilizar (("mail.pop3.socketFactory.class", "javax.net.SocketFactory") ao invés de (("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory") que estamos definindo, neste caso, para que na próxima seção de contato ao servidor de email seja utilizado SSL. Se “false” for utilizado, o JVM não irá recuperar a classe original, usando sempre SSL ao proceder um contato com um servidor POP qualquer daqui por diante. No ambiente do ColdFusion, isso prejudicialmente seria o equivalente a fazer com que QUALQUER aplicação rodando na mesma INSTÂNCIA de servidor, sempre utilizasse SSL neste procedimento. Isso fatalmente resultaria em erro de conexão a servidores POP que não utilizem SSL (diga-se, a maioria).

A partir disso, a implementação mais aconselhável sería:



“someFlag” deverá ser alguma variável indicando a necessidade de uso de SSL para esta operação. Por exemplo um campo de formulário do tipo “checkbox” que existirá se for marcado ou não irá constar no escopo FORM caso não tenha sido marcado. Assim, “someFlag” poderia ser substituído por:



A GRANDE PERGUNTA!: Por que isso simplesmente já não foi implementado na tag como um parâmetro, por exemplo, SSL=”true/false” pela Adobe / Macromedia / Allaire?

Agradecimentos:
Autor do Post original com a solução Java em http://unk1911.blogspot.com/2005/12/gmail-via-pop3-in-java.html e ao Jefferson Petillo pela ajuda, curiosidade, empenho e insônia compartilhada.

segunda-feira, 23 de julho de 2007

Tutoriais - Venda antecipada - 50% desconto


Seguindo o POST anterior, uma outra novidade.
Quem leu o POST a respeito do que estarei fazendo nas novas empreitadas, viu que um dos tópicos são treinamentos online. Só pra dar uma aguçada no pessoal, devo antecipar que esses treinamentos serão inéditos aqui no Brasil e serão oferecidos via Breeze (hj conhecido como Adobe Connect).

Então estou em fase de desenvolver os conteúdos. Os treinamentos disponibilizados inicialmente serão de ColdFusion, Actionscript 3.0, Flash e Flex. Depois virão outros treinamentos, inclusive de tecnologias que não são da Adobe.

Na tentativa de financiar este trabalho inicial, estarei promovendo a venda antecipada dos conteúdos, no formato de slides, textos e arquivos de exemplo, com 50% de desconto.

Os conteúdos, custos iniciais e suas respectivas datas previstas de entrega são:

1 - Flash intermediário - Prazo: 10/ago - Valor: R$150*
2 - ColdFusion intermediário - Prazo: 10/ago - Valor: R$300*
3 - Flex intermediário - Prazo: 25/ago - Valor: R$200*
4 - Actionscript 3 intermediário - Prazo: 25/ago - Valor: R$225*
5 - Flex Avançado - Prazo: 10/set - Valor: R$300*

*(estes são os valores com 50% de desconto, relativo aos valores previstos para os treinamentos online que serão disponibilizados via Breeze)

IMPORTANTE:
O prazo citado é para entrega DA ÚLTIMA PARTE do conteúdo que será disponibilizado conforme estiver pronto. Os conteúdos 1 e 2 começarão a estar disponíveis a partir do dia 26/jul. Os conteúdos 3 e 4 a partir do dia 13/ago. O conteúdo 5 a partir de 28/ago. Ou seja, o conteúdo mais breve já estará sendo entregue a partir de 3 dias e o mais tardio em aproximadamente 30 dias.

Vale citar que esta pacote NÃO inclui suporte. São materiais de estudo individual que prefiro chamar de tutoriais por este motivo.

Estaremos planejando descontos para quem quiser adquirir os treinamentos online, via Breeze, incluindo suporte, posteriormente. Certamente existirão. Só não posso confirmar ainda o montante, mas estarei confirmando isso ainda esta semana aqui no Blog.

Interessados, por favor entrem contato através do meu email: macieljr@gmail.com

sexta-feira, 13 de julho de 2007

YouTube AS3 API ColdFusion Proxy

Eu estava utilizando a biblioteca AS3 de acesso a API do YouTube desenvolvida pelo Mike Chambers, Daniel Dura e etc, para desenvolver uma aplicação de exemplo com o Flex 2.01 (ainda) e tudo rolou direitinho até a hora de colocar o "brinquedo" pra rodar online.

Essa biblioteca, foi escrita há muito tempo e durante esse período o YouTube fez a famosa e já tão comentada alteração no seu crossdomain.xml que causou a impossibilidade do Flash de fazer requests diretos à sua API. Para quem não sabe, pode ler a respeito aqui ou aqui, por exemplo...

A solução:
Criar um script server-side como proxy para as chamadas da API AS3. Assim, você configura o crossdomain.xml no seu domínio e tá tudo resolvido.

Na preguiça, meu primeiro passo foi procurar no Google pra ver se alguém já tinha escrito um em ColdFusion e disponibilizado. Não sei se não procurei direito mas não encontrei nenhum. Então, não teve outra saída. Criei o meu. E depois de ficar simplificando pra lá e pra cá, ví que apenas 4 linhas de código resolviam a questão:


  1. <cfhttp method="get" url="http://www.youtube.com/api2_rest?#CGI.QUERY_STRING#" charset="utf-8" result="data"/>

  2. <cfset xmlData = xmlParse(data.fileContent)/>

  3. <cfcontent type="text/xml; chatset=utf-8"/>

  4. <cfoutput>#toString(xmlData)#</cfoutput>



Depois é só mudar a referência à chamada da API do YouTube na Classe AS3 com.adobe.wepapis.youtube.YouTubeService.as:

De:

  1. public static var END_POINT:String = "http://www.youtube.com/api2_rest";



PARA:

  1. public static var END_POINT:String = "http://seuserver.com.br/Wrapper.cfm";



Isso basta! E espero que sirva para mais alguém.

Detalhe: A montagem da imagem que consta no início deste post, contém uma foto dos disquetes de instalação do ColdFusion 1.5. Eu estava procurando uma imagem com um logo interessante para ilustrar esse post, quando me deparei com ela e resolvi usar. Lembro de quando recebi estes 15 disquetes por correspondência para iniciar o uso desta tecnologia. Interessante depois de ter feito o Download da última versão Beta com mais de 310MB. Seriam hoje, aproximadamente 258 disquetes! Bom... pelo ao menos, o que evoluiu no tamanho, evoluiu também na qualidade e nos recursos. Já o custo, é bastante inferior ao da época dos disquetes. E pra causar polêmica: Muito mais barato inclusive do que muita opção free por aí! ;-)

terça-feira, 12 de junho de 2007

Treinamentos ColdFusion 7 Básico e Avançado


Estarei ministrando treinamentos de ColdFusion (Introdução ao desenvolvimento de aplicações com CFML / Essencial - 11 a 15 de junho e Desenvolvimento Avançado com CFML - de 18 a 22 de junho) em Salvador.
Fui convidado pela iMedia a realizar estes treinamentos, seguindo o currículum oficial da Adobe com os títulos Fast Track to ColdFusion e Advanced ColdFusion Development. Trata-se de um treinamento diferenciado em relação aos treinamentos particulares voltados a empresas e profissionais da área, que tenho ministrado, onde o conteúdo é personalizado conforme cada necessidade.
Solicito que os participantes deste treinamento, apresentem-se através de comentários neste post e na conclusão do mesmo coloquem sua avaliação com identificação pessoal opcional. A idéia é a de que sejam o mais sinceros possíveis em relação aos seus pareceres.

quinta-feira, 31 de maio de 2007

Mais sobre a "Morte antecipada" do ColdFusion by ComputerWorld

Pois é... como se não bastasse a incompetência original (veja) da ComputerWorld ao publicar uma matéria com a absurda informação muito bem combatida (como pode ser visto aqui) sobre o ColdFusion ser considerado uma das tecnologias mortas ou morrendo na área de TI, a versão brasileira ao invés de pelo menos amenizar o erro (como pode ser visto aqui), vai e simplesmente o repete. Pior é saber que isso deve estar acontecendo em várias línguas diferentes e em vários países, provocando a passagem de uma informação completamente irresponsável a respeito de uma tecnologia, que ao contrário do que a matéria afirma, é simplesmente tão crescente que tal investimento por parte de sua detentora, a Adobe, acaba de ter anunciada uma nova e revolucionária versão, anunciada também com detalhes aqui no Blog. (Veja).

Aliás, já fiz um post sobre este assunto deste anúncio de morte antecipada, como pode ser visto aqui.

Pensar que é proposital e às vezes parece até ser manipulação industrial (no sentido pejorativo), sería dar muito crédito a teorias conspiratórias. Mas confesso que certos absurdos são tão extremos que vale a pena pelo menos levantar a hipótese.

De qualquer maneira fiz questão de colocar a minha opinião a respeito. Veja aqui meu comentário no site da edição brasileira, online, da revista. Convido colegas da área e investidores assíduos da tecnologia a fazerem o mesmo.

Uma das pessoas que já ficaram indignadas com isso é o meu colega de profissão Nino Barreto, daqui de Salvador que já fazendo a parte dele nas críticas por aí. Pena que não tenho nenhum link para que vocês possam ler a opinião dele. (Aliás, Nino, isso é indício de que você devería ter seu próprio Blog).

Mas tentando colocar algo do que já conversei com ele à disposição de quem ler este post, faco a transcrição:

E a Adobe? O que faz/fará a respeito? Ou ainda, o que será que ela podería/pode fazer?

Na nossa (do Nino e a minha também) opinião que é modesta, humilde, e desconhecedora dos procedimentos legais ou convencionais para isso, a Adobe devería sim manifestar-se a respeito dado o enorme impacto que isso causou na comunidade em torno do ColdFusion ao redor do mundo, e por isso justamente aparecer justo (coincidência?) quando uma nova versão da sua tecnologia é anunciada.

Por que levantar essa questão? Sobre o que a Adobe devería fazer (nos mesmos critérios de opinião já descritos aqui)?

Simples...

A Tecnologia é paga. Quem trabalha com ela, seja diretamente (usando o software nas dependências técnicas da empresa onde atua) ou indiretamente (com prestação de serviços, tais como treinamentos, consultoria, etc) e a partir de Hosts contradados para hospedar sites e etc, investe dinheiro e luta para ver cada vez mais a tecnologia ser difundida e com isso passar a ter benefícios indiretos, como a diminuição em custos devido ao aumento de demanda para os que disponibilizam tais recursos.

A dificuldade de se ter material de referência é enorme. O que se tem disponível é na maioria das vezes ofertado pela própria comunidade desenvolvedora que luta para o aumento da comunidade desenvolvedora em torno do ColdFusion. Até mesmo o que se tem disponível no excelente trabalho que a Adobe faz com o DevNet, tem origem em 90% (chutômetro) dos casos na própria comunidade e pouquíssimo é de origem da fonte, ou seja, funcionários técnicos da Adobe. Claro, vamos respeitar o trabalho do Ben Forta.

Bom... são justificativas suficientes para dizer que a comunidade faz e muito bem a sua parte, mas eu sinto sim (e pelo jeito, assim como o Nino, muitos mais) a necessidade de ver uma atitude direta da Adobe a respeito.

Nada aqui sugere que a Adobe não faz um excelente trabalho (na minha opinião), mas que o caso em específico me parece exigir uma atitude à parte, é claro para mim.

Conteúdo adicionado após publicação da matéria:

- Errata publicada pelo editor-executivo da ComputerWorld Brasil
- Minha resposta para a errata publicada pelo editor-executivo da ComputerWorld Brasil

quarta-feira, 30 de maio de 2007

ColdFusion 8 Beta disponível para todos

Faça o download no Adobe Labs e teste a versão mais esperada e implementada do ColdFusion.

Alguns dos principais recursos e características da nova versão:

Novas Tags e funções:

  • Implementação e adição de tags para suporte a interfaces AJAX (cflayout, cflayoutarea, cfpod, cfwindow, cfmenu, cfmenuitem, cftooltip, cfdiv)
  • Tags de suporte a aplicações AJAX (cfajaxproxy, cfajaximport)
  • Wizards na forma de plugin para Eclipse para a geração de aplicações AJAX de forma instantânea.
  • Funções de suporte a JSON
  • Acesso a elementos .Net através da tag cfobject e a função createObject
  • Tag cffeed para implementação encapsulada de funcionalidades RSS
  • Manipulação de documentos PDF coma tag cfpdf
  • Manipulação e controle de formulários PDF pré-existentes através da tag cfpdfform e tags adicionais
  • Controle de impressão de PDF através da tag cfprint
  • Integração de aplicações ColdFusion com o Flash Media Server através do FMS Event Gateway com o qual podem ser feitas alterações nos objetos SharedObject de uma aplicação FMS refletidas aos clientes conectados e vice-versa (alterações originadas dos clientes refletem na aplicação ColdFusion)
  • Ampla melhoria na integração com o Flex incluindo: Notificações por parte do ColdFusion a aplicações Flex que estejam consumindo dados gerados através de um request ao mesmo, Typing de dados de queries mais precisos na conversão para Actionscript, etc...
  • Integração com o Microsoft Exchange Server através da tag cfexchange e auxiliares
  • Habilidade de criação e manipulação dinâmica de imagens através da tag cfimage
  • Habilidade de manipulação de arquivos .Zip e .Jar com a tag cfzip

Administração e configuração:
  • Monitoração de uma única instância de servidor, ou de múltiplas instâncias através de uma aplicação com interface em Flash com análise de dados em tempo real sobre o estado dos mesmos.
  • Possibilidade de desativação do recurso de criação dinâmica de objetos Java
  • Configurações isoladas/individualizadas por aplicações
  • Habilitação de suporte RDS por servidor ou por usuário
  • Possibilidade de acesso à interface de administração do Administrador, configurada e restrita por usuários e não apenas por um único administrador.
Debugging:
  • Plugin Eclipse para o debug linha-a-linha de aplicações em ColdFusion
Melhorias na linguagem CFML:
  • Controle sobre THREADs através da tag cfthread a partir da qual pode-se criar, finalizar, agregar ou suspender-se temporáriamente threads no servidor.
  • Atributos de uma tag podem agora ser passados através de uma variável tipo collection.
  • CFC Interfaces que possibilitam a definição de interfaces para objetos ColdFusion (CFCs)
  • O CFC pode implementar um método denominado onMissingCFC para servir de responder para a chamada de métodos que não constarem em um CFC
  • O Application.cfc possibilita a implementação de um método denominado onMissingTemplate para responder a chamada de arquivos .cfm que não existam.
  • Serialização de CFCs para permitir que em um Cluster com variáveis de sessão do tipo J2EE, as mesmas possam ser compartilhadas entre os servidores.
  • Criação de arrays e structures em modo in-line. Ex: estrutura={dado1: "valor1"} / aarray = ["dado1", "dado2"]
  • Novas funções para manipulação de arquivos, antes implementadas somente através de tags, tais como: FileClose, FileIsEOF, FileOpen, FileRead, FileReadBinary, FileReadLine, FileWriteLine, FileWrite, FileDelete, FileMove, FileCopy, etc. Importante saber que todas estão otimizadas para trabalhar com grande quantidade de arquivos e arquivos pesados.
  • Novas funções relacionadas ao procedimento e manutenção de login: IsUserInAnyRole, GetUserRoles, IsUserLoggedIn
  • Habilidade de utilização de operadores Javascript (++, --,
  • %, +=, -=, *=, /=, %=, &&, ||, !)
E diversos outros recursos no acesso a Banco de dados e saída de dados que eu vou apresentar em outros posts, bem como exemplos dos recursos acima citados.

Enfim, quem acha que o Coldfusion está morto ou morrendo mesmo? (risos)

segunda-feira, 28 de maio de 2007

Resenha: Palesta Apollo na UNIFACS

Em primeiro lugar, muito obrigado à todos que compareceram à minha palestra, realizada no último dia 26 de maio na UNIFACS (Imbuí/Salvador/Bahia). Mesmo em um dia de chuva, muita gente acordou cedo para ouvir o que eu tinha a dizer e pude perceber a atenção com a qual o conteúdo foi recebido. Meus sinceros agradecimentos!

Segue aqui, conforme prometido, uma resenha sobre o conteúdo abordado.

1 - Recapitulando o que foi discutido na palestra anterior (21/abr/07).

Na oportunidade anterior, apresentamos o Apollo e seus principais conceitos apresentando-os através dos seguintes tópicos:

  • O que é o Apollo?
  • Qual o objetivo do Apollo?
  • O que se pode fazer com o Apollo?
  • A nova realidade para designers e developers
Foi realizado uma revisão desses itens, aproveitando para nos comunicarmos em uma lingaugem mais direta e desta vez com a utilização de diagramas para explicar o que é o Apollo e como o mesmo apresenta sua funcionalidade em comparação ao FlashPlayer instalado na forma de um controle ActiveX ou Plugin sobre o Sistema Operacional. Desta forma pudemos explicar a diferença das aplicações desenvolvidas utilizando-se a tecnologia Flash-Platform para o modelo anterior ao Apollo e após a sua introdução. Isso ajudou a deixar claro para os participantes, qual o objetivo do Apollo.

Diversos exemplos de aplicações foram apresentados para os participantes presentes, demonstrando o poder do Apollo e principalmente os recursos diferenciais que este disponibiliza aos desenvolvedores. Para uma fácil referência, utilizei os exemplos citados pela própria equipe da Adobe no site http://labs.adobe.com . Dentre os principais:

- Finetune. Discutindo inclusive sobre a importância do Apollo em uma análise particular do modelo de comércio possibilitado a partir de sua introdução.
- Fresh. Demonstrando a riqueza de interação já conhecida possibilitada pelo Flash/Actionscript em Rich Internet Applications, e adicionalmente um uso importante do recurso de renderização de HTML/CSS/Javascript possibilitado pelo controle HTML presente para esta finalidade.
- DryerFox. Demonstrando um uso divertido do controle HTML.
entre outros...
- Tweetr. Mais uma implementação de integração com o site Twitter.com. Para quem ainda não sabe, trata-se de um site estilo Blog Instantâneo onde as pessoas publicam simplesmente o que estão fazendo a cada momento. Curiosamente, aconselho conhecer o projeto TwitterVision 3D que não foi apresentado na palestra. Trata-se de mais uma interessante aplicação de integração com o Twitter, desta vez desenvolvido em Flex, integrando uma API 3D.

Finalizando esta primeira parte da agenda, discutimos sobre um novo cenário de oportunidades para designers e developers, debatendo principalmente sobre o baixo impacto de investimento intelectual (portanto, consequentemente financeiro) para aproveitamento destas oportunidades, uma vez que todo o conhecimento necessário por parte dos desenvolvedores de soluções web, são simplesmente reutilizados para a abordagem de soluções desktop adicionais, complementares ou isoladas de conteúdos e/ou soluções já desenvolvidas utilizando as tradicionais ferramentas Adobe para este propósito (Flash, Actionscript, Flex, Dreamweaver, Fireworks e uma linguagem server-side semelhante em funcionalidade ao Coldfusion).

2 - Últimos acontecimentos:

Nesta segunda parte, apresentei aos participantes do evento, notícias a respeito dos principais acontecimentos que influenciaram o meio relacionado ao Apollo. Os principais temas foram:
Apresentamos a notícia do Flex open-source abordando inclusive assuntos relacionados à mudança de estratégia e importância da aquisição da Macromedia por parte da Adobe no que diz respeito principalmente à influência deste acontecimento na estratégia de comercialização e abordagem comercial sobre os produtos herdados desta aquisição. Foi possível avaliar as boas consequencias disto para a comunidade desenvolvedora e tentar arriscar inclusive apostas em notícias semelhantes quanto à outros produtos da Adobe, inclusive o Apollo, consequencia que parece ser até mesmo óbvia.

Anunciei aos que ainda não sabiam da notícia, a API disponibilizada publicamente por Matt MacLean em seu site, ainda sem um modelo de licença definido por tratar-se de um experimento, que permite o acesso direto (sem o uso de um middleware) ao banco de dados mySQL.
Para exemplificar o seu uso de maneira rápida, apresentei o seguinte código fonte, disponível aqui de forma completa (com comentários inclusive) pois nos slides ele encontrava-se particionado por razões claras aos presentes (resolução de vídeo, melhor apresentação, etc.):

<?xml version="1.0" encoding="utf-8"?>
<mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" width="400" height="320" resizable="false">
<mx:Script>
<![CDATA[
//importação das classes referentes à API disponibilizada em http://maclema.com/asql
//desenvolvida por Matt MacLean
import pl.mooska.asql.*;
import pl.mooska.asql.events.*;

//declaração da variável que irá manter os dados recebidos.
//a metatag [Bindable] permite que a mesma seja utilizada como valor de
//parametro em tags MXML que necessitem ter acesso à mesma.
//no exemplo atual, vamos defini-la como a fonte de dados do data-grid
//de nome de instância "grid", através do parâmetro "dataProvider" que
//o controle do tipo grid disponibiliza
[Bindable]
public var recordset:Array;

//instancia da conexão com o banco de dados mySQL
private var connector:Asql;

//uma variável para manter as mensagens à serem apresentadas no
//controle tipo label que temos na interface
//o "bind" desta variável será utilizado no parametro "text" do
//controle "label" instanciado como "lblMessage" na porção MXML
//deste código
[Bindable]
public var connectorStatus:String;

public function startApp():void{

connector = new Asql();

connector.addEventListener(SQLEvent.CONNECT, onConnect);
connector.addEventListener(SQLEvent.SQL_OK, onProcessed);
connector.addEventListener(SQLEvent.SQL_DATA, onData);
connector.addEventListener(SQLError.SQL_ERROR, onError);

connector.connect("ip_ou_dominio", "usuario", "s3nh4", "nome_do_banco");
connectorStatus = "Tentando conectar...";

}

private function onConnect(e:SQLEvent):void{
connector.query("SELECT * FROM tabela");
connectorStatus = "Conexão OK! Solicitando dados...";
}

private function onProcessed(e:SQLEvent):void{
//actions for an ok update or insert action result
connectorStatus = "Dados processados!";
}

private function onData(e:SQLEvent):void{
recordset = e.data;
connectorStatus = "Dados recebidos!";
}

private function onError(e:SQLError):void{
connectorStatus = "Erro na conexão!";
}

]]>
</mx:Script>
<mx:Label text="Apollo x MySQL access sample" fontFamily="Verdana" fontWeight="bold" fontSize="16"/>
<mx:DataGrid id="grid" dataProvider="{recordset}" width="298"/>
<mx:Button label="Connect and get data" width="159" id="btn" click="startApp()"/>
<mx:Label text="{connectorStatus}" width="301" textAlign="center" fontWeight="bold" color="#ff0000" id="lblMessage"/>
</mx:ApolloApplication>




ATENÇÃO:
No código acima onde temos:

connector.connect("ip_ou_dominio", "usuario", "s3nh4", "nome_do_banco");


Deve-se alterar o seguinte:
ip_ou_dominio: o IP do servidor onde encontra-se a instância do seu banco de dados mySQL ou o seu nome de domínio. Exemplo: 192.168.0.1 ou localhost
usuario: o usuário no servidor mySQL que possui acesso ao banco de dados que irá ser consultado.
s3nh4: a senha respectiva ao usuário especificado.
nome_do_banco: nome do banco de dados no servidor mySQL contra o qual será feita a consulta.

O seguinte esquema pode ser utilizado para criar a tabela de exemplo no seu servidor mySQL caso você queira testar o código acima:

CREATE TABLE `users` (
`username` varchar(15) default NULL,
`id` int(10) unsigned NOT NULL auto_increment,
`fullname` varchar(45) default NULL,
PRIMARY KEY (`id`)
) TYPE=InnoDB;

INSERT INTO `users` (`username`, `id`, `fullname`) VALUES
('vpmjr', 1, 'Vicente Junior'),
('commander', 2, 'Neil Armstrong'),
('moonPilot', 3, 'Edwin Aldrin'),
('commandPilot', 4, 'Michael Collins');

Você deverá ter instalado e configurado devidamente os seguintes softwares para proceder com o teste e saiba operá-los:
Caso você ainda não tenha instalado e configurado os softwares acima, aguarde pois estarei publicando tutoriais a respeito destes procedimentos em breve.

Adiante, discutimos a respeito dos seguintes temas:

Sería o Silverlight finalmente o tal do FlashKiller? Uma ameaça? (sub-tema: Já não ouvimos esta história antes?) Definitivamente não existe esta comparação e isso ficou muito claro ao final da discussão. O posicionamento de ambos é totalmente diferente. Farei mais posts a respeito deste assunto aqui no Blog.

Após isso, introduzí à questão apenas por intenção de adicionar informação aos presentes, o JavaFX e também discutimos quanto ao seu posicionamento. Ficou evidente que o Silverlight e o JavaFX são concorrentes diretos mas que o Apollo possui algusn diferenciais importantes a começar por seus fundamentos e objetivos que são divergentes a estes dois. Como no tópico do Silverlight, mais posts serão colocados aqui abordando o tema mais profundamente.

Finalizando

Tratamos a respeito de conhecimentos necessários para começar a desenvolver com o framework do Apollo, treinamentos que estou ministrado para implementar ou complementar tais pré-conhecimentos, bem como os treinamentos voltados exclusivamente para o Apollo que já estou ministrando (extra-oficialmente) para os usuários interessados.

Caso você esteja interessado em algum treinamento, leia os detalhes disponíveis neste post e entre em contato a partir do meu email.

Os treinamentos são ministrados individual e particularmente, bem como para grupos/empresas.

Até a próxima! Mais posts a respeito dos assuntos aqui abordados estarão disponíveis nos próximos dias.