<br />
<b>Deprecated</b>:  Assigning the return value of new by reference is deprecated in <b>/home/mangar.com.br/blogv3/wp-settings.php</b> on line <b>399</b><br />
<br />
<b>Deprecated</b>:  Assigning the return value of new by reference is deprecated in <b>/home/mangar.com.br/blogv3/wp-settings.php</b> on line <b>414</b><br />
<br />
<b>Deprecated</b>:  Assigning the return value of new by reference is deprecated in <b>/home/mangar.com.br/blogv3/wp-settings.php</b> on line <b>421</b><br />
<br />
<b>Deprecated</b>:  Assigning the return value of new by reference is deprecated in <b>/home/mangar.com.br/blogv3/wp-settings.php</b> on line <b>456</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>576</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>576</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>576</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>576</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>593</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>687</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>687</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>687</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>687</b><br />
<br />
<b>Strict Standards</b>:  Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in <b>/home/mangar.com.br/blogv3/wp-includes/classes.php</b> on line <b>710</b><br />
<br />
<b>Strict Standards</b>:  Redefining already defined constructor for class wpdb in <b>/home/mangar.com.br/blogv3/wp-includes/wp-db.php</b> on line <b>58</b><br />
<br />
<b>Deprecated</b>:  Assigning the return value of new by reference is deprecated in <b>/home/mangar.com.br/blogv3/wp-includes/cache.php</b> on line <b>99</b><br />
<br />
<b>Strict Standards</b>:  Redefining already defined constructor for class WP_Object_Cache in <b>/home/mangar.com.br/blogv3/wp-includes/cache.php</b> on line <b>404</b><br />
<br />
<b>Deprecated</b>:  Assigning the return value of new by reference is deprecated in <b>/home/mangar.com.br/blogv3/wp-includes/query.php</b> on line <b>21</b><br />
<br />
<b>Deprecated</b>:  Assigning the return value of new by reference is deprecated in <b>/home/mangar.com.br/blogv3/wp-includes/theme.php</b> on line <b>576</b><br />
<br />
<b>Strict Standards</b>:  call_user_func_array() expects parameter 1 to be a valid callback, non-static method Add_to_Any_Subscribe_Widget::init() should not be called statically in <b>/home/mangar.com.br/blogv3/wp-includes/plugin.php</b> on line <b>311</b><br />
<br />
<b>Strict Standards</b>:  call_user_func_array() expects parameter 1 to be a valid callback, non-static method GoogleSitemapGeneratorLoader::Enable() should not be called statically in <b>/home/mangar.com.br/blogv3/wp-includes/plugin.php</b> on line <b>311</b><br />
<br />
<b>Deprecated</b>:  Function eregi() is deprecated in <b>/home/mangar.com.br/blogv3/wp-content/plugins/wp-statpress/statpress.php</b> on line <b>1139</b><br />
<br />
<b>Deprecated</b>:  Function eregi() is deprecated in <b>/home/mangar.com.br/blogv3/wp-content/plugins/wp-statpress/statpress.php</b> on line <b>1140</b><br />
<br />
<b>Deprecated</b>:  Function eregi() is deprecated in <b>/home/mangar.com.br/blogv3/wp-content/plugins/wp-statpress/statpress.php</b> on line <b>1141</b><br />
<br />
<b>Deprecated</b>:  Function eregi() is deprecated in <b>/home/mangar.com.br/blogv3/wp-content/plugins/wp-statpress/statpress.php</b> on line <b>1142</b><br />
<br />
<b>Deprecated</b>:  Function ereg() is deprecated in <b>/home/mangar.com.br/blogv3/wp-content/plugins/wp-statpress/statpress.php</b> on line <b>979</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/mangar.com.br/blogv3/wp-settings.php:399) in <b>/home/mangar.com.br/blogv3/wp-includes/feed-rss2.php</b> on line <b>8</b><br />
<?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"
	>

<channel>
	<title>Marcio Garcia</title>
	<atom:link href="http://blog.mangar.com.br/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.mangar.com.br</link>
	<description>Software Empowerment²</description>
	<pubDate>Thu, 06 May 2010 11:38:51 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Upload de arquivos com SpringMVC</title>
		<link>http://blog.mangar.com.br/?p=97</link>
		<comments>http://blog.mangar.com.br/?p=97#comments</comments>
		<pubDate>Thu, 06 May 2010 11:38:51 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Maven]]></category>

		<category><![CDATA[SpringMVC]]></category>

		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=97</guid>
		<description><![CDATA[A quick setup to upload files using SpringMVC.Dependencies
Usando o Maven, o primeiro passo é incluir duas dependencias: commons-io and commons-fileupload:Application Context
Segundo passo é configurar o application context para fazer uso de multiparts:  Controller
Terceiro passo: criar o seu controller. note the existe um parametro do tipo: MultipartFile.View
E o último passo: sua JSP.  ]]></description>
			<content:encoded><![CDATA[<center><a href="http://www.flickr.com/photos/edupov/4504089105/" border="0"><img src="http://farm5.static.flickr.com/4042/4504089105_45ef1f7992_m.jpg" /></a></center><br /><br />A quick setup to upload files using SpringMVC.<br /><h2>Dependencies</h2>
Usando o Maven, o primeiro passo é incluir duas dependencias: commons-io and commons-fileupload:<br /><script src="http://gist.github.com/392016.js?file=gistfile1.txt"></script><br /><br /><h2>Application Context</h2>
Segundo passo é configurar o application context para fazer uso de multiparts:  <br /><script src="http://gist.github.com/392019.js?file=gistfile1.txt"></script><br /><br /><h2>Controller</h2>
Terceiro passo: criar o seu controller. note the existe um parametro do tipo: MultipartFile.<br /><script src="http://gist.github.com/392020.js?file=gistfile1.java"></script><br /><br /><h2>View</h2>
E o último passo: sua JSP.  <br /><script src="http://gist.github.com/392021.js?file=gistfile1.jsp"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=97</wfw:commentRss>
		</item>
		<item>
		<title>Instalando Google Go no Mac Snow Leopard.</title>
		<link>http://blog.mangar.com.br/?p=96</link>
		<comments>http://blog.mangar.com.br/?p=96#comments</comments>
		<pubDate>Fri, 02 Apr 2010 20:19:19 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Go]]></category>

		<category><![CDATA[Google]]></category>

		<category><![CDATA[Mac]]></category>

		<category><![CDATA[Linguagem]]></category>

		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=96</guid>
		<description><![CDATA[The Go Programming Language
Primeiro passo para ter um ambiente de desenvolvimento em um Mac é instalar o DVD que vem junto com sua maquina com o pacote de desenvolvimento chamado XCode. O próximo passo é ter o Python e o Mercurian instalados.O Python provavelmente será instalado juntamente com o XCode, portanto não ha com que [...]]]></description>
			<content:encoded><![CDATA[<h1><img src="http://golang.org/doc/logo-153x55.png" alt="Go" border="0"/>The Go Programming Language</h1>
<br />Primeiro passo para ter um ambiente de desenvolvimento em um Mac é instalar o DVD que vem junto com sua maquina com o pacote de desenvolvimento chamado <a href="http://developer.apple.com/technologies/xcode.html">XCode</a>. O próximo passo é ter o <a href="http://www.python.org/download/">Python</a> e o <a href="http://mercurial.selenic.com/#">Mercurian</a> instalados.<br /><br />O Python provavelmente será instalado juntamente com o XCode, portanto não ha com que se preocupar demais. Já o Mercurian você precisará instalar na sua maquina, mas o processo é simples, fácil e limpo. No worries.<br /><h2>Passo 1: Checagem inicial</h2>
Verifique se os pré-requisitos estão atendidos, verificando o Python, XCode e Mercurian:<br /><br /><script src="http://gist.github.com/353597.js?file=gistfile1.txt"></script> <script src="http://gist.github.com/353616.js?file=gistfile1.txt"></script><br /><br /><script src="http://gist.github.com/353616.js?file=gistfile2.txt"></script><br /><br /><h2>Passo 2: Váriaveis de Ambiente</h2>
<br />Tendo o Python e o Mercurian instalados é hora de definir algumas variáveis de ambiente: Edite o seu arquivo ~/.profile ou ˜/.profile_bash (vim ˜/.profile ou vim ~/.profile_bash) e inclua as seguines linhas:  <script src="http://gist.github.com/353620.js?file=gistfile1.txt"></script><br /><br /> <br /><br />Neste caso eu pretendo instalar o go no diretorio go que está dentro do meu $HOME ou seja: /Users/mg/go. Mas fique a vontade para colocar onde você bem entender.<br /><br />Salve o arquivo e feche-o (dentro do vim   :x)<br /><br />Re-carrege as variáveis em seu ambiente com o comando source:<br /><br /><script src="http://gist.github.com/353621.js?file=gistfile1.txt"></script><br /><br /><h2>Passo 3: Baixando o Go</h2>
<br />Digite o comando:  <script src="http://gist.github.com/353630.js?file=gistfile1.txt"></script><br /><br /> <br /><h2>Passo 4: Gerando os binários</h2>
Neste momento o código fonte já está em sua máquina. Agora é necessário gerar o compilador.<br />Crie um diretório (se ainda não estiver criado) chamado bin dentro de $GOROOT/src e de permissão de execução:<br /><br /><script src="http://gist.github.com/353633.js?file=gistfile1.txt"></script> Dentro do diretorio src ($GOROOT/src) execute o seguinte comando para gerar o binário da linguagem:  <script src="http://gist.github.com/353633.js?file=gistfile2.txt"></script><br /><br /><strong>Atenção:</strong> Este processo será necessário acesso a Internet, pois alguns testes fazem uso da rede.<br /><br />Os arquivos gerados para a arquitetura i386 são os 8g e 8l. Se voce informou amd64 na variável de ambiente GOARCH estes serão: 6g e 6l.<br /><br />Crie um link para esses dois arquivos em seu diretorio /bin:<br /><br /><script src="http://gist.github.com/353639.js?file=gistfile1.txt"></script><br /><br /><h2>Passo 5: Hello World.go</h2>
<br />Este <a href="http://golang.org/doc/install.html#tmp_78"></a>.  Crie o arquivo hw.go com o conteúdo: <script src="http://gist.github.com/353646.js?file=gistfile1.go"></script><br /><br /> <br /><br />Compile:<br /><script src="http://gist.github.com/353646.js?file=gistfile2.txt"></script> Link: <script src="http://gist.github.com/353646.js?file=gistfile3.txt"></script><br /><br />Execute:<br /><script src="http://gist.github.com/353646.js?file=gistfile4.txt"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=96</wfw:commentRss>
		</item>
		<item>
		<title>Jersey com Maven e Spring</title>
		<link>http://blog.mangar.com.br/?p=92</link>
		<comments>http://blog.mangar.com.br/?p=92#comments</comments>
		<pubDate>Thu, 24 Dec 2009 14:48:29 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Maven]]></category>

		<category><![CDATA[Shell]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[cUrl]]></category>

		<category><![CDATA[jersey]]></category>

		<category><![CDATA[restful]]></category>

		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=92</guid>
		<description><![CDATA[Recentemente eu precisei de trabalhar em um projeto onde toda a comunicação entre o frontend e o backend era feita através de requisições HTTP. A princípio consideramos utilizar um Servlet com alguns helpers que mapeava os parâmetros de URL para um Map e internamente esse Map era &#8220;injetado&#8221; em todas as classes de recurso. Era [...]]]></description>
			<content:encoded><![CDATA[<center><br /><a href="http://www.flickr.com/photos/sharkbait/3415708872/sizes/m/in/set-72157600014134111/" target="_a"><br /><img src="http://farm4.static.flickr.com/3361/3415708872_357d08559a.jpg" border="0" /><br /></a><br /></center><p><br />Recentemente eu precisei de trabalhar em um projeto onde toda a comunicação entre o frontend e o backend era feita através de requisições HTTP. A princípio consideramos utilizar um Servlet com alguns helpers que mapeava os parâmetros de URL para um Map e internamente esse Map era &#8220;injetado&#8221; em todas as classes de recurso. <br /></p><p><br />Era uma solucão a ser considerada, mas como essa era a primeira idéia que o time teve, resolvemos descartá-la.<br /></p><p><br />Por uma requisição do cliente, tinhamos que utilizar <a href="http://maven.apache.org/" target="_a">Maven</a> e <a href="http://www.springsource.org/" target="_a">Spring</a> e isto era ponto fechado. As demais bibliotecas eram por nossa conta (e risco).<br />Surgiu então a segunda idéia de utilizar <a href="http://en.wikipedia.org/wiki/RESTful" target="_a">RESTful</a> simplesmente para facilitar o trabalho entre o mapeamento dos parâmetros vindos da URL com o código.<br /></p><p><br />Pesquisamos a primeira Lib, <a href="https://jersey.dev.java.net/" target="_a">Jersey</a> já quer esta é a implementação padrão do <a href="https://jsr311.dev.java.net/nonav/releases/1.1/index.html" target="_a">JSR-311</a> e também pesquisamos a API do <a href="http://www.restlet.org/" target="_a">Restlet</a>.<br />Resolvemos nos contrapor a ideologia de rejeitar a primeira opção a fim de conseguir novos recursos.<br />Ambos frameworks possuem aspectos únicos e muito bem documentados. Cada uma com suas particularidades, por exemplo no Restlet é necessário criar uma classe com as rotas (uma classe que extende a classe Application). <br /></p>
Mas os principais motivos que nos levou a decidir a utilizar o Jersey foram:<ol><li> Ser a implementação modelo da especificação</li><li> Menos burocracia na implementação dos resources</li><li> Integração quase que natural com o Spring para a injeção de classes nos resources.</li>
</ol>
<p><br />Este &#8220;walk through&#8221; tem o objetivo de exemplificar como criar uma aplicação simples utilizando as ferramentas: Spring, Maven e Jersey de forma prática.<br /></p>
<h2>Setup</h2><ol><br />	<li>Incluir o repositório do jersey-spring no pom.xml</li>
<script src="http://gist.github.com/261968.js?file=gistfile1.xsl"></script><br /><br />	<li>Incluir as dependencias das libs: jersey  spring</li>
<script src="http://gist.github.com/261970.js?file=gistfile1.xsl"></script> <br />	<li>Configurar web.xml</li>
<script src="http://gist.github.com/261979.js?file=gistfile1.xsl"></script><br /></ol>
<h2>It&#8217;s time do code!</h2><ol><br />	<li>Configuração do Spring (applicationContext.xml)</li>
Crie o arquivo applicationContext.xml no diretório META-INF de sua aplicação. Este código informa ao engine do Spring para que o pacote com.mng.jerseydemo esteja disponível para a injeção de dependencias. Segue o modelo do arquivo: <script src="http://gist.github.com/261981.js?file=gistfile1.xsl"></script> <br />	<li>Criação do primeiro resource.</li>
<script src="http://gist.github.com/261997.js?file=gistfile1.java"></script><br />Neste trecho de código existem algumas anotações, entre elas:<ol><br /> <li><b>@Path</b></li>
Este é o padrão da URL que será tratado pela classe. Pode ser informado variáveis utilizando o modelo: {nomeDaVariavel}. Por exemplo: @Path(&#8221;/user/{username}/{password}&#8221;). <br /> <li><b>@Autowired</b></li>
Injeta um objeto do tipo informado na váriavel.<br /> <li><b>@GET</b></li>
Responde as requisições do tipo GET, existem ainda: @POST, @PUT e @DELETE que podem ser utilizadas da mesma maneira que o @GET<br /> <li><b>@Produces</b></li>
Informa o tipo de retorno do método. Esta anotação pode ser informada tanto no método quanto na classe, junto com o @Path. Informando na classe o tipo de retorno será propagado para todos os métodos que não tenham um @Produces específico.<br /> <li><b>@PathParam</b></li>
Traduz as variáveis mapeadas na URL para um objeto. Este será mapeado para uma variável informada na assinatura do método.<br /></ol>
</ol>
<h2>Acessando</h2>
Para acessar o recurso recém criado voce pode utilizar o próprio browser (Chrome ou Firefox), com eles fica fácil de simular o GET. No entanto, se você está no mundo X (Linux, Unix ou mesmo Mac) faça bom uso do <a href="http://curl.haxx.se/" target="_a">cUrl</a>. De forma rápida e prática este comando é simples de ser utilizado.<br />Através do parametro &#8220;-X&#8221; especificando o método que deverá ser enviado é possível testar a maior parte dos serviços:<br /><script src="http://gist.github.com/263187.js?file=gistfile1.bat"></script><br />E com o parâmetro -F você pode especificar os parâmetros (@QueryParam) do método post.<br /><script src="http://gist.github.com/263188.js?file=gistfile1.bat"></script><br /><br /><br /><br /><br /><br />]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=92</wfw:commentRss>
		</item>
		<item>
		<title>Legibilidade do código - Nomes significativos</title>
		<link>http://blog.mangar.com.br/?p=89</link>
		<comments>http://blog.mangar.com.br/?p=89#comments</comments>
		<pubDate>Sun, 01 Nov 2009 23:08:35 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Utilidades]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[código]]></category>

		<category><![CDATA[desenvolvimento]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=89</guid>
		<description><![CDATA[Desde um pouco antes de minha passagem pela Austrália tenho me dedicado a estudar sobre código e formas de codificar. Melhores e piores técnicas. Na época que passei na Austrália essa dedicação foi amplificada, pois como não estava trabalhando e nem a procura de um emprego passei muito tempo apenas lendo a respeito e aplicando [...]]]></description>
			<content:encoded><![CDATA[Desde um pouco antes de minha passagem pela Austrália tenho me dedicado a estudar sobre código e formas de codificar. Melhores e piores técnicas. Na época que passei na Austrália essa dedicação foi amplificada, pois como não estava trabalhando e nem a procura de um emprego passei muito tempo apenas lendo a respeito e aplicando algumas técnicas em códigos pessoais.<br /><br /><h2>Nomes Significativos.</h2>
<br />Se você ainda não teve uma experiência como esta, você é uma pessoa de sorte, mas em alguns casos você é obrigado a trabalhar com a restrição de oito caracteres para nomes. Essa &#8220;lei&#8221; se aplica para banco de dados antigos que não evoluíram.<br /><br />Mas isso não quer dizer que o seu código (Java, C#, Ruby&#8230;.) deva seguir este modelo. Os nomes das variáveis, métodos devem ser ao menos significativos.<br /><br />Veja o seguinte trecho de código:<br /><script src="http://gist.github.com/223767.js"></script> Este é apensa um exemplo, mas tais variáveis <strong>não dizem nada, absolutamente nada sobre a intenção</strong> das mesmas. Além do mais, você como um programador deve <strong>codificar mentalmente</strong> o que significa as variáveis <em>cor</em> e <em>pal</em> dentro do contexto.  Agora leia o código a baixo: <br /><br /><script src="http://gist.github.com/223773.js"></script><br /><br />Não é mais simples? Foi necessário alguma decodificação mental a respeito da intenção das variáveis?<br /><br /><h2>Nomes de Métodos e Construtores.</h2>
<br />Outra regra muito fácil aprendida na faculdade é de que o nomes para métodos devem ser verbos, expressando uma ação. Como por exemplo: get / set / is / do&#8230;.. <br /><br />Mas e com relação a construtores? Estes não são nada próximos de amigáveis ou mesmo significativos.<br />Uma boa saída é criar métodos estáticos dentro da própria classe informando o motivo para aquele construtor estático, por exemplo:<br /><br /><script src="http://gist.github.com/223777.js"></script><br /><br />Este é um exemplo muito pequeno e sem nenhum contexto. Ainda neste código o nome do método construtor createComplete poderia ser renomeado apenas para create, caso existisse uma convenção em toda a aplicação de que o método chamado create precise de todos os parâmetros do objeto para ser criados.<br />Uma outra alternativa seria criar um construtor static ao invés de informar o parâmetro faltante - state - que não é algo muito legível, utilizar um contexto para esta criação, como por exemplo: createForSelect, sendo utilizado para a criação de um objeto City para ser utilizado em um campo html select.<br /><br /><script src="http://gist.github.com/223782.js"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=89</wfw:commentRss>
		</item>
		<item>
		<title>Relatórios com Ant</title>
		<link>http://blog.mangar.com.br/?p=88</link>
		<comments>http://blog.mangar.com.br/?p=88#comments</comments>
		<pubDate>Thu, 03 Sep 2009 19:09:44 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Ant]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[cobertura]]></category>

		<category><![CDATA[findbugs]]></category>

		<category><![CDATA[junit]]></category>

		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=88</guid>
		<description><![CDATA[Segue um script que gera via Ant os relatórios:	Findbugs
	Cobertura
	Testes Unitários

]]></description>
			<content:encoded><![CDATA[Segue um script que gera via Ant os relatórios:<ul><br />	<li>Findbugs</li>
	<li>Cobertura</li>
	<li>Testes Unitários</li>
</ul>
<script src="http://gist.github.com/180459.js"></script>]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=88</wfw:commentRss>
		</item>
		<item>
		<title>MacBook não &#8216;acorda&#8217;</title>
		<link>http://blog.mangar.com.br/?p=85</link>
		<comments>http://blog.mangar.com.br/?p=85#comments</comments>
		<pubDate>Sun, 08 Mar 2009 12:46:54 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=85</guid>
		<description><![CDATA[Recentemente o Renato Carvalho teve problema com seu MBPro, após fechar a tela e hibernar a máquina simplesmente não acordava.Depois que eu comprei um Might Mouse sem fio comecei a enfrentar o mesmo problema.Encontrei a pouco em um forum a possível solução: Desabilite a opção: &#8220;Allow Bluetooth devices to wake up this computer&#8221; nas configurações [...]]]></description>
			<content:encoded><![CDATA[Recentemente o <a href="http://renatocarvalho.com/" target="_blank">Renato Carvalho</a> teve problema com seu MBPro, após fechar a tela e hibernar a máquina simplesmente não acordava.<br /><br />Depois que eu comprei um Might Mouse sem fio comecei a enfrentar o mesmo problema.<br /><br />Encontrei a pouco em um <a href="http://discussions.apple.com/thread.jspa?threadID=1768372&#038;tstart=15" target="_blank">forum</a> a possível solução: Desabilite a opção: &#8220;Allow Bluetooth devices to wake up this computer&#8221; nas configurações avançadas do Bluetooth.<br /><br />Aparentemente agora está tudo funcionando.]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=85</wfw:commentRss>
		</item>
		<item>
		<title>Ubuntu + Ruby on Rails + Apache + Passenger</title>
		<link>http://blog.mangar.com.br/?p=84</link>
		<comments>http://blog.mangar.com.br/?p=84#comments</comments>
		<pubDate>Fri, 16 Jan 2009 03:17:29 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Apache]]></category>

		<category><![CDATA[RubyOnRails]]></category>

		<category><![CDATA[Ubuntu]]></category>

		<category><![CDATA[Passenger]]></category>

		<category><![CDATA[RoR]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=84</guid>
		<description><![CDATA[Guia expresso para instalação de um ambiente de produção RoR/Apache/Passenger no Ubuntusudo apt-get install rubygems
&#160;
sudo gem install rails
&#160;
sudo apt-get install ruby
&#160;
sudo apt-get install ruby rdoc irb libyaml-ruby libzlib-ruby ri libopenssl-ruby
&#160;
wget http://rubyforge.rubyuser.de/rubygems/rubygems-1.3.1.tgz
&#160;
tar xzvf rubygems-1.3.1.tgz 
&#160;
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
&#160;
sudo mv /usr/bin/gem /usr/bin/gem-old
&#160;
sudo gem update --system
&#160;
sudo gem install rails
&#160;
sudo apt-get install build-essential ruby1.8-dev
&#160;
sudo gem install mongrel
&#160;
sudo gem [...]]]></description>
			<content:encoded><![CDATA[Guia expresso para instalação de um ambiente de produção RoR/Apache/Passenger no Ubuntu<br /><br /><pre class="devcodeblock" title="Gnuplot"><input type="hidden" value=""><pre class="devcode">sudo apt<span style="color: #000; font-weight: bold;">-</span>get install rubygems
&nbsp;
sudo gem install rails
&nbsp;
sudo apt<span style="color: #000; font-weight: bold;">-</span>get install ruby
&nbsp;
sudo apt<span style="color: #000; font-weight: bold;">-</span>get install ruby rdoc irb libyaml<span style="color: #000; font-weight: bold;">-</span>ruby libzlib<span style="color: #000; font-weight: bold;">-</span>ruby ri libopenssl<span style="color: #000; font-weight: bold;">-</span>ruby
&nbsp;
wget http<span style="color: #000; font-weight: bold;">://</span>rubyforge<span style="color: #000; font-weight: bold;">.</span>rubyuser<span style="color: #000; font-weight: bold;">.</span>de<span style="color: #000; font-weight: bold;">/</span>rubygems<span style="color: #000; font-weight: bold;">/</span>rubygems<span style="color: #000; font-weight: bold;">-</span>1<span style="color: #000; font-weight: bold;">.</span>3<span style="color: #000; font-weight: bold;">.</span>1<span style="color: #000; font-weight: bold;">.</span>tgz
&nbsp;
tar xzvf rubygems<span style="color: #000; font-weight: bold;">-</span>1<span style="color: #000; font-weight: bold;">.</span>3<span style="color: #000; font-weight: bold;">.</span>1<span style="color: #000; font-weight: bold;">.</span>tgz 
&nbsp;
sudo ln <span style="color: #000; font-weight: bold;">-</span>s <span style="color: #000; font-weight: bold;">/</span>usr<span style="color: #000; font-weight: bold;">/</span>bin<span style="color: #000; font-weight: bold;">/</span>gem1<span style="color: #000; font-weight: bold;">.</span>8 <span style="color: #000; font-weight: bold;">/</span>usr<span style="color: #000; font-weight: bold;">/</span>bin<span style="color: #000; font-weight: bold;">/</span>gem
&nbsp;
sudo mv <span style="color: #000; font-weight: bold;">/</span>usr<span style="color: #000; font-weight: bold;">/</span>bin<span style="color: #000; font-weight: bold;">/</span>gem <span style="color: #000; font-weight: bold;">/</span>usr<span style="color: #000; font-weight: bold;">/</span>bin<span style="color: #000; font-weight: bold;">/</span>gem<span style="color: #000; font-weight: bold;">-</span>old
&nbsp;
sudo gem <span style="color: #b1b100;">update</span> <span style="color: #000; font-weight: bold;">--</span><span style="color: #b1b100;">system</span>
&nbsp;
sudo gem install rails
&nbsp;
sudo apt<span style="color: #000; font-weight: bold;">-</span>get install build<span style="color: #000; font-weight: bold;">-</span>essential ruby1<span style="color: #000; font-weight: bold;">.</span>8<span style="color: #000; font-weight: bold;">-</span>dev
&nbsp;
sudo gem install mongrel
&nbsp;
sudo gem install capistrano
&nbsp;
sudo apt<span style="color: #000; font-weight: bold;">-</span>get install mysql<span style="color: #000; font-weight: bold;">-</span>client mysql<span style="color: #000; font-weight: bold;">-</span>admin mysql<span style="color: #000; font-weight: bold;">-</span>query<span style="color: #000; font-weight: bold;">-</span>browser libmysqlclient15<span style="color: #000; font-weight: bold;">-</span>dev
&nbsp;
sudo apt<span style="color: #000; font-weight: bold;">-</span>get install sqlite3 swig libsqlite3<span style="color: #000; font-weight: bold;">-</span>ruby libsqlite3<span style="color: #000; font-weight: bold;">-</span>dev
&nbsp;
sudo gem install sqlite3<span style="color: #000; font-weight: bold;">-</span>ruby
&nbsp;
echo <span style="color: #0000ff;">&quot;export RUBYOPT=rubygems&quot;</span> <span style="color: #000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000; font-weight: bold;">~/.</span>profile
&nbsp;
sudo apt<span style="color: #000; font-weight: bold;">-</span>get install build<span style="color: #000; font-weight: bold;">-</span>essential apache2<span style="color: #000; font-weight: bold;">-</span>mpm<span style="color: #000; font-weight: bold;">-</span>prefork apache2<span style="color: #000; font-weight: bold;">-</span>prefork<span style="color: #000; font-weight: bold;">-</span>dev libapr1<span style="color: #000; font-weight: bold;">-</span>dev
&nbsp;
sudo gem install passenger
&nbsp;
sudo passenger<span style="color: #000; font-weight: bold;">-</span>install<span style="color: #000; font-weight: bold;">-</span>apache2<span style="color: #000; font-weight: bold;">-</span>module
&nbsp;
</pre></pre>]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=84</wfw:commentRss>
		</item>
		<item>
		<title>BlipBadge escolhido!</title>
		<link>http://blog.mangar.com.br/?p=83</link>
		<comments>http://blog.mangar.com.br/?p=83#comments</comments>
		<pubDate>Sun, 04 Jan 2009 23:44:10 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=83</guid>
		<description><![CDATA[  O BlipBadge foi escolhido pelo Mergulhão e pela HostNet para ter um ano de hospedagem grátis!Obrigado pela confiança e vamos que vamos dar uma melhorada no Badge e colocá-lo na casa nova!Obrigado Mergulhão!Obrigado HostNet!Segue o link do resultado: resultado-da-promo-o-de-natal-da-hostnet ]]></description>
			<content:encoded><![CDATA[ <br /><br /><center><img src="http://blipbadge.marciogarcia.com/images/sample1.png" border="0" alt="" /></center> <br /><br />O <a href="http://blipbadge.marciogarcia.com/" target="_blank">BlipBadge</a> foi escolhido pelo <a href="http://mergulhao.info/" target="_blank">Mergulhão</a> e pela <a href="http://hostnet.com.br/" target="_blank">HostNet</a> para ter um ano de hospedagem grátis!<br /><br />Obrigado pela confiança e vamos que vamos dar uma melhorada no Badge e colocá-lo na casa nova!<br /><br />Obrigado Mergulhão!<br /><br />Obrigado HostNet!<br /><br />Segue o link do resultado: <a href="http://mergulhao.info/2009/1/4/resultado-da-promo-o-de-natal-da-hostnet/comments/223#comment-223" target="_blank">resultado-da-promo-o-de-natal-da-hostnet</a><br /><br /> ]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=83</wfw:commentRss>
		</item>
		<item>
		<title>Wordle.net</title>
		<link>http://blog.mangar.com.br/?p=81</link>
		<comments>http://blog.mangar.com.br/?p=81#comments</comments>
		<pubDate>Sun, 04 Jan 2009 02:05:09 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=81</guid>
		<description><![CDATA[My Wordle.net delicious: First:   
 Second:   


]]></description>
			<content:encoded><![CDATA[My Wordle.net delicious:<br /><table width="100%"><tr><br /> <td><br />First: <br /><br /><a title="Wordle: mangar-delicious-01" href="http://www.wordle.net/gallery/wrdl/416686/mangar-delicious-01"><br /><img style="padding:4px;border:1px solid #ddd" src="http://www.wordle.net/thumb/wrdl/416686/mangar-delicious-01" alt="Wordle: mangar-delicious-01" /></a><br />  </td>
 <td><br />Second: <br /><br /><a title="Wordle: mangar-delicious-02" href="http://www.wordle.net/gallery/wrdl/416689/mangar-delicious-02"><br /><img style="padding:4px;border:1px solid #ddd" src="http://www.wordle.net/thumb/wrdl/416689/mangar-delicious-02" alt="Wordle: mangar-delicious-02" /></a><br />  </td>
</tr>
</table>
<br /><br />]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=81</wfw:commentRss>
		</item>
		<item>
		<title>QA em time de Scrum</title>
		<link>http://blog.mangar.com.br/?p=79</link>
		<comments>http://blog.mangar.com.br/?p=79#comments</comments>
		<pubDate>Fri, 02 Jan 2009 03:34:22 +0000</pubDate>
		<dc:creator>Marcio</dc:creator>
		
		<category><![CDATA[Agile Development]]></category>

		<category><![CDATA[Metodologia]]></category>

		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://blog.mangar.com.br/?p=79</guid>
		<description><![CDATA[Em um time de projetos utilizando a metodologia Scrum, seria um pouco &#8220;estranho&#8221; perguntar:Qual o papel de XX departamento em um time de Scrum?
Afinal, em um time de Scrum o princípio é de que o time seja multidisciplinar, qual seria a dúvida por tanto?Bom, talvez em empresas focadas em desenvolvimento de software ou em empresas [...]]]></description>
			<content:encoded><![CDATA[Em um time de projetos utilizando a metodologia Scrum, seria um pouco &#8220;estranho&#8221; perguntar:<br /><blockquote>Qual o papel de XX departamento em um time de Scrum?</blockquote>
Afinal, em um time de Scrum o princípio é de que o time seja multidisciplinar, qual seria a dúvida por tanto?<br /><br />Bom, talvez em empresas focadas em desenvolvimento de software ou em empresas de menor porte isso seja uma realidade, onde todos do time tenha suas preferências técnicas e sejam melhores em determinadas áreas que em outras, mas no final das contas todos fazem de tudo um pouco, desde html até codificação de EJBs no backend.<br /><br />Em empresas cujo a herança seja o tradicional departamento/áreas, como: Qualidade (QA), Administração de Banco de Dados (DBA), Layout, Design, Usabilidade, etc&#8230;.. fica praticamente impossível de se quebrar este paradigma, que na verdade está muito mais atrelado a vaidade dos departamentos (vaidade não no termo pejorativo, afinal, precisamos de especialistas) do que em quebra de paradigma propriamente dito, especialmente se a empresa for de médio a grande porte, afinal a primeira preocupação de quem não acredita/gosta de desenvolvimento ágil seria de medo, pois o <em>status quo</em> está sendo ameaçado. Claro!<br /><br />Este post foi originado após uma conversa com um grande amigo meu, <a href="http://www.fnbrandao.com.br/blog/" target="_blank">Fábio Brandão</a> na noite do dia 01/01/2009, (pois é, viciado que é viciado só melhora após a terceira ou quarta linha de código compilado <img src='http://blog.mangar.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) a respeito de alguns problemas com papéis/departamentos X Scrum, vou tratar neste post, um detalhe mais específico a respeito do Papel de QA (Qualidade) em um time de Scrum e as idéias que me perturbam a respeito.<br /><h3>Qualidade em Casa (QA em time de QA)</h3>
Fique claro que quando digo: papel de QA estou me referindo ao contexto que disse logo acima, onde existe um departamento de Qualidade e que o time de desenvolvedores não necessariamente faz o trabalho de QA.<br /><br />Eu sempre trabalhei em empresas onde existia um time de qualidade verificando o sistema de forma manual ou automática, navegando pelo sistema, algumas vezes com uma planilha com os pontos de atenção, estes são os pontos que não poderia haver nenhuma fala, chamado risco 0 (risco zero), outra planilha com as novas features implementadas que não precisavam ter necessariamente risco 0, e uma terceira planilha com as <em>issues</em>, onde seria devidamente registrados os erros encontrados.<br /><br />Após o programador (algumas vezes eu) sinalizar no sistema ou face-2-face que o desenvolvimento estava concluído, entrava em campo o pessoal da qualidade, agora lendo o documento que utilizei para desenvolver o sistema, retestando o sistema, testando as novas funcionalidades e apontando os erros, enquanto o programador (&#8230;..eu) já estava em um novo caso de uso, esse cara algumas vezes nem se lembrava mais do código do caso de uso passado, estava com foco total no novo caso de uso.<br /><br />Passado algum tempo, o produto estava todo codificado e com vários bugs, logo, hora de corrigir os bugs.<br /><br />Aqueles programadores que mal se lembravam o que haviam jantado na noite passada (provavelmente pizza, pois ficou até tarde na empresa, gerando mais algumas linhas de código sem testes) deveriam começar a corrigir os erros que eles mesmos causaram, que foram levantados pelo pessoal de QA. Agora com um documento mais &#8220;enxuto&#8221; que continham os erros encontrados.<br /><br />Após a maratona de correções, com alguma sorte, o pessoal de Qualidade não encontrariam <strong>os mesmos</strong> erros quando executassem os testes novamente.<br /><h3>Qualidade em time de Scrum?</h3>
Acho que em um time de scrum a abordagem de QA em time de QA é totalmente fora de propósito, afinal a equipe de qualidade estaria fazendo apenas o papel de apurador de erros, seria realmente este o propósito de um time de qualidade? Encontrar erros?<br /><br />Pensando em uma abordagem um pouco mais prática, ágil e proporcional aos excelentes técnicos que trabalham com qualidade, a tarefa devesse ser a de garantir a qualidade de produto como um todo, assim como um programador está apto a desenvolver: frontend, backend, testes unitários, integrados, modelagem de tabelas em objetos, QA deveria minimizar os problemas relacionados ao sistema como um todo, por exemplo: erros visuais, problemas técnicos relacionados a código não performático, erros de escrita em banco de dados, arquitetura, e também negócio.<br /><br />O trabalho estaria terminado, se fossem encontrados erros nestas esferas.<br /><br />Mas então o trabalho de QA seria apenas de encontrar erros no sistema? Seria aquele primo chato que sempre aparece quando menos se deseja?<br /><br />O programador receberia com alegria a notícia de que seu código está errado? Ou que o código recém entregue não está performático?<br /><br />Eu não acredito nisso, definitivamente eu acredito que esta já é uma evolução do &#8220;QA em time de QA&#8221;, mas acredito que esteja longe de ser uma boa abordagem.<br /><h3>Qualidade!</h3>
Como descrito acima, QA deveria ser um supertime, com:<ul><br />	<li> Arquitetos da informação, para assegurar de que os textos estão colocados corretamente;</li>
	<li>Webdesigners e Webmasters, para assegurar que o layout esteja de acordo como foi desenhado e implementado por eles e requisitado pelo Product Owner.</li>
	<li>Arquitetos de sistema, para assegurar que a aplicação esteja performática e que todas as regras corporativa para acesso a legados estejam sendo cumpridas.</li>
	<li>Programadores:  para assegurar que o código está bem feito, com cobertura de X% de testes unitários, funcionais</li>
	<li>Analistas de negócio: para assegurar que o que foi pedido pelo Product Owner esteja de acordo com o que está sendo codificado.</li>
	<li>Administradores de Dados: assegurando que o modelo desenhado esteja coerente com os padrões da empresa e esteja normalizado</li>
	<li>Administradores de Banco de Dados</li>
</ul>
Com este super time de qualidade, acho que ficaria difícil justificar financeiramente este time.<br /><br />Mas se o problema é dinheiro(falta de), o que fazer então?<br /><br />Eliminar a qualidade do time?<br /><br />De forma alguma!<br /><br />Acredito cegamente que se o time, TODOS do time estiverem motivados, balizados com o que deve e o que não deve ser feito especialmente nas áreas em que não são especialistas o time deve servir de seus próprios QA&#8217;s.<br /><br />Em um ambiente propício, onde existe motivação isso acontece de forma natural, onde um programador dá palpite no código do outro programador, o administrador de dados está disposto a alterar o modelo de dados para melhorar o desenvolvimento, o webdesigner trabalha de forma parceira com o programador para definir o que será retornado no JSON da chamada Ajax, o analista de negócio está ao lado do desenvolvimento alertando para os erros cometidos (ainda em tempo de desenvolvimento)<br /><br />Em um ambiente como este será que é valido se quer o questionamento sobre o papel de QA em um time de Scrum?<br /><br />Acho que não, pois todos estão AGINDO de forma a assegurar a qualidade técnica e não técnica da solução que está sendo implementada.<br /><br />Talvez a pergunta correta desde o início desde post devesse ser:<br /><blockquote>Como motivar um time?</blockquote>
Isto será uma conversa para outro post, mas acho que resposta de forma bem curta seria&#8230;&#8230;&#8230;&#8230;&#8230;.. Paixão!<br /><br />PS: Utilizei o time de QA apenas para exemplificar, fica a critério do leitor substituir QA, por AD, DBA, Business, ou qualquer outro time que achar interessante.]]></content:encoded>
			<wfw:commentRss>http://blog.mangar.com.br/?feed=rss2&amp;p=79</wfw:commentRss>
		</item>
	</channel>
</rss>
