<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Comunidade Portuguesa de Rich Internet Applications &#187; Best Practices</title>
	<atom:link href="http://www.riapt.org/category/best-practices/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.riapt.org</link>
	<description></description>
	<lastBuildDate>Sun, 15 Jan 2012 15:48:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Gerir projectos no Eclipse, Flash Builder, Zend, Aptana, etc</title>
		<link>http://www.riapt.org/2011/08/03/gerir-projectos-no-eclipse-flash-builder-zend-aptana-etc/</link>
		<comments>http://www.riapt.org/2011/08/03/gerir-projectos-no-eclipse-flash-builder-zend-aptana-etc/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 15:08:50 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIAPT]]></category>
		<category><![CDATA[Rich UI]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=924</guid>
		<description><![CDATA[A versão 1.5 do Airgile &#8211; uma plataforma online de gestão de equipas e projectos -, lançada esta semana, suporta agora a interligação com IDEs baseados em Eclipse, como o Flash Builder, Zend ou Aptana, entre outros. Este conector permite que gestores de projecto e equipas de desenvolvimento possam colaborar de uma forma mais eficaz. [...]]]></description>
			<content:encoded><![CDATA[<p>A versão 1.5 do <a href="http://airgile.com" target="_blank">Airgile</a> &#8211; uma plataforma online de gestão de equipas e projectos -, lançada esta semana, suporta agora a interligação com IDEs baseados em <a href="http://www.eclipse.org"  target="_blank">Eclipse</a>, como o <a href="http://www.adobe.com/products/flash-builder.html"  target="_blank">Flash Builder</a>, <a href="http://www.zend.com/products/studio/"  target="_blank">Zend</a> ou <a href="http://www.aptana.com/"  target="_blank">Aptana</a>, entre outros. Este <a href="http://www.airgile.com/welcome/pt/conector-eclipse"  target="_blank">conector</a> permite que gestores de projecto e equipas de desenvolvimento possam colaborar de uma forma mais eficaz.</p>
<p>O gestor de projecto irá usufruir do conforto do <a href="http://airgile.com" target="_blank">Airgile</a> para gerir e acompanhar a evolução dos projectos, delegando tarefas aos consultores e programadores. Estes receberão as tarefas directamente no Eclipse, a sua ferramenta de trabalho de eleição. À medida que completam as tarefas, os consultores podem fechá-las directamente no Eclipse, que irá sincronizar com o Airgile (automaticamente), actualizando os indicadores e notificando o gestor de projecto.</p>
<p>Este é o workflow de gestão que usamos na <a href="http://www.webfuel.pt" target="_blank">Webfuel</a>, ligando o Eclipse antigamente ao Trac e actualmente com o Airgile &#8211; que é mais rápido e confortável. É relativamente fácil configurar a ligação, estando as instruções disponíveis <a href="http://www.airgile.com/welcome/pt/conector-eclipse">aqui</a>.<br/><br/>No vídeo abaixo, a partir dos 5:45 é possível ver o conector em acção.<br />
<br/><br />
<center><br />
<iframe class="aligncenter" width="560" height="349" src="http://www.youtube.com/embed/5meCMry5ank" frameborder="0" allowfullscreen></iframe><br />
</center><br />
<br/><br/><br />
Esta versão do Airgile, entre dezenas de novidades, possui agora um novo interface gráfico, ainda mais leve e intuitivo.<br />
Desde a versão 1 foram adicionadas muitas novas funcionalidades ao Airgile, como a filtragem avançada, registo de actividade, ferramentas de planificação, criação/edição rápida de tarefas, e faseamento de projectos, entre outras. As próximas versões contarão com planeamento de Sprints e um Burndown-chart para projectos baseados em SCRUM.<br />
<br/><br />
<img class="aligncenter" width="600" src="http://www.airgile.com/welcome/images/tour/gui_pt.png" alt="Tarefas partilhadas entre o Airgile e o Eclipse" /><br />
<br/><br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2011/08/03/gerir-projectos-no-eclipse-flash-builder-zend-aptana-etc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Airgile &#8211; Gestão de projectos em Português</title>
		<link>http://www.riapt.org/2011/04/11/airgile-uma-ria-de-gestao-de-projectos-em-tempo-real/</link>
		<comments>http://www.riapt.org/2011/04/11/airgile-uma-ria-de-gestao-de-projectos-em-tempo-real/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 13:05:37 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIAPT]]></category>
		<category><![CDATA[Rich UI]]></category>
		<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=851</guid>
		<description><![CDATA[O Airgile é uma Rich Internet Application de gestão de equipas, projectos e tarefas implementada pela Webfuel caracterizada pelo seu interface absolutamente delicioso e pela sua simplicidade e velocidade de resposta, sendo possívelmente a mais rápida aplicação do género no mercado. O Airgile sincroniza automaticamente as alterações às tarefas entre todos os elementos da equipa automaticamente, [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://airgile.com" target="_blank">Airgile</a> é uma Rich Internet Application de gestão de equipas, projectos e tarefas implementada pela <a href="http://www.webfuel.pt" target="_blank">Webfuel</a> caracterizada pelo seu interface absolutamente delicioso e pela sua <strong>simplicidade </strong>e velocidade de resposta, sendo possívelmente a mais rápida aplicação do género no mercado.</p>
<p>O Airgile <strong>sincroniza </strong>automaticamente as alterações às tarefas entre todos os elementos da equipa automaticamente, o que permite que as equipas trabalhem a todo o gás e que os gestores de projecto acompanhem as evoluções ao projecto em tempo real através de um <strong>dashboard </strong>intuitivo. Pesquisas e filtragens a milhares de tarefas demoram menos de meio segundo, tal como adicionar ou editar tarefas &#8211; através do Quick-Add e Quick-edit.</p>
<p style="text-align: center;"><a href="http://www.riapt.org/wp-content/uploads/2011/04/1-dashboard1.jpg" target="_blank"><img class="aligncenter size-large wp-image-869" title="1-dashboard" src="http://www.riapt.org/wp-content/uploads/2011/04/1-dashboard1-1024x575.jpg" alt="" width="600" height="337" /></a></p>
<p>Feito a pensar em equipas espalhadas em redor do mundo, suporta <strong>multi-linguagem</strong> (por agora em Português e Inglês) e lida automaticamente com o fuso horário. Isto é,  uma tarefa introduzida a uma determinada hora em Portugal, aparece com a hora correcta para os elementos da equipa localizados no Brasil sem qualquer configuração necessária.</p>
<p>Além da informação detalhada que é possível colocar numa tarefa &#8211; como o tipo, estado, importância, data de início, fim, orçamento, entre outras -, é ainda possível anexar<strong> múltiplos ficheiros</strong> de uma só vez sem que tenha que esperar que o envio termine para continuar a trabalhar. Isto é, a aplicação não bloqueia em tarefas assíncronas, tudo com o objectivo de aumentar a produtividade! O sistema de <em>preview inline </em>permite visualizar imagens e ficheiros de texto dentro da aplicação, sem ter que os descarregar para o seu computador.</p>
<p style="text-align: center;"><a href="http://www.riapt.org/wp-content/uploads/2011/04/4-detail.jpg" target="_blank"><img class="aligncenter size-large wp-image-857" title="4-detail" src="http://www.riapt.org/wp-content/uploads/2011/04/4-detail-1024x575.jpg" alt="" width="600" height="337" /></a></p>
<p>O sistema de <strong>comentários</strong> associado a cada tarefa reforça a comunicação entre os elementos da equipa &#8211; ou mesmo com o cliente -, incentivando a troca de ideias ou pedidos de esclarecimento.</p>
<p>O Airgile encarrega-se de enviar automaticamente <strong>emails </strong>a todos os utilizadores ligados a um projecto sempre que há alterações  (nova tarefa, tarefa editada, novo comentário, etc), podendo o gestor de conta activar a opção de <strong>subscrição </strong>por tarefa, permitindo que cada pessoa opte individualmente por receber mails só nas alterações das tarefas que escolher.</p>
<p>O sistema de permissões permite ligar utilizadores a projectos, sendo definido projecto a projecto se determinado utilizador pode somente consultar, inserir tarefas, e deixar comentários; se pode aceder às tarefas <strong>confidenciais;</strong> ou ainda se terá permissões de gestor de projectos que lhe permitem manipular todas as tarefas.</p>
<p style="text-align: center;"><img class="aligncenter" title="2-list" src="http://www.riapt.org/wp-content/uploads/2011/04/2-list-1024x575.jpg" alt="" width="600" /></p>
<p>Como cada projecto e negócio é diferente, o Airgile permite-lhe <strong>configurar </strong>projecto a projecto os tipos, estados e níveis de importância das tarefas. Isto é, é fácil adaptar os projectos a áreas completamente distintas, como a consultoria em IT, ou a advocacia.</p>
<p>Os pormenores de usabilidade do Airgile são deliciosos, com vista não só a aumentar largamente a produtividade da equipa e assegurar o cumprimento de prazos, como também a permitir a utilização por diferentes pessoas com níveis de conhecimentos informáticos completamente díspares: a sua simplicidade tornam o Airgile na ferramenta de gestão de projectos ideal tanto para utilizadores experientes, como para utilizadores inexperientes.<a href="http://www.riapt.org/wp-content/uploads/2011/04/2-list.jpg"></a></p>
<p>Estando alojado numa Cloud, a plataforma está acessível a partir de qualquer computador em qualquer local do mundo com ligação à Internet, sendo compatível com todos os sistemas operativos e web-browsers usando o Flash Player 10.2. Não existem incompatibilidades entre web-browsers e sistemas operativos, sendo o desempenho e robustez da aplicação sempre ao mais alto nível.</p>
<p style="text-align: center;"><a href="http://www.riapt.org/wp-content/uploads/2011/04/3-new.jpg" target="_blank"><img class="aligncenter size-large wp-image-856" title="3-new" src="http://www.riapt.org/wp-content/uploads/2011/04/3-new-1024x575.jpg" alt="" width="600" /></a></p>
<p>O Airgile está disponível no modelo Software-as-a-service, isto é, mediante o pagamento de uma mensalidade muito baixa (a começar nos 6€/mês!), mas possui também uma conta gratuíta limitada a um projecto. Ao longo do tempo, o Airgile continuará a crescer com novas funcionalidades sempre com vista a aumentar a produtividade dos utilizadores.</p>
<p>O site do Airgile está disponível em <a href="http://airgile.com" target="_blank">http://airgile.com</a> e possui não só vários vídeos de demonstração, como lhe permite testar uma conta de demonstração com dados fictícios antes de poder criar a sua conta.</p>
<p style="text-align: center;"><a href="http://www.riapt.org/wp-content/uploads/2011/04/5-comments.jpg" target="_blank"><img class="aligncenter size-large wp-image-858" title="5-comments" src="http://www.riapt.org/wp-content/uploads/2011/04/5-comments-1024x575.jpg" alt="" width="600" /></a></p>
<p>A aplicação foi desenvolvida pela <a href="http://www.webfuel.pt" target="_blank">Webfuel</a>, sendo completamente nacional. Assenta na Cloud, e corre em qualquer browser, tendo sido implementada em Flex usando o Adobe Flash Builder 4.5.  Planeamos lançar uma versão instalável com suporte a OCC (trabalhar offline) e uma versão para Android e iOS através de Air 2.6.</p>
<p>Experimentem o <a href="http://www.airgile.com" target="_blank">Airgile</a>, forneçam-nos feedback usando o <a href="http://airgile.com/welcome/pt/forum" target="_blank">fórum</a> e ajudem-nos a divulgar este produto de origem nacional! <img src='http://www.riapt.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div><span style="color: #0000ee;"><br />
</span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2011/04/11/airgile-uma-ria-de-gestao-de-projectos-em-tempo-real/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Porquê aprender Maven?</title>
		<link>http://www.riapt.org/2011/01/04/porque-aprender-maven/</link>
		<comments>http://www.riapt.org/2011/01/04/porque-aprender-maven/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 19:56:21 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Introduções]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=815</guid>
		<description><![CDATA[Prólogo Comecei recentemente a dar os primeiros passos na aprendizagem de Maven, e apesar de ainda ser um novato achei por bem partilhar as razões pelas quais esta tecnologia é tão interessante. Apesar de utilizarmos Maven há já algum tempo nos nossos projectos na Webfuel e de conhecer os seus benefícios, nunca tinha investido tempo [...]]]></description>
			<content:encoded><![CDATA[<h2>Prólogo</h2>
<p>Comecei recentemente a dar os primeiros passos na aprendizagem de <a href="http://en.wikipedia.org/wiki/Apache_Maven">Maven</a>, e apesar de ainda ser um novato achei por bem partilhar as razões pelas quais esta tecnologia é tão interessante.</p>
<p>Apesar de utilizarmos Maven há já algum tempo nos nossos projectos na <a href="http://www.webfuel.pt">Webfuel </a>e de conhecer os seus benefícios, nunca tinha investido tempo na sua aprendizagem visto que a configuração dos projectos com Maven estava a cargo de uma empresa nossa parceira (<a href="http://www.web-responsive.com">Web-Responsive</a>). Sou, portanto, tenrinho no assunto, mas sinto-me compelido a partilhar as razões pelas quais vale a pena aprender Maven.</p>
<p>Este post não é um tutorial a explicar como se usa, mas sim uma descrição de alguns dos problemas (use cases) que o Maven resolve em projectos complexos. De notar ainda que o Maven não é específico ao desenvolvimento de RIAs, mas sim aplicável ao desenvolvimento em qualquer tecnologia que tenha um plugin para Maven. Para Flex existe o <a href="http://code.google.com/p/flex-mojos/">flex-mojos</a> que cobre grande parte dos tópicos referidos neste post, mas não todos (ainda). Diria que no mundo J2EE, aí sim, o Maven se porta brilhantemente &#8211; por exemplo, na configuração de um JAVA + <a href="http://www.springsource.org/">Spring </a>+ <a href="http://www.hibernate.org/">Hibernate </a>+ <a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS">BlazeDS </a>+ <a href="http://www.springsource.org/spring-flex">Springflex </a>+ montes.de.outras.libs.</p>
<h2>O que é o Maven?</h2>
<p>O Maven é uma ferramenta poderosa para gestão de projectos, gestão de dependências, gestão de versões, automatização do processo de build (compilação, unit tests, reporting, etc), configuração de ambientes de desenvolvimento, entre outras. É uma ferramenta com cerca de 3 megas que se utiliza através da linha de comandos (ou através de alguns plugins para Eclipse, como o m2eclipse), para executar diversas tarefas sobre um (ou vários) projecto(s), regra geral associadas à sua compilação, mas sobretudo manutenção. Bem, o ideal é mesmo ver os exemplos mais abaixo&#8230;</p>
<h2>(Mais prólogo) Esqueçamos o modelo de projectos gigantes&#8230;</h2>
<p>É importante compreender que existe uma maneira &#8220;à-la-Maven&#8221; para a estruturação de um projecto. Um &#8220;projecto físico&#8221; deve ser separado em vários sub-projectos/componentes/bibliotecas (artefactos), com dependências entre eles. A noção de um projecto, com Maven, pode resultar em 10 ou mesmo 100 &#8220;projectos Eclipse&#8221;.  Por outras palavras, o projecto &#8220;my-huge-crm-application&#8221; quando criado &#8220;à-la-Maven&#8221; deve ser dividido em &#8220;my-crm-users&#8221;, &#8220;my-crm-reports&#8221;, &#8220;my-crm-costumers&#8221;, &#8220;my-crm-commons&#8221;, &#8220;my-crm-config&#8221;, &#8220;my-company-lib&#8221;, &#8220;my-3rdparty-lib&#8221;, etc &#8211; podendo-se atingir com facilidade 10 ou 20 projectos diferentes, com dependências uns dos outros (isto é, o my-crm-commons.jar é usado pelo my-crm-costumers, etc).</p>
<p>À primeira vista, pode parecer mais confuso, mas na realidade resulta numa maior simplicidade &#8211; graças à elegância do Maven, como veremos adiante.</p>
<p>O Maven lida com uma simplicidade extrema com as dependências entre projectos e com o processo de build &#8211; por exemplo, ao compilar um projecto que depende de outro, o Maven irá descarregar o outro projecto de um repositório onde possa estar instalado, ou se não o encontrar, mas tiver &#8220;acesso&#8221; ao código fonte, compilar o outro projecto -, e graças a esta arquitectura de gestão de dependências, torna-se relativamente fácil acoplar, desacoplar e substituir projectos/módulos/dependências num projecto.</p>
<h2>(Ainda mais prólogo) Algumas notas prévias</h2>
<div id="_mcePaste">
<ol>
<li> Para começar a usar o Maven, a única coisa necessária são os binários (executáveis) do Maven (<a href="http://maven.apache.org/download.html">http://maven.apache.org/download.html</a>, cerca de 3 MB). O resto das dependências necessárias ao Maven serão descarregadas automaticamente da primeira vez que um comando Maven (mvn) for executado.</li>
<li>O Maven baseia-se na existência de um ficheiro de &#8220;configuração&#8221; chamado de &#8220;pom.xml&#8221;. Este ficheiro é um XML simples que o Maven irá analisar para executar os seus &#8220;objectivos&#8221; (&#8220;goals&#8221;). Existe um pom.xml para cada projecto / módulo / biblioteca, sendo que estes (os projectos.. ou módulos.. ou bibliotecas..) são chamados de &#8220;artefactos&#8221; no mundo Maven.</li>
<li>Quando se usa Maven, deve-se  evitar ao máximo usar o Eclipse para fazer o &#8220;setup&#8221; do ambiente de desenvolvimento. Sempre que possível, o Maven deverá ser responsável pelo setup do ambiente de dev. Os menus &#8220;Project &gt; Properties&#8221;, e &#8220;Create New Project&#8221; no Eclipse são ferramentas que devemos evitar, pois o Maven consegue (pelo menos em projectos JAVA) criar e (principalmente) actualizar os ficheiros de configuração do Eclipse automaticamente de acordo com as configurações do projecto (veremos isto adiante).</li>
</ol>
</div>
<h2>Caso 1: Configurar um projecto do zero é demorado e aborrecido</h2>
<p>O Maven resolve essa tarefa em dois segundos com um único comando, recorrendo a algo conhecido por &#8220;archetypes&#8221;. Como? Escrevendo:</p>
<pre>mvn archetype:generate</pre>
<p>O Maven irá fazer algumas perguntas (tipo de projecto, package, etc) e irá então criar uma estrutura de directorias base com alguns ficheiros necessários (ou dummy) tipicamente necessários nesse tipo de projectos, utilizando uma estrutura de pacotes pré-definida, e criará um ficheiro pom.xml de base. A estrutura de directorias usada pelo Maven obedece a uma *convenção*, normalmente muito bem definida, que torna permite que developers que estejam a analisar um projecto  pela primeira vez entendam rapidamente a sua estrutura, e onde encontrar todos os recursos. Além disso, a convenção usada pelo Maven reduz em *muito* a complexidade dos arquivos pom.xml do Maven (especialmente quando comparando ao Ant), pois não é necessário adicionar configurações extra ao pom.xml &#8211; O Maven irá &#8220;automaticamente&#8221; encontrar os recursos necessários nos locais correctos, se as convenções forem seguidas &#8211; mas, claro, os developers podem fazer override às convenções, embora não seja recomendável.</p>
<p>Outro dos desconfortos na criação de um projecto a partir do zero, é a configuração do projecto no Eclipse. Descarregar as dependências, adicioná-las à classpath no Eclipse, etc&#8230;, e depois fazer isto novamente em cada um dos postos de trabalho de uma equipa. Porém, graças ao <a href="http://maven.apache.org/plugins/maven-eclipse-plugin/">maven-eclipse-plugin</a>, basta um comando para gerar estas configurações. Fazendo:</p>
<pre>maven eclipse:clean eclipse:eclipse</pre>
<p>serão criados automaticamente os ficheiros de configuração do Eclipse (.project, e restantes), de acordo com as dependências e tipo de projecto definidos no pom.xml. A partir daí, basta que em cada posto de trabalho se faça um &#8220;Import Eclipse Project&#8221; no Eclipse, onde regra geral fica tudo maravilhosamente configurado. Graças ao pom.xml o Maven saberá o suficiente para criar correctamente os ficheiros de configuração do Eclipse. Claro que existem centenas de diferentes tipos de projectos no eclipse com configurações diferentes, e o maven-eclipse-plugin não conhece todas. Mas para JAVA, tem-se portado suficientemente bem para 90% dos meus casos. Os outros 10% são resolvidos facilmente adicionando algumas configurações adicionais no pom.xml.</p>
<p>Em resumo, a utilização de archetypes permite criar a estrutura e configuração de projectos a partir do zero, e o maven-eclipse-plugin permite criar e *actualizar* os ficheiros de configuração do Eclipse, sem ser necessário configurar projecto a projecto cada um dos projectos em cada um dos postos de trabalho à mão (isto, para JAVA, regra geral).</p>
<h2>Caso 2: O meu projecto tem 20 dependências, e cada dependência também tem 10 outras dependências&#8230; Além de ser confuso, perco imenso tempo à procura das bibliotecas, a descarregá-las e configurá-las</h2>
<p>Com o maven, é bastante simples. No pom.xml basta adicionar o seguinte XML para especificar que o projecto tem uma dependência do spring-flex, por exemplo:</p>
<pre><span style="font-family: Verdana, Arial, Geneva, Helvetica, sans-serif; color: #1e1e1e;"><span style="line-height: 20px;">         &lt;dependency&gt;
             &lt;groupId&gt; org.springframework.flex &lt;/groupId&gt;
             &lt;artifactId&gt; spring-flex-core &lt;/artifactId&gt;
             &lt;version&gt; 1.5.0.BUILD-SNAPSHOT &lt;/version&gt;
         &lt;/dependency&gt;</span></span></pre>
<p>E aí basta correr:</p>
<pre>mvn install</pre>
<p>O Maven irá automaticamente encontrar a dependência (chamada de &#8220;artifact&#8221;) &#8211; pesquisando num conjunto de repositórios de dependências -, fazendo o download da mesma e &#8220;instalando-a&#8221; no seu repositório local. Irá fazer o mesmo para todas as dependências de cada dependência recursivamente, pelo que não temos que perder tempo com isso. E a partir daí, sempre que compilar com Maven, este irá adicionar cada uma das dependências ao classpath do compilador automaticamente.</p>
<p>A integração com o Eclipse também é incrível &#8211; ao executar:</p>
<pre>mvn eclipse:clean eclipse:eclipse</pre>
<p>o maven irá actualizar (na verdade, irá recriar) os ficheiros de configuração do Eclipse e adicionar as dependências correctamente ao classpath do projecto. Por outras palavras, algo que regra geral pode ser um autêntico pesadelo (definir as dezenas de dependências de um projecto, descarregá-las da internet, configurá-las, e por sua vez fazer o mesmo para as dependências de cada dependência&#8230;), é resolvido elegantemente em poucos segundos!</p>
<p>Esta simplicidade na gestão das dependências não só facilita a configuração das bibliotecas externas necessárias aos nossos projectos, como fomenta a separação dos nossos projectos em dezenas de módulos e bibliotecas, visto que com Maven se torna relativamente simples organizar todas as relações entre projectos.</p>
<h2>Caso 3: Build através da linha de comandos</h2>
<p>Com Maven, iremos utilizá-lo inevitavelmente para compilar.  A compilação é feita através de plagins, que invocam os compiladores com as directrizes de compilação apropriadas, de acordo com o pom.xml. Isto é, não definimos os argumentos dos compiladores; definimos sim a configuração do projecto, e o maven trata de definir os argumentos, regra geral automaticamente! Além da compilação, o Maven irá utilizar o resultado desta para executar tarefas adicionais, como a execução de unit-testing, geração de relatórios, envio de emails quando ocorrem erros de compilação, etc.</p>
<p>Algo extremamente elegante no Maven, é a forma como ele compila vários projectos em &#8220;simultâneo&#8221;, recursivamente de acordo com a ordem das dependências. Algo que iremos ver posteriormente</p>
<h2>Caso 4: É difícil gerir diferentes versões dos meus projectos/bibliotecas e das suas dependências</h2>
<p>Artefactos (módulos, bibliotecas, etc) possuem sempre um número de versão que lhes é inerente. Isto é, a biblioteca log4j poderá existir na versão 1.1, 1.2, etc. Isto significa que se o nosso projecto precisar do log4j 1.3, basta abrir o pom.xml, localizar a zona onde a dependência é definida (ver o caso 2), e mudar a versão para 1.3. O Maven irá descarregar automaticamente a versão 1.3 e actualizar as definições do projecto. Posteriormente, ao correr mvn eclipse:clean eclipse:eclipse, o Maven vai ainda reconfigurar o Eclipse com a nova versão da dependência. Agora imagine-se que por alguma razão é preciso voltar à versão 1.1 do log4j. Simples. Basta mudar no pom.xml a versão da dependência para 1.1, e o Maven trata do resto.</p>
<p>Mas o que acontece com suas próprias bibliotecas (aliás artefactos) &#8211; como são geridas as versões? Sempre que é executado o &#8220;mvn install&#8221;, o maven faz o build ao projecto, vai criar o package correspondente (i.e. Jar, War) e vai usar o número da versão definido no pom.xml para instalar o artefacto compilado no repositório local (ou online). Um repositório não é mais que um género de &#8220;base de dados&#8221; de bibliotecas gerida automaticamente pelo Maven.</p>
<p>Imagine-se que estamos a implementar o projecto A v1.0, que depende do projecto B v0.5. Temos ainda o projecto C v0.2 que também depende do Projecto B v0.5. Quando se faz o build install do projecto A v1.0, como este depende de B v0.5, o Maven vai primeiro fazer build, (package), e instalar o projecto B v0.5 e só depois o mesmo ao projecto A. Por sua vez, ao fazer build install ao projecto C v0.2, como o artefacto B v0.5 já existe e está instalado, o Maven não recompila o projecto B (excepto se houverem mudanças no código), usando a versão do projecto B v0.5 instalada no repositório.</p>
<p>Agora imaginemos que evoluimos o projecto B, actualizamos a versão para v0.6 no pom.xml. Estas alterações são necessárias ao projecto A, pelo que mudamos também o versão na dependência definida no pom.xml do projecto A. Porém, o projecto C ainda depende da versão v0.5 do projecto B, e não quer as novas alterações. O maven gere isto confortavelmente, pois irá simplesmente usar a versão do artefacto necessária, já previamente instalada no repositório.</p>
<p>Ou seja, elegantemente conseguimos ir evoluindo as versões das nossas bibliotecas &#8220;sem termos que nos preocupar&#8221; com quebrar a compatibilidade com projectos que dependem das mesmas, visto que o número de versão toma aqui um papel muito importante, facilmente gerido pelo Maven. Na realidade, é tão fácil, que quase nos esquecemos de porque é que era tão complicado lidar com diferentes versões das bibliotecas&#8230;!</p>
<h2>Caso 5: O meu projecto consiste em 20 projectos de Eclipse, dependendo uns dos outros e é preciso compilá-los na ordem correcta para que tudo funcione</h2>
<p>Esta é uma tarefa aborrecida no Eclipse, para a qual normalmente usamos o Ant. Mas que o Maven gere de uma forma muito simples, e confortável. Relembrando, cada projecto tem um ficheiro  pom.xml. Os projectos podem ser organizados em níveis. Por exemplo:</p>
<div style="padding-left: 30px;">ProjectA</div>
<div style="padding-left: 60px;">ProjectA-server</div>
<div style="padding-left: 120px;">ProjectA-server-dao</div>
<div style="padding-left: 120px;">ProjectA-server-business</div>
<div style="padding-left: 120px;">ProjectA-server-shared</div>
<div style="padding-left: 120px;">ProjectA-server-adminconsole</div>
<div style="padding-left: 120px;">ProjectA-server-webapp</div>
<div style="padding-left: 60px;">ProjectA-flex-client</div>
<div style="padding-left: 90px;">ProjectA-flex-mainapp</div>
<div style="padding-left: 90px;">ProjectA-flex-moduleA</div>
<div style="padding-left: 90px;">ProjectA-flex-moduleB</div>
<div style="padding-left: 120px;">ProjectA-flex-moduleB-submodule1</div>
<div style="padding-left: 120px;">ProjectA-flex-moduleB-submodule2</div>
<div style="padding-left: 90px;">ProjectA-flex-shared</div>
<p>Cada um dos (artefactos) acima possui um pom.xml. Nos pom.xml &#8220;parent&#8221;, adiciona-se:</p>
<pre> &lt;modules&gt;
      &lt;module&gt;ProjectA-server&lt;/module&gt;
      &lt;module&gt;ProjectA-flex-client&lt;/module&gt;
  &lt;/modules&gt;</pre>
<p>Quando o maven é executado no projecto base, irá analisar a configuração dos módulos, e tentar executar primeiro o build em cada um dos módulos definidos, e por sua vez, em cada um dos sub-módulos, recursivamente na ordem correcta de dependência, &#8220;instalando-os&#8221; no repositório local. Mas claro, é sempre possível indicar ao Maven que queremos compilar só um projecto.</p>
<h2>Caso 6: O projecto está a ser implementado numa equipa, mas é penoso configurar todos os projectos no Eclipse um a um em cada um dos postos de trabalho</h2>
<p>Os ficheiros de projecto (.project) do Eclipse são específicos da máquina em que estão (i.e. um .project configurado no meu computador provavelmente não funcionará no computador do lado), e portanto não é boa prática colocá-los no SCM para partilhar com a equipa. Isto quer dizer que normalmente todos os elementos da equipa têm que criar à mão um novo projecto no Eclipse, configurar as dependências, definir a build path, etc, etc. Por vezes, estas configurações são até um pouco complicadas e demoradas, e algo corre mal, pelo que alguém tem que andar a saltar de estação em estação a ajudar a configurar o ambiente de desenvolvimento. E o pesadelo repete-se sempre que há uma alteração à configuração (novas dependências, novas versões, etc).</p>
<p>Com o Maven, como já foi referido anteriormente, queremos evitar de mexer com nas configurações de projecto do Eclipse. Por outras palavras, o Maven irá, regra geral, tratar desta tarefa automaticamente por nós. Quando escrevemos:</p>
<pre>mvn eclipse:eclipse</pre>
<p>O Maven irá ler o pom.xml, e usá-lo para criar os ficheiros de configuração do Eclipse para esse projecto, e para todos os sub-módulos desse projecto (ver Caso 5). Depois basta fazer um &#8220;Import &gt; Eclipse project&#8221; no Eclipse, e já está, pronto a trabalhar. Naturalmente, já tinha referido isto no caso 1, mas voltei a repeti-lo aqui para reforçar o quão útil é este comportamento no desenvolvimento em equipa, especialmente na configuração inicial do ambiente de desenvolvimento de um novo projecto.</p>
<h2>Mais possibilidades</h2>
<p>Este post podia alongar-se em muitas mais páginas. Como ainda estou a estudar maven, este é o ponto a que já cheguei:</p>
<div id="_mcePaste">
<ul>
<li>Criar a estrutura de projectos de raíz (archetypes), para diferentes tipos de projecto</li>
<li>Configurar projectos Eclipse fora do Eclipse, recorrendo ao Maven</li>
<li>Deixar que o Maven gira automaticamente as dependências dos projectos</li>
<li>Deixar que o Maven gira automaticamente as versões dos projectos</li>
<li>Compilar vários sub-projectos com um único comando, e receber feedback do maven dos resultados de cada um</li>
</ul>
</div>
<p>Mas ainda me falta:</p>
<div id="_mcePaste">
<ul>
<li>Unit Testing &#8211; executar automaticamente todos os unit tests de todos os projectos, analisar o code coverage, etc</li>
<li>Gerar relatórios (de qualidade de código, de resultado das compilações, etc)</li>
<li>Integração com sistemas de continuous integration</li>
<li>Dezenas de outras funcionalidades do Maven</li>
</ul>
</div>
<h2>Em resumo&#8230;</h2>
<p>Resumindo, qualquer pessoa numa equipa pode executar um único comando que irá:</p>
<div id="_mcePaste">
<ol>
<li>&#8220;Encontrar&#8221;, descarregar, e configurar as dependências do projecto;</li>
<li>Configurar o ambiente de desenvolvimento no Eclipse (ficheiros .project)</li>
<li>Fazer o build a todos os projectos relacionados;</li>
<li>Executar os unit tests de todos os projectos;</li>
<li>Criar o packaging correcto para todos os projectos;</li>
<li>Instalar cada projecto (artefacto) no repositório;</li>
<li>Gerar relatórios diversos;</li>
<li>Fazer deploy da aplicação localmente ou online;</li>
<li>Etc&#8230;</li>
</ol>
</div>
<p>Interessa também realçar que os ficheiros pom.xml acabam por se tornar em manuais/guias valiosos para novos developers entenderem muito rapidamente a organização de um sistema complexo. Outro facto de realce, é que o plugin <a href="http://m2eclipse.sonatype.org/">m2Eclipse</a> possui um interface gráfico para editar e gerir os ficheiros pom.xml, simplificando em muito a vida na fase de configuração do projecto.</p>
<p>João Saleiro (<a href="http://www.webfuel.pt">Webfuel</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2011/01/04/porque-aprender-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RiaPT meeting no Porto!</title>
		<link>http://www.riapt.org/2010/02/08/riapt-meeting-no-porto/</link>
		<comments>http://www.riapt.org/2010/02/08/riapt-meeting-no-porto/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 10:33:23 +0000</pubDate>
		<dc:creator>rduartes</dc:creator>
				<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Amfphp]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[Flash remoting]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Introduções]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=632</guid>
		<description><![CDATA[No próximo dia 6 de Março de 2010 vai-se realizar uma reunião do RiaPT no Porto. Vai ser um evento do tipo stand-up and speak com comunicações de elevado interesse com 20 minutos de duração cada para garantir que apenas temos "sumo"...]]></description>
			<content:encoded><![CDATA[<p><strong>6 de Março de 2010 o RiaPT vai voltar ao Porto!</strong></p>
<p>Marca desde já essa data na agenda e prepara-te para passar uma tarde bem disposta juntamente com pessoas que partilham contigo interesses e paixões pela Internet e não só!</p>
<p>Vamos ter speakers a abordar temas de elevado interesse da actualidade que te vão deixar com água na boca para aprender, explorar e procurar as inovações para o design e desenvolvimento das tuas aplicações!</p>
<p>O universo de desenvolvimento de aplicações web está em perfeita erupção! Não são só as tecnologias cliente, mas toda a &#8220;pilha&#8221; de desenvolvimento com as suas diversas tecnologias, linguagens e ferramentas está a ser posta em causa e cada um quer encontrar o seu nicho nesta realidade. Não perca esta oportunidade de ouvir alguns experts  portugueses na área do desenvolvimento de Rich Internet Applications.</p>
<p>Como se isto não fosse suficiente ainda vamos ter prémios para distribuir pelo pessoal que estiver a assistir que vão desde licenças de software a vouchers de cursos de formação e outros.</p>
<p><strong>Não percam! Dia 6 de Março, no Edifício &#8220;Maus Hábitos&#8221;, às 14:00, e sim, no Porto!</strong></p>
<p>Inscreve-te em: <a title="http://riapt.stagehq.com/events/182/booking/new" href="http://riapt.stagehq.com/events/182/booking/new" target="_blank">http://riapt.stagehq.com/events/182/booking/new</a></p>
<h3>Agenda</h3>
<table width="100%">
<tbody>
<tr>
<td>14:00</td>
<td>Abertura</td>
<td>Rui Silva, Mauro Martins</td>
</tr>
<tr>
<td>14:10</td>
<td>Zend Framework com Flash</td>
<td>Miguel Pinto</td>
</tr>
<tr>
<td>14:35</td>
<td>Web &#8211; Construir é diferente de ver!</td>
<td>Mauro Martins</td>
</tr>
<tr>
<td>15:00</td>
<td>Flex Decoupled &#8211; Build Strong from the Foundation</td>
<td>Vítor Monteiro</td>
</tr>
<tr>
<td>15:25</td>
<td>Balsamiq Mockups e Napkee: A arte de &#8220;rabiscar&#8221;</td>
<td>Rui Silva</td>
</tr>
<tr>
<td>15:50</td>
<td>Papervision 3D</td>
<td>João Crispim</td>
</tr>
<tr>
<td>16:10</td>
<td>Coffee Break</td>
<td>Networking</td>
</tr>
<tr>
<td>16:25</td>
<td>Make Web not War: A plataforma Microsoft</td>
<td>Luís Martins</td>
</tr>
<tr>
<td>16:50</td>
<td>Silverlight 101: Anatomia de uma Aplicação</td>
<td>Ricardo Castelhano</td>
</tr>
<tr>
<td>17:15</td>
<td>Swiz e Flex</td>
<td>João Fernandes</td>
</tr>
<tr>
<td>17:40</td>
<td>&#8220;HYPE&#8221;: Voltar à criatividade em Flash!</td>
<td>João Gonçalves</td>
</tr>
<tr>
<td>18:05</td>
<td>HTML5: A realidade da utopia</td>
<td>Nuno Gomes</td>
</tr>
<tr>
<td>18:30</td>
<td>Encerramento &#8211; Prémios</td>
<td>Rui Silva, Mauro Martins</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2010/02/08/riapt-meeting-no-porto/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Keynotes Evento RIAPT</title>
		<link>http://www.riapt.org/2010/01/21/keynotes-evento-riapt/</link>
		<comments>http://www.riapt.org/2010/01/21/keynotes-evento-riapt/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 03:03:05 +0000</pubDate>
		<dc:creator>joaogoncalves</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIAPT]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[boas práticas]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=570</guid>
		<description><![CDATA[Espero que todos tenham apreciado nosso evento de dia 16 de Janeiro, quero aqui deixar mais uma vez e publicamente o nosso Muito obrigado à: Novabase, FLAG, Microsoft e Adobe, pelo magnifico evento que nos proporcionaram. Além dos patrocinadores, quero deixar também o meu agradecimento a todos os oradores, que se esmeraram na qualidade das apresentações, para aqueles que não estiveram [...]]]></description>
			<content:encoded><![CDATA[<p>Espero que todos tenham apreciado nosso evento de dia 16 de Janeiro, quero aqui deixar mais uma vez e publicamente o nosso Muito obrigado à: <strong><a href="http://www.novabase.pt" target="_blank">Novabase</a></strong>, <strong><a href="http://www.flag.pt" target="_self">FLAG</a></strong>, <strong><a href="http://www.microsoft.pt" target="_blank">Microsoft </a></strong>e <strong><a href="http://www.adobe.com" target="_blank">Adobe</a></strong>, pelo magnifico evento que nos proporcionaram.</p>
<p>Além dos patrocinadores, quero deixar também o meu agradecimento a todos os oradores, que se esmeraram na qualidade das apresentações, para aqueles que não estiveram presentes no evento deixo aqui as apresentações , excepto a do João Saleiro que já fez o favor de nos disponibilizar a sua.</p>
<p>Estamos também a contar ter esta semana os vídeos da apresentação assim que tiverem na nossa posse disponibilizaremos aqui no blog.</p>
<p><strong>Apresentação do Luis Martins:</strong></p>
<p><strong><a href="http://www.riapt.org/wp-content/uploads/2010/01/Luis-Martins.pdf" target="_blank"><img class="alignnone size-full wp-image-593" src="http://www.riapt.org/wp-content/uploads/2010/01/luis.png" alt="luis" width="441" height="273" /></a></strong></p>
<p><strong> </strong></p>
<p><strong>Apresentação Enrique Duvos:</strong></p>
<p><strong><a href="http://www.riapt.org/wp-content/uploads/2010/01/RIA-Event-Lisbon-Jan-2010_2.pdf"><img class="alignnone size-full wp-image-592" src="http://www.riapt.org/wp-content/uploads/2010/01/enrique.png" alt="enrique" width="472" height="352" /></a></strong></p>
<p><strong> </strong></p>
<p><strong>Apresentação Nuno Godinho:<br />
<a href="http://www.riapt.org/wp-content/uploads/2010/01/Nuno-Godinho.pdf"><img class="alignnone size-full wp-image-594" src="http://www.riapt.org/wp-content/uploads/2010/01/nuno.png" alt="nuno" width="440" height="332" /></a></strong></p>
<p><strong>Apresentação Ricardo Castelhano e Ricardo Fiel:</strong></p>
<p><strong><a href="http://www.riapt.org/wp-content/uploads/2010/01/silverlightemcenariosinternet-100120075434-phpapp021.pdf"><img class="alignnone size-full wp-image-595" src="http://www.riapt.org/wp-content/uploads/2010/01/ric.png" alt="ric" width="443" height="331" /></a></strong></p>
<p><strong> </strong></p>
<p>Mais uma vez obrigado pela participação de todos, e quero desde já deixar aqui uma noticia em primeira mão, se gostaram deste evento preparem-se porque vêem ai novidades, como por exemplo a presença do <strong><a href="http://www.joshuadavis.com/" target="_blank">Joshua Davis</a></strong>, num próximo evento nosso, além de muitas outras que estão na manga, acreditem este ano irá ser o ano da nossa <strong>RIAPT</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2010/01/21/keynotes-evento-riapt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Slides da apresentação &#8220;Enterprise RIAs 2&#8243; no 3º Aniversário do RiaPT</title>
		<link>http://www.riapt.org/2010/01/18/slides-da-apresentacao-enterprise-rias-2-no-3%c2%ba-aniversario-do-riapt/</link>
		<comments>http://www.riapt.org/2010/01/18/slides-da-apresentacao-enterprise-rias-2-no-3%c2%ba-aniversario-do-riapt/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 15:20:51 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flash remoting]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Formação]]></category>
		<category><![CDATA[Gumbo]]></category>
		<category><![CDATA[RIAPT]]></category>
		<category><![CDATA[Rich UI]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=560</guid>
		<description><![CDATA[Tal como prometido, aqui estão os slides da apresentação &#8220;Enterprise RIAs 2- Meet our dirty secrets&#8221;. A apresentação anterior, &#8220;Enterprise RIAs &#8211; This is how we do it&#8221; pode ser encontrada aqui. As minhas desculpas se estava mais murcho e cansado do que o costume, mas estava meio adoentado. Queria dar os parabéns à organização [...]]]></description>
			<content:encoded><![CDATA[<p>Tal como prometido, aqui estão os slides da apresentação &#8220;Enterprise RIAs 2- Meet our dirty secrets&#8221;. A apresentação anterior, &#8220;Enterprise RIAs &#8211; This is how we do it&#8221; pode ser encontrada <a href="http://www.riapt.org/2009/06/27/slides-da-apresentacao-enterprise-rias-no-flashcamp/" target="_blank">aqui</a>. As minhas desculpas se estava mais murcho e cansado do que o costume, mas estava meio adoentado.</p>
<p>Queria dar os parabéns à organização (exemplares!!), aos patrocinadores e principalmente aos oradores que estiveram fantásticos, com apresentações de elevada qualidade.</p>
<p style="text-align: left;">Não se esqueçam de deixar o vosso comentário à apresentação, e se houverem questões, não tenham problemas em contactar-me. Espero que tenham gostado e que a apresentação vos tenha sido útil.</p>
<p style="text-align: left;">[Update] Duas pessoas pediram-me a versão digital do documento da Webfuel, mas como não fiquei com o contacto delas, aqui vai o <a href="http://www.webfuel.pt/WebfuelOverview.pdf" target="_blank">link</a> [/Update]</p>
<p style="text-align: center;">
<p style="text-align: center;"><object style="width: 600px; height: 500px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="500" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.riapt.org/wp-content/uploads/2010/01/Enterprise-RIAs-2-Meet-our-dirty-tricks.swf" /><embed style="width: 600px; height: 500px;" type="application/x-shockwave-flash" width="600" height="500" src="http://www.riapt.org/wp-content/uploads/2010/01/Enterprise-RIAs-2-Meet-our-dirty-tricks.swf"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2010/01/18/slides-da-apresentacao-enterprise-rias-2-no-3%c2%ba-aniversario-do-riapt/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Slides da apresentação &#8220;Enterprise RIAs&#8221; no FlashCamp</title>
		<link>http://www.riapt.org/2009/06/27/slides-da-apresentacao-enterprise-rias-no-flashcamp/</link>
		<comments>http://www.riapt.org/2009/06/27/slides-da-apresentacao-enterprise-rias-no-flashcamp/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 12:14:21 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=423</guid>
		<description><![CDATA[Tal como prometido, aqui estão os slides da apresentação &#8220;Enterprise RIAs &#8211; This is how we do it&#8220;. Espero que tenham gostado e que a apresentação vos tenha sido útil.]]></description>
			<content:encoded><![CDATA[<p>Tal como prometido, aqui estão os slides da apresentação &#8220;Enterprise RIAs &#8211; This is how we do it<a href="http://www.riapt.org/wp-content/uploads/2009/06/enterprise-rias-this-is-how-we-do-it.pdf"></a>&#8220;. Espero que tenham gostado e que a apresentação vos tenha sido útil.</p>
<p><object style="width: 600px; height: 500px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="500" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.riapt.org/wp-content/uploads/2009/06/Enterprise-RIAs.swf" /><embed style="width: 600px; height: 500px;" type="application/x-shockwave-flash" width="600" height="500" src="http://www.riapt.org/wp-content/uploads/2009/06/Enterprise-RIAs.swf"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2009/06/27/slides-da-apresentacao-enterprise-rias-no-flashcamp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Portugal FlashCamp 2009, dia 25 de Junho no ISCTE, Lisboa</title>
		<link>http://www.riapt.org/2009/06/22/portugal-flashcamp-2009-dia-25-de-junho-no-iscte-lisboa/</link>
		<comments>http://www.riapt.org/2009/06/22/portugal-flashcamp-2009-dia-25-de-junho-no-iscte-lisboa/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 23:53:29 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Formação]]></category>
		<category><![CDATA[RIAPT]]></category>
		<category><![CDATA[Rich UI]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=421</guid>
		<description><![CDATA[No próximo dia 25 de Junho, Quinta-feira, vai ocorrer no ISCTE das 14h30 às 19h30 o Portugal Flash Camp 2009. A agenda é a seguinte: Andrew Shorten (Adobe Systems) &#8211; Flash Catalyst and Flash Builder 4 João Fernandes (Cofina SGPS) &#8211; Data Centric Development João Saleiro (Webfuel) &#8211; Enterprise RIAs: This is how we do [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://images.eventbrite.com/logos/334584752.jpg?rand=48921" title="Logotipo do FlashCamp 2009" class="alignnone" width="450" height="68" /></p>
<p>No próximo dia 25 de Junho, Quinta-feira, vai ocorrer no ISCTE das 14h30 às 19h30 o Portugal Flash Camp 2009. A agenda é a seguinte:</p>
<p>Andrew Shorten (Adobe Systems) &#8211; Flash Catalyst and Flash Builder 4<br />
João Fernandes (Cofina SGPS) &#8211; Data Centric Development<br />
João Saleiro (Webfuel) &#8211; Enterprise RIAs: This is how we do it<br />
Paulo Moreira (Ayumikata) &#8211; Olha mãe, sem rato nem teclado<br />
Rui Silva (Alert) &#8211; Testes Unitários em Flex<br />
Rui Vieira(FullSix) &#8211; Get out There</p>
<p>A morada do ISCTE é: </p>
<p>Avenida das Forças Armadas<br />
Lisboa, 1649-026<br />
Portugal<br />
(Google Maps <a href="http://maps.google.com/maps?q=Avenida+das+For%C3%A7as+Armadas+Lisboa%2C+1649-026+Portugal">link</a>)</p>
<p>As inscrições são gratuítas e limitadas a 350 pessoas. O endereço para se inscrever é <a href="http://portugalflashcamp2009.eventbrite.com/">http://portugalflashcamp2009.eventbrite.com/</a>.</p>
<p>Mais informações no site oficial do Adobe User Group: <a href="http://aug.riapt.org">http://aug.riapt.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2009/06/22/portugal-flashcamp-2009-dia-25-de-junho-no-iscte-lisboa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simular o ambiente de produção usando Virtual Hosts no Apache</title>
		<link>http://www.riapt.org/2008/12/13/simular-o-ambiente-de-producao-usando-virtual-hosts-no-apache/</link>
		<comments>http://www.riapt.org/2008/12/13/simular-o-ambiente-de-producao-usando-virtual-hosts-no-apache/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 14:27:28 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Best Practices]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=401</guid>
		<description><![CDATA[Quando se constroem aplica&#231;&#245;es web, &#233; normalmente uma boa pr&#225;tica configurar-se o ambiente de desenvolvimento de forma a que seja o mais semelhante poss&#237;vel ao ambiente de produ&#231;&#227;o. Uma das configura&#231;&#245;es que se faz antes de se iniciar o desenvolvimento do projecto, &#233; a cria&#231;&#227;o de um virtual host cuja configura&#231;&#227;o seja o mais id&#234;ntica [...]]]></description>
			<content:encoded><![CDATA[<p>Quando se constroem aplica&ccedil;&otilde;es web, &eacute; normalmente uma boa pr&aacute;tica configurar-se o ambiente de desenvolvimento de forma a que seja o mais semelhante poss&iacute;vel ao ambiente de produ&ccedil;&atilde;o.<br />
Uma das configura&ccedil;&otilde;es que se faz antes de se iniciar o desenvolvimento do projecto, &eacute; a cria&ccedil;&atilde;o de um virtual host cuja configura&ccedil;&atilde;o seja o mais id&ecirc;ntica poss&iacute;vel &agrave; configura&ccedil;&atilde;o do servidor onde o projecto estiver alojado.</p>
<p>Entre outras configura&ccedil;&otilde;es, a mais importante &eacute; a estrutura de directorias, que em desenvolvimento &eacute; diferente da estrutura em produ&ccedil;&atilde;o.</p>
<p>Regra geral, quando se trata de uma aplica&ccedil;&atilde;o com backend e um backoffice n&oacute;s costumamos organizar o nosso ambiente de desenvolvimento desta forma:</p>
<p><code>\projectos\projecto</p>
<p>\projectos\projecto\frontend<br />
\projectos\projecto\frontend\bin-debug	(bin&aacute;rios da aplica&ccedil;&atilde;o)<br />
\projectos\projecto\frontend\src<br />
\projectos\projecto\frontend\[...]</p>
<p>\projectos\projecto\backoffice<br />
\projectos\projecto\backoffice\bin-debug		(bin&aacute;rios do backoffice)<br />
\projectos\projecto\backoffice\src</p>
<p>\projectos\projecto\backend		(backend, por exemplo em php)<br />
\projectos\projecto\mm     (imagens, e outros recursos multim&eacute;dia)</code></p>
<p>Quando corremos a aplica&ccedil;&atilde;o localmente, sem os virtual hosts, vamos obter algo como http://localhost/projecto/bin-debug/index.swf . </p>
<p>Para que a aplica&ccedil;&atilde;o possa comunicar com o backend, o path para o gateway ser&aacute; por exemplo algo como ../../backend/gateway.php . </p>
<p>Para que a aplica&ccedil;&atilde;o possa aceder aos recursos multim&eacute;dia (imagens, etc) o caminho ser&aacute; algo como ../../mm/imagem1.jpg .</p>
<p>Estes caminhos n&atilde;o batem certo com os caminhos na vers&atilde;o de produ&ccedil;&atilde;o:</p>
<p><code>www.projecto.pt    (bin&aacute;rios da aplica&ccedil;&atilde;o)<br />
www.projecto.pt/backoffice		(bin&aacute;rios do backoffice)<br />
www.projecto.pt/backend 		(backend, por exemplo em php)<br />
www.projecto.pt/mm				(imagens e recursos multim&eacute;dia)</code></p>
<p>Vemos que na vers&atilde;o de produ&ccedil;&atilde;o a aplica&ccedil;&atilde;o para aceder ao backend vai fazer o caminho backend/gateway.php &#8211; enquanto que na vers&atilde;o de desenvolvimento, fazia o caminho ../../backend/gateway.php . O mesmo se aplica para as restantes directorias.</p>
<p>H&aacute; muita gente que trabalha com a estrutura de directorias e caminhos do ambiente de desenvolvimento, e quando chega a altura de alojar o projecto, mudam os caminhos no source code (ou num ficheiro de configura&ccedil;&atilde;o) e recompilam &#8211; m&aacute; pr&aacute;tica.</p>
<p>Solu&ccedil;&atilde;o: criar um virtual host</p>
<p>O Apache permite que se associe um ambiente com configura&ccedil;&otilde;es espec&iacute;ficas a um determinado dom&iacute;nio. Ou seja, se o Apache receber um pedido de acesso ao dominio www.projecto.dev , e houver um virtual host para esse dominio, podemos configur&aacute;-lo para devolver a nossa pr&oacute;pria estrutura de directorias (e n&atilde;o s&oacute;).</p>
<p>O que gostariamos era de escrever no browser www.projecto.dev , e ser-nos exposto o nosso projecto com a estrutura de directorias igual &agrave; estrutura que vamos obter no servidor.</p>
<p>Vamos come&ccedil;ar por configurar o apache editando o ficheiro httpd.conf na directoria conf do apache. No final do ficheiro, basta adicionar as seguintes linhas:</p>
<p><code>NameVirtualHost 127.0.0.1<br />
Include conf/vhosts/*.conf</code></p>
<p>A primeira linha permite que o apache possa associar os nomes dos dom&iacute;nios pedidos aos virtual hosts que vamos configurar (mais info <a href="http://httpd.apache.org/docs/1.3/mod/core.html#namevirtualhost">aqui</a>). </p>
<p>A segunda linha indica ao Apache para carregar e executar todos os ficheiros de configura&ccedil;&atilde;o com a extens&atilde;o .conf na directoria vhosts. Isto far&aacute; com que criar um novo virtual host seja algo como criar um novo ficheiro .conf na directoria vhosts.</p>
<p>Vamos agora &agrave; directoria vhosts, e vamos criar um ficheiro chamado projecto.conf . </p>
<p>Nesse ficheiro, vamos colocar o seguinte:</p>
<p><code>&lt;VirtualHost 127.0.0.1:80&gt;<br />
DocumentRoot &quot;D:\OsMeusProjectos\projecto\frontend\bin-debug&quot;<br />
ServerName www.projecto.dev<br />
	&lt;Directory &quot;D:\OsMeusProjectos\projecto\frontend\bin-debug&quot;&gt;<br />
	    Options Indexes FollowSymLinks Includes ExecCGI<br />
	    AllowOverride All<br />
	    Order allow,deny<br />
	    Allow from all<br />
	&lt;/Directory&gt;</p>
<p>	Alias /backend &quot;D:\OsMeusProjectos\projecto\backend&quot;<br />
	Alias /backoffice &quot;D:\OsMeusProjectos\projecto\backoffice\bin-debug&quot;<br />
	Alias /mm &quot;D:\OsMeusProjectos\projecto\mm&quot;<br />
&lt;/VirtualHost&gt;</code></p>
<p>Isto vai indicar ao Apache que os pedidos recebidos na porta 80, m&aacute;quina 127.0.0.1 relativos ao dom&iacute;nio www.projecto.dev ir&atilde;o ter a directoria bin-debug do frontend como a directoria de ra&iacute;z do projecto. Os Aliases permitem que o Apache exponha o backend, backoffice e mm em directorias espec&iacute;ficas, resultando assim num ambiente igual ao de produ&ccedil;&atilde;o.<br />
Depois de feita a altera&ccedil;&atilde;o acima, &eacute; preciso reiniciar o Apache.</p>
<p>Falta conseguirmos fazer com que pedidos para www.projecto.dev v&atilde;o parar ao Apache. Para isso, vamos mexer no ficheiro &quot;hosts&quot; do Windows para for&ccedil;armos o redireccionamento de pedidos para www.projecto.dev para a nossa m&aacute;quina local.<br />
Basta para isso editar o ficheiro hosts (mais info no <a href="http://en.wikipedia.org/wiki/Hosts_file">wikipedia</a>), na directoria c:\windows\system32\drivers\etc . Recordo que no Windows Vista, ser&aacute; preciso abrir um editor de texto com permiss&otilde;es de administrador, e depois fazer o File &gt; Open e procurar o ficheiro no disco &#8211; caso contr&aacute;rio n&atilde;o ser&aacute; poss&iacute;vel edit&aacute;-lo.</p>
<p>Neste ficheiro, bastar&aacute; colocar o seguinte:</p>
<p><code>127.0.0.1		www.projecto.dev</code></p>
<p>A linha acima vai indicar o sistema operativo que todos os pedidos feitos para o dom&iacute;nio www.projecto.dev v&atilde;o ser reencaminhados para 127.0.0.1 &#8211; a nossa m&aacute;quina local. Como estamos a fazer os pedidos dentro de um web-browser, a porta por defeito ser&aacute; a 80. O resto &eacute; f&aacute;cil de adivinhar: pedidos para a nossa m&aacute;quina local na porta 80 v&atilde;o ser entregues a quem? Ao nosso amigo Apache! Que ao receber um pedido destinado ao dom&iacute;nio www.projecto.dev, vai procurar o Virtual Host respectivo e exp&ocirc;-lo com a estrutura que definimos.</p>
<p>Obviamente, isto abre-nos as portas para fazer configura&ccedil;&otilde;es mais radicais (i.e. configurar o Apache para que o Virtual Host seja igualzinho ao do servidor final). </p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/12/13/simular-o-ambiente-de-producao-usando-virtual-hosts-no-apache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tutorial MVC no Flex; Entendendo a lógica.</title>
		<link>http://www.riapt.org/2008/11/06/tutorial-mvc-no-flex-entendendo-a-logica/</link>
		<comments>http://www.riapt.org/2008/11/06/tutorial-mvc-no-flex-entendendo-a-logica/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 12:58:12 +0000</pubDate>
		<dc:creator>MarioSantos</dc:creator>
				<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=380</guid>
		<description><![CDATA[Como parte dos meus estudos para a Certificação Flex 3, estou a rever alguns pontos em que me sinto menos à vontade dentro do maravilhoso mundo do Flex. Vou começar por um ponto que ainda hoje reserva bastantes dificuldades de compreensão. Falo do MVC &#8211; Model, View, Controller. O MVC é um padrão quer de [...]]]></description>
			<content:encoded><![CDATA[<p>Como parte dos meus estudos para a Certificação Flex 3, estou a rever alguns pontos em que me sinto menos à vontade dentro do maravilhoso mundo do Flex. Vou começar por um ponto que ainda hoje reserva bastantes dificuldades de compreensão. Falo do MVC &#8211; Model, View, Controller.</p>
<p>O MVC é um padrão quer de desenho quer de arquitectura usando na construção de software. O uso deste padrão é muito vasto, e entende-se como o tratamento separado da lógica de programação e a interface grafica do proprio software que resulta numa enorme versatilidade da aplicação que torna muito mais facil modificar o aspecto visual da aplicação ou o código sem criar dependencias/afectação entre eles lidando facilmente com a comunicação entre utilizador, interface gráfica e o código da nossa aplicação.</p>
<p>Entendendo as siglas;</p>
<ul>
<li><strong>Model</strong> &#8211; Representa a informação / dados da aplicação e as &#8220;regras/definições&#8221; para manipular / trabalhar com esses mesmos dados da aplicação. No flex, geralmente class pessoais ou classes de serviços para lidar com um backend.</li>
<li><strong>View</strong> &#8211; Representa os elementos gráficos da nossa aplicação, como inputText, datagrid, textArea, no flex engloba states, viewstacks, em resumo, todos os componentes gráficos.</li>
<li><strong>Controller</strong> &#8211; Representa o tipo de controlo/detalhes que envolvem a comunicação com o Model (Dados e definições) e o View (Interfaces gráficas) estes detalhes resultam da lógica de comunicação entre o Model e o View e normalmente representam também a interacção com o utilizador.</li>
</ul>
<p>Este padrão MVC foi adaptado por centenas de frameworks, e o Flex não escapou à adaptação sendo que o principal objectivo de uso deste MVC no Flex é a simplicidade e re-utilização do código criando componentes bem definidos que permitem a obtenção de uma enorme versatilidade de todos os eles, bem como uma fácil cominicação entre os mesmo componentes, sem falar numa optimização do desempenho da nossa aplicação.</p>
<p>Ao criarmos um aplicação sem nos preocuparmos com este padrão teremos uma agradavel supresa no final de a termos terminado. O próprio Flex / Framework já está baseada nesta arquitectura e possui mesmo os seu proprio padrão MVC definido, como os componentes que definem a interface do utilizador, os modelos de apresentação de dados e os componentes responsaveis pelo controlo de dados como interacções com linguagens back-end.</p>
<p>Tentar entender este processo no ambito do flex pode ser muito complicado, mas vamos colocar um caso lógico que explica muitas das operações do flex:</p>
<p><a href="http://msdevstudio.com/blog/wp-content/uploads/2008/11/mvc.png"><img class="aligncenter size-full wp-image-723" src="http://msdevstudio.com/blog/wp-content/uploads/2008/11/mvc.png" alt="" width="400" height="300" /></a></p>
<p>Onde estruturamos devidamente os elementos e acções deste modelo:</p>
<p><em><strong>Model:</strong></em></p>
<ul>
<li>Usando action script, definindo como estrutura de class.</li>
<li>Geralmente são usadas varias classes para simplificação de objectivos de cada uma que englobam:</li>
<li> &#8212; Classes de dados nativas</li>
<li> &#8212; Serviços de comunicação com back-end</li>
<li> &#8212; No AIR, classes para lidar com chamadas como o SQLite</li>
</ul>
<p><em><strong>View :</strong></em></p>
<ul>
<li>Todas as views são componentes gráficos do flex</li>
<li>Tem como principal objectivo lidar com o layout da aplicação e disparar eventos para o controller</li>
<li>Não acedem a dados directamente, apenas usam dados de eventos, dataProviders ou propriedades publicas / databinds</li>
<li>São geralmente componentes escritos em MXML</li>
</ul>
<p><em><strong>Controller :<br />
</strong></em></p>
<ul>
<li>Pode existir mais que um, embora apenas seja necessário em aplicações muito complexas.</li>
<li>É usado como ponte entre o View e o Model visto que estes 2 não podem comunicar entre si directamente. Algumas propriedades / funções :</li>
<li> &#8212; Definir dataproviders</li>
<li> &#8212; Chamadas para o Model</li>
<li> &#8212; Lidar com eventos do View</li>
<li> &#8212; Alternar entre views</li>
<li>Não são necessáriamente Action Script, no flex os arquivos MXML podem ser elementos &#8220;Controladores&#8221;</li>
</ul>
<p><span style="underline;">O Padrão MVC não se trata de um programa, formula ou função</span>, trata-se sim de uma forma de organização de código permitindo esta &#8220;triologia&#8221; de funcionamento; criando uma class controlador que recebe/lida com dados de um conjunto de classes (model) e que faz a devida actualização da nossa interface grafica/componentes (view).</p>
<p>Claro que esta explicação pode ser mal entendida e perdoem-me os experts no padrão MVC, mas basicamente é isto que é feito claro que com alguns pontos e detalhes como vimos em cima.</p>
<p>Este tipo de implementações têm varias variantes, podendo nós, devidamente estruturado, criar um padrão MVC para estruturar a nossa aplicação, embora a Adobe disponibilize o Cairngorm que simplifica muito a aprendizagem pincipalmente com exemplos de muitos sites. A sua instalação é muito simples e o seu uso e aprendizagem também. Uma grande referencia em Cairngorm é o blog o David Tucker:</p>
<p><a href="http://www.davidtucker.net/category/cairngorm/">http://www.davidtucker.net/category/cairngorm/</a></p>
<p>Façam download dos videos e exemplos e facilmente verão do que falo.</p>
<p>Bem, na estrutura do exame Flex 3 este é um dos pontos: &#8220;List and describe de differences between model, view and controller in a Flex application&#8221;, que nos pede para explicar as diferenças apontadas em cima.</p>
<p>Bem, por agora é tudo&#8230; fiquem com alguns pontos de referencia do meu estudo sobre MVC.</p>
<p><a href="http://cristobal.baray.com/indiana/projects/mvc.html">http://cristobal.baray.com/indiana/projects/mvc.html</a> (recomendo vivamente)</p>
<p><a href="http://www.wonderhowto.com/how-to/video/how-to-install-cairngorm-in-adobe-flex-3-and-use-mvc-255356/">http://www.wonderhowto.com</a></p>
<p><a href="http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&amp;file=anatomy_010_04.html">http://livedocs.adobe.com/</a></p>
<p><a href="http://www.iteratif.fr/blog/index.php?post/2008/04/29/Une-implementation-du-modele-MVC-sous-Flex-A-implementation-of-model-MVC-on-Flex">http://www.iteratif.fr/blog/</a></p>
<p>Abraço e pelo menos espero ter esclarecido alguém, e já agora, alguém com uma opinião ??</p>
<p>Post originalmente colocado em: <a href="http://www.msdevstudio.com" target="_blank">http://www.msdevstudio.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/11/06/tutorial-mvc-no-flex-entendendo-a-logica/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

