logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Jun 10

Locale pt_BR

Escrito por Fabio da Silva em 1, 2009, 3d, 4, 6, Adobe, AR, auto, BI, blog, Blogs, builder 4, class, classe, classes, código, Componente, Componentes, Dica, Download, err, erro, error, exemplo, Exemplos, flash, flash builder, Flash Builder 4, Flex, Flex 4, for, framework, Frameworks, Google, html, IE, if, int, label, Links, mg, Number, O, on, opensource, Outros, pt, RIA, Ria’s Geral, RoR, runtime, SDK, string, SVN, Tech, UI, Validadores @ 06 10th, 2010 | via http://fabiophx.blogspot.com | 2 comentários
Fabio da Silva
? X
  • Bookmarks

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

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

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

O Flex utiliza fortemente internacionalização (i18n). Os componentes Alert, DateChooser, DateField, validadores, formatadores, entre outros permitem que suas propriedades que estão vinculadas ao idioma / locale sejam alteradas via código, alguns exemplos:
  • Alert: cancelLabel, noLabel, okLabel e yesLabel.
  • DateChooser e DateField: dayNames e monthNames.
  • Formatadores e Validadores (classes Formatter e Validator e suas classes filhas): possuem propriedades terminadas em error que são as mensagens que irão ser mostradas de acordo com a situação.
  • Os formatadores possuem a propriedade formatString (com exceção de CurrencyFormatter e NumberFormatter) e outras propriedades específicas de cada formatador, tais como: decimalSeparatorFrom, decimalSeparatorTo, thousandsSeparatorFrom, thousandsSeparatorTo para CurrencyFormatter e NumberFormatter e currencySymbol para CurrencyFormatter.
  • Os validadores CurrencyValidator e NumberValidator possuem as propriedades: decimalSeparator e thousandsSeparator e currencySymbol para CurrencyValidator.
Mas o melhor é poder informar o idioma / locale e o Flex configurar “automagicamente” estas propriedades. Para informar os locales, você precisa na hora da compilação indicar qual ou quais locales irá utilizar, para isso você precisa ir em Project > Properties > Flex Compiler e na linha Additional compiler arguments colocar:

-locale pt_BR // Para usar somente pt_BR
ou
-locale=pt_BR,en_US // Para usar pt_BR e en_US

E para trocar de idioma em runtime usa-se:
resourceManager.localeChain = ['pt_BR'];

Os arquivos de locale do framework são arquivos .properties compactados dentro de arquivos .swc. No Flex / Flash Builder estes arquivos se encontram em builder_dir/sdks/sdk_version/frameworks/locale e quando se estiver usando somente o sdk estará em sdk_dir/frameworks/locale. Se for necessário, você poderá abrir o arquivo .swc com qualquer descompactador e alterar o conteúdo dos arquivos .properties contidos nele.
Estes são exemplos do framework, você também pode criar traduções específicas para sua aplicação.


Veja mais

Introduction to localization
NumericInput (comentários)

Links para o locale pt_BR
No download do Flash Builder 4 e do SDK 4. Links de download aqui.
SVN atualizado (.properties) aqui e aqui.
Deixei disponível para download o do Flex 3 e 4.

Mai 14

Sombreamento de Classe

Escrito por Fabio da Silva em 1, 4, 6, Adobe, Air, AR, as3, BI, blog, Blogs, class, classe, dados, demo, Flex, for, Google, html, HTTPService, ide, if, Java, mg, O, on, problema, RIA, Ria’s Geral, SDK, string, SVN, team, UI, XML @ 05 14th, 2010 | via http://fabiophx.blogspot.com | Sem comentários
Fabio da Silva
? X
  • Bookmarks

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

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

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Conforme meu post anterior fiquei com poucas alternativas para contornar o meu problema:
  • Mudar o HTTPService.resultFormat para e4x.
  • Setar HTTPService.xmlDecode.
  • Alterar a classe SimpleXMLDecoder no SDK e compilar.
  • Esperar o Flex Team alterar SimpleXMLDecoder.simpleType no SDK para poder sobreescrever este método e tratar os dados da forma mais adequada para minha aplicação.
As duas primeiras opções seriam trabalhosas porque teria que fazer o mesmo que a classe SimpleXMLDecoder faz, isto é, transformar o resultado em object e isto seria necessário para evitar um impacto maior na minha aplicação já que esta espera este tipo de retorno. A terceira é delicada porque todo novo SDK teria que aplicar minhas alterações, compilar e distribuir para a equipe. E a última opção é a mais demorada.

Aí me lembrei de um conceito não muito utilizado, o Sombreamento ou Shadowing que também se aplica para Java. O que faria neste caso, criaria na minha aplicação o pacote mx.rpc.xml e nele copiaria a classe SimpleXMLDecoder do SDK e na primeira linha do método simpleType(val:Object) colocaria return val; com isso não seria feito o cast deixando sempre como String o que para minha aplicação atende plenamente. O detalhe aqui é que todo HTTPService que eu usar irá utilizar esta classe do meu projeto e não a sua correspondente no SDK e toda vez que sair um novo SDK terei que aplicar as alterações o que com o uso do SVN fica fácil identificar o que foi alterado e também a equipe ao atualizar o projeto já veria esta classe e suas atualizações.

Mai 10

Criando aplicações Flex para o Orkut (e outras redes sociais)

Escrito por João Augusto em 1, 4, 6, Access, action, Actionscript, api, Aplicativos, app, AR, AUG, BI, blog, botão, camp, class, comunicação, Cookbook, demo, Desenvolvedor, desenvolvedores, Diversos, Download, dynamic, exemplo, facebook, flash, Flex, for, Google, html, IE, if, image, int, interface, Java, Javascript, library, linkedin, Mac, mg, O, on, Outros, padrão, PHP, pt, Redes Sociais, RIA, Ria’s Geral, serviço, site, social, SVN, swf, UI, Ved, window, XML, XP @ 05 10th, 2010 | via http://blog.joaoaugusto.com.br | 1 comentário
João Augusto
? X
  • Bookmarks

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

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

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Há algum tempo me interessei em desenvolver aplicativos para o Orkut de forma experimental utilizando o Flex. Depois de alguma pesquisa e um pouco de tempo perdido cheguei à essa biblioteca. Ela é basicamente uma interface entre actionscript e as funções do OpenSocial.

O que é OpenSocial?

O serviço OpenSocial define uma API comum para desenvolver aplicativos sociais que irão funcionar em diversos sites. Elas possibilitam que os desenvolvedores criem aplicativos utilizando JavaScript e HTML padrão para acessar amigos de uma rede social e atualizar feeds.

Ou seja, você desenvolve um aplicativo utilizando a API e pode rodá-lo em diferentes containers, como: Orkut, MySpace, LinkedIn, IGoogle, Hi5, Ning entre outros. Infelizmente o Facebook não suporta o padrão OpenSocial, mas existem outras bibliotecas que realizam essa comunicação, a mais conhecida é esta.

Bom, vamos no ater à API OpenSocial. Depois de fazer o download do SWC é hora de baixar a aplicação de exemplo, que demonstra algumas das funções básicas da API. Se você preferir pode baixar o projeto dessa aplicação já com o SWC.

Aplicação compilada, agora é hora botá-la pra funcionar. Para que você consiga rodar sua aplicação no Orkut são necessários mais alguns passos:

  1. Disponibilizar publicamente seu SWF, no meu caso a nossa aplicação está em http://www.joaoaugusto.com.br/SampleApp.swf.
  2. Criar um arquivo XML (conforme modelo abaixo) e disponibilizá-lo publicamente. Novamente, no meu caso http://www.joaoaugusto.com.br/SampleApp.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <Module>
    <ModulePrefs title="SampleApp">
      <Require feature="flash"/>
      <Require feature="views"/>
      <Require feature="dynamic-height"/>
      <Require feature="opensocial-0.8"/>
    </ModulePrefs>
    <Content type="html">
    <![CDATA[
      <!-- The flash element -->
      <div id="flashcontainer" style="text-align: center;"></div>
    
      <!-- Embed the swf file -->
      <script type="text/javascript">
        var flashObjId = "flashObj";
        gadgets.flash.embedFlash(
          "http://www.joaoaugusto.com.br/SampleApp.swf",
          "flashcontainer", "9", {
            name: flashObjId,
            id: flashObjId,
            quality: "high",
            wmode: "window",
            allowScriptAccess: "always"
          });
        gadgets.window.adjustHeight();
      </script>
    ]]>
    </Content>
    </Module>
    
  3. Ter acesso ao sandbox.orkut.com, que você consegue em http://sandbox.orkut.com/SandboxSignup.aspx.

Depois de logado dentro de sua conta no sandbox você verá à esquerda da tela uma seção chamada “Apps” e ao lado do título da seção um botão “Editar”:

EditarApp

Após entra na tela de edição das aplicações, aparecerá um campo para que você preencha utilizando o endereço do XML que disponiblizamos em um dos passos acima:

AddApp

Pronto, agora você já pode acessar as funções básicas da API OpenSocial através do seu Orkut.

.SampleApp

Para mais informacões acesse o site oficial da OpenSocial Actionscript Client Library. Até mais!

Mai 8

Ruby 1.9 como padrão no Textmate

Escrito por Daniel Lopes em 1, 6, app, AR, arte, auto, Beta, BI, blog, class, código, custom, Design, Dica, Diversos, err, explicação, for, git, IE, int, jogo, library, Mac, Mate, mg, O, on, padrão, Pessoal, problema, problemas, prova, pt, rails, reference, rest, RIA, Ria’s Geral, ruby, Ruby e Rails, shell, Software, SVN, TextMate, transição, UI, uint, update, Vários, web, XP @ 05 8th, 2010 | via http://blog.areacriacoes.com.br/ | Sem comentários
Daniel Lopes
? X
  • Bookmarks

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

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

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá pessoal. Post super rápido para ajudar em passar por algum “perrengue” ao definir o Ruby 1.9 para o padrão no seu Textmate.

Vamos a uma explicação rápida para quem não usa (ou não tem noção do poder do Textmate). Textmate aceita bundles e estes bundles podem ser escritos de diversas formas. Você pode ter bundles para commit no git/github, bundles para scaffold do rails, autocomplete como este do Carlos Brando e muito mais. A parte legal de criar bundles ou estender os existentes é que você pode fazer isso em Ruby.

Até aí tudo perfeito. Acontece que o Textmate por padrão usa o Ruby default do Mac e como estamos em um momento de transição é bem provável que você precise ter instalado hoje o Ruby 1.8.6 , 1.8.7, Ruby enterprise edition 1.8.7 e Ruby 1.9.1 .

Gerenciar todos estes Rubies é bem fácil através do RVM e eu não vou explicar como instá-lo pois isto já foi feito em diversos lugares como aqui e aqui ( dica: use a última versão do RVM, se ainda não atualizou, faça logo).

Resta dizer ao Textmate que agora ele vai usar o Ruby do RVM. Isto é importante pois vários bundles como o do próprio Ruby (que já vem instalado) executam código Ruby ou fazem chamadas ao binário do Ruby. Por padrão eu utilizo o REE, então vamos defini-lo como Ruby do Textmate:

Criando a variável

Basta você abrir seu Textmate e em Preferences -> Advanced -> Shell Variables e criar uma nova variável chamada TM_RUBY e apontar para o caminho do binário do REE que no RVM fica em /Users/SEU_USUARIO/.rvm/rubies/ree-1.8.7-2010.01/bin/ruby (obviamente o ree-1.8.7-2010.01 é a minha versão instalada).

Feito isto basta fechar e reabrir o Textmate e ele estará rodando com REE.

Ruby 1.9

Da forma acima você pode alterar para qualquer versão Ruby, porém com o 1.9 você terá alguns problemas.

No 1.9 foi alterada a forma de encoding dando suporte a UTF, e você normalmente faz isto definindo um comentário “mágico” com o enconding do seu script Ruby.

É bem provável que você nunca tenha atualizado o bundle do Ruby ou talvez tenha feito vários ajustes nele. E o problema vai ocorrer neste ponto, os bundles no Textmate e o próprio bundle do Ruby (dependendo da sua versão instalada) pode não definir o encoding corretamente e irá quebrar com 1.9.

O recomendado é que você atualize todos os seus bundles padrões da seguinte forma:

1
2
    cd /Library/Application Support/TextMate/Bundles
    svn up *.tmbundle

No meu caso eu não tinha customizado nada no bundle do Ruby (eu altero mais o do Rails) então eu apenas apaguei a minha versão da pasta ~/Library/Application Support/TextMate/Bundles e também da ~/Library/Application Support/TextMate/Pristine Copy . Caso você tenha alterado o bundle do Ruby, provavelmente suas alterações estarão na Pristine Copy.

Atualizando o Textmate

Depois de atualizar os bundles você deve atualizar seu Textmate (eu define para atualizar sempre para o cuting edge) em preferences -> software update. Marque major ou cuting-edge para ter certeza que tudo vai ser instalado com o suporte a Ruby 1.9:

Alterando o TM_RUBY

Para terminar defina seu TM_RUBY para o binário do 1.9. No meu caso ficou: /Users/daniellopes/.rvm/rubies/ruby-1.9.1-p378/bin/ruby . Não se esqueça de desmarcar a variável PATH que pode ser criada pela atualização do Textmate, caso contrário poderá ser usado alguma outra versão que esteja no seu PATH (a menos que você tenha feito um link do 1.9 para algo tipo /usr/bin).

Em seguida feche e reabra o Textmate e escreva:

1
  puts RUBY_DESCRIPTION

Execute o arquivo com o bundle do Ruby rodando command+r e o resultado deve imprimir a sua versão do 1.9.

Se alguém estiver passando por problemas ou sabe formas melhores por favor comente abaixo.

Abr 23

SVN, Eclipse, Linux

Escrito por Felipe Borella em 1, 4, Access, apache, app, AR, BI, carregar, control, Controls, Eclipse, for, git, ide, IE, if, int, Linux, lite, O, on, Password, Pessoal, pt, rest, RIA, Ria’s Geral, servidor, site, Software, SVN, TAT, Teste, UI, update, UX, web, window, windows, XP @ 04 23rd, 2010 | via http://www.fborella.com.br/blog/ | Sem comentários
Felipe Borella
? X
  • Bookmarks

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

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

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Salve pessoal gente boa !

Hoje quero passar aqui para dar uma ajuda quem vai instalar o SVN no linux e poder sincronizar com o Eclipse no seu windows ou linux e afins.

bem vamos la partindo do principio que o seu linux esta cabaço (virgem da silva).

subversion: Controlador de versão.

libapache2-svn: Biblioteca de integração entre apache e subversion.

apache2: Servidor Web Apache

entao no seu console digite

# sudo apt-get install subversion libapache2-svn apache2

depois de ter instalado o apache agora é mandar brasa no resto.

seguindo

# sudo apt-get install subversion libapache2-svn

Quando terminar de instalar vamos configurar o arquivo do svn seja com o seu joe ou vi
Observe que criei uma pasta no /var a pasta svn (mkdir svn apliquei as permissoes chmod 0777 na pasta).

Supondo que você esteja na pasta /var

# mkdir svn

Depois

# chmod 0777 /var/svn -R
# sudo joe /etc/apache2/mods-enabled/dav_svn.conf
# dav_svn.conf - Example Subversion/Apache configuration
#
# For details and further options see the Apache user manual and
# the Subversion book.
#
# NOTE: for a setup with multiple vhosts, you will want to do this
# configuration in /etc/apache2/sites-available/*, not here.
?
#  ... 
# URL controls how the repository appears to the outside world.
# In this example clients access the repository as http://hostname/svn/
# Note, a literal /svn should NOT exist in your document root.

?
  # Uncomment this to enable the repository
  DAV svn
?
  # Set this to the path to your repository
  #SVNPath /var/lib/svn
  # Alternatively, use SVNParentPath if you have multiple repositories under
  # under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, ...).
  # You need either SVNPath and SVNParentPath, but not both.
  SVNParentPath /var/svn
?
  # Access control is done at 3 levels: (1) Apache authentication, via
  # any of several methods.  A "Basic Auth" section is commented out
  # below.  (2) Apache  and , also commented out
  # below.  (3) mod_authz_svn is a svn-specific authorization module
  # which offers fine-grained read/write access control for paths
  # within a repository.  (The first two layers are coarse-grained; you
  # can only enable/disable access to an entire repository.)  Note that
  # mod_authz_svn is noticeably slower than the other two layers, so if
  # you don't need the fine-grained control, don't configure it.
?
  # Basic Authentication is repository-wide.  It is not secure unless
  # you are using https.  See the 'htpasswd' command to create and
  # manage the password file - and the documentation for the
  # 'auth_basic' and 'authn_file' modules, which you will need for this
  # (enable them with 'a2enmod').
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
?
  # To enable authorization via mod_authz_svn
  #AuthzSVNAccessFile /etc/apache2/dav_svn.authz
?
  # The following three lines allow anonymous read, but make
  # committers authenticate themselves.  It requires the 'authz_user'
  # module (enable it with 'a2enmod').
  #
    #Require valid-user
  #

Pronto, só falta adicionar os usuários, para isso utilize o comando abaixo:

# sudo htpasswd -cm /etc/apache2/dav_svn.passwd seu_usuario

Vai pedir a senha e repetir a senha você segue normalmente os passos até finalizar o procedimento.

Próximo passo é criar um repositorio.

# sudo svnadmin create /var/svn/teste

Reinicie o apache dessa forma

# sudo /etc/init.d/apache2 force-reload

Se aparecer isso você instalou com sucesso.
“Revision 0″

Importando seu projeto para o repositorio.

# svn import /pasta/seuprojeto http://localhost/svn/teste

Baixando o Svn para fazer checkout no Eclipse.
Com o Eclipse aberto va em Help/Software Update

Na aba Avaiable Software
Add Site

Adicione http://subclipse.tigris.org/update_1.4.x e Ok.

Espere carregar e Desmarque o Mylyn

e depois clique em Install ao final reinicie a IDE ( ele pede se você quer reiniciar a IDE clique OK )

Depois de intalado… com o Eclipse aberto va em File / New / Other / Svn / Checkout Projects from SVN

Next

Create new Repository

adicione o endereco http://localhost/svn/teste ( ou o ip do seu servidor svn no lugar de localhost )

Next

Selecione a linha do http e Finish. pronto tera seu projeto do svn no Eclipse.

Ate o proximo post onde explicarei como desfrutar do SVN, controle de Versoes, Revisoes.

Felipe o/

Mar 10

Integrando CruiseControl com FlexPMD

Escrito por João Augusto em 1, 4, 6, Adobe, app, AR, arte, AUG, back, BI, blog, busca, class, código, código fonte, código fonte Flex, control, Cookbook, css, Download, DRE, err, etica, Ferramenta, Flex, fonte, for, gc, html, IE, if, image, instalação, int, Java, label, mg, monitor, Number, O, on, opensource, processo, pt, RIA, Ria’s Geral, SVN, tabs, tag, template, Tutorial, UI, uint, web, XML, XP @ 03 10th, 2010 | via http://blog.joaoaugusto.com.br | Sem comentários
João Augusto
? X
  • Bookmarks

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

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

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Após configurarmbanneros o CruiseControl com o SVN aqui na Informant decidimos que era hora de buscar novas ferramentas para tornar o processo de integração contínua mais completo. Para que pudessemos monitorar a qualidade do código a cada build, assumi a tarefa de integrar o CruiseControl com o FlexPMD, famoso detector de más práticas em código fonte Flex.

Antes de tudo, você precisa baixar a última versão do FlexPMD Ant Task. Descompacte todos os arquivos exceto o jar do Ant dentro da pasta lib de sua instalação do Ant.

Depois de feito isso é hora de adicionar a tarefa do FlexPMD ao build do seu projeto:

<property name="src.dir" value="../../checkout/projeto/flex_src" />
<property name="bin.dir" value="../../projects/projeto/pmd/" />

<taskdef name="flexPmd" classname="com.adobe.ac.pmd.ant.FlexPmdAntTask"/>

<target name="flex-pmd" depends="mkdir">
	<flexPmd sourceDirectory="${src.dir}"
		outputDirectory="${bin.dir}"/>
</target>

Agora que o FlexPMD já está sendo executado junto ao build do seu projeto Flex é necessário fazer com que o log de saída do CruiseControl incorpore o log do FlexPMD. No arquivo de configurações do seu projeto adicione a tag <merge> dentro de <log>. Repare que o atributo “dir” corresponde ao mesmo caminho informado em “bin.dir” no seu build:

<log dir="logs/${project.name}">
	<merge dir="projects/projeto/pmd/"/>
</log>

Com o log sendo salvo, chegou a hora de mostrá-lo em tela. Dentro de main.jsp crie uma nova aba chamada “pmdResults”:

.
.
.
    <cruisecontrol:tabsheet>
      <tr>
        <td bgcolor="white" >
          <cruisecontrol:tab name="buildResults" label="Build Results" >
            <%@ include file="buildresults.jsp" %>
          </cruisecontrol:tab>

          <cruisecontrol:tab name="pmdResults" label="PMD Results" >
            <%@ include file="pmd.jsp" %>
          </cruisecontrol:tab>
.
.
.

Como você pode ver, essa nova aba chama o arquivo pmd.jsp que também precisa ser criado:

<%@ taglib uri="/WEB-INF/cruisecontrol-jsp11.tld" prefix="cruisecontrol"%>
<cruisecontrol:xsl xslFile="/xsl/pmd.xsl"/>

Para que nosso nova aba possa mostrar resultados mais intuitivos vamos adicionar dentro de cruisecontrol.css o seguinte código:

.pmd-evenrow { font-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; background-color:#FFFFCC; }
.pmd-oddrow { font-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; background-color:#CCCCCC; }
.pmd-fileheader { background-color:#FFFFFF; font-family:arial,helvetica,sans-serif; font-size:9pt; color:#000000; }
.pmd-sectionheader { background-color:#000066; font-family:arial,helvetica,sans-serif; font-size:9pt; color:#FFFFFF; }
.pmd-priority-1 { background-color:#FF0000; }
.pmd-priority-2 { background-color:#FF3300; }
.pmd-priority-3 { background-color:#FF9900; }
.pmd-priority-4 { background-color:#FFFF00; }
.pmd-priority-5 { background-color:#0033FF; }

Já temos quase tudo configurado, precisamos “apenas” formatar nossa saída e para isso iremos criar o arquivo pmd.xsl, que já informamos em pmd.jsp. No tutorial da ThoughtWorks de como integrar o CC como o PMD (Java) eles sugerem o seguinte:

<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" />

  <xsl:template match="/">
    <xsl:apply-templates select="." mode="pmd" />
  </xsl:template>

  <xsl:template match="/" mode="pmd">

    <xsl:variable name="file.count" select="count(cruisecontrol/pmd/file)"/>
    <xsl:variable name="violation.count" select="count(cruisecontrol/pmd/file/violation)"/>
    <xsl:variable name="p1.count" select="count(cruisecontrol/pmd/file/violation[@priority='1'])"/>
    <xsl:variable name="p2.count" select="count(cruisecontrol/pmd/file/violation[@priority='2'])"/>
    <xsl:variable name="p3.count" select="count(cruisecontrol/pmd/file/violation[@priority='3'])"/>
    <xsl:variable name="p4.count" select="count(cruisecontrol/pmd/file/violation[@priority='4'])"/>
    <xsl:variable name="p5.count" select="count(cruisecontrol/pmd/file/violation[@priority='5'])"/>

    <xsl:if test="count(cruisecontrol/pmd) = 0" >
        PMD was not run against this project
    </xsl:if>
    <xsl:if test="count(cruisecontrol/pmd) &gt; 0">
      <h1 align="center">PMD Violation Report</h1>
      <table align="center" cellpadding="8" cellspacing="0" border="0" width="98%">
      <tr>
        <td class="pmd-sectionheader">
          Summary: <xsl:value-of select="$violation.count"/> violation(s) found in
          <xsl:value-of select="$file.count"/> file(s)
        </td>
      </tr>
      <tr>
        <td>
        <table align="right" cellpadding="1" cellspacing="1" border="0" width="95%">
          <tr>
            <td class="changelists-file-header" colspan="3">
              &#160;Violations by Priority&#160;
            </td>
          </tr>
          <tr>
            <td class="changelists-file-header" width="10">Priority</td>
            <td class="changelists-file-header" width="20">Violations</td>
            <td class="changelists-file-header">Percentage</td>
          </tr>
          <tr>
            <xsl:attribute name="class">pmd-evenrow</xsl:attribute>
            <td><xsl:attribute name="class">pmd-priority-1</xsl:attribute>1</td>
            <td><xsl:value-of select="$p1.count"/></td>
            <td><xsl:value-of select="format-number($p1.count div $violation.count, '##%')"/></td>
          </tr>
          <tr>
            <xsl:attribute name="class">pmd-oddrow</xsl:attribute>
            <td><xsl:attribute name="class">pmd-priority-2</xsl:attribute>2</td>
            <td><xsl:value-of select="$p2.count"/></td>
            <td><xsl:value-of select="format-number($p2.count div $violation.count, '##%')"/></td>
          </tr>
          <tr>
            <xsl:attribute name="class">pmd-evenrow</xsl:attribute>
            <td><xsl:attribute name="class">pmd-priority-3</xsl:attribute>3</td>
            <td><xsl:value-of select="$p3.count"/></td>
            <td><xsl:value-of select="format-number($p3.count div $violation.count, '##%')"/></td>
          </tr>
          <tr>
            <xsl:attribute name="class">pmd-oddrow</xsl:attribute>
            <td><xsl:attribute name="class">pmd-priority-4</xsl:attribute>4</td>
            <td><xsl:value-of select="$p4.count"/></td>
            <td><xsl:value-of select="format-number($p4.count div $violation.count, '##%')"/></td>
          </tr>
          <tr>
            <xsl:attribute name="class">pmd-evenrow</xsl:attribute>
            <td><xsl:attribute name="class">pmd-priority-5</xsl:attribute>5</td>
            <td><xsl:value-of select="$p5.count"/></td>
            <td><xsl:value-of select="format-number($p5.count div $violation.count, '##%')"/></td>
          </tr>
        </table>
        </td>
      </tr>
      <tr>
        <td class="pmd-sectionheader">Files: (<xsl:value-of select="$file.count"/>)</td>
      </tr>
      <xsl:apply-templates select="cruisecontrol/pmd/file" mode="pmd" />
      </table>
    </xsl:if>
  </xsl:template>

  <xsl:template match="file" mode="pmd">
    <tr valign="top">
      <xsl:if test="position() mod 2=0">
        <xsl:attribute name="class">pmd-evenrow</xsl:attribute>
      </xsl:if>
      <xsl:if test="position() mod 2!=0">
        <xsl:attribute name="class">pmd-oddrow</xsl:attribute>
      </xsl:if>
      <td class="modifications-data">
        <b><xsl:value-of select="@name"/></b>
      </td>
    </tr>
    <tr valign="top">
      <xsl:if test="position() mod 2=0">
        <xsl:attribute name="class">pmd-evenrow</xsl:attribute>
      </xsl:if>
      <xsl:if test="position() mod 2!=0">
        <xsl:attribute name="class">pmd-oddrow</xsl:attribute>
      </xsl:if>
      <td class="modifications-data" colspan="5">
        <table align="right" cellpadding="1" cellspacing="1" border="0" width="95%">
          <tr>
            <td class="changelists-file-header" colspan="6">
              &#160;Violations associated with this file:&#160;
              (<xsl:value-of select="count(violation)"/>)
            </td>
          </tr>
          <tr>
            <td class="changelists-file-header">Priority</td>
            <td class="changelists-file-header">Line</td>
            <td class="changelists-file-header">Rule</td>
            <td class="changelists-file-header">Ruleset</td>
            <td class="changelists-file-header">Hint</td>
          </tr>
          <xsl:apply-templates select="violation" mode="pmd"/>
        </table>
      </td>
    </tr>
  </xsl:template>

  <xsl:template match="violation" mode="pmd">
    <tr valign="top" >
      <xsl:if test="position() mod 2=0">
        <xsl:attribute name="class">pmd-evenrow</xsl:attribute>
      </xsl:if>
      <xsl:if test="position() mod 2!=0">
        <xsl:attribute name="class">pmd-oddrow</xsl:attribute>
      </xsl:if>
      <td width="10">
        <xsl:attribute name="class">pmd-priority-<xsl:value-of select="@priority" /></xsl:attribute>
        <xsl:value-of select="@priority"/>
      </td>
      <td class="modifications-data"><xsl:value-of select="@line"/></td>
      <td class="modifications-data"><xsl:value-of select="@rule"/></td>
      <td class="modifications-data"><xsl:value-of select="@ruleset"/></td>
      <td class="modifications-data"><xsl:value-of select="."/></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

Pronto. Com tudo configurado é hora de dar o build no seu projeto e esperar para ver os resultados:

Capturar2

Fontes:
http://confluence.public.thoughtworks.org/display/CC/CruiseControlWithPMD
http://opensource.adobe.com/wiki/display/flexpmd/FlexPMD

Set 24

Controle de Versão do Flex Builder

Escrito por Fabio da Silva em Flex Builder, SVN @ 09 24th, 2009 | via http://fabiophx.blogspot.com | Sem comentários
Fabio da Silva
? X
  • Bookmarks

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

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

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

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.

Jul 2

Maior atualização do Zend Amf (1.8.4 release)

Escrito por Jose Carlos Fiel em 1, 4, 6, Adobe, AMF, AMF0, AMF3, amfphp, AR, BI, blog, break, bug, builder 4, carregar, class, classe, Componente, flash, flash builder, Flash Builder 4, fonte, for, framework, IE, if, int, Java, Javascript, library, O, on, PHP, Plugin, problema, pt, reference, RIA, Ria’s Geral, SVN, UI, update, Ved, zend, Zend Amf, Zend Framework @ 07 2nd, 2009 | via http://blog.josecarlosfiel.com.br | Sem comentários
Jose Carlos Fiel
? X
  • Bookmarks

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

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

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

É bom estar de olho nas atualizações do Zend Framework, que sempre corrige bugs ou adiciona uma nova funcionalidade ou plugin para uso. Desde então é a maior atualização do componente Zend Amf desde o seu lançamento.

Atualmente o Zend Framework na versão 1.8.4 recebeu muitas alterações no componente Zend Amf que vale a pena ficar atento e testar novas funcionalidades ou verificar as correções efetuadas. Veja abaixo as alterações:

Maiores Alterações
ZF-6641 Shared references are duplicated
ZF-6205 Serializer does not support cyclic references
ZF-6393 Wrong Amf0_Amf3 reference counting
ZF-5382 Multiple calls seems to break the deserializer.
ZF-6625 Zend Amf can load any instantiated PHP class. Security

Menores alterações, mas significantes
ZF-6975
Adobe Flash Builder 4 wizard now supports data types for introspection.
ZF-6992 Negative integers on 64 bit system is resolved.
ZF-6775 Unable to send Array’s from Blaze DS.

Ainda foi detectado um bug nesta nova versão 1.8.4. Quando usado o método addDirectory() a classe a ser chamada pára de carregar. Isso já foi resolvido, mas será lançado amanhã dia 2 de julho a correção. Veja abaixo a solução para este problema:

Substitua o Zend/Loader/PluginLoader.php pela nova versão localizada em
http://framework.zend.com/svn/framework/standard/branches/release-1.8/library/Zend/Loader/PluginLoader.php

======== Atualização 7 de Julho ========
Liberada a versão que resolve o problema do método addDirectory:
http://devzone.zend.com/article/4808-Zend-Framework-1.8.4pl1-Now-Available

Fontes:
http://wadearnold.com/blog/flash/amfphp/major-zend-amf-updates-for-184-release
http://wadearnold.com/blog/flash/zf-184-breaks-adddirectory

| Entradas recentes »

ACERCA

O que é o RedeRIA ?

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

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

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


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

AUTORES


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

PUBLICIDADE








Powered by Wordpress & msdevstudio.com