<?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>TSW - That Should Work Blog &#187; boas praticas</title>
	<atom:link href="http://blog.msdevstudio.net/tag/boas-praticas/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.msdevstudio.net</link>
	<description>Flash, Flex, Web e Aplicações Ricas para Internet!</description>
	<lastBuildDate>Tue, 07 Feb 2012 18:30:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Flex/AS3 &#8211; Truques e Dicas #8 &#8211; Re-use o código!</title>
		<link>http://blog.msdevstudio.net/2009/04/09/flexas3-truques-dicas-8-re-use-o-codigo/</link>
		<comments>http://blog.msdevstudio.net/2009/04/09/flexas3-truques-dicas-8-re-use-o-codigo/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 13:33:01 +0000</pubDate>
		<dc:creator>Mário Santos</dc:creator>
				<category><![CDATA[Action Script & MXML]]></category>
		<category><![CDATA[Air]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Certificaçao Flex]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA's Geral]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[action script 3]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[boas praticas]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[handle]]></category>
		<category><![CDATA[optimização]]></category>
		<category><![CDATA[re-uso]]></category>

		<guid isPermaLink="false">http://msdevstudio.com/blog/?p=967</guid>
		<description><![CDATA[Outro dos bons exemplos que se podem fazer ao criar uma aplicação usando actionscript 3 é a utilização do código, num dos simples exemplos vou mostrar como podemos usar apenas uma função para lidar com 4 ou mais eventos&#8230;e de tipos diferentes! Na minha aplicação, tinha a necessidade de adicionar alguns eventos (inicialmente do rato) [...]]]></description>
			<content:encoded><![CDATA[<p>Outro dos bons exemplos que se podem fazer ao criar uma aplicação usando actionscript 3 é a utilização do código, num dos simples exemplos vou mostrar como podemos usar apenas uma função para lidar com 4 ou mais eventos&#8230;e de tipos diferentes!</p>
<p>Na minha aplicação, tinha a necessidade de adicionar alguns eventos (inicialmente do rato) a um elemento e lidar com os mesmos, muita gente faria, por exemplo ao lidar com 4 eventos do rato numa dataGrid:</p>
<p>[coolcode]<br />
dg.addEventListener(MouseEvent.CLICK, onClick);<br />
dg.addEventListener(MouseEvent.MOUSE_WHEEL onMouseWheel);<br />
dg.addEventListener(MouseEvent.ROLL_OVER, onRollOver);<br />
dg.addEventListener(MouseEvent.ROLL_OUT, onRollOut);<br />
[/coolcode]</p>
<p>O que neste caso teriamos que usar 4 funções diferentes: <strong>onClick</strong>, <strong>onDoubleClick</strong>, <strong>onRollOver</strong>, <strong>onRollOut</strong> do estilo:<br />
[coolcode]<br />
private function onClick(evt:MouseEvent):void { }<br />
private function onMouseWheel(evt:MouseEvent):void { }<br />
private function onRollOver(evt:MouseEvent):void { }<br />
private function onRollOut(evt:MouseEvent):void { }<br />
[/coolcode]</p>
<p>É facil compreender que muita gente use esta forma (eu já usei), mas existe uma forma mais pratica, uma vez que todos os eventos são MouseEvent, podemos fazer apenas uma função:<br />
[coolcode]<br />
dg.addEventListener(MouseEvent.CLICK, onDGMouse);<br />
dg.addEventListener(MouseEvent.MOUSE_WHEEL, onDGMouse);<br />
dg.addEventListener(MouseEvent.ROLL_OVER, onDGMouse);<br />
dg.addEventListener(MouseEvent.ROLL_OUT, onDGMouse);<br />
[/coolcode]<br />
<span id="more-967"></span><br />
e construir apenas uma função em vez de 4, fazend o uso de comparação do tipo de evento:<br />
[coolcode]<br />
private function onDGMouse(evt:MouseEvent):void {<br />
		  switch(evt.type) {<br />
				case MouseEvent.CLICK:<br />
				trace(&#8220;Evento click: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.MOUSE_WHEEL:<br />
				trace(&#8220;Evento roda do rato: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.ROLL_OVER:<br />
				trace(&#8220;Evento Roll Over: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.ROLL_OUT:<br />
				trace(&#8220;Evento Roll Out: &#8220;+evt.type);<br />
				break;</p>
<p>				default:<br />
				Alert.show(&#8220;Evento detectado, nenhuma função associada!: &#8220;+evt.type);<br />
				break;<br />
		   }</p>
<p>		}<br />
[/coolcode]</p>
<p>Como podem ver simplificamos o trabalho e ficamos com o código mais organizado, mas ainda podemos alargar esta função a mais eventos, aliás, a todos os eventos do rato, mas não só&#8230; se mudarmos a declaração da função de<br />
[coolcode]<br />
private function onDGMouse(evt:MouseEvent)<br />
[/coolcode]<br />
para<br />
[coolcode]<br />
private function onDGMouse(evt:*)<br />
[/coolcode]<br />
A nossa função passa a poder receber qualquer tipo de evento, se bem que nem todos os programadores são de acordo em usar este tipo de função &#8220;handler&#8221; de multi-eventos, a verdade é que muitas vezes reduzimos o código em dezenas de linhas e o colocamos bem mais legil, ora vejam como além dos eventos do rato, a mesma função passa a poder receber e lidar com DragEvent&#8217;s ou DataGridEvent&#8217;s:<br />
[coolcode]<br />
private function onDGMouse(evt:*):void {<br />
		  switch(evt.type) {<br />
				case MouseEvent.CLICK:<br />
				trace(&#8220;Evento click: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.MOUSE_WHEEL:<br />
				trace(&#8220;Evento roda do rato: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.ROLL_OVER:<br />
				trace(&#8220;Evento Roll Over: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.ROLL_OUT:<br />
				trace(&#8220;Evento Roll Out: &#8220;+evt.type);<br />
				break;</p>
<p>				case DataGridEvent.COLUMN_STRETCH:<br />
				trace(&#8220;Evento DG :&#8221;+evt.type);<br />
				break;</p>
<p>				case DragEvent.DRAG_ENTER:<br />
				trace(&#8220;Evento DRAG :&#8221;+evt.type);<br />
				break;</p>
<p>				default:<br />
				Alert.show(&#8220;Evento &#8220;+evt.type+&#8221;detectado, nenhuma instrução associada!: &#8220;);<br />
				break;<br />
		   }</p>
<p>		}<br />
[/coolcode]<br />
Neste momento podemos dizer que esta função é valida para lidar com quase qualquer evento, vejam 3 eventos completamente diferentes a usarem a mesma função de &#8220;event handle&#8221;:<br />
[coolcode]<br />
dg.addEventListener(MouseEvent.CLICK, onDGMouse);<br />
dg.addEventListener(DataGridEvent.COLUMN_STRETCH, onDGMouse);<br />
dg.addEventListener(DragEvent.DRAG_ENTER, onDGMouse);<br />
[/coolcode]</p>
<p>Como devem imaginar, pode ser, e é, muito util!!</p>
<p>Abraço.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msdevstudio.net/2009/04/09/flexas3-truques-dicas-8-re-use-o-codigo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flex/AS3 &#8211; Truques e Dicas #2 &#8211; Try, Catch &amp; Finally</title>
		<link>http://blog.msdevstudio.net/2009/03/27/flexas3-truques-dicas-2-try-catch-finally/</link>
		<comments>http://blog.msdevstudio.net/2009/03/27/flexas3-truques-dicas-2-try-catch-finally/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 10:41:51 +0000</pubDate>
		<dc:creator>Mário Santos</dc:creator>
				<category><![CDATA[Action Script & MXML]]></category>
		<category><![CDATA[Air]]></category>
		<category><![CDATA[Certificaçao Flex]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA's Geral]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[boas praticas]]></category>
		<category><![CDATA[catch]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[finally]]></category>
		<category><![CDATA[handle]]></category>
		<category><![CDATA[prevenção]]></category>
		<category><![CDATA[try]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://msdevstudio.com/blog/?p=884</guid>
		<description><![CDATA[Esta é mais uma das reliqueas do as3, principalmente para dar consistencia e fiabilidade à nossa aplicação e evitar que sejam disparados erros que o utilizador final possa ver. Ou seja o objectivo do #2 &#8211; Try, Catch &#38; Finally É precisamente prevenir as malditas janelas de erro (quando o utilizador têm o flash player [...]]]></description>
			<content:encoded><![CDATA[<p>Esta é mais uma das reliqueas do as3, principalmente para dar consistencia e fiabilidade à nossa aplicação e evitar que sejam disparados erros que o utilizador final possa ver. Ou seja o objectivo do</p>
<h3><strong>#2 &#8211; Try, Catch &amp; Finally</strong></h3>
<p><strong><br />
</strong></p>
<p>É precisamente prevenir as malditas janelas de erro (quando o utilizador têm o flash player debug) e disparar acções quando esse erro acontecer, impedindo assim uma falha na aplicação. Este uso é muito util, embora pessoalmente não o use sempre (iria expandir em muito as linhas de código da aplicação) mas uso sempre que exista uma grande possibilidade de erro, no meu exemplo a seguir verão que é muito util.</p>
<p> </p>
<p>O que eu necessitava na minha aplicação, era que quando o utilizador fizer logout (apresentasse o ecra de login de novo) da aplicação todas os meus popup&#8217;s adicionados via PopUpManager (podem ser até 20 paineis em popup) sejam removidos. </p>
<p>Como eu não queria ter a necessidade de estar a controlar individualmente se um painel está aberto ou não (poderia fazer isso atravez de um array de estados) apenas percorro todos os child&#8217;s do systemManger na minha aplicação (um popUpManager.addItem() adiciona o popUp à display list do sistemManager, como se tratasse de uma janela) e tento remove-los com o popUpManager. Claro que se a minha aplicação tiver um elemento que não tenha sido colocado pelo PopUpManager iria acontecer um erro ao tentar remover esse componente, e aí sim a necessidade deste try, catch, finally torna-se muito fiavel.</p>
<p> </p>
<p>O seu funcionamento é bem simples, o try encarrega-se de &#8220;tentar&#8221; executar a acção, enquanto que o catch se ocupa de &#8220;captar&#8221; todos os possiveis erros que aconteçam ao executar a acção e o finally encarrega-se de executar uma acção no final de tudo, quer exista erro ou não. Este finally é opcional e quanto ao catch podemos usar quantos quisermos, para cada tipo de erro especifico ou erros em geral. Seguindo com um exemplo&#8230; <span id="more-884"></span></p>
<p>Vejam o código:<br />
[coolcode]<br />
var pops:int=systemManager.numChildren;<br />
var x:int=1;</p>
<p> while(pops &gt; x){<br />
  try {<br />
   PopUpManager.removePopUp((systemManager.getChildAt(x) as IFlexDisplayObject));<br />
   pops=systemManager.numChildren;<br />
  }<br />
  catch(e:Error) {<br />
   trace(&#8220;Error: &#8220;+e.message);<br />
   pops=systemManager.numChildren;<br />
   x++;<br />
  }<br />
  finally {<br />
   trace(&#8220;Child encontrado : &#8220;+systemManager.getChildAt(x).name);<br />
  }<br />
}<br />
[/coolcode] </p>
<p>Como vos disse, o finally não é necessário, mas podemos coloca-lo como mostra em cima. Aproveitei para vos fornecer este código porque é muito util, no meu caso a minha aplicação apenas trabalha com popUpWindows, que juntamente com o &#8220;stage&#8221; principal são as unicas adicionadas como childs ao systemManager, logo a display list do system manager é composta por:</p>
<blockquote><p>[0] -&gt; Stage</p>
<p>[1]-&gt; popUpXXX0</p>
<p>[2]-&gt; popUpXXX1</p></blockquote>
<p>Por isso eu ter indicado <strong>while(systemManager.numChildren &gt; x) onde o x=1 </strong>, visto que se indicasse com o &#8230;systemManager.getChildAt(<strong>x</strong>)  <strong>onde o x fosse 0</strong>  ele não conseguiria tratar esse child (stage) como iFlexDisplayObject (ou seja, não é um popUp) logo o PopUpManager não o iria remover<strong> mas estranhamente também não disparava qualquer erro </strong>, logo o <strong>systemManager.numChildren</strong> é sempre superior a <strong>0</strong>  que faria com que o while fosse executado eternamente resultando num crash  do flash.</p>
<p>Este código apenas funciona com popUps (IFlexDisplayObject) pelo que devem ter em especial atençao a utilização do mesmo que como indiquei em cima resulta num crash do flash no caso de tentarem remover o que não devem&#8230;se existir um erro ao remover algo que não devem, ele simplesmente assume que o child que existe não pode ser removido, incrementado então o x visto que se não o fizer o ciclo será executado eternamente.</p>
<p> </p>
<p>Este try, catch, finally é muito util principalmente para lidar com os erros, prevendo assim eventuais falhas na aplicação. O try pode ainda suportar varios tipos de catch como disse en cima, por exemplo:</p>
<p>[coolcode]<br />
var meuLoader:URLLoader;<br />
 try{<br />
  meuLoader= new URLLoader(new URLRequest(&#8220;meuFicheiro.txt&#8221;));<br />
 }<br />
 catch(erro:IOError) {<br />
    trace(&#8220;ERRO I/O&#8221;+erro.message);<br />
}<br />
 catch(erro:SecurityError) {<br />
  trace(&#8220;ERRO DE SEGURANCA&#8221;+erro.message);<br />
}<br />
finally{<br />
  trace(&#8216;Erros do loader tratados&#8217;);<br />
}<br />
[/coolcode]<br />
 </p>
<p>Simples não?</p>
<p>Espero que seja util.</p>
<p>Cumprimentos.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msdevstudio.net/2009/03/27/flexas3-truques-dicas-2-try-catch-finally/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>IDE Factory; Tornando o flex mais simples.</title>
		<link>http://blog.msdevstudio.net/2008/09/18/ide-factory-tornando-o-flex-mais-simples/</link>
		<comments>http://blog.msdevstudio.net/2008/09/18/ide-factory-tornando-o-flex-mais-simples/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 12:19:04 +0000</pubDate>
		<dc:creator>Mário Santos</dc:creator>
				<category><![CDATA[Action Script & MXML]]></category>
		<category><![CDATA[Air]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA's Geral]]></category>
		<category><![CDATA[action script 3]]></category>
		<category><![CDATA[boas praticas]]></category>
		<category><![CDATA[builder]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Enterprise IDE]]></category>
		<category><![CDATA[IDE Factory]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://msdevstudio.com/blog/?p=619</guid>
		<description><![CDATA[Que o flex builder é meio caminho andado para acelerar a construção da nossa ria todos sabemos, mas existem alguns truques que podemos usar como optimização de código, classes bem construidas e documentadas entre muitas outras coisas. Vou ser sincero e dizer que apenas recentemente me comecei a preocupar com isso, simplesmente porque as aplicações [...]]]></description>
			<content:encoded><![CDATA[<p>Que o flex builder é meio caminho andado para acelerar a construção da nossa ria todos sabemos, mas existem alguns truques que podemos usar como optimização de código, classes bem construidas e documentadas entre muitas outras coisas.</p>
<p>Vou ser sincero e dizer que apenas recentemente me comecei a preocupar com isso, simplesmente porque as aplicações que desenvolvia em flex eram necessariamente pequenas a nível de código, mas as coisas alteraram-se no desenvolver de um frontend para uma imobiliaria onde tenho um uso acrescido de base de dados bem como a necessidade de uma resposta rápida quer das classes, quer do backend; Outro exemplo com necessidade de algumas optimizações é o <a href="http://flexairpress.msdevstudio.com" target="_blank">FlexAirPress</a> que utiliza diferentes classes para comunicar com o XML-RPC do wordpress, estando quase no final do destes projectos (principalmente o front-end da imobiliaria) analisei todo o código e percebi que tinha algum lixo e muitos comentários (para não me perder no código) e decidi dar uma limpeza nas suas classes&#8230; aqui chega a questão: Como o fazer ??</p>
<p>Foi na minha procura por uma solução que tropecei com o IDE Factory e posso afirmar, apesar de não usar metade das suas funções, que encontrei uma pérola. Vamos à explicação&#8230;</p>
<p><span id="more-619"></span></p>
<table border="0" width="100%">
<tbody>
<tr>
<td width="80%">O IDE Factory é uma plugin para o Eclipse / Flex Builder, falo apenas do flex builder, que lhe acrescenta um menu com uma dezena de opções que são um &#8220;Must Have&#8221; para todos os &#8220;programadores&#8221; Flex.</p>
<p>De entre muitas opções existe umas que me pouparam bastante tempo de entre as quais destaco uma que ilustra perfeitamente o que de melhor esta IDE Factory pode fazer por nós. Depois de instalada, mudei para a view Enterprise IDE e aí foi ver melhoramentos atras de melhoramentos, além do Flex Package Explorer, Hierarchy Explorer e do Cairngorm Service Explorer no introduz um novo conceito de criar serviços, packages ou componentes, clicando no botão new aparece o agradável menu ao lado onde podem ver uma lista do que a IDE têm para oferecer. Além dos conhecidos ActionScript Class e MXML Component aparecem algo algumas novidades, como Action Script Interface, Model Locator, Service Locator, Responder, etc&#8230; Uma lista de coisas que se devem ter sempre à mão.</td>
<td><a href="http://msdevstudio.com/blog/wp-content/uploads/2008/09/ide_1.png"><img class="alignright size-full wp-image-620" title="ide_1" src="http://msdevstudio.com/blog/wp-content/uploads/2008/09/ide_1.png" alt="IDE Factory" width="174" height="285" /></a></td>
</tr>
</tbody>
</table>
<table border="0" width="100%">
<tbody>
<tr>
<td width="80%">Clicando no Action Script Class é-nos apresentado o mesmo wizard que pela via normal, mas com algumas opções extra, que estão dentro do menu intitulado Code generation (Humm&#8230; como gosto desta palavra..) como podem ver pela imagem ao lado.</td>
<td><a href="http://msdevstudio.com/blog/wp-content/uploads/2008/09/ide2.png"><img class="alignleft size-full wp-image-621" title="ide2" src="http://msdevstudio.com/blog/wp-content/uploads/2008/09/ide2.png" alt="" width="344" height="170" /></a></td>
</tr>
</tbody>
</table>
<table border="0" width="100%">
<tbody>
<tr>
<td width="80%">Alem desta novidade vem ainda a melhor, cliquem em &#8220;Next&#8221; e agora é que começa o divertimento, como podem ver o wizard apresenta-se com 2 secções, a das Propertys e das Functions, no meu exemplo (com.msdevstudio.teste) vou criar algumas variaveis e uma função, esperimentem fazer como no ecra seguinte, colocando os mesmos valores ou os vosso proprios valores.Como podem ver, este ecra permite criar variaveis na nossa class bem como definir o seu tipo, sedesejamos getter&#8217;s ou setter&#8217;s, bem como inserir funções.</p>
<p>Isto resume em muito o nosso trabalho, não agora que perdemos algum tempo mas vão reparar na verdadeira utilidade clicando em &#8220;Finish&#8221;, agurardem uns segundos e vejam a vossa class que se irá abrir, além das nossas variaveis devidamente colocadas, temos já as funções get e set da variavel input bem como as funções da instancia e a nossa função str64encode devidamente definida, ora temos a nossa class devidamente estruturada, com comentários e espaços já definidos para a documentação da nossa class&#8230;</td>
<td><a href="http://msdevstudio.com/blog/wp-content/uploads/2008/09/ide3.png"><img class="alignleft size-medium wp-image-622" title="ide3" src="http://msdevstudio.com/blog/wp-content/uploads/2008/09/ide3-300x285.png" alt="" width="300" height="285" /></a></td>
</tr>
</tbody>
</table>
<p>E agora é só preocupar-nos com o que realmente interessa, a nossa programação.</p>
<p>Alem destas novidades existem muita outras por explorar nesta fantastica IDE Factory, como a criação automatica de expressões e4x para lidar com um xml, bastando indicar o xml e o wizard faz o resto, mostrando a expressão que deve ser usada para aceder a qualquer elemento do nosso xml, bem como o resultado em tempo real. Temos ainda o Format Project Source Filesque nos altera (criaum back automatico) as nossas classes optimizando o código para os standards AS3 ou o Generate Java Classes from AS Value Objects que num instante cria as nossas classes.</p>
<p>Posso adiantar que esta IDE está cheia de surpresas muito agradaveis e que além de seguirmos os parametros de programação ideais nos simplifica muito o trabalho. Experimentem, usem e abusem.</p>
<p>A instalaçâo desta IDE  é muito simples, basta no vosso flex builde / eclipse irem ao menu:</p>
<p>Help-&gt;Software Updates-&gt;Find and install -&gt; Search for new features for install -&gt; New Remote Site e coloquem Enterprise IDE e no link: http://www.idefactory.com/update -&gt; ok.</p>
<p>Devem então ter o novo remote site, clicam em finish e depois irá aparecer o Enterprise IDE, selecionem-no, façam o download e instalem-o, no final reeiniciem o Flex Builder / Eclipse e vejam o novo menu no topo &#8220;Enteprise IDE&#8221; e uma nova view &#8220;Enterprise IDE&#8221;, depois disto é só usar e abusar.</p>
<p>Garanto que vale bem a pena, apesar de ser mais orientado para programadores com alguma experiencia também é de facil compreensão por parte dos mais novatos.</p>
<p>Site Oficial: http://www.idefactory.com</p>
<p>Deixem as vossas impressões e primeiras experiencias.</p>
<address style="text-align: right;"><em>Post publicado paralelamente no <a href="http://www.msdevstudio.com" target="_blank">tsw</a> e <a href="http://riapt.org" target="_blank">riapt</a></em><br />
</address>
]]></content:encoded>
			<wfw:commentRss>http://blog.msdevstudio.net/2008/09/18/ide-factory-tornando-o-flex-mais-simples/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

