quarta-feira, 23 de dezembro de 2009

Palestras / Treinamentos

Este ano foi particularmente diferenciado na minha vida profissional.

Sempre fui desenvolvedor, nunca tinha ministrado cursos ou palestras, mas neste ano isso mudou. Primeiramente foi um convite do Igor Costa para uma palestra online no FlexMania realizado nos dias 06 e 07 de julho onde palestrei sobre Criando e estendendo componentes para o Flex 3.

Neste último trimestre já ministrei três treinamentos,
Programação ActionScript com Flash CS4 na Alfamídia e Desenvolvimento de Aplicativos com Adobe Flex e Acesso a dados com Adobe Flex na TargetTrust. Todos estes sobre indicação da Gabriela Trindade.

Agora para janeiro irei ministrar um treinamento na Feevale sobre AS3 no Flash para professores e alunos
de um projeto de extensão chamado ENGNATV, também sobre indicação da Gabriela, fico devendo algum churrasco para ela, hehehehe.

É muito bom poder passar o conhecimento adquirido para outras pessoas. Espero que em 2010 outras oportunidades como estas ocorram.

quinta-feira, 17 de dezembro de 2009

Flex For Kids 2010

Dia 06/02/2010 será realizado o evento Flex For Kids 2010 com 10 palestras on-line com grandes nomes da comunidade Adobe Flex brasileira.

Para participar é só R$ 30,00. Todo dinheiro arrecadado será doado ao Cotolengo de Mato Grosso do Sul.

Além de ótimas palestras você ainda irá ajudar uma boa causa.

Este evento está sendo organizado pela e-Genial, aos quais dou meus parabéns.

Participem e divulguem.

sexta-feira, 11 de dezembro de 2009

Livros Zend (PHP) + Flex (Português)

Já fiz curso de PHP, mas não trabalho diretamente com esta ferramenta, o meu forte mesmo em backend é Java.

Mas para quem trabalha e precisa se aprofundar na integração PHP + Flex, um framework que tenho visto as pessoas nos fóruns e listas falarem bem é o Zend Framework. Além da boa aceitação do público, ano passado a Zend e a Adobe montaram uma parceria para melhorar a integração do Zend com o Flex.

Pesquisando encontrei dois livros do Zend que pela sinopse parecem muito bons:
Um livro que fala da integração entre estas duas ferramentas é o livro Desenvolvendo sistemas com Flex e PHP de Daniel Pace Schmitz que possue um capítulo falando desta integração. Já tinha comentado sobre este livro num post anterior.
O Daniel está para lançar o livro Dominando Flex e Zend onde irá falar mais sobre esta integração.

segunda-feira, 23 de novembro de 2009

Style backgroundColor não funciona com styleFunction no AdvancedDataGrid

Uma coisa que me chamou a atenção quando criei o componente DateChooserCustom é que em algumas classes / interfaces backgroundColor aparece como propriedade e não como estilo. As classes / interfaces onde isto acontece são: flash.text.TextField, mx.core.IUITextField, mx.preloaders.DownloadProgressBar e mx.preloaders.IPreloaderDisplay. Inclusive as duas primeiras possuem além disso uma propriedade background (Boolean) que indica se haverá preenchimendo do background.

Precisei nestes dias utilizar styleFunction no AdvancedDataGrid retornando um backgroundColor. Para quem não sabe
styleFunction é uma função que deve retornar um object com estilos como propriedade para ser utilizada na renderização das células. Para minha surpresa este estilo não estava sendo aplicado enquanto que outros sim. Investigando aqui e ali descobri uma entrada no Adobe Bug System relatando a mesma situação (necessita login para visualizar), onde postei um workaround.
Dica: Quem quiser votem, porque quanto mais votos maior a possibilidade do Flex Team darem uma olhada.

O que acontece é o seguinte, o
itemRenderer default é um AdvancedDataGridItemRenderer que extende UITextField que implementa IUITextField que como comentado acima tem backgroundColor como propriedade.
Os estilos são aplicados na função protected
applyUserStylesForItemRenderer, esta verifica se existe um styleFunction para o grid e para coluna e os aplica, nesta ordem, o que significa que o da coluna terá prevalência se o grid e a coluna aplicarem o mesmo style.

Devido o código desta função o workaround não ficou dos mais elegantes, mas o que fiz foi sobreescrever esta função e verificar se o style é
backgroundColor, se for coloco true na propriedade background e na propriedade backgroundColor aplico a cor recebida sendo que esta verificação deve ser aplicada no teste do styleFunction do grid e da coluna.

Uma alternativa mais elegante seria criar um item renderer customizado que herde de
AdvancedDataGridItemRenderer e criar neste um style substituto ao backgroundColor.

sexta-feira, 20 de novembro de 2009

Flex SDK 3.5

Ao entrar hoje no Adobe Bug System do Flex vi que tem correções para o Flex SDK 3.5 (exige login), mas olhando no site de download do Flex ainda está oferecendo o 3.4.
Acredito que logo estará disponível o SDK 3.5 para download.

Foram 23 correções
(exige login para ver mais detalhes):
  1. #1010 runtime error when repopulating datagrid dataprovider while a field is editable
  2. DataGird which contains TextInput as ItemRenderer sets focus incorrectly.
  3. DataGrid default sorting causes "Find criteria must contain at least one sort field value" RTE when some of the elements are empty
  4. DataGrid scrolls more than 1 page even if you click scroll-bar-area (=the area in the scrollbar's thumb movable)
  5. DragManager performance problem with SDK 3.2.0 and later.
  6. DragManager.showFeedback doesn't work in AIR
  7. DragManager.showFeedback doesn't work in AIR (Mac only)
  8. Embedded Fonts in DataGridHeader are cut off on right border
  9. Encoded plus sign (%2B) is decoded incorrectly in HTTPService with flashvars format
  10. Error #1063 when using a DataGrid as the dropdown in a ComboBox in Flex 3.4.0.9271
  11. Focus to DataGrid causes RTE when lockedColumnCount is equal to or larger than visible column count
  12. FocusManager RTE in defaultButton scenario. was: Navigating around LiveCycle Workspace results in an ActionScript null pointer error
  13. HTTPService responders are called twice
  14. Halo ComboBox not updating dataprovider correctly after ComboBox has been opened
  15. Horizontal text overflow in Tree when vertical scrollbar hidden, shown.
  16. Inifinite Loop on FocusManager when Tabbing
  17. No data while using "Object" as "resultFormat" for Sharepoint WebService
  18. StringIndexOutOfBoundsException when using a properties-File
  19. Using Window's statusBarFactory while having window children causes status bar to render incorrectly
  20. Using a TextInput as an itemRenderer in TileList or HorizontalList causes a RTE
  21. [new] You get a RTE when setting selectedItem to an invalid item [old] Using a Tree as an itemRenderer causes a RTE
  22. maxHorizontalScrollPosition exceeds max value of horizontalScrollPosition
  23. swf app in browser doesn't load due to exception in new line added to Preloader:rslCompleteHandler

terça-feira, 17 de novembro de 2009

Flash Player 10.1 e AIR 2

Para quem está aguardando foi liberado o Flash Player 10.1 prerelease e o AIR 2 beta.

Estas novas versões trazem muitas novidades que podem ser vistas nos sites informados acima.

quarta-feira, 28 de outubro de 2009

Protegendo o SWF

Um assunto que surge frequentemente nas listas de discussão e que também me é questionado diretamente é como proteger o swf de pirataria.

Na verdade nunca me preocupei muito com isso, porque descompiladores há aos montes e ferramentas para proteger também, independente da linguagem de programação. As ferramentas de proteção até onde vi são "ofuscadores", isto é, elas trocam os nomes de propriedades e funções dificultando assim a interpretação, mas nada que não pode ser facilitado com um replace all.

Entendo que esta preocupação é porque o swf é baixado para a máquina do cliente, mas esta é só a camada de visão as regras de negócio, que é o mais importante, devem ficar no servidor e neste caso, precisamos nos preocupar com esta ponta, e aí pergunto, como proteger o código de linguagens interpretadas como o PHP?

Me preocupo com a segurança dos dados, com sql injection, uso de https, criptografia de senhas, etc.

Analisar um código de outra pessoa não é nada fácil, cada um programa de uma forma, além que o "pirata" precisa conhecer as linguagens que foram usadas para criar a aplicação.
Neste caso pergunto, será que vale o tempo gasto para entender um código descompilado?
Imagine um ERP, não adianta só entender o código descompilado, será necessário entender o fluxo deste tipo de aplicação e também as leis aplicadas, como as de ICMS, etc.

Em resumo, acredito que a possibilidade de ter o trabalho "pirateado" é tão pequena que não compensa tanta preocupação.

terça-feira, 13 de outubro de 2009

Global error handling

Uma das novidades do Flash Player 10.1 que achei muito interessante é o Global error handling.

Como acontece no Java onde a exceção é "jogada" para cima até a rotina que iniciou o processo, isto se não tiver nenhum try/catch tratando a exceção, assim também ocorrerá no novo Flash Player. Com isso, será possível criar uma única rotina de tratamento de erros.

Saiba mais sobre esta e outras features nos links adicionais do meu post anterior.

terça-feira, 6 de outubro de 2009

Flash Mobile

De todas as ferramentas para desenvolvimento RIA, deixo claro que prefiro o Flex.
Mas, uma preocupação que tinha é o Flash não rodar em Mobile, um mercado muito lucrativo.
Mas a Adobe não está perdendo tempo, ela anunciou o Flash Player 10.1.

Veja mais detalhes no blog do Igor Costa e também neste.

quarta-feira, 30 de setembro de 2009

Tree - item selecionado é branch?

Se for necessário saber se o item selecionado de uma Tree é um branch (pasta) ou não você pode usar a propriedade dataDescriptor da Tree. Por exemplo, numa função que é listener do evento itemClick da Tree você pode testar:

private function itemClickHandler(event:ListEvent):void {
var isBranch:Boolean = myTree.dataDescriptor.isBranch(myTree.selectedItem);

Alert.show((isBranch) ? "Pasta" : "Folha");
}

quinta-feira, 24 de setembro de 2009

Controle de Versão do Flex Builder

No Flex Builder tem um "mini" controlador de versão que você encontra nas opções: Compare / Team / Replace with > Local History quando se vai com o botão direito sobre o arquivo. Cada save de arquivo gera uma nova entrada no histórico local.
Pode-se comparar uma versão com outra do mesmo arquivo, em Compare / Team > Local History marcando as entradas que se quer comparar, clicando com o botão direito e selecionando Compare with each Other.

Este recurso é básico, por isso, o melhor é instalar um verdadeiro controlador de versões, e neste caso recomendo o SubVersion e o plug-in do Eclipse SubEclipse.
Na JavaMagazine 64 saiu um artigo sobre estas duas ferramentas, explicando as diferenças entre SVN e CVS e também explicando como instalar um servidor SubVersion e como utilizar o SubEclipse. Mesmo para projetos com único desenvolvedor o uso de controlador de versões é recomendado.


Neste link tem uma documentação técnica do SVN.

quarta-feira, 23 de setembro de 2009

Novidades do Flex 4

Recebi de um colega um artigo sobre as novidades do Flex 4, escrito pelo Daniel Schmitz.
Recomendo para quem quer usar o Flex 4 ou quer saber o que vai mudar, o artigo é muito bom, vai direto ao ponto.

Já coloquei nos meus bookmarks.
O link para o artigo é este.

sexta-feira, 28 de agosto de 2009

Source code formatter for MXML/AS3

Tenho usado este plug-in já faz algum tempo e recomendo.

Fonte: http://www.newsight.de/2009/02/09/source-code-formatter-for-mxmlas3/

Outro plug-in é o sugerido pelo Eduardo Kraus no seu post: Ctrl+Shift+F no Flex Builder.

segunda-feira, 24 de agosto de 2009

Bug de Segurança no Flex SDK

Pessoal foi liberada uma correção de segurança para o Flex SDK.
Maiores detalhes aqui.

Palestra – Empreendendo com soluções Adobe para plataforma RIA

Dia 27/08 haverá mais uma palestra on-line e gratuita ministrada pelo Igor Costa. Para mais detalhes veja.

quarta-feira, 12 de agosto de 2009

Recebendo parâmetros via url

No navegador podemos executar um arquivo swf de duas formas, uma é chamando-o diretamente no campo de url, tipo: http://www.myhost.com/MyApp/MyApp.swf ou embutido numa página html como podemos ver no arquivo index.template.html da pasta html-template dos nossos projetos Flex.

Você passa parâmetros no padrão url: swf?parm1=valor1[&parm2=valor2][&parmN=valorN]

Exemplos:
link direto:
http://www.myhost.com/MyApp/MyApp.swf?id=1&uf=RS
html-template:
AC_FL_RunContent("src", "Teste?id=1&uf=RS", "flashVars", "t=50");

Nota:
via
html-template você pode usar src e flashVars juntos, mas se um parâmetro aparecer nos dois, valerá o do flashVars.

E agora no lado Flex você os recebe usando a propriedade parameters de Application.

sexta-feira, 31 de julho de 2009

Protected Property textField

Alguns componentes possuem uma propriedade protected textField que é o internal UITextField que renderiza o texto. Olhando a API se vê que os objetos que possuem esta propriedade são: Button, Label, TextArea, TextInput e ToolTip.
Este objeto possui comportamentos que às vezes não estão acessíveis diretamente pelo controle que o possui tipo htmlText e wordWrap.

Mas se precisarmos usar estas propriedades temos duas formas, como o atributo textField é protected é só extender o controle e acessar esta propriedade de dentro da nossa classe customizada fazendo as alterações que desejamos e a outra é usar o método mx_internal getTextField que retorna este objeto para nós como no exemplo abaixo:

import mx.core.mx_internal;
use namespace mx_internal;

myTextInput.mx_internal::getTextField().wordWrap = true;

quarta-feira, 29 de julho de 2009

Flex na OTAN

Recebi esta notícia de um amigo meu, a notícia é de 2008 mas mesmo assim quis compartilhar com vocês.

É gratificante saber que o Flex é usado por grandes empresas ou entidades em
softwares de missão crítica, isso nos mostra que o Flex é uma ferramenta robusta reconhecida mundialmente.

Aqui o link da notícia: OTAN adota o Adobe Flex para Sistema de Suporte

segunda-feira, 27 de julho de 2009

ASDoc - Documentando o seu código

Documentar o código é muito importante, não só para outros desenvolvedores que podem vir a olhar o seu código, mas também para você mesmo. Imagine você olhando um código complexo daqui a seis meses, por exemplo, só olhando o código você pode vir a precisar alguns preciosos minutos até se lembrar o que esta rotina faz, mas se tiver uma documentação, um comentário explicando, as coisas se tornam bem mais fáceis.

No java temos o JavaDoc e no Flex / AS3 temos o ASDoc.
Em vez de escrever mais sobre esta ferramenta vou indicar dois links muito bons sobre o assunto, são eles:
Este explica a sintaxe: Documentando código Flex (MXML e ActionScript)
Este como colocar usar em MXML: Adding ASDoc Comments to Flex MXML files

quarta-feira, 15 de julho de 2009

Getters and Setters

Para quem vem de Java vai ser mais fácil se familarizar com Flex / ActionScript.
Por exemplo, getters e setters tem o mesmo conceito mas tem uma diferença grande.

No Java um método getter ou setter é um método como qualquer outro método onde o nome se convencionou que seja: get/setAtributo, onde a primeira letra do nome do atributo fica maiúscula:
Ex.:
private String nome;

public String getNome() {
return this.nome;
}

public function setNome(String value) {
this.nome = value;
}
Enquanto, que no Flex temos métodos especiais get e set o que torna o código mais intuitivo pois podemos fazer referência direta a propriedade como se esta fosse pública. Ex.:
private var _nome:String;

public function get nome():String {
return this._nome;
}

public function set nome(value:String):void {
this._nome = value;
}
E via código podemos usar:
var nome:String = obj.nome; // em vez de obj.getNome();
obj.nome = "Fabio"; // em vez de obj.setNome("Fabio");

terça-feira, 14 de julho de 2009

As 10 Maiores Mudanças no Flex 4

Outro artigo que estava lendo que achei interessante compartilhar é este: http://www.infoq.com/br/articles/top-10-flex4-changes
Fala das principais alterações no Flex 4. Recomendo a leitura.

Action Script 3 para Programadores Java

Achei um artigo interessante para quem está iniciando, principalmente para quem estiver vindo do Java.
Dá noções básicas sobre AS3. Muito bom.

O link é este: http://www.infoq.com/br/articles/actionscript-java

JPAUtil

Estou disponibilizando uma classe utilitária para o uso de JPA.

Tudo começa no método init onde deve ser passado como parâmetro o nome da Persistent Unit que será utilizada pelo restante da classe.

Ela pode ser baixada aqui.

quinta-feira, 9 de julho de 2009

FlexMania - Gravações

Para quem não pôde acompanhar a FlexMania, todas as apresentações foram gravadas e agora estão disponíveis para serem vistas.

As gravações e os arquivos estão disponíveis aqui.

quinta-feira, 2 de julho de 2009

CollapseMenuH

Pessoal estou liberando mais um controle.
É um menu retrátil ao estilo do Flex 2 Style Explorer.
Foi criado como menu, com um Tree interno, mas vocês podem alterá-lo a vontade para ter outros objetos internos em vez da Tree.



Ao clicar em qualquer região abaixo da seta terá o mesmo efeito de ter clicado diretamente na seta.
Vocês podem baixá-lo aqui. Este zip vocês podem importar diretamente para o Eclipse usando File > Import, e dentro dele há uma pasta bin onde se encontra o swf.

domingo, 28 de junho de 2009

Mercado de Trabalho - Opinião

O mercado de trabalho varia de UF para UF, mas as que eu sinto que tem um mercado mais aquecido são: Paraná, Santa Catarina e São Paulo.
Já vi empresas oferecerem 1800 CLT para programador júnior, sei que sênior ganha em torno de 50 - 60 reais horas como PJ.

Existem várias empresas usando Flex:
DataSul - SC
DClick - SP
SAP - Unisinos São Leopoldo - RS
Companhia Nacional de Abastecimento - CONAB
Entre outras

Resumindo vejo um mercado promissor para programadores Flex.

sábado, 27 de junho de 2009

Novos Livros em Português

Até agora tínhamos somente o Adobe Flex Builder 3.0 - Conceitos e Exemplos de Daniel Pace Schmitz. Agora temos mais três:
Isto é muito bom para nossa comunidade Flex e também um sinal que o Flex está ganhando força no mercado brasileiro.

sexta-feira, 26 de junho de 2009

Flex Mania 2009

Acabou a expectativa, nos dias 6 e 7 de julho irá ocorrer o evento Flex Mania 2009, serão várias pelestras online, cada uma com uma hora de duração abordando os mais diversos assuntos sobre Flex e RIA. Serão 20 palestrantes, 17 brasileiros (entre eles eu) e 3 convidados internacionais.

Para saber mais detalhes acesse o site do evento e participe.

segunda-feira, 15 de junho de 2009

Aguardem...

O meu blog tem estado sem a devida atenção ultimamente, a correria é grande, pretendo me organizar melhor nos próximos dias.

Mas o importante é que a comunidade Flex não fica parada .........

quarta-feira, 6 de maio de 2009

Método construtor - Singleton

Em AS não existe uma forma de criar um método construtor de uma classe como private para assim podermos usar o Design Pattern Singleton.

Métodos construtores só podem ser public sendo opcional a sua presença.

Se a sua classe herda de outra é uma boa prática fazer a chamada explícita ao método construtor da superclasse usando super(), mas caso você esqueça não tem problema, se o compilador não encontrar esta chamada, então ele irá colocar como primeiro comando do seu construtor.

Se você não criar um método construtor também não tem problema, pois o compilador cria um método construtor vazio colocando super() dentro.

Outra coisa interessante é que você pode usar o comando return no método construtor, desde que não retorne nenhum valor.

Mas se você precisar usar o Design Pattern Singleton você pode usar o seguinte código:

package mypackage {
public class ClassSingleton {
private static var instance:ClassSingleton;

public function ClassSingleton(enforcer:SingletonEnforcer) {
if (enforcer == null) {
throw new ReferenceError("Essa classe é Singleton. Utilize getInstance.");
}
}

public static function getInstance():ClassSingleton {
if (ClassSingleton.instance == null) {
ClassSingleton.instance = new ClassSingleton (new SingletonEnforcer());
}

return ClassSingleton.instance;
}
}
}

/** Classe utilitária para proibir o acesso ao construtor da classe Singleton. */
class SingletonEnforcer { }

quarta-feira, 29 de abril de 2009

Por onde começar

Para quem está começando a estudar Flex espero poder ajudar com este post.

Algumas coisas que precisam ficar claras:
Flex não faz acesso aos arquivos da máquina (por questões de segurança, o AIR pode) e também não faz acesso direto ao banco de dados, o AIR consegue via SQLLite.
Resumindo, o Flex
é responsável pela parte view de sua aplicação, a parte que é mostrada para o cliente, o resto, regras de negócio, persistência, etc devem ficar na responsabilidade do server-side da sua aplicação.

Flex pode se comunicar com qualquer server:
Java, PHP, .Net, entre outros. As formas de comunicação são: HttpService (requisições http devolvendo xml, ou uma string, por exemplo, veja a propriedade resultFormat), WebService e RemoteObject, esta última na minha visão é a melhor.
Com RemoteObject você "liga" uma classe ActionScript com uma classe Java, por exemplo, trafegando entre as camadas client e server objetos e não xml. Para isso é necessário alguém que faça a serialização / desserialização entre as camadas, por ser binário a comunicação se torna mais rápida do que os outros métodos, para o Java temos o Adobe BlazeDS e o GraniteDS, para PHP temos o AMFPHP, para .Net o FluorineFX e o WebOrb.

Softwares necessários
Saiba o seguinte, o SDK do Flex com os componentes básicos é free, para você utilizar os gráficos e o AdvancedDataGrid comercialmente será necessário você comprar o IDE Flex Builder Professional.
Você pode ver as diferenças no link: http://www.adobe.com/products/flex/upgrade/
Você pode baixá-los aqui. Aqui o Flex Builder (FB) é uma cópia trial de 60 dias, (fica uma tarja nos gráficos e no AdvancedDataGrid), existe também a versão para estudantes sem a tarja mas que não pode ser utilizada comercialmente que pode ser solicitada aqui.

O FB se baseia no Eclipse 3.3, ele pode ser instalado como stand-alone ou como plug-in do Eclipse, esta última sendo preferível, já que pode-se usufruir de outros recursos do Eclipse como programação em Java.

Sites, documentação e cursos
Existe vários livros em inglês mas o único em português no momento é o Adobe Flex Builder 3.0 - Conceitos e Exemplos.

A própria Adobe disponibiliza uma documentação muito boa e completa no site: http://www.adobe.com/support/documentation/en/flex/

Entre os cursos cito:
ENG - PR, SP e DF
E-Genial - On-Line
TargetTrust - RS Ministrado pela
Gabriela Trindade Perry uma das moderadoras da Lista Flex-Brasil.

Tem também os sites recomendados do meu blog:
No da
DClick você poderá encontrar além do blog, demos mostrando algumas coisas que podemos fazer com o Flex.
Flex Examples com inúmeros exemplos úteis.
Fórum Flex Brasil e Lista Flex-Brasil duas fontes de ajuda e conhecimento, recomendo se cadastrarem.
Entre outros.

Abraços e bons estudos.

quinta-feira, 23 de abril de 2009

Servlet Filter

Servlet Filters é um recurso do Java EE para interceptar uma requisição web antes do recurso final ser atingido, este recurso pode ser um servlet, um arquivo, entre outros.

Filtros são muito úteis quando precisamos configurar o ambiente para o recurso a ser atingido, como por exemplo, abrir e fechar a sessão do hibernate (openSessionInView), verificar se o usuário está logado ou se tem permissão de fazer a requisição, permitindo ou não acessar o recurso.

Para usar Servlet Filter é necessário:

1. Criar uma classe que será utilizada como filtro pela sua aplicação. Esta classe precisa implementar a interface javax.servlet.Filter. Ex.: public class MyFilter implements Filter

2. Declarar sua classe filtro no web.xml da sua aplicação. Ex.:
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>mypackage.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/restrito/*</url-pattern>
</filter-mapping>
3. Implementar os métodos init, destroy e doFilter da interface Filter.

É no método doFilter onde tudo acontece. Ex.:
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// Executado antes de ir para o servlet
JPAUtil.createEntityManager();
chain.doFilter(request, response);
// Executado após o servlet ser executado
JPAUtil.closeEntityManager();
}
Este método é executado toda vez que é realizada uma requisição a um recurso que se encaixa na
tag url-pattern configurada no web.xml.
Dependendo das validações realizadas você pode impedir que o recurso seja atingido, para isso é só não executar
chain.doFilter(request, response);
FilterChain chama o próximo recurso da sequência. Você pode ter mais de um filtro para o mesmo url-pattern ou um recurso chamando outro.

No web.xml você também pode espeficicar em quais situações o filtro deve ser aplicado, usando a tag <dispatcher>. Ex.:
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
  • REQUEST: Quando o arquivo é acessado diretamente pelo navegador.
  • FORWARD: Quando o arquivo é acessado através de um forward de um servlet.
  • INCLUDE: Quando o arquivo é acessado através de um include do jsp (jsp:include).
  • ERROR: Quando o arquivo é um página de erro. Ex: <%@ page isErrorPage="true" %>

domingo, 19 de abril de 2009

FormattedInput

Estou lançando um novo controle.
Inspirado no meu controle anterior NumericInput (tanto que depende deste) e do MaskedTextInput, criei o FormattedInput.

FormattedInput auxilia em campos que só aceitam números preenchidos com zeros a esquerda, tais como: cep, cnpj, cpf, telefone. Na classe há algumas constantes para as entradas mais comuns, mas a propriedade inputFormat permite informar estas ou outras.

Como no NumericInput deve-se usar a propriedade value no lugar de text. Isto foi necessário para evitar o erro de estouro de pilha, pois imagine, é modificado a propriedade text esta por sua vez precisa formatar ela mesma ficando assim num loop perpétuo. Acho mais adequado setar os valores diretamente na propriedade text, mas no momento ficou mais prático criar a propriedade value, quem sabe numa próxima versão. E mesmo assim a propriedade value retorna um Number o que talvez seja útil dependendo da forma que o valor será persistido.

A alteração da propriedade inputFormat em runtime provoca a reformatação do valor.

O código fonte com exemplo pode ser baixado aqui. O fonte também se encontra na seção de arquivos da Lista Flex-Brasil, só que é disponível somente para os membros da lista.

sábado, 18 de abril de 2009

Criação dinâmica de objetos

Uma coisa que acho muito legal é a criação dinâmica de objetos.

Bem como isso funciona:
1. Fazer o import das classes que serão utilizadas.
import flash.net.registerClassAlias;
import mx.core.UIComponent;
import mx.containers.TitleWindow;
import mx.controls.TextInput;
import views.CadCliente;

2. Registrar as classes que você irá usar. O compilador "precisa" saber quais classes precisam ser compiladas. Para isso é necessário criar uma instância do objeto com new ou com registerClassAlias:

registerClassAlias
("views.CadCliente", CadCliente); // herda de TitleWindow
registerClassAlias("mx.controls.TextInput", TextInput);

Registrando as classes no aquivo que tem a tag Applicattion irá fazer com que possa ser criado objetos de forma dinâmica em qualquer parte do sistema.

3. Criação dinâmica.
import flash.net.getClassByAlias;
import
flash.utils.getDefinitionByName;

private function criacaoDinamica():void {
// var clazz:Class = getDefinitionByName("views.CadCliente") as Class; ou
var clazz:Class = getClassByAlias("views.CadCliente");

var window:TitleWindow =
TitleWindow(PopUpManager.createPopUp(this, clazz, true));

var clazzTI
:Class = getClassByAlias("mx.controls.TextInput");
var instance:UIComponent = new clazzTI() as UIComponent;

window.addChild(instance);
}

Em acréscimo dois métodos interessantes:
flash.utils.getQualifiedClassName e flash.utils.getQualifiedSuperclassName.
Os dois recebem um object como parâmetro e retornam uma string com o nome completo (pacote + classe) da classe (
getQualifiedClassName) e da sua classe pai (getQualifiedSuperclassName).

quinta-feira, 16 de abril de 2009

Bloco Static

No Java existe o bloco static:

static {
}

O bloco static é como se fosse um init, é o primeiro código que será executado quando se fizer referência a classe, com new ou acessando algum método static. Dentro do método estático só pode ser acessado atributos e métodos também estáticos.

No AS3, se tem algo parecido:

public class Classe {
metodoStatic();
trace("class criada");

public static function metodoStatic():void { }
}

AS3 permite incluir no corpo de uma classe não somente declarações de atributos mas também comandos que serão executados somente uma vez. É executado primeiro a declaração de atributos e depois os comandos encontrados no corpo da classe. E estes comandos como no Java só podem acessar atributos e métodos também estáticos.

terça-feira, 14 de abril de 2009

Último dia do mês

Esta é simples mas bem útil.

Em muitas linguagens existe um construtor como Date(ano, mês, dia), então o mais prático é fazer o seguinte (código válido para AS3) para se obter o último dia do mês:


public function lastDay(source:Date):Date {
var retorno:Date = new Date(source.fullYear, source.month + 1, 1);
retorno.setDate(retorno.date - 1);

return retorno;
}

Mas lendo o post Working with Dates in AS3 do blog Amy's Flex Diary descobri uma forma mais enxuta:

public function lastDay(source:Date):Date {
return new Date(source.fullYear, source.month + 1, 0);
}

Estas duas formas evita o programador de fazer cálculos adicionais para saber se o ano é bissexto ou não.



domingo, 12 de abril de 2009

NumericInput

Estou disponibilizando um novo controle: NumericInput.
Este controle serve para a entrada de dados numéricos formatando-os conforme o locale: pt_BR ou en_US.

Criei este controle inspirado no controle do Fernando Incerti.

Características:
O NumericInput possue as propriedades: precision, useNegativeSign e useThousandsSeparator que são utilizadas para setar as propriedades homônimas do NumberFormatter que utilizo para formatar o valor digitado. Este NumberFormatter deixei public e bindable, caso seja necessário formatar um outro componente com as mesmas características do NumericInput. Qualquer alteração nestas propriedades dispara um evento.

Existe também a propriedade value que devolve um Number do valor digitado que também dispara um evento.

Deixei o método toNumber como público. Este recebe um Object e devolve um Number do Object.toString() com a mesma precision do NumericInput. Este método é um utilitário não alterando o valor do NumericInput.

A alteração do locale ou de qualquer uma das propriedades em runtime provoca a reformatação do valor atual.

Espero que seja útil para os amigos.
O código fonte com exemplo pode ser baixado aqui. O fonte também se encontra na seção de arquivos da Lista Flex-Brasil, só que é disponível somente para os membros da lista.

sábado, 11 de abril de 2009

DateChooserCustom

Um tempo atrás num post da Flex-Brasil foi falado sobre uma agenda de eventos usando o DateChooser.
Na época disponibilizei o controle DateChooserCustom.as na sua primeira versão na seção de arquivos da Flex-Brasil.
Criei este componente para mostrar o calendário da Bovespa (Menu Mercado > Calendário e Horários > Calendário) numa aplicação particular de controle de investimentos.

Com este componente é possível setar uma borda, uma cor de fundo e um tooltip para uma data específica. Nesta nova versão estou usando internacionalização evitando assim setar as propriedades dayNames e monthNames em código.

O código fonte com exemplo pode ser baixado aqui. O fonte também se encontra na seção de arquivos da Lista Flex-Brasil, só que é disponível somente para os membros da lista.
Obs.: No exemplo, os tooltips aparecem nas datas que estão marcadas como Feriados do Mercado mostrando assim o feriado correspondente.

Espero que seja útil para os amigos.

sexta-feira, 10 de abril de 2009

JavaMagazine nº 67 - JavaFX

Li artigo na JavaMagazine atual nº 67 um artigo falando do JavaFX.
Sinceramente, acho a forma de codificação muito pouco intuitiva. Mesmo sendo integrada com o Java, o que é uma vantagem, acredito que a curva de aprendizado será muito grande.

Tem bastante o que evoluir ainda, na minha opinião, objetos de menu e grid ainda não existem na versão atual.

SilverLight, não me lembro de ver exemplos, mas tb é recente e já li alguns posts falando que uma aplicação feita no .Net Framework de versão anterior não roda direito na versão mais nova, o velho problema de compatibilidade com versões anteriores, o que é bem comum nos softwares na Microsoft.

O JavaFX tem a versão Mobile que está para sair, se evoluir bastante neste ponto poderá pegar um mercado promissor. O Flex neste ponto tem o Flash Light, mas até onde li só suportará o ActionScript 2 e não o 3, o que limitará os recursos disponíveis.

Nesta corrida, na minha opinião, o Flex ainda sai ganhando, por ter um código bem intuitivo, bem documentado, ótimos recursos visuais, bastante maduro (está na versão 3.3, enquanto os sesus concorretes recentemente forão lançados), mas é necessário que a Adobe fique de olho nos seus adversários.

Conta Investimento

Acompanho a bolsa de valores (Bovespa) desde 2001.
Li vários livros de investimento, e até fiz um curso de Análise Fundamentalista e Análise Gráfica. Nos livros a maioria dos autores fala que o nosso pior inimigo é nós mesmos, mais exatamente as nossas emoções.

E isto é realmente importante, quando se estiver investindo é necessário ser frio e calculista, deixar as emoções de lado.

Dinheiro não é só dinheiro, dinheiro é a possibilidade de realizar sonhos, uma viagem, um curso, etc. O que explica como o dinheiro pode afetar tanto as nossas emoções.

Por isso, recomendo, nunca utilize dinheiro que irá precisar a curto prazo, uma semana, um mês, etc, as coisas podem não sair como planejado e ser necessário vender com prejuízo. Use somente dinheiro extra.

Outra sugestão que dou é: tenha uma conta somente para investimentos, uma conta isolada da sua conta bancária principal que você usa para pagar as contas do dia-a-dia. Ou tenha um bom software de finanças pessoais que as isole visualmente. O importante aqui é não misturar obrigações com investimentos e um poder afetar o outro.

quinta-feira, 9 de abril de 2009

Apresentação

Sendo este meu primeiro post, quero fazer uma rápida apresentação. Tentarei não me extender, pois isto é enfadonho para quem lê.
Sou programador a mais de 12 anos, o tempo passa. Programei com Clipper, Visual Basic 6, Fox 2.6 e atualmente programo em Java, Flex e Visual Fox.
Neste blog pretendo falar um pouco de Flex, Java entre outras coisas.

Resido e trabalho em Montenegro - RS. Trabalho na Sadig desde 2004 uma empresa de BI. No site da empresa em Produtos > Sadig Painéis vocês podem ver o meu último trabalho: um gerador de dashboards onde o cliente pode montar o seu painel / dashboard, utilizando as tecnologias Java, Adobe Flex e Visual Fox. Trabalho na ponta Flex.

Há alguns anos atrás comecei a aprender por conta própria ferramentas RIA: Java Server Faces, OpenLaszlo até chegar nas minhas mãos a MundoJava nº 20 onde tem um artigo do Fabio Terracini e Rafael Martinelli ambos da DClick falando sobre Adobe Flex 2, a partir daí me foquei nesta ferramenta acreditando ter encontrado a melhor das RIAs do momento, até conseguir introduzi-la no meu trabalho diário no início de 2008.

Participo dos fóruns:
GUJ
PortalJava
Flex-Brasil
Forum FlexBrasil
Com o nick: fabiophx.

Nos próximos dias pretendo disponibilizar alguns componentes.
Espero que todos gostem.

[]s
Fabio da Silva